[
  {
    "path": "CMakeLists.txt",
    "content": "﻿\n# Set the deployment target\n# According to\n#   https://cmake.org/cmake/help/v3.0/variable/CMAKE_OSX_DEPLOYMENT_TARGET.html\n# this has to be done before the first project() invocation.\n#\n# However, inside the mendeley desktop build system this means that the following\n# line will actually be ignored, since we're doing that already on the top level\n# of the build system.\n\nif(NOT MENDELEY_DESKTOP_BUILD)\n\tif(SUPPORT_OSX_SNOW_LEOPARD)\n\t\tset(CMAKE_OSX_DEPLOYMENT_TARGET 10.6)\n\telse()\n\t\tset(CMAKE_OSX_DEPLOYMENT_TARGET 10.7)\n\tendif()\nendif()\n\nproject(updater)\n\ncmake_minimum_required(VERSION 2.6)\nenable_testing()\nset(CMAKE_MODULE_PATH \"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules\")\n\n# If the SIGN_UPDATER option is enabled, the updater.exe\n# binary is digitally signed on Windows after it has been built.\n#\n# The script used to sign the binary is specified by BINARY_SIGNING_TOOL.\n# This tool must take a single argument which is the filename of the\n# binary to sign.\noption(SIGN_UPDATER \"Enable signing of the updater binary\" OFF)\nset(BINARY_SIGNING_TOOL sign-updater.bat CACHE PATH \"Path to the tool used to sign the updater\")\n\ninclude_directories(external)\ninclude_directories(external/TinyThread/source)\n\nif (WIN32)\n    include_directories(external/zlib/)\n    include_directories(external/bzip2)\n    include_directories(external/win32cpp/include)\n\n    # - Link the updater binary statically with the Visual C++ runtime\n    #   so that the executable can function standalone.\n    # - Enable PDB generation for release builds\n    #\n    # The /MT flag is specified separately for each build\n    # type rather than setting it in the CMAKE_(C|CXX)_FLAGS vars\n    # because otherwise they are overridden by the /MT switch in the\n    # default flags for CMAKE_(C|CXX)_FLAGS_(DEBUG|RELWITHDEBINFO)\n\n    set(CMAKE_CXX_FLAGS_DEBUG \"/MTd\")\n    set(CMAKE_C_FLAGS_DEBUG \"/MTd\")\n\n    set(CMAKE_CXX_FLAGS_RELWITHDEBINFO \"/MT\")\n    set(CMAKE_C_FLAGS_RELWITHDEBINFO \"/MT\")\n\n    set(CMAKE_CXX_FLAGS_RELEASE \"/MT /Zi /O2 /Ob2 /D NDEBUG\")\n    set(CMAKE_C_FLAGS_RELEASE \"/MT /Zi /O2 /Ob2 /D NDEBUG\")\n\n    remove_definitions(-DUNICODE -D_UNICODE)\nelse()\n    # optimize for reduced code size\n    set(CMAKE_CXX_FLAGS_RELEASE \"-Os\")\n    set(CMAKE_C_FLAGS_RELEASE \"-Os\")\nendif()\n\nif(NOT MENDELEY_DESKTOP_BUILD)\n    if (APPLE)\n        # Build the updater as a dual 32/64bit binary.  If only one architecture\n        # is required, removing the other architecture will reduce the size\n        # of the updater binary\n        set(CMAKE_OSX_ARCHITECTURES i386;x86_64)\n    endif()\nendif()\n\nadd_subdirectory(src)\nadd_subdirectory(external/AnyOption)\nadd_subdirectory(external/minizip)\nadd_subdirectory(external/tinyxml)\nadd_subdirectory(external/TinyThread)\n\n"
  },
  {
    "path": "LICENSE",
    "content": "\nThis project is licensed under a BSD license.\n\nThe Mendeley Desktop icon graphics and name are trademarks of Mendeley Ltd.\nand must be removed or replaced - see src/AppInfo.cpp and the files\nin src/resources.\n\n=== \n\nCopyright (c) 2011, Mendeley Ltd.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n    Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n    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.\n\nTHIS 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 HOLDER 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.\n"
  },
  {
    "path": "README.md",
    "content": "This tool is a component of a cross-platform auto-update system.\nIt is responsible for performing the installation of an update after\nthe necessary files have been downloaded to a temporary directory.\n\nIt was originally written for use with Mendeley Desktop (see www.mendeley.com)\n\nThe tool consists of a single small binary which performs update installation,\nan XML file format describing the contents of an update (an 'update script') \nand a tool to create update scripts from a directory containing an installed application.\n\nTo perform an update, the application (or another separate tool) needs to download\nthe updater binary, an update script and one or more compressed packages\ncontaining the files for the update to a temporary directory.  It then needs\nto invoke the updater, specifying the location where the application is installed,\nthe location of the compressed packages and the path to the update script.\n\nOnce the updater has been started, it:\n\n 1. Waits for the application to exit\n 2. Acquires the necessary priviledges to install the updates, prompting\n    the user if necessary.\n 3. Installs the updates, displaying progress to the user in a small dialog \n 4. Performs cleanup and any additional actions required as part of the update\n 5. Starts the new version of the main application.\n\n In the event of a failure during the update, the installation is rolled back\n to its previous state and a message is presented to the user.\n\n## Building the Updater\n\n Create a new directory for the build and from that directory run:\n\n    cmake <path to source directory>\n    make\n\n The updater binary will be built in the src/ directory.\n\n You should also run the tests in src/tests to verify that the updater is\n functioning correctly.\n\n## Preparing an Update\n\n 1. Create a directory containing your application's files,\n    laid out in the same way and with the same permissions as they would be when installed.\n 2. Create a config file specifying how the application's files should be\n    partitioned into packages - see tools/config-template.json\n 3. Use the tools/create-packages.rb script to create a file_list.xml file\n    and a set of package files required for updates.\n 4. Upload the file_list.xml file and packages to a server\n\n After step 4 is done, you need to notify existing installs that an update\n is available.  The installed application then needs to download the\n relevant packages, file_list.xml file and updater binary to a temporary\n directory and invoke the updater.\n\n See doc/update-hosting for more details on hosting and delivering the updates.\n\n## Invoking the Updater\n\n Once the application has downloaded an update, it needs to invoke it.  The syntax is:\n\n    updater --install-dir <install-dir> --package-dir <package-dir> --script <script file>\n\n Where `<install-dir>` is the directory which the application is installed into,\n `<package-dir>` is the directory containing the packages required for the update\n and `<script>` is the `file_list.xml` file describing the update.\n\n Once the updater has run, it will launch the file specified in the `file_list.xml` file\n as being the main application binary.\n\n See the updater test in `src/tests/test-update.rb` for an example\n of how to invoke the updater.\n\n You should design the process used to download and launch the updater so that new\n versions of the updater itself can be delivered as part of the update if necessary.\n\n## Customizing the Updater\n\n To customize the application name, organization and messages displayed by the updater:\n\n  1. Edit the AppInfo class (in AppInfo.h, AppInfo.cpp) to set the name\n     of the application and associated organization.\n  2. Replace the icons in src/resources\n  3. Change the product name and organization in src/resources/updater.rc\n  4. If you are building the updater on Windows and have a suitable Authenticode\n     certificate, use it to sign the Windows binary.  This will make the application\n\t show a less scary UAC prompt if administrator permissions are required\n\t to complete the installation.\n\n## Updater Dependencies\n\n The external dependencies of the updater binary are:\n\n * The C/C++ runtime libraries (Linux, Mac),\n * pthreads (Linux, Mac),\n * zlib (Linux, Mac)\n * native UI library (Win32 API on Windows, Cocoa on Mac, GTK on Linux if available)\n\n## Full and Delta Updates\n\n The simplest auto-update implementation is for existing installs\n to download a complete copy of the new version and install it.  This is\n appropriate if a full download and install will not take a long time for most users\n (eg. if the application is small or they have a fast internet connection).\n\n With this tool, a full-update involves putting all files in a build of\n the application into a single package.\n\n To reduce the download size, delta updates can be created which only include\n the necessary files or components to update from the old to the new version.\n\n The file_list.xml file format can be used to represent either a complete\n install - in which every file that makes up the application is included,\n or a delta update - in which case only new or updated files and packages\n are included.\n\n There are several ways in which this can be done:\n\n * Pre-computed Delta Updates\n  For each release, create a full update plus delta updates from the\n  previous N releases.  Users of recent releases will receive a small\n  delta update.  Users of older releases will receive the full update.\n\n * Server-computed Delta Updates\n  The server receives a request for an update from client version X and in response,\n  computes an update from version X to the current version Y, possibly\n  caching that information for future use.  The client then receives the\n  delta file_list.xml file and downloads only the listed packages.\n\n  Applications such as Chrome and Firefox use a mixture of the above methods.\n\n * Client-computed Delta Updates\n  The client downloads the file_list.xml file for the latest version and\n  computes a delta update file locally.  It then downloads only the required\n  packages and invokes the updater, which installs only the changed or updated\n  files from those packages.\n\n  This is similar to Linux package management systems.\n"
  },
  {
    "path": "cmake/modules/GenerateCppResourceFile.cmake",
    "content": "\n# Convert a binary data file into a C++\n# source file for embedding into an application binary\n#\n# Currently only implemented for Unix.  Requires the 'xxd'\n# tool to be installed.\n#\n# TARGET_NAME : The name of the target to generate\n#\n# INPUT_DIR   : The directory containing the input binary data file\n#\n# INPUT_FILE  : The name of the binary data file in ${INPUT_DIR} to be converted into a C++\n#               source file.  The name of the input file will be used as the basis for the\n#               symbols in the generated C++ file referring to the data buffer and its length.\n#\n# CPP_FILE    : The path of the C++ source file to be generated.\n#               See the documentation for xxd for information on\n#               the structure of the generated source file.\n#\nfunction (generate_cpp_resource_file TARGET_NAME INPUT_DIR INPUT_FILE CPP_FILE)\n\tadd_custom_command(OUTPUT ${CPP_FILE} COMMAND cd ${INPUT_DIR} && xxd -i ${INPUT_FILE} ${CPP_FILE}\n\t                   DEPENDS ${INPUT_DIR}/${INPUT_FILE})\n\tadd_custom_target(${TARGET_NAME} ALL DEPENDS ${CPP_FILE})\nendfunction()\n"
  },
  {
    "path": "doc/update-hosting",
    "content": "This project includes a tool for installing updates and specifies an XML-based\nfile format for describing the contents of a release.  It does not include\nthe client-side tools to detect the availability of updates, download\nupdates that are found and invoke the update installer.  It also does\nnot include the relevant server-side components.  You will need to write\ntools to do this.\n\nThe simplest option is to create, for each platform, a file_list.xml file and .zip\nfile containing the complete contents of the application on that platform.\n\n 1. Modify the file_list.xml file generated by the create_packages.rb script \n    to include <source> URLs specifying where to download the packages from and\n\tthen upload this modified file_list.xml file plus the compressed .zip packages to a server.\n\n 2. The client application should then periodically fetch the file_list.xml for the latest release\n    from a fixed URL (eg. http://www.yourdomain.com/updates/$PLATFORM/file_list.xml)\n    and check whether it is newer than the installed version, by checking the <targetVersion> element in the file.\n\t\n 3. If a newer version is available, the client should download the updater and .zip packages to a temporary directory\n    and invoke the updater to install the new version.\n\nA more sophisticated option is to store the file_list.xml file and packages for each release\non the server.  When the client checks for an update:\n\n 1. On the server, determine whether a newer version is available and if so,\n    determine the target version for the update.  If you want to have multiple 'channels'\n\tof updates (eg. stable channel, beta channel, development channel) then you can change\n\tthe target version depending on which channel the user is in.\n\n 2. Parse the file_list.xml for the client's current version and the\n    target version and generate a delta file_list.xml file listing only the\n    packages and files that have changed.\n\n 3. Return the delta file_list.xml file to the client, which then downloads the necessary\n    packages and installs the updates.\n\n"
  },
  {
    "path": "external/AnyOption/CMakeLists.txt",
    "content": "project(AnyOption)\n\ncmake_minimum_required(VERSION 2.6)\n\nadd_library(anyoption\n  anyoption.cpp\n  anyoption.h\n)\n\n"
  },
  {
    "path": "external/AnyOption/README",
    "content": "\nhttp://www.hackorama.com/anyoption/\n\nAnyOption is a C++ class for easy parsing of complex commandline options. It also parses options from a rsourcefile in option value pair format. \n\nAnyOption implements the traditional POSIX style character options ( -n ) as well as the newer GNU style long options ( --name ). Or you can use a simpler long option version ( -name ) by asking to ignore the POSIX style options. \n\nAnyOption supports the traditional UNIX resourcefile syntax of, any line starting with \"#\" is a comment and the value pairs use \":\" as a delimiter. \n\nAn option which expects a value is considered as an option value pair, while options without a value are considered flags. \n\nPlease read the header file for the documented public interface, and demo.cpp for an example of how easy it is to use AnyOption. \n\nAugust 2004, added bug-fixes, and updates send by Michael Peters of Sandia Lab. \nSeptember 2006, fix from Boyan Asenov for a bug in mixing up option type indexes. \nJuly 2011, fix from Min KJ and Costantino G for string allocation. \n"
  },
  {
    "path": "external/AnyOption/anyoption.cpp",
    "content": "/*\n * AnyOption 1.3  \n *\n * kishan at hackorama dot com  www.hackorama.com JULY 2001 \n *\n * + Acts as a common facade class for reading \n *   commandline options as well as options from\n *   an optionfile with delimited type value pairs \n *\n * + Handles the POSIX style single character options ( -w )\n *   as well as the newer GNU long options ( --width )\n * \n * + The option file assumes the traditional format of\n *   first character based comment lines and type value\n *   pairs with a delimiter , and flags which are not pairs\n * \n *  \t# this is a coment\n *  \t# next line is an option value pair\n *  \twidth : 100\n *     \t# next line is a flag \n *      noimages   \n * \n * + Supports printing out Help and Usage  \n * \n * + Why not just use getopt() ? \n *\n *   getopt() Its a POSIX standard not part of ANSI-C. \n *   So it may not be available on platforms like Windows.\n *\n * + Why it is so long ?\n *\n *   The actual code which does command line parsing \n *   and option file parsing are done in  few methods. \n *   Most of the extra code are for providing a flexible\n *   common public interface to both a resourcefile and\n *   and command line supporting POSIX style and  \n *   GNU long option as well as mixing of both. \n * \n * + Please see \"anyoption.h\" for public method descriptions \n *   \n */\n\n/* Updated Auguest 2004 \n * Fix from  Michael D Peters (mpeters at sandia.gov) \n * to remove static local variables, allowing multiple instantiations \n * of the reader (for using multiple configuration files).  There is\n * an error in the destructor when using multiple instances, so you\n * cannot delete your objects (it will crash), but not calling the \n * destructor only introduces a small memory leak, so I\n * have not bothered tracking it down.\n *\n * Also updated to use modern C++ style headers, rather than\n * depricated iostream.h (it was causing my compiler problems)\n*/\n\n/* \n * Updated September 2006  \n * Fix from Boyan Asenov for a bug in mixing up option indexes \n * leading to exception when mixing different options types\n */\n\n#include \"anyoption.h\"\n\n#include <string.h>\n\nAnyOption::AnyOption()\n{\n\tinit();\n}\n\nAnyOption::AnyOption(int maxopt)\n{\n\tinit( maxopt , maxopt );\n}\n\nAnyOption::AnyOption(int maxopt, int maxcharopt)\n{\n\tinit( maxopt , maxcharopt );\n}\n\nAnyOption::~AnyOption()\n{\n\tif( mem_allocated )\n\t\tcleanup();\n}\n\nvoid\nAnyOption::init()\n{\n\tinit( DEFAULT_MAXOPTS , DEFAULT_MAXOPTS );\n}\n\nvoid\nAnyOption::init(int maxopt, int maxcharopt )\n{\n\n\tmax_options \t= maxopt;\n\tmax_char_options = maxcharopt;\n\tmax_usage_lines\t= DEFAULT_MAXUSAGE;\n\tusage_lines\t= 0 ;\n\targc \t\t= 0;\n\targv \t\t= NULL;\n\tposix_style\t= true;\n\tverbose \t= false;\n\tfilename \t= NULL;\n\tappname \t= NULL;\t\n\toption_counter \t= 0;\n\toptchar_counter\t= 0;\n\tnew_argv \t= NULL;\n\tnew_argc \t= 0 ;\n\tmax_legal_args \t= 0 ;\n\tcommand_set \t= false;\n\tfile_set \t= false;\n\tvalues \t\t= NULL;\t\n\tg_value_counter = 0;\n\tmem_allocated \t= false;\n\tcommand_set \t= false;\n\tfile_set\t= false;\n\topt_prefix_char     = '-';\n\tfile_delimiter_char = ':';\n\tfile_comment_char   = '#';\n\tequalsign \t= '=';\n\tcomment       = '#' ;\n\tdelimiter     = ':' ;\n\tendofline     = '\\n';\n\twhitespace    = ' ' ;\n\tnullterminate = '\\0';\n\tset = false;\n\tonce = true;\n\thasoptions = false;\n\tautousage = false;\n\n\tstrcpy( long_opt_prefix , \"--\" );\n\n\tif( alloc() == false ){\n\t\tcout << endl << \"OPTIONS ERROR : Failed allocating memory\" ;\n\t\tcout << endl ;\n\t\tcout << \"Exiting.\" << endl ;\n\t\texit (0);\n\t}\n}\n\nbool\nAnyOption::alloc()\n{\n\tint i = 0 ;\n\tint size = 0 ;\n\n\tif( mem_allocated )\n\t\treturn true;\n\n\tsize = (max_options+1) * sizeof(const char*);\n\toptions = (const char**)malloc( size );\t\n\toptiontype = (int*) malloc( (max_options+1)*sizeof(int) );\t\n\toptionindex = (int*) malloc( (max_options+1)*sizeof(int) );\t\n\tif( options == NULL || optiontype == NULL || optionindex == NULL )\n\t\treturn false;\n\telse\n\t\tmem_allocated  = true;\n\tfor( i = 0 ; i < max_options ; i++ ){\n\t\toptions[i] = NULL;\n\t\toptiontype[i] = 0 ;\n\t\toptionindex[i] = -1 ;\n\t}\n\toptionchars = (char*) malloc( (max_char_options+1)*sizeof(char) );\n\toptchartype = (int*) malloc( (max_char_options+1)*sizeof(int) );\t\n\toptcharindex = (int*) malloc( (max_char_options+1)*sizeof(int) );\t\n\tif( optionchars == NULL || \n            optchartype == NULL || \n            optcharindex == NULL )\n        {\n\t\tmem_allocated = false;\n\t\treturn false;\n\t}\n\tfor( i = 0 ; i < max_char_options ; i++ ){\n\t\toptionchars[i] = '0';\n\t\toptchartype[i] = 0 ;\n\t\toptcharindex[i] = -1 ;\n\t}\n\n\tsize = (max_usage_lines+1) * sizeof(const char*) ;\n\tusage = (const char**) malloc( size );\n\n\tif( usage == NULL  ){\n\t\tmem_allocated = false;\n\t\treturn false;\n\t}\n\tfor( i = 0 ; i < max_usage_lines ; i++ )\n\t\tusage[i] = NULL;\n\n\treturn true;\n}\n\nbool\nAnyOption::doubleOptStorage()\n{\n\toptions = (const char**)realloc( options,  \n\t\t\t((2*max_options)+1) * sizeof( const char*) );\n\toptiontype = (int*) realloc(  optiontype ,  \n\t\t\t((2 * max_options)+1)* sizeof(int) );\t\n\toptionindex = (int*) realloc(  optionindex,  \n\t\t\t((2 * max_options)+1) * sizeof(int) );\t\n\tif( options == NULL || optiontype == NULL || optionindex == NULL )\n\t\treturn false;\n\t/* init new storage */\n\tfor( int i = max_options ; i < 2*max_options ; i++ ){\n\t\toptions[i] = NULL;\n\t\toptiontype[i] = 0 ;\n\t\toptionindex[i] = -1 ;\n\t}\n\tmax_options = 2 * max_options ;\n\treturn true;\n}\n\nbool\nAnyOption::doubleCharStorage()\n{\n\toptionchars = (char*) realloc( optionchars,  \n\t\t\t((2*max_char_options)+1)*sizeof(char) );\n\toptchartype = (int*) realloc( optchartype,  \n\t\t\t((2*max_char_options)+1)*sizeof(int) );\t\n\toptcharindex = (int*) realloc( optcharindex,  \n\t\t\t((2*max_char_options)+1)*sizeof(int) );\t\n\tif( optionchars == NULL || \n\t    optchartype == NULL || \n\t    optcharindex == NULL )\n\t\treturn false;\n\t/* init new storage */\n\tfor( int i = max_char_options ; i < 2*max_char_options ; i++ ){\n\t\toptionchars[i] = '0';\n\t\toptchartype[i] = 0 ;\n\t\toptcharindex[i] = -1 ;\n\t}\n\tmax_char_options = 2 * max_char_options;\t\n\treturn true;\n}\n\nbool\nAnyOption::doubleUsageStorage()\n{\n\tusage = (const char**)realloc( usage,  \n\t\t\t((2*max_usage_lines)+1) * sizeof( const char*) );\n\tif ( usage == NULL )\n\t\treturn false;\n\tfor( int i = max_usage_lines ; i < 2*max_usage_lines ; i++ )\n\t\tusage[i] = NULL;\n\tmax_usage_lines = 2 * max_usage_lines ;\n\treturn true;\n\n}\n\n\nvoid\nAnyOption::cleanup()\n{\n\tfree (options);\n\tfree (optiontype);\n\tfree (optionindex);\t\n\tfree (optionchars);\n\tfree (optchartype);\n\tfree (optcharindex);\n\tfree (usage);\n\tif( values != NULL )\n\t\tfree (values);\n\tif( new_argv != NULL )\n\t\tfree (new_argv);\n}\n\nvoid\nAnyOption::setCommandPrefixChar( char _prefix )\n{\n\topt_prefix_char = _prefix;\n}\n\nvoid\nAnyOption::setCommandLongPrefix( char *_prefix )\n{\n\tif( strlen( _prefix ) > MAX_LONG_PREFIX_LENGTH ){\n\t\t*( _prefix + MAX_LONG_PREFIX_LENGTH ) = '\\0'; \n\t}\n\n\tstrcpy (long_opt_prefix,  _prefix);\n}\n\nvoid\nAnyOption::setFileCommentChar( char _comment )\n{\n\tfile_delimiter_char = _comment;\n}\n\n\nvoid\nAnyOption::setFileDelimiterChar( char _delimiter )\n{\n\tfile_comment_char = _delimiter ;\n}\n\nbool\nAnyOption::CommandSet()\n{\n\treturn( command_set );\n}\n\nbool\nAnyOption::FileSet()\n{\n\treturn( file_set );\n}\n\nvoid\nAnyOption::noPOSIX()\n{\n\tposix_style = false;\n}\n\nbool\nAnyOption::POSIX()\n{\n\treturn posix_style;\n}\n\n\nvoid\nAnyOption::setVerbose()\n{\n\tverbose = true ;\n}\n\nvoid\nAnyOption::printVerbose()\n{\n\tif( verbose )\n\t\tcout << endl  ;\n}\nvoid\nAnyOption::printVerbose( const char *msg )\n{\n\tif( verbose )\n\t\tcout << msg  ;\n}\n\nvoid\nAnyOption::printVerbose( char *msg )\n{\n\tif( verbose )\n\t\tcout << msg  ;\n}\n\nvoid\nAnyOption::printVerbose( char ch )\n{\n\tif( verbose )\n\t\tcout << ch ;\n}\n\nbool\nAnyOption::hasOptions()\n{\n\treturn hasoptions;\n}\n\nvoid\nAnyOption::autoUsagePrint(bool _autousage)\n{\n\tautousage = _autousage;\n}\n\nvoid\nAnyOption::useCommandArgs( int _argc, char **_argv )\n{\n\targc = _argc;\n\targv = _argv;\n\tcommand_set = true;\n\tappname = argv[0];\n\tif(argc > 1) hasoptions = true;\n}\n\nvoid\nAnyOption::useFiileName( const char *_filename )\n{\n\tfilename = _filename;\n\tfile_set = true;\n}\n\n/*\n * set methods for options \n */\n\nvoid\nAnyOption::setCommandOption( const char *opt )\n{\n\taddOption( opt , COMMAND_OPT );\n\tg_value_counter++;\n}\n\nvoid\nAnyOption::setCommandOption( char opt )\n{\n\taddOption( opt , COMMAND_OPT );\n\tg_value_counter++;\n}\n\nvoid\nAnyOption::setCommandOption( const char *opt , char optchar )\n{\n\taddOption( opt , COMMAND_OPT );\n\taddOption( optchar , COMMAND_OPT );\n\tg_value_counter++;\n}\n\nvoid\nAnyOption::setCommandFlag( const char *opt )\n{\n\taddOption( opt , COMMAND_FLAG );\n\tg_value_counter++;\n}\n\nvoid\nAnyOption::setCommandFlag( char opt )\n{\n\taddOption( opt , COMMAND_FLAG );\n\tg_value_counter++;\n}\n\nvoid\nAnyOption::setCommandFlag( const char *opt , char optchar )\n{\n\taddOption( opt , COMMAND_FLAG );\n\taddOption( optchar , COMMAND_FLAG );\n\tg_value_counter++;\n}\n\nvoid\nAnyOption::setFileOption( const char *opt )\n{\n\taddOption( opt , FILE_OPT );\n\tg_value_counter++;\n}\n\nvoid\nAnyOption::setFileOption( char opt )\n{\n\taddOption( opt , FILE_OPT );\n\tg_value_counter++;\n}\n\nvoid\nAnyOption::setFileOption( const char *opt , char optchar )\n{\n\taddOption( opt , FILE_OPT );\n\taddOption( optchar, FILE_OPT  );\n\tg_value_counter++;\n}\n\nvoid\nAnyOption::setFileFlag( const char *opt )\n{\n\taddOption( opt , FILE_FLAG );\n\tg_value_counter++;\n}\n\nvoid\nAnyOption::setFileFlag( char opt )\n{\n\taddOption( opt , FILE_FLAG );\n\tg_value_counter++;\n}\n\nvoid\nAnyOption::setFileFlag( const char *opt , char optchar )\n{\n\taddOption( opt , FILE_FLAG );\n\taddOption( optchar , FILE_FLAG );\n\tg_value_counter++;\n}\n\nvoid\nAnyOption::setOption( const char *opt )\n{\n\taddOption( opt , COMMON_OPT );\n\tg_value_counter++;\n}\n\nvoid\nAnyOption::setOption( char opt )\n{\n\taddOption( opt , COMMON_OPT );\n\tg_value_counter++;\n}\n\nvoid\nAnyOption::setOption( const char *opt , char optchar )\n{\n\taddOption( opt , COMMON_OPT );\n\taddOption( optchar , COMMON_OPT );\n\tg_value_counter++;\n}\n\nvoid\nAnyOption::setFlag( const char *opt )\n{\n\taddOption( opt , COMMON_FLAG );\n\tg_value_counter++;\n}\n\nvoid\nAnyOption::setFlag( const char opt )\n{\n\taddOption( opt , COMMON_FLAG );\n\tg_value_counter++;\n}\n\nvoid\nAnyOption::setFlag( const char *opt , char optchar )\n{\n\taddOption( opt , COMMON_FLAG );\n\taddOption( optchar , COMMON_FLAG );\n\tg_value_counter++;\n}\n\nvoid\nAnyOption::addOption( const char *opt, int type )\n{\n\tif( option_counter >= max_options ){\n\t\tif( doubleOptStorage() == false ){\n\t\t\taddOptionError( opt );\n\t\t\treturn;\n\t\t}\n\t}\n\toptions[ option_counter ] = opt ;\n\toptiontype[ option_counter ] =  type ;\n\toptionindex[ option_counter ] = g_value_counter; \n\toption_counter++;\n}\n\nvoid\nAnyOption::addOption( char opt, int type )\n{\n\tif( !POSIX() ){\n\t\tprintVerbose(\"Ignoring the option character \\\"\");\n\t\tprintVerbose(  opt );\n\t\tprintVerbose( \"\\\" ( POSIX options are turned off )\" );\n\t\tprintVerbose();\n\t\treturn;\n\t}\n\n\n\tif( optchar_counter >= max_char_options ){\n\t\tif( doubleCharStorage() == false ){\n\t\t\taddOptionError( opt );\n\t\t\treturn;\n\t\t}\n\t}\n\toptionchars[ optchar_counter ] =  opt ;\n\toptchartype[ optchar_counter ] =  type ;\n\toptcharindex[ optchar_counter ] = g_value_counter; \n\toptchar_counter++;\n}\n\nvoid\nAnyOption::addOptionError( const char *opt )\n{\n\tcout << endl ;\n\tcout << \"OPTIONS ERROR : Failed allocating extra memory \" << endl ;\n\tcout << \"While adding the option : \\\"\"<< opt << \"\\\"\" << endl;\n\tcout << \"Exiting.\" << endl ;\n\tcout << endl ;\n\texit(0);\n}\n\nvoid\nAnyOption::addOptionError( char opt )\n{\n\tcout << endl ;\n\tcout << \"OPTIONS ERROR : Failed allocating extra memory \" << endl ;\n\tcout << \"While adding the option: \\\"\"<< opt << \"\\\"\" << endl;\n\tcout << \"Exiting.\" << endl ;\n\tcout << endl ;\n\texit(0);\n}\n\nvoid\nAnyOption::processOptions()\n{\n\tif( ! valueStoreOK() )\n\t\treturn;\n}\n\nvoid \nAnyOption::processCommandArgs(int max_args)\n{\n\tmax_legal_args = max_args;\n\tprocessCommandArgs();\n}\n \nvoid\nAnyOption::processCommandArgs( int _argc, char **_argv, int max_args )\n{\n\tmax_legal_args = max_args;\n\tprocessCommandArgs(  _argc, _argv );\n}\n\nvoid\nAnyOption::processCommandArgs( int _argc, char **_argv )\n{\n\tuseCommandArgs( _argc, _argv );\n\tprocessCommandArgs();\n}\n\nvoid\nAnyOption::processCommandArgs()\n{\n   \tif( ! ( valueStoreOK() && CommandSet() )  )\n\t   return;\n\t   \n\tif( max_legal_args == 0 )\n\t\tmax_legal_args = argc;\n\tnew_argv = (int*) malloc( (max_legal_args+1) * sizeof(int) );\n\tfor( int i = 1 ; i < argc ; i++ ){/* ignore first argv */\n\t\tif(  argv[i][0] == long_opt_prefix[0] && \n                     argv[i][1] == long_opt_prefix[1] ) { /* long GNU option */\n\t\t\tint match_at = parseGNU( argv[i]+2 ); /* skip -- */\n\t\t\tif( match_at >= 0 && i < argc-1 ) /* found match */\n\t\t\t\tsetValue( options[match_at] , argv[++i] );\n\t\t}else if(  argv[i][0] ==  opt_prefix_char ) { /* POSIX char */\n\t\t\tif( POSIX() ){ \n\t\t\t\tchar ch =  parsePOSIX( argv[i]+1 );/* skip - */ \n\t\t\t\tif( ch != '0' && i < argc-1 ) /* matching char */\n\t\t\t\t\tsetValue( ch ,  argv[++i] );\n\t\t\t} else { /* treat it as GNU option with a - */\n\t\t\t\tint match_at = parseGNU( argv[i]+1 ); /* skip - */\n\t\t\t\tif( match_at >= 0 && i < argc-1 ) /* found match */\n\t\t\t\t\tsetValue( options[match_at] , argv[++i] );\n\t\t\t}\n\t\t}else { /* not option but an argument keep index */\n\t\t\tif( new_argc < max_legal_args ){\n                                new_argv[ new_argc ] = i ;\n                                new_argc++;\n                        }else{ /* ignore extra arguments */\n                                printVerbose( \"Ignoring extra argument: \" );\n\t\t\t\tprintVerbose( argv[i] );\n\t\t\t\tprintVerbose( );\n\t\t\t\tprintAutoUsage();\n                        }\n\t\t\tprintVerbose( \"Unknown command argument option : \" );\n\t\t\tprintVerbose( argv[i] );\n\t\t\tprintVerbose( );\n\t\t\tprintAutoUsage();\n\t\t}\n\t}\n}\n\nchar \nAnyOption::parsePOSIX( char* arg )\n{\n\n\tfor( unsigned int i = 0 ; i < strlen(arg) ; i++ ){ \n\t\tchar ch = arg[i] ;\n\t\tif( matchChar(ch) ) { /* keep matching flags till an option */\n\t\t\t/*if last char argv[++i] is the value */\n\t\t\tif( i == strlen(arg)-1 ){ \n\t\t\t\treturn ch;\n\t\t\t}else{/* else the rest of arg is the value */\n\t\t\t\ti++; /* skip any '=' and ' ' */\n\t\t\t\twhile( arg[i] == whitespace \n\t\t\t    \t\t|| arg[i] == equalsign )\n\t\t\t\t\ti++;\t\n\t\t\t\tsetValue( ch , arg+i );\n\t\t\t\treturn '0';\n\t\t\t}\n\t\t}\n\t}\n\tprintVerbose( \"Unknown command argument option : \" );\n\tprintVerbose( arg );\n\tprintVerbose( );\n\tprintAutoUsage();\n\treturn '0';\n}\n\nint\nAnyOption::parseGNU( char *arg )\n{\n\tint split_at = 0;\n\t/* if has a '=' sign get value */\n\tfor( unsigned int i = 0 ; i < strlen(arg) ; i++ ){\n\t\tif(arg[i] ==  equalsign ){\n\t\t\tsplit_at = i ; /* store index */\n\t\t\ti = strlen(arg); /* get out of loop */\n\t\t}\n\t}\n\tif( split_at > 0 ){ /* it is an option value pair */\n\t\tchar* tmp = (char*) malloc(  (split_at+1)*sizeof(char) );\n\t\tfor( int i = 0 ; i < split_at ; i++ )\n\t\t\ttmp[i] = arg[i];\n\t\ttmp[split_at] = '\\0';\n\n\t\tif ( matchOpt( tmp ) >= 0 ){\n\t\t\tsetValue( options[matchOpt(tmp)] , arg+split_at+1 );\n\t\t\tfree (tmp);\n\t\t}else{\n\t\t\tprintVerbose( \"Unknown command argument option : \" );\n\t\t\tprintVerbose( arg );\n\t\t\tprintVerbose( );\n\t\t\tprintAutoUsage();\n\t\t\tfree (tmp);\n\t\t\treturn -1;\n\t\t}\n\t}else{ /* regular options with no '=' sign  */\n\t\treturn  matchOpt(arg);\n\t}\n\treturn -1;\n}\n\n\nint \nAnyOption::matchOpt( char *opt )\n{\n\tfor( int i = 0 ; i < option_counter ; i++ ){\n\t\tif( strcmp( options[i], opt ) == 0 ){\n\t\t\tif( optiontype[i] ==  COMMON_OPT ||\n\t\t\t    optiontype[i] ==  COMMAND_OPT )\t\n\t\t\t{ /* found option return index */\n\t\t\t\treturn i;\n\t\t\t}else if( optiontype[i] == COMMON_FLAG ||\n\t\t\t       optiontype[i] == COMMAND_FLAG )\n\t\t\t{ /* found flag, set it */ \n\t\t\t\tsetFlagOn( opt );\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\tprintVerbose( \"Unknown command argument option : \" );\n\tprintVerbose( opt  ) ;\n\tprintVerbose( );\n\tprintAutoUsage();\n\treturn  -1;\t\n}\nbool\nAnyOption::matchChar( char c )\n{\n\tfor( int i = 0 ; i < optchar_counter ; i++ ){\n\t\tif( optionchars[i] == c ) { /* found match */\n\t\t\tif(optchartype[i] == COMMON_OPT ||\n\t\t\t     optchartype[i] == COMMAND_OPT )\n\t\t\t{ /* an option store and stop scanning */\n\t\t\t\treturn true;\t\n\t\t\t}else if( optchartype[i] == COMMON_FLAG || \n\t\t\t\t  optchartype[i] == COMMAND_FLAG ) { /* a flag store and keep scanning */\n\t\t\t\tsetFlagOn( c );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\tprintVerbose( \"Unknown command argument option : \" );\n\tprintVerbose( c ) ;\n\tprintVerbose( );\n\tprintAutoUsage();\n\treturn false;\n}\n\nbool\nAnyOption::valueStoreOK( )\n{\n\tint size= 0;\n\tif( !set ){\n\t\tif( g_value_counter > 0 ){\n\t\t\tsize = g_value_counter * sizeof(char*);\n\t\t\tvalues = (char**)malloc( size );\t\n\t\t\tfor( int i = 0 ; i < g_value_counter ; i++)\n\t\t\t\tvalues[i] = NULL;\n\t\t\tset = true;\n\t\t}\n\t}\n\treturn  set;\n}\n\n/*\n * public get methods \n */\nchar*\nAnyOption::getValue( const char *option )\n{\n\tif( !valueStoreOK() )\n\t\treturn NULL;\n\n\tfor( int i = 0 ; i < option_counter ; i++ ){\n\t\tif( strcmp( options[i], option ) == 0 )\n\t\t\treturn values[ optionindex[i] ];\n\t}\n\treturn NULL;\n}\n\nbool\nAnyOption::getFlag( const char *option )\n{\n\tif( !valueStoreOK() )\n\t\treturn false;\n\tfor( int i = 0 ; i < option_counter ; i++ ){\n\t\tif( strcmp( options[i], option ) == 0 )\n\t\t\treturn findFlag( values[ optionindex[i] ] );\n\t}\n\treturn false;\n}\n\nchar*\nAnyOption::getValue( char option )\n{\n\tif( !valueStoreOK() )\n\t\treturn NULL;\n\tfor( int i = 0 ; i < optchar_counter ; i++ ){\n\t\tif( optionchars[i] == option )\n\t\t\treturn values[ optcharindex[i] ];\n\t}\n\treturn NULL;\n}\n\nbool\nAnyOption::getFlag( char option )\n{\n\tif( !valueStoreOK() )\n\t\treturn false;\n\tfor( int i = 0 ; i < optchar_counter ; i++ ){\n\t\tif( optionchars[i] == option )\n\t\t\treturn findFlag( values[ optcharindex[i] ] ) ;\n\t}\n\treturn false;\n}\n\nbool\nAnyOption::findFlag( char* val )\n{\n\tif( val == NULL )\n\t\treturn false;\n\n\tif( strcmp( TRUE_FLAG , val ) == 0 )\n\t\treturn true;\n\n\treturn false;\n}\n\n/*\n * private set methods \n */\nbool\nAnyOption::setValue( const char *option , char *value )\n{\n\tif( !valueStoreOK() )\n\t\treturn false;\n        for( int i = 0 ; i < option_counter ; i++ ){\n                if( strcmp( options[i], option ) == 0 ){\n                        values[ optionindex[i] ] = (char*) malloc((strlen(value)+1)*sizeof(char));\n                        strcpy( values[ optionindex[i] ], value );\n\t\t\treturn true;\n\t\t}\n        }\n        return false;\n}\n\nbool\nAnyOption::setFlagOn( const char *option )\n{\n\tif( !valueStoreOK() )\n\t\treturn false;\n        for( int i = 0 ; i < option_counter ; i++ ){\n                if( strcmp( options[i], option ) == 0 ){\n                        values[ optionindex[i] ] = (char*) malloc((strlen(TRUE_FLAG)+1)*sizeof(char));\n                        strcpy( values[ optionindex[i] ]  ,  TRUE_FLAG );\n\t\t\treturn true;\n\t\t}\n        }\n        return false;\n}\n\nbool\nAnyOption::setValue( char option , char *value )\n{\n\tif( !valueStoreOK() )\n\t\treturn false;\n        for( int i = 0 ; i < optchar_counter ; i++ ){\n                if( optionchars[i] == option ){\n                        values[ optcharindex[i] ] = (char*) malloc((strlen(value)+1)*sizeof(char));\n                        strcpy( values[ optcharindex[i] ],  value );\n\t\t\treturn true;\n\t\t}\n        }\n        return false;\n}\n\nbool\nAnyOption::setFlagOn( char option )\n{\n\tif( !valueStoreOK() )\n\t\treturn false;\n        for( int i = 0 ; i < optchar_counter ; i++ ){\n                if( optionchars[i] == option ){\n                        values[ optcharindex[i] ] = (char*) malloc((strlen(TRUE_FLAG)+1)*sizeof(char));\n\t\t\tstrcpy( values[ optcharindex[i] ] , TRUE_FLAG );\n\t\t\treturn true;\n\t\t}\n        }\n        return false;\n}\n\n\nint\nAnyOption::getArgc( )\n{\n\treturn new_argc;\n}\n\nchar* \nAnyOption::getArgv( int index )\n{\n\tif( index < new_argc ){\n\t\treturn ( argv[ new_argv[ index ] ] );\n\t}\n\treturn NULL;\n}\n\n/* dotfile sub routines */\n\nbool\nAnyOption::processFile()\n{\n\tif( ! (valueStoreOK() && FileSet())  )\n\t\treturn false;\n\treturn  ( consumeFile(readFile()) );\n}\n\nbool\nAnyOption::processFile( const char *filename )\n{\n\tuseFiileName(filename );\n\treturn ( processFile() );\n}\n\nchar*\nAnyOption::readFile()\n{\n\treturn ( readFile(filename) );\n}\n\n/*\n * read the file contents to a character buffer \n */\n\nchar*\nAnyOption::readFile( const char* fname )\n{\n        int length;\n        char *buffer;\n        ifstream is;\n        is.open ( fname , ifstream::in );\n        if( ! is.good() ){\n                is.close();\n                return NULL;\n        }\n        is.seekg (0, ios::end);\n        length = is.tellg();\n        is.seekg (0, ios::beg);\n        buffer = (char*) malloc(length*sizeof(char));\n        is.read (buffer,length);\n        is.close();\n        return buffer;\n}\n\n/*\n * scans a char* buffer for lines that does not \n * start with the specified comment character.\n */\nbool\nAnyOption::consumeFile( char *buffer )\n{\n\n        if( buffer == NULL ) \n\t\treturn false;\n\n       \tchar *cursor = buffer;/* preserve the ptr */\n       \tchar *pline = NULL ;\n       \tint linelength = 0;\n       \tbool newline = true;\n       \tfor( unsigned int i = 0 ; i < strlen( buffer ) ; i++ ){\n       \tif( *cursor == endofline ) { /* end of line */\n          \tif( pline != NULL ) /* valid line */\n               \t\tprocessLine( pline, linelength );\n                 \tpline = NULL;\n                 \tnewline = true;\n           \t}else if( newline ){ /* start of line */\n                 \tnewline = false;\n              \t\tif( (*cursor != comment ) ){ /* not a comment */\n\t\t    \t\tpline = cursor ;\n                    \t\tlinelength = 0 ;\n                \t}\n             \t}\n            \tcursor++; /* keep moving */\n            \tlinelength++;\n       \t}\n     \tfree (buffer);\n\treturn true;\n}\n\n\n/*\n *  find a valid type value pair separated by a delimiter \n *  character and pass it to valuePairs()\n *  any line which is not valid will be considered a value\n *  and will get passed on to justValue()\n *\n *  assuming delimiter is ':' the behaviour will be,\n *\n *  width:10    - valid pair valuePairs( width, 10 );\n *  width : 10  - valid pair valuepairs( width, 10 );\n *\n *  ::::        - not valid \n *  width       - not valid\n *  :10         - not valid \n *  width:      - not valid  \n *  ::          - not valid \n *  :           - not valid \n *  \n */\n\nvoid\nAnyOption::processLine( char *theline, int length  )\n{\n        bool found = false;\n        char *pline = (char*) malloc( (length+1)*sizeof(char) );\n        for( int i = 0 ; i < length ; i ++ )\n                pline[i]= *(theline++);\n        pline[length] = nullterminate;\n        char *cursor = pline ; /* preserve the ptr */\n        if( *cursor == delimiter || *(cursor+length-1) == delimiter ){\n                justValue( pline );/* line with start/end delimiter */\n        }else{\n                for( int i = 1 ; i < length-1 && !found ; i++){/* delimiter */\n                        if( *cursor == delimiter ){\n                                *(cursor-1) = nullterminate; /* two strings */\n                                found = true;\n                                valuePairs( pline , cursor+1 );\n                        }\n                        cursor++;\n                }\n                cursor++;\n                if( !found ) /* not a pair */\n                        justValue( pline );\n        }\n        free (pline);\n}\n\n/*\n * removes trailing and preceeding whitespaces from a string\n */\nchar*\nAnyOption::chomp( char *str )\n{\n        while( *str == whitespace )\n                str++;\n        char *end = str+strlen(str)-1;\n        while( *end == whitespace )\n                end--;\n        *(end+1) = nullterminate;\n        return str;\n}\n\nvoid\nAnyOption::valuePairs( char *type, char *value )\n{\n\tif ( strlen(chomp(type)) == 1  ){ /* this is a char option */\n\t\tfor( int i = 0 ; i < optchar_counter ; i++ ){\n\t\t\tif(  optionchars[i] == type[0]  ){ /* match */\n\t\t\t\tif( optchartype[i] == COMMON_OPT ||\n\t\t\t\t    optchartype[i] == FILE_OPT )\n\t\t\t\t{\n\t\t\t \t\tsetValue( type[0] , chomp(value) );\n\t\t\t \t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\t\n\t/* if no char options matched */\n\tfor( int i = 0 ; i < option_counter ; i++ ){\n\t\tif( strcmp( options[i], type ) == 0 ){ /* match */\n\t\t\tif( optiontype[i] == COMMON_OPT ||\n\t\t\t    optiontype[i] == FILE_OPT )\n\t\t\t{\n\t\t \t\tsetValue( type , chomp(value) );\n\t\t \t\treturn;\n\t\t\t}\n\t\t}\n\t}\n        printVerbose( \"Unknown option in resourcefile : \" );\n\tprintVerbose( type );\n\tprintVerbose( );\n}\n\nvoid\nAnyOption::justValue( char *type )\n{\n\n\tif ( strlen(chomp(type)) == 1  ){ /* this is a char option */\n\t\tfor( int i = 0 ; i < optchar_counter ; i++ ){\n\t\t\tif(  optionchars[i] == type[0]  ){ /* match */\n\t\t\t\tif( optchartype[i] == COMMON_FLAG ||\n\t\t\t\t    optchartype[i] == FILE_FLAG )\n\t\t\t\t{\n\t\t\t \t\tsetFlagOn( type[0] );\n\t\t\t \t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\t\n\t/* if no char options matched */\n\tfor( int i = 0 ; i < option_counter ; i++ ){\n\t\tif( strcmp( options[i], type ) == 0 ){ /* match */\n\t\t\tif( optiontype[i] == COMMON_FLAG ||\n\t\t\t    optiontype[i] == FILE_FLAG )\n\t\t\t{\n\t\t \t\tsetFlagOn( type );\n\t\t \t\treturn;\n\t\t\t}\n\t\t}\n\t}\n        printVerbose( \"Unknown option in resourcefile : \" );\n\tprintVerbose( type  );\n\tprintVerbose( );\n}\n\n/*\n * usage and help \n */\n\n\nvoid\nAnyOption::printAutoUsage()\n{\n\tif( autousage ) printUsage();\n}\n\nvoid\nAnyOption::printUsage()\n{\n\t\n\tif( once ) {\n\t\tonce = false ;\n\t\tcout << endl ;\n\t\tfor( int i = 0 ; i < usage_lines ; i++ )\n\t\t\tcout << usage[i] << endl ;\t\n\t\tcout << endl ;\n\t}\n}\n\t\n\t\nvoid\nAnyOption::addUsage( const char *line )\n{\n\tif( usage_lines >= max_usage_lines ){\n\t\tif( doubleUsageStorage() == false ){\n\t\t\taddUsageError( line );\n\t\t\texit(1);\n\t\t}\n\t}\n\tusage[ usage_lines ] = line ;\t\n\tusage_lines++;\n}\n\nvoid\nAnyOption::addUsageError( const char *line )\n{\n\tcout << endl ;\n\tcout << \"OPTIONS ERROR : Failed allocating extra memory \" << endl ;\n\tcout << \"While adding the usage/help  : \\\"\"<< line << \"\\\"\" << endl;\n\tcout << \"Exiting.\" << endl ;\n\tcout << endl ;\n\texit(0);\n\n}\n"
  },
  {
    "path": "external/AnyOption/anyoption.h",
    "content": "#ifndef _ANYOPTION_H\n#define _ANYOPTION_H\n\n#include <iostream>\n#include <fstream>\n#include <stdlib.h>\n#include <string>\n\n#define COMMON_OPT \t1\n#define COMMAND_OPT \t2\n#define FILE_OPT \t3\n#define COMMON_FLAG \t4\n#define COMMAND_FLAG \t5\n#define FILE_FLAG \t6\n\n#define COMMAND_OPTION_TYPE  \t1\n#define COMMAND_FLAG_TYPE \t2\n#define FILE_OPTION_TYPE  \t3\n#define FILE_FLAG_TYPE \t\t4 \n#define UNKNOWN_TYPE \t\t5\n\n#define DEFAULT_MAXOPTS \t10\n#define MAX_LONG_PREFIX_LENGTH \t2\n\n#define DEFAULT_MAXUSAGE\t3\n#define DEFAULT_MAXHELP         10\t\n\n#define TRUE_FLAG \"true\" \n\nusing namespace std;\n\nclass AnyOption \n{\n\npublic: /* the public interface */\n\tAnyOption();\n\tAnyOption(int maxoptions ); \n\tAnyOption(int maxoptions , int maxcharoptions); \n\t~AnyOption();\n\n\t/* \n         * following set methods specifies the  \n\t * special characters and delimiters \n\t * if not set traditional defaults will be used\n         */\n\n\tvoid setCommandPrefixChar( char _prefix );   /* '-' in \"-w\" */\n\tvoid setCommandLongPrefix( char *_prefix );  /* '--' in \"--width\" */\n\tvoid setFileCommentChar( char _comment );    /* '#' in shellscripts */\n\tvoid setFileDelimiterChar( char _delimiter );/* ':' in \"width : 100\" */\n\n\t/* \n\t * provide the input for the options\n         * like argv[] for commndline and the \n         * option file name  to use;\n\t */\n\n\tvoid useCommandArgs( int _argc, char **_argv );\n\tvoid useFiileName( const char *_filename );\n\n\t/* \n         * turn off the POSIX style options \n         * this means anything starting with a '-' or \"--\"\n         * will be considered a valid option \n         * which alo means you cannot add a bunch of \n         * POIX options chars together like \"-lr\"  for \"-l -r\"\n         * \n         */\n\n\tvoid noPOSIX();\n\n\t/*\n         * prints warning verbose if you set anything wrong \n         */\n\tvoid setVerbose();\n\n\n\t/* \n         * there are two types of options  \n         *\n         * Option - has an associated value ( -w 100 )\n         * Flag  - no value, just a boolean flag  ( -nogui )\n         * \n\t * the options can be either a string ( GNU style )\n         * or a character ( traditional POSIX style ) \n         * or both ( --width, -w )\n         *\n         * the options can be common to the commandline and \n         * the optionfile, or can belong only to either of \n         * commandline and optionfile\n         *\n         * following set methods, handle all the aboove \n\t * cases of options.\n         */\n\n\t/* options comman to command line and option file */\n\tvoid setOption( const char *opt_string );\n\tvoid setOption( char  opt_char );\n\tvoid setOption( const char *opt_string , char opt_char );\n\tvoid setFlag( const char *opt_string );\n\tvoid setFlag( char  opt_char );\n\tvoid setFlag( const char *opt_string , char opt_char );\n\n\t/* options read from commandline only */\n\tvoid setCommandOption( const char *opt_string );\n\tvoid setCommandOption( char  opt_char );\n\tvoid setCommandOption( const char *opt_string , char opt_char );\n\tvoid setCommandFlag( const char *opt_string );\n\tvoid setCommandFlag( char  opt_char );\n\tvoid setCommandFlag( const char *opt_string , char opt_char );\n\n\t/* options read from an option file only  */\n\tvoid setFileOption( const char *opt_string );\n\tvoid setFileOption( char  opt_char );\n\tvoid setFileOption( const char *opt_string , char opt_char );\n\tvoid setFileFlag( const char *opt_string );\n\tvoid setFileFlag( char  opt_char );\n\tvoid setFileFlag( const char *opt_string , char opt_char );\n\n\t/*\n         * process the options, registerd using \n         * useCommandArgs() and useFileName();\n         */\n\tvoid processOptions();  \n\tvoid processCommandArgs();\n\tvoid processCommandArgs( int max_args );\n\tbool processFile();\n\n\t/*\n         * process the specified options \n         */\n\tvoid processCommandArgs( int _argc, char **_argv );\n\tvoid processCommandArgs( int _argc, char **_argv, int max_args );\n\tbool processFile( const char *_filename );\n\t\n\t/*\n         * get the value of the options \n\t * will return NULL if no value is set \n         */\n\tchar *getValue( const char *_option );\n\tbool  getFlag( const char *_option );\n\tchar *getValue( char _optchar );\n\tbool  getFlag( char _optchar );\n\n\t/*\n\t * Print Usage\n\t */\n\tvoid printUsage();\n\tvoid printAutoUsage();\n\tvoid addUsage( const char *line );\n\tvoid printHelp();\n        /* print auto usage printing for unknown options or flag */\n\tvoid autoUsagePrint(bool flag);\n\t\n\t/* \n         * get the argument count and arguments sans the options\n         */\n\tint   getArgc();\n\tchar* getArgv( int index );\n\tbool  hasOptions();\n\nprivate: /* the hidden data structure */\n\tint argc;\t\t/* commandline arg count  */\n\tchar **argv;  \t\t/* commndline args */\n\tconst char* filename; \t/* the option file */\n\tchar* appname; \t/* the application name from argv[0] */\n\n\tint *new_argv; \t\t/* arguments sans options (index to argv) */\n\tint new_argc;   \t/* argument count sans the options */\n\tint max_legal_args; \t/* ignore extra arguments */\n\n\n\t/* option strings storage + indexing */\n\tint max_options; \t/* maximum number of options */\n\tconst char **options; \t/* storage */\n\tint *optiontype; \t/* type - common, command, file */\n\tint *optionindex;\t/* index into value storage */\n\tint option_counter; \t/* counter for added options  */\n\n\t/* option chars storage + indexing */\n\tint max_char_options; \t/* maximum number options */\n\tchar *optionchars; \t/*  storage */\n\tint *optchartype; \t/* type - common, command, file */\n\tint *optcharindex; \t/* index into value storage */\n\tint optchar_counter; \t/* counter for added options  */\n\n\t/* values */\n\tchar **values; \t\t/* common value storage */\n\tint g_value_counter; \t/* globally updated value index LAME! */\n\n\t/* help and usage */\n\tconst char **usage; \t/* usage */\n\tint max_usage_lines;\t/* max usage lines reseverd */\n\tint usage_lines;\t/* number of usage lines */\n\n\tbool command_set;\t/* if argc/argv were provided */\n\tbool file_set;\t\t/* if a filename was provided */\n\tbool mem_allocated;     /* if memory allocated in init() */\n\tbool posix_style; \t/* enables to turn off POSIX style options */\n\tbool verbose;\t\t/* silent|verbose */\n\tbool print_usage;\t/* usage verbose */\n\tbool print_help;\t/* help verbose */\n\t\n\tchar opt_prefix_char;\t\t/*  '-' in \"-w\" */\n\tchar long_opt_prefix[MAX_LONG_PREFIX_LENGTH + 1]; /* '--' in \"--width\" */\n\tchar file_delimiter_char;\t/* ':' in width : 100 */\n\tchar file_comment_char;\t\t/*  '#' in \"#this is a comment\" */\n\tchar equalsign;\n\tchar comment;\n\tchar delimiter;\n\tchar endofline;\n\tchar whitespace;\n\tchar nullterminate;\n\n\tbool set;   //was static member\n\tbool once;  //was static member\n\t\n\tbool hasoptions;\n\tbool autousage;\n\nprivate: /* the hidden utils */\n\tvoid init();\t\n\tvoid init(int maxopt, int maxcharopt );\t\n\tbool alloc();\n\tvoid cleanup();\n\tbool valueStoreOK();\n\n\t/* grow storage arrays as required */\n\tbool doubleOptStorage();\n\tbool doubleCharStorage();\n\tbool doubleUsageStorage();\n\n\tbool setValue( const char *option , char *value );\n\tbool setFlagOn( const char *option );\n\tbool setValue( char optchar , char *value);\n\tbool setFlagOn( char optchar );\n\n\tvoid addOption( const char* option , int type );\n\tvoid addOption( char optchar , int type );\n\tvoid addOptionError( const char *opt);\n\tvoid addOptionError( char opt);\n\tbool findFlag( char* value );\n\tvoid addUsageError( const char *line );\n\tbool CommandSet();\n\tbool FileSet();\n\tbool POSIX();\n\n\tchar parsePOSIX( char* arg );\n\tint parseGNU( char *arg );\n\tbool matchChar( char c );\n\tint matchOpt( char *opt );\n\n\t/* dot file methods */\n\tchar *readFile();\n\tchar *readFile( const char* fname );\n\tbool consumeFile( char *buffer );\n\tvoid processLine( char *theline, int length );\n\tchar *chomp( char *str );\n\tvoid valuePairs( char *type, char *value ); \n\tvoid justValue( char *value );\n\n\tvoid printVerbose( const char *msg );\n\tvoid printVerbose( char *msg );\n\tvoid printVerbose( char ch );\n\tvoid printVerbose( );\n\n\n};\n\n#endif /* ! _ANYOPTION_H */\n"
  },
  {
    "path": "external/AnyOption/demo.cpp",
    "content": "/*\n * Here is a sample of how to use AnyOption to\n * parse comand line argumnets and an ptions file\n *\n * Create  sample.txt as follows\n *\n *      # sample options file\n *      # this is a comment \n *      zip  \n *      size  : 42 \n *      title : This is a test title.\n *\n * Run the sample with any combination of the options\n *\n *      a.out -c --zip -s 20 --name foo.jpg argtest1 argtest2 \n */\n\n#include \"anyoption.h\"\n\nvoid example( int argc, char* argv[] );\n\nint\nmain( int argc, char* argv[] )\n{\n        example( argc, argv ); \n        return 0 ;\n}\n\nvoid\nexample( int argc, char* argv[] )\n{\n\n        /* 1. CREATE AN OBJECT */\n        AnyOption *opt = new AnyOption();\n\n        /* 2. SET PREFERENCES  */\n        //opt->noPOSIX(); /* do not check for POSIX style character options */\n        //opt->setVerbose(); /* print warnings about unknown options */\n        //opt->autoUsagePrint(true); /* print usage for bad options */\n\n        /* 3. SET THE USAGE/HELP   */\n        opt->addUsage( \"\" );\n        opt->addUsage( \"Usage: \" );\n        opt->addUsage( \"\" );\n        opt->addUsage( \" -h  --help  \t\tPrints this help \" );\n        opt->addUsage( \" -s  --size 42 \t        Image Size \" );\n        opt->addUsage( \" -z  --zip  \t\tCompress Image \" );\n        opt->addUsage( \" -c   \t\t\tconvert Image \" );\n        opt->addUsage( \"     --name image.jpg\tImage Name \" );\n        opt->addUsage( \"\" );\n\n        /* 4. SET THE OPTION STRINGS/CHARACTERS */\n\n\t/* by default all  options  will be checked on the command line and from option/resource file */\n        opt->setFlag(  \"help\", 'h' );   /* a flag (takes no argument), supporting long and short form */ \n        opt->setOption(  \"size\", 's' ); /* an option (takes an argument), supporting long and short form */\n        opt->setOption(  \"name\" );      /* an option (takes an argument), supporting only long form */\n        opt->setFlag( 'c' );            /* a flag (takes no argument), supporting only short form */\n\n\t/* for options that will be checked only on the command and line not in option/resource file */\n        opt->setCommandFlag(  \"zip\" , 'z'); /* a flag (takes no argument), supporting long and short form */\n\n\t/* for options that will be checked only from the option/resource file */\n        opt->setFileOption(  \"title\" ); /* an option (takes an argument), supporting only long form */\n\n        /* 5. PROCESS THE COMMANDLINE AND RESOURCE FILE */\n\n\t/* read options from a  option/resource file with ':' separated opttions or flags, one per line */\n        opt->processFile( \"/home/user/.options\" );  \n\t/* go through the command line and get the options  */\n        opt->processCommandArgs( argc, argv );\n\n\tif( ! opt->hasOptions()) { /* print usage if no options */\n                opt->printUsage();\n\t        delete opt;\n\t\treturn;\n\t}\n\n        /* 6. GET THE VALUES */\n        if( opt->getFlag( \"help\" ) || opt->getFlag( 'h' ) ) \n                opt->printUsage();\n\tif( opt->getValue( 's' ) != NULL  || opt->getValue( \"size\" ) != NULL  )\n        \tcout << \"size = \" << opt->getValue( 's' ) << endl ;\n\tif( opt->getValue( \"name\" ) != NULL )\n       \t \tcout << \"name = \" << opt->getValue( \"name\" ) << endl ;\n\tif( opt->getValue( \"title\" ) != NULL )\n        \tcout << \"title = \" << opt->getValue( \"title\" ) << endl ;\n        if( opt->getFlag( 'c' ) )  \n\t\tcout << \"c = flag set \" << endl ;\n        if( opt->getFlag( 'z' ) || opt->getFlag( \"zip\" ) )  \n\t\tcout << \"zip = flag set \" << endl ;\n        cout << endl ;\n\n\t/* 7. GET THE ACTUAL ARGUMENTS AFTER THE OPTIONS */\n\tfor( int i = 0 ; i < opt->getArgc() ; i++ ){\n\t\tcout << \"arg = \" <<  opt->getArgv( i ) << endl ;\n\t}\n\n        /* 8. DONE */\n        delete opt;\n\n}\n"
  },
  {
    "path": "external/TinyThread/CMakeLists.txt",
    "content": "project(tinythread)\n\ncmake_minimum_required(VERSION 2.6)\n\nadd_library(tinythread\n  source/tinythread.cpp\n)\n\n"
  },
  {
    "path": "external/TinyThread/README.txt",
    "content": "TinyThread++ v1.0\n=================\n\nhttp://tinythread.sourceforge.net\n\n\nAbout\n-----\n\nTinyThread++ is a minimalist, portable, threading library for C++, intended to\nmake it easy to create multi threaded C++ applications.\n\nThe library is closesly modeled after the current C++0x standard (draft), but\nonly a subset is implemented at the moment.\n\nSee the documentation in the doc/html directory for more information.\n\n\nUsing TinyThread++\n------------------\n\nTo use TinyThread++ in your own project, just add tinythread.cpp and\ntinythread.h to your project. In your own code, do:\n\n#include <tinythread.h>\nusing namespace tthread;\n\nIf you wish to use the fast_mutex class, inlude fast_mutex.h:\n\n#include <fast_mutex.h>\n\n\nBuilding the test programs\n--------------------------\n\nFrom the test folder, issue one of the following commands:\n\nLinux, Mac OS X, OpenSolaris etc:\n  make   (you may need to use gmake on some systems)\n\nWindows/MinGW:\n  mingw32-make\n\nWindows/MS Visual Studio:\n  nmake /f Makefile.msvc\n\n\nHistory\n-------\n\nv1.0 - 2010.10.01\n  - First non-beta release.\n  - Made mutex non-recursive (according to spec), and added recursive_mutex.\n  - General class, code & documentation improvements.\n  - Added a Makefile for MS Visual Studio.\n\nv0.9 - 2010.08.10\n  - Added preliminary support for this_thread::sleep_for().\n\nv0.8 - 2010.07.02\n  - Switched from CreateThread() to _beginthreadex() for Win32 (should fix\n    tiny memory leaks).\n  - Better standards compliance and some code cleanup.\n\nv0.7 - 2010.05.17\n  - Added this_thread::yield().\n  - Replaced the non-standard number_of_processors() function with\n    thread::hardware_concurrency(), which is part of the C++0x draft.\n  - The thread::id() class is now more standards compliant (correct namespace\n    and comparison operators).\n\nv0.6 - 2010.04.28\n  - Added a fast_mutex class (in fast_mutex.h).\n  - Made the test.cpp application compile under Mac OS X and MinGW/g++ 3.x.\n\nv0.5 - 2010.03.31\n  - Added the thread_local keyword (support for thread-local storage).\n  - Added a test application to test the API (test.cpp).\n  - Improved the Doxygen documentation.\n\nv0.4 - 2010.03.27\n  - Added thread::get_id() and this_thread::get_id().\n  - Changed the namespace name from tinythread to tthread.\n\nv0.3 - 2010.03.24\n  - Fixed a compiler error for fractal.cpp under MS Visual C++.\n  - Added colors to the fractal generator.\n\nv0.2 - 2010.03.23\n  - Better C++0x conformance.\n  - Better documentation.\n  - New classes:\n    - lock_guard\n  - New member functions:\n    - thread::joinable()\n    - thread::native_handle()\n    - mutex::try_lock()\n  - Added a multi threaded fractal generator test application.\n\nv0.1 - 2010.03.21\n  - Initial release.\n\n\nLicense\n-------\n\nCopyright (c) 2010 Marcus Geelnard\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n    1. The origin of this software must not be misrepresented; you must not\n    claim that you wrote the original software. If you use this software\n    in a product, an acknowledgment in the product documentation would be\n    appreciated but is not required.\n\n    2. Altered source versions must be plainly marked as such, and must not be\n    misrepresented as being the original software.\n\n    3. This notice may not be removed or altered from any source\n    distribution.\n"
  },
  {
    "path": "external/TinyThread/doc/Doxyfile",
    "content": "# Doxyfile 1.5.8\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org) for a project\n#\n# All text after a hash (#) is considered a comment and will be ignored\n# The format is:\n#       TAG = value [value, ...]\n# For lists items can also be appended using:\n#       TAG += value [value, ...]\n# Values that contain spaces should be placed between quotes (\" \")\n\n#---------------------------------------------------------------------------\n# Project related configuration options\n#---------------------------------------------------------------------------\n\n# This tag specifies the encoding used for all characters in the config file \n# that follow. The default is UTF-8 which is also the encoding used for all \n# text before the first occurrence of this tag. Doxygen uses libiconv (or the \n# iconv built into libc) for the transcoding. See \n# http://www.gnu.org/software/libiconv for the list of possible encodings.\n\nDOXYFILE_ENCODING      = UTF-8\n\n# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \n# by quotes) that should identify the project.\n\nPROJECT_NAME           = TinyThread++\n\n# The PROJECT_NUMBER tag can be used to enter a project or revision number. \n# This could be handy for archiving the generated documentation or \n# if some version control system is used.\n\nPROJECT_NUMBER         = 1.0\n\n# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \n# base path where the generated documentation will be put. \n# If a relative path is entered, it will be relative to the location \n# where doxygen was started. If left blank the current directory will be used.\n\nOUTPUT_DIRECTORY       =\n\n# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \n# 4096 sub-directories (in 2 levels) under the output directory of each output \n# format and will distribute the generated files over these directories. \n# Enabling this option can be useful when feeding doxygen a huge amount of \n# source files, where putting all generated files in the same directory would \n# otherwise cause performance problems for the file system.\n\nCREATE_SUBDIRS         = NO\n\n# The OUTPUT_LANGUAGE tag is used to specify the language in which all \n# documentation generated by doxygen is written. Doxygen will use this \n# information to generate all constant output in the proper language. \n# The default language is English, other supported languages are: \n# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \n# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \n# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \n# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \n# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \n# Spanish, Swedish, and Ukrainian.\n\nOUTPUT_LANGUAGE        = English\n\n# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \n# include brief member descriptions after the members that are listed in \n# the file and class documentation (similar to JavaDoc). \n# Set to NO to disable this.\n\nBRIEF_MEMBER_DESC      = YES\n\n# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \n# the brief description of a member or function before the detailed description. \n# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \n# brief descriptions will be completely suppressed.\n\nREPEAT_BRIEF           = YES\n\n# This tag implements a quasi-intelligent brief description abbreviator \n# that is used to form the text in various listings. Each string \n# in this list, if found as the leading text of the brief description, will be \n# stripped from the text and the result after processing the whole list, is \n# used as the annotated text. Otherwise, the brief description is used as-is. \n# If left blank, the following values are used (\"$name\" is automatically \n# replaced with the name of the entity): \"The $name class\" \"The $name widget\" \n# \"The $name file\" \"is\" \"provides\" \"specifies\" \"contains\" \n# \"represents\" \"a\" \"an\" \"the\"\n\nABBREVIATE_BRIEF       = \n\n# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \n# Doxygen will generate a detailed section even if there is only a brief \n# description.\n\nALWAYS_DETAILED_SEC    = NO\n\n# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \n# inherited members of a class in the documentation of that class as if those \n# members were ordinary class members. Constructors, destructors and assignment \n# operators of the base classes will not be shown.\n\nINLINE_INHERITED_MEMB  = NO\n\n# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \n# path before files name in the file list and in the header files. If set \n# to NO the shortest path that makes the file name unique will be used.\n\nFULL_PATH_NAMES        = NO\n\n# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \n# can be used to strip a user-defined part of the path. Stripping is \n# only done if one of the specified strings matches the left-hand part of \n# the path. The tag can be used to show relative paths in the file list. \n# If left blank the directory from which doxygen is run is used as the \n# path to strip.\n\nSTRIP_FROM_PATH        = \n\n# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \n# the path mentioned in the documentation of a class, which tells \n# the reader which header file to include in order to use a class. \n# If left blank only the name of the header file containing the class \n# definition is used. Otherwise one should specify the include paths that \n# are normally passed to the compiler using the -I flag.\n\nSTRIP_FROM_INC_PATH    = \n\n# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \n# (but less readable) file names. This can be useful is your file systems \n# doesn't support long names like on DOS, Mac, or CD-ROM.\n\nSHORT_NAMES            = NO\n\n# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \n# will interpret the first line (until the first dot) of a JavaDoc-style \n# comment as the brief description. If set to NO, the JavaDoc \n# comments will behave just like regular Qt-style comments \n# (thus requiring an explicit @brief command for a brief description.)\n\nJAVADOC_AUTOBRIEF      = YES\n\n# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \n# interpret the first line (until the first dot) of a Qt-style \n# comment as the brief description. If set to NO, the comments \n# will behave just like regular Qt-style comments (thus requiring \n# an explicit \\brief command for a brief description.)\n\nQT_AUTOBRIEF           = NO\n\n# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \n# treat a multi-line C++ special comment block (i.e. a block of //! or /// \n# comments) as a brief description. This used to be the default behaviour. \n# The new default is to treat a multi-line C++ comment block as a detailed \n# description. Set this tag to YES if you prefer the old behaviour instead.\n\nMULTILINE_CPP_IS_BRIEF = NO\n\n# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \n# member inherits the documentation from any documented member that it \n# re-implements.\n\nINHERIT_DOCS           = YES\n\n# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \n# a new page for each member. If set to NO, the documentation of a member will \n# be part of the file/class/namespace that contains it.\n\nSEPARATE_MEMBER_PAGES  = NO\n\n# The TAB_SIZE tag can be used to set the number of spaces in a tab. \n# Doxygen uses this value to replace tabs by spaces in code fragments.\n\nTAB_SIZE               = 2\n\n# This tag can be used to specify a number of aliases that acts \n# as commands in the documentation. An alias has the form \"name=value\". \n# For example adding \"sideeffect=\\par Side Effects:\\n\" will allow you to \n# put the command \\sideeffect (or @sideeffect) in the documentation, which \n# will result in a user-defined paragraph with heading \"Side Effects:\". \n# You can put \\n's in the value part of an alias to insert newlines.\n\nALIASES                = \n\n# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \n# sources only. Doxygen will then generate output that is more tailored for C. \n# For instance, some of the names that are used will be different. The list \n# of all members will be omitted, etc.\n\nOPTIMIZE_OUTPUT_FOR_C  = NO\n\n# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \n# sources only. Doxygen will then generate output that is more tailored for \n# Java. For instance, namespaces will be presented as packages, qualified \n# scopes will look different, etc.\n\nOPTIMIZE_OUTPUT_JAVA   = NO\n\n# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \n# sources only. Doxygen will then generate output that is more tailored for \n# Fortran.\n\nOPTIMIZE_FOR_FORTRAN   = NO\n\n# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \n# sources. Doxygen will then generate output that is tailored for \n# VHDL.\n\nOPTIMIZE_OUTPUT_VHDL   = NO\n\n# Doxygen selects the parser to use depending on the extension of the files it parses. \n# With this tag you can assign which parser to use for a given extension. \n# Doxygen has a built-in mapping, but you can override or extend it using this tag. \n# The format is ext=language, where ext is a file extension, and language is one of \n# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, \n# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat \n# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), \n# use: inc=Fortran f=C\n\nEXTENSION_MAPPING      = \n\n# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \n# to include (a tag file for) the STL sources as input, then you should \n# set this tag to YES in order to let doxygen match functions declarations and \n# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \n# func(std::string) {}). This also make the inheritance and collaboration \n# diagrams that involve STL classes more complete and accurate.\n\nBUILTIN_STL_SUPPORT    = NO\n\n# If you use Microsoft's C++/CLI language, you should set this option to YES to \n# enable parsing support.\n\nCPP_CLI_SUPPORT        = NO\n\n# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \n# Doxygen will parse them like normal C++ but will assume all classes use public \n# instead of private inheritance when no explicit protection keyword is present.\n\nSIP_SUPPORT            = NO\n\n# For Microsoft's IDL there are propget and propput attributes to indicate getter \n# and setter methods for a property. Setting this option to YES (the default) \n# will make doxygen to replace the get and set methods by a property in the \n# documentation. This will only work if the methods are indeed getting or \n# setting a simple type. If this is not the case, or you want to show the \n# methods anyway, you should set this option to NO.\n\nIDL_PROPERTY_SUPPORT   = YES\n\n# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \n# tag is set to YES, then doxygen will reuse the documentation of the first \n# member in the group (if any) for the other members of the group. By default \n# all members of a group must be documented explicitly.\n\nDISTRIBUTE_GROUP_DOC   = NO\n\n# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \n# the same type (for instance a group of public functions) to be put as a \n# subgroup of that type (e.g. under the Public Functions section). Set it to \n# NO to prevent subgrouping. Alternatively, this can be done per class using \n# the \\nosubgrouping command.\n\nSUBGROUPING            = YES\n\n# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \n# is documented as struct, union, or enum with the name of the typedef. So \n# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \n# with name TypeT. When disabled the typedef will appear as a member of a file, \n# namespace, or class. And the struct will be named TypeS. This can typically \n# be useful for C code in case the coding convention dictates that all compound \n# types are typedef'ed and only the typedef is referenced, never the tag name.\n\nTYPEDEF_HIDES_STRUCT   = NO\n\n# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \n# determine which symbols to keep in memory and which to flush to disk. \n# When the cache is full, less often used symbols will be written to disk. \n# For small to medium size projects (<1000 input files) the default value is \n# probably good enough. For larger projects a too small cache size can cause \n# doxygen to be busy swapping symbols to and from disk most of the time \n# causing a significant performance penality. \n# If the system has enough physical memory increasing the cache will improve the \n# performance by keeping more symbols in memory. Note that the value works on \n# a logarithmic scale so increasing the size by one will rougly double the \n# memory usage. The cache size is given by this formula: \n# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \n# corresponding to a cache size of 2^16 = 65536 symbols\n\nSYMBOL_CACHE_SIZE      = 0\n\n#---------------------------------------------------------------------------\n# Build related configuration options\n#---------------------------------------------------------------------------\n\n# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \n# documentation are documented, even if no documentation was available. \n# Private class members and static file members will be hidden unless \n# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\n\nEXTRACT_ALL            = NO\n\n# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \n# will be included in the documentation.\n\nEXTRACT_PRIVATE        = NO\n\n# If the EXTRACT_STATIC tag is set to YES all static members of a file \n# will be included in the documentation.\n\nEXTRACT_STATIC         = NO\n\n# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \n# defined locally in source files will be included in the documentation. \n# If set to NO only classes defined in header files are included.\n\nEXTRACT_LOCAL_CLASSES  = YES\n\n# This flag is only useful for Objective-C code. When set to YES local \n# methods, which are defined in the implementation section but not in \n# the interface are included in the documentation. \n# If set to NO (the default) only methods in the interface are included.\n\nEXTRACT_LOCAL_METHODS  = NO\n\n# If this flag is set to YES, the members of anonymous namespaces will be \n# extracted and appear in the documentation as a namespace called \n# 'anonymous_namespace{file}', where file will be replaced with the base \n# name of the file that contains the anonymous namespace. By default \n# anonymous namespace are hidden.\n\nEXTRACT_ANON_NSPACES   = NO\n\n# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \n# undocumented members of documented classes, files or namespaces. \n# If set to NO (the default) these members will be included in the \n# various overviews, but no documentation section is generated. \n# This option has no effect if EXTRACT_ALL is enabled.\n\nHIDE_UNDOC_MEMBERS     = YES\n\n# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \n# undocumented classes that are normally visible in the class hierarchy. \n# If set to NO (the default) these classes will be included in the various \n# overviews. This option has no effect if EXTRACT_ALL is enabled.\n\nHIDE_UNDOC_CLASSES     = NO\n\n# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \n# friend (class|struct|union) declarations. \n# If set to NO (the default) these declarations will be included in the \n# documentation.\n\nHIDE_FRIEND_COMPOUNDS  = NO\n\n# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \n# documentation blocks found inside the body of a function. \n# If set to NO (the default) these blocks will be appended to the \n# function's detailed documentation block.\n\nHIDE_IN_BODY_DOCS      = NO\n\n# The INTERNAL_DOCS tag determines if documentation \n# that is typed after a \\internal command is included. If the tag is set \n# to NO (the default) then the documentation will be excluded. \n# Set it to YES to include the internal documentation.\n\nINTERNAL_DOCS          = NO\n\n# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \n# file names in lower-case letters. If set to YES upper-case letters are also \n# allowed. This is useful if you have classes or files whose names only differ \n# in case and if your file system supports case sensitive file names. Windows \n# and Mac users are advised to set this option to NO.\n\nCASE_SENSE_NAMES       = NO\n\n# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \n# will show members with their full class and namespace scopes in the \n# documentation. If set to YES the scope will be hidden.\n\nHIDE_SCOPE_NAMES       = YES\n\n# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \n# will put a list of the files that are included by a file in the documentation \n# of that file.\n\nSHOW_INCLUDE_FILES     = YES\n\n# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \n# is inserted in the documentation for inline members.\n\nINLINE_INFO            = YES\n\n# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \n# will sort the (detailed) documentation of file and class members \n# alphabetically by member name. If set to NO the members will appear in \n# declaration order.\n\nSORT_MEMBER_DOCS       = YES\n\n# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \n# brief documentation of file, namespace and class members alphabetically \n# by member name. If set to NO (the default) the members will appear in \n# declaration order.\n\nSORT_BRIEF_DOCS        = NO\n\n# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \n# hierarchy of group names into alphabetical order. If set to NO (the default) \n# the group names will appear in their defined order.\n\nSORT_GROUP_NAMES       = NO\n\n# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \n# sorted by fully-qualified names, including namespaces. If set to \n# NO (the default), the class list will be sorted only by class name, \n# not including the namespace part. \n# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. \n# Note: This option applies only to the class list, not to the \n# alphabetical list.\n\nSORT_BY_SCOPE_NAME     = NO\n\n# The GENERATE_TODOLIST tag can be used to enable (YES) or \n# disable (NO) the todo list. This list is created by putting \\todo \n# commands in the documentation.\n\nGENERATE_TODOLIST      = YES\n\n# The GENERATE_TESTLIST tag can be used to enable (YES) or \n# disable (NO) the test list. This list is created by putting \\test \n# commands in the documentation.\n\nGENERATE_TESTLIST      = YES\n\n# The GENERATE_BUGLIST tag can be used to enable (YES) or \n# disable (NO) the bug list. This list is created by putting \\bug \n# commands in the documentation.\n\nGENERATE_BUGLIST       = YES\n\n# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \n# disable (NO) the deprecated list. This list is created by putting \n# \\deprecated commands in the documentation.\n\nGENERATE_DEPRECATEDLIST= YES\n\n# The ENABLED_SECTIONS tag can be used to enable conditional \n# documentation sections, marked by \\if sectionname ... \\endif.\n\nENABLED_SECTIONS       = \n\n# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \n# the initial value of a variable or define consists of for it to appear in \n# the documentation. If the initializer consists of more lines than specified \n# here it will be hidden. Use a value of 0 to hide initializers completely. \n# The appearance of the initializer of individual variables and defines in the \n# documentation can be controlled using \\showinitializer or \\hideinitializer \n# command in the documentation regardless of this setting.\n\nMAX_INITIALIZER_LINES  = 30\n\n# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \n# at the bottom of the documentation of classes and structs. If set to YES the \n# list will mention the files that were used to generate the documentation.\n\nSHOW_USED_FILES        = YES\n\n# If the sources in your project are distributed over multiple directories \n# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \n# in the documentation. The default is NO.\n\nSHOW_DIRECTORIES       = NO\n\n# Set the SHOW_FILES tag to NO to disable the generation of the Files page. \n# This will remove the Files entry from the Quick Index and from the \n# Folder Tree View (if specified). The default is YES.\n\nSHOW_FILES             = YES\n\n# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \n# Namespaces page. \n# This will remove the Namespaces entry from the Quick Index \n# and from the Folder Tree View (if specified). The default is YES.\n\nSHOW_NAMESPACES        = YES\n\n# The FILE_VERSION_FILTER tag can be used to specify a program or script that \n# doxygen should invoke to get the current version for each file (typically from \n# the version control system). Doxygen will invoke the program by executing (via \n# popen()) the command <command> <input-file>, where <command> is the value of \n# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \n# provided by doxygen. Whatever the program writes to standard output \n# is used as the file version. See the manual for examples.\n\nFILE_VERSION_FILTER    = \n\n# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \n# doxygen. The layout file controls the global structure of the generated output files \n# in an output format independent way. The create the layout file that represents \n# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \n# file name after the option, if omitted DoxygenLayout.xml will be used as the name \n# of the layout file.\n\nLAYOUT_FILE            = \n\n#---------------------------------------------------------------------------\n# configuration options related to warning and progress messages\n#---------------------------------------------------------------------------\n\n# The QUIET tag can be used to turn on/off the messages that are generated \n# by doxygen. Possible values are YES and NO. If left blank NO is used.\n\nQUIET                  = NO\n\n# The WARNINGS tag can be used to turn on/off the warning messages that are \n# generated by doxygen. Possible values are YES and NO. If left blank \n# NO is used.\n\nWARNINGS               = YES\n\n# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \n# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \n# automatically be disabled.\n\nWARN_IF_UNDOCUMENTED   = YES\n\n# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \n# potential errors in the documentation, such as not documenting some \n# parameters in a documented function, or documenting parameters that \n# don't exist or using markup commands wrongly.\n\nWARN_IF_DOC_ERROR      = YES\n\n# This WARN_NO_PARAMDOC option can be abled to get warnings for \n# functions that are documented, but have no documentation for their parameters \n# or return value. If set to NO (the default) doxygen will only warn about \n# wrong or incomplete parameter documentation, but not about the absence of \n# documentation.\n\nWARN_NO_PARAMDOC       = NO\n\n# The WARN_FORMAT tag determines the format of the warning messages that \n# doxygen can produce. The string should contain the $file, $line, and $text \n# tags, which will be replaced by the file and line number from which the \n# warning originated and the warning text. Optionally the format may contain \n# $version, which will be replaced by the version of the file (if it could \n# be obtained via FILE_VERSION_FILTER)\n\nWARN_FORMAT            = \"$file:$line: $text\"\n\n# The WARN_LOGFILE tag can be used to specify a file to which warning \n# and error messages should be written. If left blank the output is written \n# to stderr.\n\nWARN_LOGFILE           = \n\n#---------------------------------------------------------------------------\n# configuration options related to the input files\n#---------------------------------------------------------------------------\n\n# The INPUT tag can be used to specify the files and/or directories that contain \n# documented source files. You may enter file names like \"myfile.cpp\" or \n# directories like \"/usr/src/myproject\". Separate the files or directories \n# with spaces.\n\nINPUT                  = \"../source\"\n\n# This tag can be used to specify the character encoding of the source files \n# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \n# also the default input encoding. Doxygen uses libiconv (or the iconv built \n# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \n# the list of possible encodings.\n\nINPUT_ENCODING         = UTF-8\n\n# If the value of the INPUT tag contains directories, you can use the \n# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \n# and *.h) to filter out the source-files in the directories. If left \n# blank the following patterns are tested: \n# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \n# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\n\nFILE_PATTERNS          = *.h\n\n# The RECURSIVE tag can be used to turn specify whether or not subdirectories \n# should be searched for input files as well. Possible values are YES and NO. \n# If left blank NO is used.\n\nRECURSIVE              = YES\n\n# The EXCLUDE tag can be used to specify files and/or directories that should \n# excluded from the INPUT source files. This way you can easily exclude a \n# subdirectory from a directory tree whose root is specified with the INPUT tag.\n\nEXCLUDE                = \n\n# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \n# directories that are symbolic links (a Unix filesystem feature) are excluded \n# from the input.\n\nEXCLUDE_SYMLINKS       = NO\n\n# If the value of the INPUT tag contains directories, you can use the \n# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \n# certain files from those directories. Note that the wildcards are matched \n# against the file with absolute path, so to exclude all test directories \n# for example use the pattern */test/*\n\nEXCLUDE_PATTERNS       = \n\n# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \n# (namespaces, classes, functions, etc.) that should be excluded from the \n# output. The symbol name can be a fully qualified name, a word, or if the \n# wildcard * is used, a substring. Examples: ANamespace, AClass, \n# AClass::ANamespace, ANamespace::*Test\n\nEXCLUDE_SYMBOLS        = \n\n# The EXAMPLE_PATH tag can be used to specify one or more files or \n# directories that contain example code fragments that are included (see \n# the \\include command).\n\nEXAMPLE_PATH           = \n\n# If the value of the EXAMPLE_PATH tag contains directories, you can use the \n# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \n# and *.h) to filter out the source-files in the directories. If left \n# blank all files are included.\n\nEXAMPLE_PATTERNS       = \n\n# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \n# searched for input files to be used with the \\include or \\dontinclude \n# commands irrespective of the value of the RECURSIVE tag. \n# Possible values are YES and NO. If left blank NO is used.\n\nEXAMPLE_RECURSIVE      = NO\n\n# The IMAGE_PATH tag can be used to specify one or more files or \n# directories that contain image that are included in the documentation (see \n# the \\image command).\n\nIMAGE_PATH             = \n\n# The INPUT_FILTER tag can be used to specify a program that doxygen should \n# invoke to filter for each input file. Doxygen will invoke the filter program \n# by executing (via popen()) the command <filter> <input-file>, where <filter> \n# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \n# input file. Doxygen will then use the output that the filter program writes \n# to standard output. \n# If FILTER_PATTERNS is specified, this tag will be \n# ignored.\n\nINPUT_FILTER           = \n\n# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \n# basis. \n# Doxygen will compare the file name with each pattern and apply the \n# filter if there is a match. \n# The filters are a list of the form: \n# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \n# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \n# is applied to all files.\n\nFILTER_PATTERNS        = \n\n# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \n# INPUT_FILTER) will be used to filter the input files when producing source \n# files to browse (i.e. when SOURCE_BROWSER is set to YES).\n\nFILTER_SOURCE_FILES    = NO\n\n#---------------------------------------------------------------------------\n# configuration options related to source browsing\n#---------------------------------------------------------------------------\n\n# If the SOURCE_BROWSER tag is set to YES then a list of source files will \n# be generated. Documented entities will be cross-referenced with these sources. \n# Note: To get rid of all source code in the generated output, make sure also \n# VERBATIM_HEADERS is set to NO.\n\nSOURCE_BROWSER         = NO\n\n# Setting the INLINE_SOURCES tag to YES will include the body \n# of functions and classes directly in the documentation.\n\nINLINE_SOURCES         = NO\n\n# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \n# doxygen to hide any special comment blocks from generated source code \n# fragments. Normal C and C++ comments will always remain visible.\n\nSTRIP_CODE_COMMENTS    = YES\n\n# If the REFERENCED_BY_RELATION tag is set to YES \n# then for each documented function all documented \n# functions referencing it will be listed.\n\nREFERENCED_BY_RELATION = NO\n\n# If the REFERENCES_RELATION tag is set to YES \n# then for each documented function all documented entities \n# called/used by that function will be listed.\n\nREFERENCES_RELATION    = NO\n\n# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) \n# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from \n# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will \n# link to the source code. \n# Otherwise they will link to the documentation.\n\nREFERENCES_LINK_SOURCE = YES\n\n# If the USE_HTAGS tag is set to YES then the references to source code \n# will point to the HTML generated by the htags(1) tool instead of doxygen \n# built-in source browser. The htags tool is part of GNU's global source \n# tagging system (see http://www.gnu.org/software/global/global.html). You \n# will need version 4.8.6 or higher.\n\nUSE_HTAGS              = NO\n\n# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \n# will generate a verbatim copy of the header file for each class for \n# which an include is specified. Set to NO to disable this.\n\nVERBATIM_HEADERS       = YES\n\n#---------------------------------------------------------------------------\n# configuration options related to the alphabetical class index\n#---------------------------------------------------------------------------\n\n# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \n# of all compounds will be generated. Enable this if the project \n# contains a lot of classes, structs, unions or interfaces.\n\nALPHABETICAL_INDEX     = NO\n\n# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \n# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \n# in which this list will be split (can be a number in the range [1..20])\n\nCOLS_IN_ALPHA_INDEX    = 5\n\n# In case all classes in a project start with a common prefix, all \n# classes will be put under the same header in the alphabetical index. \n# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \n# should be ignored while generating the index headers.\n\nIGNORE_PREFIX          = \n\n#---------------------------------------------------------------------------\n# configuration options related to the HTML output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \n# generate HTML output.\n\nGENERATE_HTML          = YES\n\n# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \n# If a relative path is entered the value of OUTPUT_DIRECTORY will be \n# put in front of it. If left blank `html' will be used as the default path.\n\nHTML_OUTPUT            = html\n\n# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \n# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \n# doxygen will generate files with .html extension.\n\nHTML_FILE_EXTENSION    = .html\n\n# The HTML_HEADER tag can be used to specify a personal HTML header for \n# each generated HTML page. If it is left blank doxygen will generate a \n# standard header.\n\nHTML_HEADER            = \n\n# The HTML_FOOTER tag can be used to specify a personal HTML footer for \n# each generated HTML page. If it is left blank doxygen will generate a \n# standard footer.\n\nHTML_FOOTER            = \n\n# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \n# style sheet that is used by each HTML page. It can be used to \n# fine-tune the look of the HTML output. If the tag is left blank doxygen \n# will generate a default style sheet. Note that doxygen will try to copy \n# the style sheet file to the HTML output directory, so don't put your own \n# stylesheet in the HTML output directory as well, or it will be erased!\n\nHTML_STYLESHEET        = \n\n# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \n# files or namespaces will be aligned in HTML using tables. If set to \n# NO a bullet list will be used.\n\nHTML_ALIGN_MEMBERS     = YES\n\n# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \n# documentation will contain sections that can be hidden and shown after the \n# page has loaded. For this to work a browser that supports \n# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \n# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\n\nHTML_DYNAMIC_SECTIONS  = NO\n\n# If the GENERATE_DOCSET tag is set to YES, additional index files \n# will be generated that can be used as input for Apple's Xcode 3 \n# integrated development environment, introduced with OSX 10.5 (Leopard). \n# To create a documentation set, doxygen will generate a Makefile in the \n# HTML output directory. Running make will produce the docset in that \n# directory and running \"make install\" will install the docset in \n# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \n# it at startup. \n# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\n\nGENERATE_DOCSET        = NO\n\n# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \n# feed. A documentation feed provides an umbrella under which multiple \n# documentation sets from a single provider (such as a company or product suite) \n# can be grouped.\n\nDOCSET_FEEDNAME        = \"Doxygen generated docs\"\n\n# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \n# should uniquely identify the documentation set bundle. This should be a \n# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \n# will append .docset to the name.\n\nDOCSET_BUNDLE_ID       = org.doxygen.Project\n\n# If the GENERATE_HTMLHELP tag is set to YES, additional index files \n# will be generated that can be used as input for tools like the \n# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \n# of the generated HTML documentation.\n\nGENERATE_HTMLHELP      = NO\n\n# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \n# be used to specify the file name of the resulting .chm file. You \n# can add a path in front of the file if the result should not be \n# written to the html output directory.\n\nCHM_FILE               = \n\n# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \n# be used to specify the location (absolute path including file name) of \n# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \n# the HTML help compiler on the generated index.hhp.\n\nHHC_LOCATION           = \n\n# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \n# controls if a separate .chi index file is generated (YES) or that \n# it should be included in the master .chm file (NO).\n\nGENERATE_CHI           = NO\n\n# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING \n# is used to encode HtmlHelp index (hhk), content (hhc) and project file \n# content.\n\nCHM_INDEX_ENCODING     = \n\n# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \n# controls whether a binary table of contents is generated (YES) or a \n# normal table of contents (NO) in the .chm file.\n\nBINARY_TOC             = NO\n\n# The TOC_EXPAND flag can be set to YES to add extra items for group members \n# to the contents of the HTML help documentation and to the tree view.\n\nTOC_EXPAND             = NO\n\n# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \n# are set, an additional index file will be generated that can be used as input for \n# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \n# HTML documentation.\n\nGENERATE_QHP           = NO\n\n# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \n# be used to specify the file name of the resulting .qch file. \n# The path specified is relative to the HTML output folder.\n\nQCH_FILE               = \n\n# The QHP_NAMESPACE tag specifies the namespace to use when generating \n# Qt Help Project output. For more information please see \n# http://doc.trolltech.com/qthelpproject.html#namespace\n\nQHP_NAMESPACE          = \n\n# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \n# Qt Help Project output. For more information please see \n# http://doc.trolltech.com/qthelpproject.html#virtual-folders\n\nQHP_VIRTUAL_FOLDER     = doc\n\n# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. \n# For more information please see \n# http://doc.trolltech.com/qthelpproject.html#custom-filters\n\nQHP_CUST_FILTER_NAME   = \n\n# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see \n# <a href=\"http://doc.trolltech.com/qthelpproject.html#custom-filters\">Qt Help Project / Custom Filters</a>.\n\nQHP_CUST_FILTER_ATTRS  = \n\n# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's \n# filter section matches. \n# <a href=\"http://doc.trolltech.com/qthelpproject.html#filter-attributes\">Qt Help Project / Filter Attributes</a>.\n\nQHP_SECT_FILTER_ATTRS  = \n\n# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \n# be used to specify the location of Qt's qhelpgenerator. \n# If non-empty doxygen will try to run qhelpgenerator on the generated \n# .qhp file.\n\nQHG_LOCATION           = \n\n# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \n# top of each HTML page. The value NO (the default) enables the index and \n# the value YES disables it.\n\nDISABLE_INDEX          = NO\n\n# This tag can be used to set the number of enum values (range [1..20]) \n# that doxygen will group on one line in the generated HTML documentation.\n\nENUM_VALUES_PER_LINE   = 4\n\n# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index \n# structure should be generated to display hierarchical information. \n# If the tag value is set to FRAME, a side panel will be generated \n# containing a tree-like index structure (just like the one that \n# is generated for HTML Help). For this to work a browser that supports \n# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \n# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \n# probably better off using the HTML help feature. Other possible values \n# for this tag are: HIERARCHIES, which will generate the Groups, Directories, \n# and Class Hierarchy pages using a tree view instead of an ordered list; \n# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which \n# disables this behavior completely. For backwards compatibility with previous \n# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE \n# respectively.\n\nGENERATE_TREEVIEW      = NONE\n\n# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \n# used to set the initial width (in pixels) of the frame in which the tree \n# is shown.\n\nTREEVIEW_WIDTH         = 250\n\n# Use this tag to change the font size of Latex formulas included \n# as images in the HTML documentation. The default is 10. Note that \n# when you change the font size after a successful doxygen run you need \n# to manually remove any form_*.png images from the HTML output directory \n# to force them to be regenerated.\n\nFORMULA_FONTSIZE       = 10\n\n#---------------------------------------------------------------------------\n# configuration options related to the LaTeX output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \n# generate Latex output.\n\nGENERATE_LATEX         = NO\n\n# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \n# If a relative path is entered the value of OUTPUT_DIRECTORY will be \n# put in front of it. If left blank `latex' will be used as the default path.\n\nLATEX_OUTPUT           = latex\n\n# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \n# invoked. If left blank `latex' will be used as the default command name.\n\nLATEX_CMD_NAME         = latex\n\n# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \n# generate index for LaTeX. If left blank `makeindex' will be used as the \n# default command name.\n\nMAKEINDEX_CMD_NAME     = makeindex\n\n# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \n# LaTeX documents. This may be useful for small projects and may help to \n# save some trees in general.\n\nCOMPACT_LATEX          = NO\n\n# The PAPER_TYPE tag can be used to set the paper type that is used \n# by the printer. Possible values are: a4, a4wide, letter, legal and \n# executive. If left blank a4wide will be used.\n\nPAPER_TYPE             = a4wide\n\n# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \n# packages that should be included in the LaTeX output.\n\nEXTRA_PACKAGES         = \n\n# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \n# the generated latex document. The header should contain everything until \n# the first chapter. If it is left blank doxygen will generate a \n# standard header. Notice: only use this tag if you know what you are doing!\n\nLATEX_HEADER           = \n\n# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \n# is prepared for conversion to pdf (using ps2pdf). The pdf file will \n# contain links (just like the HTML output) instead of page references \n# This makes the output suitable for online browsing using a pdf viewer.\n\nPDF_HYPERLINKS         = YES\n\n# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \n# plain latex in the generated Makefile. Set this option to YES to get a \n# higher quality PDF documentation.\n\nUSE_PDFLATEX           = YES\n\n# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\\\batchmode. \n# command to the generated LaTeX files. This will instruct LaTeX to keep \n# running if errors occur, instead of asking the user for help. \n# This option is also used when generating formulas in HTML.\n\nLATEX_BATCHMODE        = NO\n\n# If LATEX_HIDE_INDICES is set to YES then doxygen will not \n# include the index chapters (such as File Index, Compound Index, etc.) \n# in the output.\n\nLATEX_HIDE_INDICES     = NO\n\n#---------------------------------------------------------------------------\n# configuration options related to the RTF output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \n# The RTF output is optimized for Word 97 and may not look very pretty with \n# other RTF readers or editors.\n\nGENERATE_RTF           = NO\n\n# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \n# If a relative path is entered the value of OUTPUT_DIRECTORY will be \n# put in front of it. If left blank `rtf' will be used as the default path.\n\nRTF_OUTPUT             = rtf\n\n# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \n# RTF documents. This may be useful for small projects and may help to \n# save some trees in general.\n\nCOMPACT_RTF            = NO\n\n# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \n# will contain hyperlink fields. The RTF file will \n# contain links (just like the HTML output) instead of page references. \n# This makes the output suitable for online browsing using WORD or other \n# programs which support those fields. \n# Note: wordpad (write) and others do not support links.\n\nRTF_HYPERLINKS         = NO\n\n# Load stylesheet definitions from file. Syntax is similar to doxygen's \n# config file, i.e. a series of assignments. You only have to provide \n# replacements, missing definitions are set to their default value.\n\nRTF_STYLESHEET_FILE    = \n\n# Set optional variables used in the generation of an rtf document. \n# Syntax is similar to doxygen's config file.\n\nRTF_EXTENSIONS_FILE    = \n\n#---------------------------------------------------------------------------\n# configuration options related to the man page output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \n# generate man pages\n\nGENERATE_MAN           = NO\n\n# The MAN_OUTPUT tag is used to specify where the man pages will be put. \n# If a relative path is entered the value of OUTPUT_DIRECTORY will be \n# put in front of it. If left blank `man' will be used as the default path.\n\nMAN_OUTPUT             = man\n\n# The MAN_EXTENSION tag determines the extension that is added to \n# the generated man pages (default is the subroutine's section .3)\n\nMAN_EXTENSION          = .3\n\n# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \n# then it will generate one additional man file for each entity \n# documented in the real man page(s). These additional files \n# only source the real man page, but without them the man command \n# would be unable to find the correct page. The default is NO.\n\nMAN_LINKS              = NO\n\n#---------------------------------------------------------------------------\n# configuration options related to the XML output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_XML tag is set to YES Doxygen will \n# generate an XML file that captures the structure of \n# the code including all documentation.\n\nGENERATE_XML           = NO\n\n# The XML_OUTPUT tag is used to specify where the XML pages will be put. \n# If a relative path is entered the value of OUTPUT_DIRECTORY will be \n# put in front of it. If left blank `xml' will be used as the default path.\n\nXML_OUTPUT             = xml\n\n# The XML_SCHEMA tag can be used to specify an XML schema, \n# which can be used by a validating XML parser to check the \n# syntax of the XML files.\n\nXML_SCHEMA             = \n\n# The XML_DTD tag can be used to specify an XML DTD, \n# which can be used by a validating XML parser to check the \n# syntax of the XML files.\n\nXML_DTD                = \n\n# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \n# dump the program listings (including syntax highlighting \n# and cross-referencing information) to the XML output. Note that \n# enabling this will significantly increase the size of the XML output.\n\nXML_PROGRAMLISTING     = YES\n\n#---------------------------------------------------------------------------\n# configuration options for the AutoGen Definitions output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \n# generate an AutoGen Definitions (see autogen.sf.net) file \n# that captures the structure of the code including all \n# documentation. Note that this feature is still experimental \n# and incomplete at the moment.\n\nGENERATE_AUTOGEN_DEF   = NO\n\n#---------------------------------------------------------------------------\n# configuration options related to the Perl module output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_PERLMOD tag is set to YES Doxygen will \n# generate a Perl module file that captures the structure of \n# the code including all documentation. Note that this \n# feature is still experimental and incomplete at the \n# moment.\n\nGENERATE_PERLMOD       = NO\n\n# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \n# the necessary Makefile rules, Perl scripts and LaTeX code to be able \n# to generate PDF and DVI output from the Perl module output.\n\nPERLMOD_LATEX          = NO\n\n# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \n# nicely formatted so it can be parsed by a human reader. \n# This is useful \n# if you want to understand what is going on. \n# On the other hand, if this \n# tag is set to NO the size of the Perl module output will be much smaller \n# and Perl will parse it just the same.\n\nPERLMOD_PRETTY         = YES\n\n# The names of the make variables in the generated doxyrules.make file \n# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \n# This is useful so different doxyrules.make files included by the same \n# Makefile don't overwrite each other's variables.\n\nPERLMOD_MAKEVAR_PREFIX = \n\n#---------------------------------------------------------------------------\n# Configuration options related to the preprocessor   \n#---------------------------------------------------------------------------\n\n# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \n# evaluate all C-preprocessor directives found in the sources and include \n# files.\n\nENABLE_PREPROCESSING   = YES\n\n# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \n# names in the source code. If set to NO (the default) only conditional \n# compilation will be performed. Macro expansion can be done in a controlled \n# way by setting EXPAND_ONLY_PREDEF to YES.\n\nMACRO_EXPANSION        = NO\n\n# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \n# then the macro expansion is limited to the macros specified with the \n# PREDEFINED and EXPAND_AS_DEFINED tags.\n\nEXPAND_ONLY_PREDEF     = NO\n\n# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \n# in the INCLUDE_PATH (see below) will be search if a #include is found.\n\nSEARCH_INCLUDES        = YES\n\n# The INCLUDE_PATH tag can be used to specify one or more directories that \n# contain include files that are not input files but should be processed by \n# the preprocessor.\n\nINCLUDE_PATH           = \n\n# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \n# patterns (like *.h and *.hpp) to filter out the header-files in the \n# directories. If left blank, the patterns specified with FILE_PATTERNS will \n# be used.\n\nINCLUDE_FILE_PATTERNS  = \n\n# The PREDEFINED tag can be used to specify one or more macro names that \n# are defined before the preprocessor is started (similar to the -D option of \n# gcc). The argument of the tag is a list of macros of the form: name \n# or name=definition (no spaces). If the definition and the = are \n# omitted =1 is assumed. To prevent a macro definition from being \n# undefined via #undef or recursively expanded use the := operator \n# instead of the = operator.\n\nPREDEFINED             = \n\n# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \n# this tag can be used to specify a list of macro names that should be expanded. \n# The macro definition that is found in the sources will be used. \n# Use the PREDEFINED tag if you want to use a different macro definition.\n\nEXPAND_AS_DEFINED      = \n\n# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \n# doxygen's preprocessor will remove all function-like macros that are alone \n# on a line, have an all uppercase name, and do not end with a semicolon. Such \n# function macros are typically used for boiler-plate code, and will confuse \n# the parser if not removed.\n\nSKIP_FUNCTION_MACROS   = YES\n\n#---------------------------------------------------------------------------\n# Configuration::additions related to external references   \n#---------------------------------------------------------------------------\n\n# The TAGFILES option can be used to specify one or more tagfiles. \n# Optionally an initial location of the external documentation \n# can be added for each tagfile. The format of a tag file without \n# this location is as follows: \n#  \n# TAGFILES = file1 file2 ... \n# Adding location for the tag files is done as follows: \n#  \n# TAGFILES = file1=loc1 \"file2 = loc2\" ... \n# where \"loc1\" and \"loc2\" can be relative or absolute paths or \n# URLs. If a location is present for each tag, the installdox tool \n# does not have to be run to correct the links. \n# Note that each tag file must have a unique name \n# (where the name does NOT include the path) \n# If a tag file is not located in the directory in which doxygen \n# is run, you must also specify the path to the tagfile here.\n\nTAGFILES               = \n\n# When a file name is specified after GENERATE_TAGFILE, doxygen will create \n# a tag file that is based on the input files it reads.\n\nGENERATE_TAGFILE       = \n\n# If the ALLEXTERNALS tag is set to YES all external classes will be listed \n# in the class index. If set to NO only the inherited external classes \n# will be listed.\n\nALLEXTERNALS           = NO\n\n# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \n# in the modules index. If set to NO, only the current project's groups will \n# be listed.\n\nEXTERNAL_GROUPS        = YES\n\n# The PERL_PATH should be the absolute path and name of the perl script \n# interpreter (i.e. the result of `which perl').\n\nPERL_PATH              = /usr/bin/perl\n\n#---------------------------------------------------------------------------\n# Configuration options related to the dot tool   \n#---------------------------------------------------------------------------\n\n# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \n# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \n# or super classes. Setting the tag to NO turns the diagrams off. Note that \n# this option is superseded by the HAVE_DOT option below. This is only a \n# fallback. It is recommended to install and use dot, since it yields more \n# powerful graphs.\n\nCLASS_DIAGRAMS         = YES\n\n# You can define message sequence charts within doxygen comments using the \\msc \n# command. Doxygen will then run the mscgen tool (see \n# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \n# documentation. The MSCGEN_PATH tag allows you to specify the directory where \n# the mscgen tool resides. If left empty the tool is assumed to be found in the \n# default search path.\n\nMSCGEN_PATH            = \n\n# If set to YES, the inheritance and collaboration graphs will hide \n# inheritance and usage relations if the target is undocumented \n# or is not a class.\n\nHIDE_UNDOC_RELATIONS   = YES\n\n# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \n# available from the path. This tool is part of Graphviz, a graph visualization \n# toolkit from AT&T and Lucent Bell Labs. The other options in this section \n# have no effect if this option is set to NO (the default)\n\nHAVE_DOT               = NO\n\n# By default doxygen will write a font called FreeSans.ttf to the output \n# directory and reference it in all dot files that doxygen generates. This \n# font does not include all possible unicode characters however, so when you need \n# these (or just want a differently looking font) you can specify the font name \n# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \n# which can be done by putting it in a standard location or by setting the \n# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \n# containing the font.\n\nDOT_FONTNAME           = FreeSans\n\n# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \n# The default size is 10pt.\n\nDOT_FONTSIZE           = 10\n\n# By default doxygen will tell dot to use the output directory to look for the \n# FreeSans.ttf font (which doxygen will put there itself). If you specify a \n# different font using DOT_FONTNAME you can set the path where dot \n# can find it using this tag.\n\nDOT_FONTPATH           = \n\n# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \n# will generate a graph for each documented class showing the direct and \n# indirect inheritance relations. Setting this tag to YES will force the \n# the CLASS_DIAGRAMS tag to NO.\n\nCLASS_GRAPH            = YES\n\n# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \n# will generate a graph for each documented class showing the direct and \n# indirect implementation dependencies (inheritance, containment, and \n# class references variables) of the class with other documented classes.\n\nCOLLABORATION_GRAPH    = YES\n\n# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \n# will generate a graph for groups, showing the direct groups dependencies\n\nGROUP_GRAPHS           = YES\n\n# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \n# collaboration diagrams in a style similar to the OMG's Unified Modeling \n# Language.\n\nUML_LOOK               = NO\n\n# If set to YES, the inheritance and collaboration graphs will show the \n# relations between templates and their instances.\n\nTEMPLATE_RELATIONS     = NO\n\n# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \n# tags are set to YES then doxygen will generate a graph for each documented \n# file showing the direct and indirect include dependencies of the file with \n# other documented files.\n\nINCLUDE_GRAPH          = YES\n\n# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \n# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \n# documented header file showing the documented files that directly or \n# indirectly include this file.\n\nINCLUDED_BY_GRAPH      = YES\n\n# If the CALL_GRAPH and HAVE_DOT options are set to YES then \n# doxygen will generate a call dependency graph for every global function \n# or class method. Note that enabling this option will significantly increase \n# the time of a run. So in most cases it will be better to enable call graphs \n# for selected functions only using the \\callgraph command.\n\nCALL_GRAPH             = NO\n\n# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \n# doxygen will generate a caller dependency graph for every global function \n# or class method. Note that enabling this option will significantly increase \n# the time of a run. So in most cases it will be better to enable caller \n# graphs for selected functions only using the \\callergraph command.\n\nCALLER_GRAPH           = NO\n\n# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \n# will graphical hierarchy of all classes instead of a textual one.\n\nGRAPHICAL_HIERARCHY    = YES\n\n# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \n# then doxygen will show the dependencies a directory has on other directories \n# in a graphical way. The dependency relations are determined by the #include \n# relations between the files in the directories.\n\nDIRECTORY_GRAPH        = YES\n\n# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \n# generated by dot. Possible values are png, jpg, or gif \n# If left blank png will be used.\n\nDOT_IMAGE_FORMAT       = png\n\n# The tag DOT_PATH can be used to specify the path where the dot tool can be \n# found. If left blank, it is assumed the dot tool can be found in the path.\n\nDOT_PATH               = \n\n# The DOTFILE_DIRS tag can be used to specify one or more directories that \n# contain dot files that are included in the documentation (see the \n# \\dotfile command).\n\nDOTFILE_DIRS           = \n\n# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \n# nodes that will be shown in the graph. If the number of nodes in a graph \n# becomes larger than this value, doxygen will truncate the graph, which is \n# visualized by representing a node as a red box. Note that doxygen if the \n# number of direct children of the root node in a graph is already larger than \n# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \n# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\n\nDOT_GRAPH_MAX_NODES    = 50\n\n# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \n# graphs generated by dot. A depth value of 3 means that only nodes reachable \n# from the root by following a path via at most 3 edges will be shown. Nodes \n# that lay further from the root node will be omitted. Note that setting this \n# option to 1 or 2 may greatly reduce the computation time needed for large \n# code bases. Also note that the size of a graph can be further restricted by \n# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\n\nMAX_DOT_GRAPH_DEPTH    = 0\n\n# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \n# background. This is disabled by default, because dot on Windows does not \n# seem to support this out of the box. Warning: Depending on the platform used, \n# enabling this option may lead to badly anti-aliased labels on the edges of \n# a graph (i.e. they become hard to read).\n\nDOT_TRANSPARENT        = NO\n\n# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \n# files in one run (i.e. multiple -o and -T options on the command line). This \n# makes dot run faster, but since only newer versions of dot (>1.8.10) \n# support this, this feature is disabled by default.\n\nDOT_MULTI_TARGETS      = NO\n\n# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \n# generate a legend page explaining the meaning of the various boxes and \n# arrows in the dot generated graphs.\n\nGENERATE_LEGEND        = YES\n\n# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \n# remove the intermediate dot files that are used to generate \n# the various graphs.\n\nDOT_CLEANUP            = YES\n\n#---------------------------------------------------------------------------\n# Options related to the search engine\n#---------------------------------------------------------------------------\n\n# The SEARCHENGINE tag specifies whether or not a search engine should be \n# used. If set to NO the values of all tags below this one will be ignored.\n\nSEARCHENGINE           = NO\n"
  },
  {
    "path": "external/TinyThread/doc/html/annotated.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: Class List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>Class List</h1>Here are the classes, structs, unions and interfaces with brief descriptions:<table>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"classtthread_1_1condition__variable.html\">condition_variable</a></td><td class=\"indexvalue\">Condition variable class </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"classtthread_1_1chrono_1_1duration.html\">duration&lt; _Rep, _Period &gt;</a></td><td class=\"indexvalue\">Duration template class </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"classtthread_1_1fast__mutex.html\">fast_mutex</a></td><td class=\"indexvalue\">Fast mutex class </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"classtthread_1_1thread_1_1id.html\">id</a></td><td class=\"indexvalue\">Thread ID </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"classtthread_1_1lock__guard.html\">lock_guard&lt; T &gt;</a></td><td class=\"indexvalue\">Lock guard class </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"classtthread_1_1mutex.html\">mutex</a></td><td class=\"indexvalue\">Mutex class </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"classtthread_1_1ratio.html\">ratio&lt; N, D &gt;</a></td><td class=\"indexvalue\">Minimal implementation of the <code>ratio</code> class </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"classtthread_1_1recursive__mutex.html\">recursive_mutex</a></td><td class=\"indexvalue\">Recursive mutex class </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"classtthread_1_1thread.html\">thread</a></td><td class=\"indexvalue\">Thread class </td></tr>\n</table>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:33 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/classes.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: Alphabetical List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>Class Index</h1><div class=\"qindex\"><a class=\"qindex\" href=\"#letter_C\">C</a>&nbsp;|&nbsp;<a class=\"qindex\" href=\"#letter_D\">D</a>&nbsp;|&nbsp;<a class=\"qindex\" href=\"#letter_F\">F</a>&nbsp;|&nbsp;<a class=\"qindex\" href=\"#letter_I\">I</a>&nbsp;|&nbsp;<a class=\"qindex\" href=\"#letter_L\">L</a>&nbsp;|&nbsp;<a class=\"qindex\" href=\"#letter_M\">M</a>&nbsp;|&nbsp;<a class=\"qindex\" href=\"#letter_R\">R</a>&nbsp;|&nbsp;<a class=\"qindex\" href=\"#letter_T\">T</a></div>\n<table align=\"center\" width=\"95%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tr><td><a name=\"letter_C\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&nbsp;&nbsp;C&nbsp;&nbsp;</div></td></tr></table>\n</td><td><a name=\"letter_F\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&nbsp;&nbsp;F&nbsp;&nbsp;</div></td></tr></table>\n</td><td><a name=\"letter_L\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&nbsp;&nbsp;L&nbsp;&nbsp;</div></td></tr></table>\n</td><td><a class=\"el\" href=\"classtthread_1_1mutex.html\">mutex</a> (<a class=\"el\" href=\"namespacetthread.html\">tthread</a>)&nbsp;&nbsp;&nbsp;</td><td><a class=\"el\" href=\"classtthread_1_1recursive__mutex.html\">recursive_mutex</a> (<a class=\"el\" href=\"namespacetthread.html\">tthread</a>)&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class=\"el\" href=\"classtthread_1_1condition__variable.html\">condition_variable</a> (<a class=\"el\" href=\"namespacetthread.html\">tthread</a>)&nbsp;&nbsp;&nbsp;</td><td><a class=\"el\" href=\"classtthread_1_1fast__mutex.html\">fast_mutex</a> (<a class=\"el\" href=\"namespacetthread.html\">tthread</a>)&nbsp;&nbsp;&nbsp;</td><td><a class=\"el\" href=\"classtthread_1_1lock__guard.html\">lock_guard</a> (<a class=\"el\" href=\"namespacetthread.html\">tthread</a>)&nbsp;&nbsp;&nbsp;</td><td><a name=\"letter_R\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&nbsp;&nbsp;R&nbsp;&nbsp;</div></td></tr></table>\n</td><td><a name=\"letter_T\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&nbsp;&nbsp;T&nbsp;&nbsp;</div></td></tr></table>\n</td></tr><tr><td><a name=\"letter_D\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&nbsp;&nbsp;D&nbsp;&nbsp;</div></td></tr></table>\n</td><td><a name=\"letter_I\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&nbsp;&nbsp;I&nbsp;&nbsp;</div></td></tr></table>\n</td><td><a name=\"letter_M\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&nbsp;&nbsp;M&nbsp;&nbsp;</div></td></tr></table>\n</td><td><a class=\"el\" href=\"classtthread_1_1ratio.html\">ratio</a> (<a class=\"el\" href=\"namespacetthread.html\">tthread</a>)&nbsp;&nbsp;&nbsp;</td><td><a class=\"el\" href=\"classtthread_1_1thread.html\">thread</a> (<a class=\"el\" href=\"namespacetthread.html\">tthread</a>)&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class=\"el\" href=\"classtthread_1_1chrono_1_1duration.html\">duration</a> (<a class=\"el\" href=\"namespacetthread_1_1chrono.html\">tthread::chrono</a>)&nbsp;&nbsp;&nbsp;</td><td><a class=\"el\" href=\"classtthread_1_1thread_1_1id.html\">thread::id</a> (<a class=\"el\" href=\"namespacetthread.html\">tthread</a>)&nbsp;&nbsp;&nbsp;</td></tr></table><div class=\"qindex\"><a class=\"qindex\" href=\"#letter_C\">C</a>&nbsp;|&nbsp;<a class=\"qindex\" href=\"#letter_D\">D</a>&nbsp;|&nbsp;<a class=\"qindex\" href=\"#letter_F\">F</a>&nbsp;|&nbsp;<a class=\"qindex\" href=\"#letter_I\">I</a>&nbsp;|&nbsp;<a class=\"qindex\" href=\"#letter_L\">L</a>&nbsp;|&nbsp;<a class=\"qindex\" href=\"#letter_M\">M</a>&nbsp;|&nbsp;<a class=\"qindex\" href=\"#letter_R\">R</a>&nbsp;|&nbsp;<a class=\"qindex\" href=\"#letter_T\">T</a></div>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:33 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/classtthread_1_1chrono_1_1duration-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>duration&lt; _Rep, _Period &gt; Member List</h1>This is the complete list of members for <a class=\"el\" href=\"classtthread_1_1chrono_1_1duration.html\">duration&lt; _Rep, _Period &gt;</a>, including all inherited members.<table>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1chrono_1_1duration.html#a3f01111f479d27be202983aacb03c020\">count</a>() const </td><td><a class=\"el\" href=\"classtthread_1_1chrono_1_1duration.html\">duration&lt; _Rep, _Period &gt;</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1chrono_1_1duration.html#a5d86b0d68c98b74e3a6e541c1759ef3e\">duration</a>(const _Rep2 &amp;r)</td><td><a class=\"el\" href=\"classtthread_1_1chrono_1_1duration.html\">duration&lt; _Rep, _Period &gt;</a></td><td><code> [inline, explicit]</code></td></tr>\n</table></div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/classtthread_1_1chrono_1_1duration.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: duration&lt; _Rep, _Period &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"navpath\"><a class=\"el\" href=\"namespacetthread.html\">tthread</a>::<a class=\"el\" href=\"namespacetthread_1_1chrono.html\">chrono</a>::<a class=\"el\" href=\"classtthread_1_1chrono_1_1duration.html\">duration</a>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>duration&lt; _Rep, _Period &gt; Class Template Reference</h1><!-- doxytag: class=\"tthread::chrono::duration\" -->\n<p>Duration template class.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"tinythread_8h_source.html\">tinythread.h</a>&gt;</code></p>\n\n<p><a href=\"classtthread_1_1chrono_1_1duration-members.html\">List of all members.</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Public Member Functions</h2></td></tr>\n<tr><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a5d86b0d68c98b74e3a6e541c1759ef3e\"></a><!-- doxytag: member=\"tthread::chrono::duration::duration\" ref=\"a5d86b0d68c98b74e3a6e541c1759ef3e\" args=\"(const _Rep2 &amp;r)\" -->\ntemplate&lt;class _Rep2 &gt; </td></tr>\n<tr><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&nbsp;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1chrono_1_1duration.html#a5d86b0d68c98b74e3a6e541c1759ef3e\">duration</a> (const _Rep2 &amp;r)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Construct a duration object with the given duration. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3f01111f479d27be202983aacb03c020\"></a><!-- doxytag: member=\"tthread::chrono::duration::count\" ref=\"a3f01111f479d27be202983aacb03c020\" args=\"() const \" -->\nrep&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1chrono_1_1duration.html#a3f01111f479d27be202983aacb03c020\">count</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return the value of the duration object. <br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<h3>template&lt;class _Rep, class _Period = ratio&lt;1&gt;&gt;<br/>\n class tthread::chrono::duration&lt; _Rep, _Period &gt;</h3>\n\n<p>Duration template class. </p>\n<p>This class provides enough functionality to implement <code><a class=\"el\" href=\"namespacetthread_1_1this__thread.html#acba48c6dbf12d38ab816c18c1ef96398\" title=\"Blocks the calling thread for a period of time.\">this_thread::sleep_for()</a></code>. </p>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"tinythread_8h_source.html\">tinythread.h</a></li>\n</ul>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/classtthread_1_1condition__variable-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>condition_variable Member List</h1>This is the complete list of members for <a class=\"el\" href=\"classtthread_1_1condition__variable.html\">condition_variable</a>, including all inherited members.<table>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1condition__variable.html#a9e62a1d1145c820a02469a48099fdfa9\">condition_variable</a>()</td><td><a class=\"el\" href=\"classtthread_1_1condition__variable.html\">condition_variable</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1condition__variable.html#ad35a04e61229c15c5211ebff00089326\">notify_all</a>()</td><td><a class=\"el\" href=\"classtthread_1_1condition__variable.html\">condition_variable</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1condition__variable.html#a84c2ec0dd971c593883198a323eeb394\">notify_one</a>()</td><td><a class=\"el\" href=\"classtthread_1_1condition__variable.html\">condition_variable</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1condition__variable.html#a4d877d804385bde4aacf2156e86faede\">wait</a>(_mutexT &amp;aMutex)</td><td><a class=\"el\" href=\"classtthread_1_1condition__variable.html\">condition_variable</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1condition__variable.html#a58df09046f5006d4170ae92717f1e50b\">~condition_variable</a>()</td><td><a class=\"el\" href=\"classtthread_1_1condition__variable.html\">condition_variable</a></td><td><code> [inline]</code></td></tr>\n</table></div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/classtthread_1_1condition__variable.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: condition_variable Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"navpath\"><a class=\"el\" href=\"namespacetthread.html\">tthread</a>::<a class=\"el\" href=\"classtthread_1_1condition__variable.html\">condition_variable</a>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>condition_variable Class Reference</h1><!-- doxytag: class=\"tthread::condition_variable\" -->\n<p>Condition variable class.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"tinythread_8h_source.html\">tinythread.h</a>&gt;</code></p>\n\n<p><a href=\"classtthread_1_1condition__variable-members.html\">List of all members.</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Public Member Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9e62a1d1145c820a02469a48099fdfa9\"></a><!-- doxytag: member=\"tthread::condition_variable::condition_variable\" ref=\"a9e62a1d1145c820a02469a48099fdfa9\" args=\"()\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1condition__variable.html#a9e62a1d1145c820a02469a48099fdfa9\">condition_variable</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Constructor. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a58df09046f5006d4170ae92717f1e50b\"></a><!-- doxytag: member=\"tthread::condition_variable::~condition_variable\" ref=\"a58df09046f5006d4170ae92717f1e50b\" args=\"()\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1condition__variable.html#a58df09046f5006d4170ae92717f1e50b\">~condition_variable</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Destructor. <br/></td></tr>\n<tr><td class=\"memTemplParams\" colspan=\"2\">template&lt;class _mutexT &gt; </td></tr>\n<tr><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1condition__variable.html#a4d877d804385bde4aacf2156e86faede\">wait</a> (_mutexT &amp;aMutex)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Wait for the condition.  <a href=\"#a4d877d804385bde4aacf2156e86faede\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1condition__variable.html#a84c2ec0dd971c593883198a323eeb394\">notify_one</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Notify one thread that is waiting for the condition.  <a href=\"#a84c2ec0dd971c593883198a323eeb394\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1condition__variable.html#ad35a04e61229c15c5211ebff00089326\">notify_all</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Notify all threads that are waiting for the condition.  <a href=\"#ad35a04e61229c15c5211ebff00089326\"></a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>Condition variable class. </p>\n<p>This is a signalling object for synchronizing the execution flow for several threads. Example usage: </p>\n<div class=\"fragment\"><pre class=\"fragment\"> <span class=\"comment\">// Shared data and associated mutex and condition variable objects</span>\n <span class=\"keywordtype\">int</span> count;\n mutex m;\n <a class=\"code\" href=\"classtthread_1_1condition__variable.html#a9e62a1d1145c820a02469a48099fdfa9\" title=\"Constructor.\">condition_variable</a> cond;\n\n <span class=\"comment\">// Wait for the counter to reach a certain number</span>\n <span class=\"keywordtype\">void</span> wait_counter(<span class=\"keywordtype\">int</span> targetCount)\n {\n   lock_guard&lt;mutex&gt; guard(m);\n   <span class=\"keywordflow\">while</span>(count &lt; targetCount)\n     cond.wait(m);\n }\n\n <span class=\"comment\">// Increment the counter, and notify waiting threads</span>\n <span class=\"keywordtype\">void</span> increment()\n {\n   lock_guard&lt;mutex&gt; guard(m);\n   ++ count;\n   cond.notify_all();\n }\n</pre></div> <hr/><h2>Member Function Documentation</h2>\n<a class=\"anchor\" id=\"ad35a04e61229c15c5211ebff00089326\"></a><!-- doxytag: member=\"tthread::condition_variable::notify_all\" ref=\"ad35a04e61229c15c5211ebff00089326\" args=\"()\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void notify_all </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Notify all threads that are waiting for the condition. </p>\n<p>All threads that are blocked waiting for this condition variable will be woken up. </p>\n<dl class=\"note\"><dt><b>Note:</b></dt><dd>Only threads that started waiting prior to this call will be woken up. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a84c2ec0dd971c593883198a323eeb394\"></a><!-- doxytag: member=\"tthread::condition_variable::notify_one\" ref=\"a84c2ec0dd971c593883198a323eeb394\" args=\"()\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void notify_one </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Notify one thread that is waiting for the condition. </p>\n<p>If at least one thread is blocked waiting for this condition variable, one will be woken up. </p>\n<dl class=\"note\"><dt><b>Note:</b></dt><dd>Only threads that started waiting prior to this call will be woken up. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a4d877d804385bde4aacf2156e86faede\"></a><!-- doxytag: member=\"tthread::condition_variable::wait\" ref=\"a4d877d804385bde4aacf2156e86faede\" args=\"(_mutexT &amp;aMutex)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void wait </td>\n          <td>(</td>\n          <td class=\"paramtype\">_mutexT &amp;&nbsp;</td>\n          <td class=\"paramname\"> <em>aMutex</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Wait for the condition. </p>\n<p>The function will block the calling thread until the condition variable is woken by <code><a class=\"el\" href=\"classtthread_1_1condition__variable.html#a84c2ec0dd971c593883198a323eeb394\" title=\"Notify one thread that is waiting for the condition.\">notify_one()</a></code>, <code><a class=\"el\" href=\"classtthread_1_1condition__variable.html#ad35a04e61229c15c5211ebff00089326\" title=\"Notify all threads that are waiting for the condition.\">notify_all()</a></code> or a spurious wake up. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>aMutex</em>&nbsp;</td><td>A mutex that will be unlocked when the wait operation starts, an locked again as soon as the wait operation is finished. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"tinythread_8h_source.html\">tinythread.h</a></li>\n</ul>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/classtthread_1_1fast__mutex-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>fast_mutex Member List</h1>This is the complete list of members for <a class=\"el\" href=\"classtthread_1_1fast__mutex.html\">fast_mutex</a>, including all inherited members.<table>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1fast__mutex.html#aed9ff6c4d30b4fe2775a15c6778d96f8\">fast_mutex</a>()</td><td><a class=\"el\" href=\"classtthread_1_1fast__mutex.html\">fast_mutex</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1fast__mutex.html#aa81aed607133209dade63a226818224d\">lock</a>()</td><td><a class=\"el\" href=\"classtthread_1_1fast__mutex.html\">fast_mutex</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1fast__mutex.html#aa24a64f788f142df670c3abc809d32b6\">try_lock</a>()</td><td><a class=\"el\" href=\"classtthread_1_1fast__mutex.html\">fast_mutex</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1fast__mutex.html#a9278be8203e1c42e2619179882ae4403\">unlock</a>()</td><td><a class=\"el\" href=\"classtthread_1_1fast__mutex.html\">fast_mutex</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1fast__mutex.html#a5eea296c19289a40d7b76df35ecf72a7\">~fast_mutex</a>()</td><td><a class=\"el\" href=\"classtthread_1_1fast__mutex.html\">fast_mutex</a></td><td><code> [inline]</code></td></tr>\n</table></div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:33 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/classtthread_1_1fast__mutex.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: fast_mutex Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"navpath\"><a class=\"el\" href=\"namespacetthread.html\">tthread</a>::<a class=\"el\" href=\"classtthread_1_1fast__mutex.html\">fast_mutex</a>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>fast_mutex Class Reference</h1><!-- doxytag: class=\"tthread::fast_mutex\" -->\n<p>Fast mutex class.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"fast__mutex_8h_source.html\">fast_mutex.h</a>&gt;</code></p>\n\n<p><a href=\"classtthread_1_1fast__mutex-members.html\">List of all members.</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Public Member Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aed9ff6c4d30b4fe2775a15c6778d96f8\"></a><!-- doxytag: member=\"tthread::fast_mutex::fast_mutex\" ref=\"aed9ff6c4d30b4fe2775a15c6778d96f8\" args=\"()\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1fast__mutex.html#aed9ff6c4d30b4fe2775a15c6778d96f8\">fast_mutex</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Constructor. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5eea296c19289a40d7b76df35ecf72a7\"></a><!-- doxytag: member=\"tthread::fast_mutex::~fast_mutex\" ref=\"a5eea296c19289a40d7b76df35ecf72a7\" args=\"()\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1fast__mutex.html#a5eea296c19289a40d7b76df35ecf72a7\">~fast_mutex</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Destructor. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1fast__mutex.html#aa81aed607133209dade63a226818224d\">lock</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Lock the mutex.  <a href=\"#aa81aed607133209dade63a226818224d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1fast__mutex.html#aa24a64f788f142df670c3abc809d32b6\">try_lock</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Try to lock the mutex.  <a href=\"#aa24a64f788f142df670c3abc809d32b6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1fast__mutex.html#a9278be8203e1c42e2619179882ae4403\">unlock</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Unlock the mutex.  <a href=\"#a9278be8203e1c42e2619179882ae4403\"></a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>Fast mutex class. </p>\n<p>This is a mutual exclusion object for synchronizing access to shared memory areas for several threads. It is similar to the <a class=\"el\" href=\"classtthread_1_1mutex.html\" title=\"Mutex class.\">tthread::mutex</a> class, but instead of using system level functions, it is implemented as an atomic spin lock with very low CPU overhead.</p>\n<p>The <code><a class=\"el\" href=\"classtthread_1_1fast__mutex.html\" title=\"Fast mutex class.\">fast_mutex</a></code> class is NOT compatible with the <code><a class=\"el\" href=\"classtthread_1_1condition__variable.html\" title=\"Condition variable class.\">condition_variable</a></code> class (however, it IS compatible with the <code><a class=\"el\" href=\"classtthread_1_1lock__guard.html\" title=\"Lock guard class.\">lock_guard</a></code> class). It should also be noted that the <code><a class=\"el\" href=\"classtthread_1_1fast__mutex.html\" title=\"Fast mutex class.\">fast_mutex</a></code> class typically does not provide as accurate thread scheduling as a the standard <code>mutex</code> class does.</p>\n<p>Because of the limitations of the class, it should only be used in situations where the mutex needs to be locked/unlocked very frequently.</p>\n<dl class=\"note\"><dt><b>Note:</b></dt><dd>The \"fast\" version of this class relies on inline assembler language, which is currently only supported for 32/64-bit Intel x86/AMD64 and PowerPC architectures on a limited number of compilers (GNU g++ and MS Visual C++). For other architectures/compilers, system functions are used instead. </dd></dl>\n<hr/><h2>Member Function Documentation</h2>\n<a class=\"anchor\" id=\"aa81aed607133209dade63a226818224d\"></a><!-- doxytag: member=\"tthread::fast_mutex::lock\" ref=\"aa81aed607133209dade63a226818224d\" args=\"()\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Lock the mutex. </p>\n<p>The method will block the calling thread until a lock on the mutex can be obtained. The mutex remains locked until <code><a class=\"el\" href=\"classtthread_1_1fast__mutex.html#a9278be8203e1c42e2619179882ae4403\" title=\"Unlock the mutex.\">unlock()</a></code> is called. </p>\n<dl class=\"see\"><dt><b>See also:</b></dt><dd><a class=\"el\" href=\"classtthread_1_1lock__guard.html\" title=\"Lock guard class.\">lock_guard</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aa24a64f788f142df670c3abc809d32b6\"></a><!-- doxytag: member=\"tthread::fast_mutex::try_lock\" ref=\"aa24a64f788f142df670c3abc809d32b6\" args=\"()\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool try_lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Try to lock the mutex. </p>\n<p>The method will try to lock the mutex. If it fails, the function will return immediately (non-blocking). </p>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>true</code> if the lock was acquired, or <code>false</code> if the lock could not be acquired. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9278be8203e1c42e2619179882ae4403\"></a><!-- doxytag: member=\"tthread::fast_mutex::unlock\" ref=\"a9278be8203e1c42e2619179882ae4403\" args=\"()\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void unlock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Unlock the mutex. </p>\n<p>If any threads are waiting for the lock on this mutex, one of them will be unblocked. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"fast__mutex_8h_source.html\">fast_mutex.h</a></li>\n</ul>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:33 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/classtthread_1_1lock__guard-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>lock_guard&lt; T &gt; Member List</h1>This is the complete list of members for <a class=\"el\" href=\"classtthread_1_1lock__guard.html\">lock_guard&lt; T &gt;</a>, including all inherited members.<table>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1lock__guard.html#a2c5fd14427acb035def5201e4cfd4540\">lock_guard</a>(mutex_type &amp;aMutex)</td><td><a class=\"el\" href=\"classtthread_1_1lock__guard.html\">lock_guard&lt; T &gt;</a></td><td><code> [inline, explicit]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1lock__guard.html#aa54999fb933a139807d39ed05e97aa6d\">~lock_guard</a>()</td><td><a class=\"el\" href=\"classtthread_1_1lock__guard.html\">lock_guard&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>\n</table></div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/classtthread_1_1lock__guard.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: lock_guard&lt; T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"navpath\"><a class=\"el\" href=\"namespacetthread.html\">tthread</a>::<a class=\"el\" href=\"classtthread_1_1lock__guard.html\">lock_guard</a>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>lock_guard&lt; T &gt; Class Template Reference</h1><!-- doxytag: class=\"tthread::lock_guard\" -->\n<p>Lock guard class.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"tinythread_8h_source.html\">tinythread.h</a>&gt;</code></p>\n\n<p><a href=\"classtthread_1_1lock__guard-members.html\">List of all members.</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Public Member Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2c5fd14427acb035def5201e4cfd4540\"></a><!-- doxytag: member=\"tthread::lock_guard::lock_guard\" ref=\"a2c5fd14427acb035def5201e4cfd4540\" args=\"(mutex_type &amp;aMutex)\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1lock__guard.html#a2c5fd14427acb035def5201e4cfd4540\">lock_guard</a> (mutex_type &amp;aMutex)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The constructor locks the mutex. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa54999fb933a139807d39ed05e97aa6d\"></a><!-- doxytag: member=\"tthread::lock_guard::~lock_guard\" ref=\"aa54999fb933a139807d39ed05e97aa6d\" args=\"()\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1lock__guard.html#aa54999fb933a139807d39ed05e97aa6d\">~lock_guard</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The destructor unlocks the mutex. <br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<h3>template&lt;class T&gt;<br/>\n class tthread::lock_guard&lt; T &gt;</h3>\n\n<p>Lock guard class. </p>\n<p>The constructor locks the mutex, and the destructor unlocks the mutex, so the mutex will automatically be unlocked when the lock guard goes out of scope. Example usage: </p>\n<div class=\"fragment\"><pre class=\"fragment\"> mutex m;\n <span class=\"keywordtype\">int</span> counter;\n\n <span class=\"keywordtype\">void</span> increment()\n {\n   lock_guard&lt;mutex&gt; guard(m);\n   ++ counter;\n }\n</pre></div> <hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"tinythread_8h_source.html\">tinythread.h</a></li>\n</ul>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/classtthread_1_1mutex-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>mutex Member List</h1>This is the complete list of members for <a class=\"el\" href=\"classtthread_1_1mutex.html\">mutex</a>, including all inherited members.<table>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1mutex.html#aa81aed607133209dade63a226818224d\">lock</a>()</td><td><a class=\"el\" href=\"classtthread_1_1mutex.html\">mutex</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1mutex.html#aef42e2bd0ea2ffa8ce1cdc7e5d183910\">mutex</a>()</td><td><a class=\"el\" href=\"classtthread_1_1mutex.html\">mutex</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1mutex.html#aa24a64f788f142df670c3abc809d32b6\">try_lock</a>()</td><td><a class=\"el\" href=\"classtthread_1_1mutex.html\">mutex</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1mutex.html#a9278be8203e1c42e2619179882ae4403\">unlock</a>()</td><td><a class=\"el\" href=\"classtthread_1_1mutex.html\">mutex</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1mutex.html#a3ab9328c3addeb57045f45910b10a1cf\">~mutex</a>()</td><td><a class=\"el\" href=\"classtthread_1_1mutex.html\">mutex</a></td><td><code> [inline]</code></td></tr>\n</table></div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/classtthread_1_1mutex.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: mutex Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"navpath\"><a class=\"el\" href=\"namespacetthread.html\">tthread</a>::<a class=\"el\" href=\"classtthread_1_1mutex.html\">mutex</a>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>mutex Class Reference</h1><!-- doxytag: class=\"tthread::mutex\" -->\n<p>Mutex class.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"tinythread_8h_source.html\">tinythread.h</a>&gt;</code></p>\n\n<p><a href=\"classtthread_1_1mutex-members.html\">List of all members.</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Public Member Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aef42e2bd0ea2ffa8ce1cdc7e5d183910\"></a><!-- doxytag: member=\"tthread::mutex::mutex\" ref=\"aef42e2bd0ea2ffa8ce1cdc7e5d183910\" args=\"()\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1mutex.html#aef42e2bd0ea2ffa8ce1cdc7e5d183910\">mutex</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Constructor. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3ab9328c3addeb57045f45910b10a1cf\"></a><!-- doxytag: member=\"tthread::mutex::~mutex\" ref=\"a3ab9328c3addeb57045f45910b10a1cf\" args=\"()\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1mutex.html#a3ab9328c3addeb57045f45910b10a1cf\">~mutex</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Destructor. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1mutex.html#aa81aed607133209dade63a226818224d\">lock</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Lock the mutex.  <a href=\"#aa81aed607133209dade63a226818224d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1mutex.html#aa24a64f788f142df670c3abc809d32b6\">try_lock</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Try to lock the mutex.  <a href=\"#aa24a64f788f142df670c3abc809d32b6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1mutex.html#a9278be8203e1c42e2619179882ae4403\">unlock</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Unlock the mutex.  <a href=\"#a9278be8203e1c42e2619179882ae4403\"></a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>Mutex class. </p>\n<p>This is a mutual exclusion object for synchronizing access to shared memory areas for several threads. The mutex is non-recursive (i.e. a program may deadlock if the thread that owns a mutex object calls <a class=\"el\" href=\"classtthread_1_1mutex.html#aa81aed607133209dade63a226818224d\" title=\"Lock the mutex.\">lock()</a> on that object). </p>\n<dl class=\"see\"><dt><b>See also:</b></dt><dd><a class=\"el\" href=\"classtthread_1_1recursive__mutex.html\" title=\"Recursive mutex class.\">recursive_mutex</a> </dd></dl>\n<hr/><h2>Member Function Documentation</h2>\n<a class=\"anchor\" id=\"aa81aed607133209dade63a226818224d\"></a><!-- doxytag: member=\"tthread::mutex::lock\" ref=\"aa81aed607133209dade63a226818224d\" args=\"()\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Lock the mutex. </p>\n<p>The method will block the calling thread until a lock on the mutex can be obtained. The mutex remains locked until <code><a class=\"el\" href=\"classtthread_1_1mutex.html#a9278be8203e1c42e2619179882ae4403\" title=\"Unlock the mutex.\">unlock()</a></code> is called. </p>\n<dl class=\"see\"><dt><b>See also:</b></dt><dd><a class=\"el\" href=\"classtthread_1_1lock__guard.html\" title=\"Lock guard class.\">lock_guard</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aa24a64f788f142df670c3abc809d32b6\"></a><!-- doxytag: member=\"tthread::mutex::try_lock\" ref=\"aa24a64f788f142df670c3abc809d32b6\" args=\"()\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool try_lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Try to lock the mutex. </p>\n<p>The method will try to lock the mutex. If it fails, the function will return immediately (non-blocking). </p>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>true</code> if the lock was acquired, or <code>false</code> if the lock could not be acquired. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9278be8203e1c42e2619179882ae4403\"></a><!-- doxytag: member=\"tthread::mutex::unlock\" ref=\"a9278be8203e1c42e2619179882ae4403\" args=\"()\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void unlock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Unlock the mutex. </p>\n<p>If any threads are waiting for the lock on this mutex, one of them will be unblocked. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"tinythread_8h_source.html\">tinythread.h</a></li>\n</ul>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/classtthread_1_1ratio-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>ratio&lt; N, D &gt; Member List</h1>This is the complete list of members for <a class=\"el\" href=\"classtthread_1_1ratio.html\">ratio&lt; N, D &gt;</a>, including all inherited members.<table>\n</table></div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/classtthread_1_1ratio.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: ratio&lt; N, D &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"navpath\"><a class=\"el\" href=\"namespacetthread.html\">tthread</a>::<a class=\"el\" href=\"classtthread_1_1ratio.html\">ratio</a>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>ratio&lt; N, D &gt; Class Template Reference</h1><!-- doxytag: class=\"tthread::ratio\" -->\n<p>Minimal implementation of the <code>ratio</code> class.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"tinythread_8h_source.html\">tinythread.h</a>&gt;</code></p>\n\n<p><a href=\"classtthread_1_1ratio-members.html\">List of all members.</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<h3>template&lt;__intmax_t N, __intmax_t D = 1&gt;<br/>\n class tthread::ratio&lt; N, D &gt;</h3>\n\n<p>Minimal implementation of the <code>ratio</code> class. </p>\n<p>This class provides enough functionality to implement some basic <code>chrono</code> classes. </p>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"tinythread_8h_source.html\">tinythread.h</a></li>\n</ul>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/classtthread_1_1recursive__mutex-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>recursive_mutex Member List</h1>This is the complete list of members for <a class=\"el\" href=\"classtthread_1_1recursive__mutex.html\">recursive_mutex</a>, including all inherited members.<table>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1recursive__mutex.html#aa81aed607133209dade63a226818224d\">lock</a>()</td><td><a class=\"el\" href=\"classtthread_1_1recursive__mutex.html\">recursive_mutex</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1recursive__mutex.html#a612d33a8905a3de216a8be0467538ede\">recursive_mutex</a>()</td><td><a class=\"el\" href=\"classtthread_1_1recursive__mutex.html\">recursive_mutex</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1recursive__mutex.html#aa24a64f788f142df670c3abc809d32b6\">try_lock</a>()</td><td><a class=\"el\" href=\"classtthread_1_1recursive__mutex.html\">recursive_mutex</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1recursive__mutex.html#a9278be8203e1c42e2619179882ae4403\">unlock</a>()</td><td><a class=\"el\" href=\"classtthread_1_1recursive__mutex.html\">recursive_mutex</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1recursive__mutex.html#a571b16a7b52c4d1fb0bdb5ff0482c100\">~recursive_mutex</a>()</td><td><a class=\"el\" href=\"classtthread_1_1recursive__mutex.html\">recursive_mutex</a></td><td><code> [inline]</code></td></tr>\n</table></div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/classtthread_1_1recursive__mutex.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: recursive_mutex Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"navpath\"><a class=\"el\" href=\"namespacetthread.html\">tthread</a>::<a class=\"el\" href=\"classtthread_1_1recursive__mutex.html\">recursive_mutex</a>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>recursive_mutex Class Reference</h1><!-- doxytag: class=\"tthread::recursive_mutex\" -->\n<p>Recursive mutex class.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"tinythread_8h_source.html\">tinythread.h</a>&gt;</code></p>\n\n<p><a href=\"classtthread_1_1recursive__mutex-members.html\">List of all members.</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Public Member Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a612d33a8905a3de216a8be0467538ede\"></a><!-- doxytag: member=\"tthread::recursive_mutex::recursive_mutex\" ref=\"a612d33a8905a3de216a8be0467538ede\" args=\"()\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1recursive__mutex.html#a612d33a8905a3de216a8be0467538ede\">recursive_mutex</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Constructor. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a571b16a7b52c4d1fb0bdb5ff0482c100\"></a><!-- doxytag: member=\"tthread::recursive_mutex::~recursive_mutex\" ref=\"a571b16a7b52c4d1fb0bdb5ff0482c100\" args=\"()\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1recursive__mutex.html#a571b16a7b52c4d1fb0bdb5ff0482c100\">~recursive_mutex</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Destructor. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1recursive__mutex.html#aa81aed607133209dade63a226818224d\">lock</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Lock the mutex.  <a href=\"#aa81aed607133209dade63a226818224d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1recursive__mutex.html#aa24a64f788f142df670c3abc809d32b6\">try_lock</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Try to lock the mutex.  <a href=\"#aa24a64f788f142df670c3abc809d32b6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1recursive__mutex.html#a9278be8203e1c42e2619179882ae4403\">unlock</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Unlock the mutex.  <a href=\"#a9278be8203e1c42e2619179882ae4403\"></a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>Recursive mutex class. </p>\n<p>This is a mutual exclusion object for synchronizing access to shared memory areas for several threads. The mutex is recursive (i.e. a thread may lock the mutex several times, as long as it unlocks the mutex the same number of times). </p>\n<dl class=\"see\"><dt><b>See also:</b></dt><dd><a class=\"el\" href=\"classtthread_1_1mutex.html\" title=\"Mutex class.\">mutex</a> </dd></dl>\n<hr/><h2>Member Function Documentation</h2>\n<a class=\"anchor\" id=\"aa81aed607133209dade63a226818224d\"></a><!-- doxytag: member=\"tthread::recursive_mutex::lock\" ref=\"aa81aed607133209dade63a226818224d\" args=\"()\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Lock the mutex. </p>\n<p>The method will block the calling thread until a lock on the mutex can be obtained. The mutex remains locked until <code><a class=\"el\" href=\"classtthread_1_1recursive__mutex.html#a9278be8203e1c42e2619179882ae4403\" title=\"Unlock the mutex.\">unlock()</a></code> is called. </p>\n<dl class=\"see\"><dt><b>See also:</b></dt><dd><a class=\"el\" href=\"classtthread_1_1lock__guard.html\" title=\"Lock guard class.\">lock_guard</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aa24a64f788f142df670c3abc809d32b6\"></a><!-- doxytag: member=\"tthread::recursive_mutex::try_lock\" ref=\"aa24a64f788f142df670c3abc809d32b6\" args=\"()\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool try_lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Try to lock the mutex. </p>\n<p>The method will try to lock the mutex. If it fails, the function will return immediately (non-blocking). </p>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>true</code> if the lock was acquired, or <code>false</code> if the lock could not be acquired. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9278be8203e1c42e2619179882ae4403\"></a><!-- doxytag: member=\"tthread::recursive_mutex::unlock\" ref=\"a9278be8203e1c42e2619179882ae4403\" args=\"()\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void unlock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Unlock the mutex. </p>\n<p>If any threads are waiting for the lock on this mutex, one of them will be unblocked. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"tinythread_8h_source.html\">tinythread.h</a></li>\n</ul>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/classtthread_1_1thread-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>thread Member List</h1>This is the complete list of members for <a class=\"el\" href=\"classtthread_1_1thread.html\">thread</a>, including all inherited members.<table>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1thread.html#afb4f4110b330d27774c16baec4f7d4f5\">get_id</a>() const </td><td><a class=\"el\" href=\"classtthread_1_1thread.html\">thread</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1thread.html#a3b04fb20012111681e37dfe63f105f6d\">hardware_concurrency</a>()</td><td><a class=\"el\" href=\"classtthread_1_1thread.html\">thread</a></td><td><code> [static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1thread.html#a6c7abfff648dad193674fc432ad4840d\">join</a>()</td><td><a class=\"el\" href=\"classtthread_1_1thread.html\">thread</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1thread.html#a5f02386ef3b6ef614321b6ec3606b242\">joinable</a>() const </td><td><a class=\"el\" href=\"classtthread_1_1thread.html\">thread</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1thread.html#ac9ba019ced75a29c52c41aff4e1ca20e\">native_handle</a>()</td><td><a class=\"el\" href=\"classtthread_1_1thread.html\">thread</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1thread.html#a1816c2a63c2941090f9a24e5a62efea1\">thread</a>()</td><td><a class=\"el\" href=\"classtthread_1_1thread.html\">thread</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1thread.html#ad8d7d1e1d70de55c08472077b2e1a953\">thread</a>(void(*aFunction)(void *), void *aArg)</td><td><a class=\"el\" href=\"classtthread_1_1thread.html\">thread</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1thread.html#a626c04c85c7e2b10215bc4a35062f177\">~thread</a>()</td><td><a class=\"el\" href=\"classtthread_1_1thread.html\">thread</a></td><td></td></tr>\n</table></div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/classtthread_1_1thread.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: thread Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"navpath\"><a class=\"el\" href=\"namespacetthread.html\">tthread</a>::<a class=\"el\" href=\"classtthread_1_1thread.html\">thread</a>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>thread Class Reference</h1><!-- doxytag: class=\"tthread::thread\" -->\n<p>Thread class.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"tinythread_8h_source.html\">tinythread.h</a>&gt;</code></p>\n\n<p><a href=\"classtthread_1_1thread-members.html\">List of all members.</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Classes</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1thread_1_1id.html\">id</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Thread ID.  <a href=\"classtthread_1_1thread_1_1id.html#_details\">More...</a><br/></td></tr>\n<tr><td colspan=\"2\"><h2>Public Member Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1thread.html#a1816c2a63c2941090f9a24e5a62efea1\">thread</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Default constructor.  <a href=\"#a1816c2a63c2941090f9a24e5a62efea1\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1thread.html#ad8d7d1e1d70de55c08472077b2e1a953\">thread</a> (void(*aFunction)(void *), void *aArg)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Thread starting constructor.  <a href=\"#ad8d7d1e1d70de55c08472077b2e1a953\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1thread.html#a626c04c85c7e2b10215bc4a35062f177\">~thread</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Destructor.  <a href=\"#a626c04c85c7e2b10215bc4a35062f177\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6c7abfff648dad193674fc432ad4840d\"></a><!-- doxytag: member=\"tthread::thread::join\" ref=\"a6c7abfff648dad193674fc432ad4840d\" args=\"()\" -->\nvoid&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1thread.html#a6c7abfff648dad193674fc432ad4840d\">join</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Wait for the thread to finish (join execution flows). <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1thread.html#a5f02386ef3b6ef614321b6ec3606b242\">joinable</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Check if the thread is joinable.  <a href=\"#a5f02386ef3b6ef614321b6ec3606b242\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afb4f4110b330d27774c16baec4f7d4f5\"></a><!-- doxytag: member=\"tthread::thread::get_id\" ref=\"afb4f4110b330d27774c16baec4f7d4f5\" args=\"() const \" -->\n<a class=\"el\" href=\"classtthread_1_1thread_1_1id.html\">id</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1thread.html#afb4f4110b330d27774c16baec4f7d4f5\">get_id</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return the thread ID of a thread object. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">native_handle_type&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1thread.html#ac9ba019ced75a29c52c41aff4e1ca20e\">native_handle</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Get the native handle for this thread.  <a href=\"#ac9ba019ced75a29c52c41aff4e1ca20e\"></a><br/></td></tr>\n<tr><td colspan=\"2\"><h2>Static Public Member Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static unsigned&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1thread.html#a3b04fb20012111681e37dfe63f105f6d\">hardware_concurrency</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Determine the number of threads which can possibly execute concurrently.  <a href=\"#a3b04fb20012111681e37dfe63f105f6d\"></a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>Thread class. </p>\n<hr/><h2>Constructor &amp; Destructor Documentation</h2>\n<a class=\"anchor\" id=\"a1816c2a63c2941090f9a24e5a62efea1\"></a><!-- doxytag: member=\"tthread::thread::thread\" ref=\"a1816c2a63c2941090f9a24e5a62efea1\" args=\"()\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classtthread_1_1thread.html\">thread</a> </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Default constructor. </p>\n<p>Construct a <code>thread</code> object without an associated thread of execution (i.e. non-joinable). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad8d7d1e1d70de55c08472077b2e1a953\"></a><!-- doxytag: member=\"tthread::thread::thread\" ref=\"ad8d7d1e1d70de55c08472077b2e1a953\" args=\"(void(*aFunction)(void *), void *aArg)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classtthread_1_1thread.html\">thread</a> </td>\n          <td>(</td>\n          <td class=\"paramtype\">void(*)(void *)&nbsp;</td>\n          <td class=\"paramname\"> <em>aFunction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">void *&nbsp;</td>\n          <td class=\"paramname\"> <em>aArg</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Thread starting constructor. </p>\n<p>Construct a <code>thread</code> object with a new thread of execution. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>aFunction</em>&nbsp;</td><td>A function pointer to a function of type: <code>void fun(void * arg)</code> </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>aArg</em>&nbsp;</td><td>Argument to the thread function. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"note\"><dt><b>Note:</b></dt><dd>This constructor is not fully compatible with the standard C++ thread class. It is more similar to the pthread_create() (POSIX) and CreateThread() (Windows) functions. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a626c04c85c7e2b10215bc4a35062f177\"></a><!-- doxytag: member=\"tthread::thread::~thread\" ref=\"a626c04c85c7e2b10215bc4a35062f177\" args=\"()\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">~<a class=\"el\" href=\"classtthread_1_1thread.html\">thread</a> </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Destructor. </p>\n<dl class=\"note\"><dt><b>Note:</b></dt><dd>If the thread is joinable upon destruction, <code>std::terminate()</code> will be called, which terminates the process. It is always wise to do <code><a class=\"el\" href=\"classtthread_1_1thread.html#a6c7abfff648dad193674fc432ad4840d\" title=\"Wait for the thread to finish (join execution flows).\">join()</a></code> before deleting a thread object. </dd></dl>\n\n</div>\n</div>\n<hr/><h2>Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a3b04fb20012111681e37dfe63f105f6d\"></a><!-- doxytag: member=\"tthread::thread::hardware_concurrency\" ref=\"a3b04fb20012111681e37dfe63f105f6d\" args=\"()\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">static unsigned hardware_concurrency </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [static]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Determine the number of threads which can possibly execute concurrently. </p>\n<p>This function is useful for determining the optimal number of threads to use for a task. </p>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd>The number of hardware thread contexts in the system. </dd></dl>\n<dl class=\"note\"><dt><b>Note:</b></dt><dd>If this value is not defined, the function returns zero (0). </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a5f02386ef3b6ef614321b6ec3606b242\"></a><!-- doxytag: member=\"tthread::thread::joinable\" ref=\"a5f02386ef3b6ef614321b6ec3606b242\" args=\"() const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool joinable </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Check if the thread is joinable. </p>\n<p>A thread object is joinable if it has an associated thread of execution. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ac9ba019ced75a29c52c41aff4e1ca20e\"></a><!-- doxytag: member=\"tthread::thread::native_handle\" ref=\"ac9ba019ced75a29c52c41aff4e1ca20e\" args=\"()\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">native_handle_type native_handle </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Get the native handle for this thread. </p>\n<dl class=\"note\"><dt><b>Note:</b></dt><dd>Under Windows, this is a <code>HANDLE</code>, and under POSIX systems, this is a <code>pthread_t</code>. </dd></dl>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"tinythread_8h_source.html\">tinythread.h</a></li>\n</ul>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/classtthread_1_1thread_1_1id-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>id Member List</h1>This is the complete list of members for <a class=\"el\" href=\"classtthread_1_1thread_1_1id.html\">id</a>, including all inherited members.<table>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classtthread_1_1thread_1_1id.html#a087060b582403885d08e89ad894ecc5d\">id</a>()</td><td><a class=\"el\" href=\"classtthread_1_1thread_1_1id.html\">id</a></td><td><code> [inline]</code></td></tr>\n</table></div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/classtthread_1_1thread_1_1id.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: id Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"navpath\"><a class=\"el\" href=\"namespacetthread.html\">tthread</a>::<a class=\"el\" href=\"classtthread_1_1thread.html\">thread</a>::<a class=\"el\" href=\"classtthread_1_1thread_1_1id.html\">id</a>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>id Class Reference</h1><!-- doxytag: class=\"tthread::thread::id\" -->\n<p>Thread ID.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"tinythread_8h_source.html\">tinythread.h</a>&gt;</code></p>\n\n<p><a href=\"classtthread_1_1thread_1_1id-members.html\">List of all members.</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Public Member Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1thread_1_1id.html#a087060b582403885d08e89ad894ecc5d\">id</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Default constructor.  <a href=\"#a087060b582403885d08e89ad894ecc5d\"></a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>Thread ID. </p>\n<p>The thread ID is a unique identifier for each thread. </p>\n<dl class=\"see\"><dt><b>See also:</b></dt><dd><a class=\"el\" href=\"classtthread_1_1thread.html#afb4f4110b330d27774c16baec4f7d4f5\" title=\"Return the thread ID of a thread object.\">thread::get_id()</a> </dd></dl>\n<hr/><h2>Constructor &amp; Destructor Documentation</h2>\n<a class=\"anchor\" id=\"a087060b582403885d08e89ad894ecc5d\"></a><!-- doxytag: member=\"tthread::thread::id::id\" ref=\"a087060b582403885d08e89ad894ecc5d\" args=\"()\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classtthread_1_1thread_1_1id.html\">id</a> </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Default constructor. </p>\n<p>The default constructed ID is that of thread without a thread of execution. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"tinythread_8h_source.html\">tinythread.h</a></li>\n</ul>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/doxygen.css",
    "content": "/* The standard CSS for doxygen */\n\nbody, table, div, p, dl {\n\tfont-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;\n\tfont-size: 12px;\n}\n\n/* @group Heading Levels */\n\nh1 {\n\ttext-align: center;\n\tfont-size: 150%;\n}\n\nh2 {\n\tfont-size: 120%;\n}\n\nh3 {\n\tfont-size: 100%;\n}\n\ndt {\n\tfont-weight: bold;\n}\n\ndiv.multicol {\n\t-moz-column-gap: 1em;\n\t-webkit-column-gap: 1em;\n\t-moz-column-count: 3;\n\t-webkit-column-count: 3;\n}\n\np.startli, p.startdd, p.starttd {\n\tmargin-top: 2px;\n}\n\np.endli {\n\tmargin-bottom: 0px;\n}\n\np.enddd {\n\tmargin-bottom: 4px;\n}\n\np.endtd {\n\tmargin-bottom: 2px;\n}\n\n/* @end */\n\ncaption {\n\tfont-weight: bold;\n}\n\nspan.legend {\n        font-size: 70%;\n        text-align: center;\n}\n\nh3.version {\n        font-size: 90%;\n        text-align: center;\n}\n\ndiv.qindex, div.navtab{\n\tbackground-color: #e8eef2;\n\tborder: 1px solid #84b0c7;\n\ttext-align: center;\n\tmargin: 2px;\n\tpadding: 2px;\n}\n\ndiv.qindex, div.navpath {\n\twidth: 100%;\n\tline-height: 140%;\n}\n\ndiv.navtab {\n\tmargin-right: 15px;\n}\n\n/* @group Link Styling */\n\na {\n\tcolor: #153788;\n\tfont-weight: normal;\n\ttext-decoration: none;\n}\n\n.contents a:visited {\n\tcolor: #1b77c5;\n}\n\na:hover {\n\ttext-decoration: underline;\n}\n\na.qindex {\n\tfont-weight: bold;\n}\n\na.qindexHL {\n\tfont-weight: bold;\n\tbackground-color: #6666cc;\n\tcolor: #ffffff;\n\tborder: 1px double #9295C2;\n}\n\n.contents a.qindexHL:visited {\n        color: #ffffff;\n}\n\na.el {\n\tfont-weight: bold;\n}\n\na.elRef {\n}\n\na.code {\n\tcolor: #3030f0;\n}\n\na.codeRef {\n\tcolor: #3030f0;\n}\n\n/* @end */\n\ndl.el {\n\tmargin-left: -1cm;\n}\n\n.fragment {\n\tfont-family: monospace, fixed;\n\tfont-size: 105%;\n}\n\npre.fragment {\n\tborder: 1px solid #CCCCCC;\n\tbackground-color: #f5f5f5;\n\tpadding: 4px 6px;\n\tmargin: 4px 8px 4px 2px;\n\toverflow: auto;\n\tword-wrap: break-word;\n\tfont-size:  9pt;\n\tline-height: 125%;\n}\n\ndiv.ah {\n\tbackground-color: black;\n\tfont-weight: bold;\n\tcolor: #ffffff;\n\tmargin-bottom: 3px;\n\tmargin-top: 3px\n}\n\ndiv.groupHeader {\n\tmargin-left: 16px;\n\tmargin-top: 12px;\n\tmargin-bottom: 6px;\n\tfont-weight: bold;\n}\n\ndiv.groupText {\n\tmargin-left: 16px;\n\tfont-style: italic;\n}\n\nbody {\n\tbackground: white;\n\tcolor: black;\n\tmargin-right: 20px;\n\tmargin-left: 20px;\n}\n\ntd.indexkey {\n\tbackground-color: #e8eef2;\n\tfont-weight: bold;\n\tborder: 1px solid #CCCCCC;\n\tmargin: 2px 0px 2px 0;\n\tpadding: 2px 10px;\n}\n\ntd.indexvalue {\n\tbackground-color: #e8eef2;\n\tborder: 1px solid #CCCCCC;\n\tpadding: 2px 10px;\n\tmargin: 2px 0px;\n}\n\ntr.memlist {\n\tbackground-color: #f0f0f0;\n}\n\np.formulaDsp {\n\ttext-align: center;\n}\n\nimg.formulaDsp {\n\t\n}\n\nimg.formulaInl {\n\tvertical-align: middle;\n}\n\ndiv.center {\n\ttext-align: center;\n        margin-top: 0px;\n        margin-bottom: 0px;\n        padding: 0px;\n}\n\ndiv.center img {\n\tborder: 0px;\n}\n\nimg.footer {\n\tborder: 0px;\n\tvertical-align: middle;\n}\n\n/* @group Code Colorization */\n\nspan.keyword {\n\tcolor: #008000\n}\n\nspan.keywordtype {\n\tcolor: #604020\n}\n\nspan.keywordflow {\n\tcolor: #e08000\n}\n\nspan.comment {\n\tcolor: #800000\n}\n\nspan.preprocessor {\n\tcolor: #806020\n}\n\nspan.stringliteral {\n\tcolor: #002080\n}\n\nspan.charliteral {\n\tcolor: #008080\n}\n\nspan.vhdldigit { \n\tcolor: #ff00ff \n}\n\nspan.vhdlchar { \n\tcolor: #000000 \n}\n\nspan.vhdlkeyword { \n\tcolor: #700070 \n}\n\nspan.vhdllogic { \n\tcolor: #ff0000 \n}\n\n/* @end */\n\n.search {\n\tcolor: #003399;\n\tfont-weight: bold;\n}\n\nform.search {\n\tmargin-bottom: 0px;\n\tmargin-top: 0px;\n}\n\ninput.search {\n\tfont-size: 75%;\n\tcolor: #000080;\n\tfont-weight: normal;\n\tbackground-color: #e8eef2;\n}\n\ntd.tiny {\n\tfont-size: 75%;\n}\n\n.dirtab {\n\tpadding: 4px;\n\tborder-collapse: collapse;\n\tborder: 1px solid #84b0c7;\n}\n\nth.dirtab {\n\tbackground: #e8eef2;\n\tfont-weight: bold;\n}\n\nhr {\n\theight: 0px;\n\tborder: none;\n\tborder-top: 1px solid #666;\n}\n\nhr.footer {\n\theight: 1px;\n}\n\n/* @group Member Descriptions */\n\n.mdescLeft, .mdescRight,\n.memItemLeft, .memItemRight,\n.memTemplItemLeft, .memTemplItemRight, .memTemplParams {\n\tbackground-color: #FAFAFA;\n\tborder: none;\n\tmargin: 4px;\n\tpadding: 1px 0 0 8px;\n}\n\n.mdescLeft, .mdescRight {\n\tpadding: 0px 8px 4px 8px;\n\tcolor: #555;\n}\n\n.memItemLeft, .memItemRight, .memTemplParams {\n\tborder-top: 1px solid #ccc;\n}\n\n.memItemLeft, .memTemplItemLeft {\n        white-space: nowrap;\n}\n\n.memTemplParams {\n\tcolor: #606060;\n        white-space: nowrap;\n}\n\n/* @end */\n\n/* @group Member Details */\n\n/* Styles for detailed member documentation */\n\n.memtemplate {\n\tfont-size: 80%;\n\tcolor: #606060;\n\tfont-weight: normal;\n\tmargin-left: 3px;\n}\n\n.memnav {\n\tbackground-color: #e8eef2;\n\tborder: 1px solid #84b0c7;\n\ttext-align: center;\n\tmargin: 2px;\n\tmargin-right: 15px;\n\tpadding: 2px;\n}\n\n.memitem {\n\tpadding: 0;\n\tmargin-bottom: 10px;\n}\n\n.memname {\n        white-space: nowrap;\n        font-weight: bold;\n        margin-left: 6px;\n}\n\n.memproto {\n        border-top: 1px solid #84b0c7;          \n        border-left: 1px solid #84b0c7;         \n        border-right: 1px solid #84b0c7; \n        padding: 0;\n        background-color: #d5e1e8;\n        font-weight: bold;\n        /* firefox specific markup */\n        background-image: -moz-linear-gradient(rgba(228, 233, 245, 1.0) 0%, rgba(193, 205, 232, 1.0) 100%);\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n        -moz-border-radius-topright: 8px;\n        -moz-border-radius-topleft: 8px;\n        /* webkit specific markup */\n        background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(228, 233, 245, 1.0)), to(rgba(193, 205, 232, 1.0)));\n        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        -webkit-border-top-right-radius: 8px;\n        -webkit-border-top-left-radius: 8px;\n\n}\n\n.memdoc {\n        border-bottom: 1px solid #84b0c7;      \n        border-left: 1px solid #84b0c7;      \n        border-right: 1px solid #84b0c7; \n        padding: 2px 5px;\n        background-color: #eef3f5;\n        border-top-width: 0;\n        /* firefox specific markup */\n        -moz-border-radius-bottomleft: 8px;\n        -moz-border-radius-bottomright: 8px;\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n        /* webkit specific markup */\n        -webkit-border-bottom-left-radius: 8px;\n        -webkit-border-bottom-right-radius: 8px;\n        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n}\n\n.paramkey {\n\ttext-align: right;\n}\n\n.paramtype {\n\twhite-space: nowrap;\n}\n\n.paramname {\n\tcolor: #602020;\n\twhite-space: nowrap;\n}\n.paramname em {\n\tfont-style: normal;\n}\n\n/* @end */\n\n/* @group Directory (tree) */\n\n/* for the tree view */\n\n.ftvtree {\n\tfont-family: sans-serif;\n\tmargin: 0.5em;\n}\n\n/* these are for tree view when used as main index */\n\n.directory {\n\tfont-size: 9pt;\n\tfont-weight: bold;\n}\n\n.directory h3 {\n\tmargin: 0px;\n\tmargin-top: 1em;\n\tfont-size: 11pt;\n}\n\n/*\nThe following two styles can be used to replace the root node title\nwith an image of your choice.  Simply uncomment the next two styles,\nspecify the name of your image and be sure to set 'height' to the\nproper pixel height of your image.\n*/\n\n/*\n.directory h3.swap {\n\theight: 61px;\n\tbackground-repeat: no-repeat;\n\tbackground-image: url(\"yourimage.gif\");\n}\n.directory h3.swap span {\n\tdisplay: none;\n}\n*/\n\n.directory > h3 {\n\tmargin-top: 0;\n}\n\n.directory p {\n\tmargin: 0px;\n\twhite-space: nowrap;\n}\n\n.directory div {\n\tdisplay: none;\n\tmargin: 0px;\n}\n\n.directory img {\n\tvertical-align: -30%;\n}\n\n/* these are for tree view when not used as main index */\n\n.directory-alt {\n\tfont-size: 100%;\n\tfont-weight: bold;\n}\n\n.directory-alt h3 {\n\tmargin: 0px;\n\tmargin-top: 1em;\n\tfont-size: 11pt;\n}\n\n.directory-alt > h3 {\n\tmargin-top: 0;\n}\n\n.directory-alt p {\n\tmargin: 0px;\n\twhite-space: nowrap;\n}\n\n.directory-alt div {\n\tdisplay: none;\n\tmargin: 0px;\n}\n\n.directory-alt img {\n\tvertical-align: -30%;\n}\n\n/* @end */\n\naddress {\n\tfont-style: normal;\n\tcolor: #333;\n}\n\ntable.doxtable {\n\tborder-collapse:collapse;\n}\n\ntable.doxtable td, table.doxtable th {\n\tborder: 1px solid #153788;\n\tpadding: 3px 7px 2px;\n}\n\ntable.doxtable th {\n\tbackground-color: #254798;\n\tcolor: #FFFFFF;\n\tfont-size: 110%;\n\tpadding-bottom: 4px;\n\tpadding-top: 5px;\n\ttext-align:left;\n}\n\n"
  },
  {
    "path": "external/TinyThread/doc/html/fast__mutex_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: fast_mutex.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"files.html\"><span>File&nbsp;List</span></a></li>\n      <li><a href=\"globals.html\"><span>File&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>fast_mutex.h File Reference</h1><code>#include &lt;pthread.h&gt;</code><br/>\n\n<p><a href=\"fast__mutex_8h_source.html\">Go to the source code of this file.</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Classes</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1fast__mutex.html\">fast_mutex</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Fast mutex class.  <a href=\"classtthread_1_1fast__mutex.html#_details\">More...</a><br/></td></tr>\n<tr><td colspan=\"2\"><h2>Namespaces</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread.html\">tthread</a></td></tr>\n\n<p><tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>Main name space for TinyThread++. </p>\n<br/></td></tr>\n</p>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:33 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/fast__mutex_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: fast_mutex.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"files.html\"><span>File&nbsp;List</span></a></li>\n      <li><a href=\"globals.html\"><span>File&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n<h1>fast_mutex.h</h1><a href=\"fast__mutex_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><pre class=\"fragment\"><a name=\"l00001\"></a>00001 <span class=\"comment\">/*</span>\n<a name=\"l00002\"></a>00002 <span class=\"comment\">Copyright (c) 2010 Marcus Geelnard</span>\n<a name=\"l00003\"></a>00003 <span class=\"comment\"></span>\n<a name=\"l00004\"></a>00004 <span class=\"comment\">This software is provided &#39;as-is&#39;, without any express or implied</span>\n<a name=\"l00005\"></a>00005 <span class=\"comment\">warranty. In no event will the authors be held liable for any damages</span>\n<a name=\"l00006\"></a>00006 <span class=\"comment\">arising from the use of this software.</span>\n<a name=\"l00007\"></a>00007 <span class=\"comment\"></span>\n<a name=\"l00008\"></a>00008 <span class=\"comment\">Permission is granted to anyone to use this software for any purpose,</span>\n<a name=\"l00009\"></a>00009 <span class=\"comment\">including commercial applications, and to alter it and redistribute it</span>\n<a name=\"l00010\"></a>00010 <span class=\"comment\">freely, subject to the following restrictions:</span>\n<a name=\"l00011\"></a>00011 <span class=\"comment\"></span>\n<a name=\"l00012\"></a>00012 <span class=\"comment\">    1. The origin of this software must not be misrepresented; you must not</span>\n<a name=\"l00013\"></a>00013 <span class=\"comment\">    claim that you wrote the original software. If you use this software</span>\n<a name=\"l00014\"></a>00014 <span class=\"comment\">    in a product, an acknowledgment in the product documentation would be</span>\n<a name=\"l00015\"></a>00015 <span class=\"comment\">    appreciated but is not required.</span>\n<a name=\"l00016\"></a>00016 <span class=\"comment\"></span>\n<a name=\"l00017\"></a>00017 <span class=\"comment\">    2. Altered source versions must be plainly marked as such, and must not be</span>\n<a name=\"l00018\"></a>00018 <span class=\"comment\">    misrepresented as being the original software.</span>\n<a name=\"l00019\"></a>00019 <span class=\"comment\"></span>\n<a name=\"l00020\"></a>00020 <span class=\"comment\">    3. This notice may not be removed or altered from any source</span>\n<a name=\"l00021\"></a>00021 <span class=\"comment\">    distribution.</span>\n<a name=\"l00022\"></a>00022 <span class=\"comment\">*/</span>\n<a name=\"l00023\"></a>00023 \n<a name=\"l00024\"></a>00024 <span class=\"preprocessor\">#ifndef _FAST_MUTEX_H_</span>\n<a name=\"l00025\"></a>00025 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#define _FAST_MUTEX_H_</span>\n<a name=\"l00026\"></a>00026 <span class=\"preprocessor\"></span>\n<a name=\"l00028\"></a>00028 \n<a name=\"l00029\"></a>00029 <span class=\"comment\">// Which platform are we on?</span>\n<a name=\"l00030\"></a>00030 <span class=\"preprocessor\">#if !defined(_TTHREAD_PLATFORM_DEFINED_)</span>\n<a name=\"l00031\"></a>00031 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #if defined(_WIN32) || defined(__WIN32__) || defined(__WINDOWS__)</span>\n<a name=\"l00032\"></a>00032 <span class=\"preprocessor\"></span><span class=\"preprocessor\">    #define _TTHREAD_WIN32_</span>\n<a name=\"l00033\"></a>00033 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #else</span>\n<a name=\"l00034\"></a>00034 <span class=\"preprocessor\"></span><span class=\"preprocessor\">    #define _TTHREAD_POSIX_</span>\n<a name=\"l00035\"></a>00035 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #endif</span>\n<a name=\"l00036\"></a>00036 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #define _TTHREAD_PLATFORM_DEFINED_</span>\n<a name=\"l00037\"></a>00037 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#endif</span>\n<a name=\"l00038\"></a>00038 <span class=\"preprocessor\"></span>\n<a name=\"l00039\"></a>00039 <span class=\"comment\">// Check if we can support the assembly language level implementation (otherwise</span>\n<a name=\"l00040\"></a>00040 <span class=\"comment\">// revert to the system API)</span>\n<a name=\"l00041\"></a>00041 <span class=\"preprocessor\">#if (defined(__GNUC__) &amp;&amp; (defined(__i386__) || defined(__x86_64__))) || \\</span>\n<a name=\"l00042\"></a>00042 <span class=\"preprocessor\">    (defined(_MSC_VER) &amp;&amp; (defined(_M_IX86) || defined(_M_X64))) || \\</span>\n<a name=\"l00043\"></a>00043 <span class=\"preprocessor\">    (defined(__GNUC__) &amp;&amp; (defined(__ppc__)))</span>\n<a name=\"l00044\"></a>00044 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #define _FAST_MUTEX_ASM_</span>\n<a name=\"l00045\"></a>00045 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#else</span>\n<a name=\"l00046\"></a>00046 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #define _FAST_MUTEX_SYS_</span>\n<a name=\"l00047\"></a>00047 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#endif</span>\n<a name=\"l00048\"></a>00048 <span class=\"preprocessor\"></span>\n<a name=\"l00049\"></a>00049 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00050\"></a>00050 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #include &lt;windows.h&gt;</span>\n<a name=\"l00051\"></a>00051 <span class=\"preprocessor\">#else</span>\n<a name=\"l00052\"></a>00052 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #ifdef _FAST_MUTEX_ASM_</span>\n<a name=\"l00053\"></a>00053 <span class=\"preprocessor\"></span><span class=\"preprocessor\">    #include &lt;sched.h&gt;</span>\n<a name=\"l00054\"></a>00054 <span class=\"preprocessor\">  #else</span>\n<a name=\"l00055\"></a>00055 <span class=\"preprocessor\"></span><span class=\"preprocessor\">    #include &lt;pthread.h&gt;</span>\n<a name=\"l00056\"></a>00056 <span class=\"preprocessor\">  #endif</span>\n<a name=\"l00057\"></a>00057 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#endif</span>\n<a name=\"l00058\"></a>00058 <span class=\"preprocessor\"></span>\n<a name=\"l00059\"></a><a class=\"code\" href=\"namespacetthread.html\">00059</a> <span class=\"keyword\">namespace </span>tthread {\n<a name=\"l00060\"></a>00060 \n<a name=\"l00080\"></a><a class=\"code\" href=\"classtthread_1_1fast__mutex.html\">00080</a> <span class=\"keyword\">class </span><a class=\"code\" href=\"classtthread_1_1fast__mutex.html\" title=\"Fast mutex class.\">fast_mutex</a> {\n<a name=\"l00081\"></a>00081   <span class=\"keyword\">public</span>:\n<a name=\"l00083\"></a>00083 <span class=\"preprocessor\">#if defined(_FAST_MUTEX_ASM_)</span>\n<a name=\"l00084\"></a>00084 <span class=\"preprocessor\"></span>    <a class=\"code\" href=\"classtthread_1_1fast__mutex.html#aed9ff6c4d30b4fe2775a15c6778d96f8\" title=\"Constructor.\">fast_mutex</a>() : mLock(0) {}\n<a name=\"l00085\"></a>00085 <span class=\"preprocessor\">#else</span>\n<a name=\"l00086\"></a><a class=\"code\" href=\"classtthread_1_1fast__mutex.html#aed9ff6c4d30b4fe2775a15c6778d96f8\">00086</a> <span class=\"preprocessor\"></span>    <a class=\"code\" href=\"classtthread_1_1fast__mutex.html#aed9ff6c4d30b4fe2775a15c6778d96f8\" title=\"Constructor.\">fast_mutex</a>()\n<a name=\"l00087\"></a>00087     {\n<a name=\"l00088\"></a>00088 <span class=\"preprocessor\">  #if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00089\"></a>00089 <span class=\"preprocessor\"></span>      InitializeCriticalSection(&amp;mHandle);\n<a name=\"l00090\"></a>00090 <span class=\"preprocessor\">  #elif defined(_TTHREAD_POSIX_)</span>\n<a name=\"l00091\"></a>00091 <span class=\"preprocessor\"></span>      pthread_mutex_init(&amp;mHandle, NULL);\n<a name=\"l00092\"></a>00092 <span class=\"preprocessor\">  #endif</span>\n<a name=\"l00093\"></a>00093 <span class=\"preprocessor\"></span>    }\n<a name=\"l00094\"></a>00094 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00095\"></a>00095 <span class=\"preprocessor\"></span>\n<a name=\"l00096\"></a>00096 <span class=\"preprocessor\">#if !defined(_FAST_MUTEX_ASM_)</span>\n<a name=\"l00097\"></a>00097 <span class=\"preprocessor\"></span>\n<a name=\"l00098\"></a><a class=\"code\" href=\"classtthread_1_1fast__mutex.html#a5eea296c19289a40d7b76df35ecf72a7\">00098</a>     <a class=\"code\" href=\"classtthread_1_1fast__mutex.html#a5eea296c19289a40d7b76df35ecf72a7\" title=\"Destructor.\">~fast_mutex</a>()\n<a name=\"l00099\"></a>00099     {\n<a name=\"l00100\"></a>00100 <span class=\"preprocessor\">  #if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00101\"></a>00101 <span class=\"preprocessor\"></span>      DeleteCriticalSection(&amp;mHandle);\n<a name=\"l00102\"></a>00102 <span class=\"preprocessor\">  #elif defined(_TTHREAD_POSIX_)</span>\n<a name=\"l00103\"></a>00103 <span class=\"preprocessor\"></span>      pthread_mutex_destroy(&amp;mHandle);\n<a name=\"l00104\"></a>00104 <span class=\"preprocessor\">  #endif</span>\n<a name=\"l00105\"></a>00105 <span class=\"preprocessor\"></span>    }\n<a name=\"l00106\"></a>00106 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00107\"></a>00107 <span class=\"preprocessor\"></span>\n<a name=\"l00112\"></a><a class=\"code\" href=\"classtthread_1_1fast__mutex.html#aa81aed607133209dade63a226818224d\">00112</a>     <span class=\"keyword\">inline</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classtthread_1_1fast__mutex.html#aa81aed607133209dade63a226818224d\" title=\"Lock the mutex.\">lock</a>()\n<a name=\"l00113\"></a>00113     {\n<a name=\"l00114\"></a>00114 <span class=\"preprocessor\">#if defined(_FAST_MUTEX_ASM_)</span>\n<a name=\"l00115\"></a>00115 <span class=\"preprocessor\"></span>      <span class=\"keywordtype\">bool</span> gotLock;\n<a name=\"l00116\"></a>00116       <span class=\"keywordflow\">do</span> {\n<a name=\"l00117\"></a>00117         gotLock = <a class=\"code\" href=\"classtthread_1_1fast__mutex.html#aa24a64f788f142df670c3abc809d32b6\" title=\"Try to lock the mutex.\">try_lock</a>();\n<a name=\"l00118\"></a>00118         <span class=\"keywordflow\">if</span>(!gotLock)\n<a name=\"l00119\"></a>00119         {\n<a name=\"l00120\"></a>00120 <span class=\"preprocessor\">  #if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00121\"></a>00121 <span class=\"preprocessor\"></span>          Sleep(0);\n<a name=\"l00122\"></a>00122 <span class=\"preprocessor\">  #elif defined(_TTHREAD_POSIX_)</span>\n<a name=\"l00123\"></a>00123 <span class=\"preprocessor\"></span>          sched_yield();\n<a name=\"l00124\"></a>00124 <span class=\"preprocessor\">  #endif</span>\n<a name=\"l00125\"></a>00125 <span class=\"preprocessor\"></span>        }\n<a name=\"l00126\"></a>00126       } <span class=\"keywordflow\">while</span>(!gotLock);\n<a name=\"l00127\"></a>00127 <span class=\"preprocessor\">#else</span>\n<a name=\"l00128\"></a>00128 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00129\"></a>00129 <span class=\"preprocessor\"></span>      EnterCriticalSection(&amp;mHandle);\n<a name=\"l00130\"></a>00130 <span class=\"preprocessor\">  #elif defined(_TTHREAD_POSIX_)</span>\n<a name=\"l00131\"></a>00131 <span class=\"preprocessor\"></span>      pthread_mutex_lock(&amp;mHandle);\n<a name=\"l00132\"></a>00132 <span class=\"preprocessor\">  #endif</span>\n<a name=\"l00133\"></a>00133 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#endif</span>\n<a name=\"l00134\"></a>00134 <span class=\"preprocessor\"></span>    }\n<a name=\"l00135\"></a>00135 \n<a name=\"l00141\"></a><a class=\"code\" href=\"classtthread_1_1fast__mutex.html#aa24a64f788f142df670c3abc809d32b6\">00141</a>     <span class=\"keyword\">inline</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classtthread_1_1fast__mutex.html#aa24a64f788f142df670c3abc809d32b6\" title=\"Try to lock the mutex.\">try_lock</a>()\n<a name=\"l00142\"></a>00142     {\n<a name=\"l00143\"></a>00143 <span class=\"preprocessor\">#if defined(_FAST_MUTEX_ASM_)</span>\n<a name=\"l00144\"></a>00144 <span class=\"preprocessor\"></span>      <span class=\"keywordtype\">int</span> oldLock;\n<a name=\"l00145\"></a>00145 <span class=\"preprocessor\">  #if defined(__GNUC__) &amp;&amp; (defined(__i386__) || defined(__x86_64__))</span>\n<a name=\"l00146\"></a>00146 <span class=\"preprocessor\"></span>      <span class=\"keyword\">asm</span> <span class=\"keyword\">volatile</span> (\n<a name=\"l00147\"></a>00147         <span class=\"stringliteral\">&quot;movl $1,%%eax\\n\\t&quot;</span>\n<a name=\"l00148\"></a>00148         <span class=\"stringliteral\">&quot;xchg %%eax,%0\\n\\t&quot;</span>\n<a name=\"l00149\"></a>00149         <span class=\"stringliteral\">&quot;movl %%eax,%1\\n\\t&quot;</span>\n<a name=\"l00150\"></a>00150         : <span class=\"stringliteral\">&quot;=m&quot;</span> (mLock), <span class=\"stringliteral\">&quot;=m&quot;</span> (oldLock)\n<a name=\"l00151\"></a>00151         :\n<a name=\"l00152\"></a>00152         : <span class=\"stringliteral\">&quot;%eax&quot;</span>, <span class=\"stringliteral\">&quot;memory&quot;</span>\n<a name=\"l00153\"></a>00153       );\n<a name=\"l00154\"></a>00154 <span class=\"preprocessor\">  #elif defined(_MSC_VER) &amp;&amp; (defined(_M_IX86) || defined(_M_X64))</span>\n<a name=\"l00155\"></a>00155 <span class=\"preprocessor\"></span>      <span class=\"keywordtype\">int</span> *ptrLock = &amp;mLock;\n<a name=\"l00156\"></a>00156       __asm {\n<a name=\"l00157\"></a>00157         mov eax,1\n<a name=\"l00158\"></a>00158         mov ecx,ptrLock\n<a name=\"l00159\"></a>00159         xchg eax,[ecx]\n<a name=\"l00160\"></a>00160         mov oldLock,eax\n<a name=\"l00161\"></a>00161       }\n<a name=\"l00162\"></a>00162 <span class=\"preprocessor\">  #elif defined(__GNUC__) &amp;&amp; (defined(__ppc__))</span>\n<a name=\"l00163\"></a>00163 <span class=\"preprocessor\"></span>      <span class=\"keywordtype\">int</span> newLock = 1;\n<a name=\"l00164\"></a>00164       <span class=\"keyword\">asm</span> <span class=\"keyword\">volatile</span> (\n<a name=\"l00165\"></a>00165         <span class=\"stringliteral\">&quot;\\n1:\\n\\t&quot;</span>\n<a name=\"l00166\"></a>00166         <span class=\"stringliteral\">&quot;lwarx  %0,0,%1\\n\\t&quot;</span>\n<a name=\"l00167\"></a>00167         <span class=\"stringliteral\">&quot;cmpwi  0,%0,0\\n\\t&quot;</span>\n<a name=\"l00168\"></a>00168         <span class=\"stringliteral\">&quot;bne-   2f\\n\\t&quot;</span>\n<a name=\"l00169\"></a>00169         <span class=\"stringliteral\">&quot;stwcx. %2,0,%1\\n\\t&quot;</span>\n<a name=\"l00170\"></a>00170         <span class=\"stringliteral\">&quot;bne-   1b\\n\\t&quot;</span>\n<a name=\"l00171\"></a>00171         <span class=\"stringliteral\">&quot;isync\\n&quot;</span>\n<a name=\"l00172\"></a>00172         <span class=\"stringliteral\">&quot;2:\\n\\t&quot;</span>\n<a name=\"l00173\"></a>00173         : <span class=\"stringliteral\">&quot;=&amp;r&quot;</span> (oldLock)\n<a name=\"l00174\"></a>00174         : <span class=\"stringliteral\">&quot;r&quot;</span> (&amp;mLock), <span class=\"stringliteral\">&quot;r&quot;</span> (newLock)\n<a name=\"l00175\"></a>00175         : <span class=\"stringliteral\">&quot;cr0&quot;</span>, <span class=\"stringliteral\">&quot;memory&quot;</span>\n<a name=\"l00176\"></a>00176       );\n<a name=\"l00177\"></a>00177 <span class=\"preprocessor\">  #endif</span>\n<a name=\"l00178\"></a>00178 <span class=\"preprocessor\"></span>      <span class=\"keywordflow\">return</span> (oldLock == 0);\n<a name=\"l00179\"></a>00179 <span class=\"preprocessor\">#else</span>\n<a name=\"l00180\"></a>00180 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00181\"></a>00181 <span class=\"preprocessor\"></span>      <span class=\"keywordflow\">return</span> TryEnterCriticalSection(&amp;mHandle) ? <span class=\"keyword\">true</span> : <span class=\"keyword\">false</span>;\n<a name=\"l00182\"></a>00182 <span class=\"preprocessor\">  #elif defined(_TTHREAD_POSIX_)</span>\n<a name=\"l00183\"></a>00183 <span class=\"preprocessor\"></span>      <span class=\"keywordflow\">return</span> (pthread_mutex_trylock(&amp;mHandle) == 0) ? <span class=\"keyword\">true</span> : <span class=\"keyword\">false</span>;\n<a name=\"l00184\"></a>00184 <span class=\"preprocessor\">  #endif</span>\n<a name=\"l00185\"></a>00185 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#endif</span>\n<a name=\"l00186\"></a>00186 <span class=\"preprocessor\"></span>    }\n<a name=\"l00187\"></a>00187 \n<a name=\"l00191\"></a><a class=\"code\" href=\"classtthread_1_1fast__mutex.html#a9278be8203e1c42e2619179882ae4403\">00191</a>     <span class=\"keyword\">inline</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classtthread_1_1fast__mutex.html#a9278be8203e1c42e2619179882ae4403\" title=\"Unlock the mutex.\">unlock</a>()\n<a name=\"l00192\"></a>00192     {\n<a name=\"l00193\"></a>00193 <span class=\"preprocessor\">#if defined(_FAST_MUTEX_ASM_)</span>\n<a name=\"l00194\"></a>00194 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #if defined(__GNUC__) &amp;&amp; (defined(__i386__) || defined(__x86_64__))</span>\n<a name=\"l00195\"></a>00195 <span class=\"preprocessor\"></span>      <span class=\"keyword\">asm</span> <span class=\"keyword\">volatile</span> (\n<a name=\"l00196\"></a>00196         <span class=\"stringliteral\">&quot;movl $0,%%eax\\n\\t&quot;</span>\n<a name=\"l00197\"></a>00197         <span class=\"stringliteral\">&quot;xchg %%eax,%0\\n\\t&quot;</span>\n<a name=\"l00198\"></a>00198         : <span class=\"stringliteral\">&quot;=m&quot;</span> (mLock)\n<a name=\"l00199\"></a>00199         :\n<a name=\"l00200\"></a>00200         : <span class=\"stringliteral\">&quot;%eax&quot;</span>, <span class=\"stringliteral\">&quot;memory&quot;</span>\n<a name=\"l00201\"></a>00201       );\n<a name=\"l00202\"></a>00202 <span class=\"preprocessor\">  #elif defined(_MSC_VER) &amp;&amp; (defined(_M_IX86) || defined(_M_X64))</span>\n<a name=\"l00203\"></a>00203 <span class=\"preprocessor\"></span>      <span class=\"keywordtype\">int</span> *ptrLock = &amp;mLock;\n<a name=\"l00204\"></a>00204       __asm {\n<a name=\"l00205\"></a>00205         mov eax,0\n<a name=\"l00206\"></a>00206         mov ecx,ptrLock\n<a name=\"l00207\"></a>00207         xchg eax,[ecx]\n<a name=\"l00208\"></a>00208       }\n<a name=\"l00209\"></a>00209 <span class=\"preprocessor\">  #elif defined(__GNUC__) &amp;&amp; (defined(__ppc__))</span>\n<a name=\"l00210\"></a>00210 <span class=\"preprocessor\"></span>      <span class=\"keyword\">asm</span> <span class=\"keyword\">volatile</span> (\n<a name=\"l00211\"></a>00211         <span class=\"stringliteral\">&quot;sync\\n\\t&quot;</span>  <span class=\"comment\">// Replace with lwsync where possible?</span>\n<a name=\"l00212\"></a>00212         : : : <span class=\"stringliteral\">&quot;memory&quot;</span>\n<a name=\"l00213\"></a>00213       );\n<a name=\"l00214\"></a>00214       mLock = 0;\n<a name=\"l00215\"></a>00215 <span class=\"preprocessor\">  #endif</span>\n<a name=\"l00216\"></a>00216 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#else</span>\n<a name=\"l00217\"></a>00217 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00218\"></a>00218 <span class=\"preprocessor\"></span>      LeaveCriticalSection(&amp;mHandle);\n<a name=\"l00219\"></a>00219 <span class=\"preprocessor\">  #elif defined(_TTHREAD_POSIX_)</span>\n<a name=\"l00220\"></a>00220 <span class=\"preprocessor\"></span>      pthread_mutex_unlock(&amp;mHandle);\n<a name=\"l00221\"></a>00221 <span class=\"preprocessor\">  #endif</span>\n<a name=\"l00222\"></a>00222 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#endif</span>\n<a name=\"l00223\"></a>00223 <span class=\"preprocessor\"></span>    }\n<a name=\"l00224\"></a>00224 \n<a name=\"l00225\"></a>00225   <span class=\"keyword\">private</span>:\n<a name=\"l00226\"></a>00226 <span class=\"preprocessor\">#if defined(_FAST_MUTEX_ASM_)</span>\n<a name=\"l00227\"></a>00227 <span class=\"preprocessor\"></span>    <span class=\"keywordtype\">int</span> mLock;\n<a name=\"l00228\"></a>00228 <span class=\"preprocessor\">#else</span>\n<a name=\"l00229\"></a>00229 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00230\"></a>00230 <span class=\"preprocessor\"></span>    CRITICAL_SECTION mHandle;\n<a name=\"l00231\"></a>00231 <span class=\"preprocessor\">  #elif defined(_TTHREAD_POSIX_)</span>\n<a name=\"l00232\"></a>00232 <span class=\"preprocessor\"></span>    pthread_mutex_t mHandle;\n<a name=\"l00233\"></a>00233 <span class=\"preprocessor\">  #endif</span>\n<a name=\"l00234\"></a>00234 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#endif</span>\n<a name=\"l00235\"></a>00235 <span class=\"preprocessor\"></span>};\n<a name=\"l00236\"></a>00236 \n<a name=\"l00237\"></a>00237 }\n<a name=\"l00238\"></a>00238 \n<a name=\"l00239\"></a>00239 <span class=\"preprocessor\">#endif // _FAST_MUTEX_H_</span>\n</pre></div></div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:33 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/files.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: File Index</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"files.html\"><span>File&nbsp;List</span></a></li>\n      <li><a href=\"globals.html\"><span>File&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>File List</h1>Here is a list of all documented files with brief descriptions:<table>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"fast__mutex_8h.html\">fast_mutex.h</a> <a href=\"fast__mutex_8h_source.html\">[code]</a></td><td class=\"indexvalue\"></td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"tinythread_8h.html\">tinythread.h</a> <a href=\"tinythread_8h_source.html\">[code]</a></td><td class=\"indexvalue\"></td></tr>\n</table>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/functions.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"#index_c\"><span>c</span></a></li>\n      <li><a href=\"#index_d\"><span>d</span></a></li>\n      <li><a href=\"#index_f\"><span>f</span></a></li>\n      <li><a href=\"#index_g\"><span>g</span></a></li>\n      <li><a href=\"#index_h\"><span>h</span></a></li>\n      <li><a href=\"#index_i\"><span>i</span></a></li>\n      <li><a href=\"#index_j\"><span>j</span></a></li>\n      <li><a href=\"#index_l\"><span>l</span></a></li>\n      <li><a href=\"#index_m\"><span>m</span></a></li>\n      <li><a href=\"#index_n\"><span>n</span></a></li>\n      <li><a href=\"#index_r\"><span>r</span></a></li>\n      <li><a href=\"#index_t\"><span>t</span></a></li>\n      <li><a href=\"#index_u\"><span>u</span></a></li>\n      <li><a href=\"#index_w\"><span>w</span></a></li>\n      <li><a href=\"#index_~\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented class members with links to the class documentation for each member:\n\n<h3><a class=\"anchor\" id=\"index_c\">- c -</a></h3><ul>\n<li>condition_variable()\n: <a class=\"el\" href=\"classtthread_1_1condition__variable.html#a9e62a1d1145c820a02469a48099fdfa9\">condition_variable</a>\n</li>\n<li>count()\n: <a class=\"el\" href=\"classtthread_1_1chrono_1_1duration.html#a3f01111f479d27be202983aacb03c020\">duration&lt; _Rep, _Period &gt;</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_d\">- d -</a></h3><ul>\n<li>duration()\n: <a class=\"el\" href=\"classtthread_1_1chrono_1_1duration.html#a5d86b0d68c98b74e3a6e541c1759ef3e\">duration&lt; _Rep, _Period &gt;</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_f\">- f -</a></h3><ul>\n<li>fast_mutex()\n: <a class=\"el\" href=\"classtthread_1_1fast__mutex.html#aed9ff6c4d30b4fe2775a15c6778d96f8\">fast_mutex</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_g\">- g -</a></h3><ul>\n<li>get_id()\n: <a class=\"el\" href=\"classtthread_1_1thread.html#afb4f4110b330d27774c16baec4f7d4f5\">thread</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_h\">- h -</a></h3><ul>\n<li>hardware_concurrency()\n: <a class=\"el\" href=\"classtthread_1_1thread.html#a3b04fb20012111681e37dfe63f105f6d\">thread</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_i\">- i -</a></h3><ul>\n<li>id()\n: <a class=\"el\" href=\"classtthread_1_1thread_1_1id.html#a087060b582403885d08e89ad894ecc5d\">id</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_j\">- j -</a></h3><ul>\n<li>join()\n: <a class=\"el\" href=\"classtthread_1_1thread.html#a6c7abfff648dad193674fc432ad4840d\">thread</a>\n</li>\n<li>joinable()\n: <a class=\"el\" href=\"classtthread_1_1thread.html#a5f02386ef3b6ef614321b6ec3606b242\">thread</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_l\">- l -</a></h3><ul>\n<li>lock()\n: <a class=\"el\" href=\"classtthread_1_1fast__mutex.html#aa81aed607133209dade63a226818224d\">fast_mutex</a>\n, <a class=\"el\" href=\"classtthread_1_1mutex.html#aa81aed607133209dade63a226818224d\">mutex</a>\n, <a class=\"el\" href=\"classtthread_1_1recursive__mutex.html#aa81aed607133209dade63a226818224d\">recursive_mutex</a>\n</li>\n<li>lock_guard()\n: <a class=\"el\" href=\"classtthread_1_1lock__guard.html#a2c5fd14427acb035def5201e4cfd4540\">lock_guard&lt; T &gt;</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_m\">- m -</a></h3><ul>\n<li>mutex()\n: <a class=\"el\" href=\"classtthread_1_1mutex.html#aef42e2bd0ea2ffa8ce1cdc7e5d183910\">mutex</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_n\">- n -</a></h3><ul>\n<li>native_handle()\n: <a class=\"el\" href=\"classtthread_1_1thread.html#ac9ba019ced75a29c52c41aff4e1ca20e\">thread</a>\n</li>\n<li>notify_all()\n: <a class=\"el\" href=\"classtthread_1_1condition__variable.html#ad35a04e61229c15c5211ebff00089326\">condition_variable</a>\n</li>\n<li>notify_one()\n: <a class=\"el\" href=\"classtthread_1_1condition__variable.html#a84c2ec0dd971c593883198a323eeb394\">condition_variable</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_r\">- r -</a></h3><ul>\n<li>recursive_mutex()\n: <a class=\"el\" href=\"classtthread_1_1recursive__mutex.html#a612d33a8905a3de216a8be0467538ede\">recursive_mutex</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_t\">- t -</a></h3><ul>\n<li>thread()\n: <a class=\"el\" href=\"classtthread_1_1thread.html#a1816c2a63c2941090f9a24e5a62efea1\">thread</a>\n</li>\n<li>try_lock()\n: <a class=\"el\" href=\"classtthread_1_1mutex.html#aa24a64f788f142df670c3abc809d32b6\">mutex</a>\n, <a class=\"el\" href=\"classtthread_1_1fast__mutex.html#aa24a64f788f142df670c3abc809d32b6\">fast_mutex</a>\n, <a class=\"el\" href=\"classtthread_1_1recursive__mutex.html#aa24a64f788f142df670c3abc809d32b6\">recursive_mutex</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_u\">- u -</a></h3><ul>\n<li>unlock()\n: <a class=\"el\" href=\"classtthread_1_1fast__mutex.html#a9278be8203e1c42e2619179882ae4403\">fast_mutex</a>\n, <a class=\"el\" href=\"classtthread_1_1recursive__mutex.html#a9278be8203e1c42e2619179882ae4403\">recursive_mutex</a>\n, <a class=\"el\" href=\"classtthread_1_1mutex.html#a9278be8203e1c42e2619179882ae4403\">mutex</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_w\">- w -</a></h3><ul>\n<li>wait()\n: <a class=\"el\" href=\"classtthread_1_1condition__variable.html#a4d877d804385bde4aacf2156e86faede\">condition_variable</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_0x7e\">- ~ -</a></h3><ul>\n<li>~condition_variable()\n: <a class=\"el\" href=\"classtthread_1_1condition__variable.html#a58df09046f5006d4170ae92717f1e50b\">condition_variable</a>\n</li>\n<li>~fast_mutex()\n: <a class=\"el\" href=\"classtthread_1_1fast__mutex.html#a5eea296c19289a40d7b76df35ecf72a7\">fast_mutex</a>\n</li>\n<li>~lock_guard()\n: <a class=\"el\" href=\"classtthread_1_1lock__guard.html#aa54999fb933a139807d39ed05e97aa6d\">lock_guard&lt; T &gt;</a>\n</li>\n<li>~mutex()\n: <a class=\"el\" href=\"classtthread_1_1mutex.html#a3ab9328c3addeb57045f45910b10a1cf\">mutex</a>\n</li>\n<li>~recursive_mutex()\n: <a class=\"el\" href=\"classtthread_1_1recursive__mutex.html#a571b16a7b52c4d1fb0bdb5ff0482c100\">recursive_mutex</a>\n</li>\n<li>~thread()\n: <a class=\"el\" href=\"classtthread_1_1thread.html#a626c04c85c7e2b10215bc4a35062f177\">thread</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:33 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/functions_func.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"#index_c\"><span>c</span></a></li>\n      <li><a href=\"#index_d\"><span>d</span></a></li>\n      <li><a href=\"#index_f\"><span>f</span></a></li>\n      <li><a href=\"#index_g\"><span>g</span></a></li>\n      <li><a href=\"#index_h\"><span>h</span></a></li>\n      <li><a href=\"#index_i\"><span>i</span></a></li>\n      <li><a href=\"#index_j\"><span>j</span></a></li>\n      <li><a href=\"#index_l\"><span>l</span></a></li>\n      <li><a href=\"#index_m\"><span>m</span></a></li>\n      <li><a href=\"#index_n\"><span>n</span></a></li>\n      <li><a href=\"#index_r\"><span>r</span></a></li>\n      <li><a href=\"#index_t\"><span>t</span></a></li>\n      <li><a href=\"#index_u\"><span>u</span></a></li>\n      <li><a href=\"#index_w\"><span>w</span></a></li>\n      <li><a href=\"#index_~\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_c\">- c -</a></h3><ul>\n<li>condition_variable()\n: <a class=\"el\" href=\"classtthread_1_1condition__variable.html#a9e62a1d1145c820a02469a48099fdfa9\">condition_variable</a>\n</li>\n<li>count()\n: <a class=\"el\" href=\"classtthread_1_1chrono_1_1duration.html#a3f01111f479d27be202983aacb03c020\">duration&lt; _Rep, _Period &gt;</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_d\">- d -</a></h3><ul>\n<li>duration()\n: <a class=\"el\" href=\"classtthread_1_1chrono_1_1duration.html#a5d86b0d68c98b74e3a6e541c1759ef3e\">duration&lt; _Rep, _Period &gt;</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_f\">- f -</a></h3><ul>\n<li>fast_mutex()\n: <a class=\"el\" href=\"classtthread_1_1fast__mutex.html#aed9ff6c4d30b4fe2775a15c6778d96f8\">fast_mutex</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_g\">- g -</a></h3><ul>\n<li>get_id()\n: <a class=\"el\" href=\"classtthread_1_1thread.html#afb4f4110b330d27774c16baec4f7d4f5\">thread</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_h\">- h -</a></h3><ul>\n<li>hardware_concurrency()\n: <a class=\"el\" href=\"classtthread_1_1thread.html#a3b04fb20012111681e37dfe63f105f6d\">thread</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_i\">- i -</a></h3><ul>\n<li>id()\n: <a class=\"el\" href=\"classtthread_1_1thread_1_1id.html#a087060b582403885d08e89ad894ecc5d\">id</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_j\">- j -</a></h3><ul>\n<li>join()\n: <a class=\"el\" href=\"classtthread_1_1thread.html#a6c7abfff648dad193674fc432ad4840d\">thread</a>\n</li>\n<li>joinable()\n: <a class=\"el\" href=\"classtthread_1_1thread.html#a5f02386ef3b6ef614321b6ec3606b242\">thread</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_l\">- l -</a></h3><ul>\n<li>lock()\n: <a class=\"el\" href=\"classtthread_1_1fast__mutex.html#aa81aed607133209dade63a226818224d\">fast_mutex</a>\n, <a class=\"el\" href=\"classtthread_1_1mutex.html#aa81aed607133209dade63a226818224d\">mutex</a>\n, <a class=\"el\" href=\"classtthread_1_1recursive__mutex.html#aa81aed607133209dade63a226818224d\">recursive_mutex</a>\n</li>\n<li>lock_guard()\n: <a class=\"el\" href=\"classtthread_1_1lock__guard.html#a2c5fd14427acb035def5201e4cfd4540\">lock_guard&lt; T &gt;</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_m\">- m -</a></h3><ul>\n<li>mutex()\n: <a class=\"el\" href=\"classtthread_1_1mutex.html#aef42e2bd0ea2ffa8ce1cdc7e5d183910\">mutex</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_n\">- n -</a></h3><ul>\n<li>native_handle()\n: <a class=\"el\" href=\"classtthread_1_1thread.html#ac9ba019ced75a29c52c41aff4e1ca20e\">thread</a>\n</li>\n<li>notify_all()\n: <a class=\"el\" href=\"classtthread_1_1condition__variable.html#ad35a04e61229c15c5211ebff00089326\">condition_variable</a>\n</li>\n<li>notify_one()\n: <a class=\"el\" href=\"classtthread_1_1condition__variable.html#a84c2ec0dd971c593883198a323eeb394\">condition_variable</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_r\">- r -</a></h3><ul>\n<li>recursive_mutex()\n: <a class=\"el\" href=\"classtthread_1_1recursive__mutex.html#a612d33a8905a3de216a8be0467538ede\">recursive_mutex</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_t\">- t -</a></h3><ul>\n<li>thread()\n: <a class=\"el\" href=\"classtthread_1_1thread.html#a1816c2a63c2941090f9a24e5a62efea1\">thread</a>\n</li>\n<li>try_lock()\n: <a class=\"el\" href=\"classtthread_1_1mutex.html#aa24a64f788f142df670c3abc809d32b6\">mutex</a>\n, <a class=\"el\" href=\"classtthread_1_1fast__mutex.html#aa24a64f788f142df670c3abc809d32b6\">fast_mutex</a>\n, <a class=\"el\" href=\"classtthread_1_1recursive__mutex.html#aa24a64f788f142df670c3abc809d32b6\">recursive_mutex</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_u\">- u -</a></h3><ul>\n<li>unlock()\n: <a class=\"el\" href=\"classtthread_1_1fast__mutex.html#a9278be8203e1c42e2619179882ae4403\">fast_mutex</a>\n, <a class=\"el\" href=\"classtthread_1_1recursive__mutex.html#a9278be8203e1c42e2619179882ae4403\">recursive_mutex</a>\n, <a class=\"el\" href=\"classtthread_1_1mutex.html#a9278be8203e1c42e2619179882ae4403\">mutex</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_w\">- w -</a></h3><ul>\n<li>wait()\n: <a class=\"el\" href=\"classtthread_1_1condition__variable.html#a4d877d804385bde4aacf2156e86faede\">condition_variable</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_0x7e\">- ~ -</a></h3><ul>\n<li>~condition_variable()\n: <a class=\"el\" href=\"classtthread_1_1condition__variable.html#a58df09046f5006d4170ae92717f1e50b\">condition_variable</a>\n</li>\n<li>~fast_mutex()\n: <a class=\"el\" href=\"classtthread_1_1fast__mutex.html#a5eea296c19289a40d7b76df35ecf72a7\">fast_mutex</a>\n</li>\n<li>~lock_guard()\n: <a class=\"el\" href=\"classtthread_1_1lock__guard.html#aa54999fb933a139807d39ed05e97aa6d\">lock_guard&lt; T &gt;</a>\n</li>\n<li>~mutex()\n: <a class=\"el\" href=\"classtthread_1_1mutex.html#a3ab9328c3addeb57045f45910b10a1cf\">mutex</a>\n</li>\n<li>~recursive_mutex()\n: <a class=\"el\" href=\"classtthread_1_1recursive__mutex.html#a571b16a7b52c4d1fb0bdb5ff0482c100\">recursive_mutex</a>\n</li>\n<li>~thread()\n: <a class=\"el\" href=\"classtthread_1_1thread.html#a626c04c85c7e2b10215bc4a35062f177\">thread</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:33 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/globals.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"files.html\"><span>File&nbsp;List</span></a></li>\n      <li class=\"current\"><a href=\"globals.html\"><span>File&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"globals.html\"><span>All</span></a></li>\n      <li><a href=\"globals_defs.html\"><span>Defines</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented file members with links to the documentation:<ul>\n<li>thread_local\n: <a class=\"el\" href=\"tinythread_8h.html#ad4d9b405bcbffaf0d4dae6166c18aa1e\">tinythread.h</a>\n</li>\n<li>TINYTHREAD_VERSION\n: <a class=\"el\" href=\"tinythread_8h.html#a9a3d5a9159f22201a37dd59d82b1861f\">tinythread.h</a>\n</li>\n<li>TINYTHREAD_VERSION_MAJOR\n: <a class=\"el\" href=\"tinythread_8h.html#af1d2d7842598b143f8e0a54a9b6f5bec\">tinythread.h</a>\n</li>\n<li>TINYTHREAD_VERSION_MINOR\n: <a class=\"el\" href=\"tinythread_8h.html#a9248a2e6daaeb43e46bd632417cb4733\">tinythread.h</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/globals_defs.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"files.html\"><span>File&nbsp;List</span></a></li>\n      <li class=\"current\"><a href=\"globals.html\"><span>File&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"globals.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"globals_defs.html\"><span>Defines</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;<ul>\n<li>thread_local\n: <a class=\"el\" href=\"tinythread_8h.html#ad4d9b405bcbffaf0d4dae6166c18aa1e\">tinythread.h</a>\n</li>\n<li>TINYTHREAD_VERSION\n: <a class=\"el\" href=\"tinythread_8h.html#a9a3d5a9159f22201a37dd59d82b1861f\">tinythread.h</a>\n</li>\n<li>TINYTHREAD_VERSION_MAJOR\n: <a class=\"el\" href=\"tinythread_8h.html#af1d2d7842598b143f8e0a54a9b6f5bec\">tinythread.h</a>\n</li>\n<li>TINYTHREAD_VERSION_MINOR\n: <a class=\"el\" href=\"tinythread_8h.html#a9248a2e6daaeb43e46bd632417cb4733\">tinythread.h</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: TinyThread++ API Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TinyThread++ API Reference </h1><h3 class=\"version\">1.0 </h3><h2><a class=\"anchor\" id=\"intro_sec\">\nIntroduction</a></h2>\n<p>TinyThread++ is a minimal, portable implementation of basic threading classes for C++.</p>\n<p>They closely mimic the functionality and naming of the C++0x standard, and should be easily replaceable with the corresponding std:: variants.</p>\n<h2><a class=\"anchor\" id=\"port_sec\">\nPortability</a></h2>\n<p>The Win32 variant uses the native Win32 API for implementing the thread classes, while for other systems, the POSIX threads API (pthread) is used.</p>\n<h2><a class=\"anchor\" id=\"class_sec\">\nClasses</a></h2>\n<p>In order to mimic the threading API of the C++0x standard, subsets of several classes are provided. The fundamental classes are: </p>\n<ul>\n<li><a class=\"el\" href=\"classtthread_1_1thread.html\" title=\"Thread class.\">tthread::thread</a> </li>\n<li><a class=\"el\" href=\"classtthread_1_1mutex.html\" title=\"Mutex class.\">tthread::mutex</a> </li>\n<li><a class=\"el\" href=\"classtthread_1_1recursive__mutex.html\" title=\"Recursive mutex class.\">tthread::recursive_mutex</a> </li>\n<li><a class=\"el\" href=\"classtthread_1_1condition__variable.html\" title=\"Condition variable class.\">tthread::condition_variable</a> </li>\n<li><a class=\"el\" href=\"classtthread_1_1lock__guard.html\" title=\"Lock guard class.\">tthread::lock_guard</a> </li>\n<li><a class=\"el\" href=\"classtthread_1_1fast__mutex.html\" title=\"Fast mutex class.\">tthread::fast_mutex</a></li>\n</ul>\n<h2><a class=\"anchor\" id=\"misc_sec\">\nMiscellaneous</a></h2>\n<p>The following special keywords are available: <a class=\"el\" href=\"tinythread_8h.html#ad4d9b405bcbffaf0d4dae6166c18aa1e\" title=\"Thread local storage keyword.\">thread_local</a>.</p>\n<p>For more detailed information (including additional classes), browse the different sections of this documentation. A good place to start is: <a class=\"el\" href=\"tinythread_8h.html\">tinythread.h</a>. </p>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:33 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/namespacemembers.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"namespaces.html\"><span>Namespace&nbsp;List</span></a></li>\n      <li class=\"current\"><a href=\"namespacemembers.html\"><span>Namespace&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"namespacemembers.html\"><span>All</span></a></li>\n      <li><a href=\"namespacemembers_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"namespacemembers_type.html\"><span>Typedefs</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented namespace members with links to the namespaces they belong to:<ul>\n<li>get_id()\n: <a class=\"el\" href=\"namespacetthread_1_1this__thread.html#ab9370620a3920b9ec550f84fb44fb032\">tthread::this_thread</a>\n</li>\n<li>hours\n: <a class=\"el\" href=\"namespacetthread_1_1chrono.html#af212c337748be0da79f5a3a509f36cdf\">tthread::chrono</a>\n</li>\n<li>microseconds\n: <a class=\"el\" href=\"namespacetthread_1_1chrono.html#add152055d7a764f3c1e5af1710f8814f\">tthread::chrono</a>\n</li>\n<li>milliseconds\n: <a class=\"el\" href=\"namespacetthread_1_1chrono.html#a2cf88065d403d0e61022510769380b75\">tthread::chrono</a>\n</li>\n<li>minutes\n: <a class=\"el\" href=\"namespacetthread_1_1chrono.html#a2a9e93851a6aee0eb47cc6379287ee16\">tthread::chrono</a>\n</li>\n<li>nanoseconds\n: <a class=\"el\" href=\"namespacetthread_1_1chrono.html#a1396eccd0048d613bae0a745b55fa624\">tthread::chrono</a>\n</li>\n<li>seconds\n: <a class=\"el\" href=\"namespacetthread_1_1chrono.html#a302ea2e096592e90ec58ccdcc6ec42c3\">tthread::chrono</a>\n</li>\n<li>sleep_for()\n: <a class=\"el\" href=\"namespacetthread_1_1this__thread.html#acba48c6dbf12d38ab816c18c1ef96398\">tthread::this_thread</a>\n</li>\n<li>yield()\n: <a class=\"el\" href=\"namespacetthread_1_1this__thread.html#a867ef7ad1dd6026b7ee13bb013e00edd\">tthread::this_thread</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/namespacemembers_func.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"namespaces.html\"><span>Namespace&nbsp;List</span></a></li>\n      <li class=\"current\"><a href=\"namespacemembers.html\"><span>Namespace&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"namespacemembers.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"namespacemembers_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"namespacemembers_type.html\"><span>Typedefs</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;<ul>\n<li>get_id()\n: <a class=\"el\" href=\"namespacetthread_1_1this__thread.html#ab9370620a3920b9ec550f84fb44fb032\">tthread::this_thread</a>\n</li>\n<li>sleep_for()\n: <a class=\"el\" href=\"namespacetthread_1_1this__thread.html#acba48c6dbf12d38ab816c18c1ef96398\">tthread::this_thread</a>\n</li>\n<li>yield()\n: <a class=\"el\" href=\"namespacetthread_1_1this__thread.html#a867ef7ad1dd6026b7ee13bb013e00edd\">tthread::this_thread</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/namespacemembers_type.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"namespaces.html\"><span>Namespace&nbsp;List</span></a></li>\n      <li class=\"current\"><a href=\"namespacemembers.html\"><span>Namespace&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"namespacemembers.html\"><span>All</span></a></li>\n      <li><a href=\"namespacemembers_func.html\"><span>Functions</span></a></li>\n      <li class=\"current\"><a href=\"namespacemembers_type.html\"><span>Typedefs</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;<ul>\n<li>hours\n: <a class=\"el\" href=\"namespacetthread_1_1chrono.html#af212c337748be0da79f5a3a509f36cdf\">tthread::chrono</a>\n</li>\n<li>microseconds\n: <a class=\"el\" href=\"namespacetthread_1_1chrono.html#add152055d7a764f3c1e5af1710f8814f\">tthread::chrono</a>\n</li>\n<li>milliseconds\n: <a class=\"el\" href=\"namespacetthread_1_1chrono.html#a2cf88065d403d0e61022510769380b75\">tthread::chrono</a>\n</li>\n<li>minutes\n: <a class=\"el\" href=\"namespacetthread_1_1chrono.html#a2a9e93851a6aee0eb47cc6379287ee16\">tthread::chrono</a>\n</li>\n<li>nanoseconds\n: <a class=\"el\" href=\"namespacetthread_1_1chrono.html#a1396eccd0048d613bae0a745b55fa624\">tthread::chrono</a>\n</li>\n<li>seconds\n: <a class=\"el\" href=\"namespacetthread_1_1chrono.html#a302ea2e096592e90ec58ccdcc6ec42c3\">tthread::chrono</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/namespaces.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: Namespace Index</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespace&nbsp;List</span></a></li>\n      <li><a href=\"namespacemembers.html\"><span>Namespace&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>Namespace List</h1>Here is a list of all documented namespaces with brief descriptions:<table>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"namespacetthread.html\">tthread</a></td><td class=\"indexvalue\">Main name space for TinyThread++ </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"namespacetthread_1_1chrono.html\">tthread::chrono</a></td><td class=\"indexvalue\">Minimal implementation of the <code>chrono</code> namespace </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"namespacetthread_1_1this__thread.html\">tthread::this_thread</a></td><td class=\"indexvalue\">The namespace <code><a class=\"el\" href=\"namespacetthread_1_1this__thread.html\" title=\"The namespace this_thread provides methods for dealing with the calling thread.\">this_thread</a></code> provides methods for dealing with the calling thread </td></tr>\n</table>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:33 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/namespacetthread.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: tthread Namespace Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"namespaces.html\"><span>Namespace&nbsp;List</span></a></li>\n      <li><a href=\"namespacemembers.html\"><span>Namespace&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>tthread Namespace Reference</h1>\n<p>Main name space for TinyThread++.  \n<a href=\"#_details\">More...</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Namespaces</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread_1_1chrono.html\">chrono</a></td></tr>\n\n<p><tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>Minimal implementation of the <code>chrono</code> namespace. </p>\n<br/></td></tr>\n</p>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread_1_1this__thread.html\">this_thread</a></td></tr>\n\n<p><tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>The namespace <code><a class=\"el\" href=\"namespacetthread_1_1this__thread.html\" title=\"The namespace this_thread provides methods for dealing with the calling thread.\">this_thread</a></code> provides methods for dealing with the calling thread. </p>\n<br/></td></tr>\n</p>\n<tr><td colspan=\"2\"><h2>Classes</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1fast__mutex.html\">fast_mutex</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Fast mutex class.  <a href=\"classtthread_1_1fast__mutex.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1mutex.html\">mutex</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Mutex class.  <a href=\"classtthread_1_1mutex.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1recursive__mutex.html\">recursive_mutex</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Recursive mutex class.  <a href=\"classtthread_1_1recursive__mutex.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1lock__guard.html\">lock_guard</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Lock guard class.  <a href=\"classtthread_1_1lock__guard.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1condition__variable.html\">condition_variable</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Condition variable class.  <a href=\"classtthread_1_1condition__variable.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1thread.html\">thread</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Thread class.  <a href=\"classtthread_1_1thread.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1ratio.html\">ratio</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Minimal implementation of the <code>ratio</code> class.  <a href=\"classtthread_1_1ratio.html#_details\">More...</a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>Main name space for TinyThread++. </p>\n<p>This namespace is more or less equivalent to the <code>std</code> namespace for the C++0x thread classes. For instance, the <a class=\"el\" href=\"classtthread_1_1mutex.html\" title=\"Mutex class.\">tthread::mutex</a> class corresponds to the std::mutex class. </p>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:33 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/namespacetthread_1_1chrono.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: tthread::chrono Namespace Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"namespaces.html\"><span>Namespace&nbsp;List</span></a></li>\n      <li><a href=\"namespacemembers.html\"><span>Namespace&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"navpath\"><a class=\"el\" href=\"namespacetthread.html\">tthread</a>::<a class=\"el\" href=\"namespacetthread_1_1chrono.html\">chrono</a>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>tthread::chrono Namespace Reference</h1>\n<p>Minimal implementation of the <code>chrono</code> namespace.  \n<a href=\"#_details\">More...</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Classes</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1chrono_1_1duration.html\">duration</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Duration template class.  <a href=\"classtthread_1_1chrono_1_1duration.html#_details\">More...</a><br/></td></tr>\n<tr><td colspan=\"2\"><h2>Typedefs</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1396eccd0048d613bae0a745b55fa624\"></a><!-- doxytag: member=\"tthread::chrono::nanoseconds\" ref=\"a1396eccd0048d613bae0a745b55fa624\" args=\"\" -->\ntypedef <a class=\"el\" href=\"classtthread_1_1chrono_1_1duration.html\">duration</a>&lt; __intmax_t, <br class=\"typebreak\"/>\n<a class=\"el\" href=\"classtthread_1_1ratio.html\">ratio</a>&lt; 1, 1000000000 &gt; &gt;&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread_1_1chrono.html#a1396eccd0048d613bae0a745b55fa624\">nanoseconds</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Duration with the unit nanoseconds. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"add152055d7a764f3c1e5af1710f8814f\"></a><!-- doxytag: member=\"tthread::chrono::microseconds\" ref=\"add152055d7a764f3c1e5af1710f8814f\" args=\"\" -->\ntypedef <a class=\"el\" href=\"classtthread_1_1chrono_1_1duration.html\">duration</a>&lt; __intmax_t, <br class=\"typebreak\"/>\n<a class=\"el\" href=\"classtthread_1_1ratio.html\">ratio</a>&lt; 1, 1000000 &gt; &gt;&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread_1_1chrono.html#add152055d7a764f3c1e5af1710f8814f\">microseconds</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Duration with the unit microseconds. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2cf88065d403d0e61022510769380b75\"></a><!-- doxytag: member=\"tthread::chrono::milliseconds\" ref=\"a2cf88065d403d0e61022510769380b75\" args=\"\" -->\ntypedef <a class=\"el\" href=\"classtthread_1_1chrono_1_1duration.html\">duration</a>&lt; __intmax_t, <br class=\"typebreak\"/>\n<a class=\"el\" href=\"classtthread_1_1ratio.html\">ratio</a>&lt; 1, 1000 &gt; &gt;&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread_1_1chrono.html#a2cf88065d403d0e61022510769380b75\">milliseconds</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Duration with the unit milliseconds. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a302ea2e096592e90ec58ccdcc6ec42c3\"></a><!-- doxytag: member=\"tthread::chrono::seconds\" ref=\"a302ea2e096592e90ec58ccdcc6ec42c3\" args=\"\" -->\ntypedef <a class=\"el\" href=\"classtthread_1_1chrono_1_1duration.html\">duration</a>&lt; __intmax_t &gt;&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread_1_1chrono.html#a302ea2e096592e90ec58ccdcc6ec42c3\">seconds</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Duration with the unit seconds. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2a9e93851a6aee0eb47cc6379287ee16\"></a><!-- doxytag: member=\"tthread::chrono::minutes\" ref=\"a2a9e93851a6aee0eb47cc6379287ee16\" args=\"\" -->\ntypedef <a class=\"el\" href=\"classtthread_1_1chrono_1_1duration.html\">duration</a>&lt; __intmax_t, <br class=\"typebreak\"/>\n<a class=\"el\" href=\"classtthread_1_1ratio.html\">ratio</a>&lt; 60 &gt; &gt;&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread_1_1chrono.html#a2a9e93851a6aee0eb47cc6379287ee16\">minutes</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Duration with the unit minutes. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af212c337748be0da79f5a3a509f36cdf\"></a><!-- doxytag: member=\"tthread::chrono::hours\" ref=\"af212c337748be0da79f5a3a509f36cdf\" args=\"\" -->\ntypedef <a class=\"el\" href=\"classtthread_1_1chrono_1_1duration.html\">duration</a>&lt; __intmax_t, <br class=\"typebreak\"/>\n<a class=\"el\" href=\"classtthread_1_1ratio.html\">ratio</a>&lt; 3600 &gt; &gt;&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread_1_1chrono.html#af212c337748be0da79f5a3a509f36cdf\">hours</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Duration with the unit hours. <br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>Minimal implementation of the <code>chrono</code> namespace. </p>\n<p>The <code>chrono</code> namespace provides types for specifying time intervals. </p>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/namespacetthread_1_1this__thread.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: tthread::this_thread Namespace Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"namespaces.html\"><span>Namespace&nbsp;List</span></a></li>\n      <li><a href=\"namespacemembers.html\"><span>Namespace&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"navpath\"><a class=\"el\" href=\"namespacetthread.html\">tthread</a>::<a class=\"el\" href=\"namespacetthread_1_1this__thread.html\">this_thread</a>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>tthread::this_thread Namespace Reference</h1>\n<p>The namespace <code><a class=\"el\" href=\"namespacetthread_1_1this__thread.html\" title=\"The namespace this_thread provides methods for dealing with the calling thread.\">this_thread</a></code> provides methods for dealing with the calling thread.  \n<a href=\"#_details\">More...</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab9370620a3920b9ec550f84fb44fb032\"></a><!-- doxytag: member=\"tthread::this_thread::get_id\" ref=\"ab9370620a3920b9ec550f84fb44fb032\" args=\"()\" -->\n<a class=\"el\" href=\"classtthread_1_1thread_1_1id.html\">thread::id</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread_1_1this__thread.html#ab9370620a3920b9ec550f84fb44fb032\">get_id</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return the thread ID of the calling thread. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread_1_1this__thread.html#a867ef7ad1dd6026b7ee13bb013e00edd\">yield</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Yield execution to another thread.  <a href=\"#a867ef7ad1dd6026b7ee13bb013e00edd\"></a><br/></td></tr>\n<tr><td class=\"memTemplParams\" colspan=\"2\">template&lt;class _Rep , class _Period &gt; </td></tr>\n<tr><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread_1_1this__thread.html#acba48c6dbf12d38ab816c18c1ef96398\">sleep_for</a> (const <a class=\"el\" href=\"classtthread_1_1chrono_1_1duration.html\">chrono::duration</a>&lt; _Rep, _Period &gt; &amp;aTime)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Blocks the calling thread for a period of time.  <a href=\"#acba48c6dbf12d38ab816c18c1ef96398\"></a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>The namespace <code><a class=\"el\" href=\"namespacetthread_1_1this__thread.html\" title=\"The namespace this_thread provides methods for dealing with the calling thread.\">this_thread</a></code> provides methods for dealing with the calling thread. </p>\n<hr/><h2>Function Documentation</h2>\n<a class=\"anchor\" id=\"acba48c6dbf12d38ab816c18c1ef96398\"></a><!-- doxytag: member=\"tthread::this_thread::sleep_for\" ref=\"acba48c6dbf12d38ab816c18c1ef96398\" args=\"(const chrono::duration&lt; _Rep, _Period &gt; &amp;aTime)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tthread::this_thread::sleep_for </td>\n          <td>(</td>\n          <td class=\"paramtype\">const chrono::duration&lt; _Rep, _Period &gt; &amp;&nbsp;</td>\n          <td class=\"paramname\"> <em>aTime</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Blocks the calling thread for a period of time. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>aTime</em>&nbsp;</td><td>Minimum time to put the thread to sleep. Example usage: </p>\n<div class=\"fragment\"><pre class=\"fragment\"> <span class=\"comment\">// Sleep for 100 milliseconds</span>\n <a class=\"code\" href=\"namespacetthread_1_1this__thread.html#acba48c6dbf12d38ab816c18c1ef96398\" title=\"Blocks the calling thread for a period of time.\">this_thread::sleep_for</a>(<a class=\"code\" href=\"namespacetthread_1_1chrono.html#a2cf88065d403d0e61022510769380b75\" title=\"Duration with the unit milliseconds.\">chrono::milliseconds</a>(100));\n</pre></div> </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"note\"><dt><b>Note:</b></dt><dd>Supported duration types are: nanoseconds, microseconds, milliseconds, seconds, minutes and hours. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a867ef7ad1dd6026b7ee13bb013e00edd\"></a><!-- doxytag: member=\"tthread::this_thread::yield\" ref=\"a867ef7ad1dd6026b7ee13bb013e00edd\" args=\"()\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tthread::this_thread::yield </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Yield execution to another thread. </p>\n<p>Offers the operating system the opportunity to schedule another thread that is ready to run on the current processor. </p>\n\n</div>\n</div>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:34 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/tabs.css",
    "content": "/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */\n\nDIV.tabs\n{\n   float            : left;\n   width            : 100%;\n   background       : url(\"tab_b.gif\") repeat-x bottom;\n   margin-bottom    : 4px;\n}\n\nDIV.tabs UL\n{\n   margin           : 0px;\n   padding-left     : 10px;\n   list-style       : none;\n}\n\nDIV.tabs LI, DIV.tabs FORM\n{\n   display          : inline;\n   margin           : 0px;\n   padding          : 0px;\n}\n\nDIV.tabs FORM\n{\n   float            : right;\n}\n\nDIV.tabs A\n{\n   float            : left;\n   background       : url(\"tab_r.gif\") no-repeat right top;\n   border-bottom    : 1px solid #84B0C7;\n   font-size        : 80%;\n   font-weight      : bold;\n   text-decoration  : none;\n}\n\nDIV.tabs A:hover\n{\n   background-position: 100% -150px;\n}\n\nDIV.tabs A:link, DIV.tabs A:visited,\nDIV.tabs A:active, DIV.tabs A:hover\n{\n       color: #1A419D;\n}\n\nDIV.tabs SPAN\n{\n   float            : left;\n   display          : block;\n   background       : url(\"tab_l.gif\") no-repeat left top;\n   padding          : 5px 9px;\n   white-space      : nowrap;\n}\n\nDIV.tabs #MSearchBox\n{\n   float            : right;\n   display          : inline;\n   font-size        : 1em;\n}\n\nDIV.tabs TD\n{\n   font-size        : 80%;\n   font-weight      : bold;\n   text-decoration  : none;\n}\n\n\n\n/* Commented Backslash Hack hides rule from IE5-Mac \\*/\nDIV.tabs SPAN {float : none;}\n/* End IE5-Mac hack */\n\nDIV.tabs A:hover SPAN\n{\n   background-position: 0% -150px;\n}\n\nDIV.tabs LI.current A\n{\n   background-position: 100% -150px;\n   border-width     : 0px;\n}\n\nDIV.tabs LI.current SPAN\n{\n   background-position: 0% -150px;\n   padding-bottom   : 6px;\n}\n\nDIV.navpath\n{\n   background       : none;\n   border           : none;\n   border-bottom    : 1px solid #84B0C7;\n   text-align       : center;\n   margin           : 2px;\n   padding          : 2px;\n}\n"
  },
  {
    "path": "external/TinyThread/doc/html/tinythread_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: tinythread.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"files.html\"><span>File&nbsp;List</span></a></li>\n      <li><a href=\"globals.html\"><span>File&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>tinythread.h File Reference</h1><code>#include &lt;pthread.h&gt;</code><br/>\n<code>#include &lt;signal.h&gt;</code><br/>\n<code>#include &lt;sched.h&gt;</code><br/>\n<code>#include &lt;unistd.h&gt;</code><br/>\n<code>#include &lt;ostream&gt;</code><br/>\n\n<p><a href=\"tinythread_8h_source.html\">Go to the source code of this file.</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Classes</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1mutex.html\">mutex</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Mutex class.  <a href=\"classtthread_1_1mutex.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1recursive__mutex.html\">recursive_mutex</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Recursive mutex class.  <a href=\"classtthread_1_1recursive__mutex.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1lock__guard.html\">lock_guard&lt; T &gt;</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Lock guard class.  <a href=\"classtthread_1_1lock__guard.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1condition__variable.html\">condition_variable</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Condition variable class.  <a href=\"classtthread_1_1condition__variable.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1thread.html\">thread</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Thread class.  <a href=\"classtthread_1_1thread.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1thread_1_1id.html\">id</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Thread ID.  <a href=\"classtthread_1_1thread_1_1id.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1ratio.html\">ratio&lt; N, D &gt;</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Minimal implementation of the <code>ratio</code> class.  <a href=\"classtthread_1_1ratio.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classtthread_1_1chrono_1_1duration.html\">duration&lt; _Rep, _Period &gt;</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Duration template class.  <a href=\"classtthread_1_1chrono_1_1duration.html#_details\">More...</a><br/></td></tr>\n<tr><td colspan=\"2\"><h2>Namespaces</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread.html\">tthread</a></td></tr>\n\n<p><tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>Main name space for TinyThread++. </p>\n<br/></td></tr>\n</p>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread_1_1chrono.html\">tthread::chrono</a></td></tr>\n\n<p><tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>Minimal implementation of the <code>chrono</code> namespace. </p>\n<br/></td></tr>\n</p>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread_1_1this__thread.html\">tthread::this_thread</a></td></tr>\n\n<p><tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>The namespace <code><a class=\"el\" href=\"namespacetthread_1_1this__thread.html\" title=\"The namespace this_thread provides methods for dealing with the calling thread.\">this_thread</a></code> provides methods for dealing with the calling thread. </p>\n<br/></td></tr>\n</p>\n<tr><td colspan=\"2\"><h2>Defines</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af1d2d7842598b143f8e0a54a9b6f5bec\"></a><!-- doxytag: member=\"tinythread.h::TINYTHREAD_VERSION_MAJOR\" ref=\"af1d2d7842598b143f8e0a54a9b6f5bec\" args=\"\" -->\n#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"tinythread_8h.html#af1d2d7842598b143f8e0a54a9b6f5bec\">TINYTHREAD_VERSION_MAJOR</a>&nbsp;&nbsp;&nbsp;1</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">TinyThread++ version (major number). <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9248a2e6daaeb43e46bd632417cb4733\"></a><!-- doxytag: member=\"tinythread.h::TINYTHREAD_VERSION_MINOR\" ref=\"a9248a2e6daaeb43e46bd632417cb4733\" args=\"\" -->\n#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"tinythread_8h.html#a9248a2e6daaeb43e46bd632417cb4733\">TINYTHREAD_VERSION_MINOR</a>&nbsp;&nbsp;&nbsp;0</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">TinyThread++ version (minor number). <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9a3d5a9159f22201a37dd59d82b1861f\"></a><!-- doxytag: member=\"tinythread.h::TINYTHREAD_VERSION\" ref=\"a9a3d5a9159f22201a37dd59d82b1861f\" args=\"\" -->\n#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"tinythread_8h.html#a9a3d5a9159f22201a37dd59d82b1861f\">TINYTHREAD_VERSION</a>&nbsp;&nbsp;&nbsp;(TINYTHREAD_VERSION_MAJOR * 100 + TINYTHREAD_VERSION_MINOR)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">TinyThread++ version (full version). <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"tinythread_8h.html#ad4d9b405bcbffaf0d4dae6166c18aa1e\">thread_local</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Thread local storage keyword.  <a href=\"#ad4d9b405bcbffaf0d4dae6166c18aa1e\"></a><br/></td></tr>\n<tr><td colspan=\"2\"><h2>Typedefs</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1396eccd0048d613bae0a745b55fa624\"></a><!-- doxytag: member=\"tinythread.h::nanoseconds\" ref=\"a1396eccd0048d613bae0a745b55fa624\" args=\"\" -->\ntypedef duration&lt; __intmax_t, <br class=\"typebreak\"/>\nratio&lt; 1, 1000000000 &gt; &gt;&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread_1_1chrono.html#a1396eccd0048d613bae0a745b55fa624\">nanoseconds</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Duration with the unit nanoseconds. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"add152055d7a764f3c1e5af1710f8814f\"></a><!-- doxytag: member=\"tinythread.h::microseconds\" ref=\"add152055d7a764f3c1e5af1710f8814f\" args=\"\" -->\ntypedef duration&lt; __intmax_t, <br class=\"typebreak\"/>\nratio&lt; 1, 1000000 &gt; &gt;&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread_1_1chrono.html#add152055d7a764f3c1e5af1710f8814f\">microseconds</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Duration with the unit microseconds. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2cf88065d403d0e61022510769380b75\"></a><!-- doxytag: member=\"tinythread.h::milliseconds\" ref=\"a2cf88065d403d0e61022510769380b75\" args=\"\" -->\ntypedef duration&lt; __intmax_t, <br class=\"typebreak\"/>\nratio&lt; 1, 1000 &gt; &gt;&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread_1_1chrono.html#a2cf88065d403d0e61022510769380b75\">milliseconds</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Duration with the unit milliseconds. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a302ea2e096592e90ec58ccdcc6ec42c3\"></a><!-- doxytag: member=\"tinythread.h::seconds\" ref=\"a302ea2e096592e90ec58ccdcc6ec42c3\" args=\"\" -->\ntypedef duration&lt; __intmax_t &gt;&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread_1_1chrono.html#a302ea2e096592e90ec58ccdcc6ec42c3\">seconds</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Duration with the unit seconds. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2a9e93851a6aee0eb47cc6379287ee16\"></a><!-- doxytag: member=\"tinythread.h::minutes\" ref=\"a2a9e93851a6aee0eb47cc6379287ee16\" args=\"\" -->\ntypedef duration&lt; __intmax_t, <br class=\"typebreak\"/>\nratio&lt; 60 &gt; &gt;&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread_1_1chrono.html#a2a9e93851a6aee0eb47cc6379287ee16\">minutes</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Duration with the unit minutes. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af212c337748be0da79f5a3a509f36cdf\"></a><!-- doxytag: member=\"tinythread.h::hours\" ref=\"af212c337748be0da79f5a3a509f36cdf\" args=\"\" -->\ntypedef duration&lt; __intmax_t, <br class=\"typebreak\"/>\nratio&lt; 3600 &gt; &gt;&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread_1_1chrono.html#af212c337748be0da79f5a3a509f36cdf\">hours</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Duration with the unit hours. <br/></td></tr>\n<tr><td colspan=\"2\"><h2>Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab9370620a3920b9ec550f84fb44fb032\"></a><!-- doxytag: member=\"tinythread.h::get_id\" ref=\"ab9370620a3920b9ec550f84fb44fb032\" args=\"()\" -->\nthread::id&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread_1_1this__thread.html#ab9370620a3920b9ec550f84fb44fb032\">get_id</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return the thread ID of the calling thread. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread_1_1this__thread.html#a867ef7ad1dd6026b7ee13bb013e00edd\">yield</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Yield execution to another thread.  <a href=\"#a867ef7ad1dd6026b7ee13bb013e00edd\"></a><br/></td></tr>\n<tr><td class=\"memTemplParams\" colspan=\"2\">template&lt;class _Rep , class _Period &gt; </td></tr>\n<tr><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespacetthread_1_1this__thread.html#acba48c6dbf12d38ab816c18c1ef96398\">sleep_for</a> (const chrono::duration&lt; _Rep, _Period &gt; &amp;aTime)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Blocks the calling thread for a period of time.  <a href=\"#acba48c6dbf12d38ab816c18c1ef96398\"></a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<hr/><h2>Define Documentation</h2>\n<a class=\"anchor\" id=\"ad4d9b405bcbffaf0d4dae6166c18aa1e\"></a><!-- doxytag: member=\"tinythread.h::thread_local\" ref=\"ad4d9b405bcbffaf0d4dae6166c18aa1e\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define thread_local</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Thread local storage keyword. </p>\n<p>A variable that is declared with the <code>thread_local</code> keyword makes the value of the variable local to each thread (known as thread-local storage, or TLS). Example usage: </p>\n<div class=\"fragment\"><pre class=\"fragment\"> <span class=\"comment\">// This variable is local to each thread.</span>\n <a class=\"code\" href=\"tinythread_8h.html#ad4d9b405bcbffaf0d4dae6166c18aa1e\" title=\"Thread local storage keyword.\">thread_local</a> <span class=\"keywordtype\">int</span> variable;\n</pre></div> <dl class=\"note\"><dt><b>Note:</b></dt><dd>The <code>thread_local</code> keyword is a macro that maps to the corresponding compiler directive (e.g. <code>__declspec(thread)</code>). While the C++0x standard allows for non-trivial types (e.g. classes with constructors and destructors) to be declared with the <code>thread_local</code> keyword, most pre-C++0x compilers only allow for trivial types (e.g. <code>int</code>). So, to guarantee portable code, only use trivial types for thread local storage. </dd>\n<dd>\nThis directive is currently not supported on Mac OS X (it will give a compiler error), since compile-time TLS is not supported in the Mac OS X executable format. Also, some older versions of MinGW (before GCC 4.x) do not support this directive. </dd></dl>\n\n</div>\n</div>\n</div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:33 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/doc/html/tinythread_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyThread++: tinythread.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.3 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"files.html\"><span>File&nbsp;List</span></a></li>\n      <li><a href=\"globals.html\"><span>File&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n<h1>tinythread.h</h1><a href=\"tinythread_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><pre class=\"fragment\"><a name=\"l00001\"></a>00001 <span class=\"comment\">/*</span>\n<a name=\"l00002\"></a>00002 <span class=\"comment\">Copyright (c) 2010 Marcus Geelnard</span>\n<a name=\"l00003\"></a>00003 <span class=\"comment\"></span>\n<a name=\"l00004\"></a>00004 <span class=\"comment\">This software is provided &#39;as-is&#39;, without any express or implied</span>\n<a name=\"l00005\"></a>00005 <span class=\"comment\">warranty. In no event will the authors be held liable for any damages</span>\n<a name=\"l00006\"></a>00006 <span class=\"comment\">arising from the use of this software.</span>\n<a name=\"l00007\"></a>00007 <span class=\"comment\"></span>\n<a name=\"l00008\"></a>00008 <span class=\"comment\">Permission is granted to anyone to use this software for any purpose,</span>\n<a name=\"l00009\"></a>00009 <span class=\"comment\">including commercial applications, and to alter it and redistribute it</span>\n<a name=\"l00010\"></a>00010 <span class=\"comment\">freely, subject to the following restrictions:</span>\n<a name=\"l00011\"></a>00011 <span class=\"comment\"></span>\n<a name=\"l00012\"></a>00012 <span class=\"comment\">    1. The origin of this software must not be misrepresented; you must not</span>\n<a name=\"l00013\"></a>00013 <span class=\"comment\">    claim that you wrote the original software. If you use this software</span>\n<a name=\"l00014\"></a>00014 <span class=\"comment\">    in a product, an acknowledgment in the product documentation would be</span>\n<a name=\"l00015\"></a>00015 <span class=\"comment\">    appreciated but is not required.</span>\n<a name=\"l00016\"></a>00016 <span class=\"comment\"></span>\n<a name=\"l00017\"></a>00017 <span class=\"comment\">    2. Altered source versions must be plainly marked as such, and must not be</span>\n<a name=\"l00018\"></a>00018 <span class=\"comment\">    misrepresented as being the original software.</span>\n<a name=\"l00019\"></a>00019 <span class=\"comment\"></span>\n<a name=\"l00020\"></a>00020 <span class=\"comment\">    3. This notice may not be removed or altered from any source</span>\n<a name=\"l00021\"></a>00021 <span class=\"comment\">    distribution.</span>\n<a name=\"l00022\"></a>00022 <span class=\"comment\">*/</span>\n<a name=\"l00023\"></a>00023 \n<a name=\"l00024\"></a>00024 <span class=\"preprocessor\">#ifndef _TINYTHREAD_H_</span>\n<a name=\"l00025\"></a>00025 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#define _TINYTHREAD_H_</span>\n<a name=\"l00026\"></a>00026 <span class=\"preprocessor\"></span>\n<a name=\"l00057\"></a>00057 \n<a name=\"l00058\"></a>00058 <span class=\"comment\">// Which platform are we on?</span>\n<a name=\"l00059\"></a>00059 <span class=\"preprocessor\">#if !defined(_TTHREAD_PLATFORM_DEFINED_)</span>\n<a name=\"l00060\"></a>00060 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #if defined(_WIN32) || defined(__WIN32__) || defined(__WINDOWS__)</span>\n<a name=\"l00061\"></a>00061 <span class=\"preprocessor\"></span><span class=\"preprocessor\">    #define _TTHREAD_WIN32_</span>\n<a name=\"l00062\"></a>00062 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #else</span>\n<a name=\"l00063\"></a>00063 <span class=\"preprocessor\"></span><span class=\"preprocessor\">    #define _TTHREAD_POSIX_</span>\n<a name=\"l00064\"></a>00064 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #endif</span>\n<a name=\"l00065\"></a>00065 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #define _TTHREAD_PLATFORM_DEFINED_</span>\n<a name=\"l00066\"></a>00066 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#endif</span>\n<a name=\"l00067\"></a>00067 <span class=\"preprocessor\"></span>\n<a name=\"l00068\"></a>00068 <span class=\"comment\">// Platform specific includes</span>\n<a name=\"l00069\"></a>00069 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00070\"></a>00070 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #include &lt;windows.h&gt;</span>\n<a name=\"l00071\"></a>00071 <span class=\"preprocessor\">#else</span>\n<a name=\"l00072\"></a>00072 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #include &lt;pthread.h&gt;</span>\n<a name=\"l00073\"></a>00073 <span class=\"preprocessor\">  #include &lt;signal.h&gt;</span>\n<a name=\"l00074\"></a>00074 <span class=\"preprocessor\">  #include &lt;sched.h&gt;</span>\n<a name=\"l00075\"></a>00075 <span class=\"preprocessor\">  #include &lt;unistd.h&gt;</span>\n<a name=\"l00076\"></a>00076 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00077\"></a>00077 <span class=\"preprocessor\"></span>\n<a name=\"l00078\"></a>00078 <span class=\"comment\">// Generic includes</span>\n<a name=\"l00079\"></a>00079 <span class=\"preprocessor\">#include &lt;ostream&gt;</span>\n<a name=\"l00080\"></a>00080 \n<a name=\"l00082\"></a><a class=\"code\" href=\"tinythread_8h.html#af1d2d7842598b143f8e0a54a9b6f5bec\">00082</a> <span class=\"preprocessor\">#define TINYTHREAD_VERSION_MAJOR 1</span>\n<a name=\"l00083\"></a>00083 <span class=\"preprocessor\"></span>\n<a name=\"l00084\"></a><a class=\"code\" href=\"tinythread_8h.html#a9248a2e6daaeb43e46bd632417cb4733\">00084</a> <span class=\"preprocessor\">#define TINYTHREAD_VERSION_MINOR 0</span>\n<a name=\"l00085\"></a>00085 <span class=\"preprocessor\"></span>\n<a name=\"l00086\"></a><a class=\"code\" href=\"tinythread_8h.html#a9a3d5a9159f22201a37dd59d82b1861f\">00086</a> <span class=\"preprocessor\">#define TINYTHREAD_VERSION (TINYTHREAD_VERSION_MAJOR * 100 + TINYTHREAD_VERSION_MINOR)</span>\n<a name=\"l00087\"></a>00087 <span class=\"preprocessor\"></span>\n<a name=\"l00088\"></a>00088 <span class=\"comment\">// Do we have a fully featured C++0x compiler?</span>\n<a name=\"l00089\"></a>00089 <span class=\"preprocessor\">#if (__cplusplus &gt; 199711L) || (defined(__STDCXX_VERSION__) &amp;&amp; (__STDCXX_VERSION__ &gt;= 201001L))</span>\n<a name=\"l00090\"></a>00090 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #define _TTHREAD_CPP0X_</span>\n<a name=\"l00091\"></a>00091 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#endif</span>\n<a name=\"l00092\"></a>00092 <span class=\"preprocessor\"></span>\n<a name=\"l00093\"></a>00093 <span class=\"comment\">// ...at least partial C++0x?</span>\n<a name=\"l00094\"></a>00094 <span class=\"preprocessor\">#if defined(_TTHREAD_CPP0X_) || defined(__GXX_EXPERIMENTAL_CXX0X__) || defined(__GXX_EXPERIMENTAL_CPP0X__)</span>\n<a name=\"l00095\"></a>00095 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #define _TTHREAD_CPP0X_PARTIAL_</span>\n<a name=\"l00096\"></a>00096 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#endif</span>\n<a name=\"l00097\"></a>00097 <span class=\"preprocessor\"></span>\n<a name=\"l00098\"></a>00098 <span class=\"comment\">// Macro for disabling assignments of objects.</span>\n<a name=\"l00099\"></a>00099 <span class=\"preprocessor\">#ifdef _TTHREAD_CPP0X_PARTIAL_</span>\n<a name=\"l00100\"></a>00100 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #define _TTHREAD_DISABLE_ASSIGNMENT(name) \\</span>\n<a name=\"l00101\"></a>00101 <span class=\"preprocessor\">      name(const name&amp;) = delete; \\</span>\n<a name=\"l00102\"></a>00102 <span class=\"preprocessor\">      name&amp; operator=(const name&amp;) = delete;</span>\n<a name=\"l00103\"></a>00103 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#else</span>\n<a name=\"l00104\"></a>00104 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #define _TTHREAD_DISABLE_ASSIGNMENT(name) \\</span>\n<a name=\"l00105\"></a>00105 <span class=\"preprocessor\">      name(const name&amp;); \\</span>\n<a name=\"l00106\"></a>00106 <span class=\"preprocessor\">      name&amp; operator=(const name&amp;);</span>\n<a name=\"l00107\"></a>00107 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#endif</span>\n<a name=\"l00108\"></a>00108 <span class=\"preprocessor\"></span>\n<a name=\"l00129\"></a>00129 \n<a name=\"l00130\"></a>00130 <span class=\"preprocessor\">#if !defined(_TTHREAD_CPP0X_) &amp;&amp; !defined(thread_local)</span>\n<a name=\"l00131\"></a>00131 <span class=\"preprocessor\"></span><span class=\"preprocessor\"> #if defined(__GNUC__) || defined(__INTEL_COMPILER) || defined(__SUNPRO_CC) || defined(__IBMCPP__)</span>\n<a name=\"l00132\"></a>00132 <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #define thread_local __thread</span>\n<a name=\"l00133\"></a>00133 <span class=\"preprocessor\"></span><span class=\"preprocessor\"> #else</span>\n<a name=\"l00134\"></a><a class=\"code\" href=\"tinythread_8h.html#ad4d9b405bcbffaf0d4dae6166c18aa1e\">00134</a> <span class=\"preprocessor\"></span><span class=\"preprocessor\">  #define thread_local __declspec(thread)</span>\n<a name=\"l00135\"></a>00135 <span class=\"preprocessor\"></span><span class=\"preprocessor\"> #endif</span>\n<a name=\"l00136\"></a>00136 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#endif</span>\n<a name=\"l00137\"></a>00137 <span class=\"preprocessor\"></span>\n<a name=\"l00138\"></a>00138 \n<a name=\"l00143\"></a>00143 <span class=\"keyword\">namespace </span>tthread {\n<a name=\"l00144\"></a>00144 \n<a name=\"l00151\"></a><a class=\"code\" href=\"classtthread_1_1mutex.html\">00151</a> <span class=\"keyword\">class </span><a class=\"code\" href=\"classtthread_1_1mutex.html\" title=\"Mutex class.\">mutex</a> {\n<a name=\"l00152\"></a>00152   <span class=\"keyword\">public</span>:\n<a name=\"l00154\"></a><a class=\"code\" href=\"classtthread_1_1mutex.html#aef42e2bd0ea2ffa8ce1cdc7e5d183910\">00154</a>     <a class=\"code\" href=\"classtthread_1_1mutex.html#aef42e2bd0ea2ffa8ce1cdc7e5d183910\" title=\"Constructor.\">mutex</a>()\n<a name=\"l00155\"></a>00155 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00156\"></a>00156 <span class=\"preprocessor\"></span>      : mAlreadyLocked(<span class=\"keyword\">false</span>)\n<a name=\"l00157\"></a>00157 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00158\"></a>00158 <span class=\"preprocessor\"></span>    {\n<a name=\"l00159\"></a>00159 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00160\"></a>00160 <span class=\"preprocessor\"></span>      InitializeCriticalSection(&amp;mHandle);\n<a name=\"l00161\"></a>00161 <span class=\"preprocessor\">#else</span>\n<a name=\"l00162\"></a>00162 <span class=\"preprocessor\"></span>      pthread_mutex_init(&amp;mHandle, NULL);\n<a name=\"l00163\"></a>00163 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00164\"></a>00164 <span class=\"preprocessor\"></span>    }\n<a name=\"l00165\"></a>00165 \n<a name=\"l00167\"></a><a class=\"code\" href=\"classtthread_1_1mutex.html#a3ab9328c3addeb57045f45910b10a1cf\">00167</a>     <a class=\"code\" href=\"classtthread_1_1mutex.html#a3ab9328c3addeb57045f45910b10a1cf\" title=\"Destructor.\">~mutex</a>()\n<a name=\"l00168\"></a>00168     {\n<a name=\"l00169\"></a>00169 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00170\"></a>00170 <span class=\"preprocessor\"></span>      DeleteCriticalSection(&amp;mHandle);\n<a name=\"l00171\"></a>00171 <span class=\"preprocessor\">#else</span>\n<a name=\"l00172\"></a>00172 <span class=\"preprocessor\"></span>      pthread_mutex_destroy(&amp;mHandle);\n<a name=\"l00173\"></a>00173 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00174\"></a>00174 <span class=\"preprocessor\"></span>    }\n<a name=\"l00175\"></a>00175 \n<a name=\"l00180\"></a><a class=\"code\" href=\"classtthread_1_1mutex.html#aa81aed607133209dade63a226818224d\">00180</a>     <span class=\"keyword\">inline</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classtthread_1_1mutex.html#aa81aed607133209dade63a226818224d\" title=\"Lock the mutex.\">lock</a>()\n<a name=\"l00181\"></a>00181     {\n<a name=\"l00182\"></a>00182 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00183\"></a>00183 <span class=\"preprocessor\"></span>      EnterCriticalSection(&amp;mHandle);\n<a name=\"l00184\"></a>00184       <span class=\"keywordflow\">while</span>(mAlreadyLocked) Sleep(1000); <span class=\"comment\">// Simulate deadlock...</span>\n<a name=\"l00185\"></a>00185       mAlreadyLocked = <span class=\"keyword\">true</span>;\n<a name=\"l00186\"></a>00186 <span class=\"preprocessor\">#else</span>\n<a name=\"l00187\"></a>00187 <span class=\"preprocessor\"></span>      pthread_mutex_lock(&amp;mHandle);\n<a name=\"l00188\"></a>00188 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00189\"></a>00189 <span class=\"preprocessor\"></span>    }\n<a name=\"l00190\"></a>00190 \n<a name=\"l00196\"></a><a class=\"code\" href=\"classtthread_1_1mutex.html#aa24a64f788f142df670c3abc809d32b6\">00196</a>     <span class=\"keyword\">inline</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classtthread_1_1mutex.html#aa24a64f788f142df670c3abc809d32b6\" title=\"Try to lock the mutex.\">try_lock</a>()\n<a name=\"l00197\"></a>00197     {\n<a name=\"l00198\"></a>00198 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00199\"></a>00199 <span class=\"preprocessor\"></span>      <span class=\"keywordtype\">bool</span> ret = (TryEnterCriticalSection(&amp;mHandle) ? <span class=\"keyword\">true</span> : <span class=\"keyword\">false</span>);\n<a name=\"l00200\"></a>00200       <span class=\"keywordflow\">if</span>(ret &amp;&amp; mAlreadyLocked)\n<a name=\"l00201\"></a>00201       {\n<a name=\"l00202\"></a>00202         LeaveCriticalSection(&amp;mHandle);\n<a name=\"l00203\"></a>00203         ret = <span class=\"keyword\">false</span>;\n<a name=\"l00204\"></a>00204       }\n<a name=\"l00205\"></a>00205       <span class=\"keywordflow\">return</span> ret;\n<a name=\"l00206\"></a>00206 <span class=\"preprocessor\">#else</span>\n<a name=\"l00207\"></a>00207 <span class=\"preprocessor\"></span>      <span class=\"keywordflow\">return</span> (pthread_mutex_trylock(&amp;mHandle) == 0) ? <span class=\"keyword\">true</span> : <span class=\"keyword\">false</span>;\n<a name=\"l00208\"></a>00208 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00209\"></a>00209 <span class=\"preprocessor\"></span>    }\n<a name=\"l00210\"></a>00210 \n<a name=\"l00214\"></a><a class=\"code\" href=\"classtthread_1_1mutex.html#a9278be8203e1c42e2619179882ae4403\">00214</a>     <span class=\"keyword\">inline</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classtthread_1_1mutex.html#a9278be8203e1c42e2619179882ae4403\" title=\"Unlock the mutex.\">unlock</a>()\n<a name=\"l00215\"></a>00215     {\n<a name=\"l00216\"></a>00216 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00217\"></a>00217 <span class=\"preprocessor\"></span>      mAlreadyLocked = <span class=\"keyword\">false</span>;\n<a name=\"l00218\"></a>00218       LeaveCriticalSection(&amp;mHandle);\n<a name=\"l00219\"></a>00219 <span class=\"preprocessor\">#else</span>\n<a name=\"l00220\"></a>00220 <span class=\"preprocessor\"></span>      pthread_mutex_unlock(&amp;mHandle);\n<a name=\"l00221\"></a>00221 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00222\"></a>00222 <span class=\"preprocessor\"></span>    }\n<a name=\"l00223\"></a>00223 \n<a name=\"l00224\"></a>00224     _TTHREAD_DISABLE_ASSIGNMENT(<a class=\"code\" href=\"classtthread_1_1mutex.html\" title=\"Mutex class.\">mutex</a>)\n<a name=\"l00225\"></a>00225 \n<a name=\"l00226\"></a>00226   private:\n<a name=\"l00227\"></a>00227 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00228\"></a>00228 <span class=\"preprocessor\"></span>    CRITICAL_SECTION mHandle;\n<a name=\"l00229\"></a>00229     <span class=\"keywordtype\">bool</span> mAlreadyLocked;\n<a name=\"l00230\"></a>00230 <span class=\"preprocessor\">#else</span>\n<a name=\"l00231\"></a>00231 <span class=\"preprocessor\"></span>    pthread_mutex_t mHandle;\n<a name=\"l00232\"></a>00232 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00233\"></a>00233 <span class=\"preprocessor\"></span>\n<a name=\"l00234\"></a>00234     <span class=\"keyword\">friend</span> <span class=\"keyword\">class </span><a class=\"code\" href=\"classtthread_1_1condition__variable.html\" title=\"Condition variable class.\">condition_variable</a>;\n<a name=\"l00235\"></a>00235 };\n<a name=\"l00236\"></a>00236 \n<a name=\"l00243\"></a><a class=\"code\" href=\"classtthread_1_1recursive__mutex.html\">00243</a> <span class=\"keyword\">class </span><a class=\"code\" href=\"classtthread_1_1recursive__mutex.html\" title=\"Recursive mutex class.\">recursive_mutex</a> {\n<a name=\"l00244\"></a>00244   <span class=\"keyword\">public</span>:\n<a name=\"l00246\"></a><a class=\"code\" href=\"classtthread_1_1recursive__mutex.html#a612d33a8905a3de216a8be0467538ede\">00246</a>     <a class=\"code\" href=\"classtthread_1_1recursive__mutex.html#a612d33a8905a3de216a8be0467538ede\" title=\"Constructor.\">recursive_mutex</a>()\n<a name=\"l00247\"></a>00247     {\n<a name=\"l00248\"></a>00248 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00249\"></a>00249 <span class=\"preprocessor\"></span>      InitializeCriticalSection(&amp;mHandle);\n<a name=\"l00250\"></a>00250 <span class=\"preprocessor\">#else</span>\n<a name=\"l00251\"></a>00251 <span class=\"preprocessor\"></span>      pthread_mutexattr_t attr;\n<a name=\"l00252\"></a>00252       pthread_mutexattr_init(&amp;attr);\n<a name=\"l00253\"></a>00253       pthread_mutexattr_settype(&amp;attr, PTHREAD_MUTEX_RECURSIVE);\n<a name=\"l00254\"></a>00254       pthread_mutex_init(&amp;mHandle, &amp;attr);\n<a name=\"l00255\"></a>00255 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00256\"></a>00256 <span class=\"preprocessor\"></span>    }\n<a name=\"l00257\"></a>00257 \n<a name=\"l00259\"></a><a class=\"code\" href=\"classtthread_1_1recursive__mutex.html#a571b16a7b52c4d1fb0bdb5ff0482c100\">00259</a>     <a class=\"code\" href=\"classtthread_1_1recursive__mutex.html#a571b16a7b52c4d1fb0bdb5ff0482c100\" title=\"Destructor.\">~recursive_mutex</a>()\n<a name=\"l00260\"></a>00260     {\n<a name=\"l00261\"></a>00261 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00262\"></a>00262 <span class=\"preprocessor\"></span>      DeleteCriticalSection(&amp;mHandle);\n<a name=\"l00263\"></a>00263 <span class=\"preprocessor\">#else</span>\n<a name=\"l00264\"></a>00264 <span class=\"preprocessor\"></span>      pthread_mutex_destroy(&amp;mHandle);\n<a name=\"l00265\"></a>00265 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00266\"></a>00266 <span class=\"preprocessor\"></span>    }\n<a name=\"l00267\"></a>00267 \n<a name=\"l00272\"></a><a class=\"code\" href=\"classtthread_1_1recursive__mutex.html#aa81aed607133209dade63a226818224d\">00272</a>     <span class=\"keyword\">inline</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classtthread_1_1recursive__mutex.html#aa81aed607133209dade63a226818224d\" title=\"Lock the mutex.\">lock</a>()\n<a name=\"l00273\"></a>00273     {\n<a name=\"l00274\"></a>00274 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00275\"></a>00275 <span class=\"preprocessor\"></span>      EnterCriticalSection(&amp;mHandle);\n<a name=\"l00276\"></a>00276 <span class=\"preprocessor\">#else</span>\n<a name=\"l00277\"></a>00277 <span class=\"preprocessor\"></span>      pthread_mutex_lock(&amp;mHandle);\n<a name=\"l00278\"></a>00278 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00279\"></a>00279 <span class=\"preprocessor\"></span>    }\n<a name=\"l00280\"></a>00280 \n<a name=\"l00286\"></a><a class=\"code\" href=\"classtthread_1_1recursive__mutex.html#aa24a64f788f142df670c3abc809d32b6\">00286</a>     <span class=\"keyword\">inline</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classtthread_1_1recursive__mutex.html#aa24a64f788f142df670c3abc809d32b6\" title=\"Try to lock the mutex.\">try_lock</a>()\n<a name=\"l00287\"></a>00287     {\n<a name=\"l00288\"></a>00288 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00289\"></a>00289 <span class=\"preprocessor\"></span>      <span class=\"keywordflow\">return</span> TryEnterCriticalSection(&amp;mHandle) ? <span class=\"keyword\">true</span> : <span class=\"keyword\">false</span>;\n<a name=\"l00290\"></a>00290 <span class=\"preprocessor\">#else</span>\n<a name=\"l00291\"></a>00291 <span class=\"preprocessor\"></span>      <span class=\"keywordflow\">return</span> (pthread_mutex_trylock(&amp;mHandle) == 0) ? <span class=\"keyword\">true</span> : <span class=\"keyword\">false</span>;\n<a name=\"l00292\"></a>00292 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00293\"></a>00293 <span class=\"preprocessor\"></span>    }\n<a name=\"l00294\"></a>00294 \n<a name=\"l00298\"></a><a class=\"code\" href=\"classtthread_1_1recursive__mutex.html#a9278be8203e1c42e2619179882ae4403\">00298</a>     <span class=\"keyword\">inline</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classtthread_1_1recursive__mutex.html#a9278be8203e1c42e2619179882ae4403\" title=\"Unlock the mutex.\">unlock</a>()\n<a name=\"l00299\"></a>00299     {\n<a name=\"l00300\"></a>00300 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00301\"></a>00301 <span class=\"preprocessor\"></span>      LeaveCriticalSection(&amp;mHandle);\n<a name=\"l00302\"></a>00302 <span class=\"preprocessor\">#else</span>\n<a name=\"l00303\"></a>00303 <span class=\"preprocessor\"></span>      pthread_mutex_unlock(&amp;mHandle);\n<a name=\"l00304\"></a>00304 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00305\"></a>00305 <span class=\"preprocessor\"></span>    }\n<a name=\"l00306\"></a>00306 \n<a name=\"l00307\"></a>00307     _TTHREAD_DISABLE_ASSIGNMENT(<a class=\"code\" href=\"classtthread_1_1recursive__mutex.html\" title=\"Recursive mutex class.\">recursive_mutex</a>)\n<a name=\"l00308\"></a>00308 \n<a name=\"l00309\"></a>00309   private:\n<a name=\"l00310\"></a>00310 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00311\"></a>00311 <span class=\"preprocessor\"></span>    CRITICAL_SECTION mHandle;\n<a name=\"l00312\"></a>00312 <span class=\"preprocessor\">#else</span>\n<a name=\"l00313\"></a>00313 <span class=\"preprocessor\"></span>    pthread_mutex_t mHandle;\n<a name=\"l00314\"></a>00314 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00315\"></a>00315 <span class=\"preprocessor\"></span>\n<a name=\"l00316\"></a>00316     <span class=\"keyword\">friend</span> <span class=\"keyword\">class </span><a class=\"code\" href=\"classtthread_1_1condition__variable.html\" title=\"Condition variable class.\">condition_variable</a>;\n<a name=\"l00317\"></a>00317 };\n<a name=\"l00318\"></a>00318 \n<a name=\"l00333\"></a>00333 \n<a name=\"l00334\"></a>00334 <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">class</span> T&gt;\n<a name=\"l00335\"></a><a class=\"code\" href=\"classtthread_1_1lock__guard.html\">00335</a> <span class=\"keyword\">class </span><a class=\"code\" href=\"classtthread_1_1lock__guard.html\" title=\"Lock guard class.\">lock_guard</a> {\n<a name=\"l00336\"></a>00336   <span class=\"keyword\">public</span>:\n<a name=\"l00337\"></a>00337     <span class=\"keyword\">typedef</span> T mutex_type;\n<a name=\"l00338\"></a>00338 \n<a name=\"l00339\"></a>00339     <a class=\"code\" href=\"classtthread_1_1lock__guard.html\" title=\"Lock guard class.\">lock_guard</a>() : mMutex(0) {}\n<a name=\"l00340\"></a>00340 \n<a name=\"l00342\"></a><a class=\"code\" href=\"classtthread_1_1lock__guard.html#a2c5fd14427acb035def5201e4cfd4540\">00342</a>     <span class=\"keyword\">explicit</span> <a class=\"code\" href=\"classtthread_1_1lock__guard.html\" title=\"Lock guard class.\">lock_guard</a>(mutex_type &amp;aMutex)\n<a name=\"l00343\"></a>00343     {\n<a name=\"l00344\"></a>00344       mMutex = &amp;aMutex;\n<a name=\"l00345\"></a>00345       mMutex-&gt;lock();\n<a name=\"l00346\"></a>00346     }\n<a name=\"l00347\"></a>00347 \n<a name=\"l00349\"></a><a class=\"code\" href=\"classtthread_1_1lock__guard.html#aa54999fb933a139807d39ed05e97aa6d\">00349</a>     <a class=\"code\" href=\"classtthread_1_1lock__guard.html#aa54999fb933a139807d39ed05e97aa6d\" title=\"The destructor unlocks the mutex.\">~lock_guard</a>()\n<a name=\"l00350\"></a>00350     {\n<a name=\"l00351\"></a>00351       <span class=\"keywordflow\">if</span>(mMutex)\n<a name=\"l00352\"></a>00352         mMutex-&gt;unlock();\n<a name=\"l00353\"></a>00353     }\n<a name=\"l00354\"></a>00354 \n<a name=\"l00355\"></a>00355   <span class=\"keyword\">private</span>:\n<a name=\"l00356\"></a>00356     mutex_type * mMutex;\n<a name=\"l00357\"></a>00357 };\n<a name=\"l00358\"></a>00358 \n<a name=\"l00384\"></a><a class=\"code\" href=\"classtthread_1_1condition__variable.html\">00384</a> <span class=\"keyword\">class </span><a class=\"code\" href=\"classtthread_1_1condition__variable.html\" title=\"Condition variable class.\">condition_variable</a> {\n<a name=\"l00385\"></a>00385   <span class=\"keyword\">public</span>:\n<a name=\"l00387\"></a>00387 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00388\"></a>00388 <span class=\"preprocessor\"></span>    <a class=\"code\" href=\"classtthread_1_1condition__variable.html#a9e62a1d1145c820a02469a48099fdfa9\" title=\"Constructor.\">condition_variable</a>();\n<a name=\"l00389\"></a>00389 <span class=\"preprocessor\">#else</span>\n<a name=\"l00390\"></a><a class=\"code\" href=\"classtthread_1_1condition__variable.html#a9e62a1d1145c820a02469a48099fdfa9\">00390</a> <span class=\"preprocessor\"></span>    <a class=\"code\" href=\"classtthread_1_1condition__variable.html#a9e62a1d1145c820a02469a48099fdfa9\" title=\"Constructor.\">condition_variable</a>()\n<a name=\"l00391\"></a>00391     {\n<a name=\"l00392\"></a>00392       pthread_cond_init(&amp;mHandle, NULL);\n<a name=\"l00393\"></a>00393     }\n<a name=\"l00394\"></a>00394 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00395\"></a>00395 <span class=\"preprocessor\"></span>\n<a name=\"l00397\"></a>00397 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00398\"></a>00398 <span class=\"preprocessor\"></span>    <a class=\"code\" href=\"classtthread_1_1condition__variable.html#a58df09046f5006d4170ae92717f1e50b\" title=\"Destructor.\">~condition_variable</a>();\n<a name=\"l00399\"></a>00399 <span class=\"preprocessor\">#else</span>\n<a name=\"l00400\"></a><a class=\"code\" href=\"classtthread_1_1condition__variable.html#a58df09046f5006d4170ae92717f1e50b\">00400</a> <span class=\"preprocessor\"></span>    <a class=\"code\" href=\"classtthread_1_1condition__variable.html#a58df09046f5006d4170ae92717f1e50b\" title=\"Destructor.\">~condition_variable</a>()\n<a name=\"l00401\"></a>00401     {\n<a name=\"l00402\"></a>00402       pthread_cond_destroy(&amp;mHandle);\n<a name=\"l00403\"></a>00403     }\n<a name=\"l00404\"></a>00404 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00405\"></a>00405 <span class=\"preprocessor\"></span>\n<a name=\"l00411\"></a>00411     <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">class</span> _mutexT&gt;\n<a name=\"l00412\"></a><a class=\"code\" href=\"classtthread_1_1condition__variable.html#a4d877d804385bde4aacf2156e86faede\">00412</a>     <span class=\"keyword\">inline</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classtthread_1_1condition__variable.html#a4d877d804385bde4aacf2156e86faede\" title=\"Wait for the condition.\">wait</a>(_mutexT &amp;aMutex)\n<a name=\"l00413\"></a>00413     {\n<a name=\"l00414\"></a>00414 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00415\"></a>00415 <span class=\"preprocessor\"></span>      <span class=\"comment\">// Increment number of waiters</span>\n<a name=\"l00416\"></a>00416       EnterCriticalSection(&amp;mWaitersCountLock);\n<a name=\"l00417\"></a>00417       ++ mWaitersCount;\n<a name=\"l00418\"></a>00418       LeaveCriticalSection(&amp;mWaitersCountLock);\n<a name=\"l00419\"></a>00419 \n<a name=\"l00420\"></a>00420       <span class=\"comment\">// Release the mutex while waiting for the condition (will decrease</span>\n<a name=\"l00421\"></a>00421       <span class=\"comment\">// the number of waiters when done)...</span>\n<a name=\"l00422\"></a>00422       aMutex.unlock();\n<a name=\"l00423\"></a>00423       _wait();\n<a name=\"l00424\"></a>00424       aMutex.lock();\n<a name=\"l00425\"></a>00425 <span class=\"preprocessor\">#else</span>\n<a name=\"l00426\"></a>00426 <span class=\"preprocessor\"></span>      pthread_cond_wait(&amp;mHandle, &amp;aMutex.mHandle);\n<a name=\"l00427\"></a>00427 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00428\"></a>00428 <span class=\"preprocessor\"></span>    }\n<a name=\"l00429\"></a>00429 \n<a name=\"l00435\"></a>00435 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00436\"></a>00436 <span class=\"preprocessor\"></span>    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classtthread_1_1condition__variable.html#a84c2ec0dd971c593883198a323eeb394\" title=\"Notify one thread that is waiting for the condition.\">notify_one</a>();\n<a name=\"l00437\"></a>00437 <span class=\"preprocessor\">#else</span>\n<a name=\"l00438\"></a><a class=\"code\" href=\"classtthread_1_1condition__variable.html#a84c2ec0dd971c593883198a323eeb394\">00438</a> <span class=\"preprocessor\"></span>    <span class=\"keyword\">inline</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classtthread_1_1condition__variable.html#a84c2ec0dd971c593883198a323eeb394\" title=\"Notify one thread that is waiting for the condition.\">notify_one</a>()\n<a name=\"l00439\"></a>00439     {\n<a name=\"l00440\"></a>00440       pthread_cond_signal(&amp;mHandle);\n<a name=\"l00441\"></a>00441     }\n<a name=\"l00442\"></a>00442 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00443\"></a>00443 <span class=\"preprocessor\"></span>\n<a name=\"l00449\"></a>00449 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00450\"></a>00450 <span class=\"preprocessor\"></span>    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classtthread_1_1condition__variable.html#ad35a04e61229c15c5211ebff00089326\" title=\"Notify all threads that are waiting for the condition.\">notify_all</a>();\n<a name=\"l00451\"></a>00451 <span class=\"preprocessor\">#else</span>\n<a name=\"l00452\"></a><a class=\"code\" href=\"classtthread_1_1condition__variable.html#ad35a04e61229c15c5211ebff00089326\">00452</a> <span class=\"preprocessor\"></span>    <span class=\"keyword\">inline</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classtthread_1_1condition__variable.html#ad35a04e61229c15c5211ebff00089326\" title=\"Notify all threads that are waiting for the condition.\">notify_all</a>()\n<a name=\"l00453\"></a>00453     {\n<a name=\"l00454\"></a>00454       pthread_cond_broadcast(&amp;mHandle);\n<a name=\"l00455\"></a>00455     }\n<a name=\"l00456\"></a>00456 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00457\"></a>00457 <span class=\"preprocessor\"></span>\n<a name=\"l00458\"></a>00458     _TTHREAD_DISABLE_ASSIGNMENT(<a class=\"code\" href=\"classtthread_1_1condition__variable.html\" title=\"Condition variable class.\">condition_variable</a>)\n<a name=\"l00459\"></a>00459 \n<a name=\"l00460\"></a>00460   private:\n<a name=\"l00461\"></a>00461 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00462\"></a>00462 <span class=\"preprocessor\"></span>    <span class=\"keywordtype\">void</span> _wait();\n<a name=\"l00463\"></a>00463     HANDLE mEvents[2];                  \n<a name=\"l00464\"></a>00464     <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> mWaitersCount;         \n<a name=\"l00465\"></a>00465     CRITICAL_SECTION mWaitersCountLock; \n<a name=\"l00466\"></a>00466 <span class=\"preprocessor\">#else</span>\n<a name=\"l00467\"></a>00467 <span class=\"preprocessor\"></span>    pthread_cond_t mHandle;\n<a name=\"l00468\"></a>00468 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00469\"></a>00469 <span class=\"preprocessor\"></span>};\n<a name=\"l00470\"></a>00470 \n<a name=\"l00471\"></a>00471 \n<a name=\"l00473\"></a><a class=\"code\" href=\"classtthread_1_1thread.html\">00473</a> <span class=\"keyword\">class </span><a class=\"code\" href=\"classtthread_1_1thread.html\" title=\"Thread class.\">thread</a> {\n<a name=\"l00474\"></a>00474   <span class=\"keyword\">public</span>:\n<a name=\"l00475\"></a>00475 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00476\"></a>00476 <span class=\"preprocessor\"></span>    <span class=\"keyword\">typedef</span> HANDLE native_handle_type;\n<a name=\"l00477\"></a>00477 <span class=\"preprocessor\">#else</span>\n<a name=\"l00478\"></a>00478 <span class=\"preprocessor\"></span>    <span class=\"keyword\">typedef</span> pthread_t native_handle_type;\n<a name=\"l00479\"></a>00479 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00480\"></a>00480 <span class=\"preprocessor\"></span>\n<a name=\"l00481\"></a>00481     <span class=\"keyword\">class </span><a class=\"code\" href=\"classtthread_1_1thread_1_1id.html\" title=\"Thread ID.\">id</a>;\n<a name=\"l00482\"></a>00482 \n<a name=\"l00486\"></a><a class=\"code\" href=\"classtthread_1_1thread.html#a1816c2a63c2941090f9a24e5a62efea1\">00486</a>     <a class=\"code\" href=\"classtthread_1_1thread.html#a1816c2a63c2941090f9a24e5a62efea1\" title=\"Default constructor.\">thread</a>() : mHandle(0), mNotAThread(true)\n<a name=\"l00487\"></a>00487 #if defined(_TTHREAD_WIN32_)\n<a name=\"l00488\"></a>00488     , mWin32ThreadID(0)\n<a name=\"l00489\"></a>00489 #endif\n<a name=\"l00490\"></a>00490     {}\n<a name=\"l00491\"></a>00491 \n<a name=\"l00500\"></a>00500     <a class=\"code\" href=\"classtthread_1_1thread.html#a1816c2a63c2941090f9a24e5a62efea1\" title=\"Default constructor.\">thread</a>(<span class=\"keywordtype\">void</span> (*aFunction)(<span class=\"keywordtype\">void</span> *), <span class=\"keywordtype\">void</span> * aArg);\n<a name=\"l00501\"></a>00501 \n<a name=\"l00506\"></a>00506     <a class=\"code\" href=\"classtthread_1_1thread.html#a626c04c85c7e2b10215bc4a35062f177\" title=\"Destructor.\">~thread</a>();\n<a name=\"l00507\"></a>00507 \n<a name=\"l00509\"></a>00509     <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classtthread_1_1thread.html#a6c7abfff648dad193674fc432ad4840d\" title=\"Wait for the thread to finish (join execution flows).\">join</a>();\n<a name=\"l00510\"></a>00510 \n<a name=\"l00513\"></a>00513     <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classtthread_1_1thread.html#a5f02386ef3b6ef614321b6ec3606b242\" title=\"Check if the thread is joinable.\">joinable</a>() <span class=\"keyword\">const</span>;\n<a name=\"l00514\"></a>00514 \n<a name=\"l00516\"></a>00516     <span class=\"keywordtype\">id</span> <a class=\"code\" href=\"classtthread_1_1thread.html#afb4f4110b330d27774c16baec4f7d4f5\" title=\"Return the thread ID of a thread object.\">get_id</a>() <span class=\"keyword\">const</span>;\n<a name=\"l00517\"></a>00517 \n<a name=\"l00521\"></a><a class=\"code\" href=\"classtthread_1_1thread.html#ac9ba019ced75a29c52c41aff4e1ca20e\">00521</a>     <span class=\"keyword\">inline</span> native_handle_type <a class=\"code\" href=\"classtthread_1_1thread.html#ac9ba019ced75a29c52c41aff4e1ca20e\" title=\"Get the native handle for this thread.\">native_handle</a>()\n<a name=\"l00522\"></a>00522     {\n<a name=\"l00523\"></a>00523       <span class=\"keywordflow\">return</span> mHandle;\n<a name=\"l00524\"></a>00524     }\n<a name=\"l00525\"></a>00525 \n<a name=\"l00531\"></a>00531     <span class=\"keyword\">static</span> <span class=\"keywordtype\">unsigned</span> <a class=\"code\" href=\"classtthread_1_1thread.html#a3b04fb20012111681e37dfe63f105f6d\" title=\"Determine the number of threads which can possibly execute concurrently.\">hardware_concurrency</a>();\n<a name=\"l00532\"></a>00532 \n<a name=\"l00533\"></a>00533     _TTHREAD_DISABLE_ASSIGNMENT(<a class=\"code\" href=\"classtthread_1_1thread.html\" title=\"Thread class.\">thread</a>)\n<a name=\"l00534\"></a>00534 \n<a name=\"l00535\"></a>00535   private:\n<a name=\"l00536\"></a>00536     native_handle_type mHandle;   \n<a name=\"l00537\"></a>00537     mutable <a class=\"code\" href=\"classtthread_1_1mutex.html\" title=\"Mutex class.\">mutex</a> mDataMutex;     \n<a name=\"l00538\"></a>00538     <span class=\"keywordtype\">bool</span> mNotAThread;             \n<a name=\"l00539\"></a>00539 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00540\"></a>00540 <span class=\"preprocessor\"></span>    <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> mWin32ThreadID;  \n<a name=\"l00541\"></a>00541 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00542\"></a>00542 <span class=\"preprocessor\"></span>\n<a name=\"l00543\"></a>00543     <span class=\"comment\">// This is the internal thread wrapper function.</span>\n<a name=\"l00544\"></a>00544 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00545\"></a>00545 <span class=\"preprocessor\"></span>    <span class=\"keyword\">static</span> <span class=\"keywordtype\">unsigned</span> WINAPI wrapper_function(<span class=\"keywordtype\">void</span> * aArg);\n<a name=\"l00546\"></a>00546 <span class=\"preprocessor\">#else</span>\n<a name=\"l00547\"></a>00547 <span class=\"preprocessor\"></span>    <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> * wrapper_function(<span class=\"keywordtype\">void</span> * aArg);\n<a name=\"l00548\"></a>00548 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00549\"></a>00549 <span class=\"preprocessor\"></span>};\n<a name=\"l00550\"></a>00550 \n<a name=\"l00554\"></a><a class=\"code\" href=\"classtthread_1_1thread_1_1id.html\">00554</a> <span class=\"keyword\">class </span><a class=\"code\" href=\"classtthread_1_1thread_1_1id.html\" title=\"Thread ID.\">thread::id</a> {\n<a name=\"l00555\"></a>00555   <span class=\"keyword\">public</span>:\n<a name=\"l00559\"></a><a class=\"code\" href=\"classtthread_1_1thread_1_1id.html#a087060b582403885d08e89ad894ecc5d\">00559</a>     <a class=\"code\" href=\"classtthread_1_1thread_1_1id.html#a087060b582403885d08e89ad894ecc5d\" title=\"Default constructor.\">id</a>() : mId(0) {};\n<a name=\"l00560\"></a>00560 \n<a name=\"l00561\"></a>00561     <a class=\"code\" href=\"classtthread_1_1thread_1_1id.html#a087060b582403885d08e89ad894ecc5d\" title=\"Default constructor.\">id</a>(<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">long</span> <span class=\"keywordtype\">int</span> aId) : mId(aId) {};\n<a name=\"l00562\"></a>00562 \n<a name=\"l00563\"></a>00563     <a class=\"code\" href=\"classtthread_1_1thread_1_1id.html#a087060b582403885d08e89ad894ecc5d\" title=\"Default constructor.\">id</a>(<span class=\"keyword\">const</span> <span class=\"keywordtype\">id</span>&amp; aId) : mId(aId.mId) {};\n<a name=\"l00564\"></a>00564 \n<a name=\"l00565\"></a>00565     <span class=\"keyword\">inline</span> <span class=\"keywordtype\">id</span> &amp; operator=(<span class=\"keyword\">const</span> <span class=\"keywordtype\">id</span> &amp;aId)\n<a name=\"l00566\"></a>00566     {\n<a name=\"l00567\"></a>00567       mId = aId.mId;\n<a name=\"l00568\"></a>00568       <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;\n<a name=\"l00569\"></a>00569     }\n<a name=\"l00570\"></a>00570 \n<a name=\"l00571\"></a>00571     <span class=\"keyword\">inline</span> <span class=\"keyword\">friend</span> <span class=\"keywordtype\">bool</span> operator==(<span class=\"keyword\">const</span> <span class=\"keywordtype\">id</span> &amp;aId1, <span class=\"keyword\">const</span> <span class=\"keywordtype\">id</span> &amp;aId2)\n<a name=\"l00572\"></a>00572     {\n<a name=\"l00573\"></a>00573       <span class=\"keywordflow\">return</span> (aId1.mId == aId2.mId);\n<a name=\"l00574\"></a>00574     }\n<a name=\"l00575\"></a>00575 \n<a name=\"l00576\"></a>00576     <span class=\"keyword\">inline</span> <span class=\"keyword\">friend</span> <span class=\"keywordtype\">bool</span> operator!=(<span class=\"keyword\">const</span> <span class=\"keywordtype\">id</span> &amp;aId1, <span class=\"keyword\">const</span> <span class=\"keywordtype\">id</span> &amp;aId2)\n<a name=\"l00577\"></a>00577     {\n<a name=\"l00578\"></a>00578       <span class=\"keywordflow\">return</span> (aId1.mId != aId2.mId);\n<a name=\"l00579\"></a>00579     }\n<a name=\"l00580\"></a>00580 \n<a name=\"l00581\"></a>00581     <span class=\"keyword\">inline</span> <span class=\"keyword\">friend</span> <span class=\"keywordtype\">bool</span> operator&lt;=(<span class=\"keyword\">const</span> <span class=\"keywordtype\">id</span> &amp;aId1, <span class=\"keyword\">const</span> <span class=\"keywordtype\">id</span> &amp;aId2)\n<a name=\"l00582\"></a>00582     {\n<a name=\"l00583\"></a>00583       <span class=\"keywordflow\">return</span> (aId1.mId &lt;= aId2.mId);\n<a name=\"l00584\"></a>00584     }\n<a name=\"l00585\"></a>00585 \n<a name=\"l00586\"></a>00586     <span class=\"keyword\">inline</span> <span class=\"keyword\">friend</span> <span class=\"keywordtype\">bool</span> operator&lt;(<span class=\"keyword\">const</span> <span class=\"keywordtype\">id</span> &amp;aId1, <span class=\"keyword\">const</span> <span class=\"keywordtype\">id</span> &amp;aId2)\n<a name=\"l00587\"></a>00587     {\n<a name=\"l00588\"></a>00588       <span class=\"keywordflow\">return</span> (aId1.mId &lt; aId2.mId);\n<a name=\"l00589\"></a>00589     }\n<a name=\"l00590\"></a>00590 \n<a name=\"l00591\"></a>00591     <span class=\"keyword\">inline</span> <span class=\"keyword\">friend</span> <span class=\"keywordtype\">bool</span> operator&gt;=(<span class=\"keyword\">const</span> <span class=\"keywordtype\">id</span> &amp;aId1, <span class=\"keyword\">const</span> <span class=\"keywordtype\">id</span> &amp;aId2)\n<a name=\"l00592\"></a>00592     {\n<a name=\"l00593\"></a>00593       <span class=\"keywordflow\">return</span> (aId1.mId &gt;= aId2.mId);\n<a name=\"l00594\"></a>00594     }\n<a name=\"l00595\"></a>00595 \n<a name=\"l00596\"></a>00596     <span class=\"keyword\">inline</span> <span class=\"keyword\">friend</span> <span class=\"keywordtype\">bool</span> operator&gt;(<span class=\"keyword\">const</span> <span class=\"keywordtype\">id</span> &amp;aId1, <span class=\"keyword\">const</span> <span class=\"keywordtype\">id</span> &amp;aId2)\n<a name=\"l00597\"></a>00597     {\n<a name=\"l00598\"></a>00598       <span class=\"keywordflow\">return</span> (aId1.mId &gt; aId2.mId);\n<a name=\"l00599\"></a>00599     }\n<a name=\"l00600\"></a>00600 \n<a name=\"l00601\"></a>00601     <span class=\"keyword\">inline</span> <span class=\"keyword\">friend</span> std::ostream&amp; operator &lt;&lt;(std::ostream &amp;os, <span class=\"keyword\">const</span> <span class=\"keywordtype\">id</span> &amp;obj)\n<a name=\"l00602\"></a>00602     {\n<a name=\"l00603\"></a>00603       os &lt;&lt; obj.mId;\n<a name=\"l00604\"></a>00604       <span class=\"keywordflow\">return</span> os;\n<a name=\"l00605\"></a>00605     }\n<a name=\"l00606\"></a>00606 \n<a name=\"l00607\"></a>00607   <span class=\"keyword\">private</span>:\n<a name=\"l00608\"></a>00608     <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">long</span> <span class=\"keywordtype\">int</span> mId;\n<a name=\"l00609\"></a>00609 };\n<a name=\"l00610\"></a>00610 \n<a name=\"l00611\"></a>00611 \n<a name=\"l00612\"></a>00612 <span class=\"comment\">// Related to &lt;ratio&gt; - minimal to be able to support chrono.</span>\n<a name=\"l00613\"></a>00613 <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">long</span> <span class=\"keywordtype\">long</span> __intmax_t;\n<a name=\"l00614\"></a>00614 \n<a name=\"l00617\"></a><a class=\"code\" href=\"classtthread_1_1ratio.html\">00617</a> <span class=\"keyword\">template</span> &lt;__<span class=\"keywordtype\">int</span>max_t N, __<span class=\"keywordtype\">int</span>max_t D = 1&gt; <span class=\"keyword\">class </span><a class=\"code\" href=\"classtthread_1_1ratio.html\" title=\"Minimal implementation of the ratio class.\">ratio</a> {\n<a name=\"l00618\"></a>00618   <span class=\"keyword\">public</span>:\n<a name=\"l00619\"></a>00619     <span class=\"keyword\">static</span> <span class=\"keywordtype\">double</span> _as_double() { <span class=\"keywordflow\">return</span> double(N) / double(D); }\n<a name=\"l00620\"></a>00620 };\n<a name=\"l00621\"></a>00621 \n<a name=\"l00624\"></a><a class=\"code\" href=\"namespacetthread_1_1chrono.html\">00624</a> <span class=\"keyword\">namespace </span>chrono {\n<a name=\"l00627\"></a><a class=\"code\" href=\"classtthread_1_1chrono_1_1duration.html\">00627</a>   <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">class</span> _Rep, <span class=\"keyword\">class</span> _Period = ratio&lt;1&gt; &gt; <span class=\"keyword\">class </span><a class=\"code\" href=\"classtthread_1_1chrono_1_1duration.html\" title=\"Duration template class.\">duration</a> {\n<a name=\"l00628\"></a>00628     <span class=\"keyword\">private</span>:\n<a name=\"l00629\"></a>00629       _Rep rep_;\n<a name=\"l00630\"></a>00630     <span class=\"keyword\">public</span>:\n<a name=\"l00631\"></a>00631       <span class=\"keyword\">typedef</span> _Rep rep;\n<a name=\"l00632\"></a>00632       <span class=\"keyword\">typedef</span> _Period period;\n<a name=\"l00633\"></a>00633 \n<a name=\"l00635\"></a>00635       <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">class</span> _Rep2&gt;\n<a name=\"l00636\"></a><a class=\"code\" href=\"classtthread_1_1chrono_1_1duration.html#a5d86b0d68c98b74e3a6e541c1759ef3e\">00636</a>         <span class=\"keyword\">explicit</span> <a class=\"code\" href=\"classtthread_1_1chrono_1_1duration.html#a5d86b0d68c98b74e3a6e541c1759ef3e\" title=\"Construct a duration object with the given duration.\">duration</a>(<span class=\"keyword\">const</span> _Rep2&amp; r) : rep_(r) {};\n<a name=\"l00637\"></a>00637 \n<a name=\"l00639\"></a><a class=\"code\" href=\"classtthread_1_1chrono_1_1duration.html#a3f01111f479d27be202983aacb03c020\">00639</a>       rep <a class=\"code\" href=\"classtthread_1_1chrono_1_1duration.html#a3f01111f479d27be202983aacb03c020\" title=\"Return the value of the duration object.\">count</a>()<span class=\"keyword\"> const</span>\n<a name=\"l00640\"></a>00640 <span class=\"keyword\">      </span>{\n<a name=\"l00641\"></a>00641         <span class=\"keywordflow\">return</span> rep_;\n<a name=\"l00642\"></a>00642       }\n<a name=\"l00643\"></a>00643   };\n<a name=\"l00644\"></a>00644 \n<a name=\"l00645\"></a>00645   <span class=\"comment\">// Standard duration types.</span>\n<a name=\"l00646\"></a><a class=\"code\" href=\"namespacetthread_1_1chrono.html#a1396eccd0048d613bae0a745b55fa624\">00646</a>   <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"classtthread_1_1chrono_1_1duration.html\" title=\"Duration template class.\">duration&lt;__intmax_t, ratio&lt;1, 1000000000&gt;</a> &gt; <a class=\"code\" href=\"classtthread_1_1chrono_1_1duration.html\" title=\"Duration template class.\">nanoseconds</a>; \n<a name=\"l00647\"></a><a class=\"code\" href=\"namespacetthread_1_1chrono.html#add152055d7a764f3c1e5af1710f8814f\">00647</a>   <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"classtthread_1_1chrono_1_1duration.html\" title=\"Duration template class.\">duration&lt;__intmax_t, ratio&lt;1, 1000000&gt;</a> &gt; <a class=\"code\" href=\"classtthread_1_1chrono_1_1duration.html\" title=\"Duration template class.\">microseconds</a>;   \n<a name=\"l00648\"></a><a class=\"code\" href=\"namespacetthread_1_1chrono.html#a2cf88065d403d0e61022510769380b75\">00648</a>   <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"classtthread_1_1chrono_1_1duration.html\" title=\"Duration template class.\">duration&lt;__intmax_t, ratio&lt;1, 1000&gt;</a> &gt; <a class=\"code\" href=\"classtthread_1_1chrono_1_1duration.html\" title=\"Duration template class.\">milliseconds</a>;      \n<a name=\"l00649\"></a><a class=\"code\" href=\"namespacetthread_1_1chrono.html#a302ea2e096592e90ec58ccdcc6ec42c3\">00649</a>   <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"classtthread_1_1chrono_1_1duration.html\" title=\"Duration template class.\">duration&lt;__intmax_t&gt;</a> <a class=\"code\" href=\"classtthread_1_1chrono_1_1duration.html\" title=\"Duration template class.\">seconds</a>;                            \n<a name=\"l00650\"></a><a class=\"code\" href=\"namespacetthread_1_1chrono.html#a2a9e93851a6aee0eb47cc6379287ee16\">00650</a>   <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"classtthread_1_1chrono_1_1duration.html\" title=\"Duration template class.\">duration&lt;__intmax_t, ratio&lt;60&gt;</a> &gt; <a class=\"code\" href=\"classtthread_1_1chrono_1_1duration.html\" title=\"Duration template class.\">minutes</a>;                \n<a name=\"l00651\"></a><a class=\"code\" href=\"namespacetthread_1_1chrono.html#af212c337748be0da79f5a3a509f36cdf\">00651</a>   <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"classtthread_1_1chrono_1_1duration.html\" title=\"Duration template class.\">duration&lt;__intmax_t, ratio&lt;3600&gt;</a> &gt; <a class=\"code\" href=\"classtthread_1_1chrono_1_1duration.html\" title=\"Duration template class.\">hours</a>;                \n<a name=\"l00652\"></a>00652 }\n<a name=\"l00653\"></a>00653 \n<a name=\"l00656\"></a><a class=\"code\" href=\"namespacetthread_1_1this__thread.html\">00656</a> <span class=\"keyword\">namespace </span>this_thread {\n<a name=\"l00658\"></a>00658   <a class=\"code\" href=\"classtthread_1_1thread_1_1id.html\" title=\"Thread ID.\">thread::id</a> <a class=\"code\" href=\"namespacetthread_1_1this__thread.html#ab9370620a3920b9ec550f84fb44fb032\" title=\"Return the thread ID of the calling thread.\">get_id</a>();\n<a name=\"l00659\"></a>00659 \n<a name=\"l00663\"></a><a class=\"code\" href=\"namespacetthread_1_1this__thread.html#a867ef7ad1dd6026b7ee13bb013e00edd\">00663</a>   <span class=\"keyword\">inline</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"namespacetthread_1_1this__thread.html#a867ef7ad1dd6026b7ee13bb013e00edd\" title=\"Yield execution to another thread.\">yield</a>()\n<a name=\"l00664\"></a>00664   {\n<a name=\"l00665\"></a>00665 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00666\"></a>00666 <span class=\"preprocessor\"></span>    Sleep(0);\n<a name=\"l00667\"></a>00667 <span class=\"preprocessor\">#else</span>\n<a name=\"l00668\"></a>00668 <span class=\"preprocessor\"></span>    sched_yield();\n<a name=\"l00669\"></a>00669 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00670\"></a>00670 <span class=\"preprocessor\"></span>  }\n<a name=\"l00671\"></a>00671 \n<a name=\"l00681\"></a><a class=\"code\" href=\"namespacetthread_1_1this__thread.html#acba48c6dbf12d38ab816c18c1ef96398\">00681</a>   <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">class</span> _Rep, <span class=\"keyword\">class</span> _Period&gt; <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"namespacetthread_1_1this__thread.html#acba48c6dbf12d38ab816c18c1ef96398\" title=\"Blocks the calling thread for a period of time.\">sleep_for</a>(<span class=\"keyword\">const</span> <a class=\"code\" href=\"classtthread_1_1chrono_1_1duration.html\" title=\"Duration template class.\">chrono::duration&lt;_Rep, _Period&gt;</a>&amp; aTime)\n<a name=\"l00682\"></a>00682   {\n<a name=\"l00683\"></a>00683 <span class=\"preprocessor\">#if defined(_TTHREAD_WIN32_)</span>\n<a name=\"l00684\"></a>00684 <span class=\"preprocessor\"></span>    Sleep(<span class=\"keywordtype\">int</span>(<span class=\"keywordtype\">double</span>(aTime.<a class=\"code\" href=\"classtthread_1_1chrono_1_1duration.html#a3f01111f479d27be202983aacb03c020\" title=\"Return the value of the duration object.\">count</a>()) * (1000.0 * _Period::_as_double()) + 0.5));\n<a name=\"l00685\"></a>00685 <span class=\"preprocessor\">#else</span>\n<a name=\"l00686\"></a>00686 <span class=\"preprocessor\"></span>    usleep(<span class=\"keywordtype\">int</span>(<span class=\"keywordtype\">double</span>(aTime.<a class=\"code\" href=\"classtthread_1_1chrono_1_1duration.html#a3f01111f479d27be202983aacb03c020\" title=\"Return the value of the duration object.\">count</a>()) * (1000000.0 * _Period::_as_double()) + 0.5));\n<a name=\"l00687\"></a>00687 <span class=\"preprocessor\">#endif</span>\n<a name=\"l00688\"></a>00688 <span class=\"preprocessor\"></span>  }\n<a name=\"l00689\"></a>00689 }\n<a name=\"l00690\"></a>00690 \n<a name=\"l00691\"></a>00691 }\n<a name=\"l00692\"></a>00692 \n<a name=\"l00693\"></a>00693 <span class=\"comment\">// Define/macro cleanup</span>\n<a name=\"l00694\"></a>00694 <span class=\"preprocessor\">#undef _TTHREAD_DISABLE_ASSIGNMENT</span>\n<a name=\"l00695\"></a>00695 <span class=\"preprocessor\"></span>\n<a name=\"l00696\"></a>00696 <span class=\"preprocessor\">#endif // _TINYTHREAD_H_</span>\n</pre></div></div>\n<hr class=\"footer\"/><address style=\"text-align: right;\"><small>Generated on Fri Oct 1 21:49:33 2010 for TinyThread++ by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.3 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/TinyThread/source/fast_mutex.h",
    "content": "/*\nCopyright (c) 2010 Marcus Geelnard\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n    1. The origin of this software must not be misrepresented; you must not\n    claim that you wrote the original software. If you use this software\n    in a product, an acknowledgment in the product documentation would be\n    appreciated but is not required.\n\n    2. Altered source versions must be plainly marked as such, and must not be\n    misrepresented as being the original software.\n\n    3. This notice may not be removed or altered from any source\n    distribution.\n*/\n\n#ifndef _FAST_MUTEX_H_\n#define _FAST_MUTEX_H_\n\n/// @file\n\n// Which platform are we on?\n#if !defined(_TTHREAD_PLATFORM_DEFINED_)\n  #if defined(_WIN32) || defined(__WIN32__) || defined(__WINDOWS__)\n    #define _TTHREAD_WIN32_\n  #else\n    #define _TTHREAD_POSIX_\n  #endif\n  #define _TTHREAD_PLATFORM_DEFINED_\n#endif\n\n// Check if we can support the assembly language level implementation (otherwise\n// revert to the system API)\n#if (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))) || \\\n    (defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))) || \\\n    (defined(__GNUC__) && (defined(__ppc__)))\n  #define _FAST_MUTEX_ASM_\n#else\n  #define _FAST_MUTEX_SYS_\n#endif\n\n#if defined(_TTHREAD_WIN32_)\n  #include <windows.h>\n#else\n  #ifdef _FAST_MUTEX_ASM_\n    #include <sched.h>\n  #else\n    #include <pthread.h>\n  #endif\n#endif\n\nnamespace tthread {\n\n/// Fast mutex class.\n/// This is a mutual exclusion object for synchronizing access to shared\n/// memory areas for several threads. It is similar to the tthread::mutex class,\n/// but instead of using system level functions, it is implemented as an atomic\n/// spin lock with very low CPU overhead.\n///\n/// The \\c fast_mutex class is NOT compatible with the \\c condition_variable\n/// class (however, it IS compatible with the \\c lock_guard class). It should\n/// also be noted that the \\c fast_mutex class typically does not provide\n/// as accurate thread scheduling as a the standard \\c mutex class does.\n///\n/// Because of the limitations of the class, it should only be used in\n/// situations where the mutex needs to be locked/unlocked very frequently.\n///\n/// @note The \"fast\" version of this class relies on inline assembler language,\n/// which is currently only supported for 32/64-bit Intel x86/AMD64 and\n/// PowerPC architectures on a limited number of compilers (GNU g++ and MS\n/// Visual C++).\n/// For other architectures/compilers, system functions are used instead.\nclass fast_mutex {\n  public:\n    /// Constructor.\n#if defined(_FAST_MUTEX_ASM_)\n    fast_mutex() : mLock(0) {}\n#else\n    fast_mutex()\n    {\n  #if defined(_TTHREAD_WIN32_)\n      InitializeCriticalSection(&mHandle);\n  #elif defined(_TTHREAD_POSIX_)\n      pthread_mutex_init(&mHandle, NULL);\n  #endif\n    }\n#endif\n\n#if !defined(_FAST_MUTEX_ASM_)\n    /// Destructor.\n    ~fast_mutex()\n    {\n  #if defined(_TTHREAD_WIN32_)\n      DeleteCriticalSection(&mHandle);\n  #elif defined(_TTHREAD_POSIX_)\n      pthread_mutex_destroy(&mHandle);\n  #endif\n    }\n#endif\n\n    /// Lock the mutex.\n    /// The method will block the calling thread until a lock on the mutex can\n    /// be obtained. The mutex remains locked until \\c unlock() is called.\n    /// @see lock_guard\n    inline void lock()\n    {\n#if defined(_FAST_MUTEX_ASM_)\n      bool gotLock;\n      do {\n        gotLock = try_lock();\n        if(!gotLock)\n        {\n  #if defined(_TTHREAD_WIN32_)\n          Sleep(0);\n  #elif defined(_TTHREAD_POSIX_)\n          sched_yield();\n  #endif\n        }\n      } while(!gotLock);\n#else\n  #if defined(_TTHREAD_WIN32_)\n      EnterCriticalSection(&mHandle);\n  #elif defined(_TTHREAD_POSIX_)\n      pthread_mutex_lock(&mHandle);\n  #endif\n#endif\n    }\n\n    /// Try to lock the mutex.\n    /// The method will try to lock the mutex. If it fails, the function will\n    /// return immediately (non-blocking).\n    /// @return \\c true if the lock was acquired, or \\c false if the lock could\n    /// not be acquired.\n    inline bool try_lock()\n    {\n#if defined(_FAST_MUTEX_ASM_)\n      int oldLock;\n  #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))\n      asm volatile (\n        \"movl $1,%%eax\\n\\t\"\n        \"xchg %%eax,%0\\n\\t\"\n        \"movl %%eax,%1\\n\\t\"\n        : \"=m\" (mLock), \"=m\" (oldLock)\n        :\n        : \"%eax\", \"memory\"\n      );\n  #elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))\n      int *ptrLock = &mLock;\n      __asm {\n        mov eax,1\n        mov ecx,ptrLock\n        xchg eax,[ecx]\n        mov oldLock,eax\n      }\n  #elif defined(__GNUC__) && (defined(__ppc__))\n      int newLock = 1;\n      asm volatile (\n        \"\\n1:\\n\\t\"\n        \"lwarx  %0,0,%1\\n\\t\"\n        \"cmpwi  0,%0,0\\n\\t\"\n        \"bne-   2f\\n\\t\"\n        \"stwcx. %2,0,%1\\n\\t\"\n        \"bne-   1b\\n\\t\"\n        \"isync\\n\"\n        \"2:\\n\\t\"\n        : \"=&r\" (oldLock)\n        : \"r\" (&mLock), \"r\" (newLock)\n        : \"cr0\", \"memory\"\n      );\n  #endif\n      return (oldLock == 0);\n#else\n  #if defined(_TTHREAD_WIN32_)\n      return TryEnterCriticalSection(&mHandle) ? true : false;\n  #elif defined(_TTHREAD_POSIX_)\n      return (pthread_mutex_trylock(&mHandle) == 0) ? true : false;\n  #endif\n#endif\n    }\n\n    /// Unlock the mutex.\n    /// If any threads are waiting for the lock on this mutex, one of them will\n    /// be unblocked.\n    inline void unlock()\n    {\n#if defined(_FAST_MUTEX_ASM_)\n  #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))\n      asm volatile (\n        \"movl $0,%%eax\\n\\t\"\n        \"xchg %%eax,%0\\n\\t\"\n        : \"=m\" (mLock)\n        :\n        : \"%eax\", \"memory\"\n      );\n  #elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))\n      int *ptrLock = &mLock;\n      __asm {\n        mov eax,0\n        mov ecx,ptrLock\n        xchg eax,[ecx]\n      }\n  #elif defined(__GNUC__) && (defined(__ppc__))\n      asm volatile (\n        \"sync\\n\\t\"  // Replace with lwsync where possible?\n        : : : \"memory\"\n      );\n      mLock = 0;\n  #endif\n#else\n  #if defined(_TTHREAD_WIN32_)\n      LeaveCriticalSection(&mHandle);\n  #elif defined(_TTHREAD_POSIX_)\n      pthread_mutex_unlock(&mHandle);\n  #endif\n#endif\n    }\n\n  private:\n#if defined(_FAST_MUTEX_ASM_)\n    int mLock;\n#else\n  #if defined(_TTHREAD_WIN32_)\n    CRITICAL_SECTION mHandle;\n  #elif defined(_TTHREAD_POSIX_)\n    pthread_mutex_t mHandle;\n  #endif\n#endif\n};\n\n}\n\n#endif // _FAST_MUTEX_H_\n"
  },
  {
    "path": "external/TinyThread/source/tinythread.cpp",
    "content": "/*\nCopyright (c) 2010 Marcus Geelnard\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n    1. The origin of this software must not be misrepresented; you must not\n    claim that you wrote the original software. If you use this software\n    in a product, an acknowledgment in the product documentation would be\n    appreciated but is not required.\n\n    2. Altered source versions must be plainly marked as such, and must not be\n    misrepresented as being the original software.\n\n    3. This notice may not be removed or altered from any source\n    distribution.\n*/\n\n#include <exception>\n#include \"tinythread.h\"\n\n#if defined(_TTHREAD_POSIX_)\n  #include <unistd.h>\n  #include <map>\n#elif defined(_TTHREAD_WIN32_)\n  #include <process.h>\n#endif\n\n\nnamespace tthread {\n\n//------------------------------------------------------------------------------\n// condition_variable\n//------------------------------------------------------------------------------\n// NOTE 1: The Win32 implementation of the condition_variable class is based on\n// the corresponding implementation in GLFW, which in turn is based on a\n// description by Douglas C. Schmidt and Irfan Pyarali:\n// http://www.cs.wustl.edu/~schmidt/win32-cv-1.html\n//\n// NOTE 2: Windows Vista actually has native support for condition variables\n// (InitializeConditionVariable, WakeConditionVariable, etc), but we want to\n// be portable with pre-Vista Windows versions, so TinyThread++ does not use\n// Vista condition variables.\n//------------------------------------------------------------------------------\n\n#if defined(_TTHREAD_WIN32_)\n  #define _CONDITION_EVENT_ONE 0\n  #define _CONDITION_EVENT_ALL 1\n#endif\n\n#if defined(_TTHREAD_WIN32_)\ncondition_variable::condition_variable() : mWaitersCount(0)\n{\n  mEvents[_CONDITION_EVENT_ONE] = CreateEvent(NULL, FALSE, FALSE, NULL);\n  mEvents[_CONDITION_EVENT_ALL] = CreateEvent(NULL, TRUE, FALSE, NULL);\n  InitializeCriticalSection(&mWaitersCountLock);\n}\n#endif\n\n#if defined(_TTHREAD_WIN32_)\ncondition_variable::~condition_variable()\n{\n  CloseHandle(mEvents[_CONDITION_EVENT_ONE]);\n  CloseHandle(mEvents[_CONDITION_EVENT_ALL]);\n  DeleteCriticalSection(&mWaitersCountLock);\n}\n#endif\n\n#if defined(_TTHREAD_WIN32_)\nvoid condition_variable::_wait()\n{\n  // Wait for either event to become signaled due to notify_one() or\n  // notify_all() being called\n  int result = WaitForMultipleObjects(2, mEvents, FALSE, INFINITE);\n\n  // Check if we are the last waiter\n  EnterCriticalSection(&mWaitersCountLock);\n  -- mWaitersCount;\n  bool lastWaiter = (result == (WAIT_OBJECT_0 + _CONDITION_EVENT_ALL)) &&\n                    (mWaitersCount == 0);\n  LeaveCriticalSection(&mWaitersCountLock);\n\n  // If we are the last waiter to be notified to stop waiting, reset the event\n  if(lastWaiter)\n    ResetEvent(mEvents[_CONDITION_EVENT_ALL]);\n}\n#endif\n\n#if defined(_TTHREAD_WIN32_)\nvoid condition_variable::notify_one()\n{\n  // Are there any waiters?\n  EnterCriticalSection(&mWaitersCountLock);\n  bool haveWaiters = (mWaitersCount > 0);\n  LeaveCriticalSection(&mWaitersCountLock);\n\n  // If we have any waiting threads, send them a signal\n  if(haveWaiters)\n    SetEvent(mEvents[_CONDITION_EVENT_ONE]);\n}\n#endif\n\n#if defined(_TTHREAD_WIN32_)\nvoid condition_variable::notify_all()\n{\n  // Are there any waiters?\n  EnterCriticalSection(&mWaitersCountLock);\n  bool haveWaiters = (mWaitersCount > 0);\n  LeaveCriticalSection(&mWaitersCountLock);\n\n  // If we have any waiting threads, send them a signal\n  if(haveWaiters)\n    SetEvent(mEvents[_CONDITION_EVENT_ALL]);\n}\n#endif\n\n\n//------------------------------------------------------------------------------\n// POSIX pthread_t to unique thread::id mapping logic.\n// Note: Here we use a global thread safe std::map to convert instances of\n// pthread_t to small thread identifier numbers (unique within one process).\n// This method should be portable across different POSIX implementations.\n//------------------------------------------------------------------------------\n\n#if defined(_TTHREAD_POSIX_)\nstatic thread::id _pthread_t_to_ID(const pthread_t &aHandle)\n{\n  static mutex idMapLock;\n  static std::map<pthread_t, unsigned long int> idMap;\n  static unsigned long int idCount(1);\n\n  lock_guard<mutex> guard(idMapLock);\n  if(idMap.find(aHandle) == idMap.end())\n    idMap[aHandle] = idCount ++;\n  return thread::id(idMap[aHandle]);\n}\n#endif // _TTHREAD_POSIX_\n\n\n//------------------------------------------------------------------------------\n// thread\n//------------------------------------------------------------------------------\n\n/// Information to pass to the new thread (what to run).\nstruct _thread_start_info {\n  void (*mFunction)(void *); ///< Pointer to the function to be executed.\n  void * mArg;               ///< Function argument for the thread function.\n  thread * mThread;          ///< Pointer to the thread object.\n};\n\n// Thread wrapper function.\n#if defined(_TTHREAD_WIN32_)\nunsigned WINAPI thread::wrapper_function(void * aArg)\n#elif defined(_TTHREAD_POSIX_)\nvoid * thread::wrapper_function(void * aArg)\n#endif\n{\n  // Get thread startup information\n  _thread_start_info * ti = (_thread_start_info *) aArg;\n\n  try\n  {\n    // Call the actual client thread function\n    ti->mFunction(ti->mArg);\n  }\n  catch(...)\n  {\n    // Uncaught exceptions will terminate the application (default behavior\n    // according to the C++0x draft)\n    std::terminate();\n  }\n\n  // The thread is no longer executing\n  lock_guard<mutex> guard(ti->mThread->mDataMutex);\n  ti->mThread->mNotAThread = true;\n\n  // The thread is responsible for freeing the startup information\n  delete ti;\n\n  return 0;\n}\n\nthread::thread(void (*aFunction)(void *), void * aArg)\n{\n  // Serialize access to this thread structure\n  lock_guard<mutex> guard(mDataMutex);\n\n  // Fill out the thread startup information (passed to the thread wrapper,\n  // which will eventually free it)\n  _thread_start_info * ti = new _thread_start_info;\n  ti->mFunction = aFunction;\n  ti->mArg = aArg;\n  ti->mThread = this;\n\n  // The thread is now alive\n  mNotAThread = false;\n\n  // Create the thread\n#if defined(_TTHREAD_WIN32_)\n  mHandle = (HANDLE) _beginthreadex(0, 0, wrapper_function, (void *) ti, 0, &mWin32ThreadID);\n#elif defined(_TTHREAD_POSIX_)\n  if(pthread_create(&mHandle, NULL, wrapper_function, (void *) ti) != 0)\n    mHandle = 0;\n#endif\n\n  // Did we fail to create the thread?\n  if(!mHandle)\n  {\n    mNotAThread = true;\n    delete ti;\n  }\n}\n\nthread::~thread()\n{\n  if(joinable())\n    std::terminate();\n}\n\nvoid thread::join()\n{\n  if(joinable())\n  {\n#if defined(_TTHREAD_WIN32_)\n    WaitForSingleObject(mHandle, INFINITE);\n#elif defined(_TTHREAD_POSIX_)\n    pthread_join(mHandle, NULL);\n#endif\n  }\n}\n\nbool thread::joinable() const\n{\n  mDataMutex.lock();\n  bool result = !mNotAThread;\n  mDataMutex.unlock();\n  return result;\n}\n\nthread::id thread::get_id() const\n{\n  if(!joinable())\n    return id();\n#if defined(_TTHREAD_WIN32_)\n  return id((unsigned long int) mWin32ThreadID);\n#elif defined(_TTHREAD_POSIX_)\n  return _pthread_t_to_ID(mHandle);\n#endif\n}\n\nunsigned thread::hardware_concurrency()\n{\n#if defined(_TTHREAD_WIN32_)\n  SYSTEM_INFO si;\n  GetSystemInfo(&si);\n  return (int) si.dwNumberOfProcessors;\n#elif defined(_SC_NPROCESSORS_ONLN)\n  return (int) sysconf(_SC_NPROCESSORS_ONLN);\n#elif defined(_SC_NPROC_ONLN)\n  return (int) sysconf(_SC_NPROC_ONLN);\n#else\n  // The standard requires this function to return zero if the number of\n  // hardware cores could not be determined.\n  return 0;\n#endif\n}\n\n\n//------------------------------------------------------------------------------\n// this_thread\n//------------------------------------------------------------------------------\n\nthread::id this_thread::get_id()\n{\n#if defined(_TTHREAD_WIN32_)\n  return thread::id((unsigned long int) GetCurrentThreadId());\n#elif defined(_TTHREAD_POSIX_)\n  return _pthread_t_to_ID(pthread_self());\n#endif\n}\n\n}\n"
  },
  {
    "path": "external/TinyThread/source/tinythread.h",
    "content": "/*\nCopyright (c) 2010 Marcus Geelnard\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n    1. The origin of this software must not be misrepresented; you must not\n    claim that you wrote the original software. If you use this software\n    in a product, an acknowledgment in the product documentation would be\n    appreciated but is not required.\n\n    2. Altered source versions must be plainly marked as such, and must not be\n    misrepresented as being the original software.\n\n    3. This notice may not be removed or altered from any source\n    distribution.\n*/\n\n#ifndef _TINYTHREAD_H_\n#define _TINYTHREAD_H_\n\n/// @file\n/// @mainpage TinyThread++ API Reference\n///\n/// @section intro_sec Introduction\n/// TinyThread++ is a minimal, portable implementation of basic threading\n/// classes for C++.\n///\n/// They closely mimic the functionality and naming of the C++0x standard, and\n/// should be easily replaceable with the corresponding std:: variants.\n///\n/// @section port_sec Portability\n/// The Win32 variant uses the native Win32 API for implementing the thread\n/// classes, while for other systems, the POSIX threads API (pthread) is used.\n///\n/// @section class_sec Classes\n/// In order to mimic the threading API of the C++0x standard, subsets of\n/// several classes are provided. The fundamental classes are:\n/// @li tthread::thread\n/// @li tthread::mutex\n/// @li tthread::recursive_mutex\n/// @li tthread::condition_variable\n/// @li tthread::lock_guard\n/// @li tthread::fast_mutex\n///\n/// @section misc_sec Miscellaneous\n/// The following special keywords are available: #thread_local.\n///\n/// For more detailed information (including additional classes), browse the\n/// different sections of this documentation. A good place to start is:\n/// tinythread.h.\n\n// Which platform are we on?\n#if !defined(_TTHREAD_PLATFORM_DEFINED_)\n  #if defined(_WIN32) || defined(__WIN32__) || defined(__WINDOWS__)\n    #define _TTHREAD_WIN32_\n  #else\n    #define _TTHREAD_POSIX_\n  #endif\n  #define _TTHREAD_PLATFORM_DEFINED_\n#endif\n\n// Platform specific includes\n#if defined(_TTHREAD_WIN32_)\n  #include <windows.h>\n#else\n  #include <pthread.h>\n  #include <signal.h>\n  #include <sched.h>\n  #include <unistd.h>\n#endif\n\n// Generic includes\n#include <ostream>\n\n/// TinyThread++ version (major number).\n#define TINYTHREAD_VERSION_MAJOR 1\n/// TinyThread++ version (minor number).\n#define TINYTHREAD_VERSION_MINOR 0\n/// TinyThread++ version (full version).\n#define TINYTHREAD_VERSION (TINYTHREAD_VERSION_MAJOR * 100 + TINYTHREAD_VERSION_MINOR)\n\n// Do we have a fully featured C++0x compiler?\n#if (__cplusplus > 199711L) || (defined(__STDCXX_VERSION__) && (__STDCXX_VERSION__ >= 201001L))\n  #define _TTHREAD_CPP0X_\n#endif\n\n// ...at least partial C++0x?\n#if defined(_TTHREAD_CPP0X_) || defined(__GXX_EXPERIMENTAL_CXX0X__) || defined(__GXX_EXPERIMENTAL_CPP0X__)\n  #define _TTHREAD_CPP0X_PARTIAL_\n#endif\n\n// Macro for disabling assignments of objects.\n#ifdef _TTHREAD_CPP0X_PARTIAL_\n  #define _TTHREAD_DISABLE_ASSIGNMENT(name) \\\n      name(const name&) = delete; \\\n      name& operator=(const name&) = delete;\n#else\n  #define _TTHREAD_DISABLE_ASSIGNMENT(name) \\\n      name(const name&); \\\n      name& operator=(const name&);\n#endif\n\n/// @def thread_local\n/// Thread local storage keyword.\n/// A variable that is declared with the \\c thread_local keyword makes the\n/// value of the variable local to each thread (known as thread-local storage,\n/// or TLS). Example usage:\n/// @code\n/// // This variable is local to each thread.\n/// thread_local int variable;\n/// @endcode\n/// @note The \\c thread_local keyword is a macro that maps to the corresponding\n/// compiler directive (e.g. \\c __declspec(thread)). While the C++0x standard\n/// allows for non-trivial types (e.g. classes with constructors and\n/// destructors) to be declared with the \\c thread_local keyword, most pre-C++0x\n/// compilers only allow for trivial types (e.g. \\c int). So, to guarantee\n/// portable code, only use trivial types for thread local storage.\n/// @note This directive is currently not supported on Mac OS X (it will give\n/// a compiler error), since compile-time TLS is not supported in the Mac OS X\n/// executable format. Also, some older versions of MinGW (before GCC 4.x) do\n/// not support this directive.\n/// @hideinitializer\n\n#if !defined(_TTHREAD_CPP0X_) && !defined(thread_local)\n #if defined(__GNUC__) || defined(__INTEL_COMPILER) || defined(__SUNPRO_CC) || defined(__IBMCPP__)\n  #define thread_local __thread\n #else\n  #define thread_local __declspec(thread)\n #endif\n#endif\n\n\n/// Main name space for TinyThread++.\n/// This namespace is more or less equivalent to the \\c std namespace for the\n/// C++0x thread classes. For instance, the tthread::mutex class corresponds to\n/// the std::mutex class.\nnamespace tthread {\n\n/// Mutex class.\n/// This is a mutual exclusion object for synchronizing access to shared\n/// memory areas for several threads. The mutex is non-recursive (i.e. a\n/// program may deadlock if the thread that owns a mutex object calls lock()\n/// on that object).\n/// @see recursive_mutex\nclass mutex {\n  public:\n    /// Constructor.\n    mutex()\n#if defined(_TTHREAD_WIN32_)\n      : mAlreadyLocked(false)\n#endif\n    {\n#if defined(_TTHREAD_WIN32_)\n      InitializeCriticalSection(&mHandle);\n#else\n      pthread_mutex_init(&mHandle, NULL);\n#endif\n    }\n\n    /// Destructor.\n    ~mutex()\n    {\n#if defined(_TTHREAD_WIN32_)\n      DeleteCriticalSection(&mHandle);\n#else\n      pthread_mutex_destroy(&mHandle);\n#endif\n    }\n\n    /// Lock the mutex.\n    /// The method will block the calling thread until a lock on the mutex can\n    /// be obtained. The mutex remains locked until \\c unlock() is called.\n    /// @see lock_guard\n    inline void lock()\n    {\n#if defined(_TTHREAD_WIN32_)\n      EnterCriticalSection(&mHandle);\n      while(mAlreadyLocked) Sleep(1000); // Simulate deadlock...\n      mAlreadyLocked = true;\n#else\n      pthread_mutex_lock(&mHandle);\n#endif\n    }\n\n    /// Try to lock the mutex.\n    /// The method will try to lock the mutex. If it fails, the function will\n    /// return immediately (non-blocking).\n    /// @return \\c true if the lock was acquired, or \\c false if the lock could\n    /// not be acquired.\n    inline bool try_lock()\n    {\n#if defined(_TTHREAD_WIN32_)\n      bool ret = (TryEnterCriticalSection(&mHandle) ? true : false);\n      if(ret && mAlreadyLocked)\n      {\n        LeaveCriticalSection(&mHandle);\n        ret = false;\n      }\n      return ret;\n#else\n      return (pthread_mutex_trylock(&mHandle) == 0) ? true : false;\n#endif\n    }\n\n    /// Unlock the mutex.\n    /// If any threads are waiting for the lock on this mutex, one of them will\n    /// be unblocked.\n    inline void unlock()\n    {\n#if defined(_TTHREAD_WIN32_)\n      mAlreadyLocked = false;\n      LeaveCriticalSection(&mHandle);\n#else\n      pthread_mutex_unlock(&mHandle);\n#endif\n    }\n\n    _TTHREAD_DISABLE_ASSIGNMENT(mutex)\n\n  private:\n#if defined(_TTHREAD_WIN32_)\n    CRITICAL_SECTION mHandle;\n    bool mAlreadyLocked;\n#else\n    pthread_mutex_t mHandle;\n#endif\n\n    friend class condition_variable;\n};\n\n/// Recursive mutex class.\n/// This is a mutual exclusion object for synchronizing access to shared\n/// memory areas for several threads. The mutex is recursive (i.e. a thread\n/// may lock the mutex several times, as long as it unlocks the mutex the same\n/// number of times).\n/// @see mutex\nclass recursive_mutex {\n  public:\n    /// Constructor.\n    recursive_mutex()\n    {\n#if defined(_TTHREAD_WIN32_)\n      InitializeCriticalSection(&mHandle);\n#else\n      pthread_mutexattr_t attr;\n      pthread_mutexattr_init(&attr);\n      pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);\n      pthread_mutex_init(&mHandle, &attr);\n#endif\n    }\n\n    /// Destructor.\n    ~recursive_mutex()\n    {\n#if defined(_TTHREAD_WIN32_)\n      DeleteCriticalSection(&mHandle);\n#else\n      pthread_mutex_destroy(&mHandle);\n#endif\n    }\n\n    /// Lock the mutex.\n    /// The method will block the calling thread until a lock on the mutex can\n    /// be obtained. The mutex remains locked until \\c unlock() is called.\n    /// @see lock_guard\n    inline void lock()\n    {\n#if defined(_TTHREAD_WIN32_)\n      EnterCriticalSection(&mHandle);\n#else\n      pthread_mutex_lock(&mHandle);\n#endif\n    }\n\n    /// Try to lock the mutex.\n    /// The method will try to lock the mutex. If it fails, the function will\n    /// return immediately (non-blocking).\n    /// @return \\c true if the lock was acquired, or \\c false if the lock could\n    /// not be acquired.\n    inline bool try_lock()\n    {\n#if defined(_TTHREAD_WIN32_)\n      return TryEnterCriticalSection(&mHandle) ? true : false;\n#else\n      return (pthread_mutex_trylock(&mHandle) == 0) ? true : false;\n#endif\n    }\n\n    /// Unlock the mutex.\n    /// If any threads are waiting for the lock on this mutex, one of them will\n    /// be unblocked.\n    inline void unlock()\n    {\n#if defined(_TTHREAD_WIN32_)\n      LeaveCriticalSection(&mHandle);\n#else\n      pthread_mutex_unlock(&mHandle);\n#endif\n    }\n\n    _TTHREAD_DISABLE_ASSIGNMENT(recursive_mutex)\n\n  private:\n#if defined(_TTHREAD_WIN32_)\n    CRITICAL_SECTION mHandle;\n#else\n    pthread_mutex_t mHandle;\n#endif\n\n    friend class condition_variable;\n};\n\n/// Lock guard class.\n/// The constructor locks the mutex, and the destructor unlocks the mutex, so\n/// the mutex will automatically be unlocked when the lock guard goes out of\n/// scope. Example usage:\n/// @code\n/// mutex m;\n/// int counter;\n///\n/// void increment()\n/// {\n///   lock_guard<mutex> guard(m);\n///   ++ counter;\n/// }\n/// @endcode\n\ntemplate <class T>\nclass lock_guard {\n  public:\n    typedef T mutex_type;\n\n    lock_guard() : mMutex(0) {}\n\n    /// The constructor locks the mutex.\n    explicit lock_guard(mutex_type &aMutex)\n    {\n      mMutex = &aMutex;\n      mMutex->lock();\n    }\n\n    /// The destructor unlocks the mutex.\n    ~lock_guard()\n    {\n      if(mMutex)\n        mMutex->unlock();\n    }\n\n  private:\n    mutex_type * mMutex;\n};\n\n/// Condition variable class.\n/// This is a signalling object for synchronizing the execution flow for\n/// several threads. Example usage:\n/// @code\n/// // Shared data and associated mutex and condition variable objects\n/// int count;\n/// mutex m;\n/// condition_variable cond;\n///\n/// // Wait for the counter to reach a certain number\n/// void wait_counter(int targetCount)\n/// {\n///   lock_guard<mutex> guard(m);\n///   while(count < targetCount)\n///     cond.wait(m);\n/// }\n///\n/// // Increment the counter, and notify waiting threads\n/// void increment()\n/// {\n///   lock_guard<mutex> guard(m);\n///   ++ count;\n///   cond.notify_all();\n/// }\n/// @endcode\nclass condition_variable {\n  public:\n    /// Constructor.\n#if defined(_TTHREAD_WIN32_)\n    condition_variable();\n#else\n    condition_variable()\n    {\n      pthread_cond_init(&mHandle, NULL);\n    }\n#endif\n\n    /// Destructor.\n#if defined(_TTHREAD_WIN32_)\n    ~condition_variable();\n#else\n    ~condition_variable()\n    {\n      pthread_cond_destroy(&mHandle);\n    }\n#endif\n\n    /// Wait for the condition.\n    /// The function will block the calling thread until the condition variable\n    /// is woken by \\c notify_one(), \\c notify_all() or a spurious wake up.\n    /// @param[in] aMutex A mutex that will be unlocked when the wait operation\n    ///   starts, an locked again as soon as the wait operation is finished.\n    template <class _mutexT>\n    inline void wait(_mutexT &aMutex)\n    {\n#if defined(_TTHREAD_WIN32_)\n      // Increment number of waiters\n      EnterCriticalSection(&mWaitersCountLock);\n      ++ mWaitersCount;\n      LeaveCriticalSection(&mWaitersCountLock);\n\n      // Release the mutex while waiting for the condition (will decrease\n      // the number of waiters when done)...\n      aMutex.unlock();\n      _wait();\n      aMutex.lock();\n#else\n      pthread_cond_wait(&mHandle, &aMutex.mHandle);\n#endif\n    }\n\n    /// Notify one thread that is waiting for the condition.\n    /// If at least one thread is blocked waiting for this condition variable,\n    /// one will be woken up.\n    /// @note Only threads that started waiting prior to this call will be\n    /// woken up.\n#if defined(_TTHREAD_WIN32_)\n    void notify_one();\n#else\n    inline void notify_one()\n    {\n      pthread_cond_signal(&mHandle);\n    }\n#endif\n\n    /// Notify all threads that are waiting for the condition.\n    /// All threads that are blocked waiting for this condition variable will\n    /// be woken up.\n    /// @note Only threads that started waiting prior to this call will be\n    /// woken up.\n#if defined(_TTHREAD_WIN32_)\n    void notify_all();\n#else\n    inline void notify_all()\n    {\n      pthread_cond_broadcast(&mHandle);\n    }\n#endif\n\n    _TTHREAD_DISABLE_ASSIGNMENT(condition_variable)\n\n  private:\n#if defined(_TTHREAD_WIN32_)\n    void _wait();\n    HANDLE mEvents[2];                  ///< Signal and broadcast event HANDLEs.\n    unsigned int mWaitersCount;         ///< Count of the number of waiters.\n    CRITICAL_SECTION mWaitersCountLock; ///< Serialize access to mWaitersCount.\n#else\n    pthread_cond_t mHandle;\n#endif\n};\n\n\n/// Thread class.\nclass thread {\n  public:\n#if defined(_TTHREAD_WIN32_)\n    typedef HANDLE native_handle_type;\n#else\n    typedef pthread_t native_handle_type;\n#endif\n\n    class id;\n\n    /// Default constructor.\n    /// Construct a \\c thread object without an associated thread of execution\n    /// (i.e. non-joinable).\n    thread() : mHandle(0), mNotAThread(true)\n#if defined(_TTHREAD_WIN32_)\n    , mWin32ThreadID(0)\n#endif\n    {}\n\n    /// Thread starting constructor.\n    /// Construct a \\c thread object with a new thread of execution.\n    /// @param[in] aFunction A function pointer to a function of type:\n    ///          <tt>void fun(void * arg)</tt>\n    /// @param[in] aArg Argument to the thread function.\n    /// @note This constructor is not fully compatible with the standard C++\n    /// thread class. It is more similar to the pthread_create() (POSIX) and\n    /// CreateThread() (Windows) functions.\n    thread(void (*aFunction)(void *), void * aArg);\n\n    /// Destructor.\n    /// @note If the thread is joinable upon destruction, \\c std::terminate()\n    /// will be called, which terminates the process. It is always wise to do\n    /// \\c join() before deleting a thread object.\n    ~thread();\n\n    /// Wait for the thread to finish (join execution flows).\n    void join();\n\n    /// Check if the thread is joinable.\n    /// A thread object is joinable if it has an associated thread of execution.\n    bool joinable() const;\n\n    /// Return the thread ID of a thread object.\n    id get_id() const;\n\n    /// Get the native handle for this thread.\n    /// @note Under Windows, this is a \\c HANDLE, and under POSIX systems, this\n    /// is a \\c pthread_t.\n    inline native_handle_type native_handle()\n    {\n      return mHandle;\n    }\n\n    /// Determine the number of threads which can possibly execute concurrently.\n    /// This function is useful for determining the optimal number of threads to\n    /// use for a task.\n    /// @return The number of hardware thread contexts in the system.\n    /// @note If this value is not defined, the function returns zero (0).\n    static unsigned hardware_concurrency();\n\n    _TTHREAD_DISABLE_ASSIGNMENT(thread)\n\n  private:\n    native_handle_type mHandle;   ///< Thread handle.\n    mutable mutex mDataMutex;     ///< Serializer for access to the thread private data.\n    bool mNotAThread;             ///< True if this object is not a thread of execution.\n#if defined(_TTHREAD_WIN32_)\n    unsigned int mWin32ThreadID;  ///< Unique thread ID (filled out by _beginthreadex).\n#endif\n\n    // This is the internal thread wrapper function.\n#if defined(_TTHREAD_WIN32_)\n    static unsigned WINAPI wrapper_function(void * aArg);\n#else\n    static void * wrapper_function(void * aArg);\n#endif\n};\n\n/// Thread ID.\n/// The thread ID is a unique identifier for each thread.\n/// @see thread::get_id()\nclass thread::id {\n  public:\n    /// Default constructor.\n    /// The default constructed ID is that of thread without a thread of\n    /// execution.\n    id() : mId(0) {};\n\n    id(unsigned long int aId) : mId(aId) {};\n\n    id(const id& aId) : mId(aId.mId) {};\n\n    inline id & operator=(const id &aId)\n    {\n      mId = aId.mId;\n      return *this;\n    }\n\n    inline friend bool operator==(const id &aId1, const id &aId2)\n    {\n      return (aId1.mId == aId2.mId);\n    }\n\n    inline friend bool operator!=(const id &aId1, const id &aId2)\n    {\n      return (aId1.mId != aId2.mId);\n    }\n\n    inline friend bool operator<=(const id &aId1, const id &aId2)\n    {\n      return (aId1.mId <= aId2.mId);\n    }\n\n    inline friend bool operator<(const id &aId1, const id &aId2)\n    {\n      return (aId1.mId < aId2.mId);\n    }\n\n    inline friend bool operator>=(const id &aId1, const id &aId2)\n    {\n      return (aId1.mId >= aId2.mId);\n    }\n\n    inline friend bool operator>(const id &aId1, const id &aId2)\n    {\n      return (aId1.mId > aId2.mId);\n    }\n\n    inline friend std::ostream& operator <<(std::ostream &os, const id &obj)\n    {\n      os << obj.mId;\n      return os;\n    }\n\n  private:\n    unsigned long int mId;\n};\n\n\n// Related to <ratio> - minimal to be able to support chrono.\ntypedef long long __intmax_t;\n\n/// Minimal implementation of the \\c ratio class. This class provides enough\n/// functionality to implement some basic \\c chrono classes.\ntemplate <__intmax_t N, __intmax_t D = 1> class ratio {\n  public:\n    static double _as_double() { return double(N) / double(D); }\n};\n\n/// Minimal implementation of the \\c chrono namespace.\n/// The \\c chrono namespace provides types for specifying time intervals.\nnamespace chrono {\n  /// Duration template class. This class provides enough functionality to\n  /// implement \\c this_thread::sleep_for().\n  template <class _Rep, class _Period = ratio<1> > class duration {\n    private:\n      _Rep rep_;\n    public:\n      typedef _Rep rep;\n      typedef _Period period;\n\n      /// Construct a duration object with the given duration.\n      template <class _Rep2>\n        explicit duration(const _Rep2& r) : rep_(r) {};\n\n      /// Return the value of the duration object.\n      rep count() const\n      {\n        return rep_;\n      }\n  };\n\n  // Standard duration types.\n  typedef duration<__intmax_t, ratio<1, 1000000000> > nanoseconds; ///< Duration with the unit nanoseconds.\n  typedef duration<__intmax_t, ratio<1, 1000000> > microseconds;   ///< Duration with the unit microseconds.\n  typedef duration<__intmax_t, ratio<1, 1000> > milliseconds;      ///< Duration with the unit milliseconds.\n  typedef duration<__intmax_t> seconds;                            ///< Duration with the unit seconds.\n  typedef duration<__intmax_t, ratio<60> > minutes;                ///< Duration with the unit minutes.\n  typedef duration<__intmax_t, ratio<3600> > hours;                ///< Duration with the unit hours.\n}\n\n/// The namespace \\c this_thread provides methods for dealing with the\n/// calling thread.\nnamespace this_thread {\n  /// Return the thread ID of the calling thread.\n  thread::id get_id();\n\n  /// Yield execution to another thread.\n  /// Offers the operating system the opportunity to schedule another thread\n  /// that is ready to run on the current processor.\n  inline void yield()\n  {\n#if defined(_TTHREAD_WIN32_)\n    Sleep(0);\n#else\n    sched_yield();\n#endif\n  }\n\n  /// Blocks the calling thread for a period of time.\n  /// @param[in] aTime Minimum time to put the thread to sleep.\n  /// Example usage:\n  /// @code\n  /// // Sleep for 100 milliseconds\n  /// this_thread::sleep_for(chrono::milliseconds(100));\n  /// @endcode\n  /// @note Supported duration types are: nanoseconds, microseconds,\n  /// milliseconds, seconds, minutes and hours.\n  template <class _Rep, class _Period> void sleep_for(const chrono::duration<_Rep, _Period>& aTime)\n  {\n#if defined(_TTHREAD_WIN32_)\n    Sleep(int(double(aTime.count()) * (1000.0 * _Period::_as_double()) + 0.5));\n#else\n    usleep(int(double(aTime.count()) * (1000000.0 * _Period::_as_double()) + 0.5));\n#endif\n  }\n}\n\n}\n\n// Define/macro cleanup\n#undef _TTHREAD_DISABLE_ASSIGNMENT\n\n#endif // _TINYTHREAD_H_\n"
  },
  {
    "path": "external/TinyThread/test/Makefile",
    "content": "#-----------------------------------------------------------------------------------------\n# Makefile for GCC & gmake (Linux, Windows/MinGW, OpenSolaris, etc).\n#-----------------------------------------------------------------------------------------\n# Copyright (c) 2010 Marcus Geelnard\n#\n# This software is provided 'as-is', without any express or implied\n# warranty. In no event will the authors be held liable for any damages\n# arising from the use of this software.\n#\n# Permission is granted to anyone to use this software for any purpose,\n# including commercial applications, and to alter it and redistribute it\n# freely, subject to the following restrictions:\n#\n#     1. The origin of this software must not be misrepresented; you must not\n#     claim that you wrote the original software. If you use this software\n#     in a product, an acknowledgment in the product documentation would be\n#     appreciated but is not required.\n#\n#     2. Altered source versions must be plainly marked as such, and must not be\n#     misrepresented as being the original software.\n#\n#     3. This notice may not be removed or altered from any source\n#     distribution.\n#-----------------------------------------------------------------------------------------\n\n# A simple hack to check if we are on Windows or not (i.e. are we using mingw32-make?)\nifeq ($(findstring mingw32, $(MAKE)), mingw32)\nWINDOWS=1\nendif\n\n# Compiler settings\nCPP = g++\nCPPFLAGS = -W -O3 -c -I../source\nLFLAGS =\nLIBS =\n\n# Non-windows systems need pthread\nifndef WINDOWS\nLIBS += -lpthread\nendif\n\n# MinGW32 GCC 4.5 link problem fix\nifdef WINDOWS\nifeq ($(findstring 4.5.,$(shell g++ -dumpversion)), 4.5.)\nLFLAGS += -static-libstdc++ -static-libgcc\nendif\nendif\n\n# Misc. system commands\nifdef WINDOWS\nRM = del /Q\nelse\nRM = rm -f\nendif\n\n# File endings\nifdef WINDOWS\nEXE = .exe\nelse\nEXE =\nendif\n\n# Object files for the hello program\nHELLO_OBJS = hello.o\n\n# Object files for the test program\nTEST_OBJS = test.o\n\n# Object files for the hello program\nFRACAL_OBJS = fractal.o\n\n# TinyThread++ object files\nTINYTHREAD_OBJS = tinythread.o\n\nall: hello$(EXE) test$(EXE) fractal$(EXE)\n\nclean:\n\t$(RM) hello$(EXE) test$(EXE) fractal$(EXE) $(HELLO_OBJS) $(TEST_OBJS) $(FRACAL_OBJS) $(TINYTHREAD_OBJS)\n\n\ntest$(EXE): $(TEST_OBJS) $(TINYTHREAD_OBJS)\n\t$(CPP) $(LFLAGS) -o $@ $(TEST_OBJS) $(TINYTHREAD_OBJS) $(LIBS)\n\nhello$(EXE): $(HELLO_OBJS) $(TINYTHREAD_OBJS)\n\t$(CPP) $(LFLAGS) -o $@ $(HELLO_OBJS) $(TINYTHREAD_OBJS) $(LIBS)\n\nfractal$(EXE): $(FRACAL_OBJS) $(TINYTHREAD_OBJS)\n\t$(CPP) $(LFLAGS) -o $@ $(FRACAL_OBJS) $(TINYTHREAD_OBJS) $(LIBS)\n\n%.o: %.cpp\n\t$(CPP) $(CPPFLAGS) $<\n\n%.o: ../source/%.cpp\n\t$(CPP) $(CPPFLAGS) $<\n\n# Dependencies\nhello.o: hello.cpp ../source/tinythread.h\ntest.o: test.cpp ../source/tinythread.h ../source/fast_mutex.h\nfractal.o: fractal.cpp ../source/tinythread.h\ntinythread.o: ../source/tinythread.cpp ../source/tinythread.h\n"
  },
  {
    "path": "external/TinyThread/test/Makefile.msvc",
    "content": "#-----------------------------------------------------------------------------------------\n# Makefile for Microsoft Visual Studio C++\n# Usage: nmake /f Makefile.msvc\n#-----------------------------------------------------------------------------------------\n# Copyright (c) 2010 Marcus Geelnard\n#\n# This software is provided 'as-is', without any express or implied\n# warranty. In no event will the authors be held liable for any damages\n# arising from the use of this software.\n#\n# Permission is granted to anyone to use this software for any purpose,\n# including commercial applications, and to alter it and redistribute it\n# freely, subject to the following restrictions:\n#\n#     1. The origin of this software must not be misrepresented; you must not\n#     claim that you wrote the original software. If you use this software\n#     in a product, an acknowledgment in the product documentation would be\n#     appreciated but is not required.\n#\n#     2. Altered source versions must be plainly marked as such, and must not be\n#     misrepresented as being the original software.\n#\n#     3. This notice may not be removed or altered from any source\n#     distribution.\n#-----------------------------------------------------------------------------------------\n\n# Compiler settings\nCPP = cl\nCPPFLAGS = /nologo /W2 /O2 /c /I../source /EHsc\nLFLAGS = /nologo /EHsc\nLIBS =\n\n# Misc. system commands\nRM = del /Q\n\n# File endings\nEXE = .exe\n\n# Object files for the hello program\nHELLO_OBJS = hello.obj\n\n# Object files for the test program\nTEST_OBJS = test.obj\n\n# Object files for the hello program\nFRACAL_OBJS = fractal.obj\n\n# TinyThread++ object files\nTINYTHREAD_OBJS = tinythread.obj\n\nall: hello$(EXE) test$(EXE) fractal$(EXE)\n\nclean:\n\t$(RM) hello$(EXE) test$(EXE) fractal$(EXE) $(HELLO_OBJS) $(TEST_OBJS) $(FRACAL_OBJS) $(TINYTHREAD_OBJS)\n\n\ntest$(EXE): $(TEST_OBJS) $(TINYTHREAD_OBJS)\n\t$(CPP) $(LFLAGS) /Fe$@ $(TEST_OBJS) $(TINYTHREAD_OBJS) $(LIBS)\n\nhello$(EXE): $(HELLO_OBJS) $(TINYTHREAD_OBJS)\n\t$(CPP) $(LFLAGS) /Fe$@ $(HELLO_OBJS) $(TINYTHREAD_OBJS) $(LIBS)\n\nfractal$(EXE): $(FRACAL_OBJS) $(TINYTHREAD_OBJS)\n\t$(CPP) $(LFLAGS) /Fe$@ $(FRACAL_OBJS) $(TINYTHREAD_OBJS) $(LIBS)\n\n# Dependencies\nhello.obj: hello.cpp ../source/tinythread.h\n\t$(CPP) $(CPPFLAGS) hello.cpp\n\ntest.obj: test.cpp ../source/tinythread.h ../source/fast_mutex.h\n\t$(CPP) $(CPPFLAGS) test.cpp\n\nfractal.obj: fractal.cpp ../source/tinythread.h\n\t$(CPP) $(CPPFLAGS) fractal.cpp\n\ntinythread.obj: ../source/tinythread.cpp ../source/tinythread.h\n\t$(CPP) $(CPPFLAGS) ../source/tinythread.cpp\n"
  },
  {
    "path": "external/TinyThread/test/fractal.cpp",
    "content": "/*\r\nCopyright (c) 2010 Marcus Geelnard\r\n\r\nThis software is provided 'as-is', without any express or implied\r\nwarranty. In no event will the authors be held liable for any damages\r\narising from the use of this software.\r\n\r\nPermission is granted to anyone to use this software for any purpose,\r\nincluding commercial applications, and to alter it and redistribute it\r\nfreely, subject to the following restrictions:\r\n\r\n    1. The origin of this software must not be misrepresented; you must not\r\n    claim that you wrote the original software. If you use this software\r\n    in a product, an acknowledgment in the product documentation would be\r\n    appreciated but is not required.\r\n\r\n    2. Altered source versions must be plainly marked as such, and must not be\r\n    misrepresented as being the original software.\r\n\r\n    3. This notice may not be removed or altered from any source\r\n    distribution.\r\n*/\r\n\r\n#include <stdexcept>\r\n#include <iostream>\r\n#include <fstream>\r\n#include <string>\r\n#include <list>\r\n#include <cmath>\r\n#include <tinythread.h>\r\n\r\nusing namespace std;\r\nusing namespace tthread;\r\n\n\n// Mandelbrot fractal settings\n#define MAND_MID_RE -0.69795\r\n#define MAND_MID_IM -0.34865\r\n#define MAND_SIZE 0.003\n#define MAND_MAX_ITER 4000\n#define MAND_RESOLUTION 1024\n\n\r\n/// BGR pixel class.\r\nclass Pixel {\r\n  public:\r\n    Pixel() : r(0), g(0), b(0) {}\r\n\r\n    Pixel(unsigned char red, unsigned char green, unsigned char blue)\r\n    {\r\n      r = red;\r\n      g = green;\r\n      b = blue;\r\n    }\r\n\r\n    unsigned char b, g, r;\r\n};\r\n\r\n/// Simple 2D BGR image class.\r\nclass Image {\r\n  public:\r\n    /// Create a new image with the dimensions aWidth x aHeight.\r\n    Image(int aWidth, int aHeight)\r\n    {\r\n      mData = new Pixel[aWidth * aHeight];\r\n      mWidth = aWidth;\r\n      mHeight = aHeight;\r\n    }\r\n\r\n    ~Image()\r\n    {\r\n      delete mData;\r\n    }\r\n\r\n    /// Write the image to a TGA file.\r\n    void WriteToTGAFile(const char * aFileName)\r\n    {\r\n      // Prepare TGA file header\r\n      unsigned char header[18] = {0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0};\r\n      header[12] = mWidth & 255;         // Image width (16 bits)\r\n      header[13] = (mWidth >> 8) & 255;  // -\"-\r\n      header[14] = mHeight & 255;        // Image width (16 bits)\r\n      header[15] = (mHeight >> 8) & 255; // -\"-\r\n\r\n      // Write output file\r\n      ofstream f(aFileName, ios_base::out | ios_base::binary);\r\n      f.write((const char *) header, 18);\r\n      f.write((const char *) mData, (mWidth * mHeight) * 3);\r\n    }\r\n\r\n    Pixel& operator[](const int idx)\r\n    {\r\n      return mData[idx];\r\n    }\r\n\r\n    inline int Width() const\r\n    {\r\n      return mWidth;\r\n    }\r\n\r\n    inline int Height() const\r\n    {\r\n      return mHeight;\r\n    }\r\n\r\n  private:\r\n    int mWidth;    ///< Image width.\r\n    int mHeight;   ///< Image height.\r\n    Pixel * mData; ///< Data pointer.\r\n};\r\n\n/// The RowDispatcher class manages the \"job pool\" for the fractal\n/// calculation threads.\nclass RowDispatcher {\n  public:\n    RowDispatcher(Image * aImage) : mNextRow(0)\n    {\n      mImage = aImage;\n    }\n\n    Image * GetImage()\n    {\n      return mImage;\n    }\n\n    int NextRow()\n    {\n      lock_guard<mutex> guard(mMutex);\n      if(mNextRow >= mImage->Height())\n        return -1;\n      int result = mNextRow;\n      ++ mNextRow;\n      return result;\n    }\n\n  private:\n    mutex mMutex;\n    int mNextRow;\n    Image * mImage;\n};\n\n// Core iteration function\r\nPixel Iterate(const double &cre, const double &cim, int aIterMax)\r\n{\r\n  double zre = 0.0;\r\n  double zim = 0.0;\r\n  int n = 0;\r\n  double absZSqr = 0.0;\r\n  while((absZSqr < 4.0) && (n < aIterMax))\r\n  {\r\n    double tmp = zre * zre - zim * zim + cre;\r\n    zim = 2.0 * zre * zim + cim;\r\n    zre = tmp;\r\n    absZSqr = zre * zre + zim * zim;\r\n    ++ n;\r\n  }\r\n  if(n >= aIterMax)\r\n    return Pixel(0,0,0);\r\n  else\r\n  {\r\n    double nSmooth = n + 1 - log(log(sqrt(absZSqr))) / log(2.0);\r\n    return Pixel(\r\n             (unsigned char)(128.0 - 127.0 * cos(0.02 * nSmooth + 0.3)),\r\n             (unsigned char)(128.0 - 127.0 * cos(0.016 * nSmooth + 1.2)),\r\n             (unsigned char)(128.0 - 127.0 * cos(0.013 * nSmooth + 2.6))\r\n           );\r\n  }\r\n}\r\n\n// Calculation thread\nvoid CalcThread(void * arg)\n{\n  RowDispatcher * dispatcher = (RowDispatcher *) arg;\n  Image * img = dispatcher->GetImage();\n\n  // Set min/max interval for the fractal set\r\n  double xMin = MAND_MID_RE - MAND_SIZE * 0.5;\r\n  double yMin = MAND_MID_IM - MAND_SIZE * 0.5;\r\n  double xMax = MAND_MID_RE + MAND_SIZE * 0.5;\r\n  double yMax = MAND_MID_IM + MAND_SIZE * 0.5;\r\n\r\n  // Set step size (distance between two adjacent pixels)\r\n  double xStep = (xMax - xMin) / img->Width();\r\n  double yStep = (yMax - yMin) / img->Height();\r\n\r\n  // Until no more rows to process...\n  while(true)\n  {\n    // Get the next row to calculate\n    int y = dispatcher->NextRow();\n\n    // Done?\n    if(y < 0)\n      break;\n\n    // Generate one row of the image\n    Pixel * line = &(*img)[y * img->Width()];\r\n    double cim = y * yStep + yMin;\r\n    double cre = xMin;\r\n    for(int x = 0; x < img->Width(); ++ x)\r\n    {\r\n      *line ++ = Iterate(cre, cim, MAND_MAX_ITER);\r\n      cre += xStep;\r\n    }\r\n  }\n}\n\r\nint main(int argc, char **argv)\r\n{\n  // Show some information about this program...\n  cout << \"This is a small multi threaded Mandelbrot fractal generator.\" << endl;\n  cout << endl;\n  cout << \"The program will generate a \" << MAND_RESOLUTION << \"x\" << MAND_RESOLUTION << \" image, using one calculation thread per\" << endl;\n  cout << \"processor core. The result is written to a TGA format image, \\\"fractal.tga\\\".\" << endl;\n  cout << endl;\n  cout << \"Type \\\"\" << argv[0] << \" -st\\\" to force single threaded operation.\" << endl;\n  cout << endl;\n\n  // Check arguments\n  bool singleThreaded = false;\n  if((argc >= 2) && (string(argv[1]) == string(\"-st\")))\n    singleThreaded = true;\n\n  // Init image and row dispatcher\r\n  Image img(MAND_RESOLUTION, MAND_RESOLUTION);\n  RowDispatcher dispatcher(&img);\n\n  // Determine the number of calculation threads to use\n  int numThreads;\n  if(!singleThreaded)\n  {\r\n    numThreads = thread::hardware_concurrency();\r\n    if(numThreads < 1)\r\n      numThreads = 1;\r\n  }\r\n  else\r\n    numThreads = 1;\r\n\n  // Start calculation threads (we run one thread on each processor core)\n  cout << \"Running \" << numThreads << \" calculation thread(s)...\" << flush;\n  list<thread *> threadList;\n  for(int i = 0; i < numThreads; ++ i)\n  {\n    thread * t = new thread(CalcThread, (void *) &dispatcher);\n    threadList.push_back(t);\n  }\n\n  // Wait for the threads to complete...\n  for(list<thread *>::iterator i = threadList.begin(); i != threadList.end(); ++ i)\n  {\n    thread * t = *i;\n    t->join();\n    delete t;\n  }\n  cout << \"done!\" << endl;\n\n  // Write the final image to a file\r\n  cout << \"Writing final image...\" << flush;\n  img.WriteToTGAFile(\"fractal.tga\");\r\n  cout << \"done!\" << endl;\n}\r\n"
  },
  {
    "path": "external/TinyThread/test/hello.cpp",
    "content": "/*\nCopyright (c) 2010 Marcus Geelnard\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n    1. The origin of this software must not be misrepresented; you must not\n    claim that you wrote the original software. If you use this software\n    in a product, an acknowledgment in the product documentation would be\n    appreciated but is not required.\n\n    2. Altered source versions must be plainly marked as such, and must not be\n    misrepresented as being the original software.\n\n    3. This notice may not be removed or altered from any source\n    distribution.\n*/\n\n#include <iostream>\n#include <tinythread.h>\n\nusing namespace std;\nusing namespace tthread;\n\n\n// This is the child thread function\nvoid HelloThread(void * aArg)\n{\n  cout << \"Hello world!\" << endl;\n}\n\n// This is the main program (i.e. the main thread)\nint main()\n{\n  // Start the child thread\n  thread t(HelloThread, 0);\n\n  // Wait for the thread to finish\n  t.join();\n}\n"
  },
  {
    "path": "external/TinyThread/test/test.cpp",
    "content": "/*\r\nCopyright (c) 2010 Marcus Geelnard\r\n\r\nThis software is provided 'as-is', without any express or implied\r\nwarranty. In no event will the authors be held liable for any damages\r\narising from the use of this software.\r\n\r\nPermission is granted to anyone to use this software for any purpose,\r\nincluding commercial applications, and to alter it and redistribute it\r\nfreely, subject to the following restrictions:\r\n\r\n    1. The origin of this software must not be misrepresented; you must not\r\n    claim that you wrote the original software. If you use this software\r\n    in a product, an acknowledgment in the product documentation would be\r\n    appreciated but is not required.\r\n\r\n    2. Altered source versions must be plainly marked as such, and must not be\r\n    misrepresented as being the original software.\r\n\r\n    3. This notice may not be removed or altered from any source\r\n    distribution.\r\n*/\r\n\r\n#include <iostream>\r\n#include <list>\r\n#include <tinythread.h>\r\n#include <fast_mutex.h>\r\n\r\nusing namespace std;\r\nusing namespace tthread;\r\n\n// HACK: Mac OS X and early MinGW do not support thread-local storage\n#if defined(__APPLE__) || (defined(__MINGW32__) && (__GNUC__ < 4))\r\n #define NO_TLS\n#endif\n\n\r\n// Thread local storage variable\n#ifndef NO_TLS\nthread_local int gLocalVar;\r\n#endif\n\r\n// Mutex + global count variable\r\nmutex gMutex;\r\nfast_mutex gFastMutex;\r\nint gCount;\r\n\r\n// Condition variable\r\ncondition_variable gCond;\r\n\r\n// Thread function: Thread ID\r\nvoid ThreadIDs(void * aArg)\r\n{\r\n  cout << \" My thread id is \" << this_thread::get_id() << \".\" << endl;\r\n}\r\n\n#ifndef NO_TLS\n// Thread function: Thread-local storage\r\nvoid ThreadTLS(void * aArg)\r\n{\r\n  gLocalVar = 2;\r\n  cout << \" My gLocalVar is \" << gLocalVar << \".\" << endl;\r\n}\r\n#endif\n\r\n// Thread function: Mutex locking\r\nvoid ThreadLock(void * aArg)\r\n{\r\n  for(int i = 0; i < 10000; ++ i)\r\n  {\r\n    lock_guard<mutex> lock(gMutex);\r\n    ++ gCount;\r\n  }\r\n}\r\n\r\n// Thread function: Mutex locking\r\nvoid ThreadLock2(void * aArg)\r\n{\r\n  for(int i = 0; i < 10000; ++ i)\r\n  {\r\n    lock_guard<fast_mutex> lock(gFastMutex);\r\n    ++ gCount;\r\n  }\r\n}\r\n\r\n// Thread function: Condition notifier\r\nvoid ThreadCondition1(void * aArg)\r\n{\r\n  lock_guard<mutex> lock(gMutex);\r\n  -- gCount;\r\n  gCond.notify_all();\r\n}\r\n\r\n// Thread function: Condition waiter\r\nvoid ThreadCondition2(void * aArg)\r\n{\r\n  cout << \" Wating...\" << flush;\r\n  lock_guard<mutex> lock(gMutex);\r\n  while(gCount > 0)\r\n  {\r\n    cout << \".\" << flush;\r\n    gCond.wait(gMutex);\r\n  }\r\n  cout << \".\" << endl;\r\n}\r\n\r\n// Thread function: Yield\r\nvoid ThreadYield(void * aArg)\r\n{\r\n  // Yield...\r\n  this_thread::yield();\r\n}\r\n\r\n\r\n// This is the main program (i.e. the main thread)\r\nint main()\r\n{\r\n  // Test 1: Show number of CPU cores in the system\r\n  cout << \"PART I: Info\" << endl;\r\n  cout << \" Number of processor cores: \" << thread::hardware_concurrency() << endl;\r\n\r\n  // Test 2: thread IDs\r\n  cout << endl << \"PART II: Thread IDs\" << endl;\r\n  {\r\n    // Show the main thread ID\r\n    cout << \" Main thread id is \" << this_thread::get_id() << \".\" << endl;\r\n\r\n    // Start a bunch of child threads - only run a single thread at a time\r\n    thread t1(ThreadIDs, 0);\r\n    t1.join();\r\n    thread t2(ThreadIDs, 0);\r\n    t2.join();\r\n    thread t3(ThreadIDs, 0);\r\n    t3.join();\r\n    thread t4(ThreadIDs, 0);\r\n    t4.join();\r\n  }\r\n\r\n  // Test 3: thread local storage\r\n  cout << endl << \"PART III: Thread local storage\" << endl;\r\n#ifndef NO_TLS\n  {\r\n    // Clear the TLS variable (it should keep this value after all threads are\r\n    // finished).\r\n    gLocalVar = 1;\r\n    cout << \" Main gLocalVar is \" << gLocalVar << \".\" << endl;\r\n\r\n    // Start a child thread that modifies gLocalVar\r\n    thread t1(ThreadTLS, 0);\r\n    t1.join();\r\n\r\n    // Check if the TLS variable has changed\r\n    if(gLocalVar == 1)\r\n      cout << \" Main gLocalID was not changed by the child thread - OK!\" << endl;\r\n    else\r\n      cout << \" Main gLocalID was changed by the child thread - FAIL!\" << endl;\r\n  }\r\n#else\n  cout << \" TLS is not supported on this platform...\" << endl;\r\n#endif\n\r\n  // Test 4: mutex locking\r\n  cout << endl << \"PART IV: Mutex locking (100 threads x 10000 iterations)\" << endl;\r\n  {\r\n    // Clear the global counter.\r\n    gCount = 0;\r\n\r\n    // Start a bunch of child threads\r\n    list<thread *> threadList;\r\n    for(int i = 0; i < 100; ++ i)\r\n      threadList.push_back(new thread(ThreadLock, 0));\r\n\r\n    // Wait for the threads to finish\r\n    list<thread *>::iterator it;\r\n    for(it = threadList.begin(); it != threadList.end(); ++ it)\r\n    {\r\n      thread * t = *it;\r\n      t->join();\r\n      delete t;\r\n    }\r\n\r\n    // Check the global count\r\n    cout << \" gCount = \" << gCount << endl;\r\n  }\r\n\r\n  // Test 5: fast_mutex locking\r\n  cout << endl << \"PART V: Fast mutex locking (100 threads x 10000 iterations)\" << endl;\r\n  {\r\n    // Clear the global counter.\r\n    gCount = 0;\r\n\r\n    // Start a bunch of child threads\r\n    list<thread *> threadList;\r\n    for(int i = 0; i < 100; ++ i)\r\n      threadList.push_back(new thread(ThreadLock2, 0));\r\n\r\n    // Wait for the threads to finish\r\n    list<thread *>::iterator it;\r\n    for(it = threadList.begin(); it != threadList.end(); ++ it)\r\n    {\r\n      thread * t = *it;\r\n      t->join();\r\n      delete t;\r\n    }\r\n\r\n    // Check the global count\r\n    cout << \" gCount = \" << gCount << endl;\r\n  }\r\n\r\n  // Test 6: condition variable\r\n  cout << endl << \"PART VI: Condition variable (40 + 1 threads)\" << endl;\r\n  {\r\n    // Set the global counter to the number of threads to run.\r\n    gCount = 40;\r\n\r\n    // Start the waiting thread (it will wait for gCount to reach zero).\r\n    thread t1(ThreadCondition2, 0);\r\n\r\n    // Start a bunch of child threads (these will decrease gCount by 1 when they\r\n    // finish)\r\n    list<thread *> threadList;\r\n    for(int i = 0; i < 40; ++ i)\r\n      threadList.push_back(new thread(ThreadCondition1, 0));\r\n\r\n    // Wait for the waiting thread to finish\r\n    t1.join();\r\n\r\n    // Wait for the other threads to finish\r\n    list<thread *>::iterator it;\r\n    for(it = threadList.begin(); it != threadList.end(); ++ it)\r\n    {\r\n      thread * t = *it;\r\n      t->join();\r\n      delete t;\r\n    }\r\n  }\r\n\r\n  // Test 7: yield\r\n  cout << endl << \"PART VII: Yield (40 + 1 threads)\" << endl;\r\n  {\r\n    // Start a bunch of child threads\r\n    list<thread *> threadList;\r\n    for(int i = 0; i < 40; ++ i)\r\n      threadList.push_back(new thread(ThreadYield, 0));\r\n\r\n    // Yield...\r\n    this_thread::yield();\r\n\r\n    // Wait for the threads to finish\r\n    list<thread *>::iterator it;\r\n    for(it = threadList.begin(); it != threadList.end(); ++ it)\r\n    {\r\n      thread * t = *it;\r\n      t->join();\r\n      delete t;\r\n    }\r\n  }\r\n\r\n  // Test 8: sleep\r\n  cout << endl << \"PART VIII: Sleep (10 x 100 ms)\" << endl;\r\n  {\r\n    // Sleep...\r\n    cout << \" Sleeping\" << flush;\r\n    for(int i = 0; i < 10; ++ i)\r\n    {\r\n      this_thread::sleep_for(chrono::milliseconds(100));\r\n      cout << \".\" << flush;\r\n    }\r\n    cout << endl;\r\n  }\r\n}\r\n"
  },
  {
    "path": "external/bzip2/CHANGES",
    "content": " ------------------------------------------------------------------\n This file is part of bzip2/libbzip2, a program and library for\n lossless, block-sorting data compression.\n\n bzip2/libbzip2 version 1.0.6 of 6 September 2010\n Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n Please read the WARNING, DISCLAIMER and PATENTS sections in the \n README file.\n\n This program is released under the terms of the license contained\n in the file LICENSE.\n ------------------------------------------------------------------\n\n\n0.9.0\n~~~~~\nFirst version.\n\n\n0.9.0a\n~~~~~~\nRemoved 'ranlib' from Makefile, since most modern Unix-es \ndon't need it, or even know about it.\n\n\n0.9.0b\n~~~~~~\nFixed a problem with error reporting in bzip2.c.  This does not effect\nthe library in any way.  Problem is: versions 0.9.0 and 0.9.0a (of the\nprogram proper) compress and decompress correctly, but give misleading\nerror messages (internal panics) when an I/O error occurs, instead of\nreporting the problem correctly.  This shouldn't give any data loss\n(as far as I can see), but is confusing.\n\nMade the inline declarations disappear for non-GCC compilers.\n\n\n0.9.0c\n~~~~~~\nFixed some problems in the library pertaining to some boundary cases.\nThis makes the library behave more correctly in those situations.  The\nfixes apply only to features (calls and parameters) not used by\nbzip2.c, so the non-fixedness of them in previous versions has no\neffect on reliability of bzip2.c.\n\nIn bzlib.c:\n   * made zero-length BZ_FLUSH work correctly in bzCompress().\n   * fixed bzWrite/bzRead to ignore zero-length requests.\n   * fixed bzread to correctly handle read requests after EOF.\n   * wrong parameter order in call to bzDecompressInit in\n     bzBuffToBuffDecompress.  Fixed.\n\nIn compress.c:\n   * changed setting of nGroups in sendMTFValues() so as to \n     do a bit better on small files.  This _does_ effect\n     bzip2.c.\n\n\n0.9.5a\n~~~~~~\nMajor change: add a fallback sorting algorithm (blocksort.c)\nto give reasonable behaviour even for very repetitive inputs.\nNuked --repetitive-best and --repetitive-fast since they are\nno longer useful.\n\nMinor changes: mostly a whole bunch of small changes/\nbugfixes in the driver (bzip2.c).  Changes pertaining to the\nuser interface are:\n\n   allow decompression of symlink'd files to stdout\n   decompress/test files even without .bz2 extension\n   give more accurate error messages for I/O errors\n   when compressing/decompressing to stdout, don't catch control-C\n   read flags from BZIP2 and BZIP environment variables\n   decline to break hard links to a file unless forced with -f\n   allow -c flag even with no filenames\n   preserve file ownerships as far as possible\n   make -s -1 give the expected block size (100k)\n   add a flag -q --quiet to suppress nonessential warnings\n   stop decoding flags after --, so files beginning in - can be handled\n   resolved inconsistent naming: bzcat or bz2cat ?\n   bzip2 --help now returns 0\n\nProgramming-level changes are:\n\n   fixed syntax error in GET_LL4 for Borland C++ 5.02\n   let bzBuffToBuffDecompress return BZ_DATA_ERROR{_MAGIC}\n   fix overshoot of mode-string end in bzopen_or_bzdopen\n   wrapped bzlib.h in #ifdef __cplusplus ... extern \"C\" { ... }\n   close file handles under all error conditions\n   added minor mods so it compiles with DJGPP out of the box\n   fixed Makefile so it doesn't give problems with BSD make\n   fix uninitialised memory reads in dlltest.c\n\n0.9.5b\n~~~~~~\nOpen stdin/stdout in binary mode for DJGPP.\n\n0.9.5c\n~~~~~~\nChanged BZ_N_OVERSHOOT to be ... + 2 instead of ... + 1.  The + 1\nversion could cause the sorted order to be wrong in some extremely\nobscure cases.  Also changed setting of quadrant in blocksort.c.\n\n0.9.5d\n~~~~~~\nThe only functional change is to make bzlibVersion() in the library\nreturn the correct string.  This has no effect whatsoever on the\nfunctioning of the bzip2 program or library.  Added a couple of casts\nso the library compiles without warnings at level 3 in MS Visual\nStudio 6.0.  Included a Y2K statement in the file Y2K_INFO.  All other\nchanges are minor documentation changes.\n\n1.0\n~~~\nSeveral minor bugfixes and enhancements:\n\n* Large file support.  The library uses 64-bit counters to\n  count the volume of data passing through it.  bzip2.c \n  is now compiled with -D_FILE_OFFSET_BITS=64 to get large\n  file support from the C library.  -v correctly prints out\n  file sizes greater than 4 gigabytes.  All these changes have\n  been made without assuming a 64-bit platform or a C compiler\n  which supports 64-bit ints, so, except for the C library\n  aspect, they are fully portable.\n\n* Decompression robustness.  The library/program should be\n  robust to any corruption of compressed data, detecting and\n  handling _all_ corruption, instead of merely relying on\n  the CRCs.  What this means is that the program should \n  never crash, given corrupted data, and the library should\n  always return BZ_DATA_ERROR.\n\n* Fixed an obscure race-condition bug only ever observed on\n  Solaris, in which, if you were very unlucky and issued\n  control-C at exactly the wrong time, both input and output\n  files would be deleted.\n\n* Don't run out of file handles on test/decompression when\n  large numbers of files have invalid magic numbers.\n\n* Avoid library namespace pollution.  Prefix all exported \n  symbols with BZ2_.\n\n* Minor sorting enhancements from my DCC2000 paper.\n\n* Advance the version number to 1.0, so as to counteract the\n  (false-in-this-case) impression some people have that programs \n  with version numbers less than 1.0 are in some way, experimental,\n  pre-release versions.\n\n* Create an initial Makefile-libbz2_so to build a shared library.\n  Yes, I know I should really use libtool et al ...\n\n* Make the program exit with 2 instead of 0 when decompression\n  fails due to a bad magic number (ie, an invalid bzip2 header).\n  Also exit with 1 (as the manual claims :-) whenever a diagnostic\n  message would have been printed AND the corresponding operation \n  is aborted, for example\n     bzip2: Output file xx already exists.\n  When a diagnostic message is printed but the operation is not \n  aborted, for example\n     bzip2: Can't guess original name for wurble -- using wurble.out\n  then the exit value 0 is returned, unless some other problem is\n  also detected.\n\n  I think it corresponds more closely to what the manual claims now.\n\n\n1.0.1\n~~~~~\n* Modified dlltest.c so it uses the new BZ2_ naming scheme.\n* Modified makefile-msc to fix minor build probs on Win2k.\n* Updated README.COMPILATION.PROBLEMS.\n\nThere are no functionality changes or bug fixes relative to version\n1.0.0.  This is just a documentation update + a fix for minor Win32\nbuild problems.  For almost everyone, upgrading from 1.0.0 to 1.0.1 is\nutterly pointless.  Don't bother.\n\n\n1.0.2\n~~~~~\nA bug fix release, addressing various minor issues which have appeared\nin the 18 or so months since 1.0.1 was released.  Most of the fixes\nare to do with file-handling or documentation bugs.  To the best of my\nknowledge, there have been no data-loss-causing bugs reported in the\ncompression/decompression engine of 1.0.0 or 1.0.1.\n\nNote that this release does not improve the rather crude build system\nfor Unix platforms.  The general plan here is to autoconfiscate/\nlibtoolise 1.0.2 soon after release, and release the result as 1.1.0\nor perhaps 1.2.0.  That, however, is still just a plan at this point.\n\nHere are the changes in 1.0.2.  Bug-reporters and/or patch-senders in\nparentheses.\n\n* Fix an infinite segfault loop in 1.0.1 when a directory is\n  encountered in -f (force) mode.\n     (Trond Eivind Glomsrod, Nicholas Nethercote, Volker Schmidt)\n\n* Avoid double fclose() of output file on certain I/O error paths.\n     (Solar Designer)\n\n* Don't fail with internal error 1007 when fed a long stream (> 48MB)\n  of byte 251.  Also print useful message suggesting that 1007s may be\n  caused by bad memory.\n     (noticed by Juan Pedro Vallejo, fixed by me)\n\n* Fix uninitialised variable silly bug in demo prog dlltest.c.\n     (Jorj Bauer)\n\n* Remove 512-MB limitation on recovered file size for bzip2recover\n  on selected platforms which support 64-bit ints.  At the moment\n  all GCC supported platforms, and Win32.\n     (me, Alson van der Meulen)\n\n* Hard-code header byte values, to give correct operation on platforms\n  using EBCDIC as their native character set (IBM's OS/390).\n     (Leland Lucius)\n\n* Copy file access times correctly.\n     (Marty Leisner)\n\n* Add distclean and check targets to Makefile.\n     (Michael Carmack)\n\n* Parameterise use of ar and ranlib in Makefile.  Also add $(LDFLAGS).\n     (Rich Ireland, Bo Thorsen)\n\n* Pass -p (create parent dirs as needed) to mkdir during make install.\n     (Jeremy Fusco)\n\n* Dereference symlinks when copying file permissions in -f mode.\n     (Volker Schmidt)\n\n* Majorly simplify implementation of uInt64_qrm10.\n     (Bo Lindbergh)\n\n* Check the input file still exists before deleting the output one,\n  when aborting in cleanUpAndFail().\n     (Joerg Prante, Robert Linden, Matthias Krings)\n\nAlso a bunch of patches courtesy of Philippe Troin, the Debian maintainer\nof bzip2:\n\n* Wrapper scripts (with manpages): bzdiff, bzgrep, bzmore.\n\n* Spelling changes and minor enhancements in bzip2.1.\n\n* Avoid race condition between creating the output file and setting its\n  interim permissions safely, by using fopen_output_safely().\n  No changes to bzip2recover since there is no issue with file\n  permissions there.\n\n* do not print senseless report with -v when compressing an empty\n  file.\n\n* bzcat -f works on non-bzip2 files.\n\n* do not try to escape shell meta-characters on unix (the shell takes\n  care of these).\n\n* added --fast and --best aliases for -1 -9 for gzip compatibility.\n\n\n1.0.3 (15 Feb 05)\n~~~~~~~~~~~~~~~~~\nFixes some minor bugs since the last version, 1.0.2.\n\n* Further robustification against corrupted compressed data.\n  There are currently no known bitstreams which can cause the\n  decompressor to crash, loop or access memory which does not\n  belong to it.  If you are using bzip2 or the library to \n  decompress bitstreams from untrusted sources, an upgrade\n  to 1.0.3 is recommended.  This fixes CAN-2005-1260.\n\n* The documentation has been converted to XML, from which html\n  and pdf can be derived.\n\n* Various minor bugs in the documentation have been fixed.\n\n* Fixes for various compilation warnings with newer versions of\n  gcc, and on 64-bit platforms.\n\n* The BZ_NO_STDIO cpp symbol was not properly observed in 1.0.2.\n  This has been fixed.\n\n\n1.0.4 (20 Dec 06)\n~~~~~~~~~~~~~~~~~\nFixes some minor bugs since the last version, 1.0.3.\n\n* Fix file permissions race problem (CAN-2005-0953).\n\n* Avoid possible segfault in BZ2_bzclose.  From Coverity's NetBSD\n  scan.\n\n* 'const'/prototype cleanups in the C code.\n\n* Change default install location to /usr/local, and handle multiple\n  'make install's without error.\n\n* Sanitise file names more carefully in bzgrep.  Fixes CAN-2005-0758\n  to the extent that applies to bzgrep.\n\n* Use 'mktemp' rather than 'tempfile' in bzdiff.\n\n* Tighten up a couple of assertions in blocksort.c following automated\n  analysis.\n\n* Fix minor doc/comment bugs.\n\n\n1.0.5 (10 Dec 07)\n~~~~~~~~~~~~~~~~~\nSecurity fix only.  Fixes CERT-FI 20469 as it applies to bzip2.\n\n\n1.0.6 (6 Sept 10)\n~~~~~~~~~~~~~~~~~\n\n* Security fix for CVE-2010-0405.  This was reported by Mikolaj\n  Izdebski.\n\n* Make the documentation build on Ubuntu 10.04\n"
  },
  {
    "path": "external/bzip2/LICENSE",
    "content": "\n--------------------------------------------------------------------------\n\nThis program, \"bzip2\", the associated library \"libbzip2\", and all\ndocumentation, are copyright (C) 1996-2010 Julian R Seward.  All\nrights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. The origin of this software must not be misrepresented; you must \n   not claim that you wrote the original software.  If you use this \n   software in a product, an acknowledgment in the product \n   documentation would be appreciated but is not required.\n\n3. Altered source versions must be plainly marked as such, and must\n   not be misrepresented as being the original software.\n\n4. The name of the author may not be used to endorse or promote \n   products derived from this software without specific prior written \n   permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\nOR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\nGOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nJulian Seward, jseward@bzip.org\nbzip2/libbzip2 version 1.0.6 of 6 September 2010\n\n--------------------------------------------------------------------------\n"
  },
  {
    "path": "external/bzip2/Makefile",
    "content": "# ------------------------------------------------------------------\n# This file is part of bzip2/libbzip2, a program and library for\n# lossless, block-sorting data compression.\n#\n# bzip2/libbzip2 version 1.0.6 of 6 September 2010\n# Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n#\n# Please read the WARNING, DISCLAIMER and PATENTS sections in the \n# README file.\n#\n# This program is released under the terms of the license contained\n# in the file LICENSE.\n# ------------------------------------------------------------------\n\nSHELL=/bin/sh\n\n# To assist in cross-compiling\nCC=gcc\nAR=ar\nRANLIB=ranlib\nLDFLAGS=\n\nBIGFILES=-D_FILE_OFFSET_BITS=64\nCFLAGS=-Wall -Winline -O2 -g $(BIGFILES)\n\n# Where you want it installed when you do 'make install'\nPREFIX=/usr/local\n\n\nOBJS= blocksort.o  \\\n      huffman.o    \\\n      crctable.o   \\\n      randtable.o  \\\n      compress.o   \\\n      decompress.o \\\n      bzlib.o\n\nall: libbz2.a bzip2 bzip2recover test\n\nbzip2: libbz2.a bzip2.o\n\t$(CC) $(CFLAGS) $(LDFLAGS) -o bzip2 bzip2.o -L. -lbz2\n\nbzip2recover: bzip2recover.o\n\t$(CC) $(CFLAGS) $(LDFLAGS) -o bzip2recover bzip2recover.o\n\nlibbz2.a: $(OBJS)\n\trm -f libbz2.a\n\t$(AR) cq libbz2.a $(OBJS)\n\t@if ( test -f $(RANLIB) -o -f /usr/bin/ranlib -o \\\n\t\t-f /bin/ranlib -o -f /usr/ccs/bin/ranlib ) ; then \\\n\t\techo $(RANLIB) libbz2.a ; \\\n\t\t$(RANLIB) libbz2.a ; \\\n\tfi\n\ncheck: test\ntest: bzip2\n\t@cat words1\n\t./bzip2 -1  < sample1.ref > sample1.rb2\n\t./bzip2 -2  < sample2.ref > sample2.rb2\n\t./bzip2 -3  < sample3.ref > sample3.rb2\n\t./bzip2 -d  < sample1.bz2 > sample1.tst\n\t./bzip2 -d  < sample2.bz2 > sample2.tst\n\t./bzip2 -ds < sample3.bz2 > sample3.tst\n\tcmp sample1.bz2 sample1.rb2 \n\tcmp sample2.bz2 sample2.rb2\n\tcmp sample3.bz2 sample3.rb2\n\tcmp sample1.tst sample1.ref\n\tcmp sample2.tst sample2.ref\n\tcmp sample3.tst sample3.ref\n\t@cat words3\n\ninstall: bzip2 bzip2recover\n\tif ( test ! -d $(PREFIX)/bin ) ; then mkdir -p $(PREFIX)/bin ; fi\n\tif ( test ! -d $(PREFIX)/lib ) ; then mkdir -p $(PREFIX)/lib ; fi\n\tif ( test ! -d $(PREFIX)/man ) ; then mkdir -p $(PREFIX)/man ; fi\n\tif ( test ! -d $(PREFIX)/man/man1 ) ; then mkdir -p $(PREFIX)/man/man1 ; fi\n\tif ( test ! -d $(PREFIX)/include ) ; then mkdir -p $(PREFIX)/include ; fi\n\tcp -f bzip2 $(PREFIX)/bin/bzip2\n\tcp -f bzip2 $(PREFIX)/bin/bunzip2\n\tcp -f bzip2 $(PREFIX)/bin/bzcat\n\tcp -f bzip2recover $(PREFIX)/bin/bzip2recover\n\tchmod a+x $(PREFIX)/bin/bzip2\n\tchmod a+x $(PREFIX)/bin/bunzip2\n\tchmod a+x $(PREFIX)/bin/bzcat\n\tchmod a+x $(PREFIX)/bin/bzip2recover\n\tcp -f bzip2.1 $(PREFIX)/man/man1\n\tchmod a+r $(PREFIX)/man/man1/bzip2.1\n\tcp -f bzlib.h $(PREFIX)/include\n\tchmod a+r $(PREFIX)/include/bzlib.h\n\tcp -f libbz2.a $(PREFIX)/lib\n\tchmod a+r $(PREFIX)/lib/libbz2.a\n\tcp -f bzgrep $(PREFIX)/bin/bzgrep\n\tln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzegrep\n\tln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzfgrep\n\tchmod a+x $(PREFIX)/bin/bzgrep\n\tcp -f bzmore $(PREFIX)/bin/bzmore\n\tln -s -f $(PREFIX)/bin/bzmore $(PREFIX)/bin/bzless\n\tchmod a+x $(PREFIX)/bin/bzmore\n\tcp -f bzdiff $(PREFIX)/bin/bzdiff\n\tln -s -f $(PREFIX)/bin/bzdiff $(PREFIX)/bin/bzcmp\n\tchmod a+x $(PREFIX)/bin/bzdiff\n\tcp -f bzgrep.1 bzmore.1 bzdiff.1 $(PREFIX)/man/man1\n\tchmod a+r $(PREFIX)/man/man1/bzgrep.1\n\tchmod a+r $(PREFIX)/man/man1/bzmore.1\n\tchmod a+r $(PREFIX)/man/man1/bzdiff.1\n\techo \".so man1/bzgrep.1\" > $(PREFIX)/man/man1/bzegrep.1\n\techo \".so man1/bzgrep.1\" > $(PREFIX)/man/man1/bzfgrep.1\n\techo \".so man1/bzmore.1\" > $(PREFIX)/man/man1/bzless.1\n\techo \".so man1/bzdiff.1\" > $(PREFIX)/man/man1/bzcmp.1\n\nclean: \n\trm -f *.o libbz2.a bzip2 bzip2recover \\\n\tsample1.rb2 sample2.rb2 sample3.rb2 \\\n\tsample1.tst sample2.tst sample3.tst\n\nblocksort.o: blocksort.c\n\t@cat words0\n\t$(CC) $(CFLAGS) -c blocksort.c\nhuffman.o: huffman.c\n\t$(CC) $(CFLAGS) -c huffman.c\ncrctable.o: crctable.c\n\t$(CC) $(CFLAGS) -c crctable.c\nrandtable.o: randtable.c\n\t$(CC) $(CFLAGS) -c randtable.c\ncompress.o: compress.c\n\t$(CC) $(CFLAGS) -c compress.c\ndecompress.o: decompress.c\n\t$(CC) $(CFLAGS) -c decompress.c\nbzlib.o: bzlib.c\n\t$(CC) $(CFLAGS) -c bzlib.c\nbzip2.o: bzip2.c\n\t$(CC) $(CFLAGS) -c bzip2.c\nbzip2recover.o: bzip2recover.c\n\t$(CC) $(CFLAGS) -c bzip2recover.c\n\n\ndistclean: clean\n\trm -f manual.ps manual.html manual.pdf\n\nDISTNAME=bzip2-1.0.6\ndist: check manual\n\trm -f $(DISTNAME)\n\tln -s -f . $(DISTNAME)\n\ttar cvf $(DISTNAME).tar \\\n\t   $(DISTNAME)/blocksort.c \\\n\t   $(DISTNAME)/huffman.c \\\n\t   $(DISTNAME)/crctable.c \\\n\t   $(DISTNAME)/randtable.c \\\n\t   $(DISTNAME)/compress.c \\\n\t   $(DISTNAME)/decompress.c \\\n\t   $(DISTNAME)/bzlib.c \\\n\t   $(DISTNAME)/bzip2.c \\\n\t   $(DISTNAME)/bzip2recover.c \\\n\t   $(DISTNAME)/bzlib.h \\\n\t   $(DISTNAME)/bzlib_private.h \\\n\t   $(DISTNAME)/Makefile \\\n\t   $(DISTNAME)/LICENSE \\\n\t   $(DISTNAME)/bzip2.1 \\\n\t   $(DISTNAME)/bzip2.1.preformatted \\\n\t   $(DISTNAME)/bzip2.txt \\\n\t   $(DISTNAME)/words0 \\\n\t   $(DISTNAME)/words1 \\\n\t   $(DISTNAME)/words2 \\\n\t   $(DISTNAME)/words3 \\\n\t   $(DISTNAME)/sample1.ref \\\n\t   $(DISTNAME)/sample2.ref \\\n\t   $(DISTNAME)/sample3.ref \\\n\t   $(DISTNAME)/sample1.bz2 \\\n\t   $(DISTNAME)/sample2.bz2 \\\n\t   $(DISTNAME)/sample3.bz2 \\\n\t   $(DISTNAME)/dlltest.c \\\n\t   $(DISTNAME)/manual.html \\\n\t   $(DISTNAME)/manual.pdf \\\n\t   $(DISTNAME)/manual.ps \\\n\t   $(DISTNAME)/README \\\n\t   $(DISTNAME)/README.COMPILATION.PROBLEMS \\\n\t   $(DISTNAME)/README.XML.STUFF \\\n\t   $(DISTNAME)/CHANGES \\\n\t   $(DISTNAME)/libbz2.def \\\n\t   $(DISTNAME)/libbz2.dsp \\\n\t   $(DISTNAME)/dlltest.dsp \\\n\t   $(DISTNAME)/makefile.msc \\\n\t   $(DISTNAME)/unzcrash.c \\\n\t   $(DISTNAME)/spewG.c \\\n\t   $(DISTNAME)/mk251.c \\\n\t   $(DISTNAME)/bzdiff \\\n\t   $(DISTNAME)/bzdiff.1 \\\n\t   $(DISTNAME)/bzmore \\\n\t   $(DISTNAME)/bzmore.1 \\\n\t   $(DISTNAME)/bzgrep \\\n\t   $(DISTNAME)/bzgrep.1 \\\n\t   $(DISTNAME)/Makefile-libbz2_so \\\n\t   $(DISTNAME)/bz-common.xsl \\\n\t   $(DISTNAME)/bz-fo.xsl \\\n\t   $(DISTNAME)/bz-html.xsl \\\n\t   $(DISTNAME)/bzip.css \\\n\t   $(DISTNAME)/entities.xml \\\n\t   $(DISTNAME)/manual.xml \\\n\t   $(DISTNAME)/format.pl \\\n\t   $(DISTNAME)/xmlproc.sh\n\tgzip -v $(DISTNAME).tar\n\n# For rebuilding the manual from sources on my SuSE 9.1 box\n\nMANUAL_SRCS= \tbz-common.xsl bz-fo.xsl bz-html.xsl bzip.css \\\n\t\tentities.xml manual.xml \n\nmanual: manual.html manual.ps manual.pdf\n\nmanual.ps: $(MANUAL_SRCS)\n\t./xmlproc.sh -ps manual.xml\n\nmanual.pdf: $(MANUAL_SRCS)\n\t./xmlproc.sh -pdf manual.xml\n\nmanual.html: $(MANUAL_SRCS)\n\t./xmlproc.sh -html manual.xml\n"
  },
  {
    "path": "external/bzip2/Makefile-libbz2_so",
    "content": "\n# This Makefile builds a shared version of the library, \n# libbz2.so.1.0.6, with soname libbz2.so.1.0,\n# at least on x86-Linux (RedHat 7.2), \n# with gcc-2.96 20000731 (Red Hat Linux 7.1 2.96-98).  \n# Please see the README file for some important info \n# about building the library like this.\n\n# ------------------------------------------------------------------\n# This file is part of bzip2/libbzip2, a program and library for\n# lossless, block-sorting data compression.\n#\n# bzip2/libbzip2 version 1.0.6 of 6 September 2010\n# Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n#\n# Please read the WARNING, DISCLAIMER and PATENTS sections in the \n# README file.\n#\n# This program is released under the terms of the license contained\n# in the file LICENSE.\n# ------------------------------------------------------------------\n\n\nSHELL=/bin/sh\nCC=gcc\nBIGFILES=-D_FILE_OFFSET_BITS=64\nCFLAGS=-fpic -fPIC -Wall -Winline -O2 -g $(BIGFILES)\n\nOBJS= blocksort.o  \\\n      huffman.o    \\\n      crctable.o   \\\n      randtable.o  \\\n      compress.o   \\\n      decompress.o \\\n      bzlib.o\n\nall: $(OBJS)\n\t$(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.6 $(OBJS)\n\t$(CC) $(CFLAGS) -o bzip2-shared bzip2.c libbz2.so.1.0.6\n\trm -f libbz2.so.1.0\n\tln -s libbz2.so.1.0.6 libbz2.so.1.0\n\nclean: \n\trm -f $(OBJS) bzip2.o libbz2.so.1.0.6 libbz2.so.1.0 bzip2-shared\n\nblocksort.o: blocksort.c\n\t$(CC) $(CFLAGS) -c blocksort.c\nhuffman.o: huffman.c\n\t$(CC) $(CFLAGS) -c huffman.c\ncrctable.o: crctable.c\n\t$(CC) $(CFLAGS) -c crctable.c\nrandtable.o: randtable.c\n\t$(CC) $(CFLAGS) -c randtable.c\ncompress.o: compress.c\n\t$(CC) $(CFLAGS) -c compress.c\ndecompress.o: decompress.c\n\t$(CC) $(CFLAGS) -c decompress.c\nbzlib.o: bzlib.c\n\t$(CC) $(CFLAGS) -c bzlib.c\n"
  },
  {
    "path": "external/bzip2/README",
    "content": "\nThis is the README for bzip2/libzip2.\nThis version is fully compatible with the previous public releases.\n\n------------------------------------------------------------------\nThis file is part of bzip2/libbzip2, a program and library for\nlossless, block-sorting data compression.\n\nbzip2/libbzip2 version 1.0.6 of 6 September 2010\nCopyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\nPlease read the WARNING, DISCLAIMER and PATENTS sections in this file.\n\nThis program is released under the terms of the license contained\nin the file LICENSE.\n------------------------------------------------------------------\n\nComplete documentation is available in Postscript form (manual.ps),\nPDF (manual.pdf) or html (manual.html).  A plain-text version of the\nmanual page is available as bzip2.txt.\n\n\nHOW TO BUILD -- UNIX\n\nType 'make'.  This builds the library libbz2.a and then the programs\nbzip2 and bzip2recover.  Six self-tests are run.  If the self-tests\ncomplete ok, carry on to installation:\n\nTo install in /usr/local/bin, /usr/local/lib, /usr/local/man and\n/usr/local/include, type\n\n   make install\n\nTo install somewhere else, eg, /xxx/yyy/{bin,lib,man,include}, type\n\n   make install PREFIX=/xxx/yyy\n\nIf you are (justifiably) paranoid and want to see what 'make install'\nis going to do, you can first do\n\n   make -n install                      or\n   make -n install PREFIX=/xxx/yyy      respectively.\n\nThe -n instructs make to show the commands it would execute, but not\nactually execute them.\n\n\nHOW TO BUILD -- UNIX, shared library libbz2.so.\n\nDo 'make -f Makefile-libbz2_so'.  This Makefile seems to work for\nLinux-ELF (RedHat 7.2 on an x86 box), with gcc.  I make no claims\nthat it works for any other platform, though I suspect it probably\nwill work for most platforms employing both ELF and gcc.\n\nbzip2-shared, a client of the shared library, is also built, but not\nself-tested.  So I suggest you also build using the normal Makefile,\nsince that conducts a self-test.  A second reason to prefer the\nversion statically linked to the library is that, on x86 platforms,\nbuilding shared objects makes a valuable register (%ebx) unavailable\nto gcc, resulting in a slowdown of 10%-20%, at least for bzip2.\n\nImportant note for people upgrading .so's from 0.9.0/0.9.5 to version\n1.0.X.  All the functions in the library have been renamed, from (eg)\nbzCompress to BZ2_bzCompress, to avoid namespace pollution.\nUnfortunately this means that the libbz2.so created by\nMakefile-libbz2_so will not work with any program which used an older\nversion of the library.  I do encourage library clients to make the\neffort to upgrade to use version 1.0, since it is both faster and more\nrobust than previous versions.\n\n\nHOW TO BUILD -- Windows 95, NT, DOS, Mac, etc.\n\nIt's difficult for me to support compilation on all these platforms.\nMy approach is to collect binaries for these platforms, and put them\non the master web site (http://www.bzip.org).  Look there.  However\n(FWIW), bzip2-1.0.X is very standard ANSI C and should compile\nunmodified with MS Visual C.  If you have difficulties building, you\nmight want to read README.COMPILATION.PROBLEMS.\n\nAt least using MS Visual C++ 6, you can build from the unmodified\nsources by issuing, in a command shell: \n\n   nmake -f makefile.msc\n\n(you may need to first run the MSVC-provided script VCVARS32.BAT\n so as to set up paths to the MSVC tools correctly).\n\n\nVALIDATION\n\nCorrect operation, in the sense that a compressed file can always be\ndecompressed to reproduce the original, is obviously of paramount\nimportance.  To validate bzip2, I used a modified version of Mark\nNelson's churn program.  Churn is an automated test driver which\nrecursively traverses a directory structure, using bzip2 to compress\nand then decompress each file it encounters, and checking that the\ndecompressed data is the same as the original.\n\n\n\nPlease read and be aware of the following:\n\nWARNING:\n\n   This program and library (attempts to) compress data by \n   performing several non-trivial transformations on it.  \n   Unless you are 100% familiar with *all* the algorithms \n   contained herein, and with the consequences of modifying them, \n   you should NOT meddle with the compression or decompression \n   machinery.  Incorrect changes can and very likely *will* \n   lead to disastrous loss of data.\n\n\nDISCLAIMER:\n\n   I TAKE NO RESPONSIBILITY FOR ANY LOSS OF DATA ARISING FROM THE\n   USE OF THIS PROGRAM/LIBRARY, HOWSOEVER CAUSED.\n\n   Every compression of a file implies an assumption that the\n   compressed file can be decompressed to reproduce the original.\n   Great efforts in design, coding and testing have been made to\n   ensure that this program works correctly.  However, the complexity\n   of the algorithms, and, in particular, the presence of various\n   special cases in the code which occur with very low but non-zero\n   probability make it impossible to rule out the possibility of bugs\n   remaining in the program.  DO NOT COMPRESS ANY DATA WITH THIS\n   PROGRAM UNLESS YOU ARE PREPARED TO ACCEPT THE POSSIBILITY, HOWEVER\n   SMALL, THAT THE DATA WILL NOT BE RECOVERABLE.\n\n   That is not to say this program is inherently unreliable.  \n   Indeed, I very much hope the opposite is true.  bzip2/libbzip2 \n   has been carefully constructed and extensively tested.\n\n\nPATENTS:\n\n   To the best of my knowledge, bzip2/libbzip2 does not use any \n   patented algorithms.  However, I do not have the resources \n   to carry out a patent search.  Therefore I cannot give any \n   guarantee of the above statement.\n\n\n\nWHAT'S NEW IN 0.9.0 (as compared to 0.1pl2) ?\n\n   * Approx 10% faster compression, 30% faster decompression\n   * -t (test mode) is a lot quicker\n   * Can decompress concatenated compressed files\n   * Programming interface, so programs can directly read/write .bz2 files\n   * Less restrictive (BSD-style) licensing\n   * Flag handling more compatible with GNU gzip\n   * Much more documentation, i.e., a proper user manual\n   * Hopefully, improved portability (at least of the library)\n\nWHAT'S NEW IN 0.9.5 ?\n\n   * Compression speed is much less sensitive to the input\n     data than in previous versions.  Specifically, the very\n     slow performance caused by repetitive data is fixed.\n   * Many small improvements in file and flag handling.\n   * A Y2K statement.\n\nWHAT'S NEW IN 1.0.0 ?\n\n   See the CHANGES file.\n\nWHAT'S NEW IN 1.0.2 ?\n\n   See the CHANGES file.\n\nWHAT'S NEW IN 1.0.3 ?\n\n   See the CHANGES file.\n\nWHAT'S NEW IN 1.0.4 ?\n\n   See the CHANGES file.\n\nWHAT'S NEW IN 1.0.5 ?\n\n   See the CHANGES file.\n\nWHAT'S NEW IN 1.0.6 ?\n\n   See the CHANGES file.\n\n\nI hope you find bzip2 useful.  Feel free to contact me at\n   jseward@bzip.org\nif you have any suggestions or queries.  Many people mailed me with\ncomments, suggestions and patches after the releases of bzip-0.15,\nbzip-0.21, and bzip2 versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1,\n1.0.2 and 1.0.3, and the changes in bzip2 are largely a result of this\nfeedback.  I thank you for your comments.\n\nbzip2's \"home\" is http://www.bzip.org/\n\nJulian Seward\njseward@bzip.org\nCambridge, UK.\n\n18     July 1996 (version 0.15)\n25   August 1996 (version 0.21)\n 7   August 1997 (bzip2, version 0.1)\n29   August 1997 (bzip2, version 0.1pl2)\n23   August 1998 (bzip2, version 0.9.0)\n 8     June 1999 (bzip2, version 0.9.5)\n 4     Sept 1999 (bzip2, version 0.9.5d)\n 5      May 2000 (bzip2, version 1.0pre8)\n30 December 2001 (bzip2, version 1.0.2pre1)\n15 February 2005 (bzip2, version 1.0.3)\n20 December 2006 (bzip2, version 1.0.4)\n10 December 2007 (bzip2, version 1.0.5)\n 6     Sept 2010 (bzip2, version 1.0.6)\n"
  },
  {
    "path": "external/bzip2/README.COMPILATION.PROBLEMS",
    "content": "------------------------------------------------------------------\nThis file is part of bzip2/libbzip2, a program and library for\nlossless, block-sorting data compression.\n\nbzip2/libbzip2 version 1.0.6 of 6 September 2010\nCopyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\nPlease read the WARNING, DISCLAIMER and PATENTS sections in the \nREADME file.\n\nThis program is released under the terms of the license contained\nin the file LICENSE.\n------------------------------------------------------------------\n\nbzip2-1.0.6 should compile without problems on the vast majority of\nplatforms.  Using the supplied Makefile, I've built and tested it\nmyself for x86-linux and amd64-linux.  With makefile.msc, Visual C++\n6.0 and nmake, you can build a native Win32 version too.  Large file\nsupport seems to work correctly on at least on amd64-linux.\n\nWhen I say \"large file\" I mean a file of size 2,147,483,648 (2^31)\nbytes or above.  Many older OSs can't handle files above this size,\nbut many newer ones can.  Large files are pretty huge -- most files\nyou'll encounter are not Large Files.\n\nEarly versions of bzip2 (0.1, 0.9.0, 0.9.5) compiled on a wide variety\nof platforms without difficulty, and I hope this version will continue\nin that tradition.  However, in order to support large files, I've had\nto include the define -D_FILE_OFFSET_BITS=64 in the Makefile.  This\ncan cause problems.\n\nThe technique of adding -D_FILE_OFFSET_BITS=64 to get large file\nsupport is, as far as I know, the Recommended Way to get correct large\nfile support.  For more details, see the Large File Support\nSpecification, published by the Large File Summit, at\n\n   http://ftp.sas.com/standards/large.file\n\nAs a general comment, if you get compilation errors which you think\nare related to large file support, try removing the above define from\nthe Makefile, ie, delete the line\n\n   BIGFILES=-D_FILE_OFFSET_BITS=64 \n\nfrom the Makefile, and do 'make clean ; make'.  This will give you a\nversion of bzip2 without large file support, which, for most\napplications, is probably not a problem.  \n\nAlternatively, try some of the platform-specific hints listed below.\n\nYou can use the spewG.c program to generate huge files to test bzip2's\nlarge file support, if you are feeling paranoid.  Be aware though that\nany compilation problems which affect bzip2 will also affect spewG.c,\nalas.\n\nAIX: I have reports that for large file support, you need to specify\n-D_LARGE_FILES rather than -D_FILE_OFFSET_BITS=64.  I have not tested\nthis myself.\n"
  },
  {
    "path": "external/bzip2/README.XML.STUFF",
    "content": "  ----------------------------------------------------------------\n  This file is part of bzip2/libbzip2, a program and library for\n  lossless, block-sorting data compression.\n\n  bzip2/libbzip2 version 1.0.6 of 6 September 2010\n  Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n  Please read the WARNING, DISCLAIMER and PATENTS sections in the \n  README file.\n\n  This program is released under the terms of the license contained\n  in the file LICENSE.\n  ----------------------------------------------------------------\n\nThe script xmlproc.sh takes an xml file as input,\nand processes it to create .pdf, .html or .ps output.\nIt uses format.pl, a perl script to format <pre> blocks nicely,\n and add CDATA tags so writers do not have to use eg. &lt; \n\nThe file \"entities.xml\" must be edited to reflect current\nversion, year, etc.\n\n\nUsage:\n\n  ./xmlproc.sh -v manual.xml\n  Validates an xml file to ensure no dtd-compliance errors\n\n  ./xmlproc.sh -html manual.xml\n  Output: manual.html\n\n  ./xmlproc.sh -pdf manual.xml\n  Output: manual.pdf\n\n  ./xmlproc.sh -ps manual.xml\n  Output: manual.ps\n\n\nNotum bene: \n- pdfxmltex barfs if given a filename with an underscore in it\n\n- xmltex won't work yet - there's a bug in passivetex\n    which we are all waiting for Sebastian to fix.\n  So we are going the xml -> pdf -> ps route for the time being,\n    using pdfxmltex.\n"
  },
  {
    "path": "external/bzip2/blocksort.c",
    "content": "\n/*-------------------------------------------------------------*/\n/*--- Block sorting machinery                               ---*/\n/*---                                           blocksort.c ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   Please read the WARNING, DISCLAIMER and PATENTS sections in the \n   README file.\n\n   This program is released under the terms of the license contained\n   in the file LICENSE.\n   ------------------------------------------------------------------ */\n\n\n#include \"bzlib_private.h\"\n\n/*---------------------------------------------*/\n/*--- Fallback O(N log(N)^2) sorting        ---*/\n/*--- algorithm, for repetitive blocks      ---*/\n/*---------------------------------------------*/\n\n/*---------------------------------------------*/\nstatic \n__inline__\nvoid fallbackSimpleSort ( UInt32* fmap, \n                          UInt32* eclass, \n                          Int32   lo, \n                          Int32   hi )\n{\n   Int32 i, j, tmp;\n   UInt32 ec_tmp;\n\n   if (lo == hi) return;\n\n   if (hi - lo > 3) {\n      for ( i = hi-4; i >= lo; i-- ) {\n         tmp = fmap[i];\n         ec_tmp = eclass[tmp];\n         for ( j = i+4; j <= hi && ec_tmp > eclass[fmap[j]]; j += 4 )\n            fmap[j-4] = fmap[j];\n         fmap[j-4] = tmp;\n      }\n   }\n\n   for ( i = hi-1; i >= lo; i-- ) {\n      tmp = fmap[i];\n      ec_tmp = eclass[tmp];\n      for ( j = i+1; j <= hi && ec_tmp > eclass[fmap[j]]; j++ )\n         fmap[j-1] = fmap[j];\n      fmap[j-1] = tmp;\n   }\n}\n\n\n/*---------------------------------------------*/\n#define fswap(zz1, zz2) \\\n   { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; }\n\n#define fvswap(zzp1, zzp2, zzn)       \\\n{                                     \\\n   Int32 yyp1 = (zzp1);               \\\n   Int32 yyp2 = (zzp2);               \\\n   Int32 yyn  = (zzn);                \\\n   while (yyn > 0) {                  \\\n      fswap(fmap[yyp1], fmap[yyp2]);  \\\n      yyp1++; yyp2++; yyn--;          \\\n   }                                  \\\n}\n\n\n#define fmin(a,b) ((a) < (b)) ? (a) : (b)\n\n#define fpush(lz,hz) { stackLo[sp] = lz; \\\n                       stackHi[sp] = hz; \\\n                       sp++; }\n\n#define fpop(lz,hz) { sp--;              \\\n                      lz = stackLo[sp];  \\\n                      hz = stackHi[sp]; }\n\n#define FALLBACK_QSORT_SMALL_THRESH 10\n#define FALLBACK_QSORT_STACK_SIZE   100\n\n\nstatic\nvoid fallbackQSort3 ( UInt32* fmap, \n                      UInt32* eclass,\n                      Int32   loSt, \n                      Int32   hiSt )\n{\n   Int32 unLo, unHi, ltLo, gtHi, n, m;\n   Int32 sp, lo, hi;\n   UInt32 med, r, r3;\n   Int32 stackLo[FALLBACK_QSORT_STACK_SIZE];\n   Int32 stackHi[FALLBACK_QSORT_STACK_SIZE];\n\n   r = 0;\n\n   sp = 0;\n   fpush ( loSt, hiSt );\n\n   while (sp > 0) {\n\n      AssertH ( sp < FALLBACK_QSORT_STACK_SIZE - 1, 1004 );\n\n      fpop ( lo, hi );\n      if (hi - lo < FALLBACK_QSORT_SMALL_THRESH) {\n         fallbackSimpleSort ( fmap, eclass, lo, hi );\n         continue;\n      }\n\n      /* Random partitioning.  Median of 3 sometimes fails to\n         avoid bad cases.  Median of 9 seems to help but \n         looks rather expensive.  This too seems to work but\n         is cheaper.  Guidance for the magic constants \n         7621 and 32768 is taken from Sedgewick's algorithms\n         book, chapter 35.\n      */\n      r = ((r * 7621) + 1) % 32768;\n      r3 = r % 3;\n      if (r3 == 0) med = eclass[fmap[lo]]; else\n      if (r3 == 1) med = eclass[fmap[(lo+hi)>>1]]; else\n                   med = eclass[fmap[hi]];\n\n      unLo = ltLo = lo;\n      unHi = gtHi = hi;\n\n      while (1) {\n         while (1) {\n            if (unLo > unHi) break;\n            n = (Int32)eclass[fmap[unLo]] - (Int32)med;\n            if (n == 0) { \n               fswap(fmap[unLo], fmap[ltLo]); \n               ltLo++; unLo++; \n               continue; \n            };\n            if (n > 0) break;\n            unLo++;\n         }\n         while (1) {\n            if (unLo > unHi) break;\n            n = (Int32)eclass[fmap[unHi]] - (Int32)med;\n            if (n == 0) { \n               fswap(fmap[unHi], fmap[gtHi]); \n               gtHi--; unHi--; \n               continue; \n            };\n            if (n < 0) break;\n            unHi--;\n         }\n         if (unLo > unHi) break;\n         fswap(fmap[unLo], fmap[unHi]); unLo++; unHi--;\n      }\n\n      AssertD ( unHi == unLo-1, \"fallbackQSort3(2)\" );\n\n      if (gtHi < ltLo) continue;\n\n      n = fmin(ltLo-lo, unLo-ltLo); fvswap(lo, unLo-n, n);\n      m = fmin(hi-gtHi, gtHi-unHi); fvswap(unLo, hi-m+1, m);\n\n      n = lo + unLo - ltLo - 1;\n      m = hi - (gtHi - unHi) + 1;\n\n      if (n - lo > hi - m) {\n         fpush ( lo, n );\n         fpush ( m, hi );\n      } else {\n         fpush ( m, hi );\n         fpush ( lo, n );\n      }\n   }\n}\n\n#undef fmin\n#undef fpush\n#undef fpop\n#undef fswap\n#undef fvswap\n#undef FALLBACK_QSORT_SMALL_THRESH\n#undef FALLBACK_QSORT_STACK_SIZE\n\n\n/*---------------------------------------------*/\n/* Pre:\n      nblock > 0\n      eclass exists for [0 .. nblock-1]\n      ((UChar*)eclass) [0 .. nblock-1] holds block\n      ptr exists for [0 .. nblock-1]\n\n   Post:\n      ((UChar*)eclass) [0 .. nblock-1] holds block\n      All other areas of eclass destroyed\n      fmap [0 .. nblock-1] holds sorted order\n      bhtab [ 0 .. 2+(nblock/32) ] destroyed\n*/\n\n#define       SET_BH(zz)  bhtab[(zz) >> 5] |= (1 << ((zz) & 31))\n#define     CLEAR_BH(zz)  bhtab[(zz) >> 5] &= ~(1 << ((zz) & 31))\n#define     ISSET_BH(zz)  (bhtab[(zz) >> 5] & (1 << ((zz) & 31)))\n#define      WORD_BH(zz)  bhtab[(zz) >> 5]\n#define UNALIGNED_BH(zz)  ((zz) & 0x01f)\n\nstatic\nvoid fallbackSort ( UInt32* fmap, \n                    UInt32* eclass, \n                    UInt32* bhtab,\n                    Int32   nblock,\n                    Int32   verb )\n{\n   Int32 ftab[257];\n   Int32 ftabCopy[256];\n   Int32 H, i, j, k, l, r, cc, cc1;\n   Int32 nNotDone;\n   Int32 nBhtab;\n   UChar* eclass8 = (UChar*)eclass;\n\n   /*--\n      Initial 1-char radix sort to generate\n      initial fmap and initial BH bits.\n   --*/\n   if (verb >= 4)\n      VPrintf0 ( \"        bucket sorting ...\\n\" );\n   for (i = 0; i < 257;    i++) ftab[i] = 0;\n   for (i = 0; i < nblock; i++) ftab[eclass8[i]]++;\n   for (i = 0; i < 256;    i++) ftabCopy[i] = ftab[i];\n   for (i = 1; i < 257;    i++) ftab[i] += ftab[i-1];\n\n   for (i = 0; i < nblock; i++) {\n      j = eclass8[i];\n      k = ftab[j] - 1;\n      ftab[j] = k;\n      fmap[k] = i;\n   }\n\n   nBhtab = 2 + (nblock / 32);\n   for (i = 0; i < nBhtab; i++) bhtab[i] = 0;\n   for (i = 0; i < 256; i++) SET_BH(ftab[i]);\n\n   /*--\n      Inductively refine the buckets.  Kind-of an\n      \"exponential radix sort\" (!), inspired by the\n      Manber-Myers suffix array construction algorithm.\n   --*/\n\n   /*-- set sentinel bits for block-end detection --*/\n   for (i = 0; i < 32; i++) { \n      SET_BH(nblock + 2*i);\n      CLEAR_BH(nblock + 2*i + 1);\n   }\n\n   /*-- the log(N) loop --*/\n   H = 1;\n   while (1) {\n\n      if (verb >= 4) \n         VPrintf1 ( \"        depth %6d has \", H );\n\n      j = 0;\n      for (i = 0; i < nblock; i++) {\n         if (ISSET_BH(i)) j = i;\n         k = fmap[i] - H; if (k < 0) k += nblock;\n         eclass[k] = j;\n      }\n\n      nNotDone = 0;\n      r = -1;\n      while (1) {\n\n\t /*-- find the next non-singleton bucket --*/\n         k = r + 1;\n         while (ISSET_BH(k) && UNALIGNED_BH(k)) k++;\n         if (ISSET_BH(k)) {\n            while (WORD_BH(k) == 0xffffffff) k += 32;\n            while (ISSET_BH(k)) k++;\n         }\n         l = k - 1;\n         if (l >= nblock) break;\n         while (!ISSET_BH(k) && UNALIGNED_BH(k)) k++;\n         if (!ISSET_BH(k)) {\n            while (WORD_BH(k) == 0x00000000) k += 32;\n            while (!ISSET_BH(k)) k++;\n         }\n         r = k - 1;\n         if (r >= nblock) break;\n\n         /*-- now [l, r] bracket current bucket --*/\n         if (r > l) {\n            nNotDone += (r - l + 1);\n            fallbackQSort3 ( fmap, eclass, l, r );\n\n            /*-- scan bucket and generate header bits-- */\n            cc = -1;\n            for (i = l; i <= r; i++) {\n               cc1 = eclass[fmap[i]];\n               if (cc != cc1) { SET_BH(i); cc = cc1; };\n            }\n         }\n      }\n\n      if (verb >= 4) \n         VPrintf1 ( \"%6d unresolved strings\\n\", nNotDone );\n\n      H *= 2;\n      if (H > nblock || nNotDone == 0) break;\n   }\n\n   /*-- \n      Reconstruct the original block in\n      eclass8 [0 .. nblock-1], since the\n      previous phase destroyed it.\n   --*/\n   if (verb >= 4)\n      VPrintf0 ( \"        reconstructing block ...\\n\" );\n   j = 0;\n   for (i = 0; i < nblock; i++) {\n      while (ftabCopy[j] == 0) j++;\n      ftabCopy[j]--;\n      eclass8[fmap[i]] = (UChar)j;\n   }\n   AssertH ( j < 256, 1005 );\n}\n\n#undef       SET_BH\n#undef     CLEAR_BH\n#undef     ISSET_BH\n#undef      WORD_BH\n#undef UNALIGNED_BH\n\n\n/*---------------------------------------------*/\n/*--- The main, O(N^2 log(N)) sorting       ---*/\n/*--- algorithm.  Faster for \"normal\"       ---*/\n/*--- non-repetitive blocks.                ---*/\n/*---------------------------------------------*/\n\n/*---------------------------------------------*/\nstatic\n__inline__\nBool mainGtU ( UInt32  i1, \n               UInt32  i2,\n               UChar*  block, \n               UInt16* quadrant,\n               UInt32  nblock,\n               Int32*  budget )\n{\n   Int32  k;\n   UChar  c1, c2;\n   UInt16 s1, s2;\n\n   AssertD ( i1 != i2, \"mainGtU\" );\n   /* 1 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 2 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 3 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 4 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 5 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 6 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 7 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 8 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 9 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 10 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 11 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 12 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n\n   k = nblock + 8;\n\n   do {\n      /* 1 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n      /* 2 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n      /* 3 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n      /* 4 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n      /* 5 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n      /* 6 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n      /* 7 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n      /* 8 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n\n      if (i1 >= nblock) i1 -= nblock;\n      if (i2 >= nblock) i2 -= nblock;\n\n      k -= 8;\n      (*budget)--;\n   }\n      while (k >= 0);\n\n   return False;\n}\n\n\n/*---------------------------------------------*/\n/*--\n   Knuth's increments seem to work better\n   than Incerpi-Sedgewick here.  Possibly\n   because the number of elems to sort is\n   usually small, typically <= 20.\n--*/\nstatic\nInt32 incs[14] = { 1, 4, 13, 40, 121, 364, 1093, 3280,\n                   9841, 29524, 88573, 265720,\n                   797161, 2391484 };\n\nstatic\nvoid mainSimpleSort ( UInt32* ptr,\n                      UChar*  block,\n                      UInt16* quadrant,\n                      Int32   nblock,\n                      Int32   lo, \n                      Int32   hi, \n                      Int32   d,\n                      Int32*  budget )\n{\n   Int32 i, j, h, bigN, hp;\n   UInt32 v;\n\n   bigN = hi - lo + 1;\n   if (bigN < 2) return;\n\n   hp = 0;\n   while (incs[hp] < bigN) hp++;\n   hp--;\n\n   for (; hp >= 0; hp--) {\n      h = incs[hp];\n\n      i = lo + h;\n      while (True) {\n\n         /*-- copy 1 --*/\n         if (i > hi) break;\n         v = ptr[i];\n         j = i;\n         while ( mainGtU ( \n                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget \n                 ) ) {\n            ptr[j] = ptr[j-h];\n            j = j - h;\n            if (j <= (lo + h - 1)) break;\n         }\n         ptr[j] = v;\n         i++;\n\n         /*-- copy 2 --*/\n         if (i > hi) break;\n         v = ptr[i];\n         j = i;\n         while ( mainGtU ( \n                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget \n                 ) ) {\n            ptr[j] = ptr[j-h];\n            j = j - h;\n            if (j <= (lo + h - 1)) break;\n         }\n         ptr[j] = v;\n         i++;\n\n         /*-- copy 3 --*/\n         if (i > hi) break;\n         v = ptr[i];\n         j = i;\n         while ( mainGtU ( \n                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget \n                 ) ) {\n            ptr[j] = ptr[j-h];\n            j = j - h;\n            if (j <= (lo + h - 1)) break;\n         }\n         ptr[j] = v;\n         i++;\n\n         if (*budget < 0) return;\n      }\n   }\n}\n\n\n/*---------------------------------------------*/\n/*--\n   The following is an implementation of\n   an elegant 3-way quicksort for strings,\n   described in a paper \"Fast Algorithms for\n   Sorting and Searching Strings\", by Robert\n   Sedgewick and Jon L. Bentley.\n--*/\n\n#define mswap(zz1, zz2) \\\n   { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; }\n\n#define mvswap(zzp1, zzp2, zzn)       \\\n{                                     \\\n   Int32 yyp1 = (zzp1);               \\\n   Int32 yyp2 = (zzp2);               \\\n   Int32 yyn  = (zzn);                \\\n   while (yyn > 0) {                  \\\n      mswap(ptr[yyp1], ptr[yyp2]);    \\\n      yyp1++; yyp2++; yyn--;          \\\n   }                                  \\\n}\n\nstatic \n__inline__\nUChar mmed3 ( UChar a, UChar b, UChar c )\n{\n   UChar t;\n   if (a > b) { t = a; a = b; b = t; };\n   if (b > c) { \n      b = c;\n      if (a > b) b = a;\n   }\n   return b;\n}\n\n#define mmin(a,b) ((a) < (b)) ? (a) : (b)\n\n#define mpush(lz,hz,dz) { stackLo[sp] = lz; \\\n                          stackHi[sp] = hz; \\\n                          stackD [sp] = dz; \\\n                          sp++; }\n\n#define mpop(lz,hz,dz) { sp--;             \\\n                         lz = stackLo[sp]; \\\n                         hz = stackHi[sp]; \\\n                         dz = stackD [sp]; }\n\n\n#define mnextsize(az) (nextHi[az]-nextLo[az])\n\n#define mnextswap(az,bz)                                        \\\n   { Int32 tz;                                                  \\\n     tz = nextLo[az]; nextLo[az] = nextLo[bz]; nextLo[bz] = tz; \\\n     tz = nextHi[az]; nextHi[az] = nextHi[bz]; nextHi[bz] = tz; \\\n     tz = nextD [az]; nextD [az] = nextD [bz]; nextD [bz] = tz; }\n\n\n#define MAIN_QSORT_SMALL_THRESH 20\n#define MAIN_QSORT_DEPTH_THRESH (BZ_N_RADIX + BZ_N_QSORT)\n#define MAIN_QSORT_STACK_SIZE 100\n\nstatic\nvoid mainQSort3 ( UInt32* ptr,\n                  UChar*  block,\n                  UInt16* quadrant,\n                  Int32   nblock,\n                  Int32   loSt, \n                  Int32   hiSt, \n                  Int32   dSt,\n                  Int32*  budget )\n{\n   Int32 unLo, unHi, ltLo, gtHi, n, m, med;\n   Int32 sp, lo, hi, d;\n\n   Int32 stackLo[MAIN_QSORT_STACK_SIZE];\n   Int32 stackHi[MAIN_QSORT_STACK_SIZE];\n   Int32 stackD [MAIN_QSORT_STACK_SIZE];\n\n   Int32 nextLo[3];\n   Int32 nextHi[3];\n   Int32 nextD [3];\n\n   sp = 0;\n   mpush ( loSt, hiSt, dSt );\n\n   while (sp > 0) {\n\n      AssertH ( sp < MAIN_QSORT_STACK_SIZE - 2, 1001 );\n\n      mpop ( lo, hi, d );\n      if (hi - lo < MAIN_QSORT_SMALL_THRESH || \n          d > MAIN_QSORT_DEPTH_THRESH) {\n         mainSimpleSort ( ptr, block, quadrant, nblock, lo, hi, d, budget );\n         if (*budget < 0) return;\n         continue;\n      }\n\n      med = (Int32) \n            mmed3 ( block[ptr[ lo         ]+d],\n                    block[ptr[ hi         ]+d],\n                    block[ptr[ (lo+hi)>>1 ]+d] );\n\n      unLo = ltLo = lo;\n      unHi = gtHi = hi;\n\n      while (True) {\n         while (True) {\n            if (unLo > unHi) break;\n            n = ((Int32)block[ptr[unLo]+d]) - med;\n            if (n == 0) { \n               mswap(ptr[unLo], ptr[ltLo]); \n               ltLo++; unLo++; continue; \n            };\n            if (n >  0) break;\n            unLo++;\n         }\n         while (True) {\n            if (unLo > unHi) break;\n            n = ((Int32)block[ptr[unHi]+d]) - med;\n            if (n == 0) { \n               mswap(ptr[unHi], ptr[gtHi]); \n               gtHi--; unHi--; continue; \n            };\n            if (n <  0) break;\n            unHi--;\n         }\n         if (unLo > unHi) break;\n         mswap(ptr[unLo], ptr[unHi]); unLo++; unHi--;\n      }\n\n      AssertD ( unHi == unLo-1, \"mainQSort3(2)\" );\n\n      if (gtHi < ltLo) {\n         mpush(lo, hi, d+1 );\n         continue;\n      }\n\n      n = mmin(ltLo-lo, unLo-ltLo); mvswap(lo, unLo-n, n);\n      m = mmin(hi-gtHi, gtHi-unHi); mvswap(unLo, hi-m+1, m);\n\n      n = lo + unLo - ltLo - 1;\n      m = hi - (gtHi - unHi) + 1;\n\n      nextLo[0] = lo;  nextHi[0] = n;   nextD[0] = d;\n      nextLo[1] = m;   nextHi[1] = hi;  nextD[1] = d;\n      nextLo[2] = n+1; nextHi[2] = m-1; nextD[2] = d+1;\n\n      if (mnextsize(0) < mnextsize(1)) mnextswap(0,1);\n      if (mnextsize(1) < mnextsize(2)) mnextswap(1,2);\n      if (mnextsize(0) < mnextsize(1)) mnextswap(0,1);\n\n      AssertD (mnextsize(0) >= mnextsize(1), \"mainQSort3(8)\" );\n      AssertD (mnextsize(1) >= mnextsize(2), \"mainQSort3(9)\" );\n\n      mpush (nextLo[0], nextHi[0], nextD[0]);\n      mpush (nextLo[1], nextHi[1], nextD[1]);\n      mpush (nextLo[2], nextHi[2], nextD[2]);\n   }\n}\n\n#undef mswap\n#undef mvswap\n#undef mpush\n#undef mpop\n#undef mmin\n#undef mnextsize\n#undef mnextswap\n#undef MAIN_QSORT_SMALL_THRESH\n#undef MAIN_QSORT_DEPTH_THRESH\n#undef MAIN_QSORT_STACK_SIZE\n\n\n/*---------------------------------------------*/\n/* Pre:\n      nblock > N_OVERSHOOT\n      block32 exists for [0 .. nblock-1 +N_OVERSHOOT]\n      ((UChar*)block32) [0 .. nblock-1] holds block\n      ptr exists for [0 .. nblock-1]\n\n   Post:\n      ((UChar*)block32) [0 .. nblock-1] holds block\n      All other areas of block32 destroyed\n      ftab [0 .. 65536 ] destroyed\n      ptr [0 .. nblock-1] holds sorted order\n      if (*budget < 0), sorting was abandoned\n*/\n\n#define BIGFREQ(b) (ftab[((b)+1) << 8] - ftab[(b) << 8])\n#define SETMASK (1 << 21)\n#define CLEARMASK (~(SETMASK))\n\nstatic\nvoid mainSort ( UInt32* ptr, \n                UChar*  block,\n                UInt16* quadrant, \n                UInt32* ftab,\n                Int32   nblock,\n                Int32   verb,\n                Int32*  budget )\n{\n   Int32  i, j, k, ss, sb;\n   Int32  runningOrder[256];\n   Bool   bigDone[256];\n   Int32  copyStart[256];\n   Int32  copyEnd  [256];\n   UChar  c1;\n   Int32  numQSorted;\n   UInt16 s;\n   if (verb >= 4) VPrintf0 ( \"        main sort initialise ...\\n\" );\n\n   /*-- set up the 2-byte frequency table --*/\n   for (i = 65536; i >= 0; i--) ftab[i] = 0;\n\n   j = block[0] << 8;\n   i = nblock-1;\n   for (; i >= 3; i -= 4) {\n      quadrant[i] = 0;\n      j = (j >> 8) | ( ((UInt16)block[i]) << 8);\n      ftab[j]++;\n      quadrant[i-1] = 0;\n      j = (j >> 8) | ( ((UInt16)block[i-1]) << 8);\n      ftab[j]++;\n      quadrant[i-2] = 0;\n      j = (j >> 8) | ( ((UInt16)block[i-2]) << 8);\n      ftab[j]++;\n      quadrant[i-3] = 0;\n      j = (j >> 8) | ( ((UInt16)block[i-3]) << 8);\n      ftab[j]++;\n   }\n   for (; i >= 0; i--) {\n      quadrant[i] = 0;\n      j = (j >> 8) | ( ((UInt16)block[i]) << 8);\n      ftab[j]++;\n   }\n\n   /*-- (emphasises close relationship of block & quadrant) --*/\n   for (i = 0; i < BZ_N_OVERSHOOT; i++) {\n      block   [nblock+i] = block[i];\n      quadrant[nblock+i] = 0;\n   }\n\n   if (verb >= 4) VPrintf0 ( \"        bucket sorting ...\\n\" );\n\n   /*-- Complete the initial radix sort --*/\n   for (i = 1; i <= 65536; i++) ftab[i] += ftab[i-1];\n\n   s = block[0] << 8;\n   i = nblock-1;\n   for (; i >= 3; i -= 4) {\n      s = (s >> 8) | (block[i] << 8);\n      j = ftab[s] -1;\n      ftab[s] = j;\n      ptr[j] = i;\n      s = (s >> 8) | (block[i-1] << 8);\n      j = ftab[s] -1;\n      ftab[s] = j;\n      ptr[j] = i-1;\n      s = (s >> 8) | (block[i-2] << 8);\n      j = ftab[s] -1;\n      ftab[s] = j;\n      ptr[j] = i-2;\n      s = (s >> 8) | (block[i-3] << 8);\n      j = ftab[s] -1;\n      ftab[s] = j;\n      ptr[j] = i-3;\n   }\n   for (; i >= 0; i--) {\n      s = (s >> 8) | (block[i] << 8);\n      j = ftab[s] -1;\n      ftab[s] = j;\n      ptr[j] = i;\n   }\n\n   /*--\n      Now ftab contains the first loc of every small bucket.\n      Calculate the running order, from smallest to largest\n      big bucket.\n   --*/\n   for (i = 0; i <= 255; i++) {\n      bigDone     [i] = False;\n      runningOrder[i] = i;\n   }\n\n   {\n      Int32 vv;\n      Int32 h = 1;\n      do h = 3 * h + 1; while (h <= 256);\n      do {\n         h = h / 3;\n         for (i = h; i <= 255; i++) {\n            vv = runningOrder[i];\n            j = i;\n            while ( BIGFREQ(runningOrder[j-h]) > BIGFREQ(vv) ) {\n               runningOrder[j] = runningOrder[j-h];\n               j = j - h;\n               if (j <= (h - 1)) goto zero;\n            }\n            zero:\n            runningOrder[j] = vv;\n         }\n      } while (h != 1);\n   }\n\n   /*--\n      The main sorting loop.\n   --*/\n\n   numQSorted = 0;\n\n   for (i = 0; i <= 255; i++) {\n\n      /*--\n         Process big buckets, starting with the least full.\n         Basically this is a 3-step process in which we call\n         mainQSort3 to sort the small buckets [ss, j], but\n         also make a big effort to avoid the calls if we can.\n      --*/\n      ss = runningOrder[i];\n\n      /*--\n         Step 1:\n         Complete the big bucket [ss] by quicksorting\n         any unsorted small buckets [ss, j], for j != ss.  \n         Hopefully previous pointer-scanning phases have already\n         completed many of the small buckets [ss, j], so\n         we don't have to sort them at all.\n      --*/\n      for (j = 0; j <= 255; j++) {\n         if (j != ss) {\n            sb = (ss << 8) + j;\n            if ( ! (ftab[sb] & SETMASK) ) {\n               Int32 lo = ftab[sb]   & CLEARMASK;\n               Int32 hi = (ftab[sb+1] & CLEARMASK) - 1;\n               if (hi > lo) {\n                  if (verb >= 4)\n                     VPrintf4 ( \"        qsort [0x%x, 0x%x]   \"\n                                \"done %d   this %d\\n\",\n                                ss, j, numQSorted, hi - lo + 1 );\n                  mainQSort3 ( \n                     ptr, block, quadrant, nblock, \n                     lo, hi, BZ_N_RADIX, budget \n                  );   \n                  numQSorted += (hi - lo + 1);\n                  if (*budget < 0) return;\n               }\n            }\n            ftab[sb] |= SETMASK;\n         }\n      }\n\n      AssertH ( !bigDone[ss], 1006 );\n\n      /*--\n         Step 2:\n         Now scan this big bucket [ss] so as to synthesise the\n         sorted order for small buckets [t, ss] for all t,\n         including, magically, the bucket [ss,ss] too.\n         This will avoid doing Real Work in subsequent Step 1's.\n      --*/\n      {\n         for (j = 0; j <= 255; j++) {\n            copyStart[j] =  ftab[(j << 8) + ss]     & CLEARMASK;\n            copyEnd  [j] = (ftab[(j << 8) + ss + 1] & CLEARMASK) - 1;\n         }\n         for (j = ftab[ss << 8] & CLEARMASK; j < copyStart[ss]; j++) {\n            k = ptr[j]-1; if (k < 0) k += nblock;\n            c1 = block[k];\n            if (!bigDone[c1])\n               ptr[ copyStart[c1]++ ] = k;\n         }\n         for (j = (ftab[(ss+1) << 8] & CLEARMASK) - 1; j > copyEnd[ss]; j--) {\n            k = ptr[j]-1; if (k < 0) k += nblock;\n            c1 = block[k];\n            if (!bigDone[c1]) \n               ptr[ copyEnd[c1]-- ] = k;\n         }\n      }\n\n      AssertH ( (copyStart[ss]-1 == copyEnd[ss])\n                || \n                /* Extremely rare case missing in bzip2-1.0.0 and 1.0.1.\n                   Necessity for this case is demonstrated by compressing \n                   a sequence of approximately 48.5 million of character \n                   251; 1.0.0/1.0.1 will then die here. */\n                (copyStart[ss] == 0 && copyEnd[ss] == nblock-1),\n                1007 )\n\n      for (j = 0; j <= 255; j++) ftab[(j << 8) + ss] |= SETMASK;\n\n      /*--\n         Step 3:\n         The [ss] big bucket is now done.  Record this fact,\n         and update the quadrant descriptors.  Remember to\n         update quadrants in the overshoot area too, if\n         necessary.  The \"if (i < 255)\" test merely skips\n         this updating for the last bucket processed, since\n         updating for the last bucket is pointless.\n\n         The quadrant array provides a way to incrementally\n         cache sort orderings, as they appear, so as to \n         make subsequent comparisons in fullGtU() complete\n         faster.  For repetitive blocks this makes a big\n         difference (but not big enough to be able to avoid\n         the fallback sorting mechanism, exponential radix sort).\n\n         The precise meaning is: at all times:\n\n            for 0 <= i < nblock and 0 <= j <= nblock\n\n            if block[i] != block[j], \n\n               then the relative values of quadrant[i] and \n                    quadrant[j] are meaningless.\n\n               else {\n                  if quadrant[i] < quadrant[j]\n                     then the string starting at i lexicographically\n                     precedes the string starting at j\n\n                  else if quadrant[i] > quadrant[j]\n                     then the string starting at j lexicographically\n                     precedes the string starting at i\n\n                  else\n                     the relative ordering of the strings starting\n                     at i and j has not yet been determined.\n               }\n      --*/\n      bigDone[ss] = True;\n\n      if (i < 255) {\n         Int32 bbStart  = ftab[ss << 8] & CLEARMASK;\n         Int32 bbSize   = (ftab[(ss+1) << 8] & CLEARMASK) - bbStart;\n         Int32 shifts   = 0;\n\n         while ((bbSize >> shifts) > 65534) shifts++;\n\n         for (j = bbSize-1; j >= 0; j--) {\n            Int32 a2update     = ptr[bbStart + j];\n            UInt16 qVal        = (UInt16)(j >> shifts);\n            quadrant[a2update] = qVal;\n            if (a2update < BZ_N_OVERSHOOT)\n               quadrant[a2update + nblock] = qVal;\n         }\n         AssertH ( ((bbSize-1) >> shifts) <= 65535, 1002 );\n      }\n\n   }\n\n   if (verb >= 4)\n      VPrintf3 ( \"        %d pointers, %d sorted, %d scanned\\n\",\n                 nblock, numQSorted, nblock - numQSorted );\n}\n\n#undef BIGFREQ\n#undef SETMASK\n#undef CLEARMASK\n\n\n/*---------------------------------------------*/\n/* Pre:\n      nblock > 0\n      arr2 exists for [0 .. nblock-1 +N_OVERSHOOT]\n      ((UChar*)arr2)  [0 .. nblock-1] holds block\n      arr1 exists for [0 .. nblock-1]\n\n   Post:\n      ((UChar*)arr2) [0 .. nblock-1] holds block\n      All other areas of block destroyed\n      ftab [ 0 .. 65536 ] destroyed\n      arr1 [0 .. nblock-1] holds sorted order\n*/\nvoid BZ2_blockSort ( EState* s )\n{\n   UInt32* ptr    = s->ptr; \n   UChar*  block  = s->block;\n   UInt32* ftab   = s->ftab;\n   Int32   nblock = s->nblock;\n   Int32   verb   = s->verbosity;\n   Int32   wfact  = s->workFactor;\n   UInt16* quadrant;\n   Int32   budget;\n   Int32   budgetInit;\n   Int32   i;\n\n   if (nblock < 10000) {\n      fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );\n   } else {\n      /* Calculate the location for quadrant, remembering to get\n         the alignment right.  Assumes that &(block[0]) is at least\n         2-byte aligned -- this should be ok since block is really\n         the first section of arr2.\n      */\n      i = nblock+BZ_N_OVERSHOOT;\n      if (i & 1) i++;\n      quadrant = (UInt16*)(&(block[i]));\n\n      /* (wfact-1) / 3 puts the default-factor-30\n         transition point at very roughly the same place as \n         with v0.1 and v0.9.0.  \n         Not that it particularly matters any more, since the\n         resulting compressed stream is now the same regardless\n         of whether or not we use the main sort or fallback sort.\n      */\n      if (wfact < 1  ) wfact = 1;\n      if (wfact > 100) wfact = 100;\n      budgetInit = nblock * ((wfact-1) / 3);\n      budget = budgetInit;\n\n      mainSort ( ptr, block, quadrant, ftab, nblock, verb, &budget );\n      if (verb >= 3) \n         VPrintf3 ( \"      %d work, %d block, ratio %5.2f\\n\",\n                    budgetInit - budget,\n                    nblock, \n                    (float)(budgetInit - budget) /\n                    (float)(nblock==0 ? 1 : nblock) ); \n      if (budget < 0) {\n         if (verb >= 2) \n            VPrintf0 ( \"    too repetitive; using fallback\"\n                       \" sorting algorithm\\n\" );\n         fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );\n      }\n   }\n\n   s->origPtr = -1;\n   for (i = 0; i < s->nblock; i++)\n      if (ptr[i] == 0)\n         { s->origPtr = i; break; };\n\n   AssertH( s->origPtr != -1, 1003 );\n}\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                       blocksort.c ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "external/bzip2/bz-common.xsl",
    "content": "<?xml version=\"1.0\"?> <!-- -*- sgml -*- -->\n<xsl:stylesheet \n     xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\n\n<!-- we like '1.2 Title' -->\n<xsl:param name=\"section.autolabel\" select=\"'1'\"/> \n<xsl:param name=\"section.label.includes.component.label\" select=\"'1'\"/>\n\n<!-- Do not put 'Chapter' at the start of eg 'Chapter 1. Doing This' -->\n<xsl:param name=\"local.l10n.xml\" select=\"document('')\"/> \n<l:i18n xmlns:l=\"http://docbook.sourceforge.net/xmlns/l10n/1.0\"> \n  <l:l10n language=\"en\"> \n    <l:context name=\"title-numbered\">\n      <l:template name=\"chapter\" text=\"%n.&#160;%t\"/>\n    </l:context> \n  </l:l10n>\n</l:i18n>\n\n<!-- don't generate sub-tocs for qanda sets -->\n<xsl:param name=\"generate.toc\">\nset       toc,title\nbook      toc,title,figure,table,example,equation\nchapter   toc,title\nsection   toc\nsect1     toc\nsect2     toc\nsect3     toc\nsect4     nop\nsect5     nop\nqandaset  toc\nqandadiv  nop\nappendix  toc,title\narticle/appendix  nop\narticle   toc,title\npreface   toc,title\nreference toc,title\n</xsl:param>\n\n</xsl:stylesheet>\n"
  },
  {
    "path": "external/bzip2/bz-fo.xsl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <!-- -*- sgml -*- -->\n<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" \n     xmlns:fo=\"http://www.w3.org/1999/XSL/Format\" version=\"1.0\">\n\n<xsl:import href=\"http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl\"/>\n<xsl:import href=\"bz-common.xsl\"/>\n\n<!-- set indent = yes while debugging, then change to NO -->\n<xsl:output method=\"xml\" indent=\"yes\"/>\n\n<!-- ensure only passivetex extensions are on -->\n<xsl:param name=\"stylesheet.result.type\" select=\"'fo'\"/>\n<!-- fo extensions: PDF bookmarks and index terms -->\n<xsl:param name=\"use.extensions\" select=\"'1'\"/>\n<xsl:param name=\"xep.extensions\" select=\"0\"/>      \n<xsl:param name=\"fop.extensions\" select=\"0\"/>     \n<xsl:param name=\"saxon.extensions\" select=\"0\"/>   \n<xsl:param name=\"passivetex.extensions\" select=\"1\"/>\n<xsl:param name=\"tablecolumns.extension\" select=\"'1'\"/>\n\n<!-- ensure we are using single sided -->\n<xsl:param name=\"double.sided\" select=\"'0'\"/> \n\n<!-- insert cross references to page numbers -->\n<xsl:param name=\"insert.xref.page.number\" select=\"1\"/>\n\n<!-- <?custom-pagebreak?> inserts a page break at this point -->\n<xsl:template match=\"processing-instruction('custom-pagebreak')\">\n  <fo:block break-before='page'/>\n</xsl:template>\n\n<!-- show links in color -->\n<xsl:attribute-set name=\"xref.properties\">\n  <xsl:attribute name=\"color\">blue</xsl:attribute>\n</xsl:attribute-set>\n\n<!-- make pre listings indented a bit + a bg colour -->\n<xsl:template match=\"programlisting | screen\">\n  <fo:block start-indent=\"0.25in\" wrap-option=\"no-wrap\" \n            white-space-collapse=\"false\" text-align=\"start\" \n            font-family=\"monospace\" background-color=\"#f2f2f9\"\n            linefeed-treatment=\"preserve\" \n            xsl:use-attribute-sets=\"normal.para.spacing\">\n    <xsl:apply-templates/>\n  </fo:block>\n</xsl:template>\n<!-- make verbatim output prettier -->\n<xsl:template match=\"literallayout\">\n  <fo:block start-indent=\"0.25in\" wrap-option=\"no-wrap\" \n            white-space-collapse=\"false\" text-align=\"start\" \n            font-family=\"monospace\" background-color=\"#edf7f4\"\n            linefeed-treatment=\"preserve\" \n            space-before=\"0em\" space-after=\"0em\">\n    <xsl:apply-templates/>\n  </fo:block>\n</xsl:template>\n\n<!-- workaround bug in passivetex fo output for itemizedlist -->\n<xsl:template match=\"itemizedlist/listitem\">\n  <xsl:variable name=\"id\">\n  <xsl:call-template name=\"object.id\"/></xsl:variable>\n  <xsl:variable name=\"itemsymbol\">\n    <xsl:call-template name=\"list.itemsymbol\">\n      <xsl:with-param name=\"node\" select=\"parent::itemizedlist\"/>\n    </xsl:call-template>\n  </xsl:variable>\n  <xsl:variable name=\"item.contents\">\n    <fo:list-item-label end-indent=\"label-end()\">\n      <fo:block>\n        <xsl:choose>\n          <xsl:when test=\"$itemsymbol='disc'\">&#x2022;</xsl:when>\n          <xsl:when test=\"$itemsymbol='bullet'\">&#x2022;</xsl:when>\n          <xsl:otherwise>&#x2022;</xsl:otherwise>\n        </xsl:choose>\n      </fo:block>\n    </fo:list-item-label>\n    <fo:list-item-body start-indent=\"body-start()\">\n      <xsl:apply-templates/>    <!-- removed extra block wrapper -->\n    </fo:list-item-body>\n  </xsl:variable>\n  <xsl:choose>\n    <xsl:when test=\"parent::*/@spacing = 'compact'\">\n      <fo:list-item id=\"{$id}\" \n          xsl:use-attribute-sets=\"compact.list.item.spacing\">\n        <xsl:copy-of select=\"$item.contents\"/>\n      </fo:list-item>\n    </xsl:when>\n    <xsl:otherwise>\n      <fo:list-item id=\"{$id}\" xsl:use-attribute-sets=\"list.item.spacing\">\n        <xsl:copy-of select=\"$item.contents\"/>\n      </fo:list-item>\n    </xsl:otherwise>\n  </xsl:choose>\n</xsl:template>\n\n<!-- workaround bug in passivetex fo output for orderedlist -->\n<xsl:template match=\"orderedlist/listitem\">\n  <xsl:variable name=\"id\">\n  <xsl:call-template name=\"object.id\"/></xsl:variable>\n  <xsl:variable name=\"item.contents\">\n    <fo:list-item-label end-indent=\"label-end()\">\n      <fo:block>\n        <xsl:apply-templates select=\".\" mode=\"item-number\"/>\n      </fo:block>\n    </fo:list-item-label>\n    <fo:list-item-body start-indent=\"body-start()\">\n      <xsl:apply-templates/>    <!-- removed extra block wrapper -->\n    </fo:list-item-body>\n  </xsl:variable>\n  <xsl:choose>\n    <xsl:when test=\"parent::*/@spacing = 'compact'\">\n      <fo:list-item id=\"{$id}\" \n          xsl:use-attribute-sets=\"compact.list.item.spacing\">\n        <xsl:copy-of select=\"$item.contents\"/>\n      </fo:list-item>\n    </xsl:when>\n    <xsl:otherwise>\n      <fo:list-item id=\"{$id}\" xsl:use-attribute-sets=\"list.item.spacing\">\n        <xsl:copy-of select=\"$item.contents\"/>\n      </fo:list-item>\n    </xsl:otherwise>\n  </xsl:choose>\n</xsl:template>\n\n<!-- workaround bug in passivetex fo output for variablelist -->\n<xsl:param name=\"variablelist.as.blocks\" select=\"1\"/>\n<xsl:template match=\"varlistentry\" mode=\"vl.as.blocks\">\n  <xsl:variable name=\"id\">\n    <xsl:call-template name=\"object.id\"/></xsl:variable>\n  <fo:block id=\"{$id}\" xsl:use-attribute-sets=\"list.item.spacing\"  \n      keep-together.within-column=\"always\" \n      keep-with-next.within-column=\"always\">\n    <xsl:apply-templates select=\"term\"/>\n  </fo:block>\n  <fo:block start-indent=\"0.5in\" end-indent=\"0in\" \n            space-after.minimum=\"0.2em\" \n            space-after.optimum=\"0.4em\" \n            space-after.maximum=\"0.6em\">\n    <fo:block>\n      <xsl:apply-templates select=\"listitem\"/>\n    </fo:block>\n  </fo:block>\n</xsl:template>\n\n\n<!-- workaround bug in footers: force right-align w/two 80|30 cols -->\n<xsl:template name=\"footer.table\">\n  <xsl:param name=\"pageclass\" select=\"''\"/>\n  <xsl:param name=\"sequence\" select=\"''\"/>\n  <xsl:param name=\"gentext-key\" select=\"''\"/>\n  <xsl:choose>\n    <xsl:when test=\"$pageclass = 'index'\">\n      <xsl:attribute name=\"margin-left\">0pt</xsl:attribute>\n    </xsl:when>\n  </xsl:choose>\n  <xsl:variable name=\"candidate\">\n    <fo:table table-layout=\"fixed\" width=\"100%\">\n      <fo:table-column column-number=\"1\" column-width=\"80%\"/>\n      <fo:table-column column-number=\"2\" column-width=\"20%\"/>\n      <fo:table-body>\n        <fo:table-row height=\"14pt\">\n          <fo:table-cell text-align=\"left\" display-align=\"after\">\n            <xsl:attribute name=\"relative-align\">baseline</xsl:attribute>\n            <fo:block> \n              <fo:block> </fo:block><!-- empty cell -->\n            </fo:block>\n          </fo:table-cell>\n          <fo:table-cell text-align=\"center\" display-align=\"after\">\n            <xsl:attribute name=\"relative-align\">baseline</xsl:attribute>\n            <fo:block>\n              <xsl:call-template name=\"footer.content\">\n                <xsl:with-param name=\"pageclass\" select=\"$pageclass\"/>\n                <xsl:with-param name=\"sequence\" select=\"$sequence\"/>\n                <xsl:with-param name=\"position\" select=\"'center'\"/>\n                <xsl:with-param name=\"gentext-key\" select=\"$gentext-key\"/>\n              </xsl:call-template>\n            </fo:block>\n          </fo:table-cell>\n        </fo:table-row>\n      </fo:table-body>\n    </fo:table>\n  </xsl:variable>\n  <!-- Really output a footer? -->\n  <xsl:choose>\n    <xsl:when test=\"$pageclass='titlepage' and $gentext-key='book'\n                    and $sequence='first'\">\n      <!-- no, book titlepages have no footers at all -->\n    </xsl:when>\n    <xsl:when test=\"$sequence = 'blank' and $footers.on.blank.pages = 0\">\n      <!-- no output -->\n    </xsl:when>\n    <xsl:otherwise>\n      <xsl:copy-of select=\"$candidate\"/>\n    </xsl:otherwise>\n  </xsl:choose>\n</xsl:template>\n\n\n<!-- fix bug in headers: force right-align w/two 40|60 cols -->\n<xsl:template name=\"header.table\">\n  <xsl:param name=\"pageclass\" select=\"''\"/>\n  <xsl:param name=\"sequence\" select=\"''\"/>\n  <xsl:param name=\"gentext-key\" select=\"''\"/>\n  <xsl:choose>\n    <xsl:when test=\"$pageclass = 'index'\">\n      <xsl:attribute name=\"margin-left\">0pt</xsl:attribute>\n    </xsl:when>\n  </xsl:choose>\n  <xsl:variable name=\"candidate\">\n    <fo:table table-layout=\"fixed\" width=\"100%\">\n      <xsl:call-template name=\"head.sep.rule\">\n        <xsl:with-param name=\"pageclass\" select=\"$pageclass\"/>\n        <xsl:with-param name=\"sequence\" select=\"$sequence\"/>\n        <xsl:with-param name=\"gentext-key\" select=\"$gentext-key\"/>\n      </xsl:call-template>\n      <fo:table-column column-number=\"1\" column-width=\"40%\"/>\n      <fo:table-column column-number=\"2\" column-width=\"60%\"/>\n      <fo:table-body>\n        <fo:table-row height=\"14pt\">\n          <fo:table-cell text-align=\"left\" display-align=\"before\">\n            <xsl:attribute name=\"relative-align\">baseline</xsl:attribute>\n            <fo:block>\n              <fo:block> </fo:block><!-- empty cell -->\n            </fo:block>\n          </fo:table-cell>\n          <fo:table-cell text-align=\"center\" display-align=\"before\">\n            <xsl:attribute name=\"relative-align\">baseline</xsl:attribute>\n            <fo:block>\n              <xsl:call-template name=\"header.content\">\n                <xsl:with-param name=\"pageclass\" select=\"$pageclass\"/>\n                <xsl:with-param name=\"sequence\" select=\"$sequence\"/>\n                <xsl:with-param name=\"position\" select=\"'center'\"/>\n                <xsl:with-param name=\"gentext-key\" select=\"$gentext-key\"/>\n              </xsl:call-template>\n            </fo:block>\n          </fo:table-cell>\n        </fo:table-row>\n      </fo:table-body>\n    </fo:table>\n  </xsl:variable>\n  <!-- Really output a header? -->\n  <xsl:choose>\n    <xsl:when test=\"$pageclass = 'titlepage' and $gentext-key = 'book'\n                    and $sequence='first'\">\n      <!-- no, book titlepages have no headers at all -->\n    </xsl:when>\n    <xsl:when test=\"$sequence = 'blank' and $headers.on.blank.pages = 0\">\n      <!-- no output -->\n    </xsl:when>\n    <xsl:otherwise>\n      <xsl:copy-of select=\"$candidate\"/>\n    </xsl:otherwise>\n  </xsl:choose>\n</xsl:template>\n\n\n<!-- Bug-fix for Suse 10 PassiveTex version -->\n<!-- Precompute attribute values 'cos PassiveTex is too stupid: -->\n<xsl:attribute-set name=\"component.title.properties\">\n  <xsl:attribute name=\"keep-with-next.within-column\">always</xsl:attribute>\n  <xsl:attribute name=\"space-before.optimum\">\n    <xsl:value-of select=\"concat($body.font.master, 'pt')\"/>\n  </xsl:attribute>\n  <xsl:attribute name=\"space-before.minimum\">\n    <xsl:value-of select=\"$body.font.master * 0.8\"/>\n    <xsl:text>pt</xsl:text>\n  </xsl:attribute>\n  <xsl:attribute name=\"space-before.maximum\">\n    <xsl:value-of select=\"$body.font.master * 1.2\"/>\n    <xsl:text>pt</xsl:text>\n  </xsl:attribute>\n  <xsl:attribute name=\"hyphenate\">false</xsl:attribute>\n</xsl:attribute-set>\n\n\n</xsl:stylesheet>\n"
  },
  {
    "path": "external/bzip2/bz-html.xsl",
    "content": "<?xml version=\"1.0\"?> <!-- -*- sgml -*- -->\n<!DOCTYPE xsl:stylesheet [ <!ENTITY bz-css SYSTEM \"./bzip.css\"> ]>\n\n<xsl:stylesheet \n   xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\n\n<xsl:import href=\"http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl\"/>\n<xsl:import href=\"bz-common.xsl\"/>\n\n<!-- use 8859-1 encoding -->\n<xsl:output method=\"html\" encoding=\"ISO-8859-1\" indent=\"yes\"/>\n\n<!-- we include the css directly when generating one large file -->\n<xsl:template name=\"user.head.content\">  \n  <style type=\"text/css\" media=\"screen\">\n    <xsl:text>&bz-css;</xsl:text>\n  </style>\n</xsl:template>\n\n</xsl:stylesheet>\n"
  },
  {
    "path": "external/bzip2/bzdiff",
    "content": "#!/bin/sh\n# sh is buggy on RS/6000 AIX 3.2. Replace above line with #!/bin/ksh\n\n# Bzcmp/diff wrapped for bzip2, \n# adapted from zdiff by Philippe Troin <phil@fifi.org> for Debian GNU/Linux.\n\n# Bzcmp and bzdiff are used to invoke the cmp or the  diff  pro-\n# gram  on compressed files.  All options specified are passed\n# directly to cmp or diff.  If only 1 file is specified,  then\n# the  files  compared  are file1 and an uncompressed file1.gz.\n# If two files are specified, then they are  uncompressed  (if\n# necessary) and fed to cmp or diff.  The exit status from cmp\n# or diff is preserved.\n\nPATH=\"/usr/bin:/bin:$PATH\"; export PATH\nprog=`echo $0 | sed 's|.*/||'`\ncase \"$prog\" in\n  *cmp) comp=${CMP-cmp}   ;;\n  *)    comp=${DIFF-diff} ;;\nesac\n\nOPTIONS=\nFILES=\nfor ARG\ndo\n    case \"$ARG\" in\n    -*)\tOPTIONS=\"$OPTIONS $ARG\";;\n     *)\tif test -f \"$ARG\"; then\n            FILES=\"$FILES $ARG\"\n        else\n            echo \"${prog}: $ARG not found or not a regular file\"\n\t    exit 1\n        fi ;;\n    esac\ndone\nif test -z \"$FILES\"; then\n\techo \"Usage: $prog [${comp}_options] file [file]\"\n\texit 1\nfi\ntmp=`mktemp ${TMPDIR:-/tmp}/bzdiff.XXXXXXXXXX` || {\n      echo 'cannot create a temporary file' >&2\n      exit 1\n}\nset $FILES\nif test $# -eq 1; then\n\tFILE=`echo \"$1\" | sed 's/.bz2$//'`\n\tbzip2 -cd \"$FILE.bz2\" | $comp $OPTIONS - \"$FILE\"\n\tSTAT=\"$?\"\n\nelif test $# -eq 2; then\n\tcase \"$1\" in\n        *.bz2)\n                case \"$2\" in\n\t        *.bz2)\n\t\t\tF=`echo \"$2\" | sed 's|.*/||;s|.bz2$||'`\n                        bzip2 -cdfq \"$2\" > $tmp\n                        bzip2 -cdfq \"$1\" | $comp $OPTIONS - $tmp\n                        STAT=\"$?\"\n\t\t\t/bin/rm -f $tmp;;\n\n                *)      bzip2 -cdfq \"$1\" | $comp $OPTIONS - \"$2\"\n                        STAT=\"$?\";;\n                esac;;\n        *)      case \"$2\" in\n\t        *.bz2)\n                        bzip2 -cdfq \"$2\" | $comp $OPTIONS \"$1\" -\n                        STAT=\"$?\";;\n                *)      $comp $OPTIONS \"$1\" \"$2\"\n                        STAT=\"$?\";;\n                esac;;\n\tesac\n        exit \"$STAT\"\nelse\n\techo \"Usage: $prog [${comp}_options] file [file]\"\n\texit 1\nfi\n"
  },
  {
    "path": "external/bzip2/bzdiff.1",
    "content": "\\\"Shamelessly copied from zmore.1 by Philippe Troin <phil@fifi.org>\n\\\"for Debian GNU/Linux\n.TH BZDIFF 1\n.SH NAME\nbzcmp, bzdiff \\- compare bzip2 compressed files\n.SH SYNOPSIS\n.B bzcmp\n[ cmp_options ] file1\n[ file2 ]\n.br\n.B bzdiff\n[ diff_options ] file1\n[ file2 ]\n.SH DESCRIPTION\n.I  Bzcmp\nand \n.I bzdiff\nare used to invoke the\n.I cmp\nor the\n.I diff\nprogram on bzip2 compressed files.  All options specified are passed\ndirectly to\n.I cmp\nor\n.IR diff \".\"\nIf only 1 file is specified, then the files compared are\n.I file1\nand an uncompressed\n.IR file1 \".bz2.\"\nIf two files are specified, then they are uncompressed if necessary and fed to\n.I cmp\nor\n.IR diff \".\"\nThe exit status from \n.I cmp\nor\n.I diff\nis preserved.\n.SH \"SEE ALSO\"\ncmp(1), diff(1), bzmore(1), bzless(1), bzgrep(1), bzip2(1)\n.SH BUGS\nMessages from the\n.I cmp\nor\n.I diff\nprograms refer to temporary filenames instead of those specified.\n"
  },
  {
    "path": "external/bzip2/bzgrep",
    "content": "#!/bin/sh\n\n# Bzgrep wrapped for bzip2, \n# adapted from zgrep by Philippe Troin <phil@fifi.org> for Debian GNU/Linux.\n## zgrep notice:\n## zgrep -- a wrapper around a grep program that decompresses files as needed\n## Adapted from a version sent by Charles Levert <charles@comm.polymtl.ca>\n\nPATH=\"/usr/bin:$PATH\"; export PATH\n\nprog=`echo $0 | sed 's|.*/||'`\ncase \"$prog\" in\n\t*egrep)\tgrep=${EGREP-egrep}\t;;\n\t*fgrep)\tgrep=${FGREP-fgrep}\t;;\n\t*)\tgrep=${GREP-grep}\t;;\nesac\npat=\"\"\nwhile test $# -ne 0; do\n  case \"$1\" in\n  -e | -f) opt=\"$opt $1\"; shift; pat=\"$1\"\n           if test \"$grep\" = grep; then  # grep is buggy with -e on SVR4\n             grep=egrep\n           fi;;\n  -A | -B) opt=\"$opt $1 $2\"; shift;;\n  -*)\t   opt=\"$opt $1\";;\n   *)      if test -z \"$pat\"; then\n\t     pat=\"$1\"\n\t   else\n\t     break;\n           fi;;\n  esac\n  shift\ndone\n\nif test -z \"$pat\"; then\n  echo \"grep through bzip2 files\"\n  echo \"usage: $prog [grep_options] pattern [files]\"\n  exit 1\nfi\n\nlist=0\nsilent=0\nop=`echo \"$opt\" | sed -e 's/ //g' -e 's/-//g'`\ncase \"$op\" in\n  *l*) list=1\nesac\ncase \"$op\" in\n  *h*) silent=1\nesac\n\nif test $# -eq 0; then\n  bzip2 -cdfq | $grep $opt \"$pat\"\n  exit $?\nfi\n\nres=0\nfor i do\n  if test -f \"$i\"; then :; else if test -f \"$i.bz2\"; then i=\"$i.bz2\"; fi; fi\n  if test $list -eq 1; then\n    bzip2 -cdfq \"$i\" | $grep $opt \"$pat\" 2>&1 > /dev/null && echo $i\n    r=$?\n  elif test $# -eq 1 -o $silent -eq 1; then\n    bzip2 -cdfq \"$i\" | $grep $opt \"$pat\"\n    r=$?\n  else\n    j=${i//\\\\/\\\\\\\\}\n    j=${j//|/\\\\|}\n    j=${j//&/\\\\&}\n    j=`printf \"%s\" \"$j\" | tr '\\n' ' '`\n    bzip2 -cdfq \"$i\" | $grep $opt \"$pat\" | sed \"s|^|${j}:|\"\n    r=$?\n  fi\n  test \"$r\" -ne 0 && res=\"$r\"\ndone\nexit $res\n"
  },
  {
    "path": "external/bzip2/bzgrep.1",
    "content": "\\\"Shamelessly copied from zmore.1 by Philippe Troin <phil@fifi.org>\n\\\"for Debian GNU/Linux\n.TH BZGREP 1\n.SH NAME\nbzgrep, bzfgrep, bzegrep \\- search possibly bzip2 compressed files for a regular expression\n.SH SYNOPSIS\n.B bzgrep\n[ grep_options ]\n.BI  [\\ -e\\ ] \" pattern\"\n.IR filename \".\\|.\\|.\"\n.br\n.B bzegrep\n[ egrep_options ]\n.BI  [\\ -e\\ ] \" pattern\"\n.IR filename \".\\|.\\|.\"\n.br\n.B bzfgrep\n[ fgrep_options ]\n.BI  [\\ -e\\ ] \" pattern\"\n.IR filename \".\\|.\\|.\"\n.SH DESCRIPTION\n.IR  Bzgrep\nis used to invoke the\n.I grep\non bzip2-compressed files. All options specified are passed directly to\n.I grep.\nIf no file is specified, then the standard input is decompressed\nif necessary and fed to grep.\nOtherwise the given files are uncompressed if necessary and fed to\n.I grep.\n.PP\nIf\n.I bzgrep\nis invoked as\n.I bzegrep\nor\n.I bzfgrep\nthen\n.I egrep\nor\n.I fgrep\nis used instead of\n.I grep.\nIf the GREP environment variable is set,\n.I bzgrep\nuses it as the\n.I grep\nprogram to be invoked. For example:\n\n    for sh:  GREP=fgrep  bzgrep string files\n    for csh: (setenv GREP fgrep; bzgrep string files)\n.SH AUTHOR\nCharles Levert (charles@comm.polymtl.ca). Adapted to bzip2 by Philippe\nTroin <phil@fifi.org> for Debian GNU/Linux.\n.SH \"SEE ALSO\"\ngrep(1), egrep(1), fgrep(1), bzdiff(1), bzmore(1), bzless(1), bzip2(1)\n"
  },
  {
    "path": "external/bzip2/bzip.css",
    "content": "/* Colours:\n#74240f  dark brown      h1, h2, h3, h4\n#336699  medium blue     links\n#339999  turquoise       link hover colour\n#202020  almost black    general text\n#761596  purple          md5sum text\n#626262  dark gray       pre border\n#eeeeee  very light gray pre background\n#f2f2f9  very light blue nav table background\n#3366cc  medium blue     nav table border\n*/\n\na, a:link, a:visited, a:active { color: #336699; }\na:hover { color: #339999; }\n\nbody { font: 80%/126% sans-serif; }\nh1, h2, h3, h4 { color: #74240f; }\n\ndt { color: #336699; font-weight: bold }\ndd { \n margin-left: 1.5em; \n padding-bottom: 0.8em;\n}\n\n/* -- ruler -- */\ndiv.hr_blue { \n  height:  3px; \n  background:#ffffff url(\"/images/hr_blue.png\") repeat-x; }\ndiv.hr_blue hr { display:none; }\n\n/* release styles */\n#release p { margin-top: 0.4em; }\n#release .md5sum { color: #761596; }\n\n\n/* ------ styles for docs|manuals|howto ------ */\n/* -- lists -- */\nul  { \n margin:     0px 4px 16px 16px;\n padding:    0px;\n list-style: url(\"/images/li-blue.png\"); \n}\nul li { \n margin-bottom: 10px;\n}\nul ul\t{ \n list-style-type:  none; \n list-style-image: none; \n margin-left:      0px; \n}\n\n/* header / footer nav tables */\ntable.nav {\n border:     solid 1px #3366cc;\n background: #f2f2f9;\n background-color: #f2f2f9;\n margin-bottom: 0.5em;\n}\n/* don't have underlined links in chunked nav menus */\ntable.nav a { text-decoration: none; }\ntable.nav a:hover { text-decoration: underline; }\ntable.nav td { font-size: 85%; }\n\ncode, tt, pre { font-size: 120%; }\ncode, tt { color: #761596; }\n\ndiv.literallayout, pre.programlisting, pre.screen {\n color:      #000000;\n padding:    0.5em;\n background: #eeeeee;\n border:     1px solid #626262;\n background-color: #eeeeee;\n margin: 4px 0px 4px 0px; \n}\n"
  },
  {
    "path": "external/bzip2/bzip2.1",
    "content": ".PU\n.TH bzip2 1\n.SH NAME\nbzip2, bunzip2 \\- a block-sorting file compressor, v1.0.6\n.br\nbzcat \\- decompresses files to stdout\n.br\nbzip2recover \\- recovers data from damaged bzip2 files\n\n.SH SYNOPSIS\n.ll +8\n.B bzip2\n.RB [ \" \\-cdfkqstvzVL123456789 \" ]\n[\n.I \"filenames \\&...\"\n]\n.ll -8\n.br\n.B bunzip2\n.RB [ \" \\-fkvsVL \" ]\n[ \n.I \"filenames \\&...\"\n]\n.br\n.B bzcat\n.RB [ \" \\-s \" ]\n[ \n.I \"filenames \\&...\"\n]\n.br\n.B bzip2recover\n.I \"filename\"\n\n.SH DESCRIPTION\n.I bzip2\ncompresses files using the Burrows-Wheeler block sorting\ntext compression algorithm, and Huffman coding.  Compression is\ngenerally considerably better than that achieved by more conventional\nLZ77/LZ78-based compressors, and approaches the performance of the PPM\nfamily of statistical compressors.\n\nThe command-line options are deliberately very similar to \nthose of \n.I GNU gzip, \nbut they are not identical.\n\n.I bzip2\nexpects a list of file names to accompany the\ncommand-line flags.  Each file is replaced by a compressed version of\nitself, with the name \"original_name.bz2\".  \nEach compressed file\nhas the same modification date, permissions, and, when possible,\nownership as the corresponding original, so that these properties can\nbe correctly restored at decompression time.  File name handling is\nnaive in the sense that there is no mechanism for preserving original\nfile names, permissions, ownerships or dates in filesystems which lack\nthese concepts, or have serious file name length restrictions, such as\nMS-DOS.\n\n.I bzip2\nand\n.I bunzip2\nwill by default not overwrite existing\nfiles.  If you want this to happen, specify the \\-f flag.\n\nIf no file names are specified,\n.I bzip2\ncompresses from standard\ninput to standard output.  In this case,\n.I bzip2\nwill decline to\nwrite compressed output to a terminal, as this would be entirely\nincomprehensible and therefore pointless.\n\n.I bunzip2\n(or\n.I bzip2 \\-d) \ndecompresses all\nspecified files.  Files which were not created by \n.I bzip2\nwill be detected and ignored, and a warning issued.  \n.I bzip2\nattempts to guess the filename for the decompressed file \nfrom that of the compressed file as follows:\n\n       filename.bz2    becomes   filename\n       filename.bz     becomes   filename\n       filename.tbz2   becomes   filename.tar\n       filename.tbz    becomes   filename.tar\n       anyothername    becomes   anyothername.out\n\nIf the file does not end in one of the recognised endings, \n.I .bz2, \n.I .bz, \n.I .tbz2\nor\n.I .tbz, \n.I bzip2 \ncomplains that it cannot\nguess the name of the original file, and uses the original name\nwith\n.I .out\nappended.\n\nAs with compression, supplying no\nfilenames causes decompression from \nstandard input to standard output.\n\n.I bunzip2 \nwill correctly decompress a file which is the\nconcatenation of two or more compressed files.  The result is the\nconcatenation of the corresponding uncompressed files.  Integrity\ntesting (\\-t) \nof concatenated \ncompressed files is also supported.\n\nYou can also compress or decompress files to the standard output by\ngiving the \\-c flag.  Multiple files may be compressed and\ndecompressed like this.  The resulting outputs are fed sequentially to\nstdout.  Compression of multiple files \nin this manner generates a stream\ncontaining multiple compressed file representations.  Such a stream\ncan be decompressed correctly only by\n.I bzip2 \nversion 0.9.0 or\nlater.  Earlier versions of\n.I bzip2\nwill stop after decompressing\nthe first file in the stream.\n\n.I bzcat\n(or\n.I bzip2 -dc) \ndecompresses all specified files to\nthe standard output.\n\n.I bzip2\nwill read arguments from the environment variables\n.I BZIP2\nand\n.I BZIP,\nin that order, and will process them\nbefore any arguments read from the command line.  This gives a \nconvenient way to supply default arguments.\n\nCompression is always performed, even if the compressed \nfile is slightly\nlarger than the original.  Files of less than about one hundred bytes\ntend to get larger, since the compression mechanism has a constant\noverhead in the region of 50 bytes.  Random data (including the output\nof most file compressors) is coded at about 8.05 bits per byte, giving\nan expansion of around 0.5%.\n\nAs a self-check for your protection, \n.I \nbzip2\nuses 32-bit CRCs to\nmake sure that the decompressed version of a file is identical to the\noriginal.  This guards against corruption of the compressed data, and\nagainst undetected bugs in\n.I bzip2\n(hopefully very unlikely).  The\nchances of data corruption going undetected is microscopic, about one\nchance in four billion for each file processed.  Be aware, though, that\nthe check occurs upon decompression, so it can only tell you that\nsomething is wrong.  It can't help you \nrecover the original uncompressed\ndata.  You can use \n.I bzip2recover\nto try to recover data from\ndamaged files.\n\nReturn values: 0 for a normal exit, 1 for environmental problems (file\nnot found, invalid flags, I/O errors, &c), 2 to indicate a corrupt\ncompressed file, 3 for an internal consistency error (eg, bug) which\ncaused\n.I bzip2\nto panic.\n\n.SH OPTIONS\n.TP\n.B \\-c --stdout\nCompress or decompress to standard output.\n.TP\n.B \\-d --decompress\nForce decompression.  \n.I bzip2, \n.I bunzip2 \nand\n.I bzcat \nare\nreally the same program, and the decision about what actions to take is\ndone on the basis of which name is used.  This flag overrides that\nmechanism, and forces \n.I bzip2\nto decompress.\n.TP\n.B \\-z --compress\nThe complement to \\-d: forces compression, regardless of the\ninvocation name.\n.TP\n.B \\-t --test\nCheck integrity of the specified file(s), but don't decompress them.\nThis really performs a trial decompression and throws away the result.\n.TP\n.B \\-f --force\nForce overwrite of output files.  Normally,\n.I bzip2 \nwill not overwrite\nexisting output files.  Also forces \n.I bzip2 \nto break hard links\nto files, which it otherwise wouldn't do.\n\nbzip2 normally declines to decompress files which don't have the\ncorrect magic header bytes.  If forced (-f), however, it will pass\nsuch files through unmodified.  This is how GNU gzip behaves.\n.TP\n.B \\-k --keep\nKeep (don't delete) input files during compression\nor decompression.\n.TP\n.B \\-s --small\nReduce memory usage, for compression, decompression and testing.  Files\nare decompressed and tested using a modified algorithm which only\nrequires 2.5 bytes per block byte.  This means any file can be\ndecompressed in 2300k of memory, albeit at about half the normal speed.\n\nDuring compression, \\-s selects a block size of 200k, which limits\nmemory use to around the same figure, at the expense of your compression\nratio.  In short, if your machine is low on memory (8 megabytes or\nless), use \\-s for everything.  See MEMORY MANAGEMENT below.\n.TP\n.B \\-q --quiet\nSuppress non-essential warning messages.  Messages pertaining to\nI/O errors and other critical events will not be suppressed.\n.TP\n.B \\-v --verbose\nVerbose mode -- show the compression ratio for each file processed.\nFurther \\-v's increase the verbosity level, spewing out lots of\ninformation which is primarily of interest for diagnostic purposes.\n.TP\n.B \\-L --license -V --version\nDisplay the software version, license terms and conditions.\n.TP\n.B \\-1 (or \\-\\-fast) to \\-9 (or \\-\\-best)\nSet the block size to 100 k, 200 k ..  900 k when compressing.  Has no\neffect when decompressing.  See MEMORY MANAGEMENT below.\nThe \\-\\-fast and \\-\\-best aliases are primarily for GNU gzip \ncompatibility.  In particular, \\-\\-fast doesn't make things\nsignificantly faster.  \nAnd \\-\\-best merely selects the default behaviour.\n.TP\n.B \\--\nTreats all subsequent arguments as file names, even if they start\nwith a dash.  This is so you can handle files with names beginning\nwith a dash, for example: bzip2 \\-- \\-myfilename.\n.TP\n.B \\--repetitive-fast --repetitive-best\nThese flags are redundant in versions 0.9.5 and above.  They provided\nsome coarse control over the behaviour of the sorting algorithm in\nearlier versions, which was sometimes useful.  0.9.5 and above have an\nimproved algorithm which renders these flags irrelevant.\n\n.SH MEMORY MANAGEMENT\n.I bzip2 \ncompresses large files in blocks.  The block size affects\nboth the compression ratio achieved, and the amount of memory needed for\ncompression and decompression.  The flags \\-1 through \\-9\nspecify the block size to be 100,000 bytes through 900,000 bytes (the\ndefault) respectively.  At decompression time, the block size used for\ncompression is read from the header of the compressed file, and\n.I bunzip2\nthen allocates itself just enough memory to decompress\nthe file.  Since block sizes are stored in compressed files, it follows\nthat the flags \\-1 to \\-9 are irrelevant to and so ignored\nduring decompression.\n\nCompression and decompression requirements, \nin bytes, can be estimated as:\n\n       Compression:   400k + ( 8 x block size )\n\n       Decompression: 100k + ( 4 x block size ), or\n                      100k + ( 2.5 x block size )\n\nLarger block sizes give rapidly diminishing marginal returns.  Most of\nthe compression comes from the first two or three hundred k of block\nsize, a fact worth bearing in mind when using\n.I bzip2\non small machines.\nIt is also important to appreciate that the decompression memory\nrequirement is set at compression time by the choice of block size.\n\nFor files compressed with the default 900k block size,\n.I bunzip2\nwill require about 3700 kbytes to decompress.  To support decompression\nof any file on a 4 megabyte machine, \n.I bunzip2\nhas an option to\ndecompress using approximately half this amount of memory, about 2300\nkbytes.  Decompression speed is also halved, so you should use this\noption only where necessary.  The relevant flag is -s.\n\nIn general, try and use the largest block size memory constraints allow,\nsince that maximises the compression achieved.  Compression and\ndecompression speed are virtually unaffected by block size.\n\nAnother significant point applies to files which fit in a single block\n-- that means most files you'd encounter using a large block size.  The\namount of real memory touched is proportional to the size of the file,\nsince the file is smaller than a block.  For example, compressing a file\n20,000 bytes long with the flag -9 will cause the compressor to\nallocate around 7600k of memory, but only touch 400k + 20000 * 8 = 560\nkbytes of it.  Similarly, the decompressor will allocate 3700k but only\ntouch 100k + 20000 * 4 = 180 kbytes.\n\nHere is a table which summarises the maximum memory usage for different\nblock sizes.  Also recorded is the total compressed size for 14 files of\nthe Calgary Text Compression Corpus totalling 3,141,622 bytes.  This\ncolumn gives some feel for how compression varies with block size.\nThese figures tend to understate the advantage of larger block sizes for\nlarger files, since the Corpus is dominated by smaller files.\n\n           Compress   Decompress   Decompress   Corpus\n    Flag     usage      usage       -s usage     Size\n\n     -1      1200k       500k         350k      914704\n     -2      2000k       900k         600k      877703\n     -3      2800k      1300k         850k      860338\n     -4      3600k      1700k        1100k      846899\n     -5      4400k      2100k        1350k      845160\n     -6      5200k      2500k        1600k      838626\n     -7      6100k      2900k        1850k      834096\n     -8      6800k      3300k        2100k      828642\n     -9      7600k      3700k        2350k      828642\n\n.SH RECOVERING DATA FROM DAMAGED FILES\n.I bzip2\ncompresses files in blocks, usually 900kbytes long.  Each\nblock is handled independently.  If a media or transmission error causes\na multi-block .bz2\nfile to become damaged, it may be possible to\nrecover data from the undamaged blocks in the file.\n\nThe compressed representation of each block is delimited by a 48-bit\npattern, which makes it possible to find the block boundaries with\nreasonable certainty.  Each block also carries its own 32-bit CRC, so\ndamaged blocks can be distinguished from undamaged ones.\n\n.I bzip2recover\nis a simple program whose purpose is to search for\nblocks in .bz2 files, and write each block out into its own .bz2 \nfile.  You can then use\n.I bzip2 \n\\-t\nto test the\nintegrity of the resulting files, and decompress those which are\nundamaged.\n\n.I bzip2recover\ntakes a single argument, the name of the damaged file, \nand writes a number of files \"rec00001file.bz2\",\n\"rec00002file.bz2\", etc, containing the  extracted  blocks.\nThe  output  filenames  are  designed  so  that the use of\nwildcards in subsequent processing -- for example,  \n\"bzip2 -dc  rec*file.bz2 > recovered_data\" -- processes the files in\nthe correct order.\n\n.I bzip2recover\nshould be of most use dealing with large .bz2\nfiles,  as  these will contain many blocks.  It is clearly\nfutile to use it on damaged single-block  files,  since  a\ndamaged  block  cannot  be recovered.  If you wish to minimise \nany potential data loss through media  or  transmission errors, \nyou might consider compressing with a smaller\nblock size.\n\n.SH PERFORMANCE NOTES\nThe sorting phase of compression gathers together similar strings in the\nfile.  Because of this, files containing very long runs of repeated\nsymbols, like \"aabaabaabaab ...\"  (repeated several hundred times) may\ncompress more slowly than normal.  Versions 0.9.5 and above fare much\nbetter than previous versions in this respect.  The ratio between\nworst-case and average-case compression time is in the region of 10:1.\nFor previous versions, this figure was more like 100:1.  You can use the\n\\-vvvv option to monitor progress in great detail, if you want.\n\nDecompression speed is unaffected by these phenomena.\n\n.I bzip2\nusually allocates several megabytes of memory to operate\nin, and then charges all over it in a fairly random fashion.  This means\nthat performance, both for compressing and decompressing, is largely\ndetermined by the speed at which your machine can service cache misses.\nBecause of this, small changes to the code to reduce the miss rate have\nbeen observed to give disproportionately large performance improvements.\nI imagine \n.I bzip2\nwill perform best on machines with very large caches.\n\n.SH CAVEATS\nI/O error messages are not as helpful as they could be.\n.I bzip2\ntries hard to detect I/O errors and exit cleanly, but the details of\nwhat the problem is sometimes seem rather misleading.\n\nThis manual page pertains to version 1.0.6 of\n.I bzip2.  \nCompressed data created by this version is entirely forwards and\nbackwards compatible with the previous public releases, versions\n0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 and above, but with the following\nexception: 0.9.0 and above can correctly decompress multiple\nconcatenated compressed files.  0.1pl2 cannot do this; it will stop\nafter decompressing just the first file in the stream.\n\n.I bzip2recover\nversions prior to 1.0.2 used 32-bit integers to represent\nbit positions in compressed files, so they could not handle compressed\nfiles more than 512 megabytes long.  Versions 1.0.2 and above use\n64-bit ints on some platforms which support them (GNU supported\ntargets, and Windows).  To establish whether or not bzip2recover was\nbuilt with such a limitation, run it without arguments.  In any event\nyou can build yourself an unlimited version if you can recompile it\nwith MaybeUInt64 set to be an unsigned 64-bit integer.\n\n\n\n.SH AUTHOR\nJulian Seward, jsewardbzip.org.\n\nhttp://www.bzip.org\n\nThe ideas embodied in\n.I bzip2\nare due to (at least) the following\npeople: Michael Burrows and David Wheeler (for the block sorting\ntransformation), David Wheeler (again, for the Huffman coder), Peter\nFenwick (for the structured coding model in the original\n.I bzip,\nand many refinements), and Alistair Moffat, Radford Neal and Ian Witten\n(for the arithmetic coder in the original\n.I bzip).  \nI am much\nindebted for their help, support and advice.  See the manual in the\nsource distribution for pointers to sources of documentation.  Christian\nvon Roques encouraged me to look for faster sorting algorithms, so as to\nspeed up compression.  Bela Lubkin encouraged me to improve the\nworst-case compression performance.  \nDonna Robinson XMLised the documentation.\nThe bz* scripts are derived from those of GNU gzip.\nMany people sent patches, helped\nwith portability problems, lent machines, gave advice and were generally\nhelpful.\n"
  },
  {
    "path": "external/bzip2/bzip2.1.preformatted",
    "content": "bzip2(1)                                                 bzip2(1)\n\n\n\nN\bNA\bAM\bME\bE\n       bzip2, bunzip2 − a block‐sorting file compressor, v1.0.6\n       bzcat − decompresses files to stdout\n       bzip2recover − recovers data from damaged bzip2 files\n\n\nS\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS\n       b\bbz\bzi\bip\bp2\b2 [ −\b−c\bcd\bdf\bfk\bkq\bqs\bst\btv\bvz\bzV\bVL\bL1\b12\b23\b34\b45\b56\b67\b78\b89\b9 ] [ _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be_\bs _\b._\b._\b.  ]\n       b\bbu\bun\bnz\bzi\bip\bp2\b2 [ −\b−f\bfk\bkv\bvs\bsV\bVL\bL ] [ _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be_\bs _\b._\b._\b.  ]\n       b\bbz\bzc\bca\bat\bt [ −\b−s\bs ] [ _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be_\bs _\b._\b._\b.  ]\n       b\bbz\bzi\bip\bp2\b2r\bre\bec\bco\bov\bve\ber\br _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be\n\n\nD\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN\n       _\bb_\bz_\bi_\bp_\b2  compresses  files  using  the Burrows‐Wheeler block\n       sorting text compression algorithm,  and  Huffman  coding.\n       Compression  is  generally  considerably  better than that\n       achieved by more conventional LZ77/LZ78‐based compressors,\n       and  approaches  the performance of the PPM family of sta­\n       tistical compressors.\n\n       The command‐line options are deliberately very similar  to\n       those of _\bG_\bN_\bU _\bg_\bz_\bi_\bp_\b, but they are not identical.\n\n       _\bb_\bz_\bi_\bp_\b2  expects  a list of file names to accompany the com­\n       mand‐line flags.  Each file is replaced  by  a  compressed\n       version  of  itself,  with  the  name \"original_name.bz2\".\n       Each compressed file has the same modification date,  per­\n       missions, and, when possible, ownership as the correspond­\n       ing original, so that these properties  can  be  correctly\n       restored  at  decompression  time.   File name handling is\n       naive in the sense that there is no mechanism for preserv­\n       ing  original file names, permissions, ownerships or dates\n       in filesystems which lack these concepts, or have  serious\n       file name length restrictions, such as MS‐DOS.\n\n       _\bb_\bz_\bi_\bp_\b2  and  _\bb_\bu_\bn_\bz_\bi_\bp_\b2 will by default not overwrite existing\n       files.  If you want this to happen, specify the −f flag.\n\n       If no file names  are  specified,  _\bb_\bz_\bi_\bp_\b2  compresses  from\n       standard  input  to  standard output.  In this case, _\bb_\bz_\bi_\bp_\b2\n       will decline to write compressed output to a terminal,  as\n       this  would  be  entirely  incomprehensible  and therefore\n       pointless.\n\n       _\bb_\bu_\bn_\bz_\bi_\bp_\b2 (or _\bb_\bz_\bi_\bp_\b2 _\b−_\bd_\b) decompresses  all  specified  files.\n       Files which were not created by _\bb_\bz_\bi_\bp_\b2 will be detected and\n       ignored, and a warning issued.  _\bb_\bz_\bi_\bp_\b2  attempts  to  guess\n       the  filename  for  the decompressed file from that of the\n       compressed file as follows:\n\n              filename.bz2    becomes   filename\n              filename.bz     becomes   filename\n              filename.tbz2   becomes   filename.tar\n              filename.tbz    becomes   filename.tar\n              anyothername    becomes   anyothername.out\n\n       If the file does not end in one of the recognised endings,\n       _\b._\bb_\bz_\b2_\b,  _\b._\bb_\bz_\b,  _\b._\bt_\bb_\bz_\b2 or _\b._\bt_\bb_\bz_\b, _\bb_\bz_\bi_\bp_\b2 complains that it cannot\n       guess the name of the original file, and uses the original\n       name with _\b._\bo_\bu_\bt appended.\n\n       As  with compression, supplying no filenames causes decom­\n       pression from standard input to standard output.\n\n       _\bb_\bu_\bn_\bz_\bi_\bp_\b2 will correctly decompress a file which is the con­\n       catenation of two or more compressed files.  The result is\n       the concatenation of the corresponding uncompressed files.\n       Integrity testing (−t) of concatenated compressed files is\n       also supported.\n\n       You can also compress or decompress files to the  standard\n       output  by giving the −c flag.  Multiple files may be com­\n       pressed and decompressed like this.  The resulting outputs\n       are  fed  sequentially to stdout.  Compression of multiple\n       files in this manner generates a stream containing  multi­\n       ple compressed file representations.  Such a stream can be\n       decompressed correctly only  by  _\bb_\bz_\bi_\bp_\b2  version  0.9.0  or\n       later.   Earlier  versions of _\bb_\bz_\bi_\bp_\b2 will stop after decom­\n       pressing the first file in the stream.\n\n       _\bb_\bz_\bc_\ba_\bt (or _\bb_\bz_\bi_\bp_\b2 _\b‐_\bd_\bc_\b) decompresses all specified  files  to\n       the standard output.\n\n       _\bb_\bz_\bi_\bp_\b2  will  read arguments from the environment variables\n       _\bB_\bZ_\bI_\bP_\b2 and _\bB_\bZ_\bI_\bP_\b, in  that  order,  and  will  process  them\n       before  any  arguments  read  from the command line.  This\n       gives a convenient way to supply default arguments.\n\n       Compression is always performed, even  if  the  compressed\n       file  is slightly larger than the original.  Files of less\n       than about one hundred bytes tend to get larger, since the\n       compression  mechanism  has  a  constant  overhead  in the\n       region of 50 bytes.  Random data (including the output  of\n       most  file  compressors)  is  coded at about 8.05 bits per\n       byte, giving an expansion of around 0.5%.\n\n       As a self‐check for your  protection,  _\bb_\bz_\bi_\bp_\b2  uses  32‐bit\n       CRCs  to make sure that the decompressed version of a file\n       is identical to the original.  This guards against corrup­\n       tion  of  the compressed data, and against undetected bugs\n       in _\bb_\bz_\bi_\bp_\b2 (hopefully very unlikely).  The chances  of  data\n       corruption  going  undetected  is  microscopic,  about one\n       chance in four billion for each file processed.  Be aware,\n       though,  that  the  check occurs upon decompression, so it\n       can only tell you that something is wrong.  It can’t  help\n       you  recover  the original uncompressed data.  You can use\n       _\bb_\bz_\bi_\bp_\b2_\br_\be_\bc_\bo_\bv_\be_\br to try to recover data from damaged files.\n\n       Return values: 0 for a normal exit,  1  for  environmental\n       problems  (file not found, invalid flags, I/O errors, &c),\n       2 to indicate a corrupt compressed file, 3 for an internal\n       consistency error (eg, bug) which caused _\bb_\bz_\bi_\bp_\b2 to panic.\n\n\nO\bOP\bPT\bTI\bIO\bON\bNS\bS\n       −\b−c\bc ‐\b‐‐\b‐s\bst\btd\bdo\bou\but\bt\n              Compress or decompress to standard output.\n\n       −\b−d\bd ‐\b‐‐\b‐d\bde\bec\bco\bom\bmp\bpr\bre\bes\bss\bs\n              Force  decompression.  _\bb_\bz_\bi_\bp_\b2_\b, _\bb_\bu_\bn_\bz_\bi_\bp_\b2 and _\bb_\bz_\bc_\ba_\bt are\n              really the same program,  and  the  decision  about\n              what  actions to take is done on the basis of which\n              name is used.  This flag overrides that  mechanism,\n              and forces _\bb_\bz_\bi_\bp_\b2 to decompress.\n\n       −\b−z\bz ‐\b‐‐\b‐c\bco\bom\bmp\bpr\bre\bes\bss\bs\n              The   complement   to   −d:   forces   compression,\n              regardless of the invocation name.\n\n       −\b−t\bt ‐\b‐‐\b‐t\bte\bes\bst\bt\n              Check integrity of the specified file(s), but don’t\n              decompress  them.   This  really  performs  a trial\n              decompression and throws away the result.\n\n       −\b−f\bf ‐\b‐‐\b‐f\bfo\bor\brc\bce\be\n              Force overwrite of output files.   Normally,  _\bb_\bz_\bi_\bp_\b2\n              will  not  overwrite  existing  output files.  Also\n              forces _\bb_\bz_\bi_\bp_\b2 to break hard links to files, which it\n              otherwise wouldn’t do.\n\n              bzip2  normally  declines to decompress files which\n              don’t have the  correct  magic  header  bytes.   If\n              forced  (‐f),  however,  it  will  pass  such files\n              through unmodified.  This is how GNU gzip  behaves.\n\n       −\b−k\bk ‐\b‐‐\b‐k\bke\bee\bep\bp\n              Keep  (don’t delete) input files during compression\n              or decompression.\n\n       −\b−s\bs ‐\b‐‐\b‐s\bsm\bma\bal\bll\bl\n              Reduce memory usage, for compression, decompression\n              and  testing.   Files  are  decompressed and tested\n              using a modified algorithm which only requires  2.5\n              bytes  per  block byte.  This means any file can be\n              decompressed in 2300k of memory,  albeit  at  about\n              half the normal speed.\n\n              During  compression,  −s  selects  a  block size of\n              200k, which limits memory use to  around  the  same\n              figure,  at  the expense of your compression ratio.\n              In short, if your  machine  is  low  on  memory  (8\n              megabytes  or  less),  use  −s for everything.  See\n              MEMORY MANAGEMENT below.\n\n       −\b−q\bq ‐\b‐‐\b‐q\bqu\bui\bie\bet\bt\n              Suppress non‐essential warning messages.   Messages\n              pertaining  to I/O errors and other critical events\n              will not be suppressed.\n\n       −\b−v\bv ‐\b‐‐\b‐v\bve\ber\brb\bbo\bos\bse\be\n              Verbose mode ‐‐ show the compression ratio for each\n              file  processed.   Further  −v’s  increase the ver­\n              bosity level, spewing out lots of information which\n              is primarily of interest for diagnostic purposes.\n\n       −\b−L\bL ‐\b‐‐\b‐l\bli\bic\bce\ben\bns\bse\be ‐\b‐V\bV ‐\b‐‐\b‐v\bve\ber\brs\bsi\bio\bon\bn\n              Display  the  software  version,  license terms and\n              conditions.\n\n       −\b−1\b1 (\b(o\bor\br −\b−−\b−f\bfa\bas\bst\bt)\b) t\bto\bo −\b−9\b9 (\b(o\bor\br −\b−−\b−b\bbe\bes\bst\bt)\b)\n              Set the block size to 100 k, 200 k ..  900  k  when\n              compressing.   Has  no  effect  when decompressing.\n              See MEMORY MANAGEMENT below.  The −−fast and −−best\n              aliases  are  primarily for GNU gzip compatibility.\n              In particular, −−fast doesn’t make things  signifi­\n              cantly  faster.   And  −−best  merely  selects  the\n              default behaviour.\n\n       −\b−‐\b‐     Treats all subsequent arguments as file names, even\n              if they start with a dash.  This is so you can han­\n              dle files with names beginning  with  a  dash,  for\n              example: bzip2 −‐ −myfilename.\n\n       −\b−‐\b‐r\bre\bep\bpe\bet\bti\bit\bti\biv\bve\be‐\b‐f\bfa\bas\bst\bt ‐\b‐‐\b‐r\bre\bep\bpe\bet\bti\bit\bti\biv\bve\be‐\b‐b\bbe\bes\bst\bt\n              These  flags  are  redundant  in versions 0.9.5 and\n              above.  They provided some coarse control over  the\n              behaviour  of the sorting algorithm in earlier ver­\n              sions, which was sometimes useful.  0.9.5 and above\n              have  an  improved  algorithm  which  renders these\n              flags irrelevant.\n\n\nM\bME\bEM\bMO\bOR\bRY\bY M\bMA\bAN\bNA\bAG\bGE\bEM\bME\bEN\bNT\bT\n       _\bb_\bz_\bi_\bp_\b2 compresses large files in blocks.   The  block  size\n       affects  both  the  compression  ratio  achieved,  and the\n       amount of memory needed for compression and decompression.\n       The  flags  −1  through  −9  specify  the block size to be\n       100,000 bytes through 900,000 bytes (the default)  respec­\n       tively.   At  decompression  time, the block size used for\n       compression is read from  the  header  of  the  compressed\n       file, and _\bb_\bu_\bn_\bz_\bi_\bp_\b2 then allocates itself just enough memory\n       to decompress the file.  Since block sizes are  stored  in\n       compressed  files,  it follows that the flags −1 to −9 are\n       irrelevant to and so ignored during decompression.\n\n       Compression and decompression requirements, in bytes,  can\n       be estimated as:\n\n              Compression:   400k + ( 8 x block size )\n\n              Decompression: 100k + ( 4 x block size ), or\n                             100k + ( 2.5 x block size )\n\n       Larger  block  sizes  give  rapidly  diminishing  marginal\n       returns.  Most of the compression comes from the first two\n       or  three hundred k of block size, a fact worth bearing in\n       mind when using _\bb_\bz_\bi_\bp_\b2  on  small  machines.   It  is  also\n       important  to  appreciate  that  the  decompression memory\n       requirement is set at compression time by  the  choice  of\n       block size.\n\n       For  files  compressed  with  the default 900k block size,\n       _\bb_\bu_\bn_\bz_\bi_\bp_\b2 will require about 3700 kbytes to decompress.   To\n       support decompression of any file on a 4 megabyte machine,\n       _\bb_\bu_\bn_\bz_\bi_\bp_\b2 has an option to  decompress  using  approximately\n       half this amount of memory, about 2300 kbytes.  Decompres­\n       sion speed is also halved, so you should use  this  option\n       only where necessary.  The relevant flag is ‐s.\n\n       In general, try and use the largest block size memory con­\n       straints  allow,  since  that  maximises  the  compression\n       achieved.   Compression and decompression speed are virtu­\n       ally unaffected by block size.\n\n       Another significant point applies to files which fit in  a\n       single  block  ‐‐  that  means  most files you’d encounter\n       using a large block  size.   The  amount  of  real  memory\n       touched is proportional to the size of the file, since the\n       file is smaller than a block.  For example, compressing  a\n       file  20,000  bytes  long  with the flag ‐9 will cause the\n       compressor to allocate around 7600k of  memory,  but  only\n       touch 400k + 20000 * 8 = 560 kbytes of it.  Similarly, the\n       decompressor will allocate 3700k but  only  touch  100k  +\n       20000 * 4 = 180 kbytes.\n\n       Here  is a table which summarises the maximum memory usage\n       for different block sizes.  Also  recorded  is  the  total\n       compressed  size for 14 files of the Calgary Text Compres­\n       sion Corpus totalling 3,141,622 bytes.  This column  gives\n       some  feel  for  how  compression  varies with block size.\n       These figures tend to understate the advantage  of  larger\n       block  sizes  for  larger files, since the Corpus is domi­\n       nated by smaller files.\n\n                  Compress   Decompress   Decompress   Corpus\n           Flag     usage      usage       ‐s usage     Size\n\n            ‐1      1200k       500k         350k      914704\n            ‐2      2000k       900k         600k      877703\n            ‐3      2800k      1300k         850k      860338\n            ‐4      3600k      1700k        1100k      846899\n            ‐5      4400k      2100k        1350k      845160\n            ‐6      5200k      2500k        1600k      838626\n            ‐7      6100k      2900k        1850k      834096\n            ‐8      6800k      3300k        2100k      828642\n            ‐9      7600k      3700k        2350k      828642\n\n\nR\bRE\bEC\bCO\bOV\bVE\bER\bRI\bIN\bNG\bG D\bDA\bAT\bTA\bA F\bFR\bRO\bOM\bM D\bDA\bAM\bMA\bAG\bGE\bED\bD F\bFI\bIL\bLE\bES\bS\n       _\bb_\bz_\bi_\bp_\b2 compresses files in blocks, usually 900kbytes  long.\n       Each block is handled independently.  If a media or trans­\n       mission error causes a multi‐block  .bz2  file  to  become\n       damaged,  it  may  be  possible  to  recover data from the\n       undamaged blocks in the file.\n\n       The compressed representation of each block  is  delimited\n       by  a  48‐bit pattern, which makes it possible to find the\n       block boundaries with reasonable  certainty.   Each  block\n       also  carries its own 32‐bit CRC, so damaged blocks can be\n       distinguished from undamaged ones.\n\n       _\bb_\bz_\bi_\bp_\b2_\br_\be_\bc_\bo_\bv_\be_\br is a  simple  program  whose  purpose  is  to\n       search  for blocks in .bz2 files, and write each block out\n       into its own .bz2 file.  You can then use _\bb_\bz_\bi_\bp_\b2 −t to test\n       the integrity of the resulting files, and decompress those\n       which are undamaged.\n\n       _\bb_\bz_\bi_\bp_\b2_\br_\be_\bc_\bo_\bv_\be_\br takes a single argument, the name of the dam­\n       aged    file,    and    writes    a    number   of   files\n       \"rec00001file.bz2\",  \"rec00002file.bz2\",  etc,  containing\n       the   extracted   blocks.   The   output   filenames   are\n       designed  so  that the use of wildcards in subsequent pro­\n       cessing  ‐‐ for example, \"bzip2 ‐dc  rec*file.bz2 > recov­\n       ered_data\" ‐‐ processes the files in the correct order.\n\n       _\bb_\bz_\bi_\bp_\b2_\br_\be_\bc_\bo_\bv_\be_\br should be of most use dealing with large .bz2\n       files,  as  these will contain many blocks.  It is clearly\n       futile to use it on damaged single‐block  files,  since  a\n       damaged  block  cannot  be recovered.  If you wish to min­\n       imise any potential data loss through media  or  transmis­\n       sion errors, you might consider compressing with a smaller\n       block size.\n\n\nP\bPE\bER\bRF\bFO\bOR\bRM\bMA\bAN\bNC\bCE\bE N\bNO\bOT\bTE\bES\bS\n       The sorting phase of compression gathers together  similar\n       strings  in  the  file.  Because of this, files containing\n       very long runs of  repeated  symbols,  like  \"aabaabaabaab\n       ...\"   (repeated  several hundred times) may compress more\n       slowly than normal.  Versions 0.9.5 and  above  fare  much\n       better  than previous versions in this respect.  The ratio\n       between worst‐case and average‐case compression time is in\n       the  region  of  10:1.  For previous versions, this figure\n       was more like 100:1.  You can use the −vvvv option to mon­\n       itor progress in great detail, if you want.\n\n       Decompression speed is unaffected by these phenomena.\n\n       _\bb_\bz_\bi_\bp_\b2  usually  allocates  several  megabytes of memory to\n       operate in, and then charges all over it in a fairly  ran­\n       dom  fashion.   This means that performance, both for com­\n       pressing and decompressing, is largely determined  by  the\n       speed  at  which  your  machine  can service cache misses.\n       Because of this, small changes to the code to  reduce  the\n       miss  rate  have  been observed to give disproportionately\n       large performance improvements.  I imagine _\bb_\bz_\bi_\bp_\b2 will per­\n       form best on machines with very large caches.\n\n\nC\bCA\bAV\bVE\bEA\bAT\bTS\bS\n       I/O  error  messages  are not as helpful as they could be.\n       _\bb_\bz_\bi_\bp_\b2 tries hard to detect I/O errors  and  exit  cleanly,\n       but  the  details  of  what  the problem is sometimes seem\n       rather misleading.\n\n       This manual page pertains to version 1.0.6 of _\bb_\bz_\bi_\bp_\b2_\b.  Com­\n       pressed  data created by this version is entirely forwards\n       and  backwards  compatible  with   the   previous   public\n       releases,  versions  0.1pl2,  0.9.0,  0.9.5, 1.0.0, 1.0.1, \n       1.0.2 and above, but with the  following  exception: 0.9.0\n       and above can  correctly decompress  multiple concatenated\n       compressed files.  0.1pl2  cannot do this;  it  will  stop \n       after  decompressing just the first file in the stream.\n\n       _\bb_\bz_\bi_\bp_\b2_\br_\be_\bc_\bo_\bv_\be_\br  versions prior to 1.0.2 used 32‐bit integers\n       to represent bit positions in compressed  files,  so  they\n       could  not handle compressed files more than 512 megabytes\n       long.  Versions 1.0.2 and above use 64‐bit  ints  on  some\n       platforms  which  support them (GNU supported targets, and\n       Windows).  To establish whether or  not  bzip2recover  was\n       built  with  such  a limitation, run it without arguments.\n       In any event you can build yourself an  unlimited  version\n       if  you  can  recompile  it  with MaybeUInt64 set to be an\n       unsigned 64‐bit integer.\n\n\n\n\nA\bAU\bUT\bTH\bHO\bOR\bR\n       Julian Seward, jsewardbzip.org.\n\n       http://www.bzip.org\n\n       The ideas embodied in _\bb_\bz_\bi_\bp_\b2 are due to (at least) the fol­\n       lowing  people: Michael Burrows and David Wheeler (for the\n       block sorting transformation), David Wheeler  (again,  for\n       the Huffman coder), Peter Fenwick (for the structured cod­\n       ing model in the original _\bb_\bz_\bi_\bp_\b, and many refinements), and\n       Alistair  Moffat,  Radford  Neal  and  Ian Witten (for the\n       arithmetic  coder  in  the  original  _\bb_\bz_\bi_\bp_\b)_\b.   I  am  much\n       indebted for their help, support and advice.  See the man­\n       ual in the source distribution for pointers to sources  of\n       documentation.  Christian von Roques encouraged me to look\n       for faster sorting algorithms, so as to speed up  compres­\n       sion.  Bela Lubkin encouraged me to improve the worst‐case\n       compression performance.  Donna Robinson XMLised the docu­\n       mentation.   The bz* scripts are derived from those of GNU\n       gzip.  Many people sent patches, helped  with  portability\n       problems,  lent  machines,  gave advice and were generally\n       helpful.\n\n\n\n                                                         bzip2(1)\n"
  },
  {
    "path": "external/bzip2/bzip2.c",
    "content": "\n/*-----------------------------------------------------------*/\n/*--- A block-sorting, lossless compressor        bzip2.c ---*/\n/*-----------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   Please read the WARNING, DISCLAIMER and PATENTS sections in the \n   README file.\n\n   This program is released under the terms of the license contained\n   in the file LICENSE.\n   ------------------------------------------------------------------ */\n\n\n/* Place a 1 beside your platform, and 0 elsewhere.\n   Generic 32-bit Unix.\n   Also works on 64-bit Unix boxes.\n   This is the default.\n*/\n#define BZ_UNIX      1\n\n/*--\n  Win32, as seen by Jacob Navia's excellent\n  port of (Chris Fraser & David Hanson)'s excellent\n  lcc compiler.  Or with MS Visual C.\n  This is selected automatically if compiled by a compiler which\n  defines _WIN32, not including the Cygwin GCC.\n--*/\n#define BZ_LCCWIN32  0\n\n#if defined(_WIN32) && !defined(__CYGWIN__)\n#undef  BZ_LCCWIN32\n#define BZ_LCCWIN32 1\n#undef  BZ_UNIX\n#define BZ_UNIX 0\n#endif\n\n\n/*---------------------------------------------*/\n/*--\n  Some stuff for all platforms.\n--*/\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <signal.h>\n#include <math.h>\n#include <errno.h>\n#include <ctype.h>\n#include \"bzlib.h\"\n\n#define ERROR_IF_EOF(i)       { if ((i) == EOF)  ioError(); }\n#define ERROR_IF_NOT_ZERO(i)  { if ((i) != 0)    ioError(); }\n#define ERROR_IF_MINUS_ONE(i) { if ((i) == (-1)) ioError(); }\n\n\n/*---------------------------------------------*/\n/*--\n   Platform-specific stuff.\n--*/\n\n#if BZ_UNIX\n#   include <fcntl.h>\n#   include <sys/types.h>\n#   include <utime.h>\n#   include <unistd.h>\n#   include <sys/stat.h>\n#   include <sys/times.h>\n\n#   define PATH_SEP    '/'\n#   define MY_LSTAT    lstat\n#   define MY_STAT     stat\n#   define MY_S_ISREG  S_ISREG\n#   define MY_S_ISDIR  S_ISDIR\n\n#   define APPEND_FILESPEC(root, name) \\\n      root=snocString((root), (name))\n\n#   define APPEND_FLAG(root, name) \\\n      root=snocString((root), (name))\n\n#   define SET_BINARY_MODE(fd) /**/\n\n#   ifdef __GNUC__\n#      define NORETURN __attribute__ ((noreturn))\n#   else\n#      define NORETURN /**/\n#   endif\n\n#   ifdef __DJGPP__\n#     include <io.h>\n#     include <fcntl.h>\n#     undef MY_LSTAT\n#     undef MY_STAT\n#     define MY_LSTAT stat\n#     define MY_STAT stat\n#     undef SET_BINARY_MODE\n#     define SET_BINARY_MODE(fd)                        \\\n        do {                                            \\\n           int retVal = setmode ( fileno ( fd ),        \\\n                                  O_BINARY );           \\\n           ERROR_IF_MINUS_ONE ( retVal );               \\\n        } while ( 0 )\n#   endif\n\n#   ifdef __CYGWIN__\n#     include <io.h>\n#     include <fcntl.h>\n#     undef SET_BINARY_MODE\n#     define SET_BINARY_MODE(fd)                        \\\n        do {                                            \\\n           int retVal = setmode ( fileno ( fd ),        \\\n                                  O_BINARY );           \\\n           ERROR_IF_MINUS_ONE ( retVal );               \\\n        } while ( 0 )\n#   endif\n#endif /* BZ_UNIX */\n\n\n\n#if BZ_LCCWIN32\n#   include <io.h>\n#   include <fcntl.h>\n#   include <sys\\stat.h>\n\n#   define NORETURN       /**/\n#   define PATH_SEP       '\\\\'\n#   define MY_LSTAT       _stat\n#   define MY_STAT        _stat\n#   define MY_S_ISREG(x)  ((x) & _S_IFREG)\n#   define MY_S_ISDIR(x)  ((x) & _S_IFDIR)\n\n#   define APPEND_FLAG(root, name) \\\n      root=snocString((root), (name))\n\n#   define APPEND_FILESPEC(root, name)                \\\n      root = snocString ((root), (name))\n\n#   define SET_BINARY_MODE(fd)                        \\\n      do {                                            \\\n         int retVal = setmode ( fileno ( fd ),        \\\n                                O_BINARY );           \\\n         ERROR_IF_MINUS_ONE ( retVal );               \\\n      } while ( 0 )\n\n#endif /* BZ_LCCWIN32 */\n\n\n/*---------------------------------------------*/\n/*--\n  Some more stuff for all platforms :-)\n--*/\n\ntypedef char            Char;\ntypedef unsigned char   Bool;\ntypedef unsigned char   UChar;\ntypedef int             Int32;\ntypedef unsigned int    UInt32;\ntypedef short           Int16;\ntypedef unsigned short  UInt16;\n                                       \n#define True  ((Bool)1)\n#define False ((Bool)0)\n\n/*--\n  IntNative is your platform's `native' int size.\n  Only here to avoid probs with 64-bit platforms.\n--*/\ntypedef int IntNative;\n\n\n/*---------------------------------------------------*/\n/*--- Misc (file handling) data decls             ---*/\n/*---------------------------------------------------*/\n\nInt32   verbosity;\nBool    keepInputFiles, smallMode, deleteOutputOnInterrupt;\nBool    forceOverwrite, testFailsExist, unzFailsExist, noisy;\nInt32   numFileNames, numFilesProcessed, blockSize100k;\nInt32   exitValue;\n\n/*-- source modes; F==file, I==stdin, O==stdout --*/\n#define SM_I2O           1\n#define SM_F2O           2\n#define SM_F2F           3\n\n/*-- operation modes --*/\n#define OM_Z             1\n#define OM_UNZ           2\n#define OM_TEST          3\n\nInt32   opMode;\nInt32   srcMode;\n\n#define FILE_NAME_LEN 1034\n\nInt32   longestFileName;\nChar    inName [FILE_NAME_LEN];\nChar    outName[FILE_NAME_LEN];\nChar    tmpName[FILE_NAME_LEN];\nChar    *progName;\nChar    progNameReally[FILE_NAME_LEN];\nFILE    *outputHandleJustInCase;\nInt32   workFactor;\n\nstatic void    panic                 ( const Char* ) NORETURN;\nstatic void    ioError               ( void )        NORETURN;\nstatic void    outOfMemory           ( void )        NORETURN;\nstatic void    configError           ( void )        NORETURN;\nstatic void    crcError              ( void )        NORETURN;\nstatic void    cleanUpAndFail        ( Int32 )       NORETURN;\nstatic void    compressedStreamEOF   ( void )        NORETURN;\n\nstatic void    copyFileName ( Char*, Char* );\nstatic void*   myMalloc     ( Int32 );\nstatic void    applySavedFileAttrToOutputFile ( IntNative fd );\n\n\n\n/*---------------------------------------------------*/\n/*--- An implementation of 64-bit ints.  Sigh.    ---*/\n/*--- Roll on widespread deployment of ANSI C9X ! ---*/\n/*---------------------------------------------------*/\n\ntypedef\n   struct { UChar b[8]; } \n   UInt64;\n\n\nstatic\nvoid uInt64_from_UInt32s ( UInt64* n, UInt32 lo32, UInt32 hi32 )\n{\n   n->b[7] = (UChar)((hi32 >> 24) & 0xFF);\n   n->b[6] = (UChar)((hi32 >> 16) & 0xFF);\n   n->b[5] = (UChar)((hi32 >> 8)  & 0xFF);\n   n->b[4] = (UChar) (hi32        & 0xFF);\n   n->b[3] = (UChar)((lo32 >> 24) & 0xFF);\n   n->b[2] = (UChar)((lo32 >> 16) & 0xFF);\n   n->b[1] = (UChar)((lo32 >> 8)  & 0xFF);\n   n->b[0] = (UChar) (lo32        & 0xFF);\n}\n\n\nstatic\ndouble uInt64_to_double ( UInt64* n )\n{\n   Int32  i;\n   double base = 1.0;\n   double sum  = 0.0;\n   for (i = 0; i < 8; i++) {\n      sum  += base * (double)(n->b[i]);\n      base *= 256.0;\n   }\n   return sum;\n}\n\n\nstatic\nBool uInt64_isZero ( UInt64* n )\n{\n   Int32 i;\n   for (i = 0; i < 8; i++)\n      if (n->b[i] != 0) return 0;\n   return 1;\n}\n\n\n/* Divide *n by 10, and return the remainder.  */\nstatic \nInt32 uInt64_qrm10 ( UInt64* n )\n{\n   UInt32 rem, tmp;\n   Int32  i;\n   rem = 0;\n   for (i = 7; i >= 0; i--) {\n      tmp = rem * 256 + n->b[i];\n      n->b[i] = tmp / 10;\n      rem = tmp % 10;\n   }\n   return rem;\n}\n\n\n/* ... and the Whole Entire Point of all this UInt64 stuff is\n   so that we can supply the following function.\n*/\nstatic\nvoid uInt64_toAscii ( char* outbuf, UInt64* n )\n{\n   Int32  i, q;\n   UChar  buf[32];\n   Int32  nBuf   = 0;\n   UInt64 n_copy = *n;\n   do {\n      q = uInt64_qrm10 ( &n_copy );\n      buf[nBuf] = q + '0';\n      nBuf++;\n   } while (!uInt64_isZero(&n_copy));\n   outbuf[nBuf] = 0;\n   for (i = 0; i < nBuf; i++) \n      outbuf[i] = buf[nBuf-i-1];\n}\n\n\n/*---------------------------------------------------*/\n/*--- Processing of complete files and streams    ---*/\n/*---------------------------------------------------*/\n\n/*---------------------------------------------*/\nstatic \nBool myfeof ( FILE* f )\n{\n   Int32 c = fgetc ( f );\n   if (c == EOF) return True;\n   ungetc ( c, f );\n   return False;\n}\n\n\n/*---------------------------------------------*/\nstatic \nvoid compressStream ( FILE *stream, FILE *zStream )\n{\n   BZFILE* bzf = NULL;\n   UChar   ibuf[5000];\n   Int32   nIbuf;\n   UInt32  nbytes_in_lo32, nbytes_in_hi32;\n   UInt32  nbytes_out_lo32, nbytes_out_hi32;\n   Int32   bzerr, bzerr_dummy, ret;\n\n   SET_BINARY_MODE(stream);\n   SET_BINARY_MODE(zStream);\n\n   if (ferror(stream)) goto errhandler_io;\n   if (ferror(zStream)) goto errhandler_io;\n\n   bzf = BZ2_bzWriteOpen ( &bzerr, zStream, \n                           blockSize100k, verbosity, workFactor );   \n   if (bzerr != BZ_OK) goto errhandler;\n\n   if (verbosity >= 2) fprintf ( stderr, \"\\n\" );\n\n   while (True) {\n\n      if (myfeof(stream)) break;\n      nIbuf = fread ( ibuf, sizeof(UChar), 5000, stream );\n      if (ferror(stream)) goto errhandler_io;\n      if (nIbuf > 0) BZ2_bzWrite ( &bzerr, bzf, (void*)ibuf, nIbuf );\n      if (bzerr != BZ_OK) goto errhandler;\n\n   }\n\n   BZ2_bzWriteClose64 ( &bzerr, bzf, 0, \n                        &nbytes_in_lo32, &nbytes_in_hi32,\n                        &nbytes_out_lo32, &nbytes_out_hi32 );\n   if (bzerr != BZ_OK) goto errhandler;\n\n   if (ferror(zStream)) goto errhandler_io;\n   ret = fflush ( zStream );\n   if (ret == EOF) goto errhandler_io;\n   if (zStream != stdout) {\n      Int32 fd = fileno ( zStream );\n      if (fd < 0) goto errhandler_io;\n      applySavedFileAttrToOutputFile ( fd );\n      ret = fclose ( zStream );\n      outputHandleJustInCase = NULL;\n      if (ret == EOF) goto errhandler_io;\n   }\n   outputHandleJustInCase = NULL;\n   if (ferror(stream)) goto errhandler_io;\n   ret = fclose ( stream );\n   if (ret == EOF) goto errhandler_io;\n\n   if (verbosity >= 1) {\n      if (nbytes_in_lo32 == 0 && nbytes_in_hi32 == 0) {\n\t fprintf ( stderr, \" no data compressed.\\n\");\n      } else {\n\t Char   buf_nin[32], buf_nout[32];\n\t UInt64 nbytes_in,   nbytes_out;\n\t double nbytes_in_d, nbytes_out_d;\n\t uInt64_from_UInt32s ( &nbytes_in, \n\t\t\t       nbytes_in_lo32, nbytes_in_hi32 );\n\t uInt64_from_UInt32s ( &nbytes_out, \n\t\t\t       nbytes_out_lo32, nbytes_out_hi32 );\n\t nbytes_in_d  = uInt64_to_double ( &nbytes_in );\n\t nbytes_out_d = uInt64_to_double ( &nbytes_out );\n\t uInt64_toAscii ( buf_nin, &nbytes_in );\n\t uInt64_toAscii ( buf_nout, &nbytes_out );\n\t fprintf ( stderr, \"%6.3f:1, %6.3f bits/byte, \"\n\t\t   \"%5.2f%% saved, %s in, %s out.\\n\",\n\t\t   nbytes_in_d / nbytes_out_d,\n\t\t   (8.0 * nbytes_out_d) / nbytes_in_d,\n\t\t   100.0 * (1.0 - nbytes_out_d / nbytes_in_d),\n\t\t   buf_nin,\n\t\t   buf_nout\n\t\t );\n      }\n   }\n\n   return;\n\n   errhandler:\n   BZ2_bzWriteClose64 ( &bzerr_dummy, bzf, 1, \n                        &nbytes_in_lo32, &nbytes_in_hi32,\n                        &nbytes_out_lo32, &nbytes_out_hi32 );\n   switch (bzerr) {\n      case BZ_CONFIG_ERROR:\n         configError(); break;\n      case BZ_MEM_ERROR:\n         outOfMemory (); break;\n      case BZ_IO_ERROR:\n         errhandler_io:\n         ioError(); break;\n      default:\n         panic ( \"compress:unexpected error\" );\n   }\n\n   panic ( \"compress:end\" );\n   /*notreached*/\n}\n\n\n\n/*---------------------------------------------*/\nstatic \nBool uncompressStream ( FILE *zStream, FILE *stream )\n{\n   BZFILE* bzf = NULL;\n   Int32   bzerr, bzerr_dummy, ret, nread, streamNo, i;\n   UChar   obuf[5000];\n   UChar   unused[BZ_MAX_UNUSED];\n   Int32   nUnused;\n   void*   unusedTmpV;\n   UChar*  unusedTmp;\n\n   nUnused = 0;\n   streamNo = 0;\n\n   SET_BINARY_MODE(stream);\n   SET_BINARY_MODE(zStream);\n\n   if (ferror(stream)) goto errhandler_io;\n   if (ferror(zStream)) goto errhandler_io;\n\n   while (True) {\n\n      bzf = BZ2_bzReadOpen ( \n               &bzerr, zStream, verbosity, \n               (int)smallMode, unused, nUnused\n            );\n      if (bzf == NULL || bzerr != BZ_OK) goto errhandler;\n      streamNo++;\n\n      while (bzerr == BZ_OK) {\n         nread = BZ2_bzRead ( &bzerr, bzf, obuf, 5000 );\n         if (bzerr == BZ_DATA_ERROR_MAGIC) goto trycat;\n         if ((bzerr == BZ_OK || bzerr == BZ_STREAM_END) && nread > 0)\n            fwrite ( obuf, sizeof(UChar), nread, stream );\n         if (ferror(stream)) goto errhandler_io;\n      }\n      if (bzerr != BZ_STREAM_END) goto errhandler;\n\n      BZ2_bzReadGetUnused ( &bzerr, bzf, &unusedTmpV, &nUnused );\n      if (bzerr != BZ_OK) panic ( \"decompress:bzReadGetUnused\" );\n\n      unusedTmp = (UChar*)unusedTmpV;\n      for (i = 0; i < nUnused; i++) unused[i] = unusedTmp[i];\n\n      BZ2_bzReadClose ( &bzerr, bzf );\n      if (bzerr != BZ_OK) panic ( \"decompress:bzReadGetUnused\" );\n\n      if (nUnused == 0 && myfeof(zStream)) break;\n   }\n\n   closeok:\n   if (ferror(zStream)) goto errhandler_io;\n   if (stream != stdout) {\n      Int32 fd = fileno ( stream );\n      if (fd < 0) goto errhandler_io;\n      applySavedFileAttrToOutputFile ( fd );\n   }\n   ret = fclose ( zStream );\n   if (ret == EOF) goto errhandler_io;\n\n   if (ferror(stream)) goto errhandler_io;\n   ret = fflush ( stream );\n   if (ret != 0) goto errhandler_io;\n   if (stream != stdout) {\n      ret = fclose ( stream );\n      outputHandleJustInCase = NULL;\n      if (ret == EOF) goto errhandler_io;\n   }\n   outputHandleJustInCase = NULL;\n   if (verbosity >= 2) fprintf ( stderr, \"\\n    \" );\n   return True;\n\n   trycat: \n   if (forceOverwrite) {\n      rewind(zStream);\n      while (True) {\n      \t if (myfeof(zStream)) break;\n      \t nread = fread ( obuf, sizeof(UChar), 5000, zStream );\n      \t if (ferror(zStream)) goto errhandler_io;\n      \t if (nread > 0) fwrite ( obuf, sizeof(UChar), nread, stream );\n      \t if (ferror(stream)) goto errhandler_io;\n      }\n      goto closeok;\n   }\n  \n   errhandler:\n   BZ2_bzReadClose ( &bzerr_dummy, bzf );\n   switch (bzerr) {\n      case BZ_CONFIG_ERROR:\n         configError(); break;\n      case BZ_IO_ERROR:\n         errhandler_io:\n         ioError(); break;\n      case BZ_DATA_ERROR:\n         crcError();\n      case BZ_MEM_ERROR:\n         outOfMemory();\n      case BZ_UNEXPECTED_EOF:\n         compressedStreamEOF();\n      case BZ_DATA_ERROR_MAGIC:\n         if (zStream != stdin) fclose(zStream);\n         if (stream != stdout) fclose(stream);\n         if (streamNo == 1) {\n            return False;\n         } else {\n            if (noisy)\n            fprintf ( stderr, \n                      \"\\n%s: %s: trailing garbage after EOF ignored\\n\",\n                      progName, inName );\n            return True;       \n         }\n      default:\n         panic ( \"decompress:unexpected error\" );\n   }\n\n   panic ( \"decompress:end\" );\n   return True; /*notreached*/\n}\n\n\n/*---------------------------------------------*/\nstatic \nBool testStream ( FILE *zStream )\n{\n   BZFILE* bzf = NULL;\n   Int32   bzerr, bzerr_dummy, ret, nread, streamNo, i;\n   UChar   obuf[5000];\n   UChar   unused[BZ_MAX_UNUSED];\n   Int32   nUnused;\n   void*   unusedTmpV;\n   UChar*  unusedTmp;\n\n   nUnused = 0;\n   streamNo = 0;\n\n   SET_BINARY_MODE(zStream);\n   if (ferror(zStream)) goto errhandler_io;\n\n   while (True) {\n\n      bzf = BZ2_bzReadOpen ( \n               &bzerr, zStream, verbosity, \n               (int)smallMode, unused, nUnused\n            );\n      if (bzf == NULL || bzerr != BZ_OK) goto errhandler;\n      streamNo++;\n\n      while (bzerr == BZ_OK) {\n         nread = BZ2_bzRead ( &bzerr, bzf, obuf, 5000 );\n         if (bzerr == BZ_DATA_ERROR_MAGIC) goto errhandler;\n      }\n      if (bzerr != BZ_STREAM_END) goto errhandler;\n\n      BZ2_bzReadGetUnused ( &bzerr, bzf, &unusedTmpV, &nUnused );\n      if (bzerr != BZ_OK) panic ( \"test:bzReadGetUnused\" );\n\n      unusedTmp = (UChar*)unusedTmpV;\n      for (i = 0; i < nUnused; i++) unused[i] = unusedTmp[i];\n\n      BZ2_bzReadClose ( &bzerr, bzf );\n      if (bzerr != BZ_OK) panic ( \"test:bzReadGetUnused\" );\n      if (nUnused == 0 && myfeof(zStream)) break;\n\n   }\n\n   if (ferror(zStream)) goto errhandler_io;\n   ret = fclose ( zStream );\n   if (ret == EOF) goto errhandler_io;\n\n   if (verbosity >= 2) fprintf ( stderr, \"\\n    \" );\n   return True;\n\n   errhandler:\n   BZ2_bzReadClose ( &bzerr_dummy, bzf );\n   if (verbosity == 0) \n      fprintf ( stderr, \"%s: %s: \", progName, inName );\n   switch (bzerr) {\n      case BZ_CONFIG_ERROR:\n         configError(); break;\n      case BZ_IO_ERROR:\n         errhandler_io:\n         ioError(); break;\n      case BZ_DATA_ERROR:\n         fprintf ( stderr,\n                   \"data integrity (CRC) error in data\\n\" );\n         return False;\n      case BZ_MEM_ERROR:\n         outOfMemory();\n      case BZ_UNEXPECTED_EOF:\n         fprintf ( stderr,\n                   \"file ends unexpectedly\\n\" );\n         return False;\n      case BZ_DATA_ERROR_MAGIC:\n         if (zStream != stdin) fclose(zStream);\n         if (streamNo == 1) {\n          fprintf ( stderr, \n                    \"bad magic number (file not created by bzip2)\\n\" );\n            return False;\n         } else {\n            if (noisy)\n            fprintf ( stderr, \n                      \"trailing garbage after EOF ignored\\n\" );\n            return True;       \n         }\n      default:\n         panic ( \"test:unexpected error\" );\n   }\n\n   panic ( \"test:end\" );\n   return True; /*notreached*/\n}\n\n\n/*---------------------------------------------------*/\n/*--- Error [non-] handling grunge                ---*/\n/*---------------------------------------------------*/\n\n/*---------------------------------------------*/\nstatic\nvoid setExit ( Int32 v )\n{\n   if (v > exitValue) exitValue = v;\n}\n\n\n/*---------------------------------------------*/\nstatic \nvoid cadvise ( void )\n{\n   if (noisy)\n   fprintf (\n      stderr,\n      \"\\nIt is possible that the compressed file(s) have become corrupted.\\n\"\n        \"You can use the -tvv option to test integrity of such files.\\n\\n\"\n        \"You can use the `bzip2recover' program to attempt to recover\\n\"\n        \"data from undamaged sections of corrupted files.\\n\\n\"\n    );\n}\n\n\n/*---------------------------------------------*/\nstatic \nvoid showFileNames ( void )\n{\n   if (noisy)\n   fprintf (\n      stderr,\n      \"\\tInput file = %s, output file = %s\\n\",\n      inName, outName \n   );\n}\n\n\n/*---------------------------------------------*/\nstatic \nvoid cleanUpAndFail ( Int32 ec )\n{\n   IntNative      retVal;\n   struct MY_STAT statBuf;\n\n   if ( srcMode == SM_F2F \n        && opMode != OM_TEST\n        && deleteOutputOnInterrupt ) {\n\n      /* Check whether input file still exists.  Delete output file\n         only if input exists to avoid loss of data.  Joerg Prante, 5\n         January 2002.  (JRS 06-Jan-2002: other changes in 1.0.2 mean\n         this is less likely to happen.  But to be ultra-paranoid, we\n         do the check anyway.)  */\n      retVal = MY_STAT ( inName, &statBuf );\n      if (retVal == 0) {\n         if (noisy)\n            fprintf ( stderr, \n                      \"%s: Deleting output file %s, if it exists.\\n\",\n                      progName, outName );\n         if (outputHandleJustInCase != NULL)\n            fclose ( outputHandleJustInCase );\n         retVal = remove ( outName );\n         if (retVal != 0)\n            fprintf ( stderr,\n                      \"%s: WARNING: deletion of output file \"\n                      \"(apparently) failed.\\n\",\n                      progName );\n      } else {\n         fprintf ( stderr,\n                   \"%s: WARNING: deletion of output file suppressed\\n\",\n                    progName );\n         fprintf ( stderr,\n                   \"%s:    since input file no longer exists.  Output file\\n\",\n                   progName );\n         fprintf ( stderr,\n                   \"%s:    `%s' may be incomplete.\\n\",\n                   progName, outName );\n         fprintf ( stderr, \n                   \"%s:    I suggest doing an integrity test (bzip2 -tv)\"\n                   \" of it.\\n\",\n                   progName );\n      }\n   }\n\n   if (noisy && numFileNames > 0 && numFilesProcessed < numFileNames) {\n      fprintf ( stderr, \n                \"%s: WARNING: some files have not been processed:\\n\"\n                \"%s:    %d specified on command line, %d not processed yet.\\n\\n\",\n                progName, progName,\n                numFileNames, numFileNames - numFilesProcessed );\n   }\n   setExit(ec);\n   exit(exitValue);\n}\n\n\n/*---------------------------------------------*/\nstatic \nvoid panic ( const Char* s )\n{\n   fprintf ( stderr,\n             \"\\n%s: PANIC -- internal consistency error:\\n\"\n             \"\\t%s\\n\"\n             \"\\tThis is a BUG.  Please report it to me at:\\n\"\n             \"\\tjseward@bzip.org\\n\",\n             progName, s );\n   showFileNames();\n   cleanUpAndFail( 3 );\n}\n\n\n/*---------------------------------------------*/\nstatic \nvoid crcError ( void )\n{\n   fprintf ( stderr,\n             \"\\n%s: Data integrity error when decompressing.\\n\",\n             progName );\n   showFileNames();\n   cadvise();\n   cleanUpAndFail( 2 );\n}\n\n\n/*---------------------------------------------*/\nstatic \nvoid compressedStreamEOF ( void )\n{\n  if (noisy) {\n    fprintf ( stderr,\n\t      \"\\n%s: Compressed file ends unexpectedly;\\n\\t\"\n\t      \"perhaps it is corrupted?  *Possible* reason follows.\\n\",\n\t      progName );\n    perror ( progName );\n    showFileNames();\n    cadvise();\n  }\n  cleanUpAndFail( 2 );\n}\n\n\n/*---------------------------------------------*/\nstatic \nvoid ioError ( void )\n{\n   fprintf ( stderr,\n             \"\\n%s: I/O or other error, bailing out.  \"\n             \"Possible reason follows.\\n\",\n             progName );\n   perror ( progName );\n   showFileNames();\n   cleanUpAndFail( 1 );\n}\n\n\n/*---------------------------------------------*/\nstatic \nvoid mySignalCatcher ( IntNative n )\n{\n   fprintf ( stderr,\n             \"\\n%s: Control-C or similar caught, quitting.\\n\",\n             progName );\n   cleanUpAndFail(1);\n}\n\n\n/*---------------------------------------------*/\nstatic \nvoid mySIGSEGVorSIGBUScatcher ( IntNative n )\n{\n   if (opMode == OM_Z)\n      fprintf ( \n      stderr,\n      \"\\n%s: Caught a SIGSEGV or SIGBUS whilst compressing.\\n\"\n      \"\\n\"\n      \"   Possible causes are (most likely first):\\n\"\n      \"   (1) This computer has unreliable memory or cache hardware\\n\"\n      \"       (a surprisingly common problem; try a different machine.)\\n\"\n      \"   (2) A bug in the compiler used to create this executable\\n\"\n      \"       (unlikely, if you didn't compile bzip2 yourself.)\\n\"\n      \"   (3) A real bug in bzip2 -- I hope this should never be the case.\\n\"\n      \"   The user's manual, Section 4.3, has more info on (1) and (2).\\n\"\n      \"   \\n\"\n      \"   If you suspect this is a bug in bzip2, or are unsure about (1)\\n\"\n      \"   or (2), feel free to report it to me at: jseward@bzip.org.\\n\"\n      \"   Section 4.3 of the user's manual describes the info a useful\\n\"\n      \"   bug report should have.  If the manual is available on your\\n\"\n      \"   system, please try and read it before mailing me.  If you don't\\n\"\n      \"   have the manual or can't be bothered to read it, mail me anyway.\\n\"\n      \"\\n\",\n      progName );\n      else\n      fprintf ( \n      stderr,\n      \"\\n%s: Caught a SIGSEGV or SIGBUS whilst decompressing.\\n\"\n      \"\\n\"\n      \"   Possible causes are (most likely first):\\n\"\n      \"   (1) The compressed data is corrupted, and bzip2's usual checks\\n\"\n      \"       failed to detect this.  Try bzip2 -tvv my_file.bz2.\\n\"\n      \"   (2) This computer has unreliable memory or cache hardware\\n\"\n      \"       (a surprisingly common problem; try a different machine.)\\n\"\n      \"   (3) A bug in the compiler used to create this executable\\n\"\n      \"       (unlikely, if you didn't compile bzip2 yourself.)\\n\"\n      \"   (4) A real bug in bzip2 -- I hope this should never be the case.\\n\"\n      \"   The user's manual, Section 4.3, has more info on (2) and (3).\\n\"\n      \"   \\n\"\n      \"   If you suspect this is a bug in bzip2, or are unsure about (2)\\n\"\n      \"   or (3), feel free to report it to me at: jseward@bzip.org.\\n\"\n      \"   Section 4.3 of the user's manual describes the info a useful\\n\"\n      \"   bug report should have.  If the manual is available on your\\n\"\n      \"   system, please try and read it before mailing me.  If you don't\\n\"\n      \"   have the manual or can't be bothered to read it, mail me anyway.\\n\"\n      \"\\n\",\n      progName );\n\n   showFileNames();\n   if (opMode == OM_Z)\n      cleanUpAndFail( 3 ); else\n      { cadvise(); cleanUpAndFail( 2 ); }\n}\n\n\n/*---------------------------------------------*/\nstatic \nvoid outOfMemory ( void )\n{\n   fprintf ( stderr,\n             \"\\n%s: couldn't allocate enough memory\\n\",\n             progName );\n   showFileNames();\n   cleanUpAndFail(1);\n}\n\n\n/*---------------------------------------------*/\nstatic \nvoid configError ( void )\n{\n   fprintf ( stderr,\n             \"bzip2: I'm not configured correctly for this platform!\\n\"\n             \"\\tI require Int32, Int16 and Char to have sizes\\n\"\n             \"\\tof 4, 2 and 1 bytes to run properly, and they don't.\\n\"\n             \"\\tProbably you can fix this by defining them correctly,\\n\"\n             \"\\tand recompiling.  Bye!\\n\" );\n   setExit(3);\n   exit(exitValue);\n}\n\n\n/*---------------------------------------------------*/\n/*--- The main driver machinery                   ---*/\n/*---------------------------------------------------*/\n\n/* All rather crufty.  The main problem is that input files\n   are stat()d multiple times before use.  This should be\n   cleaned up. \n*/\n\n/*---------------------------------------------*/\nstatic \nvoid pad ( Char *s )\n{\n   Int32 i;\n   if ( (Int32)strlen(s) >= longestFileName ) return;\n   for (i = 1; i <= longestFileName - (Int32)strlen(s); i++)\n      fprintf ( stderr, \" \" );\n}\n\n\n/*---------------------------------------------*/\nstatic \nvoid copyFileName ( Char* to, Char* from ) \n{\n   if ( strlen(from) > FILE_NAME_LEN-10 )  {\n      fprintf (\n         stderr,\n         \"bzip2: file name\\n`%s'\\n\"\n         \"is suspiciously (more than %d chars) long.\\n\"\n         \"Try using a reasonable file name instead.  Sorry! :-)\\n\",\n         from, FILE_NAME_LEN-10\n      );\n      setExit(1);\n      exit(exitValue);\n   }\n\n  strncpy(to,from,FILE_NAME_LEN-10);\n  to[FILE_NAME_LEN-10]='\\0';\n}\n\n\n/*---------------------------------------------*/\nstatic \nBool fileExists ( Char* name )\n{\n   FILE *tmp   = fopen ( name, \"rb\" );\n   Bool exists = (tmp != NULL);\n   if (tmp != NULL) fclose ( tmp );\n   return exists;\n}\n\n\n/*---------------------------------------------*/\n/* Open an output file safely with O_EXCL and good permissions.\n   This avoids a race condition in versions < 1.0.2, in which\n   the file was first opened and then had its interim permissions\n   set safely.  We instead use open() to create the file with\n   the interim permissions required. (--- --- rw-).\n\n   For non-Unix platforms, if we are not worrying about\n   security issues, simple this simply behaves like fopen.\n*/\nstatic\nFILE* fopen_output_safely ( Char* name, const char* mode )\n{\n#  if BZ_UNIX\n   FILE*     fp;\n   IntNative fh;\n   fh = open(name, O_WRONLY|O_CREAT|O_EXCL, S_IWUSR|S_IRUSR);\n   if (fh == -1) return NULL;\n   fp = fdopen(fh, mode);\n   if (fp == NULL) close(fh);\n   return fp;\n#  else\n   return fopen(name, mode);\n#  endif\n}\n\n\n/*---------------------------------------------*/\n/*--\n  if in doubt, return True\n--*/\nstatic \nBool notAStandardFile ( Char* name )\n{\n   IntNative      i;\n   struct MY_STAT statBuf;\n\n   i = MY_LSTAT ( name, &statBuf );\n   if (i != 0) return True;\n   if (MY_S_ISREG(statBuf.st_mode)) return False;\n   return True;\n}\n\n\n/*---------------------------------------------*/\n/*--\n  rac 11/21/98 see if file has hard links to it\n--*/\nstatic \nInt32 countHardLinks ( Char* name )\n{  \n   IntNative      i;\n   struct MY_STAT statBuf;\n\n   i = MY_LSTAT ( name, &statBuf );\n   if (i != 0) return 0;\n   return (statBuf.st_nlink - 1);\n}\n\n\n/*---------------------------------------------*/\n/* Copy modification date, access date, permissions and owner from the\n   source to destination file.  We have to copy this meta-info off\n   into fileMetaInfo before starting to compress / decompress it,\n   because doing it afterwards means we get the wrong access time.\n\n   To complicate matters, in compress() and decompress() below, the\n   sequence of tests preceding the call to saveInputFileMetaInfo()\n   involves calling fileExists(), which in turn establishes its result\n   by attempting to fopen() the file, and if successful, immediately\n   fclose()ing it again.  So we have to assume that the fopen() call\n   does not cause the access time field to be updated.\n\n   Reading of the man page for stat() (man 2 stat) on RedHat 7.2 seems\n   to imply that merely doing open() will not affect the access time.\n   Therefore we merely need to hope that the C library only does\n   open() as a result of fopen(), and not any kind of read()-ahead\n   cleverness.\n\n   It sounds pretty fragile to me.  Whether this carries across\n   robustly to arbitrary Unix-like platforms (or even works robustly\n   on this one, RedHat 7.2) is unknown to me.  Nevertheless ...  \n*/\n#if BZ_UNIX\nstatic \nstruct MY_STAT fileMetaInfo;\n#endif\n\nstatic \nvoid saveInputFileMetaInfo ( Char *srcName )\n{\n#  if BZ_UNIX\n   IntNative retVal;\n   /* Note use of stat here, not lstat. */\n   retVal = MY_STAT( srcName, &fileMetaInfo );\n   ERROR_IF_NOT_ZERO ( retVal );\n#  endif\n}\n\n\nstatic \nvoid applySavedTimeInfoToOutputFile ( Char *dstName )\n{\n#  if BZ_UNIX\n   IntNative      retVal;\n   struct utimbuf uTimBuf;\n\n   uTimBuf.actime = fileMetaInfo.st_atime;\n   uTimBuf.modtime = fileMetaInfo.st_mtime;\n\n   retVal = utime ( dstName, &uTimBuf );\n   ERROR_IF_NOT_ZERO ( retVal );\n#  endif\n}\n\nstatic \nvoid applySavedFileAttrToOutputFile ( IntNative fd )\n{\n#  if BZ_UNIX\n   IntNative retVal;\n\n   retVal = fchmod ( fd, fileMetaInfo.st_mode );\n   ERROR_IF_NOT_ZERO ( retVal );\n\n   (void) fchown ( fd, fileMetaInfo.st_uid, fileMetaInfo.st_gid );\n   /* chown() will in many cases return with EPERM, which can\n      be safely ignored.\n   */\n#  endif\n}\n\n\n/*---------------------------------------------*/\nstatic \nBool containsDubiousChars ( Char* name )\n{\n#  if BZ_UNIX\n   /* On unix, files can contain any characters and the file expansion\n    * is performed by the shell.\n    */\n   return False;\n#  else /* ! BZ_UNIX */\n   /* On non-unix (Win* platforms), wildcard characters are not allowed in \n    * filenames.\n    */\n   for (; *name != '\\0'; name++)\n      if (*name == '?' || *name == '*') return True;\n   return False;\n#  endif /* BZ_UNIX */\n}\n\n\n/*---------------------------------------------*/\n#define BZ_N_SUFFIX_PAIRS 4\n\nconst Char* zSuffix[BZ_N_SUFFIX_PAIRS] \n   = { \".bz2\", \".bz\", \".tbz2\", \".tbz\" };\nconst Char* unzSuffix[BZ_N_SUFFIX_PAIRS] \n   = { \"\", \"\", \".tar\", \".tar\" };\n\nstatic \nBool hasSuffix ( Char* s, const Char* suffix )\n{\n   Int32 ns = strlen(s);\n   Int32 nx = strlen(suffix);\n   if (ns < nx) return False;\n   if (strcmp(s + ns - nx, suffix) == 0) return True;\n   return False;\n}\n\nstatic \nBool mapSuffix ( Char* name, \n                 const Char* oldSuffix, \n                 const Char* newSuffix )\n{\n   if (!hasSuffix(name,oldSuffix)) return False;\n   name[strlen(name)-strlen(oldSuffix)] = 0;\n   strcat ( name, newSuffix );\n   return True;\n}\n\n\n/*---------------------------------------------*/\nstatic \nvoid compress ( Char *name )\n{\n   FILE  *inStr;\n   FILE  *outStr;\n   Int32 n, i;\n   struct MY_STAT statBuf;\n\n   deleteOutputOnInterrupt = False;\n\n   if (name == NULL && srcMode != SM_I2O)\n      panic ( \"compress: bad modes\\n\" );\n\n   switch (srcMode) {\n      case SM_I2O: \n         copyFileName ( inName, (Char*)\"(stdin)\" );\n         copyFileName ( outName, (Char*)\"(stdout)\" ); \n         break;\n      case SM_F2F: \n         copyFileName ( inName, name );\n         copyFileName ( outName, name );\n         strcat ( outName, \".bz2\" ); \n         break;\n      case SM_F2O: \n         copyFileName ( inName, name );\n         copyFileName ( outName, (Char*)\"(stdout)\" ); \n         break;\n   }\n\n   if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) {\n      if (noisy)\n      fprintf ( stderr, \"%s: There are no files matching `%s'.\\n\",\n                progName, inName );\n      setExit(1);\n      return;\n   }\n   if ( srcMode != SM_I2O && !fileExists ( inName ) ) {\n      fprintf ( stderr, \"%s: Can't open input file %s: %s.\\n\",\n                progName, inName, strerror(errno) );\n      setExit(1);\n      return;\n   }\n   for (i = 0; i < BZ_N_SUFFIX_PAIRS; i++) {\n      if (hasSuffix(inName, zSuffix[i])) {\n         if (noisy)\n         fprintf ( stderr, \n                   \"%s: Input file %s already has %s suffix.\\n\",\n                   progName, inName, zSuffix[i] );\n         setExit(1);\n         return;\n      }\n   }\n   if ( srcMode == SM_F2F || srcMode == SM_F2O ) {\n      MY_STAT(inName, &statBuf);\n      if ( MY_S_ISDIR(statBuf.st_mode) ) {\n         fprintf( stderr,\n                  \"%s: Input file %s is a directory.\\n\",\n                  progName,inName);\n         setExit(1);\n         return;\n      }\n   }\n   if ( srcMode == SM_F2F && !forceOverwrite && notAStandardFile ( inName )) {\n      if (noisy)\n      fprintf ( stderr, \"%s: Input file %s is not a normal file.\\n\",\n                progName, inName );\n      setExit(1);\n      return;\n   }\n   if ( srcMode == SM_F2F && fileExists ( outName ) ) {\n      if (forceOverwrite) {\n\t remove(outName);\n      } else {\n\t fprintf ( stderr, \"%s: Output file %s already exists.\\n\",\n\t\t   progName, outName );\n\t setExit(1);\n\t return;\n      }\n   }\n   if ( srcMode == SM_F2F && !forceOverwrite &&\n        (n=countHardLinks ( inName )) > 0) {\n      fprintf ( stderr, \"%s: Input file %s has %d other link%s.\\n\",\n                progName, inName, n, n > 1 ? \"s\" : \"\" );\n      setExit(1);\n      return;\n   }\n\n   if ( srcMode == SM_F2F ) {\n      /* Save the file's meta-info before we open it.  Doing it later\n         means we mess up the access times. */\n      saveInputFileMetaInfo ( inName );\n   }\n\n   switch ( srcMode ) {\n\n      case SM_I2O:\n         inStr = stdin;\n         outStr = stdout;\n         if ( isatty ( fileno ( stdout ) ) ) {\n            fprintf ( stderr,\n                      \"%s: I won't write compressed data to a terminal.\\n\",\n                      progName );\n            fprintf ( stderr, \"%s: For help, type: `%s --help'.\\n\",\n                              progName, progName );\n            setExit(1);\n            return;\n         };\n         break;\n\n      case SM_F2O:\n         inStr = fopen ( inName, \"rb\" );\n         outStr = stdout;\n         if ( isatty ( fileno ( stdout ) ) ) {\n            fprintf ( stderr,\n                      \"%s: I won't write compressed data to a terminal.\\n\",\n                      progName );\n            fprintf ( stderr, \"%s: For help, type: `%s --help'.\\n\",\n                              progName, progName );\n            if ( inStr != NULL ) fclose ( inStr );\n            setExit(1);\n            return;\n         };\n         if ( inStr == NULL ) {\n            fprintf ( stderr, \"%s: Can't open input file %s: %s.\\n\",\n                      progName, inName, strerror(errno) );\n            setExit(1);\n            return;\n         };\n         break;\n\n      case SM_F2F:\n         inStr = fopen ( inName, \"rb\" );\n         outStr = fopen_output_safely ( outName, \"wb\" );\n         if ( outStr == NULL) {\n            fprintf ( stderr, \"%s: Can't create output file %s: %s.\\n\",\n                      progName, outName, strerror(errno) );\n            if ( inStr != NULL ) fclose ( inStr );\n            setExit(1);\n            return;\n         }\n         if ( inStr == NULL ) {\n            fprintf ( stderr, \"%s: Can't open input file %s: %s.\\n\",\n                      progName, inName, strerror(errno) );\n            if ( outStr != NULL ) fclose ( outStr );\n            setExit(1);\n            return;\n         };\n         break;\n\n      default:\n         panic ( \"compress: bad srcMode\" );\n         break;\n   }\n\n   if (verbosity >= 1) {\n      fprintf ( stderr,  \"  %s: \", inName );\n      pad ( inName );\n      fflush ( stderr );\n   }\n\n   /*--- Now the input and output handles are sane.  Do the Biz. ---*/\n   outputHandleJustInCase = outStr;\n   deleteOutputOnInterrupt = True;\n   compressStream ( inStr, outStr );\n   outputHandleJustInCase = NULL;\n\n   /*--- If there was an I/O error, we won't get here. ---*/\n   if ( srcMode == SM_F2F ) {\n      applySavedTimeInfoToOutputFile ( outName );\n      deleteOutputOnInterrupt = False;\n      if ( !keepInputFiles ) {\n         IntNative retVal = remove ( inName );\n         ERROR_IF_NOT_ZERO ( retVal );\n      }\n   }\n\n   deleteOutputOnInterrupt = False;\n}\n\n\n/*---------------------------------------------*/\nstatic \nvoid uncompress ( Char *name )\n{\n   FILE  *inStr;\n   FILE  *outStr;\n   Int32 n, i;\n   Bool  magicNumberOK;\n   Bool  cantGuess;\n   struct MY_STAT statBuf;\n\n   deleteOutputOnInterrupt = False;\n\n   if (name == NULL && srcMode != SM_I2O)\n      panic ( \"uncompress: bad modes\\n\" );\n\n   cantGuess = False;\n   switch (srcMode) {\n      case SM_I2O: \n         copyFileName ( inName, (Char*)\"(stdin)\" );\n         copyFileName ( outName, (Char*)\"(stdout)\" ); \n         break;\n      case SM_F2F: \n         copyFileName ( inName, name );\n         copyFileName ( outName, name );\n         for (i = 0; i < BZ_N_SUFFIX_PAIRS; i++)\n            if (mapSuffix(outName,zSuffix[i],unzSuffix[i]))\n               goto zzz; \n         cantGuess = True;\n         strcat ( outName, \".out\" );\n         break;\n      case SM_F2O: \n         copyFileName ( inName, name );\n         copyFileName ( outName, (Char*)\"(stdout)\" ); \n         break;\n   }\n\n   zzz:\n   if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) {\n      if (noisy)\n      fprintf ( stderr, \"%s: There are no files matching `%s'.\\n\",\n                progName, inName );\n      setExit(1);\n      return;\n   }\n   if ( srcMode != SM_I2O && !fileExists ( inName ) ) {\n      fprintf ( stderr, \"%s: Can't open input file %s: %s.\\n\",\n                progName, inName, strerror(errno) );\n      setExit(1);\n      return;\n   }\n   if ( srcMode == SM_F2F || srcMode == SM_F2O ) {\n      MY_STAT(inName, &statBuf);\n      if ( MY_S_ISDIR(statBuf.st_mode) ) {\n         fprintf( stderr,\n                  \"%s: Input file %s is a directory.\\n\",\n                  progName,inName);\n         setExit(1);\n         return;\n      }\n   }\n   if ( srcMode == SM_F2F && !forceOverwrite && notAStandardFile ( inName )) {\n      if (noisy)\n      fprintf ( stderr, \"%s: Input file %s is not a normal file.\\n\",\n                progName, inName );\n      setExit(1);\n      return;\n   }\n   if ( /* srcMode == SM_F2F implied && */ cantGuess ) {\n      if (noisy)\n      fprintf ( stderr, \n                \"%s: Can't guess original name for %s -- using %s\\n\",\n                progName, inName, outName );\n      /* just a warning, no return */\n   }   \n   if ( srcMode == SM_F2F && fileExists ( outName ) ) {\n      if (forceOverwrite) {\n\tremove(outName);\n      } else {\n        fprintf ( stderr, \"%s: Output file %s already exists.\\n\",\n                  progName, outName );\n        setExit(1);\n        return;\n      }\n   }\n   if ( srcMode == SM_F2F && !forceOverwrite &&\n        (n=countHardLinks ( inName ) ) > 0) {\n      fprintf ( stderr, \"%s: Input file %s has %d other link%s.\\n\",\n                progName, inName, n, n > 1 ? \"s\" : \"\" );\n      setExit(1);\n      return;\n   }\n\n   if ( srcMode == SM_F2F ) {\n      /* Save the file's meta-info before we open it.  Doing it later\n         means we mess up the access times. */\n      saveInputFileMetaInfo ( inName );\n   }\n\n   switch ( srcMode ) {\n\n      case SM_I2O:\n         inStr = stdin;\n         outStr = stdout;\n         if ( isatty ( fileno ( stdin ) ) ) {\n            fprintf ( stderr,\n                      \"%s: I won't read compressed data from a terminal.\\n\",\n                      progName );\n            fprintf ( stderr, \"%s: For help, type: `%s --help'.\\n\",\n                              progName, progName );\n            setExit(1);\n            return;\n         };\n         break;\n\n      case SM_F2O:\n         inStr = fopen ( inName, \"rb\" );\n         outStr = stdout;\n         if ( inStr == NULL ) {\n            fprintf ( stderr, \"%s: Can't open input file %s:%s.\\n\",\n                      progName, inName, strerror(errno) );\n            if ( inStr != NULL ) fclose ( inStr );\n            setExit(1);\n            return;\n         };\n         break;\n\n      case SM_F2F:\n         inStr = fopen ( inName, \"rb\" );\n         outStr = fopen_output_safely ( outName, \"wb\" );\n         if ( outStr == NULL) {\n            fprintf ( stderr, \"%s: Can't create output file %s: %s.\\n\",\n                      progName, outName, strerror(errno) );\n            if ( inStr != NULL ) fclose ( inStr );\n            setExit(1);\n            return;\n         }\n         if ( inStr == NULL ) {\n            fprintf ( stderr, \"%s: Can't open input file %s: %s.\\n\",\n                      progName, inName, strerror(errno) );\n            if ( outStr != NULL ) fclose ( outStr );\n            setExit(1);\n            return;\n         };\n         break;\n\n      default:\n         panic ( \"uncompress: bad srcMode\" );\n         break;\n   }\n\n   if (verbosity >= 1) {\n      fprintf ( stderr, \"  %s: \", inName );\n      pad ( inName );\n      fflush ( stderr );\n   }\n\n   /*--- Now the input and output handles are sane.  Do the Biz. ---*/\n   outputHandleJustInCase = outStr;\n   deleteOutputOnInterrupt = True;\n   magicNumberOK = uncompressStream ( inStr, outStr );\n   outputHandleJustInCase = NULL;\n\n   /*--- If there was an I/O error, we won't get here. ---*/\n   if ( magicNumberOK ) {\n      if ( srcMode == SM_F2F ) {\n         applySavedTimeInfoToOutputFile ( outName );\n         deleteOutputOnInterrupt = False;\n         if ( !keepInputFiles ) {\n            IntNative retVal = remove ( inName );\n            ERROR_IF_NOT_ZERO ( retVal );\n         }\n      }\n   } else {\n      unzFailsExist = True;\n      deleteOutputOnInterrupt = False;\n      if ( srcMode == SM_F2F ) {\n         IntNative retVal = remove ( outName );\n         ERROR_IF_NOT_ZERO ( retVal );\n      }\n   }\n   deleteOutputOnInterrupt = False;\n\n   if ( magicNumberOK ) {\n      if (verbosity >= 1)\n         fprintf ( stderr, \"done\\n\" );\n   } else {\n      setExit(2);\n      if (verbosity >= 1)\n         fprintf ( stderr, \"not a bzip2 file.\\n\" ); else\n         fprintf ( stderr,\n                   \"%s: %s is not a bzip2 file.\\n\",\n                   progName, inName );\n   }\n\n}\n\n\n/*---------------------------------------------*/\nstatic \nvoid testf ( Char *name )\n{\n   FILE *inStr;\n   Bool allOK;\n   struct MY_STAT statBuf;\n\n   deleteOutputOnInterrupt = False;\n\n   if (name == NULL && srcMode != SM_I2O)\n      panic ( \"testf: bad modes\\n\" );\n\n   copyFileName ( outName, (Char*)\"(none)\" );\n   switch (srcMode) {\n      case SM_I2O: copyFileName ( inName, (Char*)\"(stdin)\" ); break;\n      case SM_F2F: copyFileName ( inName, name ); break;\n      case SM_F2O: copyFileName ( inName, name ); break;\n   }\n\n   if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) {\n      if (noisy)\n      fprintf ( stderr, \"%s: There are no files matching `%s'.\\n\",\n                progName, inName );\n      setExit(1);\n      return;\n   }\n   if ( srcMode != SM_I2O && !fileExists ( inName ) ) {\n      fprintf ( stderr, \"%s: Can't open input %s: %s.\\n\",\n                progName, inName, strerror(errno) );\n      setExit(1);\n      return;\n   }\n   if ( srcMode != SM_I2O ) {\n      MY_STAT(inName, &statBuf);\n      if ( MY_S_ISDIR(statBuf.st_mode) ) {\n         fprintf( stderr,\n                  \"%s: Input file %s is a directory.\\n\",\n                  progName,inName);\n         setExit(1);\n         return;\n      }\n   }\n\n   switch ( srcMode ) {\n\n      case SM_I2O:\n         if ( isatty ( fileno ( stdin ) ) ) {\n            fprintf ( stderr,\n                      \"%s: I won't read compressed data from a terminal.\\n\",\n                      progName );\n            fprintf ( stderr, \"%s: For help, type: `%s --help'.\\n\",\n                              progName, progName );\n            setExit(1);\n            return;\n         };\n         inStr = stdin;\n         break;\n\n      case SM_F2O: case SM_F2F:\n         inStr = fopen ( inName, \"rb\" );\n         if ( inStr == NULL ) {\n            fprintf ( stderr, \"%s: Can't open input file %s:%s.\\n\",\n                      progName, inName, strerror(errno) );\n            setExit(1);\n            return;\n         };\n         break;\n\n      default:\n         panic ( \"testf: bad srcMode\" );\n         break;\n   }\n\n   if (verbosity >= 1) {\n      fprintf ( stderr, \"  %s: \", inName );\n      pad ( inName );\n      fflush ( stderr );\n   }\n\n   /*--- Now the input handle is sane.  Do the Biz. ---*/\n   outputHandleJustInCase = NULL;\n   allOK = testStream ( inStr );\n\n   if (allOK && verbosity >= 1) fprintf ( stderr, \"ok\\n\" );\n   if (!allOK) testFailsExist = True;\n}\n\n\n/*---------------------------------------------*/\nstatic \nvoid license ( void )\n{\n   fprintf ( stderr,\n\n    \"bzip2, a block-sorting file compressor.  \"\n    \"Version %s.\\n\"\n    \"   \\n\"\n    \"   Copyright (C) 1996-2010 by Julian Seward.\\n\"\n    \"   \\n\"\n    \"   This program is free software; you can redistribute it and/or modify\\n\"\n    \"   it under the terms set out in the LICENSE file, which is included\\n\"\n    \"   in the bzip2-1.0.6 source distribution.\\n\"\n    \"   \\n\"\n    \"   This program is distributed in the hope that it will be useful,\\n\"\n    \"   but WITHOUT ANY WARRANTY; without even the implied warranty of\\n\"\n    \"   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\\n\"\n    \"   LICENSE file for more details.\\n\"\n    \"   \\n\",\n    BZ2_bzlibVersion()\n   );\n}\n\n\n/*---------------------------------------------*/\nstatic \nvoid usage ( Char *fullProgName )\n{\n   fprintf (\n      stderr,\n      \"bzip2, a block-sorting file compressor.  \"\n      \"Version %s.\\n\"\n      \"\\n   usage: %s [flags and input files in any order]\\n\"\n      \"\\n\"\n      \"   -h --help           print this message\\n\"\n      \"   -d --decompress     force decompression\\n\"\n      \"   -z --compress       force compression\\n\"\n      \"   -k --keep           keep (don't delete) input files\\n\"\n      \"   -f --force          overwrite existing output files\\n\"\n      \"   -t --test           test compressed file integrity\\n\"\n      \"   -c --stdout         output to standard out\\n\"\n      \"   -q --quiet          suppress noncritical error messages\\n\"\n      \"   -v --verbose        be verbose (a 2nd -v gives more)\\n\"\n      \"   -L --license        display software version & license\\n\"\n      \"   -V --version        display software version & license\\n\"\n      \"   -s --small          use less memory (at most 2500k)\\n\"\n      \"   -1 .. -9            set block size to 100k .. 900k\\n\"\n      \"   --fast              alias for -1\\n\"\n      \"   --best              alias for -9\\n\"\n      \"\\n\"\n      \"   If invoked as `bzip2', default action is to compress.\\n\"\n      \"              as `bunzip2',  default action is to decompress.\\n\"\n      \"              as `bzcat', default action is to decompress to stdout.\\n\"\n      \"\\n\"\n      \"   If no file names are given, bzip2 compresses or decompresses\\n\"\n      \"   from standard input to standard output.  You can combine\\n\"\n      \"   short flags, so `-v -4' means the same as -v4 or -4v, &c.\\n\"\n#     if BZ_UNIX\n      \"\\n\"\n#     endif\n      ,\n\n      BZ2_bzlibVersion(),\n      fullProgName\n   );\n}\n\n\n/*---------------------------------------------*/\nstatic \nvoid redundant ( Char* flag )\n{\n   fprintf ( \n      stderr, \n      \"%s: %s is redundant in versions 0.9.5 and above\\n\",\n      progName, flag );\n}\n\n\n/*---------------------------------------------*/\n/*--\n  All the garbage from here to main() is purely to\n  implement a linked list of command-line arguments,\n  into which main() copies argv[1 .. argc-1].\n\n  The purpose of this exercise is to facilitate \n  the expansion of wildcard characters * and ? in \n  filenames for OSs which don't know how to do it\n  themselves, like MSDOS, Windows 95 and NT.\n\n  The actual Dirty Work is done by the platform-\n  specific macro APPEND_FILESPEC.\n--*/\n\ntypedef\n   struct zzzz {\n      Char        *name;\n      struct zzzz *link;\n   }\n   Cell;\n\n\n/*---------------------------------------------*/\nstatic \nvoid *myMalloc ( Int32 n )\n{\n   void* p;\n\n   p = malloc ( (size_t)n );\n   if (p == NULL) outOfMemory ();\n   return p;\n}\n\n\n/*---------------------------------------------*/\nstatic \nCell *mkCell ( void )\n{\n   Cell *c;\n\n   c = (Cell*) myMalloc ( sizeof ( Cell ) );\n   c->name = NULL;\n   c->link = NULL;\n   return c;\n}\n\n\n/*---------------------------------------------*/\nstatic \nCell *snocString ( Cell *root, Char *name )\n{\n   if (root == NULL) {\n      Cell *tmp = mkCell();\n      tmp->name = (Char*) myMalloc ( 5 + strlen(name) );\n      strcpy ( tmp->name, name );\n      return tmp;\n   } else {\n      Cell *tmp = root;\n      while (tmp->link != NULL) tmp = tmp->link;\n      tmp->link = snocString ( tmp->link, name );\n      return root;\n   }\n}\n\n\n/*---------------------------------------------*/\nstatic \nvoid addFlagsFromEnvVar ( Cell** argList, Char* varName ) \n{\n   Int32 i, j, k;\n   Char *envbase, *p;\n\n   envbase = getenv(varName);\n   if (envbase != NULL) {\n      p = envbase;\n      i = 0;\n      while (True) {\n         if (p[i] == 0) break;\n         p += i;\n         i = 0;\n         while (isspace((Int32)(p[0]))) p++;\n         while (p[i] != 0 && !isspace((Int32)(p[i]))) i++;\n         if (i > 0) {\n            k = i; if (k > FILE_NAME_LEN-10) k = FILE_NAME_LEN-10;\n            for (j = 0; j < k; j++) tmpName[j] = p[j];\n            tmpName[k] = 0;\n            APPEND_FLAG(*argList, tmpName);\n         }\n      }\n   }\n}\n\n\n/*---------------------------------------------*/\n#define ISFLAG(s) (strcmp(aa->name, (s))==0)\n\nIntNative main ( IntNative argc, Char *argv[] )\n{\n   Int32  i, j;\n   Char   *tmp;\n   Cell   *argList;\n   Cell   *aa;\n   Bool   decode;\n\n   /*-- Be really really really paranoid :-) --*/\n   if (sizeof(Int32) != 4 || sizeof(UInt32) != 4  ||\n       sizeof(Int16) != 2 || sizeof(UInt16) != 2  ||\n       sizeof(Char)  != 1 || sizeof(UChar)  != 1)\n      configError();\n\n   /*-- Initialise --*/\n   outputHandleJustInCase  = NULL;\n   smallMode               = False;\n   keepInputFiles          = False;\n   forceOverwrite          = False;\n   noisy                   = True;\n   verbosity               = 0;\n   blockSize100k           = 9;\n   testFailsExist          = False;\n   unzFailsExist           = False;\n   numFileNames            = 0;\n   numFilesProcessed       = 0;\n   workFactor              = 30;\n   deleteOutputOnInterrupt = False;\n   exitValue               = 0;\n   i = j = 0; /* avoid bogus warning from egcs-1.1.X */\n\n   /*-- Set up signal handlers for mem access errors --*/\n   signal (SIGSEGV, mySIGSEGVorSIGBUScatcher);\n#  if BZ_UNIX\n#  ifndef __DJGPP__\n   signal (SIGBUS,  mySIGSEGVorSIGBUScatcher);\n#  endif\n#  endif\n\n   copyFileName ( inName,  (Char*)\"(none)\" );\n   copyFileName ( outName, (Char*)\"(none)\" );\n\n   copyFileName ( progNameReally, argv[0] );\n   progName = &progNameReally[0];\n   for (tmp = &progNameReally[0]; *tmp != '\\0'; tmp++)\n      if (*tmp == PATH_SEP) progName = tmp + 1;\n\n\n   /*-- Copy flags from env var BZIP2, and \n        expand filename wildcards in arg list.\n   --*/\n   argList = NULL;\n   addFlagsFromEnvVar ( &argList,  (Char*)\"BZIP2\" );\n   addFlagsFromEnvVar ( &argList,  (Char*)\"BZIP\" );\n   for (i = 1; i <= argc-1; i++)\n      APPEND_FILESPEC(argList, argv[i]);\n\n\n   /*-- Find the length of the longest filename --*/\n   longestFileName = 7;\n   numFileNames    = 0;\n   decode          = True;\n   for (aa = argList; aa != NULL; aa = aa->link) {\n      if (ISFLAG(\"--\")) { decode = False; continue; }\n      if (aa->name[0] == '-' && decode) continue;\n      numFileNames++;\n      if (longestFileName < (Int32)strlen(aa->name) )\n         longestFileName = (Int32)strlen(aa->name);\n   }\n\n\n   /*-- Determine source modes; flag handling may change this too. --*/\n   if (numFileNames == 0)\n      srcMode = SM_I2O; else srcMode = SM_F2F;\n\n\n   /*-- Determine what to do (compress/uncompress/test/cat). --*/\n   /*-- Note that subsequent flag handling may change this. --*/\n   opMode = OM_Z;\n\n   if ( (strstr ( progName, \"unzip\" ) != 0) ||\n        (strstr ( progName, \"UNZIP\" ) != 0) )\n      opMode = OM_UNZ;\n\n   if ( (strstr ( progName, \"z2cat\" ) != 0) ||\n        (strstr ( progName, \"Z2CAT\" ) != 0) ||\n        (strstr ( progName, \"zcat\" ) != 0)  ||\n        (strstr ( progName, \"ZCAT\" ) != 0) )  {\n      opMode = OM_UNZ;\n      srcMode = (numFileNames == 0) ? SM_I2O : SM_F2O;\n   }\n\n\n   /*-- Look at the flags. --*/\n   for (aa = argList; aa != NULL; aa = aa->link) {\n      if (ISFLAG(\"--\")) break;\n      if (aa->name[0] == '-' && aa->name[1] != '-') {\n         for (j = 1; aa->name[j] != '\\0'; j++) {\n            switch (aa->name[j]) {\n               case 'c': srcMode          = SM_F2O; break;\n               case 'd': opMode           = OM_UNZ; break;\n               case 'z': opMode           = OM_Z; break;\n               case 'f': forceOverwrite   = True; break;\n               case 't': opMode           = OM_TEST; break;\n               case 'k': keepInputFiles   = True; break;\n               case 's': smallMode        = True; break;\n               case 'q': noisy            = False; break;\n               case '1': blockSize100k    = 1; break;\n               case '2': blockSize100k    = 2; break;\n               case '3': blockSize100k    = 3; break;\n               case '4': blockSize100k    = 4; break;\n               case '5': blockSize100k    = 5; break;\n               case '6': blockSize100k    = 6; break;\n               case '7': blockSize100k    = 7; break;\n               case '8': blockSize100k    = 8; break;\n               case '9': blockSize100k    = 9; break;\n               case 'V':\n               case 'L': license();            break;\n               case 'v': verbosity++; break;\n               case 'h': usage ( progName );\n                         exit ( 0 );\n                         break;\n               default:  fprintf ( stderr, \"%s: Bad flag `%s'\\n\",\n                                   progName, aa->name );\n                         usage ( progName );\n                         exit ( 1 );\n                         break;\n            }\n         }\n      }\n   }\n   \n   /*-- And again ... --*/\n   for (aa = argList; aa != NULL; aa = aa->link) {\n      if (ISFLAG(\"--\")) break;\n      if (ISFLAG(\"--stdout\"))            srcMode          = SM_F2O;  else\n      if (ISFLAG(\"--decompress\"))        opMode           = OM_UNZ;  else\n      if (ISFLAG(\"--compress\"))          opMode           = OM_Z;    else\n      if (ISFLAG(\"--force\"))             forceOverwrite   = True;    else\n      if (ISFLAG(\"--test\"))              opMode           = OM_TEST; else\n      if (ISFLAG(\"--keep\"))              keepInputFiles   = True;    else\n      if (ISFLAG(\"--small\"))             smallMode        = True;    else\n      if (ISFLAG(\"--quiet\"))             noisy            = False;   else\n      if (ISFLAG(\"--version\"))           license();                  else\n      if (ISFLAG(\"--license\"))           license();                  else\n      if (ISFLAG(\"--exponential\"))       workFactor = 1;             else \n      if (ISFLAG(\"--repetitive-best\"))   redundant(aa->name);        else\n      if (ISFLAG(\"--repetitive-fast\"))   redundant(aa->name);        else\n      if (ISFLAG(\"--fast\"))              blockSize100k = 1;          else\n      if (ISFLAG(\"--best\"))              blockSize100k = 9;          else\n      if (ISFLAG(\"--verbose\"))           verbosity++;                else\n      if (ISFLAG(\"--help\"))              { usage ( progName ); exit ( 0 ); }\n         else\n         if (strncmp ( aa->name, \"--\", 2) == 0) {\n            fprintf ( stderr, \"%s: Bad flag `%s'\\n\", progName, aa->name );\n            usage ( progName );\n            exit ( 1 );\n         }\n   }\n\n   if (verbosity > 4) verbosity = 4;\n   if (opMode == OM_Z && smallMode && blockSize100k > 2) \n      blockSize100k = 2;\n\n   if (opMode == OM_TEST && srcMode == SM_F2O) {\n      fprintf ( stderr, \"%s: -c and -t cannot be used together.\\n\",\n                progName );\n      exit ( 1 );\n   }\n\n   if (srcMode == SM_F2O && numFileNames == 0)\n      srcMode = SM_I2O;\n\n   if (opMode != OM_Z) blockSize100k = 0;\n\n   if (srcMode == SM_F2F) {\n      signal (SIGINT,  mySignalCatcher);\n      signal (SIGTERM, mySignalCatcher);\n#     if BZ_UNIX\n      signal (SIGHUP,  mySignalCatcher);\n#     endif\n   }\n\n   if (opMode == OM_Z) {\n     if (srcMode == SM_I2O) {\n        compress ( NULL );\n     } else {\n        decode = True;\n        for (aa = argList; aa != NULL; aa = aa->link) {\n           if (ISFLAG(\"--\")) { decode = False; continue; }\n           if (aa->name[0] == '-' && decode) continue;\n           numFilesProcessed++;\n           compress ( aa->name );\n        }\n     }\n   } \n   else\n\n   if (opMode == OM_UNZ) {\n      unzFailsExist = False;\n      if (srcMode == SM_I2O) {\n         uncompress ( NULL );\n      } else {\n         decode = True;\n         for (aa = argList; aa != NULL; aa = aa->link) {\n            if (ISFLAG(\"--\")) { decode = False; continue; }\n            if (aa->name[0] == '-' && decode) continue;\n            numFilesProcessed++;\n            uncompress ( aa->name );\n         }      \n      }\n      if (unzFailsExist) { \n         setExit(2); \n         exit(exitValue);\n      }\n   } \n\n   else {\n      testFailsExist = False;\n      if (srcMode == SM_I2O) {\n         testf ( NULL );\n      } else {\n         decode = True;\n         for (aa = argList; aa != NULL; aa = aa->link) {\n\t    if (ISFLAG(\"--\")) { decode = False; continue; }\n            if (aa->name[0] == '-' && decode) continue;\n            numFilesProcessed++;\n            testf ( aa->name );\n\t }\n      }\n      if (testFailsExist && noisy) {\n         fprintf ( stderr,\n           \"\\n\"\n           \"You can use the `bzip2recover' program to attempt to recover\\n\"\n           \"data from undamaged sections of corrupted files.\\n\\n\"\n         );\n         setExit(2);\n         exit(exitValue);\n      }\n   }\n\n   /* Free the argument list memory to mollify leak detectors \n      (eg) Purify, Checker.  Serves no other useful purpose.\n   */\n   aa = argList;\n   while (aa != NULL) {\n      Cell* aa2 = aa->link;\n      if (aa->name != NULL) free(aa->name);\n      free(aa);\n      aa = aa2;\n   }\n\n   return exitValue;\n}\n\n\n/*-----------------------------------------------------------*/\n/*--- end                                         bzip2.c ---*/\n/*-----------------------------------------------------------*/\n"
  },
  {
    "path": "external/bzip2/bzip2.exe.manifest",
    "content": "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>\n<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <security>\n      <requestedPrivileges>\n        <requestedExecutionLevel level='asInvoker' uiAccess='false' />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n  <dependency>\n    <dependentAssembly>\n      <assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />\n    </dependentAssembly>\n  </dependency>\n</assembly>\n"
  },
  {
    "path": "external/bzip2/bzip2.txt",
    "content": "\nNAME\n       bzip2, bunzip2 - a block-sorting file compressor, v1.0.6\n       bzcat - decompresses files to stdout\n       bzip2recover - recovers data from damaged bzip2 files\n\n\nSYNOPSIS\n       bzip2 [ -cdfkqstvzVL123456789 ] [ filenames ...  ]\n       bunzip2 [ -fkvsVL ] [ filenames ...  ]\n       bzcat [ -s ] [ filenames ...  ]\n       bzip2recover filename\n\n\nDESCRIPTION\n       bzip2  compresses  files  using  the Burrows-Wheeler block\n       sorting text compression algorithm,  and  Huffman  coding.\n       Compression  is  generally  considerably  better than that\n       achieved by more conventional LZ77/LZ78-based compressors,\n       and  approaches  the performance of the PPM family of sta-\n       tistical compressors.\n\n       The command-line options are deliberately very similar  to\n       those of GNU gzip, but they are not identical.\n\n       bzip2  expects  a list of file names to accompany the com-\n       mand-line flags.  Each file is replaced  by  a  compressed\n       version  of  itself,  with  the  name \"original_name.bz2\".\n       Each compressed file has the same modification date,  per-\n       missions, and, when possible, ownership as the correspond-\n       ing original, so that these properties  can  be  correctly\n       restored  at  decompression  time.   File name handling is\n       naive in the sense that there is no mechanism for preserv-\n       ing  original file names, permissions, ownerships or dates\n       in filesystems which lack these concepts, or have  serious\n       file name length restrictions, such as MS-DOS.\n\n       bzip2  and  bunzip2 will by default not overwrite existing\n       files.  If you want this to happen, specify the -f flag.\n\n       If no file names  are  specified,  bzip2  compresses  from\n       standard  input  to  standard output.  In this case, bzip2\n       will decline to write compressed output to a terminal,  as\n       this  would  be  entirely  incomprehensible  and therefore\n       pointless.\n\n       bunzip2 (or bzip2 -d) decompresses  all  specified  files.\n       Files which were not created by bzip2 will be detected and\n       ignored, and a warning issued.  bzip2  attempts  to  guess\n       the  filename  for  the decompressed file from that of the\n       compressed file as follows:\n\n              filename.bz2    becomes   filename\n              filename.bz     becomes   filename\n              filename.tbz2   becomes   filename.tar\n              filename.tbz    becomes   filename.tar\n              anyothername    becomes   anyothername.out\n\n       If the file does not end in one of the recognised endings,\n       .bz2,  .bz,  .tbz2 or .tbz, bzip2 complains that it cannot\n       guess the name of the original file, and uses the original\n       name with .out appended.\n\n       As  with compression, supplying no filenames causes decom-\n       pression from standard input to standard output.\n\n       bunzip2 will correctly decompress a file which is the con-\n       catenation of two or more compressed files.  The result is\n       the concatenation of the corresponding uncompressed files.\n       Integrity testing (-t) of concatenated compressed files is\n       also supported.\n\n       You can also compress or decompress files to the  standard\n       output  by giving the -c flag.  Multiple files may be com-\n       pressed and decompressed like this.  The resulting outputs\n       are  fed  sequentially to stdout.  Compression of multiple\n       files in this manner generates a stream containing  multi-\n       ple compressed file representations.  Such a stream can be\n       decompressed correctly only  by  bzip2  version  0.9.0  or\n       later.   Earlier  versions of bzip2 will stop after decom-\n       pressing the first file in the stream.\n\n       bzcat (or bzip2 -dc) decompresses all specified  files  to\n       the standard output.\n\n       bzip2  will  read arguments from the environment variables\n       BZIP2 and BZIP, in  that  order,  and  will  process  them\n       before  any  arguments  read  from the command line.  This\n       gives a convenient way to supply default arguments.\n\n       Compression is always performed, even  if  the  compressed\n       file  is slightly larger than the original.  Files of less\n       than about one hundred bytes tend to get larger, since the\n       compression  mechanism  has  a  constant  overhead  in the\n       region of 50 bytes.  Random data (including the output  of\n       most  file  compressors)  is  coded at about 8.05 bits per\n       byte, giving an expansion of around 0.5%.\n\n       As a self-check for your  protection,  bzip2  uses  32-bit\n       CRCs  to make sure that the decompressed version of a file\n       is identical to the original.  This guards against corrup-\n       tion  of  the compressed data, and against undetected bugs\n       in bzip2 (hopefully very unlikely).  The chances  of  data\n       corruption  going  undetected  is  microscopic,  about one\n       chance in four billion for each file processed.  Be aware,\n       though,  that  the  check occurs upon decompression, so it\n       can only tell you that something is wrong.  It can't  help\n       you  recover  the original uncompressed data.  You can use\n       bzip2recover to try to recover data from damaged files.\n\n       Return values: 0 for a normal exit,  1  for  environmental\n       problems  (file not found, invalid flags, I/O errors, &c),\n       2 to indicate a corrupt compressed file, 3 for an internal\n       consistency error (eg, bug) which caused bzip2 to panic.\n\n\nOPTIONS\n       -c --stdout\n              Compress or decompress to standard output.\n\n       -d --decompress\n              Force  decompression.  bzip2, bunzip2 and bzcat are\n              really the same program,  and  the  decision  about\n              what  actions to take is done on the basis of which\n              name is used.  This flag overrides that  mechanism,\n              and forces bzip2 to decompress.\n\n       -z --compress\n              The   complement   to   -d:   forces   compression,\n              regardless of the invocation name.\n\n       -t --test\n              Check integrity of the specified file(s), but don't\n              decompress  them.   This  really  performs  a trial\n              decompression and throws away the result.\n\n       -f --force\n              Force overwrite of output files.   Normally,  bzip2\n              will  not  overwrite  existing  output files.  Also\n              forces bzip2 to break hard links to files, which it\n              otherwise wouldn't do.\n\n              bzip2  normally  declines to decompress files which\n              don't have the  correct  magic  header  bytes.   If\n              forced  (-f),  however,  it  will  pass  such files\n              through unmodified.  This is how GNU gzip  behaves.\n\n       -k --keep\n              Keep  (don't delete) input files during compression\n              or decompression.\n\n       -s --small\n              Reduce memory usage, for compression, decompression\n              and  testing.   Files  are  decompressed and tested\n              using a modified algorithm which only requires  2.5\n              bytes  per  block byte.  This means any file can be\n              decompressed in 2300k of memory,  albeit  at  about\n              half the normal speed.\n\n              During  compression,  -s  selects  a  block size of\n              200k, which limits memory use to  around  the  same\n              figure,  at  the expense of your compression ratio.\n              In short, if your  machine  is  low  on  memory  (8\n              megabytes  or  less),  use  -s for everything.  See\n              MEMORY MANAGEMENT below.\n\n       -q --quiet\n              Suppress non-essential warning messages.   Messages\n              pertaining  to I/O errors and other critical events\n              will not be suppressed.\n\n       -v --verbose\n              Verbose mode -- show the compression ratio for each\n              file  processed.   Further  -v's  increase the ver-\n              bosity level, spewing out lots of information which\n              is primarily of interest for diagnostic purposes.\n\n       -L --license -V --version\n              Display  the  software  version,  license terms and\n              conditions.\n\n       -1 (or --fast) to -9 (or --best)\n              Set the block size to 100 k, 200 k ..  900  k  when\n              compressing.   Has  no  effect  when decompressing.\n              See MEMORY MANAGEMENT below.  The --fast and --best\n              aliases  are  primarily for GNU gzip compatibility.\n              In particular, --fast doesn't make things  signifi-\n              cantly  faster.   And  --best  merely  selects  the\n              default behaviour.\n\n       --     Treats all subsequent arguments as file names, even\n              if they start with a dash.  This is so you can han-\n              dle files with names beginning  with  a  dash,  for\n              example: bzip2 -- -myfilename.\n\n       --repetitive-fast --repetitive-best\n              These  flags  are  redundant  in versions 0.9.5 and\n              above.  They provided some coarse control over  the\n              behaviour  of the sorting algorithm in earlier ver-\n              sions, which was sometimes useful.  0.9.5 and above\n              have  an  improved  algorithm  which  renders these\n              flags irrelevant.\n\n\nMEMORY MANAGEMENT\n       bzip2 compresses large files in blocks.   The  block  size\n       affects  both  the  compression  ratio  achieved,  and the\n       amount of memory needed for compression and decompression.\n       The  flags  -1  through  -9  specify  the block size to be\n       100,000 bytes through 900,000 bytes (the default)  respec-\n       tively.   At  decompression  time, the block size used for\n       compression is read from  the  header  of  the  compressed\n       file, and bunzip2 then allocates itself just enough memory\n       to decompress the file.  Since block sizes are  stored  in\n       compressed  files,  it follows that the flags -1 to -9 are\n       irrelevant to and so ignored during decompression.\n\n       Compression and decompression requirements, in bytes,  can\n       be estimated as:\n\n              Compression:   400k + ( 8 x block size )\n\n              Decompression: 100k + ( 4 x block size ), or\n                             100k + ( 2.5 x block size )\n\n       Larger  block  sizes  give  rapidly  diminishing  marginal\n       returns.  Most of the compression comes from the first two\n       or  three hundred k of block size, a fact worth bearing in\n       mind when using bzip2  on  small  machines.   It  is  also\n       important  to  appreciate  that  the  decompression memory\n       requirement is set at compression time by  the  choice  of\n       block size.\n\n       For  files  compressed  with  the default 900k block size,\n       bunzip2 will require about 3700 kbytes to decompress.   To\n       support decompression of any file on a 4 megabyte machine,\n       bunzip2 has an option to  decompress  using  approximately\n       half this amount of memory, about 2300 kbytes.  Decompres-\n       sion speed is also halved, so you should use  this  option\n       only where necessary.  The relevant flag is -s.\n\n       In general, try and use the largest block size memory con-\n       straints  allow,  since  that  maximises  the  compression\n       achieved.   Compression and decompression speed are virtu-\n       ally unaffected by block size.\n\n       Another significant point applies to files which fit in  a\n       single  block  --  that  means  most files you'd encounter\n       using a large block  size.   The  amount  of  real  memory\n       touched is proportional to the size of the file, since the\n       file is smaller than a block.  For example, compressing  a\n       file  20,000  bytes  long  with the flag -9 will cause the\n       compressor to allocate around 7600k of  memory,  but  only\n       touch 400k + 20000 * 8 = 560 kbytes of it.  Similarly, the\n       decompressor will allocate 3700k but  only  touch  100k  +\n       20000 * 4 = 180 kbytes.\n\n       Here  is a table which summarises the maximum memory usage\n       for different block sizes.  Also  recorded  is  the  total\n       compressed  size for 14 files of the Calgary Text Compres-\n       sion Corpus totalling 3,141,622 bytes.  This column  gives\n       some  feel  for  how  compression  varies with block size.\n       These figures tend to understate the advantage  of  larger\n       block  sizes  for  larger files, since the Corpus is domi-\n       nated by smaller files.\n\n                  Compress   Decompress   Decompress   Corpus\n           Flag     usage      usage       -s usage     Size\n\n            -1      1200k       500k         350k      914704\n            -2      2000k       900k         600k      877703\n            -3      2800k      1300k         850k      860338\n            -4      3600k      1700k        1100k      846899\n            -5      4400k      2100k        1350k      845160\n            -6      5200k      2500k        1600k      838626\n            -7      6100k      2900k        1850k      834096\n            -8      6800k      3300k        2100k      828642\n            -9      7600k      3700k        2350k      828642\n\n\nRECOVERING DATA FROM DAMAGED FILES\n       bzip2 compresses files in blocks, usually 900kbytes  long.\n       Each block is handled independently.  If a media or trans-\n       mission error causes a multi-block  .bz2  file  to  become\n       damaged,  it  may  be  possible  to  recover data from the\n       undamaged blocks in the file.\n\n       The compressed representation of each block  is  delimited\n       by  a  48-bit pattern, which makes it possible to find the\n       block boundaries with reasonable  certainty.   Each  block\n       also  carries its own 32-bit CRC, so damaged blocks can be\n       distinguished from undamaged ones.\n\n       bzip2recover is a  simple  program  whose  purpose  is  to\n       search  for blocks in .bz2 files, and write each block out\n       into its own .bz2 file.  You can then use bzip2 -t to test\n       the integrity of the resulting files, and decompress those\n       which are undamaged.\n\n       bzip2recover takes a single argument, the name of the dam-\n       aged    file,    and    writes    a    number   of   files\n       \"rec00001file.bz2\",  \"rec00002file.bz2\",  etc,  containing\n       the   extracted   blocks.   The   output   filenames   are\n       designed  so  that the use of wildcards in subsequent pro-\n       cessing  -- for example, \"bzip2 -dc  rec*file.bz2 > recov-\n       ered_data\" -- processes the files in the correct order.\n\n       bzip2recover should be of most use dealing with large .bz2\n       files,  as  these will contain many blocks.  It is clearly\n       futile to use it on damaged single-block  files,  since  a\n       damaged  block  cannot  be recovered.  If you wish to min-\n       imise any potential data loss through media  or  transmis-\n       sion errors, you might consider compressing with a smaller\n       block size.\n\n\nPERFORMANCE NOTES\n       The sorting phase of compression gathers together  similar\n       strings  in  the  file.  Because of this, files containing\n       very long runs of  repeated  symbols,  like  \"aabaabaabaab\n       ...\"   (repeated  several hundred times) may compress more\n       slowly than normal.  Versions 0.9.5 and  above  fare  much\n       better  than previous versions in this respect.  The ratio\n       between worst-case and average-case compression time is in\n       the  region  of  10:1.  For previous versions, this figure\n       was more like 100:1.  You can use the -vvvv option to mon-\n       itor progress in great detail, if you want.\n\n       Decompression speed is unaffected by these phenomena.\n\n       bzip2  usually  allocates  several  megabytes of memory to\n       operate in, and then charges all over it in a fairly  ran-\n       dom  fashion.   This means that performance, both for com-\n       pressing and decompressing, is largely determined  by  the\n       speed  at  which  your  machine  can service cache misses.\n       Because of this, small changes to the code to  reduce  the\n       miss  rate  have  been observed to give disproportionately\n       large performance improvements.  I imagine bzip2 will per-\n       form best on machines with very large caches.\n\n\nCAVEATS\n       I/O  error  messages  are not as helpful as they could be.\n       bzip2 tries hard to detect I/O errors  and  exit  cleanly,\n       but  the  details  of  what  the problem is sometimes seem\n       rather misleading.\n\n       This manual page pertains to version 1.0.6 of bzip2.  Com-\n       pressed  data created by this version is entirely forwards\n       and  backwards  compatible  with   the   previous   public\n       releases,  versions  0.1pl2,  0.9.0,  0.9.5, 1.0.0, 1.0.1,\n       1.0.2 and above, but with the  following  exception: 0.9.0\n       and above can  correctly decompress  multiple concatenated\n       compressed files.  0.1pl2  cannot do this;  it  will  stop\n       after  decompressing just the first file in the stream.\n\n       bzip2recover  versions prior to 1.0.2 used 32-bit integers\n       to represent bit positions in compressed  files,  so  they\n       could  not handle compressed files more than 512 megabytes\n       long.  Versions 1.0.2 and above use 64-bit  ints  on  some\n       platforms  which  support them (GNU supported targets, and\n       Windows).  To establish whether or  not  bzip2recover  was\n       built  with  such  a limitation, run it without arguments.\n       In any event you can build yourself an  unlimited  version\n       if  you  can  recompile  it  with MaybeUInt64 set to be an\n       unsigned 64-bit integer.\n\n\nAUTHOR\n       Julian Seward, jsewardbzip.org.\n\n       http://www.bzip.org\n\n       The ideas embodied in bzip2 are due to (at least) the fol-\n       lowing  people: Michael Burrows and David Wheeler (for the\n       block sorting transformation), David Wheeler  (again,  for\n       the Huffman coder), Peter Fenwick (for the structured cod-\n       ing model in the original bzip, and many refinements), and\n       Alistair  Moffat,  Radford  Neal  and  Ian Witten (for the\n       arithmetic  coder  in  the  original  bzip).   I  am  much\n       indebted for their help, support and advice.  See the man-\n       ual in the source distribution for pointers to sources  of\n       documentation.  Christian von Roques encouraged me to look\n       for faster sorting algorithms, so as to speed up  compres-\n       sion.  Bela Lubkin encouraged me to improve the worst-case\n       compression performance.  Donna Robinson XMLised the docu-\n       mentation.   The bz* scripts are derived from those of GNU\n       gzip.  Many people sent patches, helped  with  portability\n       problems,  lent  machines,  gave advice and were generally\n       helpful.\n\n"
  },
  {
    "path": "external/bzip2/bzip2recover.c",
    "content": "/*-----------------------------------------------------------*/\n/*--- Block recoverer program for bzip2                   ---*/\n/*---                                      bzip2recover.c ---*/\n/*-----------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   Please read the WARNING, DISCLAIMER and PATENTS sections in the \n   README file.\n\n   This program is released under the terms of the license contained\n   in the file LICENSE.\n   ------------------------------------------------------------------ */\n\n/* This program is a complete hack and should be rewritten properly.\n\t It isn't very complicated. */\n\n#include <stdio.h>\n#include <errno.h>\n#include <stdlib.h>\n#include <string.h>\n\n\n/* This program records bit locations in the file to be recovered.\n   That means that if 64-bit ints are not supported, we will not\n   be able to recover .bz2 files over 512MB (2^32 bits) long.\n   On GNU supported platforms, we take advantage of the 64-bit\n   int support to circumvent this problem.  Ditto MSVC.\n\n   This change occurred in version 1.0.2; all prior versions have\n   the 512MB limitation.\n*/\n#ifdef __GNUC__\n   typedef  unsigned long long int  MaybeUInt64;\n#  define MaybeUInt64_FMT \"%Lu\"\n#else\n#ifdef _MSC_VER\n   typedef  unsigned __int64  MaybeUInt64;\n#  define MaybeUInt64_FMT \"%I64u\"\n#else\n   typedef  unsigned int   MaybeUInt64;\n#  define MaybeUInt64_FMT \"%u\"\n#endif\n#endif\n\ntypedef  unsigned int   UInt32;\ntypedef  int            Int32;\ntypedef  unsigned char  UChar;\ntypedef  char           Char;\ntypedef  unsigned char  Bool;\n#define True    ((Bool)1)\n#define False   ((Bool)0)\n\n\n#define BZ_MAX_FILENAME 2000\n\nChar inFileName[BZ_MAX_FILENAME];\nChar outFileName[BZ_MAX_FILENAME];\nChar progName[BZ_MAX_FILENAME];\n\nMaybeUInt64 bytesOut = 0;\nMaybeUInt64 bytesIn  = 0;\n\n\n/*---------------------------------------------------*/\n/*--- Header bytes                                ---*/\n/*---------------------------------------------------*/\n\n#define BZ_HDR_B 0x42                         /* 'B' */\n#define BZ_HDR_Z 0x5a                         /* 'Z' */\n#define BZ_HDR_h 0x68                         /* 'h' */\n#define BZ_HDR_0 0x30                         /* '0' */\n \n\n/*---------------------------------------------------*/\n/*--- I/O errors                                  ---*/\n/*---------------------------------------------------*/\n\n/*---------------------------------------------*/\nstatic void readError ( void )\n{\n   fprintf ( stderr,\n             \"%s: I/O error reading `%s', possible reason follows.\\n\",\n            progName, inFileName );\n   perror ( progName );\n   fprintf ( stderr, \"%s: warning: output file(s) may be incomplete.\\n\",\n             progName );\n   exit ( 1 );\n}\n\n\n/*---------------------------------------------*/\nstatic void writeError ( void )\n{\n   fprintf ( stderr,\n             \"%s: I/O error reading `%s', possible reason follows.\\n\",\n            progName, inFileName );\n   perror ( progName );\n   fprintf ( stderr, \"%s: warning: output file(s) may be incomplete.\\n\",\n             progName );\n   exit ( 1 );\n}\n\n\n/*---------------------------------------------*/\nstatic void mallocFail ( Int32 n )\n{\n   fprintf ( stderr,\n             \"%s: malloc failed on request for %d bytes.\\n\",\n            progName, n );\n   fprintf ( stderr, \"%s: warning: output file(s) may be incomplete.\\n\",\n             progName );\n   exit ( 1 );\n}\n\n\n/*---------------------------------------------*/\nstatic void tooManyBlocks ( Int32 max_handled_blocks )\n{\n   fprintf ( stderr,\n             \"%s: `%s' appears to contain more than %d blocks\\n\",\n            progName, inFileName, max_handled_blocks );\n   fprintf ( stderr,\n             \"%s: and cannot be handled.  To fix, increase\\n\",\n             progName );\n   fprintf ( stderr, \n             \"%s: BZ_MAX_HANDLED_BLOCKS in bzip2recover.c, and recompile.\\n\",\n             progName );\n   exit ( 1 );\n}\n\n\n\n/*---------------------------------------------------*/\n/*--- Bit stream I/O                              ---*/\n/*---------------------------------------------------*/\n\ntypedef\n   struct {\n      FILE*  handle;\n      Int32  buffer;\n      Int32  buffLive;\n      Char   mode;\n   }\n   BitStream;\n\n\n/*---------------------------------------------*/\nstatic BitStream* bsOpenReadStream ( FILE* stream )\n{\n   BitStream *bs = malloc ( sizeof(BitStream) );\n   if (bs == NULL) mallocFail ( sizeof(BitStream) );\n   bs->handle = stream;\n   bs->buffer = 0;\n   bs->buffLive = 0;\n   bs->mode = 'r';\n   return bs;\n}\n\n\n/*---------------------------------------------*/\nstatic BitStream* bsOpenWriteStream ( FILE* stream )\n{\n   BitStream *bs = malloc ( sizeof(BitStream) );\n   if (bs == NULL) mallocFail ( sizeof(BitStream) );\n   bs->handle = stream;\n   bs->buffer = 0;\n   bs->buffLive = 0;\n   bs->mode = 'w';\n   return bs;\n}\n\n\n/*---------------------------------------------*/\nstatic void bsPutBit ( BitStream* bs, Int32 bit )\n{\n   if (bs->buffLive == 8) {\n      Int32 retVal = putc ( (UChar) bs->buffer, bs->handle );\n      if (retVal == EOF) writeError();\n      bytesOut++;\n      bs->buffLive = 1;\n      bs->buffer = bit & 0x1;\n   } else {\n      bs->buffer = ( (bs->buffer << 1) | (bit & 0x1) );\n      bs->buffLive++;\n   };\n}\n\n\n/*---------------------------------------------*/\n/*--\n   Returns 0 or 1, or 2 to indicate EOF.\n--*/\nstatic Int32 bsGetBit ( BitStream* bs )\n{\n   if (bs->buffLive > 0) {\n      bs->buffLive --;\n      return ( ((bs->buffer) >> (bs->buffLive)) & 0x1 );\n   } else {\n      Int32 retVal = getc ( bs->handle );\n      if ( retVal == EOF ) {\n         if (errno != 0) readError();\n         return 2;\n      }\n      bs->buffLive = 7;\n      bs->buffer = retVal;\n      return ( ((bs->buffer) >> 7) & 0x1 );\n   }\n}\n\n\n/*---------------------------------------------*/\nstatic void bsClose ( BitStream* bs )\n{\n   Int32 retVal;\n\n   if ( bs->mode == 'w' ) {\n      while ( bs->buffLive < 8 ) {\n         bs->buffLive++;\n         bs->buffer <<= 1;\n      };\n      retVal = putc ( (UChar) (bs->buffer), bs->handle );\n      if (retVal == EOF) writeError();\n      bytesOut++;\n      retVal = fflush ( bs->handle );\n      if (retVal == EOF) writeError();\n   }\n   retVal = fclose ( bs->handle );\n   if (retVal == EOF) {\n      if (bs->mode == 'w') writeError(); else readError();\n   }\n   free ( bs );\n}\n\n\n/*---------------------------------------------*/\nstatic void bsPutUChar ( BitStream* bs, UChar c )\n{\n   Int32 i;\n   for (i = 7; i >= 0; i--)\n      bsPutBit ( bs, (((UInt32) c) >> i) & 0x1 );\n}\n\n\n/*---------------------------------------------*/\nstatic void bsPutUInt32 ( BitStream* bs, UInt32 c )\n{\n   Int32 i;\n\n   for (i = 31; i >= 0; i--)\n      bsPutBit ( bs, (c >> i) & 0x1 );\n}\n\n\n/*---------------------------------------------*/\nstatic Bool endsInBz2 ( Char* name )\n{\n   Int32 n = strlen ( name );\n   if (n <= 4) return False;\n   return\n      (name[n-4] == '.' &&\n       name[n-3] == 'b' &&\n       name[n-2] == 'z' &&\n       name[n-1] == '2');\n}\n\n\n/*---------------------------------------------------*/\n/*---                                             ---*/\n/*---------------------------------------------------*/\n\n/* This logic isn't really right when it comes to Cygwin. */\n#ifdef _WIN32\n#  define  BZ_SPLIT_SYM  '\\\\'  /* path splitter on Windows platform */\n#else\n#  define  BZ_SPLIT_SYM  '/'   /* path splitter on Unix platform */\n#endif\n\n#define BLOCK_HEADER_HI  0x00003141UL\n#define BLOCK_HEADER_LO  0x59265359UL\n\n#define BLOCK_ENDMARK_HI 0x00001772UL\n#define BLOCK_ENDMARK_LO 0x45385090UL\n\n/* Increase if necessary.  However, a .bz2 file with > 50000 blocks\n   would have an uncompressed size of at least 40GB, so the chances\n   are low you'll need to up this.\n*/\n#define BZ_MAX_HANDLED_BLOCKS 50000\n\nMaybeUInt64 bStart [BZ_MAX_HANDLED_BLOCKS];\nMaybeUInt64 bEnd   [BZ_MAX_HANDLED_BLOCKS];\nMaybeUInt64 rbStart[BZ_MAX_HANDLED_BLOCKS];\nMaybeUInt64 rbEnd  [BZ_MAX_HANDLED_BLOCKS];\n\nInt32 main ( Int32 argc, Char** argv )\n{\n   FILE*       inFile;\n   FILE*       outFile;\n   BitStream*  bsIn, *bsWr;\n   Int32       b, wrBlock, currBlock, rbCtr;\n   MaybeUInt64 bitsRead;\n\n   UInt32      buffHi, buffLo, blockCRC;\n   Char*       p;\n\n   strcpy ( progName, argv[0] );\n   inFileName[0] = outFileName[0] = 0;\n\n   fprintf ( stderr, \n             \"bzip2recover 1.0.6: extracts blocks from damaged .bz2 files.\\n\" );\n\n   if (argc != 2) {\n      fprintf ( stderr, \"%s: usage is `%s damaged_file_name'.\\n\",\n                        progName, progName );\n      switch (sizeof(MaybeUInt64)) {\n         case 8:\n            fprintf(stderr, \n                    \"\\trestrictions on size of recovered file: None\\n\");\n            break;\n         case 4:\n            fprintf(stderr, \n                    \"\\trestrictions on size of recovered file: 512 MB\\n\");\n            fprintf(stderr, \n                    \"\\tto circumvent, recompile with MaybeUInt64 as an\\n\"\n                    \"\\tunsigned 64-bit int.\\n\");\n            break;\n         default:\n            fprintf(stderr, \n                    \"\\tsizeof(MaybeUInt64) is not 4 or 8 -- \"\n                    \"configuration error.\\n\");\n            break;\n      }\n      exit(1);\n   }\n\n   if (strlen(argv[1]) >= BZ_MAX_FILENAME-20) {\n      fprintf ( stderr, \n                \"%s: supplied filename is suspiciously (>= %d chars) long.  Bye!\\n\",\n                progName, (int)strlen(argv[1]) );\n      exit(1);\n   }\n\n   strcpy ( inFileName, argv[1] );\n\n   inFile = fopen ( inFileName, \"rb\" );\n   if (inFile == NULL) {\n      fprintf ( stderr, \"%s: can't read `%s'\\n\", progName, inFileName );\n      exit(1);\n   }\n\n   bsIn = bsOpenReadStream ( inFile );\n   fprintf ( stderr, \"%s: searching for block boundaries ...\\n\", progName );\n\n   bitsRead = 0;\n   buffHi = buffLo = 0;\n   currBlock = 0;\n   bStart[currBlock] = 0;\n\n   rbCtr = 0;\n\n   while (True) {\n      b = bsGetBit ( bsIn );\n      bitsRead++;\n      if (b == 2) {\n         if (bitsRead >= bStart[currBlock] &&\n            (bitsRead - bStart[currBlock]) >= 40) {\n            bEnd[currBlock] = bitsRead-1;\n            if (currBlock > 0)\n               fprintf ( stderr, \"   block %d runs from \" MaybeUInt64_FMT \n                                 \" to \" MaybeUInt64_FMT \" (incomplete)\\n\",\n                         currBlock,  bStart[currBlock], bEnd[currBlock] );\n         } else\n            currBlock--;\n         break;\n      }\n      buffHi = (buffHi << 1) | (buffLo >> 31);\n      buffLo = (buffLo << 1) | (b & 1);\n      if ( ( (buffHi & 0x0000ffff) == BLOCK_HEADER_HI \n             && buffLo == BLOCK_HEADER_LO)\n           || \n           ( (buffHi & 0x0000ffff) == BLOCK_ENDMARK_HI \n             && buffLo == BLOCK_ENDMARK_LO)\n         ) {\n         if (bitsRead > 49) {\n            bEnd[currBlock] = bitsRead-49;\n         } else {\n            bEnd[currBlock] = 0;\n         }\n         if (currBlock > 0 &&\n\t     (bEnd[currBlock] - bStart[currBlock]) >= 130) {\n            fprintf ( stderr, \"   block %d runs from \" MaybeUInt64_FMT \n                              \" to \" MaybeUInt64_FMT \"\\n\",\n                      rbCtr+1,  bStart[currBlock], bEnd[currBlock] );\n            rbStart[rbCtr] = bStart[currBlock];\n            rbEnd[rbCtr] = bEnd[currBlock];\n            rbCtr++;\n         }\n         if (currBlock >= BZ_MAX_HANDLED_BLOCKS)\n            tooManyBlocks(BZ_MAX_HANDLED_BLOCKS);\n         currBlock++;\n\n         bStart[currBlock] = bitsRead;\n      }\n   }\n\n   bsClose ( bsIn );\n\n   /*-- identified blocks run from 1 to rbCtr inclusive. --*/\n\n   if (rbCtr < 1) {\n      fprintf ( stderr,\n                \"%s: sorry, I couldn't find any block boundaries.\\n\",\n                progName );\n      exit(1);\n   };\n\n   fprintf ( stderr, \"%s: splitting into blocks\\n\", progName );\n\n   inFile = fopen ( inFileName, \"rb\" );\n   if (inFile == NULL) {\n      fprintf ( stderr, \"%s: can't open `%s'\\n\", progName, inFileName );\n      exit(1);\n   }\n   bsIn = bsOpenReadStream ( inFile );\n\n   /*-- placate gcc's dataflow analyser --*/\n   blockCRC = 0; bsWr = 0;\n\n   bitsRead = 0;\n   outFile = NULL;\n   wrBlock = 0;\n   while (True) {\n      b = bsGetBit(bsIn);\n      if (b == 2) break;\n      buffHi = (buffHi << 1) | (buffLo >> 31);\n      buffLo = (buffLo << 1) | (b & 1);\n      if (bitsRead == 47+rbStart[wrBlock]) \n         blockCRC = (buffHi << 16) | (buffLo >> 16);\n\n      if (outFile != NULL && bitsRead >= rbStart[wrBlock]\n                          && bitsRead <= rbEnd[wrBlock]) {\n         bsPutBit ( bsWr, b );\n      }\n\n      bitsRead++;\n\n      if (bitsRead == rbEnd[wrBlock]+1) {\n         if (outFile != NULL) {\n            bsPutUChar ( bsWr, 0x17 ); bsPutUChar ( bsWr, 0x72 );\n            bsPutUChar ( bsWr, 0x45 ); bsPutUChar ( bsWr, 0x38 );\n            bsPutUChar ( bsWr, 0x50 ); bsPutUChar ( bsWr, 0x90 );\n            bsPutUInt32 ( bsWr, blockCRC );\n            bsClose ( bsWr );\n         }\n         if (wrBlock >= rbCtr) break;\n         wrBlock++;\n      } else\n      if (bitsRead == rbStart[wrBlock]) {\n         /* Create the output file name, correctly handling leading paths. \n            (31.10.2001 by Sergey E. Kusikov) */\n         Char* split;\n         Int32 ofs, k;\n         for (k = 0; k < BZ_MAX_FILENAME; k++) \n            outFileName[k] = 0;\n         strcpy (outFileName, inFileName);\n         split = strrchr (outFileName, BZ_SPLIT_SYM);\n         if (split == NULL) {\n            split = outFileName;\n         } else {\n            ++split;\n\t }\n\t /* Now split points to the start of the basename. */\n         ofs  = split - outFileName;\n         sprintf (split, \"rec%5d\", wrBlock+1);\n         for (p = split; *p != 0; p++) if (*p == ' ') *p = '0';\n         strcat (outFileName, inFileName + ofs);\n\n         if ( !endsInBz2(outFileName)) strcat ( outFileName, \".bz2\" );\n\n         fprintf ( stderr, \"   writing block %d to `%s' ...\\n\",\n                           wrBlock+1, outFileName );\n\n         outFile = fopen ( outFileName, \"wb\" );\n         if (outFile == NULL) {\n            fprintf ( stderr, \"%s: can't write `%s'\\n\",\n                      progName, outFileName );\n            exit(1);\n         }\n         bsWr = bsOpenWriteStream ( outFile );\n         bsPutUChar ( bsWr, BZ_HDR_B );    \n         bsPutUChar ( bsWr, BZ_HDR_Z );    \n         bsPutUChar ( bsWr, BZ_HDR_h );    \n         bsPutUChar ( bsWr, BZ_HDR_0 + 9 );\n         bsPutUChar ( bsWr, 0x31 ); bsPutUChar ( bsWr, 0x41 );\n         bsPutUChar ( bsWr, 0x59 ); bsPutUChar ( bsWr, 0x26 );\n         bsPutUChar ( bsWr, 0x53 ); bsPutUChar ( bsWr, 0x59 );\n      }\n   }\n\n   fprintf ( stderr, \"%s: finished\\n\", progName );\n   return 0;\n}\n\n\n\n/*-----------------------------------------------------------*/\n/*--- end                                  bzip2recover.c ---*/\n/*-----------------------------------------------------------*/\n"
  },
  {
    "path": "external/bzip2/bzip2recover.exe.manifest",
    "content": "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>\n<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <security>\n      <requestedPrivileges>\n        <requestedExecutionLevel level='asInvoker' uiAccess='false' />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n  <dependency>\n    <dependentAssembly>\n      <assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />\n    </dependentAssembly>\n  </dependency>\n</assembly>\n"
  },
  {
    "path": "external/bzip2/bzlib.c",
    "content": "\n/*-------------------------------------------------------------*/\n/*--- Library top-level functions.                          ---*/\n/*---                                               bzlib.c ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   Please read the WARNING, DISCLAIMER and PATENTS sections in the \n   README file.\n\n   This program is released under the terms of the license contained\n   in the file LICENSE.\n   ------------------------------------------------------------------ */\n\n/* CHANGES\n   0.9.0    -- original version.\n   0.9.0a/b -- no changes in this file.\n   0.9.0c   -- made zero-length BZ_FLUSH work correctly in bzCompress().\n     fixed bzWrite/bzRead to ignore zero-length requests.\n     fixed bzread to correctly handle read requests after EOF.\n     wrong parameter order in call to bzDecompressInit in\n     bzBuffToBuffDecompress.  Fixed.\n*/\n\n#include \"bzlib_private.h\"\n\n\n/*---------------------------------------------------*/\n/*--- Compression stuff                           ---*/\n/*---------------------------------------------------*/\n\n\n/*---------------------------------------------------*/\n#ifndef BZ_NO_STDIO\nvoid BZ2_bz__AssertH__fail ( int errcode )\n{\n   fprintf(stderr, \n      \"\\n\\nbzip2/libbzip2: internal error number %d.\\n\"\n      \"This is a bug in bzip2/libbzip2, %s.\\n\"\n      \"Please report it to me at: jseward@bzip.org.  If this happened\\n\"\n      \"when you were using some program which uses libbzip2 as a\\n\"\n      \"component, you should also report this bug to the author(s)\\n\"\n      \"of that program.  Please make an effort to report this bug;\\n\"\n      \"timely and accurate bug reports eventually lead to higher\\n\"\n      \"quality software.  Thanks.  Julian Seward, 10 December 2007.\\n\\n\",\n      errcode,\n      BZ2_bzlibVersion()\n   );\n\n   if (errcode == 1007) {\n   fprintf(stderr,\n      \"\\n*** A special note about internal error number 1007 ***\\n\"\n      \"\\n\"\n      \"Experience suggests that a common cause of i.e. 1007\\n\"\n      \"is unreliable memory or other hardware.  The 1007 assertion\\n\"\n      \"just happens to cross-check the results of huge numbers of\\n\"\n      \"memory reads/writes, and so acts (unintendedly) as a stress\\n\"\n      \"test of your memory system.\\n\"\n      \"\\n\"\n      \"I suggest the following: try compressing the file again,\\n\"\n      \"possibly monitoring progress in detail with the -vv flag.\\n\"\n      \"\\n\"\n      \"* If the error cannot be reproduced, and/or happens at different\\n\"\n      \"  points in compression, you may have a flaky memory system.\\n\"\n      \"  Try a memory-test program.  I have used Memtest86\\n\"\n      \"  (www.memtest86.com).  At the time of writing it is free (GPLd).\\n\"\n      \"  Memtest86 tests memory much more thorougly than your BIOSs\\n\"\n      \"  power-on test, and may find failures that the BIOS doesn't.\\n\"\n      \"\\n\"\n      \"* If the error can be repeatably reproduced, this is a bug in\\n\"\n      \"  bzip2, and I would very much like to hear about it.  Please\\n\"\n      \"  let me know, and, ideally, save a copy of the file causing the\\n\"\n      \"  problem -- without which I will be unable to investigate it.\\n\"\n      \"\\n\"\n   );\n   }\n\n   exit(3);\n}\n#endif\n\n\n/*---------------------------------------------------*/\nstatic\nint bz_config_ok ( void )\n{\n   if (sizeof(int)   != 4) return 0;\n   if (sizeof(short) != 2) return 0;\n   if (sizeof(char)  != 1) return 0;\n   return 1;\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid* default_bzalloc ( void* opaque, Int32 items, Int32 size )\n{\n   void* v = malloc ( items * size );\n   return v;\n}\n\nstatic\nvoid default_bzfree ( void* opaque, void* addr )\n{\n   if (addr != NULL) free ( addr );\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid prepare_new_block ( EState* s )\n{\n   Int32 i;\n   s->nblock = 0;\n   s->numZ = 0;\n   s->state_out_pos = 0;\n   BZ_INITIALISE_CRC ( s->blockCRC );\n   for (i = 0; i < 256; i++) s->inUse[i] = False;\n   s->blockNo++;\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid init_RL ( EState* s )\n{\n   s->state_in_ch  = 256;\n   s->state_in_len = 0;\n}\n\n\nstatic\nBool isempty_RL ( EState* s )\n{\n   if (s->state_in_ch < 256 && s->state_in_len > 0)\n      return False; else\n      return True;\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzCompressInit) \n                    ( bz_stream* strm, \n                     int        blockSize100k,\n                     int        verbosity,\n                     int        workFactor )\n{\n   Int32   n;\n   EState* s;\n\n   if (!bz_config_ok()) return BZ_CONFIG_ERROR;\n\n   if (strm == NULL || \n       blockSize100k < 1 || blockSize100k > 9 ||\n       workFactor < 0 || workFactor > 250)\n     return BZ_PARAM_ERROR;\n\n   if (workFactor == 0) workFactor = 30;\n   if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc;\n   if (strm->bzfree == NULL) strm->bzfree = default_bzfree;\n\n   s = BZALLOC( sizeof(EState) );\n   if (s == NULL) return BZ_MEM_ERROR;\n   s->strm = strm;\n\n   s->arr1 = NULL;\n   s->arr2 = NULL;\n   s->ftab = NULL;\n\n   n       = 100000 * blockSize100k;\n   s->arr1 = BZALLOC( n                  * sizeof(UInt32) );\n   s->arr2 = BZALLOC( (n+BZ_N_OVERSHOOT) * sizeof(UInt32) );\n   s->ftab = BZALLOC( 65537              * sizeof(UInt32) );\n\n   if (s->arr1 == NULL || s->arr2 == NULL || s->ftab == NULL) {\n      if (s->arr1 != NULL) BZFREE(s->arr1);\n      if (s->arr2 != NULL) BZFREE(s->arr2);\n      if (s->ftab != NULL) BZFREE(s->ftab);\n      if (s       != NULL) BZFREE(s);\n      return BZ_MEM_ERROR;\n   }\n\n   s->blockNo           = 0;\n   s->state             = BZ_S_INPUT;\n   s->mode              = BZ_M_RUNNING;\n   s->combinedCRC       = 0;\n   s->blockSize100k     = blockSize100k;\n   s->nblockMAX         = 100000 * blockSize100k - 19;\n   s->verbosity         = verbosity;\n   s->workFactor        = workFactor;\n\n   s->block             = (UChar*)s->arr2;\n   s->mtfv              = (UInt16*)s->arr1;\n   s->zbits             = NULL;\n   s->ptr               = (UInt32*)s->arr1;\n\n   strm->state          = s;\n   strm->total_in_lo32  = 0;\n   strm->total_in_hi32  = 0;\n   strm->total_out_lo32 = 0;\n   strm->total_out_hi32 = 0;\n   init_RL ( s );\n   prepare_new_block ( s );\n   return BZ_OK;\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid add_pair_to_block ( EState* s )\n{\n   Int32 i;\n   UChar ch = (UChar)(s->state_in_ch);\n   for (i = 0; i < s->state_in_len; i++) {\n      BZ_UPDATE_CRC( s->blockCRC, ch );\n   }\n   s->inUse[s->state_in_ch] = True;\n   switch (s->state_in_len) {\n      case 1:\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         break;\n      case 2:\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         break;\n      case 3:\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         break;\n      default:\n         s->inUse[s->state_in_len-4] = True;\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         s->block[s->nblock] = ((UChar)(s->state_in_len-4));\n         s->nblock++;\n         break;\n   }\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid flush_RL ( EState* s )\n{\n   if (s->state_in_ch < 256) add_pair_to_block ( s );\n   init_RL ( s );\n}\n\n\n/*---------------------------------------------------*/\n#define ADD_CHAR_TO_BLOCK(zs,zchh0)               \\\n{                                                 \\\n   UInt32 zchh = (UInt32)(zchh0);                 \\\n   /*-- fast track the common case --*/           \\\n   if (zchh != zs->state_in_ch &&                 \\\n       zs->state_in_len == 1) {                   \\\n      UChar ch = (UChar)(zs->state_in_ch);        \\\n      BZ_UPDATE_CRC( zs->blockCRC, ch );          \\\n      zs->inUse[zs->state_in_ch] = True;          \\\n      zs->block[zs->nblock] = (UChar)ch;          \\\n      zs->nblock++;                               \\\n      zs->state_in_ch = zchh;                     \\\n   }                                              \\\n   else                                           \\\n   /*-- general, uncommon cases --*/              \\\n   if (zchh != zs->state_in_ch ||                 \\\n      zs->state_in_len == 255) {                  \\\n      if (zs->state_in_ch < 256)                  \\\n         add_pair_to_block ( zs );                \\\n      zs->state_in_ch = zchh;                     \\\n      zs->state_in_len = 1;                       \\\n   } else {                                       \\\n      zs->state_in_len++;                         \\\n   }                                              \\\n}\n\n\n/*---------------------------------------------------*/\nstatic\nBool copy_input_until_stop ( EState* s )\n{\n   Bool progress_in = False;\n\n   if (s->mode == BZ_M_RUNNING) {\n\n      /*-- fast track the common case --*/\n      while (True) {\n         /*-- block full? --*/\n         if (s->nblock >= s->nblockMAX) break;\n         /*-- no input? --*/\n         if (s->strm->avail_in == 0) break;\n         progress_in = True;\n         ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); \n         s->strm->next_in++;\n         s->strm->avail_in--;\n         s->strm->total_in_lo32++;\n         if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++;\n      }\n\n   } else {\n\n      /*-- general, uncommon case --*/\n      while (True) {\n         /*-- block full? --*/\n         if (s->nblock >= s->nblockMAX) break;\n         /*-- no input? --*/\n         if (s->strm->avail_in == 0) break;\n         /*-- flush/finish end? --*/\n         if (s->avail_in_expect == 0) break;\n         progress_in = True;\n         ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); \n         s->strm->next_in++;\n         s->strm->avail_in--;\n         s->strm->total_in_lo32++;\n         if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++;\n         s->avail_in_expect--;\n      }\n   }\n   return progress_in;\n}\n\n\n/*---------------------------------------------------*/\nstatic\nBool copy_output_until_stop ( EState* s )\n{\n   Bool progress_out = False;\n\n   while (True) {\n\n      /*-- no output space? --*/\n      if (s->strm->avail_out == 0) break;\n\n      /*-- block done? --*/\n      if (s->state_out_pos >= s->numZ) break;\n\n      progress_out = True;\n      *(s->strm->next_out) = s->zbits[s->state_out_pos];\n      s->state_out_pos++;\n      s->strm->avail_out--;\n      s->strm->next_out++;\n      s->strm->total_out_lo32++;\n      if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;\n   }\n\n   return progress_out;\n}\n\n\n/*---------------------------------------------------*/\nstatic\nBool handle_compress ( bz_stream* strm )\n{\n   Bool progress_in  = False;\n   Bool progress_out = False;\n   EState* s = strm->state;\n   \n   while (True) {\n\n      if (s->state == BZ_S_OUTPUT) {\n         progress_out |= copy_output_until_stop ( s );\n         if (s->state_out_pos < s->numZ) break;\n         if (s->mode == BZ_M_FINISHING && \n             s->avail_in_expect == 0 &&\n             isempty_RL(s)) break;\n         prepare_new_block ( s );\n         s->state = BZ_S_INPUT;\n         if (s->mode == BZ_M_FLUSHING && \n             s->avail_in_expect == 0 &&\n             isempty_RL(s)) break;\n      }\n\n      if (s->state == BZ_S_INPUT) {\n         progress_in |= copy_input_until_stop ( s );\n         if (s->mode != BZ_M_RUNNING && s->avail_in_expect == 0) {\n            flush_RL ( s );\n            BZ2_compressBlock ( s, (Bool)(s->mode == BZ_M_FINISHING) );\n            s->state = BZ_S_OUTPUT;\n         }\n         else\n         if (s->nblock >= s->nblockMAX) {\n            BZ2_compressBlock ( s, False );\n            s->state = BZ_S_OUTPUT;\n         }\n         else\n         if (s->strm->avail_in == 0) {\n            break;\n         }\n      }\n\n   }\n\n   return progress_in || progress_out;\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzCompress) ( bz_stream *strm, int action )\n{\n   Bool progress;\n   EState* s;\n   if (strm == NULL) return BZ_PARAM_ERROR;\n   s = strm->state;\n   if (s == NULL) return BZ_PARAM_ERROR;\n   if (s->strm != strm) return BZ_PARAM_ERROR;\n\n   preswitch:\n   switch (s->mode) {\n\n      case BZ_M_IDLE:\n         return BZ_SEQUENCE_ERROR;\n\n      case BZ_M_RUNNING:\n         if (action == BZ_RUN) {\n            progress = handle_compress ( strm );\n            return progress ? BZ_RUN_OK : BZ_PARAM_ERROR;\n         } \n         else\n\t if (action == BZ_FLUSH) {\n            s->avail_in_expect = strm->avail_in;\n            s->mode = BZ_M_FLUSHING;\n            goto preswitch;\n         }\n         else\n         if (action == BZ_FINISH) {\n            s->avail_in_expect = strm->avail_in;\n            s->mode = BZ_M_FINISHING;\n            goto preswitch;\n         }\n         else \n            return BZ_PARAM_ERROR;\n\n      case BZ_M_FLUSHING:\n         if (action != BZ_FLUSH) return BZ_SEQUENCE_ERROR;\n         if (s->avail_in_expect != s->strm->avail_in) \n            return BZ_SEQUENCE_ERROR;\n         progress = handle_compress ( strm );\n         if (s->avail_in_expect > 0 || !isempty_RL(s) ||\n             s->state_out_pos < s->numZ) return BZ_FLUSH_OK;\n         s->mode = BZ_M_RUNNING;\n         return BZ_RUN_OK;\n\n      case BZ_M_FINISHING:\n         if (action != BZ_FINISH) return BZ_SEQUENCE_ERROR;\n         if (s->avail_in_expect != s->strm->avail_in) \n            return BZ_SEQUENCE_ERROR;\n         progress = handle_compress ( strm );\n         if (!progress) return BZ_SEQUENCE_ERROR;\n         if (s->avail_in_expect > 0 || !isempty_RL(s) ||\n             s->state_out_pos < s->numZ) return BZ_FINISH_OK;\n         s->mode = BZ_M_IDLE;\n         return BZ_STREAM_END;\n   }\n   return BZ_OK; /*--not reached--*/\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzCompressEnd)  ( bz_stream *strm )\n{\n   EState* s;\n   if (strm == NULL) return BZ_PARAM_ERROR;\n   s = strm->state;\n   if (s == NULL) return BZ_PARAM_ERROR;\n   if (s->strm != strm) return BZ_PARAM_ERROR;\n\n   if (s->arr1 != NULL) BZFREE(s->arr1);\n   if (s->arr2 != NULL) BZFREE(s->arr2);\n   if (s->ftab != NULL) BZFREE(s->ftab);\n   BZFREE(strm->state);\n\n   strm->state = NULL;   \n\n   return BZ_OK;\n}\n\n\n/*---------------------------------------------------*/\n/*--- Decompression stuff                         ---*/\n/*---------------------------------------------------*/\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzDecompressInit) \n                     ( bz_stream* strm, \n                       int        verbosity,\n                       int        small )\n{\n   DState* s;\n\n   if (!bz_config_ok()) return BZ_CONFIG_ERROR;\n\n   if (strm == NULL) return BZ_PARAM_ERROR;\n   if (small != 0 && small != 1) return BZ_PARAM_ERROR;\n   if (verbosity < 0 || verbosity > 4) return BZ_PARAM_ERROR;\n\n   if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc;\n   if (strm->bzfree == NULL) strm->bzfree = default_bzfree;\n\n   s = BZALLOC( sizeof(DState) );\n   if (s == NULL) return BZ_MEM_ERROR;\n   s->strm                  = strm;\n   strm->state              = s;\n   s->state                 = BZ_X_MAGIC_1;\n   s->bsLive                = 0;\n   s->bsBuff                = 0;\n   s->calculatedCombinedCRC = 0;\n   strm->total_in_lo32      = 0;\n   strm->total_in_hi32      = 0;\n   strm->total_out_lo32     = 0;\n   strm->total_out_hi32     = 0;\n   s->smallDecompress       = (Bool)small;\n   s->ll4                   = NULL;\n   s->ll16                  = NULL;\n   s->tt                    = NULL;\n   s->currBlockNo           = 0;\n   s->verbosity             = verbosity;\n\n   return BZ_OK;\n}\n\n\n/*---------------------------------------------------*/\n/* Return  True iff data corruption is discovered.\n   Returns False if there is no problem.\n*/\nstatic\nBool unRLE_obuf_to_output_FAST ( DState* s )\n{\n   UChar k1;\n\n   if (s->blockRandomised) {\n\n      while (True) {\n         /* try to finish existing run */\n         while (True) {\n            if (s->strm->avail_out == 0) return False;\n            if (s->state_out_len == 0) break;\n            *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;\n            BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );\n            s->state_out_len--;\n            s->strm->next_out++;\n            s->strm->avail_out--;\n            s->strm->total_out_lo32++;\n            if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;\n         }\n\n         /* can a new run be started? */\n         if (s->nblock_used == s->save_nblock+1) return False;\n               \n         /* Only caused by corrupt data stream? */\n         if (s->nblock_used > s->save_nblock+1)\n            return True;\n   \n         s->state_out_len = 1;\n         s->state_out_ch = s->k0;\n         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         s->state_out_len = 2;\n         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         s->state_out_len = 3;\n         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         s->state_out_len = ((Int32)k1) + 4;\n         BZ_GET_FAST(s->k0); BZ_RAND_UPD_MASK; \n         s->k0 ^= BZ_RAND_MASK; s->nblock_used++;\n      }\n\n   } else {\n\n      /* restore */\n      UInt32        c_calculatedBlockCRC = s->calculatedBlockCRC;\n      UChar         c_state_out_ch       = s->state_out_ch;\n      Int32         c_state_out_len      = s->state_out_len;\n      Int32         c_nblock_used        = s->nblock_used;\n      Int32         c_k0                 = s->k0;\n      UInt32*       c_tt                 = s->tt;\n      UInt32        c_tPos               = s->tPos;\n      char*         cs_next_out          = s->strm->next_out;\n      unsigned int  cs_avail_out         = s->strm->avail_out;\n      Int32         ro_blockSize100k     = s->blockSize100k;\n      /* end restore */\n\n      UInt32       avail_out_INIT = cs_avail_out;\n      Int32        s_save_nblockPP = s->save_nblock+1;\n      unsigned int total_out_lo32_old;\n\n      while (True) {\n\n         /* try to finish existing run */\n         if (c_state_out_len > 0) {\n            while (True) {\n               if (cs_avail_out == 0) goto return_notr;\n               if (c_state_out_len == 1) break;\n               *( (UChar*)(cs_next_out) ) = c_state_out_ch;\n               BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch );\n               c_state_out_len--;\n               cs_next_out++;\n               cs_avail_out--;\n            }\n            s_state_out_len_eq_one:\n            {\n               if (cs_avail_out == 0) { \n                  c_state_out_len = 1; goto return_notr;\n               };\n               *( (UChar*)(cs_next_out) ) = c_state_out_ch;\n               BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch );\n               cs_next_out++;\n               cs_avail_out--;\n            }\n         }   \n         /* Only caused by corrupt data stream? */\n         if (c_nblock_used > s_save_nblockPP)\n            return True;\n\n         /* can a new run be started? */\n         if (c_nblock_used == s_save_nblockPP) {\n            c_state_out_len = 0; goto return_notr;\n         };   \n         c_state_out_ch = c_k0;\n         BZ_GET_FAST_C(k1); c_nblock_used++;\n         if (k1 != c_k0) { \n            c_k0 = k1; goto s_state_out_len_eq_one; \n         };\n         if (c_nblock_used == s_save_nblockPP) \n            goto s_state_out_len_eq_one;\n   \n         c_state_out_len = 2;\n         BZ_GET_FAST_C(k1); c_nblock_used++;\n         if (c_nblock_used == s_save_nblockPP) continue;\n         if (k1 != c_k0) { c_k0 = k1; continue; };\n   \n         c_state_out_len = 3;\n         BZ_GET_FAST_C(k1); c_nblock_used++;\n         if (c_nblock_used == s_save_nblockPP) continue;\n         if (k1 != c_k0) { c_k0 = k1; continue; };\n   \n         BZ_GET_FAST_C(k1); c_nblock_used++;\n         c_state_out_len = ((Int32)k1) + 4;\n         BZ_GET_FAST_C(c_k0); c_nblock_used++;\n      }\n\n      return_notr:\n      total_out_lo32_old = s->strm->total_out_lo32;\n      s->strm->total_out_lo32 += (avail_out_INIT - cs_avail_out);\n      if (s->strm->total_out_lo32 < total_out_lo32_old)\n         s->strm->total_out_hi32++;\n\n      /* save */\n      s->calculatedBlockCRC = c_calculatedBlockCRC;\n      s->state_out_ch       = c_state_out_ch;\n      s->state_out_len      = c_state_out_len;\n      s->nblock_used        = c_nblock_used;\n      s->k0                 = c_k0;\n      s->tt                 = c_tt;\n      s->tPos               = c_tPos;\n      s->strm->next_out     = cs_next_out;\n      s->strm->avail_out    = cs_avail_out;\n      /* end save */\n   }\n   return False;\n}\n\n\n\n/*---------------------------------------------------*/\n__inline__ Int32 BZ2_indexIntoF ( Int32 indx, Int32 *cftab )\n{\n   Int32 nb, na, mid;\n   nb = 0;\n   na = 256;\n   do {\n      mid = (nb + na) >> 1;\n      if (indx >= cftab[mid]) nb = mid; else na = mid;\n   }\n   while (na - nb != 1);\n   return nb;\n}\n\n\n/*---------------------------------------------------*/\n/* Return  True iff data corruption is discovered.\n   Returns False if there is no problem.\n*/\nstatic\nBool unRLE_obuf_to_output_SMALL ( DState* s )\n{\n   UChar k1;\n\n   if (s->blockRandomised) {\n\n      while (True) {\n         /* try to finish existing run */\n         while (True) {\n            if (s->strm->avail_out == 0) return False;\n            if (s->state_out_len == 0) break;\n            *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;\n            BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );\n            s->state_out_len--;\n            s->strm->next_out++;\n            s->strm->avail_out--;\n            s->strm->total_out_lo32++;\n            if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;\n         }\n   \n         /* can a new run be started? */\n         if (s->nblock_used == s->save_nblock+1) return False;\n\n         /* Only caused by corrupt data stream? */\n         if (s->nblock_used > s->save_nblock+1)\n            return True;\n   \n         s->state_out_len = 1;\n         s->state_out_ch = s->k0;\n         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         s->state_out_len = 2;\n         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         s->state_out_len = 3;\n         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         s->state_out_len = ((Int32)k1) + 4;\n         BZ_GET_SMALL(s->k0); BZ_RAND_UPD_MASK; \n         s->k0 ^= BZ_RAND_MASK; s->nblock_used++;\n      }\n\n   } else {\n\n      while (True) {\n         /* try to finish existing run */\n         while (True) {\n            if (s->strm->avail_out == 0) return False;\n            if (s->state_out_len == 0) break;\n            *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;\n            BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );\n            s->state_out_len--;\n            s->strm->next_out++;\n            s->strm->avail_out--;\n            s->strm->total_out_lo32++;\n            if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;\n         }\n   \n         /* can a new run be started? */\n         if (s->nblock_used == s->save_nblock+1) return False;\n\n         /* Only caused by corrupt data stream? */\n         if (s->nblock_used > s->save_nblock+1)\n            return True;\n   \n         s->state_out_len = 1;\n         s->state_out_ch = s->k0;\n         BZ_GET_SMALL(k1); s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         s->state_out_len = 2;\n         BZ_GET_SMALL(k1); s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         s->state_out_len = 3;\n         BZ_GET_SMALL(k1); s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         BZ_GET_SMALL(k1); s->nblock_used++;\n         s->state_out_len = ((Int32)k1) + 4;\n         BZ_GET_SMALL(s->k0); s->nblock_used++;\n      }\n\n   }\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzDecompress) ( bz_stream *strm )\n{\n   Bool    corrupt;\n   DState* s;\n   if (strm == NULL) return BZ_PARAM_ERROR;\n   s = strm->state;\n   if (s == NULL) return BZ_PARAM_ERROR;\n   if (s->strm != strm) return BZ_PARAM_ERROR;\n\n   while (True) {\n      if (s->state == BZ_X_IDLE) return BZ_SEQUENCE_ERROR;\n      if (s->state == BZ_X_OUTPUT) {\n         if (s->smallDecompress)\n            corrupt = unRLE_obuf_to_output_SMALL ( s ); else\n            corrupt = unRLE_obuf_to_output_FAST  ( s );\n         if (corrupt) return BZ_DATA_ERROR;\n         if (s->nblock_used == s->save_nblock+1 && s->state_out_len == 0) {\n            BZ_FINALISE_CRC ( s->calculatedBlockCRC );\n            if (s->verbosity >= 3) \n               VPrintf2 ( \" {0x%08x, 0x%08x}\", s->storedBlockCRC, \n                          s->calculatedBlockCRC );\n            if (s->verbosity >= 2) VPrintf0 ( \"]\" );\n            if (s->calculatedBlockCRC != s->storedBlockCRC)\n               return BZ_DATA_ERROR;\n            s->calculatedCombinedCRC \n               = (s->calculatedCombinedCRC << 1) | \n                    (s->calculatedCombinedCRC >> 31);\n            s->calculatedCombinedCRC ^= s->calculatedBlockCRC;\n            s->state = BZ_X_BLKHDR_1;\n         } else {\n            return BZ_OK;\n         }\n      }\n      if (s->state >= BZ_X_MAGIC_1) {\n         Int32 r = BZ2_decompress ( s );\n         if (r == BZ_STREAM_END) {\n            if (s->verbosity >= 3)\n               VPrintf2 ( \"\\n    combined CRCs: stored = 0x%08x, computed = 0x%08x\", \n                          s->storedCombinedCRC, s->calculatedCombinedCRC );\n            if (s->calculatedCombinedCRC != s->storedCombinedCRC)\n               return BZ_DATA_ERROR;\n            return r;\n         }\n         if (s->state != BZ_X_OUTPUT) return r;\n      }\n   }\n\n   AssertH ( 0, 6001 );\n\n   return 0;  /*NOTREACHED*/\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzDecompressEnd)  ( bz_stream *strm )\n{\n   DState* s;\n   if (strm == NULL) return BZ_PARAM_ERROR;\n   s = strm->state;\n   if (s == NULL) return BZ_PARAM_ERROR;\n   if (s->strm != strm) return BZ_PARAM_ERROR;\n\n   if (s->tt   != NULL) BZFREE(s->tt);\n   if (s->ll16 != NULL) BZFREE(s->ll16);\n   if (s->ll4  != NULL) BZFREE(s->ll4);\n\n   BZFREE(strm->state);\n   strm->state = NULL;\n\n   return BZ_OK;\n}\n\n\n#ifndef BZ_NO_STDIO\n/*---------------------------------------------------*/\n/*--- File I/O stuff                              ---*/\n/*---------------------------------------------------*/\n\n#define BZ_SETERR(eee)                    \\\n{                                         \\\n   if (bzerror != NULL) *bzerror = eee;   \\\n   if (bzf != NULL) bzf->lastErr = eee;   \\\n}\n\ntypedef \n   struct {\n      FILE*     handle;\n      Char      buf[BZ_MAX_UNUSED];\n      Int32     bufN;\n      Bool      writing;\n      bz_stream strm;\n      Int32     lastErr;\n      Bool      initialisedOk;\n   }\n   bzFile;\n\n\n/*---------------------------------------------*/\nstatic Bool myfeof ( FILE* f )\n{\n   Int32 c = fgetc ( f );\n   if (c == EOF) return True;\n   ungetc ( c, f );\n   return False;\n}\n\n\n/*---------------------------------------------------*/\nBZFILE* BZ_API(BZ2_bzWriteOpen) \n                    ( int*  bzerror,      \n                      FILE* f, \n                      int   blockSize100k, \n                      int   verbosity,\n                      int   workFactor )\n{\n   Int32   ret;\n   bzFile* bzf = NULL;\n\n   BZ_SETERR(BZ_OK);\n\n   if (f == NULL ||\n       (blockSize100k < 1 || blockSize100k > 9) ||\n       (workFactor < 0 || workFactor > 250) ||\n       (verbosity < 0 || verbosity > 4))\n      { BZ_SETERR(BZ_PARAM_ERROR); return NULL; };\n\n   if (ferror(f))\n      { BZ_SETERR(BZ_IO_ERROR); return NULL; };\n\n   bzf = malloc ( sizeof(bzFile) );\n   if (bzf == NULL)\n      { BZ_SETERR(BZ_MEM_ERROR); return NULL; };\n\n   BZ_SETERR(BZ_OK);\n   bzf->initialisedOk = False;\n   bzf->bufN          = 0;\n   bzf->handle        = f;\n   bzf->writing       = True;\n   bzf->strm.bzalloc  = NULL;\n   bzf->strm.bzfree   = NULL;\n   bzf->strm.opaque   = NULL;\n\n   if (workFactor == 0) workFactor = 30;\n   ret = BZ2_bzCompressInit ( &(bzf->strm), blockSize100k, \n                              verbosity, workFactor );\n   if (ret != BZ_OK)\n      { BZ_SETERR(ret); free(bzf); return NULL; };\n\n   bzf->strm.avail_in = 0;\n   bzf->initialisedOk = True;\n   return bzf;   \n}\n\n\n\n/*---------------------------------------------------*/\nvoid BZ_API(BZ2_bzWrite)\n             ( int*    bzerror, \n               BZFILE* b, \n               void*   buf, \n               int     len )\n{\n   Int32 n, n2, ret;\n   bzFile* bzf = (bzFile*)b;\n\n   BZ_SETERR(BZ_OK);\n   if (bzf == NULL || buf == NULL || len < 0)\n      { BZ_SETERR(BZ_PARAM_ERROR); return; };\n   if (!(bzf->writing))\n      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };\n   if (ferror(bzf->handle))\n      { BZ_SETERR(BZ_IO_ERROR); return; };\n\n   if (len == 0)\n      { BZ_SETERR(BZ_OK); return; };\n\n   bzf->strm.avail_in = len;\n   bzf->strm.next_in  = buf;\n\n   while (True) {\n      bzf->strm.avail_out = BZ_MAX_UNUSED;\n      bzf->strm.next_out = bzf->buf;\n      ret = BZ2_bzCompress ( &(bzf->strm), BZ_RUN );\n      if (ret != BZ_RUN_OK)\n         { BZ_SETERR(ret); return; };\n\n      if (bzf->strm.avail_out < BZ_MAX_UNUSED) {\n         n = BZ_MAX_UNUSED - bzf->strm.avail_out;\n         n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), \n                       n, bzf->handle );\n         if (n != n2 || ferror(bzf->handle))\n            { BZ_SETERR(BZ_IO_ERROR); return; };\n      }\n\n      if (bzf->strm.avail_in == 0)\n         { BZ_SETERR(BZ_OK); return; };\n   }\n}\n\n\n/*---------------------------------------------------*/\nvoid BZ_API(BZ2_bzWriteClose)\n                  ( int*          bzerror, \n                    BZFILE*       b, \n                    int           abandon,\n                    unsigned int* nbytes_in,\n                    unsigned int* nbytes_out )\n{\n   BZ2_bzWriteClose64 ( bzerror, b, abandon, \n                        nbytes_in, NULL, nbytes_out, NULL );\n}\n\n\nvoid BZ_API(BZ2_bzWriteClose64)\n                  ( int*          bzerror, \n                    BZFILE*       b, \n                    int           abandon,\n                    unsigned int* nbytes_in_lo32,\n                    unsigned int* nbytes_in_hi32,\n                    unsigned int* nbytes_out_lo32,\n                    unsigned int* nbytes_out_hi32 )\n{\n   Int32   n, n2, ret;\n   bzFile* bzf = (bzFile*)b;\n\n   if (bzf == NULL)\n      { BZ_SETERR(BZ_OK); return; };\n   if (!(bzf->writing))\n      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };\n   if (ferror(bzf->handle))\n      { BZ_SETERR(BZ_IO_ERROR); return; };\n\n   if (nbytes_in_lo32 != NULL) *nbytes_in_lo32 = 0;\n   if (nbytes_in_hi32 != NULL) *nbytes_in_hi32 = 0;\n   if (nbytes_out_lo32 != NULL) *nbytes_out_lo32 = 0;\n   if (nbytes_out_hi32 != NULL) *nbytes_out_hi32 = 0;\n\n   if ((!abandon) && bzf->lastErr == BZ_OK) {\n      while (True) {\n         bzf->strm.avail_out = BZ_MAX_UNUSED;\n         bzf->strm.next_out = bzf->buf;\n         ret = BZ2_bzCompress ( &(bzf->strm), BZ_FINISH );\n         if (ret != BZ_FINISH_OK && ret != BZ_STREAM_END)\n            { BZ_SETERR(ret); return; };\n\n         if (bzf->strm.avail_out < BZ_MAX_UNUSED) {\n            n = BZ_MAX_UNUSED - bzf->strm.avail_out;\n            n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), \n                          n, bzf->handle );\n            if (n != n2 || ferror(bzf->handle))\n               { BZ_SETERR(BZ_IO_ERROR); return; };\n         }\n\n         if (ret == BZ_STREAM_END) break;\n      }\n   }\n\n   if ( !abandon && !ferror ( bzf->handle ) ) {\n      fflush ( bzf->handle );\n      if (ferror(bzf->handle))\n         { BZ_SETERR(BZ_IO_ERROR); return; };\n   }\n\n   if (nbytes_in_lo32 != NULL)\n      *nbytes_in_lo32 = bzf->strm.total_in_lo32;\n   if (nbytes_in_hi32 != NULL)\n      *nbytes_in_hi32 = bzf->strm.total_in_hi32;\n   if (nbytes_out_lo32 != NULL)\n      *nbytes_out_lo32 = bzf->strm.total_out_lo32;\n   if (nbytes_out_hi32 != NULL)\n      *nbytes_out_hi32 = bzf->strm.total_out_hi32;\n\n   BZ_SETERR(BZ_OK);\n   BZ2_bzCompressEnd ( &(bzf->strm) );\n   free ( bzf );\n}\n\n\n/*---------------------------------------------------*/\nBZFILE* BZ_API(BZ2_bzReadOpen) \n                   ( int*  bzerror, \n                     FILE* f, \n                     int   verbosity,\n                     int   small,\n                     void* unused,\n                     int   nUnused )\n{\n   bzFile* bzf = NULL;\n   int     ret;\n\n   BZ_SETERR(BZ_OK);\n\n   if (f == NULL || \n       (small != 0 && small != 1) ||\n       (verbosity < 0 || verbosity > 4) ||\n       (unused == NULL && nUnused != 0) ||\n       (unused != NULL && (nUnused < 0 || nUnused > BZ_MAX_UNUSED)))\n      { BZ_SETERR(BZ_PARAM_ERROR); return NULL; };\n\n   if (ferror(f))\n      { BZ_SETERR(BZ_IO_ERROR); return NULL; };\n\n   bzf = malloc ( sizeof(bzFile) );\n   if (bzf == NULL) \n      { BZ_SETERR(BZ_MEM_ERROR); return NULL; };\n\n   BZ_SETERR(BZ_OK);\n\n   bzf->initialisedOk = False;\n   bzf->handle        = f;\n   bzf->bufN          = 0;\n   bzf->writing       = False;\n   bzf->strm.bzalloc  = NULL;\n   bzf->strm.bzfree   = NULL;\n   bzf->strm.opaque   = NULL;\n   \n   while (nUnused > 0) {\n      bzf->buf[bzf->bufN] = *((UChar*)(unused)); bzf->bufN++;\n      unused = ((void*)( 1 + ((UChar*)(unused))  ));\n      nUnused--;\n   }\n\n   ret = BZ2_bzDecompressInit ( &(bzf->strm), verbosity, small );\n   if (ret != BZ_OK)\n      { BZ_SETERR(ret); free(bzf); return NULL; };\n\n   bzf->strm.avail_in = bzf->bufN;\n   bzf->strm.next_in  = bzf->buf;\n\n   bzf->initialisedOk = True;\n   return bzf;   \n}\n\n\n/*---------------------------------------------------*/\nvoid BZ_API(BZ2_bzReadClose) ( int *bzerror, BZFILE *b )\n{\n   bzFile* bzf = (bzFile*)b;\n\n   BZ_SETERR(BZ_OK);\n   if (bzf == NULL)\n      { BZ_SETERR(BZ_OK); return; };\n\n   if (bzf->writing)\n      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };\n\n   if (bzf->initialisedOk)\n      (void)BZ2_bzDecompressEnd ( &(bzf->strm) );\n   free ( bzf );\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzRead) \n           ( int*    bzerror, \n             BZFILE* b, \n             void*   buf, \n             int     len )\n{\n   Int32   n, ret;\n   bzFile* bzf = (bzFile*)b;\n\n   BZ_SETERR(BZ_OK);\n\n   if (bzf == NULL || buf == NULL || len < 0)\n      { BZ_SETERR(BZ_PARAM_ERROR); return 0; };\n\n   if (bzf->writing)\n      { BZ_SETERR(BZ_SEQUENCE_ERROR); return 0; };\n\n   if (len == 0)\n      { BZ_SETERR(BZ_OK); return 0; };\n\n   bzf->strm.avail_out = len;\n   bzf->strm.next_out = buf;\n\n   while (True) {\n\n      if (ferror(bzf->handle)) \n         { BZ_SETERR(BZ_IO_ERROR); return 0; };\n\n      if (bzf->strm.avail_in == 0 && !myfeof(bzf->handle)) {\n         n = fread ( bzf->buf, sizeof(UChar), \n                     BZ_MAX_UNUSED, bzf->handle );\n         if (ferror(bzf->handle))\n            { BZ_SETERR(BZ_IO_ERROR); return 0; };\n         bzf->bufN = n;\n         bzf->strm.avail_in = bzf->bufN;\n         bzf->strm.next_in = bzf->buf;\n      }\n\n      ret = BZ2_bzDecompress ( &(bzf->strm) );\n\n      if (ret != BZ_OK && ret != BZ_STREAM_END)\n         { BZ_SETERR(ret); return 0; };\n\n      if (ret == BZ_OK && myfeof(bzf->handle) && \n          bzf->strm.avail_in == 0 && bzf->strm.avail_out > 0)\n         { BZ_SETERR(BZ_UNEXPECTED_EOF); return 0; };\n\n      if (ret == BZ_STREAM_END)\n         { BZ_SETERR(BZ_STREAM_END);\n           return len - bzf->strm.avail_out; };\n      if (bzf->strm.avail_out == 0)\n         { BZ_SETERR(BZ_OK); return len; };\n      \n   }\n\n   return 0; /*not reached*/\n}\n\n\n/*---------------------------------------------------*/\nvoid BZ_API(BZ2_bzReadGetUnused) \n                     ( int*    bzerror, \n                       BZFILE* b, \n                       void**  unused, \n                       int*    nUnused )\n{\n   bzFile* bzf = (bzFile*)b;\n   if (bzf == NULL)\n      { BZ_SETERR(BZ_PARAM_ERROR); return; };\n   if (bzf->lastErr != BZ_STREAM_END)\n      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };\n   if (unused == NULL || nUnused == NULL)\n      { BZ_SETERR(BZ_PARAM_ERROR); return; };\n\n   BZ_SETERR(BZ_OK);\n   *nUnused = bzf->strm.avail_in;\n   *unused = bzf->strm.next_in;\n}\n#endif\n\n\n/*---------------------------------------------------*/\n/*--- Misc convenience stuff                      ---*/\n/*---------------------------------------------------*/\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzBuffToBuffCompress) \n                         ( char*         dest, \n                           unsigned int* destLen,\n                           char*         source, \n                           unsigned int  sourceLen,\n                           int           blockSize100k, \n                           int           verbosity, \n                           int           workFactor )\n{\n   bz_stream strm;\n   int ret;\n\n   if (dest == NULL || destLen == NULL || \n       source == NULL ||\n       blockSize100k < 1 || blockSize100k > 9 ||\n       verbosity < 0 || verbosity > 4 ||\n       workFactor < 0 || workFactor > 250) \n      return BZ_PARAM_ERROR;\n\n   if (workFactor == 0) workFactor = 30;\n   strm.bzalloc = NULL;\n   strm.bzfree = NULL;\n   strm.opaque = NULL;\n   ret = BZ2_bzCompressInit ( &strm, blockSize100k, \n                              verbosity, workFactor );\n   if (ret != BZ_OK) return ret;\n\n   strm.next_in = source;\n   strm.next_out = dest;\n   strm.avail_in = sourceLen;\n   strm.avail_out = *destLen;\n\n   ret = BZ2_bzCompress ( &strm, BZ_FINISH );\n   if (ret == BZ_FINISH_OK) goto output_overflow;\n   if (ret != BZ_STREAM_END) goto errhandler;\n\n   /* normal termination */\n   *destLen -= strm.avail_out;   \n   BZ2_bzCompressEnd ( &strm );\n   return BZ_OK;\n\n   output_overflow:\n   BZ2_bzCompressEnd ( &strm );\n   return BZ_OUTBUFF_FULL;\n\n   errhandler:\n   BZ2_bzCompressEnd ( &strm );\n   return ret;\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzBuffToBuffDecompress) \n                           ( char*         dest, \n                             unsigned int* destLen,\n                             char*         source, \n                             unsigned int  sourceLen,\n                             int           small,\n                             int           verbosity )\n{\n   bz_stream strm;\n   int ret;\n\n   if (dest == NULL || destLen == NULL || \n       source == NULL ||\n       (small != 0 && small != 1) ||\n       verbosity < 0 || verbosity > 4) \n          return BZ_PARAM_ERROR;\n\n   strm.bzalloc = NULL;\n   strm.bzfree = NULL;\n   strm.opaque = NULL;\n   ret = BZ2_bzDecompressInit ( &strm, verbosity, small );\n   if (ret != BZ_OK) return ret;\n\n   strm.next_in = source;\n   strm.next_out = dest;\n   strm.avail_in = sourceLen;\n   strm.avail_out = *destLen;\n\n   ret = BZ2_bzDecompress ( &strm );\n   if (ret == BZ_OK) goto output_overflow_or_eof;\n   if (ret != BZ_STREAM_END) goto errhandler;\n\n   /* normal termination */\n   *destLen -= strm.avail_out;\n   BZ2_bzDecompressEnd ( &strm );\n   return BZ_OK;\n\n   output_overflow_or_eof:\n   if (strm.avail_out > 0) {\n      BZ2_bzDecompressEnd ( &strm );\n      return BZ_UNEXPECTED_EOF;\n   } else {\n      BZ2_bzDecompressEnd ( &strm );\n      return BZ_OUTBUFF_FULL;\n   };      \n\n   errhandler:\n   BZ2_bzDecompressEnd ( &strm );\n   return ret; \n}\n\n\n/*---------------------------------------------------*/\n/*--\n   Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp)\n   to support better zlib compatibility.\n   This code is not _officially_ part of libbzip2 (yet);\n   I haven't tested it, documented it, or considered the\n   threading-safeness of it.\n   If this code breaks, please contact both Yoshioka and me.\n--*/\n/*---------------------------------------------------*/\n\n/*---------------------------------------------------*/\n/*--\n   return version like \"0.9.5d, 4-Sept-1999\".\n--*/\nconst char * BZ_API(BZ2_bzlibVersion)(void)\n{\n   return BZ_VERSION;\n}\n\n\n#ifndef BZ_NO_STDIO\n/*---------------------------------------------------*/\n\n#if defined(_WIN32) || defined(OS2) || defined(MSDOS)\n#   include <fcntl.h>\n#   include <io.h>\n#   define SET_BINARY_MODE(file) setmode(fileno(file),O_BINARY)\n#else\n#   define SET_BINARY_MODE(file)\n#endif\nstatic\nBZFILE * bzopen_or_bzdopen\n               ( const char *path,   /* no use when bzdopen */\n                 int fd,             /* no use when bzdopen */\n                 const char *mode,\n                 int open_mode)      /* bzopen: 0, bzdopen:1 */\n{\n   int    bzerr;\n   char   unused[BZ_MAX_UNUSED];\n   int    blockSize100k = 9;\n   int    writing       = 0;\n   char   mode2[10]     = \"\";\n   FILE   *fp           = NULL;\n   BZFILE *bzfp         = NULL;\n   int    verbosity     = 0;\n   int    workFactor    = 30;\n   int    smallMode     = 0;\n   int    nUnused       = 0; \n\n   if (mode == NULL) return NULL;\n   while (*mode) {\n      switch (*mode) {\n      case 'r':\n         writing = 0; break;\n      case 'w':\n         writing = 1; break;\n      case 's':\n         smallMode = 1; break;\n      default:\n         if (isdigit((int)(*mode))) {\n            blockSize100k = *mode-BZ_HDR_0;\n         }\n      }\n      mode++;\n   }\n   strcat(mode2, writing ? \"w\" : \"r\" );\n   strcat(mode2,\"b\");   /* binary mode */\n\n   if (open_mode==0) {\n      if (path==NULL || strcmp(path,\"\")==0) {\n        fp = (writing ? stdout : stdin);\n        SET_BINARY_MODE(fp);\n      } else {\n        fp = fopen(path,mode2);\n      }\n   } else {\n#ifdef BZ_STRICT_ANSI\n      fp = NULL;\n#else\n      fp = fdopen(fd,mode2);\n#endif\n   }\n   if (fp == NULL) return NULL;\n\n   if (writing) {\n      /* Guard against total chaos and anarchy -- JRS */\n      if (blockSize100k < 1) blockSize100k = 1;\n      if (blockSize100k > 9) blockSize100k = 9; \n      bzfp = BZ2_bzWriteOpen(&bzerr,fp,blockSize100k,\n                             verbosity,workFactor);\n   } else {\n      bzfp = BZ2_bzReadOpen(&bzerr,fp,verbosity,smallMode,\n                            unused,nUnused);\n   }\n   if (bzfp == NULL) {\n      if (fp != stdin && fp != stdout) fclose(fp);\n      return NULL;\n   }\n   return bzfp;\n}\n\n\n/*---------------------------------------------------*/\n/*--\n   open file for read or write.\n      ex) bzopen(\"file\",\"w9\")\n      case path=\"\" or NULL => use stdin or stdout.\n--*/\nBZFILE * BZ_API(BZ2_bzopen)\n               ( const char *path,\n                 const char *mode )\n{\n   return bzopen_or_bzdopen(path,-1,mode,/*bzopen*/0);\n}\n\n\n/*---------------------------------------------------*/\nBZFILE * BZ_API(BZ2_bzdopen)\n               ( int fd,\n                 const char *mode )\n{\n   return bzopen_or_bzdopen(NULL,fd,mode,/*bzdopen*/1);\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzread) (BZFILE* b, void* buf, int len )\n{\n   int bzerr, nread;\n   if (((bzFile*)b)->lastErr == BZ_STREAM_END) return 0;\n   nread = BZ2_bzRead(&bzerr,b,buf,len);\n   if (bzerr == BZ_OK || bzerr == BZ_STREAM_END) {\n      return nread;\n   } else {\n      return -1;\n   }\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzwrite) (BZFILE* b, void* buf, int len )\n{\n   int bzerr;\n\n   BZ2_bzWrite(&bzerr,b,buf,len);\n   if(bzerr == BZ_OK){\n      return len;\n   }else{\n      return -1;\n   }\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzflush) (BZFILE *b)\n{\n   /* do nothing now... */\n   return 0;\n}\n\n\n/*---------------------------------------------------*/\nvoid BZ_API(BZ2_bzclose) (BZFILE* b)\n{\n   int bzerr;\n   FILE *fp;\n   \n   if (b==NULL) {return;}\n   fp = ((bzFile *)b)->handle;\n   if(((bzFile*)b)->writing){\n      BZ2_bzWriteClose(&bzerr,b,0,NULL,NULL);\n      if(bzerr != BZ_OK){\n         BZ2_bzWriteClose(NULL,b,1,NULL,NULL);\n      }\n   }else{\n      BZ2_bzReadClose(&bzerr,b);\n   }\n   if(fp!=stdin && fp!=stdout){\n      fclose(fp);\n   }\n}\n\n\n/*---------------------------------------------------*/\n/*--\n   return last error code \n--*/\nstatic const char *bzerrorstrings[] = {\n       \"OK\"\n      ,\"SEQUENCE_ERROR\"\n      ,\"PARAM_ERROR\"\n      ,\"MEM_ERROR\"\n      ,\"DATA_ERROR\"\n      ,\"DATA_ERROR_MAGIC\"\n      ,\"IO_ERROR\"\n      ,\"UNEXPECTED_EOF\"\n      ,\"OUTBUFF_FULL\"\n      ,\"CONFIG_ERROR\"\n      ,\"???\"   /* for future */\n      ,\"???\"   /* for future */\n      ,\"???\"   /* for future */\n      ,\"???\"   /* for future */\n      ,\"???\"   /* for future */\n      ,\"???\"   /* for future */\n};\n\n\nconst char * BZ_API(BZ2_bzerror) (BZFILE *b, int *errnum)\n{\n   int err = ((bzFile *)b)->lastErr;\n\n   if(err>0) err = 0;\n   *errnum = err;\n   return bzerrorstrings[err*-1];\n}\n#endif\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                           bzlib.c ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "external/bzip2/bzlib.h",
    "content": "\n/*-------------------------------------------------------------*/\n/*--- Public header file for the library.                   ---*/\n/*---                                               bzlib.h ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   Please read the WARNING, DISCLAIMER and PATENTS sections in the \n   README file.\n\n   This program is released under the terms of the license contained\n   in the file LICENSE.\n   ------------------------------------------------------------------ */\n\n\n#ifndef _BZLIB_H\n#define _BZLIB_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define BZ_RUN               0\n#define BZ_FLUSH             1\n#define BZ_FINISH            2\n\n#define BZ_OK                0\n#define BZ_RUN_OK            1\n#define BZ_FLUSH_OK          2\n#define BZ_FINISH_OK         3\n#define BZ_STREAM_END        4\n#define BZ_SEQUENCE_ERROR    (-1)\n#define BZ_PARAM_ERROR       (-2)\n#define BZ_MEM_ERROR         (-3)\n#define BZ_DATA_ERROR        (-4)\n#define BZ_DATA_ERROR_MAGIC  (-5)\n#define BZ_IO_ERROR          (-6)\n#define BZ_UNEXPECTED_EOF    (-7)\n#define BZ_OUTBUFF_FULL      (-8)\n#define BZ_CONFIG_ERROR      (-9)\n\ntypedef \n   struct {\n      char *next_in;\n      unsigned int avail_in;\n      unsigned int total_in_lo32;\n      unsigned int total_in_hi32;\n\n      char *next_out;\n      unsigned int avail_out;\n      unsigned int total_out_lo32;\n      unsigned int total_out_hi32;\n\n      void *state;\n\n      void *(*bzalloc)(void *,int,int);\n      void (*bzfree)(void *,void *);\n      void *opaque;\n   } \n   bz_stream;\n\n\n#ifndef BZ_IMPORT\n#define BZ_EXPORT\n#endif\n\n#ifndef BZ_NO_STDIO\n/* Need a definitition for FILE */\n#include <stdio.h>\n#endif\n\n#ifdef _WIN32\n#   include <windows.h>\n#   ifdef small\n      /* windows.h define small to char */\n#      undef small\n#   endif\n#   ifdef BZ_EXPORT\n#   define BZ_API(func) WINAPI func\n#   define BZ_EXTERN extern\n#   else\n   /* import windows dll dynamically */\n#   define BZ_API(func) (WINAPI * func)\n#   define BZ_EXTERN\n#   endif\n#else\n#   define BZ_API(func) func\n#   define BZ_EXTERN extern\n#endif\n\n\n/*-- Core (low-level) library functions --*/\n\nBZ_EXTERN int BZ_API(BZ2_bzCompressInit) ( \n      bz_stream* strm, \n      int        blockSize100k, \n      int        verbosity, \n      int        workFactor \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzCompress) ( \n      bz_stream* strm, \n      int action \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzCompressEnd) ( \n      bz_stream* strm \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzDecompressInit) ( \n      bz_stream *strm, \n      int       verbosity, \n      int       small\n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzDecompress) ( \n      bz_stream* strm \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzDecompressEnd) ( \n      bz_stream *strm \n   );\n\n\n\n/*-- High(er) level library functions --*/\n\n#ifndef BZ_NO_STDIO\n#define BZ_MAX_UNUSED 5000\n\ntypedef void BZFILE;\n\nBZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) ( \n      int*  bzerror,   \n      FILE* f, \n      int   verbosity, \n      int   small,\n      void* unused,    \n      int   nUnused \n   );\n\nBZ_EXTERN void BZ_API(BZ2_bzReadClose) ( \n      int*    bzerror, \n      BZFILE* b \n   );\n\nBZ_EXTERN void BZ_API(BZ2_bzReadGetUnused) ( \n      int*    bzerror, \n      BZFILE* b, \n      void**  unused,  \n      int*    nUnused \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzRead) ( \n      int*    bzerror, \n      BZFILE* b, \n      void*   buf, \n      int     len \n   );\n\nBZ_EXTERN BZFILE* BZ_API(BZ2_bzWriteOpen) ( \n      int*  bzerror,      \n      FILE* f, \n      int   blockSize100k, \n      int   verbosity, \n      int   workFactor \n   );\n\nBZ_EXTERN void BZ_API(BZ2_bzWrite) ( \n      int*    bzerror, \n      BZFILE* b, \n      void*   buf, \n      int     len \n   );\n\nBZ_EXTERN void BZ_API(BZ2_bzWriteClose) ( \n      int*          bzerror, \n      BZFILE*       b, \n      int           abandon, \n      unsigned int* nbytes_in, \n      unsigned int* nbytes_out \n   );\n\nBZ_EXTERN void BZ_API(BZ2_bzWriteClose64) ( \n      int*          bzerror, \n      BZFILE*       b, \n      int           abandon, \n      unsigned int* nbytes_in_lo32, \n      unsigned int* nbytes_in_hi32, \n      unsigned int* nbytes_out_lo32, \n      unsigned int* nbytes_out_hi32\n   );\n#endif\n\n\n/*-- Utility functions --*/\n\nBZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) ( \n      char*         dest, \n      unsigned int* destLen,\n      char*         source, \n      unsigned int  sourceLen,\n      int           blockSize100k, \n      int           verbosity, \n      int           workFactor \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) ( \n      char*         dest, \n      unsigned int* destLen,\n      char*         source, \n      unsigned int  sourceLen,\n      int           small, \n      int           verbosity \n   );\n\n\n/*--\n   Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp)\n   to support better zlib compatibility.\n   This code is not _officially_ part of libbzip2 (yet);\n   I haven't tested it, documented it, or considered the\n   threading-safeness of it.\n   If this code breaks, please contact both Yoshioka and me.\n--*/\n\nBZ_EXTERN const char * BZ_API(BZ2_bzlibVersion) (\n      void\n   );\n\n#ifndef BZ_NO_STDIO\nBZ_EXTERN BZFILE * BZ_API(BZ2_bzopen) (\n      const char *path,\n      const char *mode\n   );\n\nBZ_EXTERN BZFILE * BZ_API(BZ2_bzdopen) (\n      int        fd,\n      const char *mode\n   );\n         \nBZ_EXTERN int BZ_API(BZ2_bzread) (\n      BZFILE* b, \n      void* buf, \n      int len \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzwrite) (\n      BZFILE* b, \n      void*   buf, \n      int     len \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzflush) (\n      BZFILE* b\n   );\n\nBZ_EXTERN void BZ_API(BZ2_bzclose) (\n      BZFILE* b\n   );\n\nBZ_EXTERN const char * BZ_API(BZ2_bzerror) (\n      BZFILE *b, \n      int    *errnum\n   );\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n\n/*-------------------------------------------------------------*/\n/*--- end                                           bzlib.h ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "external/bzip2/bzlib_private.h",
    "content": "\n/*-------------------------------------------------------------*/\n/*--- Private header file for the library.                  ---*/\n/*---                                       bzlib_private.h ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   Please read the WARNING, DISCLAIMER and PATENTS sections in the \n   README file.\n\n   This program is released under the terms of the license contained\n   in the file LICENSE.\n   ------------------------------------------------------------------ */\n\n\n#ifndef _BZLIB_PRIVATE_H\n#define _BZLIB_PRIVATE_H\n\n#include <stdlib.h>\n\n#ifndef BZ_NO_STDIO\n#include <stdio.h>\n#include <ctype.h>\n#include <string.h>\n#endif\n\n#include \"bzlib.h\"\n\n\n\n/*-- General stuff. --*/\n\n#define BZ_VERSION  \"1.0.6, 6-Sept-2010\"\n\ntypedef char            Char;\ntypedef unsigned char   Bool;\ntypedef unsigned char   UChar;\ntypedef int             Int32;\ntypedef unsigned int    UInt32;\ntypedef short           Int16;\ntypedef unsigned short  UInt16;\n\n#define True  ((Bool)1)\n#define False ((Bool)0)\n\n#ifndef __GNUC__\n#define __inline__  /* */\n#endif \n\n#ifndef BZ_NO_STDIO\n\nextern void BZ2_bz__AssertH__fail ( int errcode );\n#define AssertH(cond,errcode) \\\n   { if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); }\n\n#if BZ_DEBUG\n#define AssertD(cond,msg) \\\n   { if (!(cond)) {       \\\n      fprintf ( stderr,   \\\n        \"\\n\\nlibbzip2(debug build): internal error\\n\\t%s\\n\", msg );\\\n      exit(1); \\\n   }}\n#else\n#define AssertD(cond,msg) /* */\n#endif\n\n#define VPrintf0(zf) \\\n   fprintf(stderr,zf)\n#define VPrintf1(zf,za1) \\\n   fprintf(stderr,zf,za1)\n#define VPrintf2(zf,za1,za2) \\\n   fprintf(stderr,zf,za1,za2)\n#define VPrintf3(zf,za1,za2,za3) \\\n   fprintf(stderr,zf,za1,za2,za3)\n#define VPrintf4(zf,za1,za2,za3,za4) \\\n   fprintf(stderr,zf,za1,za2,za3,za4)\n#define VPrintf5(zf,za1,za2,za3,za4,za5) \\\n   fprintf(stderr,zf,za1,za2,za3,za4,za5)\n\n#else\n\nextern void bz_internal_error ( int errcode );\n#define AssertH(cond,errcode) \\\n   { if (!(cond)) bz_internal_error ( errcode ); }\n#define AssertD(cond,msg)                do { } while (0)\n#define VPrintf0(zf)                     do { } while (0)\n#define VPrintf1(zf,za1)                 do { } while (0)\n#define VPrintf2(zf,za1,za2)             do { } while (0)\n#define VPrintf3(zf,za1,za2,za3)         do { } while (0)\n#define VPrintf4(zf,za1,za2,za3,za4)     do { } while (0)\n#define VPrintf5(zf,za1,za2,za3,za4,za5) do { } while (0)\n\n#endif\n\n\n#define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1)\n#define BZFREE(ppp)  (strm->bzfree)(strm->opaque,(ppp))\n\n\n/*-- Header bytes. --*/\n\n#define BZ_HDR_B 0x42   /* 'B' */\n#define BZ_HDR_Z 0x5a   /* 'Z' */\n#define BZ_HDR_h 0x68   /* 'h' */\n#define BZ_HDR_0 0x30   /* '0' */\n  \n/*-- Constants for the back end. --*/\n\n#define BZ_MAX_ALPHA_SIZE 258\n#define BZ_MAX_CODE_LEN    23\n\n#define BZ_RUNA 0\n#define BZ_RUNB 1\n\n#define BZ_N_GROUPS 6\n#define BZ_G_SIZE   50\n#define BZ_N_ITERS  4\n\n#define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE))\n\n\n\n/*-- Stuff for randomising repetitive blocks. --*/\n\nextern Int32 BZ2_rNums[512];\n\n#define BZ_RAND_DECLS                          \\\n   Int32 rNToGo;                               \\\n   Int32 rTPos                                 \\\n\n#define BZ_RAND_INIT_MASK                      \\\n   s->rNToGo = 0;                              \\\n   s->rTPos  = 0                               \\\n\n#define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0)\n\n#define BZ_RAND_UPD_MASK                       \\\n   if (s->rNToGo == 0) {                       \\\n      s->rNToGo = BZ2_rNums[s->rTPos];         \\\n      s->rTPos++;                              \\\n      if (s->rTPos == 512) s->rTPos = 0;       \\\n   }                                           \\\n   s->rNToGo--;\n\n\n\n/*-- Stuff for doing CRCs. --*/\n\nextern UInt32 BZ2_crc32Table[256];\n\n#define BZ_INITIALISE_CRC(crcVar)              \\\n{                                              \\\n   crcVar = 0xffffffffL;                       \\\n}\n\n#define BZ_FINALISE_CRC(crcVar)                \\\n{                                              \\\n   crcVar = ~(crcVar);                         \\\n}\n\n#define BZ_UPDATE_CRC(crcVar,cha)              \\\n{                                              \\\n   crcVar = (crcVar << 8) ^                    \\\n            BZ2_crc32Table[(crcVar >> 24) ^    \\\n                           ((UChar)cha)];      \\\n}\n\n\n\n/*-- States and modes for compression. --*/\n\n#define BZ_M_IDLE      1\n#define BZ_M_RUNNING   2\n#define BZ_M_FLUSHING  3\n#define BZ_M_FINISHING 4\n\n#define BZ_S_OUTPUT    1\n#define BZ_S_INPUT     2\n\n#define BZ_N_RADIX 2\n#define BZ_N_QSORT 12\n#define BZ_N_SHELL 18\n#define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2)\n\n\n\n\n/*-- Structure holding all the compression-side stuff. --*/\n\ntypedef\n   struct {\n      /* pointer back to the struct bz_stream */\n      bz_stream* strm;\n\n      /* mode this stream is in, and whether inputting */\n      /* or outputting data */\n      Int32    mode;\n      Int32    state;\n\n      /* remembers avail_in when flush/finish requested */\n      UInt32   avail_in_expect;\n\n      /* for doing the block sorting */\n      UInt32*  arr1;\n      UInt32*  arr2;\n      UInt32*  ftab;\n      Int32    origPtr;\n\n      /* aliases for arr1 and arr2 */\n      UInt32*  ptr;\n      UChar*   block;\n      UInt16*  mtfv;\n      UChar*   zbits;\n\n      /* for deciding when to use the fallback sorting algorithm */\n      Int32    workFactor;\n\n      /* run-length-encoding of the input */\n      UInt32   state_in_ch;\n      Int32    state_in_len;\n      BZ_RAND_DECLS;\n\n      /* input and output limits and current posns */\n      Int32    nblock;\n      Int32    nblockMAX;\n      Int32    numZ;\n      Int32    state_out_pos;\n\n      /* map of bytes used in block */\n      Int32    nInUse;\n      Bool     inUse[256];\n      UChar    unseqToSeq[256];\n\n      /* the buffer for bit stream creation */\n      UInt32   bsBuff;\n      Int32    bsLive;\n\n      /* block and combined CRCs */\n      UInt32   blockCRC;\n      UInt32   combinedCRC;\n\n      /* misc administratium */\n      Int32    verbosity;\n      Int32    blockNo;\n      Int32    blockSize100k;\n\n      /* stuff for coding the MTF values */\n      Int32    nMTF;\n      Int32    mtfFreq    [BZ_MAX_ALPHA_SIZE];\n      UChar    selector   [BZ_MAX_SELECTORS];\n      UChar    selectorMtf[BZ_MAX_SELECTORS];\n\n      UChar    len     [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n      Int32    code    [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n      Int32    rfreq   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n      /* second dimension: only 3 needed; 4 makes index calculations faster */\n      UInt32   len_pack[BZ_MAX_ALPHA_SIZE][4];\n\n   }\n   EState;\n\n\n\n/*-- externs for compression. --*/\n\nextern void \nBZ2_blockSort ( EState* );\n\nextern void \nBZ2_compressBlock ( EState*, Bool );\n\nextern void \nBZ2_bsInitWrite ( EState* );\n\nextern void \nBZ2_hbAssignCodes ( Int32*, UChar*, Int32, Int32, Int32 );\n\nextern void \nBZ2_hbMakeCodeLengths ( UChar*, Int32*, Int32, Int32 );\n\n\n\n/*-- states for decompression. --*/\n\n#define BZ_X_IDLE        1\n#define BZ_X_OUTPUT      2\n\n#define BZ_X_MAGIC_1     10\n#define BZ_X_MAGIC_2     11\n#define BZ_X_MAGIC_3     12\n#define BZ_X_MAGIC_4     13\n#define BZ_X_BLKHDR_1    14\n#define BZ_X_BLKHDR_2    15\n#define BZ_X_BLKHDR_3    16\n#define BZ_X_BLKHDR_4    17\n#define BZ_X_BLKHDR_5    18\n#define BZ_X_BLKHDR_6    19\n#define BZ_X_BCRC_1      20\n#define BZ_X_BCRC_2      21\n#define BZ_X_BCRC_3      22\n#define BZ_X_BCRC_4      23\n#define BZ_X_RANDBIT     24\n#define BZ_X_ORIGPTR_1   25\n#define BZ_X_ORIGPTR_2   26\n#define BZ_X_ORIGPTR_3   27\n#define BZ_X_MAPPING_1   28\n#define BZ_X_MAPPING_2   29\n#define BZ_X_SELECTOR_1  30\n#define BZ_X_SELECTOR_2  31\n#define BZ_X_SELECTOR_3  32\n#define BZ_X_CODING_1    33\n#define BZ_X_CODING_2    34\n#define BZ_X_CODING_3    35\n#define BZ_X_MTF_1       36\n#define BZ_X_MTF_2       37\n#define BZ_X_MTF_3       38\n#define BZ_X_MTF_4       39\n#define BZ_X_MTF_5       40\n#define BZ_X_MTF_6       41\n#define BZ_X_ENDHDR_2    42\n#define BZ_X_ENDHDR_3    43\n#define BZ_X_ENDHDR_4    44\n#define BZ_X_ENDHDR_5    45\n#define BZ_X_ENDHDR_6    46\n#define BZ_X_CCRC_1      47\n#define BZ_X_CCRC_2      48\n#define BZ_X_CCRC_3      49\n#define BZ_X_CCRC_4      50\n\n\n\n/*-- Constants for the fast MTF decoder. --*/\n\n#define MTFA_SIZE 4096\n#define MTFL_SIZE 16\n\n\n\n/*-- Structure holding all the decompression-side stuff. --*/\n\ntypedef\n   struct {\n      /* pointer back to the struct bz_stream */\n      bz_stream* strm;\n\n      /* state indicator for this stream */\n      Int32    state;\n\n      /* for doing the final run-length decoding */\n      UChar    state_out_ch;\n      Int32    state_out_len;\n      Bool     blockRandomised;\n      BZ_RAND_DECLS;\n\n      /* the buffer for bit stream reading */\n      UInt32   bsBuff;\n      Int32    bsLive;\n\n      /* misc administratium */\n      Int32    blockSize100k;\n      Bool     smallDecompress;\n      Int32    currBlockNo;\n      Int32    verbosity;\n\n      /* for undoing the Burrows-Wheeler transform */\n      Int32    origPtr;\n      UInt32   tPos;\n      Int32    k0;\n      Int32    unzftab[256];\n      Int32    nblock_used;\n      Int32    cftab[257];\n      Int32    cftabCopy[257];\n\n      /* for undoing the Burrows-Wheeler transform (FAST) */\n      UInt32   *tt;\n\n      /* for undoing the Burrows-Wheeler transform (SMALL) */\n      UInt16   *ll16;\n      UChar    *ll4;\n\n      /* stored and calculated CRCs */\n      UInt32   storedBlockCRC;\n      UInt32   storedCombinedCRC;\n      UInt32   calculatedBlockCRC;\n      UInt32   calculatedCombinedCRC;\n\n      /* map of bytes used in block */\n      Int32    nInUse;\n      Bool     inUse[256];\n      Bool     inUse16[16];\n      UChar    seqToUnseq[256];\n\n      /* for decoding the MTF values */\n      UChar    mtfa   [MTFA_SIZE];\n      Int32    mtfbase[256 / MTFL_SIZE];\n      UChar    selector   [BZ_MAX_SELECTORS];\n      UChar    selectorMtf[BZ_MAX_SELECTORS];\n      UChar    len  [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n\n      Int32    limit  [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n      Int32    base   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n      Int32    perm   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n      Int32    minLens[BZ_N_GROUPS];\n\n      /* save area for scalars in the main decompress code */\n      Int32    save_i;\n      Int32    save_j;\n      Int32    save_t;\n      Int32    save_alphaSize;\n      Int32    save_nGroups;\n      Int32    save_nSelectors;\n      Int32    save_EOB;\n      Int32    save_groupNo;\n      Int32    save_groupPos;\n      Int32    save_nextSym;\n      Int32    save_nblockMAX;\n      Int32    save_nblock;\n      Int32    save_es;\n      Int32    save_N;\n      Int32    save_curr;\n      Int32    save_zt;\n      Int32    save_zn; \n      Int32    save_zvec;\n      Int32    save_zj;\n      Int32    save_gSel;\n      Int32    save_gMinlen;\n      Int32*   save_gLimit;\n      Int32*   save_gBase;\n      Int32*   save_gPerm;\n\n   }\n   DState;\n\n\n\n/*-- Macros for decompression. --*/\n\n#define BZ_GET_FAST(cccc)                     \\\n    /* c_tPos is unsigned, hence test < 0 is pointless. */ \\\n    if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \\\n    s->tPos = s->tt[s->tPos];                 \\\n    cccc = (UChar)(s->tPos & 0xff);           \\\n    s->tPos >>= 8;\n\n#define BZ_GET_FAST_C(cccc)                   \\\n    /* c_tPos is unsigned, hence test < 0 is pointless. */ \\\n    if (c_tPos >= (UInt32)100000 * (UInt32)ro_blockSize100k) return True; \\\n    c_tPos = c_tt[c_tPos];                    \\\n    cccc = (UChar)(c_tPos & 0xff);            \\\n    c_tPos >>= 8;\n\n#define SET_LL4(i,n)                                          \\\n   { if (((i) & 0x1) == 0)                                    \\\n        s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else    \\\n        s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4);  \\\n   }\n\n#define GET_LL4(i)                             \\\n   ((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF)\n\n#define SET_LL(i,n)                          \\\n   { s->ll16[i] = (UInt16)(n & 0x0000ffff);  \\\n     SET_LL4(i, n >> 16);                    \\\n   }\n\n#define GET_LL(i) \\\n   (((UInt32)s->ll16[i]) | (GET_LL4(i) << 16))\n\n#define BZ_GET_SMALL(cccc)                            \\\n    /* c_tPos is unsigned, hence test < 0 is pointless. */ \\\n    if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \\\n    cccc = BZ2_indexIntoF ( s->tPos, s->cftab );    \\\n    s->tPos = GET_LL(s->tPos);\n\n\n/*-- externs for decompression. --*/\n\nextern Int32 \nBZ2_indexIntoF ( Int32, Int32* );\n\nextern Int32 \nBZ2_decompress ( DState* );\n\nextern void \nBZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*,\n                           Int32,  Int32, Int32 );\n\n\n#endif\n\n\n/*-- BZ_NO_STDIO seems to make NULL disappear on some platforms. --*/\n\n#ifdef BZ_NO_STDIO\n#ifndef NULL\n#define NULL 0\n#endif\n#endif\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                   bzlib_private.h ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "external/bzip2/bzmore",
    "content": "#!/bin/sh\n\n# Bzmore wrapped for bzip2, \n# adapted from zmore by Philippe Troin <phil@fifi.org> for Debian GNU/Linux.\n\nPATH=\"/usr/bin:$PATH\"; export PATH\n\nprog=`echo $0 | sed 's|.*/||'`\ncase \"$prog\" in\n\t*less)\tmore=less\t;;\n\t*)\tmore=more       ;;\nesac\n\nif test \"`echo -n a`\" = \"-n a\"; then\n  # looks like a SysV system:\n  n1=''; n2='\\c'\nelse\n  n1='-n'; n2=''\nfi\noldtty=`stty -g 2>/dev/null`\nif stty -cbreak 2>/dev/null; then\n  cb='cbreak'; ncb='-cbreak'\nelse\n  # 'stty min 1' resets eof to ^a on both SunOS and SysV!\n  cb='min 1 -icanon'; ncb='icanon eof ^d'\nfi\nif test $? -eq 0 -a -n \"$oldtty\"; then\n   trap 'stty $oldtty 2>/dev/null; exit' 0 2 3 5 10 13 15\nelse\n   trap 'stty $ncb echo 2>/dev/null; exit' 0 2 3 5 10 13 15\nfi\n\nif test $# = 0; then\n    if test -t 0; then\n\techo usage: $prog files...\n    else\n\tbzip2 -cdfq | eval $more\n    fi\nelse\n    FIRST=1\n    for FILE\n    do\n\tif test $FIRST -eq 0; then\n\t\techo $n1 \"--More--(Next file: $FILE)$n2\"\n\t\tstty $cb -echo 2>/dev/null\n\t\tANS=`dd bs=1 count=1 2>/dev/null` \n\t\tstty $ncb echo 2>/dev/null\n\t\techo \" \"\n\t\tif test \"$ANS\" = 'e' -o \"$ANS\" = 'q'; then\n\t\t\texit\n\t\tfi\n\tfi\n\tif test \"$ANS\" != 's'; then\n\t\techo \"------> $FILE <------\"\n\t\tbzip2 -cdfq \"$FILE\" | eval $more\n\tfi\n\tif test -t; then\n\t\tFIRST=0\n\tfi\n    done\nfi\n"
  },
  {
    "path": "external/bzip2/bzmore.1",
    "content": ".\\\"Shamelessly copied from zmore.1 by Philippe Troin <phil@fifi.org>\n.\\\"for Debian GNU/Linux\n.TH BZMORE 1\n.SH NAME\nbzmore, bzless \\- file perusal filter for crt viewing of bzip2 compressed text\n.SH SYNOPSIS\n.B bzmore\n[ name ...  ]\n.br\n.B bzless\n[ name ...  ]\n.SH NOTE\nIn the following description,\n.I bzless\nand\n.I less\ncan be used interchangeably with\n.I bzmore\nand\n.I more.\n.SH DESCRIPTION\n.I  Bzmore\nis a filter which allows examination of compressed or plain text files\none screenful at a time on a soft-copy terminal.\n.I bzmore\nworks on files compressed with\n.I bzip2\nand also on uncompressed files.\nIf a file does not exist,\n.I bzmore\nlooks for a file of the same name with the addition of a .bz2 suffix.\n.PP\n.I Bzmore\nnormally pauses after each screenful, printing --More--\nat the bottom of the screen.\nIf the user then types a carriage return, one more line is displayed.\nIf the user hits a space,\nanother screenful is displayed.  Other possibilities are enumerated later.\n.PP\n.I Bzmore\nlooks in the file\n.I /etc/termcap\nto determine terminal characteristics,\nand to determine the default window size.\nOn a terminal capable of displaying 24 lines,\nthe default window size is 22 lines.\nOther sequences which may be typed when\n.I bzmore\npauses, and their effects, are as follows (\\fIi\\fP is an optional integer\nargument, defaulting to 1) :\n.PP\n.IP \\fIi\\|\\fP<space>\ndisplay\n.I i\nmore lines, (or another screenful if no argument is given)\n.PP\n.IP ^D\ndisplay 11 more lines (a ``scroll'').\nIf\n.I i\nis given, then the scroll size is set to \\fIi\\|\\fP.\n.PP\n.IP d\nsame as ^D (control-D)\n.PP\n.IP \\fIi\\|\\fPz\nsame as typing a space except that \\fIi\\|\\fP, if present, becomes the new\nwindow size.  Note that the window size reverts back to the default at the\nend of the current file.\n.PP\n.IP \\fIi\\|\\fPs\nskip \\fIi\\|\\fP lines and print a screenful of lines\n.PP\n.IP \\fIi\\|\\fPf\nskip \\fIi\\fP screenfuls and print a screenful of lines\n.PP\n.IP \"q or Q\"\nquit reading the current file; go on to the next (if any)\n.PP\n.IP \"e or q\"\nWhen the prompt --More--(Next file: \n.IR file )\nis printed, this command causes bzmore to exit.\n.PP\n.IP s\nWhen the prompt --More--(Next file: \n.IR file )\nis printed, this command causes bzmore to skip the next file and continue.\n.PP \n.IP =\nDisplay the current line number.\n.PP\n.IP \\fIi\\|\\fP/expr\nsearch for the \\fIi\\|\\fP-th occurrence of the regular expression \\fIexpr.\\fP\nIf the pattern is not found,\n.I bzmore\ngoes on to the next file (if any).\nOtherwise, a screenful is displayed, starting two lines before the place\nwhere the expression was found.\nThe user's erase and kill characters may be used to edit the regular\nexpression.\nErasing back past the first column cancels the search command.\n.PP\n.IP \\fIi\\|\\fPn\nsearch for the \\fIi\\|\\fP-th occurrence of the last regular expression entered.\n.PP\n.IP !command\ninvoke a shell with \\fIcommand\\|\\fP. \nThe character `!' in \"command\" are replaced with the\nprevious shell command.  The sequence \"\\\\!\" is replaced by \"!\".\n.PP\n.IP \":q or :Q\"\nquit reading the current file; go on to the next (if any)\n(same as q or Q).\n.PP\n.IP .\n(dot) repeat the previous command.\n.PP\nThe commands take effect immediately, i.e., it is not necessary to\ntype a carriage return.\nUp to the time when the command character itself is given,\nthe user may hit the line kill character to cancel the numerical\nargument being formed.\nIn addition, the user may hit the erase character to redisplay the\n--More-- message.\n.PP\nAt any time when output is being sent to the terminal, the user can\nhit the quit key (normally control\\-\\\\).\n.I Bzmore\nwill stop sending output, and will display the usual --More--\nprompt.\nThe user may then enter one of the above commands in the normal manner.\nUnfortunately, some output is lost when this is done, due to the\nfact that any characters waiting in the terminal's output queue\nare flushed when the quit signal occurs.\n.PP\nThe terminal is set to\n.I noecho\nmode by this program so that the output can be continuous.\nWhat you type will thus not show on your terminal, except for the / and !\ncommands.\n.PP\nIf the standard output is not a teletype, then\n.I bzmore\nacts just like\n.I bzcat,\nexcept that a header is printed before each file.\n.SH FILES\n.DT\n/etc/termcap\t\tTerminal data base\n.SH \"SEE ALSO\"\nmore(1), less(1), bzip2(1), bzdiff(1), bzgrep(1)\n"
  },
  {
    "path": "external/bzip2/compress.c",
    "content": "\n/*-------------------------------------------------------------*/\n/*--- Compression machinery (not incl block sorting)        ---*/\n/*---                                            compress.c ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   Please read the WARNING, DISCLAIMER and PATENTS sections in the \n   README file.\n\n   This program is released under the terms of the license contained\n   in the file LICENSE.\n   ------------------------------------------------------------------ */\n\n\n/* CHANGES\n    0.9.0    -- original version.\n    0.9.0a/b -- no changes in this file.\n    0.9.0c   -- changed setting of nGroups in sendMTFValues() \n                so as to do a bit better on small files\n*/\n\n#include \"bzlib_private.h\"\n\n\n/*---------------------------------------------------*/\n/*--- Bit stream I/O                              ---*/\n/*---------------------------------------------------*/\n\n/*---------------------------------------------------*/\nvoid BZ2_bsInitWrite ( EState* s )\n{\n   s->bsLive = 0;\n   s->bsBuff = 0;\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid bsFinishWrite ( EState* s )\n{\n   while (s->bsLive > 0) {\n      s->zbits[s->numZ] = (UChar)(s->bsBuff >> 24);\n      s->numZ++;\n      s->bsBuff <<= 8;\n      s->bsLive -= 8;\n   }\n}\n\n\n/*---------------------------------------------------*/\n#define bsNEEDW(nz)                           \\\n{                                             \\\n   while (s->bsLive >= 8) {                   \\\n      s->zbits[s->numZ]                       \\\n         = (UChar)(s->bsBuff >> 24);          \\\n      s->numZ++;                              \\\n      s->bsBuff <<= 8;                        \\\n      s->bsLive -= 8;                         \\\n   }                                          \\\n}\n\n\n/*---------------------------------------------------*/\nstatic\n__inline__\nvoid bsW ( EState* s, Int32 n, UInt32 v )\n{\n   bsNEEDW ( n );\n   s->bsBuff |= (v << (32 - s->bsLive - n));\n   s->bsLive += n;\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid bsPutUInt32 ( EState* s, UInt32 u )\n{\n   bsW ( s, 8, (u >> 24) & 0xffL );\n   bsW ( s, 8, (u >> 16) & 0xffL );\n   bsW ( s, 8, (u >>  8) & 0xffL );\n   bsW ( s, 8,  u        & 0xffL );\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid bsPutUChar ( EState* s, UChar c )\n{\n   bsW( s, 8, (UInt32)c );\n}\n\n\n/*---------------------------------------------------*/\n/*--- The back end proper                         ---*/\n/*---------------------------------------------------*/\n\n/*---------------------------------------------------*/\nstatic\nvoid makeMaps_e ( EState* s )\n{\n   Int32 i;\n   s->nInUse = 0;\n   for (i = 0; i < 256; i++)\n      if (s->inUse[i]) {\n         s->unseqToSeq[i] = s->nInUse;\n         s->nInUse++;\n      }\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid generateMTFValues ( EState* s )\n{\n   UChar   yy[256];\n   Int32   i, j;\n   Int32   zPend;\n   Int32   wr;\n   Int32   EOB;\n\n   /* \n      After sorting (eg, here),\n         s->arr1 [ 0 .. s->nblock-1 ] holds sorted order,\n         and\n         ((UChar*)s->arr2) [ 0 .. s->nblock-1 ] \n         holds the original block data.\n\n      The first thing to do is generate the MTF values,\n      and put them in\n         ((UInt16*)s->arr1) [ 0 .. s->nblock-1 ].\n      Because there are strictly fewer or equal MTF values\n      than block values, ptr values in this area are overwritten\n      with MTF values only when they are no longer needed.\n\n      The final compressed bitstream is generated into the\n      area starting at\n         (UChar*) (&((UChar*)s->arr2)[s->nblock])\n\n      These storage aliases are set up in bzCompressInit(),\n      except for the last one, which is arranged in \n      compressBlock().\n   */\n   UInt32* ptr   = s->ptr;\n   UChar* block  = s->block;\n   UInt16* mtfv  = s->mtfv;\n\n   makeMaps_e ( s );\n   EOB = s->nInUse+1;\n\n   for (i = 0; i <= EOB; i++) s->mtfFreq[i] = 0;\n\n   wr = 0;\n   zPend = 0;\n   for (i = 0; i < s->nInUse; i++) yy[i] = (UChar) i;\n\n   for (i = 0; i < s->nblock; i++) {\n      UChar ll_i;\n      AssertD ( wr <= i, \"generateMTFValues(1)\" );\n      j = ptr[i]-1; if (j < 0) j += s->nblock;\n      ll_i = s->unseqToSeq[block[j]];\n      AssertD ( ll_i < s->nInUse, \"generateMTFValues(2a)\" );\n\n      if (yy[0] == ll_i) { \n         zPend++;\n      } else {\n\n         if (zPend > 0) {\n            zPend--;\n            while (True) {\n               if (zPend & 1) {\n                  mtfv[wr] = BZ_RUNB; wr++; \n                  s->mtfFreq[BZ_RUNB]++; \n               } else {\n                  mtfv[wr] = BZ_RUNA; wr++; \n                  s->mtfFreq[BZ_RUNA]++; \n               }\n               if (zPend < 2) break;\n               zPend = (zPend - 2) / 2;\n            };\n            zPend = 0;\n         }\n         {\n            register UChar  rtmp;\n            register UChar* ryy_j;\n            register UChar  rll_i;\n            rtmp  = yy[1];\n            yy[1] = yy[0];\n            ryy_j = &(yy[1]);\n            rll_i = ll_i;\n            while ( rll_i != rtmp ) {\n               register UChar rtmp2;\n               ryy_j++;\n               rtmp2  = rtmp;\n               rtmp   = *ryy_j;\n               *ryy_j = rtmp2;\n            };\n            yy[0] = rtmp;\n            j = ryy_j - &(yy[0]);\n            mtfv[wr] = j+1; wr++; s->mtfFreq[j+1]++;\n         }\n\n      }\n   }\n\n   if (zPend > 0) {\n      zPend--;\n      while (True) {\n         if (zPend & 1) {\n            mtfv[wr] = BZ_RUNB; wr++; \n            s->mtfFreq[BZ_RUNB]++; \n         } else {\n            mtfv[wr] = BZ_RUNA; wr++; \n            s->mtfFreq[BZ_RUNA]++; \n         }\n         if (zPend < 2) break;\n         zPend = (zPend - 2) / 2;\n      };\n      zPend = 0;\n   }\n\n   mtfv[wr] = EOB; wr++; s->mtfFreq[EOB]++;\n\n   s->nMTF = wr;\n}\n\n\n/*---------------------------------------------------*/\n#define BZ_LESSER_ICOST  0\n#define BZ_GREATER_ICOST 15\n\nstatic\nvoid sendMTFValues ( EState* s )\n{\n   Int32 v, t, i, j, gs, ge, totc, bt, bc, iter;\n   Int32 nSelectors, alphaSize, minLen, maxLen, selCtr;\n   Int32 nGroups, nBytes;\n\n   /*--\n   UChar  len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n   is a global since the decoder also needs it.\n\n   Int32  code[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n   Int32  rfreq[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n   are also globals only used in this proc.\n   Made global to keep stack frame size small.\n   --*/\n\n\n   UInt16 cost[BZ_N_GROUPS];\n   Int32  fave[BZ_N_GROUPS];\n\n   UInt16* mtfv = s->mtfv;\n\n   if (s->verbosity >= 3)\n      VPrintf3( \"      %d in block, %d after MTF & 1-2 coding, \"\n                \"%d+2 syms in use\\n\", \n                s->nblock, s->nMTF, s->nInUse );\n\n   alphaSize = s->nInUse+2;\n   for (t = 0; t < BZ_N_GROUPS; t++)\n      for (v = 0; v < alphaSize; v++)\n         s->len[t][v] = BZ_GREATER_ICOST;\n\n   /*--- Decide how many coding tables to use ---*/\n   AssertH ( s->nMTF > 0, 3001 );\n   if (s->nMTF < 200)  nGroups = 2; else\n   if (s->nMTF < 600)  nGroups = 3; else\n   if (s->nMTF < 1200) nGroups = 4; else\n   if (s->nMTF < 2400) nGroups = 5; else\n                       nGroups = 6;\n\n   /*--- Generate an initial set of coding tables ---*/\n   { \n      Int32 nPart, remF, tFreq, aFreq;\n\n      nPart = nGroups;\n      remF  = s->nMTF;\n      gs = 0;\n      while (nPart > 0) {\n         tFreq = remF / nPart;\n         ge = gs-1;\n         aFreq = 0;\n         while (aFreq < tFreq && ge < alphaSize-1) {\n            ge++;\n            aFreq += s->mtfFreq[ge];\n         }\n\n         if (ge > gs \n             && nPart != nGroups && nPart != 1 \n             && ((nGroups-nPart) % 2 == 1)) {\n            aFreq -= s->mtfFreq[ge];\n            ge--;\n         }\n\n         if (s->verbosity >= 3)\n            VPrintf5( \"      initial group %d, [%d .. %d], \"\n                      \"has %d syms (%4.1f%%)\\n\",\n                      nPart, gs, ge, aFreq, \n                      (100.0 * (float)aFreq) / (float)(s->nMTF) );\n \n         for (v = 0; v < alphaSize; v++)\n            if (v >= gs && v <= ge) \n               s->len[nPart-1][v] = BZ_LESSER_ICOST; else\n               s->len[nPart-1][v] = BZ_GREATER_ICOST;\n \n         nPart--;\n         gs = ge+1;\n         remF -= aFreq;\n      }\n   }\n\n   /*--- \n      Iterate up to BZ_N_ITERS times to improve the tables.\n   ---*/\n   for (iter = 0; iter < BZ_N_ITERS; iter++) {\n\n      for (t = 0; t < nGroups; t++) fave[t] = 0;\n\n      for (t = 0; t < nGroups; t++)\n         for (v = 0; v < alphaSize; v++)\n            s->rfreq[t][v] = 0;\n\n      /*---\n        Set up an auxiliary length table which is used to fast-track\n\tthe common case (nGroups == 6). \n      ---*/\n      if (nGroups == 6) {\n         for (v = 0; v < alphaSize; v++) {\n            s->len_pack[v][0] = (s->len[1][v] << 16) | s->len[0][v];\n            s->len_pack[v][1] = (s->len[3][v] << 16) | s->len[2][v];\n            s->len_pack[v][2] = (s->len[5][v] << 16) | s->len[4][v];\n\t }\n      }\n\n      nSelectors = 0;\n      totc = 0;\n      gs = 0;\n      while (True) {\n\n         /*--- Set group start & end marks. --*/\n         if (gs >= s->nMTF) break;\n         ge = gs + BZ_G_SIZE - 1; \n         if (ge >= s->nMTF) ge = s->nMTF-1;\n\n         /*-- \n            Calculate the cost of this group as coded\n            by each of the coding tables.\n         --*/\n         for (t = 0; t < nGroups; t++) cost[t] = 0;\n\n         if (nGroups == 6 && 50 == ge-gs+1) {\n            /*--- fast track the common case ---*/\n            register UInt32 cost01, cost23, cost45;\n            register UInt16 icv;\n            cost01 = cost23 = cost45 = 0;\n\n#           define BZ_ITER(nn)                \\\n               icv = mtfv[gs+(nn)];           \\\n               cost01 += s->len_pack[icv][0]; \\\n               cost23 += s->len_pack[icv][1]; \\\n               cost45 += s->len_pack[icv][2]; \\\n\n            BZ_ITER(0);  BZ_ITER(1);  BZ_ITER(2);  BZ_ITER(3);  BZ_ITER(4);\n            BZ_ITER(5);  BZ_ITER(6);  BZ_ITER(7);  BZ_ITER(8);  BZ_ITER(9);\n            BZ_ITER(10); BZ_ITER(11); BZ_ITER(12); BZ_ITER(13); BZ_ITER(14);\n            BZ_ITER(15); BZ_ITER(16); BZ_ITER(17); BZ_ITER(18); BZ_ITER(19);\n            BZ_ITER(20); BZ_ITER(21); BZ_ITER(22); BZ_ITER(23); BZ_ITER(24);\n            BZ_ITER(25); BZ_ITER(26); BZ_ITER(27); BZ_ITER(28); BZ_ITER(29);\n            BZ_ITER(30); BZ_ITER(31); BZ_ITER(32); BZ_ITER(33); BZ_ITER(34);\n            BZ_ITER(35); BZ_ITER(36); BZ_ITER(37); BZ_ITER(38); BZ_ITER(39);\n            BZ_ITER(40); BZ_ITER(41); BZ_ITER(42); BZ_ITER(43); BZ_ITER(44);\n            BZ_ITER(45); BZ_ITER(46); BZ_ITER(47); BZ_ITER(48); BZ_ITER(49);\n\n#           undef BZ_ITER\n\n            cost[0] = cost01 & 0xffff; cost[1] = cost01 >> 16;\n            cost[2] = cost23 & 0xffff; cost[3] = cost23 >> 16;\n            cost[4] = cost45 & 0xffff; cost[5] = cost45 >> 16;\n\n         } else {\n\t    /*--- slow version which correctly handles all situations ---*/\n            for (i = gs; i <= ge; i++) { \n               UInt16 icv = mtfv[i];\n               for (t = 0; t < nGroups; t++) cost[t] += s->len[t][icv];\n            }\n         }\n \n         /*-- \n            Find the coding table which is best for this group,\n            and record its identity in the selector table.\n         --*/\n         bc = 999999999; bt = -1;\n         for (t = 0; t < nGroups; t++)\n            if (cost[t] < bc) { bc = cost[t]; bt = t; };\n         totc += bc;\n         fave[bt]++;\n         s->selector[nSelectors] = bt;\n         nSelectors++;\n\n         /*-- \n            Increment the symbol frequencies for the selected table.\n          --*/\n         if (nGroups == 6 && 50 == ge-gs+1) {\n            /*--- fast track the common case ---*/\n\n#           define BZ_ITUR(nn) s->rfreq[bt][ mtfv[gs+(nn)] ]++\n\n            BZ_ITUR(0);  BZ_ITUR(1);  BZ_ITUR(2);  BZ_ITUR(3);  BZ_ITUR(4);\n            BZ_ITUR(5);  BZ_ITUR(6);  BZ_ITUR(7);  BZ_ITUR(8);  BZ_ITUR(9);\n            BZ_ITUR(10); BZ_ITUR(11); BZ_ITUR(12); BZ_ITUR(13); BZ_ITUR(14);\n            BZ_ITUR(15); BZ_ITUR(16); BZ_ITUR(17); BZ_ITUR(18); BZ_ITUR(19);\n            BZ_ITUR(20); BZ_ITUR(21); BZ_ITUR(22); BZ_ITUR(23); BZ_ITUR(24);\n            BZ_ITUR(25); BZ_ITUR(26); BZ_ITUR(27); BZ_ITUR(28); BZ_ITUR(29);\n            BZ_ITUR(30); BZ_ITUR(31); BZ_ITUR(32); BZ_ITUR(33); BZ_ITUR(34);\n            BZ_ITUR(35); BZ_ITUR(36); BZ_ITUR(37); BZ_ITUR(38); BZ_ITUR(39);\n            BZ_ITUR(40); BZ_ITUR(41); BZ_ITUR(42); BZ_ITUR(43); BZ_ITUR(44);\n            BZ_ITUR(45); BZ_ITUR(46); BZ_ITUR(47); BZ_ITUR(48); BZ_ITUR(49);\n\n#           undef BZ_ITUR\n\n         } else {\n\t    /*--- slow version which correctly handles all situations ---*/\n            for (i = gs; i <= ge; i++)\n               s->rfreq[bt][ mtfv[i] ]++;\n         }\n\n         gs = ge+1;\n      }\n      if (s->verbosity >= 3) {\n         VPrintf2 ( \"      pass %d: size is %d, grp uses are \", \n                   iter+1, totc/8 );\n         for (t = 0; t < nGroups; t++)\n            VPrintf1 ( \"%d \", fave[t] );\n         VPrintf0 ( \"\\n\" );\n      }\n\n      /*--\n        Recompute the tables based on the accumulated frequencies.\n      --*/\n      /* maxLen was changed from 20 to 17 in bzip2-1.0.3.  See \n         comment in huffman.c for details. */\n      for (t = 0; t < nGroups; t++)\n         BZ2_hbMakeCodeLengths ( &(s->len[t][0]), &(s->rfreq[t][0]), \n                                 alphaSize, 17 /*20*/ );\n   }\n\n\n   AssertH( nGroups < 8, 3002 );\n   AssertH( nSelectors < 32768 &&\n            nSelectors <= (2 + (900000 / BZ_G_SIZE)),\n            3003 );\n\n\n   /*--- Compute MTF values for the selectors. ---*/\n   {\n      UChar pos[BZ_N_GROUPS], ll_i, tmp2, tmp;\n      for (i = 0; i < nGroups; i++) pos[i] = i;\n      for (i = 0; i < nSelectors; i++) {\n         ll_i = s->selector[i];\n         j = 0;\n         tmp = pos[j];\n         while ( ll_i != tmp ) {\n            j++;\n            tmp2 = tmp;\n            tmp = pos[j];\n            pos[j] = tmp2;\n         };\n         pos[0] = tmp;\n         s->selectorMtf[i] = j;\n      }\n   };\n\n   /*--- Assign actual codes for the tables. --*/\n   for (t = 0; t < nGroups; t++) {\n      minLen = 32;\n      maxLen = 0;\n      for (i = 0; i < alphaSize; i++) {\n         if (s->len[t][i] > maxLen) maxLen = s->len[t][i];\n         if (s->len[t][i] < minLen) minLen = s->len[t][i];\n      }\n      AssertH ( !(maxLen > 17 /*20*/ ), 3004 );\n      AssertH ( !(minLen < 1),  3005 );\n      BZ2_hbAssignCodes ( &(s->code[t][0]), &(s->len[t][0]), \n                          minLen, maxLen, alphaSize );\n   }\n\n   /*--- Transmit the mapping table. ---*/\n   { \n      Bool inUse16[16];\n      for (i = 0; i < 16; i++) {\n          inUse16[i] = False;\n          for (j = 0; j < 16; j++)\n             if (s->inUse[i * 16 + j]) inUse16[i] = True;\n      }\n     \n      nBytes = s->numZ;\n      for (i = 0; i < 16; i++)\n         if (inUse16[i]) bsW(s,1,1); else bsW(s,1,0);\n\n      for (i = 0; i < 16; i++)\n         if (inUse16[i])\n            for (j = 0; j < 16; j++) {\n               if (s->inUse[i * 16 + j]) bsW(s,1,1); else bsW(s,1,0);\n            }\n\n      if (s->verbosity >= 3) \n         VPrintf1( \"      bytes: mapping %d, \", s->numZ-nBytes );\n   }\n\n   /*--- Now the selectors. ---*/\n   nBytes = s->numZ;\n   bsW ( s, 3, nGroups );\n   bsW ( s, 15, nSelectors );\n   for (i = 0; i < nSelectors; i++) { \n      for (j = 0; j < s->selectorMtf[i]; j++) bsW(s,1,1);\n      bsW(s,1,0);\n   }\n   if (s->verbosity >= 3)\n      VPrintf1( \"selectors %d, \", s->numZ-nBytes );\n\n   /*--- Now the coding tables. ---*/\n   nBytes = s->numZ;\n\n   for (t = 0; t < nGroups; t++) {\n      Int32 curr = s->len[t][0];\n      bsW ( s, 5, curr );\n      for (i = 0; i < alphaSize; i++) {\n         while (curr < s->len[t][i]) { bsW(s,2,2); curr++; /* 10 */ };\n         while (curr > s->len[t][i]) { bsW(s,2,3); curr--; /* 11 */ };\n         bsW ( s, 1, 0 );\n      }\n   }\n\n   if (s->verbosity >= 3)\n      VPrintf1 ( \"code lengths %d, \", s->numZ-nBytes );\n\n   /*--- And finally, the block data proper ---*/\n   nBytes = s->numZ;\n   selCtr = 0;\n   gs = 0;\n   while (True) {\n      if (gs >= s->nMTF) break;\n      ge = gs + BZ_G_SIZE - 1; \n      if (ge >= s->nMTF) ge = s->nMTF-1;\n      AssertH ( s->selector[selCtr] < nGroups, 3006 );\n\n      if (nGroups == 6 && 50 == ge-gs+1) {\n            /*--- fast track the common case ---*/\n            UInt16 mtfv_i;\n            UChar* s_len_sel_selCtr \n               = &(s->len[s->selector[selCtr]][0]);\n            Int32* s_code_sel_selCtr\n               = &(s->code[s->selector[selCtr]][0]);\n\n#           define BZ_ITAH(nn)                      \\\n               mtfv_i = mtfv[gs+(nn)];              \\\n               bsW ( s,                             \\\n                     s_len_sel_selCtr[mtfv_i],      \\\n                     s_code_sel_selCtr[mtfv_i] )\n\n            BZ_ITAH(0);  BZ_ITAH(1);  BZ_ITAH(2);  BZ_ITAH(3);  BZ_ITAH(4);\n            BZ_ITAH(5);  BZ_ITAH(6);  BZ_ITAH(7);  BZ_ITAH(8);  BZ_ITAH(9);\n            BZ_ITAH(10); BZ_ITAH(11); BZ_ITAH(12); BZ_ITAH(13); BZ_ITAH(14);\n            BZ_ITAH(15); BZ_ITAH(16); BZ_ITAH(17); BZ_ITAH(18); BZ_ITAH(19);\n            BZ_ITAH(20); BZ_ITAH(21); BZ_ITAH(22); BZ_ITAH(23); BZ_ITAH(24);\n            BZ_ITAH(25); BZ_ITAH(26); BZ_ITAH(27); BZ_ITAH(28); BZ_ITAH(29);\n            BZ_ITAH(30); BZ_ITAH(31); BZ_ITAH(32); BZ_ITAH(33); BZ_ITAH(34);\n            BZ_ITAH(35); BZ_ITAH(36); BZ_ITAH(37); BZ_ITAH(38); BZ_ITAH(39);\n            BZ_ITAH(40); BZ_ITAH(41); BZ_ITAH(42); BZ_ITAH(43); BZ_ITAH(44);\n            BZ_ITAH(45); BZ_ITAH(46); BZ_ITAH(47); BZ_ITAH(48); BZ_ITAH(49);\n\n#           undef BZ_ITAH\n\n      } else {\n\t /*--- slow version which correctly handles all situations ---*/\n         for (i = gs; i <= ge; i++) {\n            bsW ( s, \n                  s->len  [s->selector[selCtr]] [mtfv[i]],\n                  s->code [s->selector[selCtr]] [mtfv[i]] );\n         }\n      }\n\n\n      gs = ge+1;\n      selCtr++;\n   }\n   AssertH( selCtr == nSelectors, 3007 );\n\n   if (s->verbosity >= 3)\n      VPrintf1( \"codes %d\\n\", s->numZ-nBytes );\n}\n\n\n/*---------------------------------------------------*/\nvoid BZ2_compressBlock ( EState* s, Bool is_last_block )\n{\n   if (s->nblock > 0) {\n\n      BZ_FINALISE_CRC ( s->blockCRC );\n      s->combinedCRC = (s->combinedCRC << 1) | (s->combinedCRC >> 31);\n      s->combinedCRC ^= s->blockCRC;\n      if (s->blockNo > 1) s->numZ = 0;\n\n      if (s->verbosity >= 2)\n         VPrintf4( \"    block %d: crc = 0x%08x, \"\n                   \"combined CRC = 0x%08x, size = %d\\n\",\n                   s->blockNo, s->blockCRC, s->combinedCRC, s->nblock );\n\n      BZ2_blockSort ( s );\n   }\n\n   s->zbits = (UChar*) (&((UChar*)s->arr2)[s->nblock]);\n\n   /*-- If this is the first block, create the stream header. --*/\n   if (s->blockNo == 1) {\n      BZ2_bsInitWrite ( s );\n      bsPutUChar ( s, BZ_HDR_B );\n      bsPutUChar ( s, BZ_HDR_Z );\n      bsPutUChar ( s, BZ_HDR_h );\n      bsPutUChar ( s, (UChar)(BZ_HDR_0 + s->blockSize100k) );\n   }\n\n   if (s->nblock > 0) {\n\n      bsPutUChar ( s, 0x31 ); bsPutUChar ( s, 0x41 );\n      bsPutUChar ( s, 0x59 ); bsPutUChar ( s, 0x26 );\n      bsPutUChar ( s, 0x53 ); bsPutUChar ( s, 0x59 );\n\n      /*-- Now the block's CRC, so it is in a known place. --*/\n      bsPutUInt32 ( s, s->blockCRC );\n\n      /*-- \n         Now a single bit indicating (non-)randomisation. \n         As of version 0.9.5, we use a better sorting algorithm\n         which makes randomisation unnecessary.  So always set\n         the randomised bit to 'no'.  Of course, the decoder\n         still needs to be able to handle randomised blocks\n         so as to maintain backwards compatibility with\n         older versions of bzip2.\n      --*/\n      bsW(s,1,0);\n\n      bsW ( s, 24, s->origPtr );\n      generateMTFValues ( s );\n      sendMTFValues ( s );\n   }\n\n\n   /*-- If this is the last block, add the stream trailer. --*/\n   if (is_last_block) {\n\n      bsPutUChar ( s, 0x17 ); bsPutUChar ( s, 0x72 );\n      bsPutUChar ( s, 0x45 ); bsPutUChar ( s, 0x38 );\n      bsPutUChar ( s, 0x50 ); bsPutUChar ( s, 0x90 );\n      bsPutUInt32 ( s, s->combinedCRC );\n      if (s->verbosity >= 2)\n         VPrintf1( \"    final combined CRC = 0x%08x\\n   \", s->combinedCRC );\n      bsFinishWrite ( s );\n   }\n}\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                        compress.c ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "external/bzip2/crctable.c",
    "content": "\n/*-------------------------------------------------------------*/\n/*--- Table for doing CRCs                                  ---*/\n/*---                                            crctable.c ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   Please read the WARNING, DISCLAIMER and PATENTS sections in the \n   README file.\n\n   This program is released under the terms of the license contained\n   in the file LICENSE.\n   ------------------------------------------------------------------ */\n\n\n#include \"bzlib_private.h\"\n\n/*--\n  I think this is an implementation of the AUTODIN-II,\n  Ethernet & FDDI 32-bit CRC standard.  Vaguely derived\n  from code by Rob Warnock, in Section 51 of the\n  comp.compression FAQ.\n--*/\n\nUInt32 BZ2_crc32Table[256] = {\n\n   /*-- Ugly, innit? --*/\n\n   0x00000000L, 0x04c11db7L, 0x09823b6eL, 0x0d4326d9L,\n   0x130476dcL, 0x17c56b6bL, 0x1a864db2L, 0x1e475005L,\n   0x2608edb8L, 0x22c9f00fL, 0x2f8ad6d6L, 0x2b4bcb61L,\n   0x350c9b64L, 0x31cd86d3L, 0x3c8ea00aL, 0x384fbdbdL,\n   0x4c11db70L, 0x48d0c6c7L, 0x4593e01eL, 0x4152fda9L,\n   0x5f15adacL, 0x5bd4b01bL, 0x569796c2L, 0x52568b75L,\n   0x6a1936c8L, 0x6ed82b7fL, 0x639b0da6L, 0x675a1011L,\n   0x791d4014L, 0x7ddc5da3L, 0x709f7b7aL, 0x745e66cdL,\n   0x9823b6e0L, 0x9ce2ab57L, 0x91a18d8eL, 0x95609039L,\n   0x8b27c03cL, 0x8fe6dd8bL, 0x82a5fb52L, 0x8664e6e5L,\n   0xbe2b5b58L, 0xbaea46efL, 0xb7a96036L, 0xb3687d81L,\n   0xad2f2d84L, 0xa9ee3033L, 0xa4ad16eaL, 0xa06c0b5dL,\n   0xd4326d90L, 0xd0f37027L, 0xddb056feL, 0xd9714b49L,\n   0xc7361b4cL, 0xc3f706fbL, 0xceb42022L, 0xca753d95L,\n   0xf23a8028L, 0xf6fb9d9fL, 0xfbb8bb46L, 0xff79a6f1L,\n   0xe13ef6f4L, 0xe5ffeb43L, 0xe8bccd9aL, 0xec7dd02dL,\n   0x34867077L, 0x30476dc0L, 0x3d044b19L, 0x39c556aeL,\n   0x278206abL, 0x23431b1cL, 0x2e003dc5L, 0x2ac12072L,\n   0x128e9dcfL, 0x164f8078L, 0x1b0ca6a1L, 0x1fcdbb16L,\n   0x018aeb13L, 0x054bf6a4L, 0x0808d07dL, 0x0cc9cdcaL,\n   0x7897ab07L, 0x7c56b6b0L, 0x71159069L, 0x75d48ddeL,\n   0x6b93dddbL, 0x6f52c06cL, 0x6211e6b5L, 0x66d0fb02L,\n   0x5e9f46bfL, 0x5a5e5b08L, 0x571d7dd1L, 0x53dc6066L,\n   0x4d9b3063L, 0x495a2dd4L, 0x44190b0dL, 0x40d816baL,\n   0xaca5c697L, 0xa864db20L, 0xa527fdf9L, 0xa1e6e04eL,\n   0xbfa1b04bL, 0xbb60adfcL, 0xb6238b25L, 0xb2e29692L,\n   0x8aad2b2fL, 0x8e6c3698L, 0x832f1041L, 0x87ee0df6L,\n   0x99a95df3L, 0x9d684044L, 0x902b669dL, 0x94ea7b2aL,\n   0xe0b41de7L, 0xe4750050L, 0xe9362689L, 0xedf73b3eL,\n   0xf3b06b3bL, 0xf771768cL, 0xfa325055L, 0xfef34de2L,\n   0xc6bcf05fL, 0xc27dede8L, 0xcf3ecb31L, 0xcbffd686L,\n   0xd5b88683L, 0xd1799b34L, 0xdc3abdedL, 0xd8fba05aL,\n   0x690ce0eeL, 0x6dcdfd59L, 0x608edb80L, 0x644fc637L,\n   0x7a089632L, 0x7ec98b85L, 0x738aad5cL, 0x774bb0ebL,\n   0x4f040d56L, 0x4bc510e1L, 0x46863638L, 0x42472b8fL,\n   0x5c007b8aL, 0x58c1663dL, 0x558240e4L, 0x51435d53L,\n   0x251d3b9eL, 0x21dc2629L, 0x2c9f00f0L, 0x285e1d47L,\n   0x36194d42L, 0x32d850f5L, 0x3f9b762cL, 0x3b5a6b9bL,\n   0x0315d626L, 0x07d4cb91L, 0x0a97ed48L, 0x0e56f0ffL,\n   0x1011a0faL, 0x14d0bd4dL, 0x19939b94L, 0x1d528623L,\n   0xf12f560eL, 0xf5ee4bb9L, 0xf8ad6d60L, 0xfc6c70d7L,\n   0xe22b20d2L, 0xe6ea3d65L, 0xeba91bbcL, 0xef68060bL,\n   0xd727bbb6L, 0xd3e6a601L, 0xdea580d8L, 0xda649d6fL,\n   0xc423cd6aL, 0xc0e2d0ddL, 0xcda1f604L, 0xc960ebb3L,\n   0xbd3e8d7eL, 0xb9ff90c9L, 0xb4bcb610L, 0xb07daba7L,\n   0xae3afba2L, 0xaafbe615L, 0xa7b8c0ccL, 0xa379dd7bL,\n   0x9b3660c6L, 0x9ff77d71L, 0x92b45ba8L, 0x9675461fL,\n   0x8832161aL, 0x8cf30badL, 0x81b02d74L, 0x857130c3L,\n   0x5d8a9099L, 0x594b8d2eL, 0x5408abf7L, 0x50c9b640L,\n   0x4e8ee645L, 0x4a4ffbf2L, 0x470cdd2bL, 0x43cdc09cL,\n   0x7b827d21L, 0x7f436096L, 0x7200464fL, 0x76c15bf8L,\n   0x68860bfdL, 0x6c47164aL, 0x61043093L, 0x65c52d24L,\n   0x119b4be9L, 0x155a565eL, 0x18197087L, 0x1cd86d30L,\n   0x029f3d35L, 0x065e2082L, 0x0b1d065bL, 0x0fdc1becL,\n   0x3793a651L, 0x3352bbe6L, 0x3e119d3fL, 0x3ad08088L,\n   0x2497d08dL, 0x2056cd3aL, 0x2d15ebe3L, 0x29d4f654L,\n   0xc5a92679L, 0xc1683bceL, 0xcc2b1d17L, 0xc8ea00a0L,\n   0xd6ad50a5L, 0xd26c4d12L, 0xdf2f6bcbL, 0xdbee767cL,\n   0xe3a1cbc1L, 0xe760d676L, 0xea23f0afL, 0xeee2ed18L,\n   0xf0a5bd1dL, 0xf464a0aaL, 0xf9278673L, 0xfde69bc4L,\n   0x89b8fd09L, 0x8d79e0beL, 0x803ac667L, 0x84fbdbd0L,\n   0x9abc8bd5L, 0x9e7d9662L, 0x933eb0bbL, 0x97ffad0cL,\n   0xafb010b1L, 0xab710d06L, 0xa6322bdfL, 0xa2f33668L,\n   0xbcb4666dL, 0xb8757bdaL, 0xb5365d03L, 0xb1f740b4L\n};\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                        crctable.c ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "external/bzip2/decompress.c",
    "content": "\n/*-------------------------------------------------------------*/\n/*--- Decompression machinery                               ---*/\n/*---                                          decompress.c ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   Please read the WARNING, DISCLAIMER and PATENTS sections in the \n   README file.\n\n   This program is released under the terms of the license contained\n   in the file LICENSE.\n   ------------------------------------------------------------------ */\n\n\n#include \"bzlib_private.h\"\n\n\n/*---------------------------------------------------*/\nstatic\nvoid makeMaps_d ( DState* s )\n{\n   Int32 i;\n   s->nInUse = 0;\n   for (i = 0; i < 256; i++)\n      if (s->inUse[i]) {\n         s->seqToUnseq[s->nInUse] = i;\n         s->nInUse++;\n      }\n}\n\n\n/*---------------------------------------------------*/\n#define RETURN(rrr)                               \\\n   { retVal = rrr; goto save_state_and_return; };\n\n#define GET_BITS(lll,vvv,nnn)                     \\\n   case lll: s->state = lll;                      \\\n   while (True) {                                 \\\n      if (s->bsLive >= nnn) {                     \\\n         UInt32 v;                                \\\n         v = (s->bsBuff >>                        \\\n             (s->bsLive-nnn)) & ((1 << nnn)-1);   \\\n         s->bsLive -= nnn;                        \\\n         vvv = v;                                 \\\n         break;                                   \\\n      }                                           \\\n      if (s->strm->avail_in == 0) RETURN(BZ_OK);  \\\n      s->bsBuff                                   \\\n         = (s->bsBuff << 8) |                     \\\n           ((UInt32)                              \\\n              (*((UChar*)(s->strm->next_in))));   \\\n      s->bsLive += 8;                             \\\n      s->strm->next_in++;                         \\\n      s->strm->avail_in--;                        \\\n      s->strm->total_in_lo32++;                   \\\n      if (s->strm->total_in_lo32 == 0)            \\\n         s->strm->total_in_hi32++;                \\\n   }\n\n#define GET_UCHAR(lll,uuu)                        \\\n   GET_BITS(lll,uuu,8)\n\n#define GET_BIT(lll,uuu)                          \\\n   GET_BITS(lll,uuu,1)\n\n/*---------------------------------------------------*/\n#define GET_MTF_VAL(label1,label2,lval)           \\\n{                                                 \\\n   if (groupPos == 0) {                           \\\n      groupNo++;                                  \\\n      if (groupNo >= nSelectors)                  \\\n         RETURN(BZ_DATA_ERROR);                   \\\n      groupPos = BZ_G_SIZE;                       \\\n      gSel = s->selector[groupNo];                \\\n      gMinlen = s->minLens[gSel];                 \\\n      gLimit = &(s->limit[gSel][0]);              \\\n      gPerm = &(s->perm[gSel][0]);                \\\n      gBase = &(s->base[gSel][0]);                \\\n   }                                              \\\n   groupPos--;                                    \\\n   zn = gMinlen;                                  \\\n   GET_BITS(label1, zvec, zn);                    \\\n   while (1) {                                    \\\n      if (zn > 20 /* the longest code */)         \\\n         RETURN(BZ_DATA_ERROR);                   \\\n      if (zvec <= gLimit[zn]) break;              \\\n      zn++;                                       \\\n      GET_BIT(label2, zj);                        \\\n      zvec = (zvec << 1) | zj;                    \\\n   };                                             \\\n   if (zvec - gBase[zn] < 0                       \\\n       || zvec - gBase[zn] >= BZ_MAX_ALPHA_SIZE)  \\\n      RETURN(BZ_DATA_ERROR);                      \\\n   lval = gPerm[zvec - gBase[zn]];                \\\n}\n\n\n/*---------------------------------------------------*/\nInt32 BZ2_decompress ( DState* s )\n{\n   UChar      uc;\n   Int32      retVal;\n   Int32      minLen, maxLen;\n   bz_stream* strm = s->strm;\n\n   /* stuff that needs to be saved/restored */\n   Int32  i;\n   Int32  j;\n   Int32  t;\n   Int32  alphaSize;\n   Int32  nGroups;\n   Int32  nSelectors;\n   Int32  EOB;\n   Int32  groupNo;\n   Int32  groupPos;\n   Int32  nextSym;\n   Int32  nblockMAX;\n   Int32  nblock;\n   Int32  es;\n   Int32  N;\n   Int32  curr;\n   Int32  zt;\n   Int32  zn; \n   Int32  zvec;\n   Int32  zj;\n   Int32  gSel;\n   Int32  gMinlen;\n   Int32* gLimit;\n   Int32* gBase;\n   Int32* gPerm;\n\n   if (s->state == BZ_X_MAGIC_1) {\n      /*initialise the save area*/\n      s->save_i           = 0;\n      s->save_j           = 0;\n      s->save_t           = 0;\n      s->save_alphaSize   = 0;\n      s->save_nGroups     = 0;\n      s->save_nSelectors  = 0;\n      s->save_EOB         = 0;\n      s->save_groupNo     = 0;\n      s->save_groupPos    = 0;\n      s->save_nextSym     = 0;\n      s->save_nblockMAX   = 0;\n      s->save_nblock      = 0;\n      s->save_es          = 0;\n      s->save_N           = 0;\n      s->save_curr        = 0;\n      s->save_zt          = 0;\n      s->save_zn          = 0;\n      s->save_zvec        = 0;\n      s->save_zj          = 0;\n      s->save_gSel        = 0;\n      s->save_gMinlen     = 0;\n      s->save_gLimit      = NULL;\n      s->save_gBase       = NULL;\n      s->save_gPerm       = NULL;\n   }\n\n   /*restore from the save area*/\n   i           = s->save_i;\n   j           = s->save_j;\n   t           = s->save_t;\n   alphaSize   = s->save_alphaSize;\n   nGroups     = s->save_nGroups;\n   nSelectors  = s->save_nSelectors;\n   EOB         = s->save_EOB;\n   groupNo     = s->save_groupNo;\n   groupPos    = s->save_groupPos;\n   nextSym     = s->save_nextSym;\n   nblockMAX   = s->save_nblockMAX;\n   nblock      = s->save_nblock;\n   es          = s->save_es;\n   N           = s->save_N;\n   curr        = s->save_curr;\n   zt          = s->save_zt;\n   zn          = s->save_zn; \n   zvec        = s->save_zvec;\n   zj          = s->save_zj;\n   gSel        = s->save_gSel;\n   gMinlen     = s->save_gMinlen;\n   gLimit      = s->save_gLimit;\n   gBase       = s->save_gBase;\n   gPerm       = s->save_gPerm;\n\n   retVal = BZ_OK;\n\n   switch (s->state) {\n\n      GET_UCHAR(BZ_X_MAGIC_1, uc);\n      if (uc != BZ_HDR_B) RETURN(BZ_DATA_ERROR_MAGIC);\n\n      GET_UCHAR(BZ_X_MAGIC_2, uc);\n      if (uc != BZ_HDR_Z) RETURN(BZ_DATA_ERROR_MAGIC);\n\n      GET_UCHAR(BZ_X_MAGIC_3, uc)\n      if (uc != BZ_HDR_h) RETURN(BZ_DATA_ERROR_MAGIC);\n\n      GET_BITS(BZ_X_MAGIC_4, s->blockSize100k, 8)\n      if (s->blockSize100k < (BZ_HDR_0 + 1) || \n          s->blockSize100k > (BZ_HDR_0 + 9)) RETURN(BZ_DATA_ERROR_MAGIC);\n      s->blockSize100k -= BZ_HDR_0;\n\n      if (s->smallDecompress) {\n         s->ll16 = BZALLOC( s->blockSize100k * 100000 * sizeof(UInt16) );\n         s->ll4  = BZALLOC( \n                      ((1 + s->blockSize100k * 100000) >> 1) * sizeof(UChar) \n                   );\n         if (s->ll16 == NULL || s->ll4 == NULL) RETURN(BZ_MEM_ERROR);\n      } else {\n         s->tt  = BZALLOC( s->blockSize100k * 100000 * sizeof(Int32) );\n         if (s->tt == NULL) RETURN(BZ_MEM_ERROR);\n      }\n\n      GET_UCHAR(BZ_X_BLKHDR_1, uc);\n\n      if (uc == 0x17) goto endhdr_2;\n      if (uc != 0x31) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_BLKHDR_2, uc);\n      if (uc != 0x41) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_BLKHDR_3, uc);\n      if (uc != 0x59) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_BLKHDR_4, uc);\n      if (uc != 0x26) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_BLKHDR_5, uc);\n      if (uc != 0x53) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_BLKHDR_6, uc);\n      if (uc != 0x59) RETURN(BZ_DATA_ERROR);\n\n      s->currBlockNo++;\n      if (s->verbosity >= 2)\n         VPrintf1 ( \"\\n    [%d: huff+mtf \", s->currBlockNo );\n \n      s->storedBlockCRC = 0;\n      GET_UCHAR(BZ_X_BCRC_1, uc);\n      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);\n      GET_UCHAR(BZ_X_BCRC_2, uc);\n      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);\n      GET_UCHAR(BZ_X_BCRC_3, uc);\n      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);\n      GET_UCHAR(BZ_X_BCRC_4, uc);\n      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);\n\n      GET_BITS(BZ_X_RANDBIT, s->blockRandomised, 1);\n\n      s->origPtr = 0;\n      GET_UCHAR(BZ_X_ORIGPTR_1, uc);\n      s->origPtr = (s->origPtr << 8) | ((Int32)uc);\n      GET_UCHAR(BZ_X_ORIGPTR_2, uc);\n      s->origPtr = (s->origPtr << 8) | ((Int32)uc);\n      GET_UCHAR(BZ_X_ORIGPTR_3, uc);\n      s->origPtr = (s->origPtr << 8) | ((Int32)uc);\n\n      if (s->origPtr < 0)\n         RETURN(BZ_DATA_ERROR);\n      if (s->origPtr > 10 + 100000*s->blockSize100k) \n         RETURN(BZ_DATA_ERROR);\n\n      /*--- Receive the mapping table ---*/\n      for (i = 0; i < 16; i++) {\n         GET_BIT(BZ_X_MAPPING_1, uc);\n         if (uc == 1) \n            s->inUse16[i] = True; else \n            s->inUse16[i] = False;\n      }\n\n      for (i = 0; i < 256; i++) s->inUse[i] = False;\n\n      for (i = 0; i < 16; i++)\n         if (s->inUse16[i])\n            for (j = 0; j < 16; j++) {\n               GET_BIT(BZ_X_MAPPING_2, uc);\n               if (uc == 1) s->inUse[i * 16 + j] = True;\n            }\n      makeMaps_d ( s );\n      if (s->nInUse == 0) RETURN(BZ_DATA_ERROR);\n      alphaSize = s->nInUse+2;\n\n      /*--- Now the selectors ---*/\n      GET_BITS(BZ_X_SELECTOR_1, nGroups, 3);\n      if (nGroups < 2 || nGroups > 6) RETURN(BZ_DATA_ERROR);\n      GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15);\n      if (nSelectors < 1) RETURN(BZ_DATA_ERROR);\n      for (i = 0; i < nSelectors; i++) {\n         j = 0;\n         while (True) {\n            GET_BIT(BZ_X_SELECTOR_3, uc);\n            if (uc == 0) break;\n            j++;\n            if (j >= nGroups) RETURN(BZ_DATA_ERROR);\n         }\n         s->selectorMtf[i] = j;\n      }\n\n      /*--- Undo the MTF values for the selectors. ---*/\n      {\n         UChar pos[BZ_N_GROUPS], tmp, v;\n         for (v = 0; v < nGroups; v++) pos[v] = v;\n   \n         for (i = 0; i < nSelectors; i++) {\n            v = s->selectorMtf[i];\n            tmp = pos[v];\n            while (v > 0) { pos[v] = pos[v-1]; v--; }\n            pos[0] = tmp;\n            s->selector[i] = tmp;\n         }\n      }\n\n      /*--- Now the coding tables ---*/\n      for (t = 0; t < nGroups; t++) {\n         GET_BITS(BZ_X_CODING_1, curr, 5);\n         for (i = 0; i < alphaSize; i++) {\n            while (True) {\n               if (curr < 1 || curr > 20) RETURN(BZ_DATA_ERROR);\n               GET_BIT(BZ_X_CODING_2, uc);\n               if (uc == 0) break;\n               GET_BIT(BZ_X_CODING_3, uc);\n               if (uc == 0) curr++; else curr--;\n            }\n            s->len[t][i] = curr;\n         }\n      }\n\n      /*--- Create the Huffman decoding tables ---*/\n      for (t = 0; t < nGroups; t++) {\n         minLen = 32;\n         maxLen = 0;\n         for (i = 0; i < alphaSize; i++) {\n            if (s->len[t][i] > maxLen) maxLen = s->len[t][i];\n            if (s->len[t][i] < minLen) minLen = s->len[t][i];\n         }\n         BZ2_hbCreateDecodeTables ( \n            &(s->limit[t][0]), \n            &(s->base[t][0]), \n            &(s->perm[t][0]), \n            &(s->len[t][0]),\n            minLen, maxLen, alphaSize\n         );\n         s->minLens[t] = minLen;\n      }\n\n      /*--- Now the MTF values ---*/\n\n      EOB      = s->nInUse+1;\n      nblockMAX = 100000 * s->blockSize100k;\n      groupNo  = -1;\n      groupPos = 0;\n\n      for (i = 0; i <= 255; i++) s->unzftab[i] = 0;\n\n      /*-- MTF init --*/\n      {\n         Int32 ii, jj, kk;\n         kk = MTFA_SIZE-1;\n         for (ii = 256 / MTFL_SIZE - 1; ii >= 0; ii--) {\n            for (jj = MTFL_SIZE-1; jj >= 0; jj--) {\n               s->mtfa[kk] = (UChar)(ii * MTFL_SIZE + jj);\n               kk--;\n            }\n            s->mtfbase[ii] = kk + 1;\n         }\n      }\n      /*-- end MTF init --*/\n\n      nblock = 0;\n      GET_MTF_VAL(BZ_X_MTF_1, BZ_X_MTF_2, nextSym);\n\n      while (True) {\n\n         if (nextSym == EOB) break;\n\n         if (nextSym == BZ_RUNA || nextSym == BZ_RUNB) {\n\n            es = -1;\n            N = 1;\n            do {\n               /* Check that N doesn't get too big, so that es doesn't\n                  go negative.  The maximum value that can be\n                  RUNA/RUNB encoded is equal to the block size (post\n                  the initial RLE), viz, 900k, so bounding N at 2\n                  million should guard against overflow without\n                  rejecting any legitimate inputs. */\n               if (N >= 2*1024*1024) RETURN(BZ_DATA_ERROR);\n               if (nextSym == BZ_RUNA) es = es + (0+1) * N; else\n               if (nextSym == BZ_RUNB) es = es + (1+1) * N;\n               N = N * 2;\n               GET_MTF_VAL(BZ_X_MTF_3, BZ_X_MTF_4, nextSym);\n            }\n               while (nextSym == BZ_RUNA || nextSym == BZ_RUNB);\n\n            es++;\n            uc = s->seqToUnseq[ s->mtfa[s->mtfbase[0]] ];\n            s->unzftab[uc] += es;\n\n            if (s->smallDecompress)\n               while (es > 0) {\n                  if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);\n                  s->ll16[nblock] = (UInt16)uc;\n                  nblock++;\n                  es--;\n               }\n            else\n               while (es > 0) {\n                  if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);\n                  s->tt[nblock] = (UInt32)uc;\n                  nblock++;\n                  es--;\n               };\n\n            continue;\n\n         } else {\n\n            if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);\n\n            /*-- uc = MTF ( nextSym-1 ) --*/\n            {\n               Int32 ii, jj, kk, pp, lno, off;\n               UInt32 nn;\n               nn = (UInt32)(nextSym - 1);\n\n               if (nn < MTFL_SIZE) {\n                  /* avoid general-case expense */\n                  pp = s->mtfbase[0];\n                  uc = s->mtfa[pp+nn];\n                  while (nn > 3) {\n                     Int32 z = pp+nn;\n                     s->mtfa[(z)  ] = s->mtfa[(z)-1];\n                     s->mtfa[(z)-1] = s->mtfa[(z)-2];\n                     s->mtfa[(z)-2] = s->mtfa[(z)-3];\n                     s->mtfa[(z)-3] = s->mtfa[(z)-4];\n                     nn -= 4;\n                  }\n                  while (nn > 0) { \n                     s->mtfa[(pp+nn)] = s->mtfa[(pp+nn)-1]; nn--; \n                  };\n                  s->mtfa[pp] = uc;\n               } else { \n                  /* general case */\n                  lno = nn / MTFL_SIZE;\n                  off = nn % MTFL_SIZE;\n                  pp = s->mtfbase[lno] + off;\n                  uc = s->mtfa[pp];\n                  while (pp > s->mtfbase[lno]) { \n                     s->mtfa[pp] = s->mtfa[pp-1]; pp--; \n                  };\n                  s->mtfbase[lno]++;\n                  while (lno > 0) {\n                     s->mtfbase[lno]--;\n                     s->mtfa[s->mtfbase[lno]] \n                        = s->mtfa[s->mtfbase[lno-1] + MTFL_SIZE - 1];\n                     lno--;\n                  }\n                  s->mtfbase[0]--;\n                  s->mtfa[s->mtfbase[0]] = uc;\n                  if (s->mtfbase[0] == 0) {\n                     kk = MTFA_SIZE-1;\n                     for (ii = 256 / MTFL_SIZE-1; ii >= 0; ii--) {\n                        for (jj = MTFL_SIZE-1; jj >= 0; jj--) {\n                           s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj];\n                           kk--;\n                        }\n                        s->mtfbase[ii] = kk + 1;\n                     }\n                  }\n               }\n            }\n            /*-- end uc = MTF ( nextSym-1 ) --*/\n\n            s->unzftab[s->seqToUnseq[uc]]++;\n            if (s->smallDecompress)\n               s->ll16[nblock] = (UInt16)(s->seqToUnseq[uc]); else\n               s->tt[nblock]   = (UInt32)(s->seqToUnseq[uc]);\n            nblock++;\n\n            GET_MTF_VAL(BZ_X_MTF_5, BZ_X_MTF_6, nextSym);\n            continue;\n         }\n      }\n\n      /* Now we know what nblock is, we can do a better sanity\n         check on s->origPtr.\n      */\n      if (s->origPtr < 0 || s->origPtr >= nblock)\n         RETURN(BZ_DATA_ERROR);\n\n      /*-- Set up cftab to facilitate generation of T^(-1) --*/\n      /* Check: unzftab entries in range. */\n      for (i = 0; i <= 255; i++) {\n         if (s->unzftab[i] < 0 || s->unzftab[i] > nblock)\n            RETURN(BZ_DATA_ERROR);\n      }\n      /* Actually generate cftab. */\n      s->cftab[0] = 0;\n      for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1];\n      for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1];\n      /* Check: cftab entries in range. */\n      for (i = 0; i <= 256; i++) {\n         if (s->cftab[i] < 0 || s->cftab[i] > nblock) {\n            /* s->cftab[i] can legitimately be == nblock */\n            RETURN(BZ_DATA_ERROR);\n         }\n      }\n      /* Check: cftab entries non-descending. */\n      for (i = 1; i <= 256; i++) {\n         if (s->cftab[i-1] > s->cftab[i]) {\n            RETURN(BZ_DATA_ERROR);\n         }\n      }\n\n      s->state_out_len = 0;\n      s->state_out_ch  = 0;\n      BZ_INITIALISE_CRC ( s->calculatedBlockCRC );\n      s->state = BZ_X_OUTPUT;\n      if (s->verbosity >= 2) VPrintf0 ( \"rt+rld\" );\n\n      if (s->smallDecompress) {\n\n         /*-- Make a copy of cftab, used in generation of T --*/\n         for (i = 0; i <= 256; i++) s->cftabCopy[i] = s->cftab[i];\n\n         /*-- compute the T vector --*/\n         for (i = 0; i < nblock; i++) {\n            uc = (UChar)(s->ll16[i]);\n            SET_LL(i, s->cftabCopy[uc]);\n            s->cftabCopy[uc]++;\n         }\n\n         /*-- Compute T^(-1) by pointer reversal on T --*/\n         i = s->origPtr;\n         j = GET_LL(i);\n         do {\n            Int32 tmp = GET_LL(j);\n            SET_LL(j, i);\n            i = j;\n            j = tmp;\n         }\n            while (i != s->origPtr);\n\n         s->tPos = s->origPtr;\n         s->nblock_used = 0;\n         if (s->blockRandomised) {\n            BZ_RAND_INIT_MASK;\n            BZ_GET_SMALL(s->k0); s->nblock_used++;\n            BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; \n         } else {\n            BZ_GET_SMALL(s->k0); s->nblock_used++;\n         }\n\n      } else {\n\n         /*-- compute the T^(-1) vector --*/\n         for (i = 0; i < nblock; i++) {\n            uc = (UChar)(s->tt[i] & 0xff);\n            s->tt[s->cftab[uc]] |= (i << 8);\n            s->cftab[uc]++;\n         }\n\n         s->tPos = s->tt[s->origPtr] >> 8;\n         s->nblock_used = 0;\n         if (s->blockRandomised) {\n            BZ_RAND_INIT_MASK;\n            BZ_GET_FAST(s->k0); s->nblock_used++;\n            BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; \n         } else {\n            BZ_GET_FAST(s->k0); s->nblock_used++;\n         }\n\n      }\n\n      RETURN(BZ_OK);\n\n\n\n    endhdr_2:\n\n      GET_UCHAR(BZ_X_ENDHDR_2, uc);\n      if (uc != 0x72) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_ENDHDR_3, uc);\n      if (uc != 0x45) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_ENDHDR_4, uc);\n      if (uc != 0x38) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_ENDHDR_5, uc);\n      if (uc != 0x50) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_ENDHDR_6, uc);\n      if (uc != 0x90) RETURN(BZ_DATA_ERROR);\n\n      s->storedCombinedCRC = 0;\n      GET_UCHAR(BZ_X_CCRC_1, uc);\n      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);\n      GET_UCHAR(BZ_X_CCRC_2, uc);\n      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);\n      GET_UCHAR(BZ_X_CCRC_3, uc);\n      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);\n      GET_UCHAR(BZ_X_CCRC_4, uc);\n      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);\n\n      s->state = BZ_X_IDLE;\n      RETURN(BZ_STREAM_END);\n\n      default: AssertH ( False, 4001 );\n   }\n\n   AssertH ( False, 4002 );\n\n   save_state_and_return:\n\n   s->save_i           = i;\n   s->save_j           = j;\n   s->save_t           = t;\n   s->save_alphaSize   = alphaSize;\n   s->save_nGroups     = nGroups;\n   s->save_nSelectors  = nSelectors;\n   s->save_EOB         = EOB;\n   s->save_groupNo     = groupNo;\n   s->save_groupPos    = groupPos;\n   s->save_nextSym     = nextSym;\n   s->save_nblockMAX   = nblockMAX;\n   s->save_nblock      = nblock;\n   s->save_es          = es;\n   s->save_N           = N;\n   s->save_curr        = curr;\n   s->save_zt          = zt;\n   s->save_zn          = zn;\n   s->save_zvec        = zvec;\n   s->save_zj          = zj;\n   s->save_gSel        = gSel;\n   s->save_gMinlen     = gMinlen;\n   s->save_gLimit      = gLimit;\n   s->save_gBase       = gBase;\n   s->save_gPerm       = gPerm;\n\n   return retVal;   \n}\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                      decompress.c ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "external/bzip2/dlltest.c",
    "content": "/*\n   minibz2\n      libbz2.dll test program.\n      by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp)\n      This file is Public Domain.  Welcome any email to me.\n\n   usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]\n*/\n\n#define BZ_IMPORT\n#include <stdio.h>\n#include <stdlib.h>\n#include \"bzlib.h\"\n#ifdef _WIN32\n#include <io.h>\n#endif\n\n\n#ifdef _WIN32\n\n#define BZ2_LIBNAME \"libbz2-1.0.2.DLL\" \n\n#include <windows.h>\nstatic int BZ2DLLLoaded = 0;\nstatic HINSTANCE BZ2DLLhLib;\nint BZ2DLLLoadLibrary(void)\n{\n   HINSTANCE hLib;\n\n   if(BZ2DLLLoaded==1){return 0;}\n   hLib=LoadLibrary(BZ2_LIBNAME);\n   if(hLib == NULL){\n      fprintf(stderr,\"Can't load %s\\n\",BZ2_LIBNAME);\n      return -1;\n   }\n   BZ2_bzlibVersion=GetProcAddress(hLib,\"BZ2_bzlibVersion\");\n   BZ2_bzopen=GetProcAddress(hLib,\"BZ2_bzopen\");\n   BZ2_bzdopen=GetProcAddress(hLib,\"BZ2_bzdopen\");\n   BZ2_bzread=GetProcAddress(hLib,\"BZ2_bzread\");\n   BZ2_bzwrite=GetProcAddress(hLib,\"BZ2_bzwrite\");\n   BZ2_bzflush=GetProcAddress(hLib,\"BZ2_bzflush\");\n   BZ2_bzclose=GetProcAddress(hLib,\"BZ2_bzclose\");\n   BZ2_bzerror=GetProcAddress(hLib,\"BZ2_bzerror\");\n\n   if (!BZ2_bzlibVersion || !BZ2_bzopen || !BZ2_bzdopen\n       || !BZ2_bzread || !BZ2_bzwrite || !BZ2_bzflush\n       || !BZ2_bzclose || !BZ2_bzerror) {\n      fprintf(stderr,\"GetProcAddress failed.\\n\");\n      return -1;\n   }\n   BZ2DLLLoaded=1;\n   BZ2DLLhLib=hLib;\n   return 0;\n\n}\nint BZ2DLLFreeLibrary(void)\n{\n   if(BZ2DLLLoaded==0){return 0;}\n   FreeLibrary(BZ2DLLhLib);\n   BZ2DLLLoaded=0;\n}\n#endif /* WIN32 */\n\nvoid usage(void)\n{\n   puts(\"usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]\");\n}\n\nint main(int argc,char *argv[])\n{\n   int decompress = 0;\n   int level = 9;\n   char *fn_r = NULL;\n   char *fn_w = NULL;\n\n#ifdef _WIN32\n   if(BZ2DLLLoadLibrary()<0){\n      fprintf(stderr,\"Loading of %s failed.  Giving up.\\n\", BZ2_LIBNAME);\n      exit(1);\n   }\n   printf(\"Loading of %s succeeded.  Library version is %s.\\n\",\n          BZ2_LIBNAME, BZ2_bzlibVersion() );\n#endif\n   while(++argv,--argc){\n      if(**argv =='-' || **argv=='/'){\n         char *p;\n\n         for(p=*argv+1;*p;p++){\n            if(*p=='d'){\n               decompress = 1;\n            }else if('1'<=*p && *p<='9'){\n               level = *p - '0';\n            }else{\n               usage();\n               exit(1);\n            }\n         }\n      }else{\n         break;\n      }\n   }\n   if(argc>=1){\n      fn_r = *argv;\n      argc--;argv++;\n   }else{\n      fn_r = NULL;\n   }\n   if(argc>=1){\n      fn_w = *argv;\n      argc--;argv++;\n   }else{\n      fn_w = NULL;\n   }\n   {\n      int len;\n      char buff[0x1000];\n      char mode[10];\n\n      if(decompress){\n         BZFILE *BZ2fp_r = NULL;\n         FILE *fp_w = NULL;\n\n         if(fn_w){\n            if((fp_w = fopen(fn_w,\"wb\"))==NULL){\n               printf(\"can't open [%s]\\n\",fn_w);\n               perror(\"reason:\");\n               exit(1);\n            }\n         }else{\n            fp_w = stdout;\n         }\n         if((fn_r == NULL && (BZ2fp_r = BZ2_bzdopen(fileno(stdin),\"rb\"))==NULL)\n            || (fn_r != NULL && (BZ2fp_r = BZ2_bzopen(fn_r,\"rb\"))==NULL)){\n            printf(\"can't bz2openstream\\n\");\n            exit(1);\n         }\n         while((len=BZ2_bzread(BZ2fp_r,buff,0x1000))>0){\n            fwrite(buff,1,len,fp_w);\n         }\n         BZ2_bzclose(BZ2fp_r);\n         if(fp_w != stdout) fclose(fp_w);\n      }else{\n         BZFILE *BZ2fp_w = NULL;\n         FILE *fp_r = NULL;\n\n         if(fn_r){\n            if((fp_r = fopen(fn_r,\"rb\"))==NULL){\n               printf(\"can't open [%s]\\n\",fn_r);\n               perror(\"reason:\");\n               exit(1);\n            }\n         }else{\n            fp_r = stdin;\n         }\n         mode[0]='w';\n         mode[1] = '0' + level;\n         mode[2] = '\\0';\n\n         if((fn_w == NULL && (BZ2fp_w = BZ2_bzdopen(fileno(stdout),mode))==NULL)\n            || (fn_w !=NULL && (BZ2fp_w = BZ2_bzopen(fn_w,mode))==NULL)){\n            printf(\"can't bz2openstream\\n\");\n            exit(1);\n         }\n         while((len=fread(buff,1,0x1000,fp_r))>0){\n            BZ2_bzwrite(BZ2fp_w,buff,len);\n         }\n         BZ2_bzclose(BZ2fp_w);\n         if(fp_r!=stdin)fclose(fp_r);\n      }\n   }\n#ifdef _WIN32\n   BZ2DLLFreeLibrary();\n#endif\n   return 0;\n}\n"
  },
  {
    "path": "external/bzip2/dlltest.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"dlltest\" - Package Owner=<4>\n# Microsoft Developer Studio Generated Build File, Format Version 5.00\n# ** ҏWȂł **\n\n# TARGTYPE \"Win32 (x86) Console Application\" 0x0103\n\nCFG=dlltest - Win32 Debug\n!MESSAGE ͗LҲ̧قł͂܂B ۼުĂނ邽߂ɂ NMAKE gpĂB\n!MESSAGE [Ҳ̧ق̴߰] ނgpĎsĂ\n!MESSAGE \n!MESSAGE NMAKE /f \"dlltest.mak\".\n!MESSAGE \n!MESSAGE NMAKE ̎sɍ\\wł܂\n!MESSAGE  ײݏϸۂ̐ݒ`܂B:\n!MESSAGE \n!MESSAGE NMAKE /f \"dlltest.mak\" CFG=\"dlltest - Win32 Debug\"\n!MESSAGE \n!MESSAGE I\\ Ӱ:\n!MESSAGE \n!MESSAGE \"dlltest - Win32 Release\" (\"Win32 (x86) Console Application\" p)\n!MESSAGE \"dlltest - Win32 Debug\" (\"Win32 (x86) Console Application\" p)\n!MESSAGE \n\n# Begin Project\n# PROP Scc_ProjName \"\"\n# PROP Scc_LocalPath \"\"\nCPP=cl.exe\nRSC=rc.exe\n\n!IF  \"$(CFG)\" == \"dlltest - Win32 Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"Release\"\n# PROP BASE Intermediate_Dir \"Release\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"Release\"\n# PROP Intermediate_Dir \"Release\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /c\n# ADD CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /c\n# ADD BASE RSC /l 0x411 /d \"NDEBUG\"\n# ADD RSC /l 0x411 /d \"NDEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:\"minibz2.exe\"\n\n!ELSEIF  \"$(CFG)\" == \"dlltest - Win32 Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"dlltest_\"\n# PROP BASE Intermediate_Dir \"dlltest_\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"dlltest_\"\n# PROP Intermediate_Dir \"dlltest_\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /c\n# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /c\n# ADD BASE RSC /l 0x411 /d \"_DEBUG\"\n# ADD RSC /l 0x411 /d \"_DEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:\"minibz2.exe\" /pdbtype:sept\n\n!ENDIF \n\n# Begin Target\n\n# Name \"dlltest - Win32 Release\"\n# Name \"dlltest - Win32 Debug\"\n# Begin Source File\n\nSOURCE=.\\bzlib.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\dlltest.c\n# End Source File\n# End Target\n# End Project\n"
  },
  {
    "path": "external/bzip2/entities.xml",
    "content": "<!-- misc. strings -->\n<!ENTITY bz-url \"http://www.bzip.org\">\n<!ENTITY bz-email \"jseward@bzip.org\">\n<!ENTITY bz-lifespan \"1996-2010\">\n\n<!ENTITY bz-version \"1.0.6\">\n<!ENTITY bz-date \"6 September 2010\">\n\n<!ENTITY manual-title \"bzip2 Manual\">\n"
  },
  {
    "path": "external/bzip2/format.pl",
    "content": "#!/usr/bin/perl -w\n#\n# ------------------------------------------------------------------\n# This file is part of bzip2/libbzip2, a program and library for\n# lossless, block-sorting data compression.\n#\n# bzip2/libbzip2 version 1.0.6 of 6 September 2010\n# Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n#\n# Please read the WARNING, DISCLAIMER and PATENTS sections in the \n# README file.\n#\n# This program is released under the terms of the license contained\n# in the file LICENSE.\n# ------------------------------------------------------------------\n#\nuse strict;\n\n# get command line values:\nif ( $#ARGV !=1 ) {\n    die \"Usage:  $0 xml_infile xml_outfile\\n\";\n}\n\nmy $infile = shift;\n# check infile exists\ndie \"Can't find file \\\"$infile\\\"\"\n  unless -f $infile;\n# check we can read infile\nif (! -r $infile) {\n    die \"Can't read input $infile\\n\";\n}\n# check we can open infile\nopen( INFILE,\"<$infile\" ) or \n    die \"Can't input $infile $!\";\n\n#my $outfile = 'fmt-manual.xml';\nmy $outfile = shift;\n#print \"Infile: $infile, Outfile: $outfile\\n\";\n# check we can write to outfile\nopen( OUTFILE,\">$outfile\" ) or \n    die \"Can't output $outfile $! for writing\";\n\nmy ($prev, $curr, $str);\n$prev = ''; $curr = '';\nwhile ( <INFILE> ) {\n\n\t\tprint OUTFILE $prev;\n    $prev = $curr;\n    $curr = $_;\n    $str = '';\n\n    if ( $prev =~ /<programlisting>$|<screen>$/ ) {\n        chomp $prev;\n        $curr = join( '', $prev, \"<![CDATA[\", $curr );\n\t\t\t\t$prev = '';\n        next;\n    }\n    elsif ( $curr =~ /<\\/programlisting>|<\\/screen>/ ) {\n        chomp $prev;\n        $curr = join( '', $prev, \"]]>\", $curr );\n\t\t\t\t$prev = '';\n        next;\n    }\n}\nprint OUTFILE $curr;\nclose INFILE;\nclose OUTFILE;\nexit;\n"
  },
  {
    "path": "external/bzip2/huffman.c",
    "content": "\n/*-------------------------------------------------------------*/\n/*--- Huffman coding low-level stuff                        ---*/\n/*---                                             huffman.c ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   Please read the WARNING, DISCLAIMER and PATENTS sections in the \n   README file.\n\n   This program is released under the terms of the license contained\n   in the file LICENSE.\n   ------------------------------------------------------------------ */\n\n\n#include \"bzlib_private.h\"\n\n/*---------------------------------------------------*/\n#define WEIGHTOF(zz0)  ((zz0) & 0xffffff00)\n#define DEPTHOF(zz1)   ((zz1) & 0x000000ff)\n#define MYMAX(zz2,zz3) ((zz2) > (zz3) ? (zz2) : (zz3))\n\n#define ADDWEIGHTS(zw1,zw2)                           \\\n   (WEIGHTOF(zw1)+WEIGHTOF(zw2)) |                    \\\n   (1 + MYMAX(DEPTHOF(zw1),DEPTHOF(zw2)))\n\n#define UPHEAP(z)                                     \\\n{                                                     \\\n   Int32 zz, tmp;                                     \\\n   zz = z; tmp = heap[zz];                            \\\n   while (weight[tmp] < weight[heap[zz >> 1]]) {      \\\n      heap[zz] = heap[zz >> 1];                       \\\n      zz >>= 1;                                       \\\n   }                                                  \\\n   heap[zz] = tmp;                                    \\\n}\n\n#define DOWNHEAP(z)                                   \\\n{                                                     \\\n   Int32 zz, yy, tmp;                                 \\\n   zz = z; tmp = heap[zz];                            \\\n   while (True) {                                     \\\n      yy = zz << 1;                                   \\\n      if (yy > nHeap) break;                          \\\n      if (yy < nHeap &&                               \\\n          weight[heap[yy+1]] < weight[heap[yy]])      \\\n         yy++;                                        \\\n      if (weight[tmp] < weight[heap[yy]]) break;      \\\n      heap[zz] = heap[yy];                            \\\n      zz = yy;                                        \\\n   }                                                  \\\n   heap[zz] = tmp;                                    \\\n}\n\n\n/*---------------------------------------------------*/\nvoid BZ2_hbMakeCodeLengths ( UChar *len, \n                             Int32 *freq,\n                             Int32 alphaSize,\n                             Int32 maxLen )\n{\n   /*--\n      Nodes and heap entries run from 1.  Entry 0\n      for both the heap and nodes is a sentinel.\n   --*/\n   Int32 nNodes, nHeap, n1, n2, i, j, k;\n   Bool  tooLong;\n\n   Int32 heap   [ BZ_MAX_ALPHA_SIZE + 2 ];\n   Int32 weight [ BZ_MAX_ALPHA_SIZE * 2 ];\n   Int32 parent [ BZ_MAX_ALPHA_SIZE * 2 ]; \n\n   for (i = 0; i < alphaSize; i++)\n      weight[i+1] = (freq[i] == 0 ? 1 : freq[i]) << 8;\n\n   while (True) {\n\n      nNodes = alphaSize;\n      nHeap = 0;\n\n      heap[0] = 0;\n      weight[0] = 0;\n      parent[0] = -2;\n\n      for (i = 1; i <= alphaSize; i++) {\n         parent[i] = -1;\n         nHeap++;\n         heap[nHeap] = i;\n         UPHEAP(nHeap);\n      }\n\n      AssertH( nHeap < (BZ_MAX_ALPHA_SIZE+2), 2001 );\n   \n      while (nHeap > 1) {\n         n1 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1);\n         n2 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1);\n         nNodes++;\n         parent[n1] = parent[n2] = nNodes;\n         weight[nNodes] = ADDWEIGHTS(weight[n1], weight[n2]);\n         parent[nNodes] = -1;\n         nHeap++;\n         heap[nHeap] = nNodes;\n         UPHEAP(nHeap);\n      }\n\n      AssertH( nNodes < (BZ_MAX_ALPHA_SIZE * 2), 2002 );\n\n      tooLong = False;\n      for (i = 1; i <= alphaSize; i++) {\n         j = 0;\n         k = i;\n         while (parent[k] >= 0) { k = parent[k]; j++; }\n         len[i-1] = j;\n         if (j > maxLen) tooLong = True;\n      }\n      \n      if (! tooLong) break;\n\n      /* 17 Oct 04: keep-going condition for the following loop used\n         to be 'i < alphaSize', which missed the last element,\n         theoretically leading to the possibility of the compressor\n         looping.  However, this count-scaling step is only needed if\n         one of the generated Huffman code words is longer than\n         maxLen, which up to and including version 1.0.2 was 20 bits,\n         which is extremely unlikely.  In version 1.0.3 maxLen was\n         changed to 17 bits, which has minimal effect on compression\n         ratio, but does mean this scaling step is used from time to\n         time, enough to verify that it works.\n\n         This means that bzip2-1.0.3 and later will only produce\n         Huffman codes with a maximum length of 17 bits.  However, in\n         order to preserve backwards compatibility with bitstreams\n         produced by versions pre-1.0.3, the decompressor must still\n         handle lengths of up to 20. */\n\n      for (i = 1; i <= alphaSize; i++) {\n         j = weight[i] >> 8;\n         j = 1 + (j / 2);\n         weight[i] = j << 8;\n      }\n   }\n}\n\n\n/*---------------------------------------------------*/\nvoid BZ2_hbAssignCodes ( Int32 *code,\n                         UChar *length,\n                         Int32 minLen,\n                         Int32 maxLen,\n                         Int32 alphaSize )\n{\n   Int32 n, vec, i;\n\n   vec = 0;\n   for (n = minLen; n <= maxLen; n++) {\n      for (i = 0; i < alphaSize; i++)\n         if (length[i] == n) { code[i] = vec; vec++; };\n      vec <<= 1;\n   }\n}\n\n\n/*---------------------------------------------------*/\nvoid BZ2_hbCreateDecodeTables ( Int32 *limit,\n                                Int32 *base,\n                                Int32 *perm,\n                                UChar *length,\n                                Int32 minLen,\n                                Int32 maxLen,\n                                Int32 alphaSize )\n{\n   Int32 pp, i, j, vec;\n\n   pp = 0;\n   for (i = minLen; i <= maxLen; i++)\n      for (j = 0; j < alphaSize; j++)\n         if (length[j] == i) { perm[pp] = j; pp++; };\n\n   for (i = 0; i < BZ_MAX_CODE_LEN; i++) base[i] = 0;\n   for (i = 0; i < alphaSize; i++) base[length[i]+1]++;\n\n   for (i = 1; i < BZ_MAX_CODE_LEN; i++) base[i] += base[i-1];\n\n   for (i = 0; i < BZ_MAX_CODE_LEN; i++) limit[i] = 0;\n   vec = 0;\n\n   for (i = minLen; i <= maxLen; i++) {\n      vec += (base[i+1] - base[i]);\n      limit[i] = vec-1;\n      vec <<= 1;\n   }\n   for (i = minLen + 1; i <= maxLen; i++)\n      base[i] = ((limit[i-1] + 1) << 1) - base[i];\n}\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                         huffman.c ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "external/bzip2/libbz2.def",
    "content": "LIBRARY\t\t\tLIBBZ2\nDESCRIPTION\t\t\"libbzip2: library for data compression\"\nEXPORTS\n\tBZ2_bzCompressInit\n\tBZ2_bzCompress\n\tBZ2_bzCompressEnd\n\tBZ2_bzDecompressInit\n\tBZ2_bzDecompress\n\tBZ2_bzDecompressEnd\n\tBZ2_bzReadOpen\n\tBZ2_bzReadClose\n\tBZ2_bzReadGetUnused\n\tBZ2_bzRead\n\tBZ2_bzWriteOpen\n\tBZ2_bzWrite\n\tBZ2_bzWriteClose\n\tBZ2_bzWriteClose64\n\tBZ2_bzBuffToBuffCompress\n\tBZ2_bzBuffToBuffDecompress\n\tBZ2_bzlibVersion\n\tBZ2_bzopen\n\tBZ2_bzdopen\n\tBZ2_bzread\n\tBZ2_bzwrite\n\tBZ2_bzflush\n\tBZ2_bzclose\n\tBZ2_bzerror\n"
  },
  {
    "path": "external/bzip2/libbz2.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"libbz2\" - Package Owner=<4>\n# Microsoft Developer Studio Generated Build File, Format Version 5.00\n# ** ҏWȂł **\n\n# TARGTYPE \"Win32 (x86) Dynamic-Link Library\" 0x0102\n\nCFG=libbz2 - Win32 Debug\n!MESSAGE ͗LҲ̧قł͂܂B ۼުĂނ邽߂ɂ NMAKE gpĂB\n!MESSAGE [Ҳ̧ق̴߰] ނgpĎsĂ\n!MESSAGE \n!MESSAGE NMAKE /f \"libbz2.mak\".\n!MESSAGE \n!MESSAGE NMAKE ̎sɍ\\wł܂\n!MESSAGE  ײݏϸۂ̐ݒ`܂B:\n!MESSAGE \n!MESSAGE NMAKE /f \"libbz2.mak\" CFG=\"libbz2 - Win32 Debug\"\n!MESSAGE \n!MESSAGE I\\ Ӱ:\n!MESSAGE \n!MESSAGE \"libbz2 - Win32 Release\" (\"Win32 (x86) Dynamic-Link Library\" p)\n!MESSAGE \"libbz2 - Win32 Debug\" (\"Win32 (x86) Dynamic-Link Library\" p)\n!MESSAGE \n\n# Begin Project\n# PROP Scc_ProjName \"\"\n# PROP Scc_LocalPath \"\"\nCPP=cl.exe\nMTL=midl.exe\nRSC=rc.exe\n\n!IF  \"$(CFG)\" == \"libbz2 - Win32 Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"Release\"\n# PROP BASE Intermediate_Dir \"Release\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"Release\"\n# PROP Intermediate_Dir \"Release\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /YX /FD /c\n# ADD CPP /nologo /MT /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /YX /FD /c\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /o NUL /win32\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /o NUL /win32\n# ADD BASE RSC /l 0x411 /d \"NDEBUG\"\n# ADD RSC /l 0x411 /d \"NDEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 /out:\"libbz2.dll\"\n\n!ELSEIF  \"$(CFG)\" == \"libbz2 - Win32 Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"Debug\"\n# PROP BASE Intermediate_Dir \"Debug\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"Debug\"\n# PROP Intermediate_Dir \"Debug\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /YX /FD /c\n# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /YX /FD /c\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /o NUL /win32\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /o NUL /win32\n# ADD BASE RSC /l 0x411 /d \"_DEBUG\"\n# ADD RSC /l 0x411 /d \"_DEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:\"libbz2.dll\" /pdbtype:sept\n\n!ENDIF \n\n# Begin Target\n\n# Name \"libbz2 - Win32 Release\"\n# Name \"libbz2 - Win32 Debug\"\n# Begin Source File\n\nSOURCE=.\\blocksort.c\n# End Source File\n# Begin Source File\n\nSOURCE=.\\bzlib.c\n# End Source File\n# Begin Source File\n\nSOURCE=.\\bzlib.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\bzlib_private.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\compress.c\n# End Source File\n# Begin Source File\n\nSOURCE=.\\crctable.c\n# End Source File\n# Begin Source File\n\nSOURCE=.\\decompress.c\n# End Source File\n# Begin Source File\n\nSOURCE=.\\huffman.c\n# End Source File\n# Begin Source File\n\nSOURCE=.\\libbz2.def\n# End Source File\n# Begin Source File\n\nSOURCE=.\\randtable.c\n# End Source File\n# End Target\n# End Project\n"
  },
  {
    "path": "external/bzip2/libbz2.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 14\nVisualStudioVersion = 14.0.25420.1\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"libbz2\", \"libbz2.vcxproj\", \"{02188029-096A-4B3C-B0B8-507FEF75820D}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{02188029-096A-4B3C-B0B8-507FEF75820D}.Debug|x86.ActiveCfg = Debug|Win32\n\t\t{02188029-096A-4B3C-B0B8-507FEF75820D}.Debug|x86.Build.0 = Debug|Win32\n\t\t{02188029-096A-4B3C-B0B8-507FEF75820D}.Release|x86.ActiveCfg = Release|Win32\n\t\t{02188029-096A-4B3C-B0B8-507FEF75820D}.Release|x86.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/bzip2/libbz2.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <SccProjectName />\n    <SccLocalPath />\n    <ProjectGuid>{02188029-096A-4B3C-B0B8-507FEF75820D}</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <PlatformToolset>v140</PlatformToolset>\n    <UseOfMfc>false</UseOfMfc>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <PlatformToolset>v140</PlatformToolset>\n    <UseOfMfc>false</UseOfMfc>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <OutDir>.\\Release\\</OutDir>\n    <IntDir>.\\Release\\</IntDir>\n    <LinkIncremental>false</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <OutDir>.\\Debug\\</OutDir>\n    <IntDir>.\\Debug\\</IntDir>\n    <LinkIncremental>true</LinkIncremental>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <InlineFunctionExpansion>Default</InlineFunctionExpansion>\n      <StringPooling>true</StringPooling>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <Optimization>MaxSpeed</Optimization>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <WarningLevel>Level3</WarningLevel>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AssemblerListingLocation>.\\Release\\</AssemblerListingLocation>\n      <PrecompiledHeaderOutputFile>.\\Release\\libbz2.pch</PrecompiledHeaderOutputFile>\n      <ObjectFileName>.\\Release\\</ObjectFileName>\n      <ProgramDataBaseFileName>.\\Release\\</ProgramDataBaseFileName>\n    </ClCompile>\n    <Midl>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <TypeLibraryName>.\\Release\\libbz2.tlb</TypeLibraryName>\n      <MkTypLibCompatible>true</MkTypLibCompatible>\n      <RedirectOutputAndErrors>NUL</RedirectOutputAndErrors>\n      <TargetEnvironment>Win32</TargetEnvironment>\n    </Midl>\n    <ResourceCompile>\n      <Culture>0x0411</Culture>\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ResourceCompile>\n    <Bscmake>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <OutputFile>.\\Release\\libbz2.bsc</OutputFile>\n    </Bscmake>\n    <Link>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <LinkDLL>true</LinkDLL>\n      <SubSystem>Windows</SubSystem>\n      <OutputFile>libbz2.dll</OutputFile>\n      <ImportLibrary>.\\Release\\libbz2.lib</ImportLibrary>\n      <AdditionalDependencies>odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <ModuleDefinitionFile>.\\libbz2.def</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <InlineFunctionExpansion>Default</InlineFunctionExpansion>\n      <Optimization>Disabled</Optimization>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <WarningLevel>Level3</WarningLevel>\n      <MinimalRebuild>true</MinimalRebuild>\n      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AssemblerListingLocation>.\\Debug\\</AssemblerListingLocation>\n      <PrecompiledHeaderOutputFile>.\\Debug\\libbz2.pch</PrecompiledHeaderOutputFile>\n      <ObjectFileName>.\\Debug\\</ObjectFileName>\n      <ProgramDataBaseFileName>.\\Debug\\</ProgramDataBaseFileName>\n    </ClCompile>\n    <Midl>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <TypeLibraryName>.\\Debug\\libbz2.tlb</TypeLibraryName>\n      <MkTypLibCompatible>true</MkTypLibCompatible>\n      <RedirectOutputAndErrors>NUL</RedirectOutputAndErrors>\n      <TargetEnvironment>Win32</TargetEnvironment>\n    </Midl>\n    <ResourceCompile>\n      <Culture>0x0411</Culture>\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ResourceCompile>\n    <Bscmake>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <OutputFile>.\\Debug\\libbz2.bsc</OutputFile>\n    </Bscmake>\n    <Link>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <LinkDLL>true</LinkDLL>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OutputFile>libbz2.dll</OutputFile>\n      <ImportLibrary>.\\Debug\\libbz2.lib</ImportLibrary>\n      <AdditionalDependencies>odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <ModuleDefinitionFile>.\\libbz2.def</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"blocksort.c\" />\n    <ClCompile Include=\"bzlib.c\" />\n    <ClCompile Include=\"compress.c\" />\n    <ClCompile Include=\"crctable.c\" />\n    <ClCompile Include=\"decompress.c\" />\n    <ClCompile Include=\"huffman.c\" />\n    <ClCompile Include=\"randtable.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"bzlib.h\" />\n    <ClInclude Include=\"bzlib_private.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"libbz2.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "external/bzip2/makefile.msc",
    "content": "# Makefile for Microsoft Visual C++ 6.0\n# usage: nmake -f makefile.msc\n# K.M. Syring (syring@gsf.de)\n# Fixed up by JRS for bzip2-0.9.5d release.\n\nCC=cl\nCFLAGS= -DWIN32 -MD -Ox -D_FILE_OFFSET_BITS=64 -nologo\n\nOBJS= blocksort.obj  \\\n      huffman.obj    \\\n      crctable.obj   \\\n      randtable.obj  \\\n      compress.obj   \\\n      decompress.obj \\\n      bzlib.obj\n\nall: lib bzip2 test\n\nbzip2: lib\n\t$(CC) $(CFLAGS) -o bzip2 bzip2.c libbz2.lib setargv.obj\n\t$(CC) $(CFLAGS) -o bzip2recover bzip2recover.c\n\nlib: $(OBJS)\n\tlib /out:libbz2.lib $(OBJS)\n\ntest: bzip2\n\ttype words1\n\t.\\\\bzip2 -1  < sample1.ref > sample1.rb2\n\t.\\\\bzip2 -2  < sample2.ref > sample2.rb2\n\t.\\\\bzip2 -3  < sample3.ref > sample3.rb2\n\t.\\\\bzip2 -d  < sample1.bz2 > sample1.tst\n\t.\\\\bzip2 -d  < sample2.bz2 > sample2.tst\n\t.\\\\bzip2 -ds < sample3.bz2 > sample3.tst\n\t@echo All six of the fc's should find no differences.\n\t@echo If fc finds an error on sample3.bz2, this could be\n\t@echo because WinZip's 'TAR file smart CR/LF conversion'\n\t@echo is too clever for its own good.  Disable this option.\n\t@echo The correct size for sample3.ref is 120,244.  If it\n\t@echo is 150,251, WinZip has messed it up.\n\tfc sample1.bz2 sample1.rb2 \n\tfc sample2.bz2 sample2.rb2\n\tfc sample3.bz2 sample3.rb2\n\tfc sample1.tst sample1.ref\n\tfc sample2.tst sample2.ref\n\tfc sample3.tst sample3.ref\n\n\n\nclean: \n\tdel *.obj\n\tdel libbz2.lib \n\tdel bzip2.exe\n\tdel bzip2recover.exe\n\tdel sample1.rb2 \n\tdel sample2.rb2 \n\tdel sample3.rb2\n\tdel sample1.tst \n\tdel sample2.tst\n\tdel sample3.tst\n\n.c.obj: \n\t$(CC) $(CFLAGS) -c $*.c -o $*.obj\n\n"
  },
  {
    "path": "external/bzip2/manual.html",
    "content": "<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">\n<title>bzip2 and libbzip2, version 1.0.6</title>\n<meta name=\"generator\" content=\"DocBook XSL Stylesheets V1.75.2\">\n<style type=\"text/css\" media=\"screen\">/* Colours:\n#74240f  dark brown      h1, h2, h3, h4\n#336699  medium blue     links\n#339999  turquoise       link hover colour\n#202020  almost black    general text\n#761596  purple          md5sum text\n#626262  dark gray       pre border\n#eeeeee  very light gray pre background\n#f2f2f9  very light blue nav table background\n#3366cc  medium blue     nav table border\n*/\n\na, a:link, a:visited, a:active { color: #336699; }\na:hover { color: #339999; }\n\nbody { font: 80%/126% sans-serif; }\nh1, h2, h3, h4 { color: #74240f; }\n\ndt { color: #336699; font-weight: bold }\ndd { \n margin-left: 1.5em; \n padding-bottom: 0.8em;\n}\n\n/* -- ruler -- */\ndiv.hr_blue { \n  height:  3px; \n  background:#ffffff url(\"/images/hr_blue.png\") repeat-x; }\ndiv.hr_blue hr { display:none; }\n\n/* release styles */\n#release p { margin-top: 0.4em; }\n#release .md5sum { color: #761596; }\n\n\n/* ------ styles for docs|manuals|howto ------ */\n/* -- lists -- */\nul  { \n margin:     0px 4px 16px 16px;\n padding:    0px;\n list-style: url(\"/images/li-blue.png\"); \n}\nul li { \n margin-bottom: 10px;\n}\nul ul\t{ \n list-style-type:  none; \n list-style-image: none; \n margin-left:      0px; \n}\n\n/* header / footer nav tables */\ntable.nav {\n border:     solid 1px #3366cc;\n background: #f2f2f9;\n background-color: #f2f2f9;\n margin-bottom: 0.5em;\n}\n/* don't have underlined links in chunked nav menus */\ntable.nav a { text-decoration: none; }\ntable.nav a:hover { text-decoration: underline; }\ntable.nav td { font-size: 85%; }\n\ncode, tt, pre { font-size: 120%; }\ncode, tt { color: #761596; }\n\ndiv.literallayout, pre.programlisting, pre.screen {\n color:      #000000;\n padding:    0.5em;\n background: #eeeeee;\n border:     1px solid #626262;\n background-color: #eeeeee;\n margin: 4px 0px 4px 0px; \n}\n</style>\n</head>\n<body bgcolor=\"white\" text=\"black\" link=\"#0000FF\" vlink=\"#840084\" alink=\"#0000FF\"><div lang=\"en\" class=\"book\" title=\"bzip2 and libbzip2, version 1.0.6\">\n<div class=\"titlepage\">\n<div>\n<div><h1 class=\"title\">\n<a name=\"userman\"></a>bzip2 and libbzip2, version 1.0.6</h1></div>\n<div><h2 class=\"subtitle\">A program and library for data compression</h2></div>\n<div><div class=\"authorgroup\"><div class=\"author\">\n<h3 class=\"author\">\n<span class=\"firstname\">Julian</span> <span class=\"surname\">Seward</span>\n</h3>\n<div class=\"affiliation\"><span class=\"orgname\">http://www.bzip.org<br></span></div>\n</div></div></div>\n<div><p class=\"releaseinfo\">Version 1.0.6 of 6 September 2010</p></div>\n<div><p class=\"copyright\">Copyright  1996-2010 Julian Seward</p></div>\n<div><div class=\"legalnotice\" title=\"Legal Notice\">\n<a name=\"id537185\"></a><p>This program, <code class=\"computeroutput\">bzip2</code>, the\n  associated library <code class=\"computeroutput\">libbzip2</code>, and\n  all documentation, are copyright  1996-2010 Julian Seward.\n  All rights reserved.</p>\n<p>Redistribution and use in source and binary forms, with\n  or without modification, are permitted provided that the\n  following conditions are met:</p>\n<div class=\"itemizedlist\"><ul class=\"itemizedlist\" type=\"bullet\">\n<li class=\"listitem\" style=\"list-style-type: disc\"><p>Redistributions of source code must retain the\n   above copyright notice, this list of conditions and the\n   following disclaimer.</p></li>\n<li class=\"listitem\" style=\"list-style-type: disc\"><p>The origin of this software must not be\n   misrepresented; you must not claim that you wrote the original\n   software.  If you use this software in a product, an\n   acknowledgment in the product documentation would be\n   appreciated but is not required.</p></li>\n<li class=\"listitem\" style=\"list-style-type: disc\"><p>Altered source versions must be plainly marked\n   as such, and must not be misrepresented as being the original\n   software.</p></li>\n<li class=\"listitem\" style=\"list-style-type: disc\"><p>The name of the author may not be used to\n   endorse or promote products derived from this software without\n   specific prior written permission.</p></li>\n</ul></div>\n<p>THIS SOFTWARE IS PROVIDED BY THE AUTHOR \"AS IS\" AND ANY\n  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n  PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE\n  AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n  IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n  THE POSSIBILITY OF SUCH DAMAGE.</p>\n<p>PATENTS: To the best of my knowledge,\n <code class=\"computeroutput\">bzip2</code> and\n <code class=\"computeroutput\">libbzip2</code> do not use any patented\n algorithms.  However, I do not have the resources to carry\n out a patent search.  Therefore I cannot give any guarantee of\n the above statement.\n </p>\n</div></div>\n</div>\n<hr>\n</div>\n<div class=\"toc\">\n<p><b>Table of Contents</b></p>\n<dl>\n<dt><span class=\"chapter\"><a href=\"#intro\">1. Introduction</a></span></dt>\n<dt><span class=\"chapter\"><a href=\"#using\">2. How to use bzip2</a></span></dt>\n<dd><dl>\n<dt><span class=\"sect1\"><a href=\"#name\">2.1. NAME</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#synopsis\">2.2. SYNOPSIS</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#description\">2.3. DESCRIPTION</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#options\">2.4. OPTIONS</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#memory-management\">2.5. MEMORY MANAGEMENT</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#recovering\">2.6. RECOVERING DATA FROM DAMAGED FILES</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#performance\">2.7. PERFORMANCE NOTES</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#caveats\">2.8. CAVEATS</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#author\">2.9. AUTHOR</a></span></dt>\n</dl></dd>\n<dt><span class=\"chapter\"><a href=\"#libprog\">3. \nProgramming with <code class=\"computeroutput\">libbzip2</code>\n</a></span></dt>\n<dd><dl>\n<dt><span class=\"sect1\"><a href=\"#top-level\">3.1. Top-level structure</a></span></dt>\n<dd><dl>\n<dt><span class=\"sect2\"><a href=\"#ll-summary\">3.1.1. Low-level summary</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#hl-summary\">3.1.2. High-level summary</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#util-fns-summary\">3.1.3. Utility functions summary</a></span></dt>\n</dl></dd>\n<dt><span class=\"sect1\"><a href=\"#err-handling\">3.2. Error handling</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#low-level\">3.3. Low-level interface</a></span></dt>\n<dd><dl>\n<dt><span class=\"sect2\"><a href=\"#bzcompress-init\">3.3.1. BZ2_bzCompressInit</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzCompress\">3.3.2. BZ2_bzCompress</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzCompress-end\">3.3.3. BZ2_bzCompressEnd</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzDecompress-init\">3.3.4. BZ2_bzDecompressInit</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzDecompress\">3.3.5. BZ2_bzDecompress</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzDecompress-end\">3.3.6. BZ2_bzDecompressEnd</a></span></dt>\n</dl></dd>\n<dt><span class=\"sect1\"><a href=\"#hl-interface\">3.4. High-level interface</a></span></dt>\n<dd><dl>\n<dt><span class=\"sect2\"><a href=\"#bzreadopen\">3.4.1. BZ2_bzReadOpen</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzread\">3.4.2. BZ2_bzRead</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzreadgetunused\">3.4.3. BZ2_bzReadGetUnused</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzreadclose\">3.4.4. BZ2_bzReadClose</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzwriteopen\">3.4.5. BZ2_bzWriteOpen</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzwrite\">3.4.6. BZ2_bzWrite</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzwriteclose\">3.4.7. BZ2_bzWriteClose</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#embed\">3.4.8. Handling embedded compressed data streams</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#std-rdwr\">3.4.9. Standard file-reading/writing code</a></span></dt>\n</dl></dd>\n<dt><span class=\"sect1\"><a href=\"#util-fns\">3.5. Utility functions</a></span></dt>\n<dd><dl>\n<dt><span class=\"sect2\"><a href=\"#bzbufftobuffcompress\">3.5.1. BZ2_bzBuffToBuffCompress</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzbufftobuffdecompress\">3.5.2. BZ2_bzBuffToBuffDecompress</a></span></dt>\n</dl></dd>\n<dt><span class=\"sect1\"><a href=\"#zlib-compat\">3.6. zlib compatibility functions</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#stdio-free\">3.7. Using the library in a stdio-free environment</a></span></dt>\n<dd><dl>\n<dt><span class=\"sect2\"><a href=\"#stdio-bye\">3.7.1. Getting rid of stdio</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#critical-error\">3.7.2. Critical error handling</a></span></dt>\n</dl></dd>\n<dt><span class=\"sect1\"><a href=\"#win-dll\">3.8. Making a Windows DLL</a></span></dt>\n</dl></dd>\n<dt><span class=\"chapter\"><a href=\"#misc\">4. Miscellanea</a></span></dt>\n<dd><dl>\n<dt><span class=\"sect1\"><a href=\"#limits\">4.1. Limitations of the compressed file format</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#port-issues\">4.2. Portability issues</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#bugs\">4.3. Reporting bugs</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#package\">4.4. Did you get the right package?</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#reading\">4.5. Further Reading</a></span></dt>\n</dl></dd>\n</dl>\n</div>\n<div class=\"chapter\" title=\"1.Introduction\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\">\n<a name=\"intro\"></a>1.Introduction</h2></div></div></div>\n<p><code class=\"computeroutput\">bzip2</code> compresses files\nusing the Burrows-Wheeler block-sorting text compression\nalgorithm, and Huffman coding.  Compression is generally\nconsiderably better than that achieved by more conventional\nLZ77/LZ78-based compressors, and approaches the performance of\nthe PPM family of statistical compressors.</p>\n<p><code class=\"computeroutput\">bzip2</code> is built on top of\n<code class=\"computeroutput\">libbzip2</code>, a flexible library for\nhandling compressed data in the\n<code class=\"computeroutput\">bzip2</code> format.  This manual\ndescribes both how to use the program and how to work with the\nlibrary interface.  Most of the manual is devoted to this\nlibrary, not the program, which is good news if your interest is\nonly in the program.</p>\n<div class=\"itemizedlist\"><ul class=\"itemizedlist\" type=\"bullet\">\n<li class=\"listitem\" style=\"list-style-type: disc\"><p><a class=\"xref\" href=\"#using\" title=\"2.How to use bzip2\">How to use bzip2</a> describes how to use\n <code class=\"computeroutput\">bzip2</code>; this is the only part\n you need to read if you just want to know how to operate the\n program.</p></li>\n<li class=\"listitem\" style=\"list-style-type: disc\"><p><a class=\"xref\" href=\"#libprog\" title=\"3. Programming with libbzip2\">Programming with libbzip2</a> describes the\n programming interfaces in detail, and</p></li>\n<li class=\"listitem\" style=\"list-style-type: disc\"><p><a class=\"xref\" href=\"#misc\" title=\"4.Miscellanea\">Miscellanea</a> records some\n miscellaneous notes which I thought ought to be recorded\n somewhere.</p></li>\n</ul></div>\n</div>\n<div class=\"chapter\" title=\"2.How to use bzip2\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\">\n<a name=\"using\"></a>2.How to use bzip2</h2></div></div></div>\n<div class=\"toc\">\n<p><b>Table of Contents</b></p>\n<dl>\n<dt><span class=\"sect1\"><a href=\"#name\">2.1. NAME</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#synopsis\">2.2. SYNOPSIS</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#description\">2.3. DESCRIPTION</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#options\">2.4. OPTIONS</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#memory-management\">2.5. MEMORY MANAGEMENT</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#recovering\">2.6. RECOVERING DATA FROM DAMAGED FILES</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#performance\">2.7. PERFORMANCE NOTES</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#caveats\">2.8. CAVEATS</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#author\">2.9. AUTHOR</a></span></dt>\n</dl>\n</div>\n<p>This chapter contains a copy of the\n<code class=\"computeroutput\">bzip2</code> man page, and nothing\nelse.</p>\n<div class=\"sect1\" title=\"2.1.NAME\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\" style=\"clear: both\">\n<a name=\"name\"></a>2.1.NAME</h2></div></div></div>\n<div class=\"itemizedlist\"><ul class=\"itemizedlist\" type=\"bullet\">\n<li class=\"listitem\" style=\"list-style-type: disc\"><p><code class=\"computeroutput\">bzip2</code>,\n  <code class=\"computeroutput\">bunzip2</code> - a block-sorting file\n  compressor, v1.0.6</p></li>\n<li class=\"listitem\" style=\"list-style-type: disc\"><p><code class=\"computeroutput\">bzcat</code> -\n   decompresses files to stdout</p></li>\n<li class=\"listitem\" style=\"list-style-type: disc\"><p><code class=\"computeroutput\">bzip2recover</code> -\n   recovers data from damaged bzip2 files</p></li>\n</ul></div>\n</div>\n<div class=\"sect1\" title=\"2.2.SYNOPSIS\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\" style=\"clear: both\">\n<a name=\"synopsis\"></a>2.2.SYNOPSIS</h2></div></div></div>\n<div class=\"itemizedlist\"><ul class=\"itemizedlist\" type=\"bullet\">\n<li class=\"listitem\" style=\"list-style-type: disc\"><p><code class=\"computeroutput\">bzip2</code> [\n  -cdfkqstvzVL123456789 ] [ filenames ...  ]</p></li>\n<li class=\"listitem\" style=\"list-style-type: disc\"><p><code class=\"computeroutput\">bunzip2</code> [\n  -fkvsVL ] [ filenames ...  ]</p></li>\n<li class=\"listitem\" style=\"list-style-type: disc\"><p><code class=\"computeroutput\">bzcat</code> [ -s ] [\n  filenames ...  ]</p></li>\n<li class=\"listitem\" style=\"list-style-type: disc\"><p><code class=\"computeroutput\">bzip2recover</code>\n  filename</p></li>\n</ul></div>\n</div>\n<div class=\"sect1\" title=\"2.3.DESCRIPTION\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\" style=\"clear: both\">\n<a name=\"description\"></a>2.3.DESCRIPTION</h2></div></div></div>\n<p><code class=\"computeroutput\">bzip2</code> compresses files\nusing the Burrows-Wheeler block sorting text compression\nalgorithm, and Huffman coding.  Compression is generally\nconsiderably better than that achieved by more conventional\nLZ77/LZ78-based compressors, and approaches the performance of\nthe PPM family of statistical compressors.</p>\n<p>The command-line options are deliberately very similar to\nthose of GNU <code class=\"computeroutput\">gzip</code>, but they are\nnot identical.</p>\n<p><code class=\"computeroutput\">bzip2</code> expects a list of\nfile names to accompany the command-line flags.  Each file is\nreplaced by a compressed version of itself, with the name\n<code class=\"computeroutput\">original_name.bz2</code>.  Each\ncompressed file has the same modification date, permissions, and,\nwhen possible, ownership as the corresponding original, so that\nthese properties can be correctly restored at decompression time.\nFile name handling is naive in the sense that there is no\nmechanism for preserving original file names, permissions,\nownerships or dates in filesystems which lack these concepts, or\nhave serious file name length restrictions, such as\nMS-DOS.</p>\n<p><code class=\"computeroutput\">bzip2</code> and\n<code class=\"computeroutput\">bunzip2</code> will by default not\noverwrite existing files.  If you want this to happen, specify\nthe <code class=\"computeroutput\">-f</code> flag.</p>\n<p>If no file names are specified,\n<code class=\"computeroutput\">bzip2</code> compresses from standard\ninput to standard output.  In this case,\n<code class=\"computeroutput\">bzip2</code> will decline to write\ncompressed output to a terminal, as this would be entirely\nincomprehensible and therefore pointless.</p>\n<p><code class=\"computeroutput\">bunzip2</code> (or\n<code class=\"computeroutput\">bzip2 -d</code>) decompresses all\nspecified files.  Files which were not created by\n<code class=\"computeroutput\">bzip2</code> will be detected and\nignored, and a warning issued.\n<code class=\"computeroutput\">bzip2</code> attempts to guess the\nfilename for the decompressed file from that of the compressed\nfile as follows:</p>\n<div class=\"itemizedlist\"><ul class=\"itemizedlist\" type=\"bullet\">\n<li class=\"listitem\" style=\"list-style-type: disc\"><p><code class=\"computeroutput\">filename.bz2 </code>\n  becomes\n  <code class=\"computeroutput\">filename</code></p></li>\n<li class=\"listitem\" style=\"list-style-type: disc\"><p><code class=\"computeroutput\">filename.bz </code>\n  becomes\n  <code class=\"computeroutput\">filename</code></p></li>\n<li class=\"listitem\" style=\"list-style-type: disc\"><p><code class=\"computeroutput\">filename.tbz2</code>\n  becomes\n  <code class=\"computeroutput\">filename.tar</code></p></li>\n<li class=\"listitem\" style=\"list-style-type: disc\"><p><code class=\"computeroutput\">filename.tbz </code>\n  becomes\n  <code class=\"computeroutput\">filename.tar</code></p></li>\n<li class=\"listitem\" style=\"list-style-type: disc\"><p><code class=\"computeroutput\">anyothername </code>\n  becomes\n  <code class=\"computeroutput\">anyothername.out</code></p></li>\n</ul></div>\n<p>If the file does not end in one of the recognised endings,\n<code class=\"computeroutput\">.bz2</code>,\n<code class=\"computeroutput\">.bz</code>,\n<code class=\"computeroutput\">.tbz2</code> or\n<code class=\"computeroutput\">.tbz</code>,\n<code class=\"computeroutput\">bzip2</code> complains that it cannot\nguess the name of the original file, and uses the original name\nwith <code class=\"computeroutput\">.out</code> appended.</p>\n<p>As with compression, supplying no filenames causes\ndecompression from standard input to standard output.</p>\n<p><code class=\"computeroutput\">bunzip2</code> will correctly\ndecompress a file which is the concatenation of two or more\ncompressed files.  The result is the concatenation of the\ncorresponding uncompressed files.  Integrity testing\n(<code class=\"computeroutput\">-t</code>) of concatenated compressed\nfiles is also supported.</p>\n<p>You can also compress or decompress files to the standard\noutput by giving the <code class=\"computeroutput\">-c</code> flag.\nMultiple files may be compressed and decompressed like this.  The\nresulting outputs are fed sequentially to stdout.  Compression of\nmultiple files in this manner generates a stream containing\nmultiple compressed file representations.  Such a stream can be\ndecompressed correctly only by\n<code class=\"computeroutput\">bzip2</code> version 0.9.0 or later.\nEarlier versions of <code class=\"computeroutput\">bzip2</code> will\nstop after decompressing the first file in the stream.</p>\n<p><code class=\"computeroutput\">bzcat</code> (or\n<code class=\"computeroutput\">bzip2 -dc</code>) decompresses all\nspecified files to the standard output.</p>\n<p><code class=\"computeroutput\">bzip2</code> will read arguments\nfrom the environment variables\n<code class=\"computeroutput\">BZIP2</code> and\n<code class=\"computeroutput\">BZIP</code>, in that order, and will\nprocess them before any arguments read from the command line.\nThis gives a convenient way to supply default arguments.</p>\n<p>Compression is always performed, even if the compressed\nfile is slightly larger than the original.  Files of less than\nabout one hundred bytes tend to get larger, since the compression\nmechanism has a constant overhead in the region of 50 bytes.\nRandom data (including the output of most file compressors) is\ncoded at about 8.05 bits per byte, giving an expansion of around\n0.5%.</p>\n<p>As a self-check for your protection,\n<code class=\"computeroutput\">bzip2</code> uses 32-bit CRCs to make\nsure that the decompressed version of a file is identical to the\noriginal.  This guards against corruption of the compressed data,\nand against undetected bugs in\n<code class=\"computeroutput\">bzip2</code> (hopefully very unlikely).\nThe chances of data corruption going undetected is microscopic,\nabout one chance in four billion for each file processed.  Be\naware, though, that the check occurs upon decompression, so it\ncan only tell you that something is wrong.  It can't help you\nrecover the original uncompressed data.  You can use\n<code class=\"computeroutput\">bzip2recover</code> to try to recover\ndata from damaged files.</p>\n<p>Return values: 0 for a normal exit, 1 for environmental\nproblems (file not found, invalid flags, I/O errors, etc.), 2\nto indicate a corrupt compressed file, 3 for an internal\nconsistency error (eg, bug) which caused\n<code class=\"computeroutput\">bzip2</code> to panic.</p>\n</div>\n<div class=\"sect1\" title=\"2.4.OPTIONS\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\" style=\"clear: both\">\n<a name=\"options\"></a>2.4.OPTIONS</h2></div></div></div>\n<div class=\"variablelist\"><dl>\n<dt><span class=\"term\"><code class=\"computeroutput\">-c --stdout</code></span></dt>\n<dd><p>Compress or decompress to standard\n  output.</p></dd>\n<dt><span class=\"term\"><code class=\"computeroutput\">-d --decompress</code></span></dt>\n<dd><p>Force decompression.\n  <code class=\"computeroutput\">bzip2</code>,\n  <code class=\"computeroutput\">bunzip2</code> and\n  <code class=\"computeroutput\">bzcat</code> are really the same\n  program, and the decision about what actions to take is done on\n  the basis of which name is used.  This flag overrides that\n  mechanism, and forces bzip2 to decompress.</p></dd>\n<dt><span class=\"term\"><code class=\"computeroutput\">-z --compress</code></span></dt>\n<dd><p>The complement to\n  <code class=\"computeroutput\">-d</code>: forces compression,\n  regardless of the invokation name.</p></dd>\n<dt><span class=\"term\"><code class=\"computeroutput\">-t --test</code></span></dt>\n<dd><p>Check integrity of the specified file(s), but\n  don't decompress them.  This really performs a trial\n  decompression and throws away the result.</p></dd>\n<dt><span class=\"term\"><code class=\"computeroutput\">-f --force</code></span></dt>\n<dd>\n<p>Force overwrite of output files.  Normally,\n  <code class=\"computeroutput\">bzip2</code> will not overwrite\n  existing output files.  Also forces\n  <code class=\"computeroutput\">bzip2</code> to break hard links to\n  files, which it otherwise wouldn't do.</p>\n<p><code class=\"computeroutput\">bzip2</code> normally declines\n  to decompress files which don't have the correct magic header\n  bytes. If forced (<code class=\"computeroutput\">-f</code>),\n  however, it will pass such files through unmodified. This is\n  how GNU <code class=\"computeroutput\">gzip</code> behaves.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"computeroutput\">-k --keep</code></span></dt>\n<dd><p>Keep (don't delete) input files during\n  compression or decompression.</p></dd>\n<dt><span class=\"term\"><code class=\"computeroutput\">-s --small</code></span></dt>\n<dd>\n<p>Reduce memory usage, for compression,\n  decompression and testing.  Files are decompressed and tested\n  using a modified algorithm which only requires 2.5 bytes per\n  block byte.  This means any file can be decompressed in 2300k\n  of memory, albeit at about half the normal speed.</p>\n<p>During compression, <code class=\"computeroutput\">-s</code>\n  selects a block size of 200k, which limits memory use to around\n  the same figure, at the expense of your compression ratio.  In\n  short, if your machine is low on memory (8 megabytes or less),\n  use <code class=\"computeroutput\">-s</code> for everything.  See\n  <a class=\"xref\" href=\"#memory-management\" title=\"2.5.MEMORY MANAGEMENT\">MEMORY MANAGEMENT</a> below.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"computeroutput\">-q --quiet</code></span></dt>\n<dd><p>Suppress non-essential warning messages.\n  Messages pertaining to I/O errors and other critical events\n  will not be suppressed.</p></dd>\n<dt><span class=\"term\"><code class=\"computeroutput\">-v --verbose</code></span></dt>\n<dd><p>Verbose mode -- show the compression ratio for\n  each file processed.  Further\n  <code class=\"computeroutput\">-v</code>'s increase the verbosity\n  level, spewing out lots of information which is primarily of\n  interest for diagnostic purposes.</p></dd>\n<dt><span class=\"term\"><code class=\"computeroutput\">-L --license -V --version</code></span></dt>\n<dd><p>Display the software version, license terms and\n  conditions.</p></dd>\n<dt><span class=\"term\"><code class=\"computeroutput\">-1</code> (or\n <code class=\"computeroutput\">--fast</code>) to\n <code class=\"computeroutput\">-9</code> (or\n <code class=\"computeroutput\">-best</code>)</span></dt>\n<dd><p>Set the block size to 100 k, 200 k ...  900 k\n  when compressing.  Has no effect when decompressing.  See <a class=\"xref\" href=\"#memory-management\" title=\"2.5.MEMORY MANAGEMENT\">MEMORY MANAGEMENT</a> below.  The\n  <code class=\"computeroutput\">--fast</code> and\n  <code class=\"computeroutput\">--best</code> aliases are primarily\n  for GNU <code class=\"computeroutput\">gzip</code> compatibility.\n  In particular, <code class=\"computeroutput\">--fast</code> doesn't\n  make things significantly faster.  And\n  <code class=\"computeroutput\">--best</code> merely selects the\n  default behaviour.</p></dd>\n<dt><span class=\"term\"><code class=\"computeroutput\">--</code></span></dt>\n<dd><p>Treats all subsequent arguments as file names,\n  even if they start with a dash.  This is so you can handle\n  files with names beginning with a dash, for example:\n  <code class=\"computeroutput\">bzip2 --\n  -myfilename</code>.</p></dd>\n<dt>\n<span class=\"term\"><code class=\"computeroutput\">--repetitive-fast</code>, </span><span class=\"term\"><code class=\"computeroutput\">--repetitive-best</code></span>\n</dt>\n<dd><p>These flags are redundant in versions 0.9.5 and\n  above.  They provided some coarse control over the behaviour of\n  the sorting algorithm in earlier versions, which was sometimes\n  useful.  0.9.5 and above have an improved algorithm which\n  renders these flags irrelevant.</p></dd>\n</dl></div>\n</div>\n<div class=\"sect1\" title=\"2.5.MEMORY MANAGEMENT\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\" style=\"clear: both\">\n<a name=\"memory-management\"></a>2.5.MEMORY MANAGEMENT</h2></div></div></div>\n<p><code class=\"computeroutput\">bzip2</code> compresses large\nfiles in blocks.  The block size affects both the compression\nratio achieved, and the amount of memory needed for compression\nand decompression.  The flags <code class=\"computeroutput\">-1</code>\nthrough <code class=\"computeroutput\">-9</code> specify the block\nsize to be 100,000 bytes through 900,000 bytes (the default)\nrespectively.  At decompression time, the block size used for\ncompression is read from the header of the compressed file, and\n<code class=\"computeroutput\">bunzip2</code> then allocates itself\njust enough memory to decompress the file.  Since block sizes are\nstored in compressed files, it follows that the flags\n<code class=\"computeroutput\">-1</code> to\n<code class=\"computeroutput\">-9</code> are irrelevant to and so\nignored during decompression.</p>\n<p>Compression and decompression requirements, in bytes, can be\nestimated as:</p>\n<pre class=\"programlisting\">Compression:   400k + ( 8 x block size )\n\nDecompression: 100k + ( 4 x block size ), or\n               100k + ( 2.5 x block size )</pre>\n<p>Larger block sizes give rapidly diminishing marginal\nreturns.  Most of the compression comes from the first two or\nthree hundred k of block size, a fact worth bearing in mind when\nusing <code class=\"computeroutput\">bzip2</code> on small machines.\nIt is also important to appreciate that the decompression memory\nrequirement is set at compression time by the choice of block\nsize.</p>\n<p>For files compressed with the default 900k block size,\n<code class=\"computeroutput\">bunzip2</code> will require about 3700\nkbytes to decompress.  To support decompression of any file on a\n4 megabyte machine, <code class=\"computeroutput\">bunzip2</code> has\nan option to decompress using approximately half this amount of\nmemory, about 2300 kbytes.  Decompression speed is also halved,\nso you should use this option only where necessary.  The relevant\nflag is <code class=\"computeroutput\">-s</code>.</p>\n<p>In general, try and use the largest block size memory\nconstraints allow, since that maximises the compression achieved.\nCompression and decompression speed are virtually unaffected by\nblock size.</p>\n<p>Another significant point applies to files which fit in a\nsingle block -- that means most files you'd encounter using a\nlarge block size.  The amount of real memory touched is\nproportional to the size of the file, since the file is smaller\nthan a block.  For example, compressing a file 20,000 bytes long\nwith the flag <code class=\"computeroutput\">-9</code> will cause the\ncompressor to allocate around 7600k of memory, but only touch\n400k + 20000 * 8 = 560 kbytes of it.  Similarly, the decompressor\nwill allocate 3700k but only touch 100k + 20000 * 4 = 180\nkbytes.</p>\n<p>Here is a table which summarises the maximum memory usage\nfor different block sizes.  Also recorded is the total compressed\nsize for 14 files of the Calgary Text Compression Corpus\ntotalling 3,141,622 bytes.  This column gives some feel for how\ncompression varies with block size.  These figures tend to\nunderstate the advantage of larger block sizes for larger files,\nsince the Corpus is dominated by smaller files.</p>\n<pre class=\"programlisting\">        Compress   Decompress   Decompress   Corpus\nFlag     usage      usage       -s usage     Size\n\n -1      1200k       500k         350k      914704\n -2      2000k       900k         600k      877703\n -3      2800k      1300k         850k      860338\n -4      3600k      1700k        1100k      846899\n -5      4400k      2100k        1350k      845160\n -6      5200k      2500k        1600k      838626\n -7      6100k      2900k        1850k      834096\n -8      6800k      3300k        2100k      828642\n -9      7600k      3700k        2350k      828642</pre>\n</div>\n<div class=\"sect1\" title=\"2.6.RECOVERING DATA FROM DAMAGED FILES\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\" style=\"clear: both\">\n<a name=\"recovering\"></a>2.6.RECOVERING DATA FROM DAMAGED FILES</h2></div></div></div>\n<p><code class=\"computeroutput\">bzip2</code> compresses files in\nblocks, usually 900kbytes long.  Each block is handled\nindependently.  If a media or transmission error causes a\nmulti-block <code class=\"computeroutput\">.bz2</code> file to become\ndamaged, it may be possible to recover data from the undamaged\nblocks in the file.</p>\n<p>The compressed representation of each block is delimited by\na 48-bit pattern, which makes it possible to find the block\nboundaries with reasonable certainty.  Each block also carries\nits own 32-bit CRC, so damaged blocks can be distinguished from\nundamaged ones.</p>\n<p><code class=\"computeroutput\">bzip2recover</code> is a simple\nprogram whose purpose is to search for blocks in\n<code class=\"computeroutput\">.bz2</code> files, and write each block\nout into its own <code class=\"computeroutput\">.bz2</code> file.  You\ncan then use <code class=\"computeroutput\">bzip2 -t</code> to test\nthe integrity of the resulting files, and decompress those which\nare undamaged.</p>\n<p><code class=\"computeroutput\">bzip2recover</code> takes a\nsingle argument, the name of the damaged file, and writes a\nnumber of files <code class=\"computeroutput\">rec0001file.bz2</code>,\n<code class=\"computeroutput\">rec0002file.bz2</code>, etc, containing\nthe extracted blocks.  The output filenames are designed so that\nthe use of wildcards in subsequent processing -- for example,\n<code class=\"computeroutput\">bzip2 -dc rec*file.bz2 &gt;\nrecovered_data</code> -- lists the files in the correct\norder.</p>\n<p><code class=\"computeroutput\">bzip2recover</code> should be of\nmost use dealing with large <code class=\"computeroutput\">.bz2</code>\nfiles, as these will contain many blocks.  It is clearly futile\nto use it on damaged single-block files, since a damaged block\ncannot be recovered.  If you wish to minimise any potential data\nloss through media or transmission errors, you might consider\ncompressing with a smaller block size.</p>\n</div>\n<div class=\"sect1\" title=\"2.7.PERFORMANCE NOTES\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\" style=\"clear: both\">\n<a name=\"performance\"></a>2.7.PERFORMANCE NOTES</h2></div></div></div>\n<p>The sorting phase of compression gathers together similar\nstrings in the file.  Because of this, files containing very long\nruns of repeated symbols, like \"aabaabaabaab ...\"  (repeated\nseveral hundred times) may compress more slowly than normal.\nVersions 0.9.5 and above fare much better than previous versions\nin this respect.  The ratio between worst-case and average-case\ncompression time is in the region of 10:1.  For previous\nversions, this figure was more like 100:1.  You can use the\n<code class=\"computeroutput\">-vvvv</code> option to monitor progress\nin great detail, if you want.</p>\n<p>Decompression speed is unaffected by these\nphenomena.</p>\n<p><code class=\"computeroutput\">bzip2</code> usually allocates\nseveral megabytes of memory to operate in, and then charges all\nover it in a fairly random fashion.  This means that performance,\nboth for compressing and decompressing, is largely determined by\nthe speed at which your machine can service cache misses.\nBecause of this, small changes to the code to reduce the miss\nrate have been observed to give disproportionately large\nperformance improvements.  I imagine\n<code class=\"computeroutput\">bzip2</code> will perform best on\nmachines with very large caches.</p>\n</div>\n<div class=\"sect1\" title=\"2.8.CAVEATS\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\" style=\"clear: both\">\n<a name=\"caveats\"></a>2.8.CAVEATS</h2></div></div></div>\n<p>I/O error messages are not as helpful as they could be.\n<code class=\"computeroutput\">bzip2</code> tries hard to detect I/O\nerrors and exit cleanly, but the details of what the problem is\nsometimes seem rather misleading.</p>\n<p>This manual page pertains to version 1.0.6 of\n<code class=\"computeroutput\">bzip2</code>.  Compressed data created by\nthis version is entirely forwards and backwards compatible with the\nprevious public releases, versions 0.1pl2, 0.9.0 and 0.9.5, 1.0.0,\n1.0.1, 1.0.2 and 1.0.3, but with the following exception: 0.9.0 and\nabove can correctly decompress multiple concatenated compressed files.\n0.1pl2 cannot do this; it will stop after decompressing just the first\nfile in the stream.</p>\n<p><code class=\"computeroutput\">bzip2recover</code> versions\nprior to 1.0.2 used 32-bit integers to represent bit positions in\ncompressed files, so it could not handle compressed files more\nthan 512 megabytes long.  Versions 1.0.2 and above use 64-bit ints\non some platforms which support them (GNU supported targets, and\nWindows). To establish whether or not\n<code class=\"computeroutput\">bzip2recover</code> was built with such\na limitation, run it without arguments. In any event you can\nbuild yourself an unlimited version if you can recompile it with\n<code class=\"computeroutput\">MaybeUInt64</code> set to be an\nunsigned 64-bit integer.</p>\n</div>\n<div class=\"sect1\" title=\"2.9.AUTHOR\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\" style=\"clear: both\">\n<a name=\"author\"></a>2.9.AUTHOR</h2></div></div></div>\n<p>Julian Seward,\n<code class=\"computeroutput\">jseward@bzip.org</code></p>\n<p>The ideas embodied in\n<code class=\"computeroutput\">bzip2</code> are due to (at least) the\nfollowing people: Michael Burrows and David Wheeler (for the\nblock sorting transformation), David Wheeler (again, for the\nHuffman coder), Peter Fenwick (for the structured coding model in\nthe original <code class=\"computeroutput\">bzip</code>, and many\nrefinements), and Alistair Moffat, Radford Neal and Ian Witten\n(for the arithmetic coder in the original\n<code class=\"computeroutput\">bzip</code>).  I am much indebted for\ntheir help, support and advice.  See the manual in the source\ndistribution for pointers to sources of documentation.  Christian\nvon Roques encouraged me to look for faster sorting algorithms,\nso as to speed up compression.  Bela Lubkin encouraged me to\nimprove the worst-case compression performance.  \nDonna Robinson XMLised the documentation.\nMany people sent\npatches, helped with portability problems, lent machines, gave\nadvice and were generally helpful.</p>\n</div>\n</div>\n<div class=\"chapter\" title=\"3. Programming with libbzip2\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\">\n<a name=\"libprog\"></a>3.\nProgramming with <code class=\"computeroutput\">libbzip2</code>\n</h2></div></div></div>\n<div class=\"toc\">\n<p><b>Table of Contents</b></p>\n<dl>\n<dt><span class=\"sect1\"><a href=\"#top-level\">3.1. Top-level structure</a></span></dt>\n<dd><dl>\n<dt><span class=\"sect2\"><a href=\"#ll-summary\">3.1.1. Low-level summary</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#hl-summary\">3.1.2. High-level summary</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#util-fns-summary\">3.1.3. Utility functions summary</a></span></dt>\n</dl></dd>\n<dt><span class=\"sect1\"><a href=\"#err-handling\">3.2. Error handling</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#low-level\">3.3. Low-level interface</a></span></dt>\n<dd><dl>\n<dt><span class=\"sect2\"><a href=\"#bzcompress-init\">3.3.1. BZ2_bzCompressInit</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzCompress\">3.3.2. BZ2_bzCompress</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzCompress-end\">3.3.3. BZ2_bzCompressEnd</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzDecompress-init\">3.3.4. BZ2_bzDecompressInit</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzDecompress\">3.3.5. BZ2_bzDecompress</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzDecompress-end\">3.3.6. BZ2_bzDecompressEnd</a></span></dt>\n</dl></dd>\n<dt><span class=\"sect1\"><a href=\"#hl-interface\">3.4. High-level interface</a></span></dt>\n<dd><dl>\n<dt><span class=\"sect2\"><a href=\"#bzreadopen\">3.4.1. BZ2_bzReadOpen</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzread\">3.4.2. BZ2_bzRead</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzreadgetunused\">3.4.3. BZ2_bzReadGetUnused</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzreadclose\">3.4.4. BZ2_bzReadClose</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzwriteopen\">3.4.5. BZ2_bzWriteOpen</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzwrite\">3.4.6. BZ2_bzWrite</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzwriteclose\">3.4.7. BZ2_bzWriteClose</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#embed\">3.4.8. Handling embedded compressed data streams</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#std-rdwr\">3.4.9. Standard file-reading/writing code</a></span></dt>\n</dl></dd>\n<dt><span class=\"sect1\"><a href=\"#util-fns\">3.5. Utility functions</a></span></dt>\n<dd><dl>\n<dt><span class=\"sect2\"><a href=\"#bzbufftobuffcompress\">3.5.1. BZ2_bzBuffToBuffCompress</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#bzbufftobuffdecompress\">3.5.2. BZ2_bzBuffToBuffDecompress</a></span></dt>\n</dl></dd>\n<dt><span class=\"sect1\"><a href=\"#zlib-compat\">3.6. zlib compatibility functions</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#stdio-free\">3.7. Using the library in a stdio-free environment</a></span></dt>\n<dd><dl>\n<dt><span class=\"sect2\"><a href=\"#stdio-bye\">3.7.1. Getting rid of stdio</a></span></dt>\n<dt><span class=\"sect2\"><a href=\"#critical-error\">3.7.2. Critical error handling</a></span></dt>\n</dl></dd>\n<dt><span class=\"sect1\"><a href=\"#win-dll\">3.8. Making a Windows DLL</a></span></dt>\n</dl>\n</div>\n<p>This chapter describes the programming interface to\n<code class=\"computeroutput\">libbzip2</code>.</p>\n<p>For general background information, particularly about\nmemory use and performance aspects, you'd be well advised to read\n<a class=\"xref\" href=\"#using\" title=\"2.How to use bzip2\">How to use bzip2</a> as well.</p>\n<div class=\"sect1\" title=\"3.1.Top-level structure\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\" style=\"clear: both\">\n<a name=\"top-level\"></a>3.1.Top-level structure</h2></div></div></div>\n<p><code class=\"computeroutput\">libbzip2</code> is a flexible\nlibrary for compressing and decompressing data in the\n<code class=\"computeroutput\">bzip2</code> data format.  Although\npackaged as a single entity, it helps to regard the library as\nthree separate parts: the low level interface, and the high level\ninterface, and some utility functions.</p>\n<p>The structure of\n<code class=\"computeroutput\">libbzip2</code>'s interfaces is similar\nto that of Jean-loup Gailly's and Mark Adler's excellent\n<code class=\"computeroutput\">zlib</code> library.</p>\n<p>All externally visible symbols have names beginning\n<code class=\"computeroutput\">BZ2_</code>.  This is new in version\n1.0.  The intention is to minimise pollution of the namespaces of\nlibrary clients.</p>\n<p>To use any part of the library, you need to\n<code class=\"computeroutput\">#include &lt;bzlib.h&gt;</code>\ninto your sources.</p>\n<div class=\"sect2\" title=\"3.1.1.Low-level summary\">\n<div class=\"titlepage\"><div><div><h3 class=\"title\">\n<a name=\"ll-summary\"></a>3.1.1.Low-level summary</h3></div></div></div>\n<p>This interface provides services for compressing and\ndecompressing data in memory.  There's no provision for dealing\nwith files, streams or any other I/O mechanisms, just straight\nmemory-to-memory work.  In fact, this part of the library can be\ncompiled without inclusion of\n<code class=\"computeroutput\">stdio.h</code>, which may be helpful\nfor embedded applications.</p>\n<p>The low-level part of the library has no global variables\nand is therefore thread-safe.</p>\n<p>Six routines make up the low level interface:\n<code class=\"computeroutput\">BZ2_bzCompressInit</code>,\n<code class=\"computeroutput\">BZ2_bzCompress</code>, and\n<code class=\"computeroutput\">BZ2_bzCompressEnd</code> for\ncompression, and a corresponding trio\n<code class=\"computeroutput\">BZ2_bzDecompressInit</code>,\n<code class=\"computeroutput\">BZ2_bzDecompress</code> and\n<code class=\"computeroutput\">BZ2_bzDecompressEnd</code> for\ndecompression.  The <code class=\"computeroutput\">*Init</code>\nfunctions allocate memory for compression/decompression and do\nother initialisations, whilst the\n<code class=\"computeroutput\">*End</code> functions close down\noperations and release memory.</p>\n<p>The real work is done by\n<code class=\"computeroutput\">BZ2_bzCompress</code> and\n<code class=\"computeroutput\">BZ2_bzDecompress</code>.  These\ncompress and decompress data from a user-supplied input buffer to\na user-supplied output buffer.  These buffers can be any size;\narbitrary quantities of data are handled by making repeated calls\nto these functions.  This is a flexible mechanism allowing a\nconsumer-pull style of activity, or producer-push, or a mixture\nof both.</p>\n</div>\n<div class=\"sect2\" title=\"3.1.2.High-level summary\">\n<div class=\"titlepage\"><div><div><h3 class=\"title\">\n<a name=\"hl-summary\"></a>3.1.2.High-level summary</h3></div></div></div>\n<p>This interface provides some handy wrappers around the\nlow-level interface to facilitate reading and writing\n<code class=\"computeroutput\">bzip2</code> format files\n(<code class=\"computeroutput\">.bz2</code> files).  The routines\nprovide hooks to facilitate reading files in which the\n<code class=\"computeroutput\">bzip2</code> data stream is embedded\nwithin some larger-scale file structure, or where there are\nmultiple <code class=\"computeroutput\">bzip2</code> data streams\nconcatenated end-to-end.</p>\n<p>For reading files,\n<code class=\"computeroutput\">BZ2_bzReadOpen</code>,\n<code class=\"computeroutput\">BZ2_bzRead</code>,\n<code class=\"computeroutput\">BZ2_bzReadClose</code> and \n<code class=\"computeroutput\">BZ2_bzReadGetUnused</code> are\nsupplied.  For writing files,\n<code class=\"computeroutput\">BZ2_bzWriteOpen</code>,\n<code class=\"computeroutput\">BZ2_bzWrite</code> and\n<code class=\"computeroutput\">BZ2_bzWriteFinish</code> are\navailable.</p>\n<p>As with the low-level library, no global variables are used\nso the library is per se thread-safe.  However, if I/O errors\noccur whilst reading or writing the underlying compressed files,\nyou may have to consult <code class=\"computeroutput\">errno</code> to\ndetermine the cause of the error.  In that case, you'd need a C\nlibrary which correctly supports\n<code class=\"computeroutput\">errno</code> in a multithreaded\nenvironment.</p>\n<p>To make the library a little simpler and more portable,\n<code class=\"computeroutput\">BZ2_bzReadOpen</code> and\n<code class=\"computeroutput\">BZ2_bzWriteOpen</code> require you to\npass them file handles (<code class=\"computeroutput\">FILE*</code>s)\nwhich have previously been opened for reading or writing\nrespectively.  That avoids portability problems associated with\nfile operations and file attributes, whilst not being much of an\nimposition on the programmer.</p>\n</div>\n<div class=\"sect2\" title=\"3.1.3.Utility functions summary\">\n<div class=\"titlepage\"><div><div><h3 class=\"title\">\n<a name=\"util-fns-summary\"></a>3.1.3.Utility functions summary</h3></div></div></div>\n<p>For very simple needs,\n<code class=\"computeroutput\">BZ2_bzBuffToBuffCompress</code> and\n<code class=\"computeroutput\">BZ2_bzBuffToBuffDecompress</code> are\nprovided.  These compress data in memory from one buffer to\nanother buffer in a single function call.  You should assess\nwhether these functions fulfill your memory-to-memory\ncompression/decompression requirements before investing effort in\nunderstanding the more general but more complex low-level\ninterface.</p>\n<p>Yoshioka Tsuneo\n(<code class=\"computeroutput\">tsuneo@rr.iij4u.or.jp</code>) has\ncontributed some functions to give better\n<code class=\"computeroutput\">zlib</code> compatibility.  These\nfunctions are <code class=\"computeroutput\">BZ2_bzopen</code>,\n<code class=\"computeroutput\">BZ2_bzread</code>,\n<code class=\"computeroutput\">BZ2_bzwrite</code>,\n<code class=\"computeroutput\">BZ2_bzflush</code>,\n<code class=\"computeroutput\">BZ2_bzclose</code>,\n<code class=\"computeroutput\">BZ2_bzerror</code> and\n<code class=\"computeroutput\">BZ2_bzlibVersion</code>.  You may find\nthese functions more convenient for simple file reading and\nwriting, than those in the high-level interface.  These functions\nare not (yet) officially part of the library, and are minimally\ndocumented here.  If they break, you get to keep all the pieces.\nI hope to document them properly when time permits.</p>\n<p>Yoshioka also contributed modifications to allow the\nlibrary to be built as a Windows DLL.</p>\n</div>\n</div>\n<div class=\"sect1\" title=\"3.2.Error handling\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\" style=\"clear: both\">\n<a name=\"err-handling\"></a>3.2.Error handling</h2></div></div></div>\n<p>The library is designed to recover cleanly in all\nsituations, including the worst-case situation of decompressing\nrandom data.  I'm not 100% sure that it can always do this, so\nyou might want to add a signal handler to catch segmentation\nviolations during decompression if you are feeling especially\nparanoid.  I would be interested in hearing more about the\nrobustness of the library to corrupted compressed data.</p>\n<p>Version 1.0.3 more robust in this respect than any\nprevious version.  Investigations with Valgrind (a tool for detecting\nproblems with memory management) indicate\nthat, at least for the few files I tested, all single-bit errors\nin the decompressed data are caught properly, with no\nsegmentation faults, no uses of uninitialised data, no out of\nrange reads or writes, and no infinite looping in the decompressor.\nSo it's certainly pretty robust, although\nI wouldn't claim it to be totally bombproof.</p>\n<p>The file <code class=\"computeroutput\">bzlib.h</code> contains\nall definitions needed to use the library.  In particular, you\nshould definitely not include\n<code class=\"computeroutput\">bzlib_private.h</code>.</p>\n<p>In <code class=\"computeroutput\">bzlib.h</code>, the various\nreturn values are defined.  The following list is not intended as\nan exhaustive description of the circumstances in which a given\nvalue may be returned -- those descriptions are given later.\nRather, it is intended to convey the rough meaning of each return\nvalue.  The first five actions are normal and not intended to\ndenote an error situation.</p>\n<div class=\"variablelist\"><dl>\n<dt><span class=\"term\"><code class=\"computeroutput\">BZ_OK</code></span></dt>\n<dd><p>The requested action was completed\n   successfully.</p></dd>\n<dt><span class=\"term\"><code class=\"computeroutput\">BZ_RUN_OK, BZ_FLUSH_OK,\n    BZ_FINISH_OK</code></span></dt>\n<dd><p>In \n   <code class=\"computeroutput\">BZ2_bzCompress</code>, the requested\n   flush/finish/nothing-special action was completed\n   successfully.</p></dd>\n<dt><span class=\"term\"><code class=\"computeroutput\">BZ_STREAM_END</code></span></dt>\n<dd><p>Compression of data was completed, or the\n   logical stream end was detected during\n   decompression.</p></dd>\n</dl></div>\n<p>The following return values indicate an error of some\nkind.</p>\n<div class=\"variablelist\"><dl>\n<dt><span class=\"term\"><code class=\"computeroutput\">BZ_CONFIG_ERROR</code></span></dt>\n<dd><p>Indicates that the library has been improperly\n   compiled on your platform -- a major configuration error.\n   Specifically, it means that\n   <code class=\"computeroutput\">sizeof(char)</code>,\n   <code class=\"computeroutput\">sizeof(short)</code> and\n   <code class=\"computeroutput\">sizeof(int)</code> are not 1, 2 and\n   4 respectively, as they should be.  Note that the library\n   should still work properly on 64-bit platforms which follow\n   the LP64 programming model -- that is, where\n   <code class=\"computeroutput\">sizeof(long)</code> and\n   <code class=\"computeroutput\">sizeof(void*)</code> are 8.  Under\n   LP64, <code class=\"computeroutput\">sizeof(int)</code> is still 4,\n   so <code class=\"computeroutput\">libbzip2</code>, which doesn't\n   use the <code class=\"computeroutput\">long</code> type, is\n   OK.</p></dd>\n<dt><span class=\"term\"><code class=\"computeroutput\">BZ_SEQUENCE_ERROR</code></span></dt>\n<dd><p>When using the library, it is important to call\n   the functions in the correct sequence and with data structures\n   (buffers etc) in the correct states.\n   <code class=\"computeroutput\">libbzip2</code> checks as much as it\n   can to ensure this is happening, and returns\n   <code class=\"computeroutput\">BZ_SEQUENCE_ERROR</code> if not.\n   Code which complies precisely with the function semantics, as\n   detailed below, should never receive this value; such an event\n   denotes buggy code which you should\n   investigate.</p></dd>\n<dt><span class=\"term\"><code class=\"computeroutput\">BZ_PARAM_ERROR</code></span></dt>\n<dd><p>Returned when a parameter to a function call is\n   out of range or otherwise manifestly incorrect.  As with\n   <code class=\"computeroutput\">BZ_SEQUENCE_ERROR</code>, this\n   denotes a bug in the client code.  The distinction between\n   <code class=\"computeroutput\">BZ_PARAM_ERROR</code> and\n   <code class=\"computeroutput\">BZ_SEQUENCE_ERROR</code> is a bit\n   hazy, but still worth making.</p></dd>\n<dt><span class=\"term\"><code class=\"computeroutput\">BZ_MEM_ERROR</code></span></dt>\n<dd><p>Returned when a request to allocate memory\n   failed.  Note that the quantity of memory needed to decompress\n   a stream cannot be determined until the stream's header has\n   been read.  So\n   <code class=\"computeroutput\">BZ2_bzDecompress</code> and\n   <code class=\"computeroutput\">BZ2_bzRead</code> may return\n   <code class=\"computeroutput\">BZ_MEM_ERROR</code> even though some\n   of the compressed data has been read.  The same is not true\n   for compression; once\n   <code class=\"computeroutput\">BZ2_bzCompressInit</code> or\n   <code class=\"computeroutput\">BZ2_bzWriteOpen</code> have\n   successfully completed,\n   <code class=\"computeroutput\">BZ_MEM_ERROR</code> cannot\n   occur.</p></dd>\n<dt><span class=\"term\"><code class=\"computeroutput\">BZ_DATA_ERROR</code></span></dt>\n<dd><p>Returned when a data integrity error is\n   detected during decompression.  Most importantly, this means\n   when stored and computed CRCs for the data do not match.  This\n   value is also returned upon detection of any other anomaly in\n   the compressed data.</p></dd>\n<dt><span class=\"term\"><code class=\"computeroutput\">BZ_DATA_ERROR_MAGIC</code></span></dt>\n<dd><p>As a special case of\n   <code class=\"computeroutput\">BZ_DATA_ERROR</code>, it is\n   sometimes useful to know when the compressed stream does not\n   start with the correct magic bytes (<code class=\"computeroutput\">'B' 'Z'\n   'h'</code>).</p></dd>\n<dt><span class=\"term\"><code class=\"computeroutput\">BZ_IO_ERROR</code></span></dt>\n<dd><p>Returned by\n   <code class=\"computeroutput\">BZ2_bzRead</code> and\n   <code class=\"computeroutput\">BZ2_bzWrite</code> when there is an\n   error reading or writing in the compressed file, and by\n   <code class=\"computeroutput\">BZ2_bzReadOpen</code> and\n   <code class=\"computeroutput\">BZ2_bzWriteOpen</code> for attempts\n   to use a file for which the error indicator (viz,\n   <code class=\"computeroutput\">ferror(f)</code>) is set.  On\n   receipt of <code class=\"computeroutput\">BZ_IO_ERROR</code>, the\n   caller should consult <code class=\"computeroutput\">errno</code>\n   and/or <code class=\"computeroutput\">perror</code> to acquire\n   operating-system specific information about the\n   problem.</p></dd>\n<dt><span class=\"term\"><code class=\"computeroutput\">BZ_UNEXPECTED_EOF</code></span></dt>\n<dd><p>Returned by\n   <code class=\"computeroutput\">BZ2_bzRead</code> when the\n   compressed file finishes before the logical end of stream is\n   detected.</p></dd>\n<dt><span class=\"term\"><code class=\"computeroutput\">BZ_OUTBUFF_FULL</code></span></dt>\n<dd><p>Returned by\n   <code class=\"computeroutput\">BZ2_bzBuffToBuffCompress</code> and\n   <code class=\"computeroutput\">BZ2_bzBuffToBuffDecompress</code> to\n   indicate that the output data will not fit into the output\n   buffer provided.</p></dd>\n</dl></div>\n</div>\n<div class=\"sect1\" title=\"3.3.Low-level interface\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\" style=\"clear: both\">\n<a name=\"low-level\"></a>3.3.Low-level interface</h2></div></div></div>\n<div class=\"sect2\" title=\"3.3.1.BZ2_bzCompressInit\">\n<div class=\"titlepage\"><div><div><h3 class=\"title\">\n<a name=\"bzcompress-init\"></a>3.3.1.BZ2_bzCompressInit</h3></div></div></div>\n<pre class=\"programlisting\">typedef struct {\n  char *next_in;\n  unsigned int avail_in;\n  unsigned int total_in_lo32;\n  unsigned int total_in_hi32;\n\n  char *next_out;\n  unsigned int avail_out;\n  unsigned int total_out_lo32;\n  unsigned int total_out_hi32;\n\n  void *state;\n\n  void *(*bzalloc)(void *,int,int);\n  void (*bzfree)(void *,void *);\n  void *opaque;\n} bz_stream;\n\nint BZ2_bzCompressInit ( bz_stream *strm, \n                         int blockSize100k, \n                         int verbosity,\n                         int workFactor );</pre>\n<p>Prepares for compression.  The\n<code class=\"computeroutput\">bz_stream</code> structure holds all\ndata pertaining to the compression activity.  A\n<code class=\"computeroutput\">bz_stream</code> structure should be\nallocated and initialised prior to the call.  The fields of\n<code class=\"computeroutput\">bz_stream</code> comprise the entirety\nof the user-visible data.  <code class=\"computeroutput\">state</code>\nis a pointer to the private data structures required for\ncompression.</p>\n<p>Custom memory allocators are supported, via fields\n<code class=\"computeroutput\">bzalloc</code>,\n<code class=\"computeroutput\">bzfree</code>, and\n<code class=\"computeroutput\">opaque</code>.  The value\n<code class=\"computeroutput\">opaque</code> is passed to as the first\nargument to all calls to <code class=\"computeroutput\">bzalloc</code>\nand <code class=\"computeroutput\">bzfree</code>, but is otherwise\nignored by the library.  The call <code class=\"computeroutput\">bzalloc (\nopaque, n, m )</code> is expected to return a pointer\n<code class=\"computeroutput\">p</code> to <code class=\"computeroutput\">n *\nm</code> bytes of memory, and <code class=\"computeroutput\">bzfree (\nopaque, p )</code> should free that memory.</p>\n<p>If you don't want to use a custom memory allocator, set\n<code class=\"computeroutput\">bzalloc</code>,\n<code class=\"computeroutput\">bzfree</code> and\n<code class=\"computeroutput\">opaque</code> to\n<code class=\"computeroutput\">NULL</code>, and the library will then\nuse the standard <code class=\"computeroutput\">malloc</code> /\n<code class=\"computeroutput\">free</code> routines.</p>\n<p>Before calling\n<code class=\"computeroutput\">BZ2_bzCompressInit</code>, fields\n<code class=\"computeroutput\">bzalloc</code>,\n<code class=\"computeroutput\">bzfree</code> and\n<code class=\"computeroutput\">opaque</code> should be filled\nappropriately, as just described.  Upon return, the internal\nstate will have been allocated and initialised, and\n<code class=\"computeroutput\">total_in_lo32</code>,\n<code class=\"computeroutput\">total_in_hi32</code>,\n<code class=\"computeroutput\">total_out_lo32</code> and\n<code class=\"computeroutput\">total_out_hi32</code> will have been\nset to zero.  These four fields are used by the library to inform\nthe caller of the total amount of data passed into and out of the\nlibrary, respectively.  You should not try to change them.  As of\nversion 1.0, 64-bit counts are maintained, even on 32-bit\nplatforms, using the <code class=\"computeroutput\">_hi32</code>\nfields to store the upper 32 bits of the count.  So, for example,\nthe total amount of data in is <code class=\"computeroutput\">(total_in_hi32\n&lt;&lt; 32) + total_in_lo32</code>.</p>\n<p>Parameter <code class=\"computeroutput\">blockSize100k</code>\nspecifies the block size to be used for compression.  It should\nbe a value between 1 and 9 inclusive, and the actual block size\nused is 100000 x this figure.  9 gives the best compression but\ntakes most memory.</p>\n<p>Parameter <code class=\"computeroutput\">verbosity</code> should\nbe set to a number between 0 and 4 inclusive.  0 is silent, and\ngreater numbers give increasingly verbose monitoring/debugging\noutput.  If the library has been compiled with\n<code class=\"computeroutput\">-DBZ_NO_STDIO</code>, no such output\nwill appear for any verbosity setting.</p>\n<p>Parameter <code class=\"computeroutput\">workFactor</code>\ncontrols how the compression phase behaves when presented with\nworst case, highly repetitive, input data.  If compression runs\ninto difficulties caused by repetitive data, the library switches\nfrom the standard sorting algorithm to a fallback algorithm.  The\nfallback is slower than the standard algorithm by perhaps a\nfactor of three, but always behaves reasonably, no matter how bad\nthe input.</p>\n<p>Lower values of <code class=\"computeroutput\">workFactor</code>\nreduce the amount of effort the standard algorithm will expend\nbefore resorting to the fallback.  You should set this parameter\ncarefully; too low, and many inputs will be handled by the\nfallback algorithm and so compress rather slowly, too high, and\nyour average-to-worst case compression times can become very\nlarge.  The default value of 30 gives reasonable behaviour over a\nwide range of circumstances.</p>\n<p>Allowable values range from 0 to 250 inclusive.  0 is a\nspecial case, equivalent to using the default value of 30.</p>\n<p>Note that the compressed output generated is the same\nregardless of whether or not the fallback algorithm is\nused.</p>\n<p>Be aware also that this parameter may disappear entirely in\nfuture versions of the library.  In principle it should be\npossible to devise a good way to automatically choose which\nalgorithm to use.  Such a mechanism would render the parameter\nobsolete.</p>\n<p>Possible return values:</p>\n<pre class=\"programlisting\">BZ_CONFIG_ERROR\n  if the library has been mis-compiled\nBZ_PARAM_ERROR\n  if strm is NULL \n  or blockSize &lt; 1 or blockSize &gt; 9\n  or verbosity &lt; 0 or verbosity &gt; 4\n  or workFactor &lt; 0 or workFactor &gt; 250\nBZ_MEM_ERROR \n  if not enough memory is available\nBZ_OK \n  otherwise</pre>\n<p>Allowable next actions:</p>\n<pre class=\"programlisting\">BZ2_bzCompress\n  if BZ_OK is returned\n  no specific action needed in case of error</pre>\n</div>\n<div class=\"sect2\" title=\"3.3.2.BZ2_bzCompress\">\n<div class=\"titlepage\"><div><div><h3 class=\"title\">\n<a name=\"bzCompress\"></a>3.3.2.BZ2_bzCompress</h3></div></div></div>\n<pre class=\"programlisting\">int BZ2_bzCompress ( bz_stream *strm, int action );</pre>\n<p>Provides more input and/or output buffer space for the\nlibrary.  The caller maintains input and output buffers, and\ncalls <code class=\"computeroutput\">BZ2_bzCompress</code> to transfer\ndata between them.</p>\n<p>Before each call to\n<code class=\"computeroutput\">BZ2_bzCompress</code>,\n<code class=\"computeroutput\">next_in</code> should point at the data\nto be compressed, and <code class=\"computeroutput\">avail_in</code>\nshould indicate how many bytes the library may read.\n<code class=\"computeroutput\">BZ2_bzCompress</code> updates\n<code class=\"computeroutput\">next_in</code>,\n<code class=\"computeroutput\">avail_in</code> and\n<code class=\"computeroutput\">total_in</code> to reflect the number\nof bytes it has read.</p>\n<p>Similarly, <code class=\"computeroutput\">next_out</code> should\npoint to a buffer in which the compressed data is to be placed,\nwith <code class=\"computeroutput\">avail_out</code> indicating how\nmuch output space is available.\n<code class=\"computeroutput\">BZ2_bzCompress</code> updates\n<code class=\"computeroutput\">next_out</code>,\n<code class=\"computeroutput\">avail_out</code> and\n<code class=\"computeroutput\">total_out</code> to reflect the number\nof bytes output.</p>\n<p>You may provide and remove as little or as much data as you\nlike on each call of\n<code class=\"computeroutput\">BZ2_bzCompress</code>.  In the limit,\nit is acceptable to supply and remove data one byte at a time,\nalthough this would be terribly inefficient.  You should always\nensure that at least one byte of output space is available at\neach call.</p>\n<p>A second purpose of\n<code class=\"computeroutput\">BZ2_bzCompress</code> is to request a\nchange of mode of the compressed stream.</p>\n<p>Conceptually, a compressed stream can be in one of four\nstates: IDLE, RUNNING, FLUSHING and FINISHING.  Before\ninitialisation\n(<code class=\"computeroutput\">BZ2_bzCompressInit</code>) and after\ntermination (<code class=\"computeroutput\">BZ2_bzCompressEnd</code>),\na stream is regarded as IDLE.</p>\n<p>Upon initialisation\n(<code class=\"computeroutput\">BZ2_bzCompressInit</code>), the stream\nis placed in the RUNNING state.  Subsequent calls to\n<code class=\"computeroutput\">BZ2_bzCompress</code> should pass\n<code class=\"computeroutput\">BZ_RUN</code> as the requested action;\nother actions are illegal and will result in\n<code class=\"computeroutput\">BZ_SEQUENCE_ERROR</code>.</p>\n<p>At some point, the calling program will have provided all\nthe input data it wants to.  It will then want to finish up -- in\neffect, asking the library to process any data it might have\nbuffered internally.  In this state,\n<code class=\"computeroutput\">BZ2_bzCompress</code> will no longer\nattempt to read data from\n<code class=\"computeroutput\">next_in</code>, but it will want to\nwrite data to <code class=\"computeroutput\">next_out</code>.  Because\nthe output buffer supplied by the user can be arbitrarily small,\nthe finishing-up operation cannot necessarily be done with a\nsingle call of\n<code class=\"computeroutput\">BZ2_bzCompress</code>.</p>\n<p>Instead, the calling program passes\n<code class=\"computeroutput\">BZ_FINISH</code> as an action to\n<code class=\"computeroutput\">BZ2_bzCompress</code>.  This changes\nthe stream's state to FINISHING.  Any remaining input (ie,\n<code class=\"computeroutput\">next_in[0 .. avail_in-1]</code>) is\ncompressed and transferred to the output buffer.  To do this,\n<code class=\"computeroutput\">BZ2_bzCompress</code> must be called\nrepeatedly until all the output has been consumed.  At that\npoint, <code class=\"computeroutput\">BZ2_bzCompress</code> returns\n<code class=\"computeroutput\">BZ_STREAM_END</code>, and the stream's\nstate is set back to IDLE.\n<code class=\"computeroutput\">BZ2_bzCompressEnd</code> should then be\ncalled.</p>\n<p>Just to make sure the calling program does not cheat, the\nlibrary makes a note of <code class=\"computeroutput\">avail_in</code>\nat the time of the first call to\n<code class=\"computeroutput\">BZ2_bzCompress</code> which has\n<code class=\"computeroutput\">BZ_FINISH</code> as an action (ie, at\nthe time the program has announced its intention to not supply\nany more input).  By comparing this value with that of\n<code class=\"computeroutput\">avail_in</code> over subsequent calls\nto <code class=\"computeroutput\">BZ2_bzCompress</code>, the library\ncan detect any attempts to slip in more data to compress.  Any\ncalls for which this is detected will return\n<code class=\"computeroutput\">BZ_SEQUENCE_ERROR</code>.  This\nindicates a programming mistake which should be corrected.</p>\n<p>Instead of asking to finish, the calling program may ask\n<code class=\"computeroutput\">BZ2_bzCompress</code> to take all the\nremaining input, compress it and terminate the current\n(Burrows-Wheeler) compression block.  This could be useful for\nerror control purposes.  The mechanism is analogous to that for\nfinishing: call <code class=\"computeroutput\">BZ2_bzCompress</code>\nwith an action of <code class=\"computeroutput\">BZ_FLUSH</code>,\nremove output data, and persist with the\n<code class=\"computeroutput\">BZ_FLUSH</code> action until the value\n<code class=\"computeroutput\">BZ_RUN</code> is returned.  As with\nfinishing, <code class=\"computeroutput\">BZ2_bzCompress</code>\ndetects any attempt to provide more input data once the flush has\nbegun.</p>\n<p>Once the flush is complete, the stream returns to the\nnormal RUNNING state.</p>\n<p>This all sounds pretty complex, but isn't really.  Here's a\ntable which shows which actions are allowable in each state, what\naction will be taken, what the next state is, and what the\nnon-error return values are.  Note that you can't explicitly ask\nwhat state the stream is in, but nor do you need to -- it can be\ninferred from the values returned by\n<code class=\"computeroutput\">BZ2_bzCompress</code>.</p>\n<pre class=\"programlisting\">IDLE/any\n  Illegal.  IDLE state only exists after BZ2_bzCompressEnd or\n  before BZ2_bzCompressInit.\n  Return value = BZ_SEQUENCE_ERROR\n\nRUNNING/BZ_RUN\n  Compress from next_in to next_out as much as possible.\n  Next state = RUNNING\n  Return value = BZ_RUN_OK\n\nRUNNING/BZ_FLUSH\n  Remember current value of next_in. Compress from next_in\n  to next_out as much as possible, but do not accept any more input.\n  Next state = FLUSHING\n  Return value = BZ_FLUSH_OK\n\nRUNNING/BZ_FINISH\n  Remember current value of next_in. Compress from next_in\n  to next_out as much as possible, but do not accept any more input.\n  Next state = FINISHING\n  Return value = BZ_FINISH_OK\n\nFLUSHING/BZ_FLUSH\n  Compress from next_in to next_out as much as possible, \n  but do not accept any more input.\n  If all the existing input has been used up and all compressed\n  output has been removed\n    Next state = RUNNING; Return value = BZ_RUN_OK\n  else\n    Next state = FLUSHING; Return value = BZ_FLUSH_OK\n\nFLUSHING/other     \n  Illegal.\n  Return value = BZ_SEQUENCE_ERROR\n\nFINISHING/BZ_FINISH\n  Compress from next_in to next_out as much as possible,\n  but to not accept any more input.  \n  If all the existing input has been used up and all compressed\n  output has been removed\n    Next state = IDLE; Return value = BZ_STREAM_END\n  else\n    Next state = FINISHING; Return value = BZ_FINISH_OK\n\nFINISHING/other\n  Illegal.\n  Return value = BZ_SEQUENCE_ERROR</pre>\n<p>That still looks complicated?  Well, fair enough.  The\nusual sequence of calls for compressing a load of data is:</p>\n<div class=\"orderedlist\"><ol class=\"orderedlist\" type=\"1\">\n<li class=\"listitem\"><p>Get started with\n  <code class=\"computeroutput\">BZ2_bzCompressInit</code>.</p></li>\n<li class=\"listitem\"><p>Shovel data in and shlurp out its compressed form\n  using zero or more calls of\n  <code class=\"computeroutput\">BZ2_bzCompress</code> with action =\n  <code class=\"computeroutput\">BZ_RUN</code>.</p></li>\n<li class=\"listitem\"><p>Finish up. Repeatedly call\n  <code class=\"computeroutput\">BZ2_bzCompress</code> with action =\n  <code class=\"computeroutput\">BZ_FINISH</code>, copying out the\n  compressed output, until\n  <code class=\"computeroutput\">BZ_STREAM_END</code> is\n  returned.</p></li>\n<li class=\"listitem\"><p>Close up and go home.  Call\n  <code class=\"computeroutput\">BZ2_bzCompressEnd</code>.</p></li>\n</ol></div>\n<p>If the data you want to compress fits into your input\nbuffer all at once, you can skip the calls of\n<code class=\"computeroutput\">BZ2_bzCompress ( ..., BZ_RUN )</code>\nand just do the <code class=\"computeroutput\">BZ2_bzCompress ( ..., BZ_FINISH\n)</code> calls.</p>\n<p>All required memory is allocated by\n<code class=\"computeroutput\">BZ2_bzCompressInit</code>.  The\ncompression library can accept any data at all (obviously).  So\nyou shouldn't get any error return values from the\n<code class=\"computeroutput\">BZ2_bzCompress</code> calls.  If you\ndo, they will be\n<code class=\"computeroutput\">BZ_SEQUENCE_ERROR</code>, and indicate\na bug in your programming.</p>\n<p>Trivial other possible return values:</p>\n<pre class=\"programlisting\">BZ_PARAM_ERROR\n  if strm is NULL, or strm-&gt;s is NULL</pre>\n</div>\n<div class=\"sect2\" title=\"3.3.3.BZ2_bzCompressEnd\">\n<div class=\"titlepage\"><div><div><h3 class=\"title\">\n<a name=\"bzCompress-end\"></a>3.3.3.BZ2_bzCompressEnd</h3></div></div></div>\n<pre class=\"programlisting\">int BZ2_bzCompressEnd ( bz_stream *strm );</pre>\n<p>Releases all memory associated with a compression\nstream.</p>\n<p>Possible return values:</p>\n<pre class=\"programlisting\">BZ_PARAM_ERROR  if strm is NULL or strm-&gt;s is NULL\nBZ_OK           otherwise</pre>\n</div>\n<div class=\"sect2\" title=\"3.3.4.BZ2_bzDecompressInit\">\n<div class=\"titlepage\"><div><div><h3 class=\"title\">\n<a name=\"bzDecompress-init\"></a>3.3.4.BZ2_bzDecompressInit</h3></div></div></div>\n<pre class=\"programlisting\">int BZ2_bzDecompressInit ( bz_stream *strm, int verbosity, int small );</pre>\n<p>Prepares for decompression.  As with\n<code class=\"computeroutput\">BZ2_bzCompressInit</code>, a\n<code class=\"computeroutput\">bz_stream</code> record should be\nallocated and initialised before the call.  Fields\n<code class=\"computeroutput\">bzalloc</code>,\n<code class=\"computeroutput\">bzfree</code> and\n<code class=\"computeroutput\">opaque</code> should be set if a custom\nmemory allocator is required, or made\n<code class=\"computeroutput\">NULL</code> for the normal\n<code class=\"computeroutput\">malloc</code> /\n<code class=\"computeroutput\">free</code> routines.  Upon return, the\ninternal state will have been initialised, and\n<code class=\"computeroutput\">total_in</code> and\n<code class=\"computeroutput\">total_out</code> will be zero.</p>\n<p>For the meaning of parameter\n<code class=\"computeroutput\">verbosity</code>, see\n<code class=\"computeroutput\">BZ2_bzCompressInit</code>.</p>\n<p>If <code class=\"computeroutput\">small</code> is nonzero, the\nlibrary will use an alternative decompression algorithm which\nuses less memory but at the cost of decompressing more slowly\n(roughly speaking, half the speed, but the maximum memory\nrequirement drops to around 2300k).  See <a class=\"xref\" href=\"#using\" title=\"2.How to use bzip2\">How to use bzip2</a>\nfor more information on memory management.</p>\n<p>Note that the amount of memory needed to decompress a\nstream cannot be determined until the stream's header has been\nread, so even if\n<code class=\"computeroutput\">BZ2_bzDecompressInit</code> succeeds, a\nsubsequent <code class=\"computeroutput\">BZ2_bzDecompress</code>\ncould fail with\n<code class=\"computeroutput\">BZ_MEM_ERROR</code>.</p>\n<p>Possible return values:</p>\n<pre class=\"programlisting\">BZ_CONFIG_ERROR\n  if the library has been mis-compiled\nBZ_PARAM_ERROR\n  if ( small != 0 &amp;&amp; small != 1 )\n  or (verbosity &lt;; 0 || verbosity &gt; 4)\nBZ_MEM_ERROR\n  if insufficient memory is available</pre>\n<p>Allowable next actions:</p>\n<pre class=\"programlisting\">BZ2_bzDecompress\n  if BZ_OK was returned\n  no specific action required in case of error</pre>\n</div>\n<div class=\"sect2\" title=\"3.3.5.BZ2_bzDecompress\">\n<div class=\"titlepage\"><div><div><h3 class=\"title\">\n<a name=\"bzDecompress\"></a>3.3.5.BZ2_bzDecompress</h3></div></div></div>\n<pre class=\"programlisting\">int BZ2_bzDecompress ( bz_stream *strm );</pre>\n<p>Provides more input and/out output buffer space for the\nlibrary.  The caller maintains input and output buffers, and uses\n<code class=\"computeroutput\">BZ2_bzDecompress</code> to transfer\ndata between them.</p>\n<p>Before each call to\n<code class=\"computeroutput\">BZ2_bzDecompress</code>,\n<code class=\"computeroutput\">next_in</code> should point at the\ncompressed data, and <code class=\"computeroutput\">avail_in</code>\nshould indicate how many bytes the library may read.\n<code class=\"computeroutput\">BZ2_bzDecompress</code> updates\n<code class=\"computeroutput\">next_in</code>,\n<code class=\"computeroutput\">avail_in</code> and\n<code class=\"computeroutput\">total_in</code> to reflect the number\nof bytes it has read.</p>\n<p>Similarly, <code class=\"computeroutput\">next_out</code> should\npoint to a buffer in which the uncompressed output is to be\nplaced, with <code class=\"computeroutput\">avail_out</code>\nindicating how much output space is available.\n<code class=\"computeroutput\">BZ2_bzCompress</code> updates\n<code class=\"computeroutput\">next_out</code>,\n<code class=\"computeroutput\">avail_out</code> and\n<code class=\"computeroutput\">total_out</code> to reflect the number\nof bytes output.</p>\n<p>You may provide and remove as little or as much data as you\nlike on each call of\n<code class=\"computeroutput\">BZ2_bzDecompress</code>.  In the limit,\nit is acceptable to supply and remove data one byte at a time,\nalthough this would be terribly inefficient.  You should always\nensure that at least one byte of output space is available at\neach call.</p>\n<p>Use of <code class=\"computeroutput\">BZ2_bzDecompress</code> is\nsimpler than\n<code class=\"computeroutput\">BZ2_bzCompress</code>.</p>\n<p>You should provide input and remove output as described\nabove, and repeatedly call\n<code class=\"computeroutput\">BZ2_bzDecompress</code> until\n<code class=\"computeroutput\">BZ_STREAM_END</code> is returned.\nAppearance of <code class=\"computeroutput\">BZ_STREAM_END</code>\ndenotes that <code class=\"computeroutput\">BZ2_bzDecompress</code>\nhas detected the logical end of the compressed stream.\n<code class=\"computeroutput\">BZ2_bzDecompress</code> will not\nproduce <code class=\"computeroutput\">BZ_STREAM_END</code> until all\noutput data has been placed into the output buffer, so once\n<code class=\"computeroutput\">BZ_STREAM_END</code> appears, you are\nguaranteed to have available all the decompressed output, and\n<code class=\"computeroutput\">BZ2_bzDecompressEnd</code> can safely\nbe called.</p>\n<p>If case of an error return value, you should call\n<code class=\"computeroutput\">BZ2_bzDecompressEnd</code> to clean up\nand release memory.</p>\n<p>Possible return values:</p>\n<pre class=\"programlisting\">BZ_PARAM_ERROR\n  if strm is NULL or strm-&gt;s is NULL\n  or strm-&gt;avail_out &lt; 1\nBZ_DATA_ERROR\n  if a data integrity error is detected in the compressed stream\nBZ_DATA_ERROR_MAGIC\n  if the compressed stream doesn't begin with the right magic bytes\nBZ_MEM_ERROR\n  if there wasn't enough memory available\nBZ_STREAM_END\n  if the logical end of the data stream was detected and all\n  output in has been consumed, eg s--&gt;avail_out &gt; 0\nBZ_OK\n  otherwise</pre>\n<p>Allowable next actions:</p>\n<pre class=\"programlisting\">BZ2_bzDecompress\n  if BZ_OK was returned\nBZ2_bzDecompressEnd\n  otherwise</pre>\n</div>\n<div class=\"sect2\" title=\"3.3.6.BZ2_bzDecompressEnd\">\n<div class=\"titlepage\"><div><div><h3 class=\"title\">\n<a name=\"bzDecompress-end\"></a>3.3.6.BZ2_bzDecompressEnd</h3></div></div></div>\n<pre class=\"programlisting\">int BZ2_bzDecompressEnd ( bz_stream *strm );</pre>\n<p>Releases all memory associated with a decompression\nstream.</p>\n<p>Possible return values:</p>\n<pre class=\"programlisting\">BZ_PARAM_ERROR\n  if strm is NULL or strm-&gt;s is NULL\nBZ_OK\n  otherwise</pre>\n<p>Allowable next actions:</p>\n<pre class=\"programlisting\">  None.</pre>\n</div>\n</div>\n<div class=\"sect1\" title=\"3.4.High-level interface\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\" style=\"clear: both\">\n<a name=\"hl-interface\"></a>3.4.High-level interface</h2></div></div></div>\n<p>This interface provides functions for reading and writing\n<code class=\"computeroutput\">bzip2</code> format files.  First, some\ngeneral points.</p>\n<div class=\"itemizedlist\"><ul class=\"itemizedlist\" type=\"bullet\">\n<li class=\"listitem\" style=\"list-style-type: disc\"><p>All of the functions take an\n  <code class=\"computeroutput\">int*</code> first argument,\n  <code class=\"computeroutput\">bzerror</code>.  After each call,\n  <code class=\"computeroutput\">bzerror</code> should be consulted\n  first to determine the outcome of the call.  If\n  <code class=\"computeroutput\">bzerror</code> is\n  <code class=\"computeroutput\">BZ_OK</code>, the call completed\n  successfully, and only then should the return value of the\n  function (if any) be consulted.  If\n  <code class=\"computeroutput\">bzerror</code> is\n  <code class=\"computeroutput\">BZ_IO_ERROR</code>, there was an\n  error reading/writing the underlying compressed file, and you\n  should then consult <code class=\"computeroutput\">errno</code> /\n  <code class=\"computeroutput\">perror</code> to determine the cause\n  of the difficulty.  <code class=\"computeroutput\">bzerror</code>\n  may also be set to various other values; precise details are\n  given on a per-function basis below.</p></li>\n<li class=\"listitem\" style=\"list-style-type: disc\"><p>If <code class=\"computeroutput\">bzerror</code> indicates\n  an error (ie, anything except\n  <code class=\"computeroutput\">BZ_OK</code> and\n  <code class=\"computeroutput\">BZ_STREAM_END</code>), you should\n  immediately call\n  <code class=\"computeroutput\">BZ2_bzReadClose</code> (or\n  <code class=\"computeroutput\">BZ2_bzWriteClose</code>, depending on\n  whether you are attempting to read or to write) to free up all\n  resources associated with the stream.  Once an error has been\n  indicated, behaviour of all calls except\n  <code class=\"computeroutput\">BZ2_bzReadClose</code>\n  (<code class=\"computeroutput\">BZ2_bzWriteClose</code>) is\n  undefined.  The implication is that (1)\n  <code class=\"computeroutput\">bzerror</code> should be checked\n  after each call, and (2) if\n  <code class=\"computeroutput\">bzerror</code> indicates an error,\n  <code class=\"computeroutput\">BZ2_bzReadClose</code>\n  (<code class=\"computeroutput\">BZ2_bzWriteClose</code>) should then\n  be called to clean up.</p></li>\n<li class=\"listitem\" style=\"list-style-type: disc\"><p>The <code class=\"computeroutput\">FILE*</code> arguments\n  passed to <code class=\"computeroutput\">BZ2_bzReadOpen</code> /\n  <code class=\"computeroutput\">BZ2_bzWriteOpen</code> should be set\n  to binary mode.  Most Unix systems will do this by default, but\n  other platforms, including Windows and Mac, will not.  If you\n  omit this, you may encounter problems when moving code to new\n  platforms.</p></li>\n<li class=\"listitem\" style=\"list-style-type: disc\"><p>Memory allocation requests are handled by\n  <code class=\"computeroutput\">malloc</code> /\n  <code class=\"computeroutput\">free</code>.  At present there is no\n  facility for user-defined memory allocators in the file I/O\n  functions (could easily be added, though).</p></li>\n</ul></div>\n<div class=\"sect2\" title=\"3.4.1.BZ2_bzReadOpen\">\n<div class=\"titlepage\"><div><div><h3 class=\"title\">\n<a name=\"bzreadopen\"></a>3.4.1.BZ2_bzReadOpen</h3></div></div></div>\n<pre class=\"programlisting\">typedef void BZFILE;\n\nBZFILE *BZ2_bzReadOpen( int *bzerror, FILE *f, \n                        int verbosity, int small,\n                        void *unused, int nUnused );</pre>\n<p>Prepare to read compressed data from file handle\n<code class=\"computeroutput\">f</code>.\n<code class=\"computeroutput\">f</code> should refer to a file which\nhas been opened for reading, and for which the error indicator\n(<code class=\"computeroutput\">ferror(f)</code>)is not set.  If\n<code class=\"computeroutput\">small</code> is 1, the library will try\nto decompress using less memory, at the expense of speed.</p>\n<p>For reasons explained below,\n<code class=\"computeroutput\">BZ2_bzRead</code> will decompress the\n<code class=\"computeroutput\">nUnused</code> bytes starting at\n<code class=\"computeroutput\">unused</code>, before starting to read\nfrom the file <code class=\"computeroutput\">f</code>.  At most\n<code class=\"computeroutput\">BZ_MAX_UNUSED</code> bytes may be\nsupplied like this.  If this facility is not required, you should\npass <code class=\"computeroutput\">NULL</code> and\n<code class=\"computeroutput\">0</code> for\n<code class=\"computeroutput\">unused</code> and\nn<code class=\"computeroutput\">Unused</code> respectively.</p>\n<p>For the meaning of parameters\n<code class=\"computeroutput\">small</code> and\n<code class=\"computeroutput\">verbosity</code>, see\n<code class=\"computeroutput\">BZ2_bzDecompressInit</code>.</p>\n<p>The amount of memory needed to decompress a file cannot be\ndetermined until the file's header has been read.  So it is\npossible that <code class=\"computeroutput\">BZ2_bzReadOpen</code>\nreturns <code class=\"computeroutput\">BZ_OK</code> but a subsequent\ncall of <code class=\"computeroutput\">BZ2_bzRead</code> will return\n<code class=\"computeroutput\">BZ_MEM_ERROR</code>.</p>\n<p>Possible assignments to\n<code class=\"computeroutput\">bzerror</code>:</p>\n<pre class=\"programlisting\">BZ_CONFIG_ERROR\n  if the library has been mis-compiled\nBZ_PARAM_ERROR\n  if f is NULL\n  or small is neither 0 nor 1\n  or ( unused == NULL &amp;&amp; nUnused != 0 )\n  or ( unused != NULL &amp;&amp; !(0 &lt;= nUnused &lt;= BZ_MAX_UNUSED) )\nBZ_IO_ERROR\n  if ferror(f) is nonzero\nBZ_MEM_ERROR\n  if insufficient memory is available\nBZ_OK\n  otherwise.</pre>\n<p>Possible return values:</p>\n<pre class=\"programlisting\">Pointer to an abstract BZFILE\n  if bzerror is BZ_OK\nNULL\n  otherwise</pre>\n<p>Allowable next actions:</p>\n<pre class=\"programlisting\">BZ2_bzRead\n  if bzerror is BZ_OK\nBZ2_bzClose\n  otherwise</pre>\n</div>\n<div class=\"sect2\" title=\"3.4.2.BZ2_bzRead\">\n<div class=\"titlepage\"><div><div><h3 class=\"title\">\n<a name=\"bzread\"></a>3.4.2.BZ2_bzRead</h3></div></div></div>\n<pre class=\"programlisting\">int BZ2_bzRead ( int *bzerror, BZFILE *b, void *buf, int len );</pre>\n<p>Reads up to <code class=\"computeroutput\">len</code>\n(uncompressed) bytes from the compressed file\n<code class=\"computeroutput\">b</code> into the buffer\n<code class=\"computeroutput\">buf</code>.  If the read was\nsuccessful, <code class=\"computeroutput\">bzerror</code> is set to\n<code class=\"computeroutput\">BZ_OK</code> and the number of bytes\nread is returned.  If the logical end-of-stream was detected,\n<code class=\"computeroutput\">bzerror</code> will be set to\n<code class=\"computeroutput\">BZ_STREAM_END</code>, and the number of\nbytes read is returned.  All other\n<code class=\"computeroutput\">bzerror</code> values denote an\nerror.</p>\n<p><code class=\"computeroutput\">BZ2_bzRead</code> will supply\n<code class=\"computeroutput\">len</code> bytes, unless the logical\nstream end is detected or an error occurs.  Because of this, it\nis possible to detect the stream end by observing when the number\nof bytes returned is less than the number requested.\nNevertheless, this is regarded as inadvisable; you should instead\ncheck <code class=\"computeroutput\">bzerror</code> after every call\nand watch out for\n<code class=\"computeroutput\">BZ_STREAM_END</code>.</p>\n<p>Internally, <code class=\"computeroutput\">BZ2_bzRead</code>\ncopies data from the compressed file in chunks of size\n<code class=\"computeroutput\">BZ_MAX_UNUSED</code> bytes before\ndecompressing it.  If the file contains more bytes than strictly\nneeded to reach the logical end-of-stream,\n<code class=\"computeroutput\">BZ2_bzRead</code> will almost certainly\nread some of the trailing data before signalling\n<code class=\"computeroutput\">BZ_SEQUENCE_END</code>.  To collect the\nread but unused data once\n<code class=\"computeroutput\">BZ_SEQUENCE_END</code> has appeared,\ncall <code class=\"computeroutput\">BZ2_bzReadGetUnused</code>\nimmediately before\n<code class=\"computeroutput\">BZ2_bzReadClose</code>.</p>\n<p>Possible assignments to\n<code class=\"computeroutput\">bzerror</code>:</p>\n<pre class=\"programlisting\">BZ_PARAM_ERROR\n  if b is NULL or buf is NULL or len &lt; 0\nBZ_SEQUENCE_ERROR\n  if b was opened with BZ2_bzWriteOpen\nBZ_IO_ERROR\n  if there is an error reading from the compressed file\nBZ_UNEXPECTED_EOF\n  if the compressed file ended before \n  the logical end-of-stream was detected\nBZ_DATA_ERROR\n  if a data integrity error was detected in the compressed stream\nBZ_DATA_ERROR_MAGIC\n  if the stream does not begin with the requisite header bytes \n  (ie, is not a bzip2 data file).  This is really \n  a special case of BZ_DATA_ERROR.\nBZ_MEM_ERROR\n  if insufficient memory was available\nBZ_STREAM_END\n  if the logical end of stream was detected.\nBZ_OK\n  otherwise.</pre>\n<p>Possible return values:</p>\n<pre class=\"programlisting\">number of bytes read\n  if bzerror is BZ_OK or BZ_STREAM_END\nundefined\n  otherwise</pre>\n<p>Allowable next actions:</p>\n<pre class=\"programlisting\">collect data from buf, then BZ2_bzRead or BZ2_bzReadClose\n  if bzerror is BZ_OK\ncollect data from buf, then BZ2_bzReadClose or BZ2_bzReadGetUnused\n  if bzerror is BZ_SEQUENCE_END\nBZ2_bzReadClose\n  otherwise</pre>\n</div>\n<div class=\"sect2\" title=\"3.4.3.BZ2_bzReadGetUnused\">\n<div class=\"titlepage\"><div><div><h3 class=\"title\">\n<a name=\"bzreadgetunused\"></a>3.4.3.BZ2_bzReadGetUnused</h3></div></div></div>\n<pre class=\"programlisting\">void BZ2_bzReadGetUnused( int* bzerror, BZFILE *b, \n                          void** unused, int* nUnused );</pre>\n<p>Returns data which was read from the compressed file but\nwas not needed to get to the logical end-of-stream.\n<code class=\"computeroutput\">*unused</code> is set to the address of\nthe data, and <code class=\"computeroutput\">*nUnused</code> to the\nnumber of bytes.  <code class=\"computeroutput\">*nUnused</code> will\nbe set to a value between <code class=\"computeroutput\">0</code> and\n<code class=\"computeroutput\">BZ_MAX_UNUSED</code> inclusive.</p>\n<p>This function may only be called once\n<code class=\"computeroutput\">BZ2_bzRead</code> has signalled\n<code class=\"computeroutput\">BZ_STREAM_END</code> but before\n<code class=\"computeroutput\">BZ2_bzReadClose</code>.</p>\n<p>Possible assignments to\n<code class=\"computeroutput\">bzerror</code>:</p>\n<pre class=\"programlisting\">BZ_PARAM_ERROR\n  if b is NULL\n  or unused is NULL or nUnused is NULL\nBZ_SEQUENCE_ERROR\n  if BZ_STREAM_END has not been signalled\n  or if b was opened with BZ2_bzWriteOpen\nBZ_OK\n  otherwise</pre>\n<p>Allowable next actions:</p>\n<pre class=\"programlisting\">BZ2_bzReadClose</pre>\n</div>\n<div class=\"sect2\" title=\"3.4.4.BZ2_bzReadClose\">\n<div class=\"titlepage\"><div><div><h3 class=\"title\">\n<a name=\"bzreadclose\"></a>3.4.4.BZ2_bzReadClose</h3></div></div></div>\n<pre class=\"programlisting\">void BZ2_bzReadClose ( int *bzerror, BZFILE *b );</pre>\n<p>Releases all memory pertaining to the compressed file\n<code class=\"computeroutput\">b</code>.\n<code class=\"computeroutput\">BZ2_bzReadClose</code> does not call\n<code class=\"computeroutput\">fclose</code> on the underlying file\nhandle, so you should do that yourself if appropriate.\n<code class=\"computeroutput\">BZ2_bzReadClose</code> should be called\nto clean up after all error situations.</p>\n<p>Possible assignments to\n<code class=\"computeroutput\">bzerror</code>:</p>\n<pre class=\"programlisting\">BZ_SEQUENCE_ERROR\n  if b was opened with BZ2_bzOpenWrite\nBZ_OK\n  otherwise</pre>\n<p>Allowable next actions:</p>\n<pre class=\"programlisting\">none</pre>\n</div>\n<div class=\"sect2\" title=\"3.4.5.BZ2_bzWriteOpen\">\n<div class=\"titlepage\"><div><div><h3 class=\"title\">\n<a name=\"bzwriteopen\"></a>3.4.5.BZ2_bzWriteOpen</h3></div></div></div>\n<pre class=\"programlisting\">BZFILE *BZ2_bzWriteOpen( int *bzerror, FILE *f, \n                         int blockSize100k, int verbosity,\n                         int workFactor );</pre>\n<p>Prepare to write compressed data to file handle\n<code class=\"computeroutput\">f</code>.\n<code class=\"computeroutput\">f</code> should refer to a file which\nhas been opened for writing, and for which the error indicator\n(<code class=\"computeroutput\">ferror(f)</code>)is not set.</p>\n<p>For the meaning of parameters\n<code class=\"computeroutput\">blockSize100k</code>,\n<code class=\"computeroutput\">verbosity</code> and\n<code class=\"computeroutput\">workFactor</code>, see\n<code class=\"computeroutput\">BZ2_bzCompressInit</code>.</p>\n<p>All required memory is allocated at this stage, so if the\ncall completes successfully,\n<code class=\"computeroutput\">BZ_MEM_ERROR</code> cannot be signalled\nby a subsequent call to\n<code class=\"computeroutput\">BZ2_bzWrite</code>.</p>\n<p>Possible assignments to\n<code class=\"computeroutput\">bzerror</code>:</p>\n<pre class=\"programlisting\">BZ_CONFIG_ERROR\n  if the library has been mis-compiled\nBZ_PARAM_ERROR\n  if f is NULL\n  or blockSize100k &lt; 1 or blockSize100k &gt; 9\nBZ_IO_ERROR\n  if ferror(f) is nonzero\nBZ_MEM_ERROR\n  if insufficient memory is available\nBZ_OK\n  otherwise</pre>\n<p>Possible return values:</p>\n<pre class=\"programlisting\">Pointer to an abstract BZFILE\n  if bzerror is BZ_OK\nNULL\n  otherwise</pre>\n<p>Allowable next actions:</p>\n<pre class=\"programlisting\">BZ2_bzWrite\n  if bzerror is BZ_OK\n  (you could go directly to BZ2_bzWriteClose, but this would be pretty pointless)\nBZ2_bzWriteClose\n  otherwise</pre>\n</div>\n<div class=\"sect2\" title=\"3.4.6.BZ2_bzWrite\">\n<div class=\"titlepage\"><div><div><h3 class=\"title\">\n<a name=\"bzwrite\"></a>3.4.6.BZ2_bzWrite</h3></div></div></div>\n<pre class=\"programlisting\">void BZ2_bzWrite ( int *bzerror, BZFILE *b, void *buf, int len );</pre>\n<p>Absorbs <code class=\"computeroutput\">len</code> bytes from the\nbuffer <code class=\"computeroutput\">buf</code>, eventually to be\ncompressed and written to the file.</p>\n<p>Possible assignments to\n<code class=\"computeroutput\">bzerror</code>:</p>\n<pre class=\"programlisting\">BZ_PARAM_ERROR\n  if b is NULL or buf is NULL or len &lt; 0\nBZ_SEQUENCE_ERROR\n  if b was opened with BZ2_bzReadOpen\nBZ_IO_ERROR\n  if there is an error writing the compressed file.\nBZ_OK\n  otherwise</pre>\n</div>\n<div class=\"sect2\" title=\"3.4.7.BZ2_bzWriteClose\">\n<div class=\"titlepage\"><div><div><h3 class=\"title\">\n<a name=\"bzwriteclose\"></a>3.4.7.BZ2_bzWriteClose</h3></div></div></div>\n<pre class=\"programlisting\">void BZ2_bzWriteClose( int *bzerror, BZFILE* f,\n                       int abandon,\n                       unsigned int* nbytes_in,\n                       unsigned int* nbytes_out );\n\nvoid BZ2_bzWriteClose64( int *bzerror, BZFILE* f,\n                         int abandon,\n                         unsigned int* nbytes_in_lo32,\n                         unsigned int* nbytes_in_hi32,\n                         unsigned int* nbytes_out_lo32,\n                         unsigned int* nbytes_out_hi32 );</pre>\n<p>Compresses and flushes to the compressed file all data so\nfar supplied by <code class=\"computeroutput\">BZ2_bzWrite</code>.\nThe logical end-of-stream markers are also written, so subsequent\ncalls to <code class=\"computeroutput\">BZ2_bzWrite</code> are\nillegal.  All memory associated with the compressed file\n<code class=\"computeroutput\">b</code> is released.\n<code class=\"computeroutput\">fflush</code> is called on the\ncompressed file, but it is not\n<code class=\"computeroutput\">fclose</code>'d.</p>\n<p>If <code class=\"computeroutput\">BZ2_bzWriteClose</code> is\ncalled to clean up after an error, the only action is to release\nthe memory.  The library records the error codes issued by\nprevious calls, so this situation will be detected automatically.\nThere is no attempt to complete the compression operation, nor to\n<code class=\"computeroutput\">fflush</code> the compressed file.  You\ncan force this behaviour to happen even in the case of no error,\nby passing a nonzero value to\n<code class=\"computeroutput\">abandon</code>.</p>\n<p>If <code class=\"computeroutput\">nbytes_in</code> is non-null,\n<code class=\"computeroutput\">*nbytes_in</code> will be set to be the\ntotal volume of uncompressed data handled.  Similarly,\n<code class=\"computeroutput\">nbytes_out</code> will be set to the\ntotal volume of compressed data written.  For compatibility with\nolder versions of the library,\n<code class=\"computeroutput\">BZ2_bzWriteClose</code> only yields the\nlower 32 bits of these counts.  Use\n<code class=\"computeroutput\">BZ2_bzWriteClose64</code> if you want\nthe full 64 bit counts.  These two functions are otherwise\nabsolutely identical.</p>\n<p>Possible assignments to\n<code class=\"computeroutput\">bzerror</code>:</p>\n<pre class=\"programlisting\">BZ_SEQUENCE_ERROR\n  if b was opened with BZ2_bzReadOpen\nBZ_IO_ERROR\n  if there is an error writing the compressed file\nBZ_OK\n  otherwise</pre>\n</div>\n<div class=\"sect2\" title=\"3.4.8.Handling embedded compressed data streams\">\n<div class=\"titlepage\"><div><div><h3 class=\"title\">\n<a name=\"embed\"></a>3.4.8.Handling embedded compressed data streams</h3></div></div></div>\n<p>The high-level library facilitates use of\n<code class=\"computeroutput\">bzip2</code> data streams which form\nsome part of a surrounding, larger data stream.</p>\n<div class=\"itemizedlist\"><ul class=\"itemizedlist\" type=\"bullet\">\n<li class=\"listitem\" style=\"list-style-type: disc\"><p>For writing, the library takes an open file handle,\n  writes compressed data to it,\n  <code class=\"computeroutput\">fflush</code>es it but does not\n  <code class=\"computeroutput\">fclose</code> it.  The calling\n  application can write its own data before and after the\n  compressed data stream, using that same file handle.</p></li>\n<li class=\"listitem\" style=\"list-style-type: disc\"><p>Reading is more complex, and the facilities are not as\n  general as they could be since generality is hard to reconcile\n  with efficiency.  <code class=\"computeroutput\">BZ2_bzRead</code>\n  reads from the compressed file in blocks of size\n  <code class=\"computeroutput\">BZ_MAX_UNUSED</code> bytes, and in\n  doing so probably will overshoot the logical end of compressed\n  stream.  To recover this data once decompression has ended,\n  call <code class=\"computeroutput\">BZ2_bzReadGetUnused</code> after\n  the last call of <code class=\"computeroutput\">BZ2_bzRead</code>\n  (the one returning\n  <code class=\"computeroutput\">BZ_STREAM_END</code>) but before\n  calling\n  <code class=\"computeroutput\">BZ2_bzReadClose</code>.</p></li>\n</ul></div>\n<p>This mechanism makes it easy to decompress multiple\n<code class=\"computeroutput\">bzip2</code> streams placed end-to-end.\nAs the end of one stream, when\n<code class=\"computeroutput\">BZ2_bzRead</code> returns\n<code class=\"computeroutput\">BZ_STREAM_END</code>, call\n<code class=\"computeroutput\">BZ2_bzReadGetUnused</code> to collect\nthe unused data (copy it into your own buffer somewhere).  That\ndata forms the start of the next compressed stream.  To start\nuncompressing that next stream, call\n<code class=\"computeroutput\">BZ2_bzReadOpen</code> again, feeding in\nthe unused data via the <code class=\"computeroutput\">unused</code> /\n<code class=\"computeroutput\">nUnused</code> parameters.  Keep doing\nthis until <code class=\"computeroutput\">BZ_STREAM_END</code> return\ncoincides with the physical end of file\n(<code class=\"computeroutput\">feof(f)</code>).  In this situation\n<code class=\"computeroutput\">BZ2_bzReadGetUnused</code> will of\ncourse return no data.</p>\n<p>This should give some feel for how the high-level interface\ncan be used.  If you require extra flexibility, you'll have to\nbite the bullet and get to grips with the low-level\ninterface.</p>\n</div>\n<div class=\"sect2\" title=\"3.4.9.Standard file-reading/writing code\">\n<div class=\"titlepage\"><div><div><h3 class=\"title\">\n<a name=\"std-rdwr\"></a>3.4.9.Standard file-reading/writing code</h3></div></div></div>\n<p>Here's how you'd write data to a compressed file:</p>\n<pre class=\"programlisting\">FILE*   f;\nBZFILE* b;\nint     nBuf;\nchar    buf[ /* whatever size you like */ ];\nint     bzerror;\nint     nWritten;\n\nf = fopen ( \"myfile.bz2\", \"w\" );\nif ( !f ) {\n /* handle error */\n}\nb = BZ2_bzWriteOpen( &amp;bzerror, f, 9 );\nif (bzerror != BZ_OK) {\n BZ2_bzWriteClose ( b );\n /* handle error */\n}\n\nwhile ( /* condition */ ) {\n /* get data to write into buf, and set nBuf appropriately */\n nWritten = BZ2_bzWrite ( &amp;bzerror, b, buf, nBuf );\n if (bzerror == BZ_IO_ERROR) { \n   BZ2_bzWriteClose ( &amp;bzerror, b );\n   /* handle error */\n }\n}\n\nBZ2_bzWriteClose( &amp;bzerror, b );\nif (bzerror == BZ_IO_ERROR) {\n /* handle error */\n}</pre>\n<p>And to read from a compressed file:</p>\n<pre class=\"programlisting\">FILE*   f;\nBZFILE* b;\nint     nBuf;\nchar    buf[ /* whatever size you like */ ];\nint     bzerror;\nint     nWritten;\n\nf = fopen ( \"myfile.bz2\", \"r\" );\nif ( !f ) {\n  /* handle error */\n}\nb = BZ2_bzReadOpen ( &amp;bzerror, f, 0, NULL, 0 );\nif ( bzerror != BZ_OK ) {\n  BZ2_bzReadClose ( &amp;bzerror, b );\n  /* handle error */\n}\n\nbzerror = BZ_OK;\nwhile ( bzerror == BZ_OK &amp;&amp; /* arbitrary other conditions */) {\n  nBuf = BZ2_bzRead ( &amp;bzerror, b, buf, /* size of buf */ );\n  if ( bzerror == BZ_OK ) {\n    /* do something with buf[0 .. nBuf-1] */\n  }\n}\nif ( bzerror != BZ_STREAM_END ) {\n   BZ2_bzReadClose ( &amp;bzerror, b );\n   /* handle error */\n} else {\n   BZ2_bzReadClose ( &amp;bzerror, b );\n}</pre>\n</div>\n</div>\n<div class=\"sect1\" title=\"3.5.Utility functions\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\" style=\"clear: both\">\n<a name=\"util-fns\"></a>3.5.Utility functions</h2></div></div></div>\n<div class=\"sect2\" title=\"3.5.1.BZ2_bzBuffToBuffCompress\">\n<div class=\"titlepage\"><div><div><h3 class=\"title\">\n<a name=\"bzbufftobuffcompress\"></a>3.5.1.BZ2_bzBuffToBuffCompress</h3></div></div></div>\n<pre class=\"programlisting\">int BZ2_bzBuffToBuffCompress( char*         dest,\n                              unsigned int* destLen,\n                              char*         source,\n                              unsigned int  sourceLen,\n                              int           blockSize100k,\n                              int           verbosity,\n                              int           workFactor );</pre>\n<p>Attempts to compress the data in <code class=\"computeroutput\">source[0\n.. sourceLen-1]</code> into the destination buffer,\n<code class=\"computeroutput\">dest[0 .. *destLen-1]</code>.  If the\ndestination buffer is big enough,\n<code class=\"computeroutput\">*destLen</code> is set to the size of\nthe compressed data, and <code class=\"computeroutput\">BZ_OK</code>\nis returned.  If the compressed data won't fit,\n<code class=\"computeroutput\">*destLen</code> is unchanged, and\n<code class=\"computeroutput\">BZ_OUTBUFF_FULL</code> is\nreturned.</p>\n<p>Compression in this manner is a one-shot event, done with a\nsingle call to this function.  The resulting compressed data is a\ncomplete <code class=\"computeroutput\">bzip2</code> format data\nstream.  There is no mechanism for making additional calls to\nprovide extra input data.  If you want that kind of mechanism,\nuse the low-level interface.</p>\n<p>For the meaning of parameters\n<code class=\"computeroutput\">blockSize100k</code>,\n<code class=\"computeroutput\">verbosity</code> and\n<code class=\"computeroutput\">workFactor</code>, see\n<code class=\"computeroutput\">BZ2_bzCompressInit</code>.</p>\n<p>To guarantee that the compressed data will fit in its\nbuffer, allocate an output buffer of size 1% larger than the\nuncompressed data, plus six hundred extra bytes.</p>\n<p><code class=\"computeroutput\">BZ2_bzBuffToBuffDecompress</code>\nwill not write data at or beyond\n<code class=\"computeroutput\">dest[*destLen]</code>, even in case of\nbuffer overflow.</p>\n<p>Possible return values:</p>\n<pre class=\"programlisting\">BZ_CONFIG_ERROR\n  if the library has been mis-compiled\nBZ_PARAM_ERROR\n  if dest is NULL or destLen is NULL\n  or blockSize100k &lt; 1 or blockSize100k &gt; 9\n  or verbosity &lt; 0 or verbosity &gt; 4\n  or workFactor &lt; 0 or workFactor &gt; 250\nBZ_MEM_ERROR\n  if insufficient memory is available \nBZ_OUTBUFF_FULL\n  if the size of the compressed data exceeds *destLen\nBZ_OK\n  otherwise</pre>\n</div>\n<div class=\"sect2\" title=\"3.5.2.BZ2_bzBuffToBuffDecompress\">\n<div class=\"titlepage\"><div><div><h3 class=\"title\">\n<a name=\"bzbufftobuffdecompress\"></a>3.5.2.BZ2_bzBuffToBuffDecompress</h3></div></div></div>\n<pre class=\"programlisting\">int BZ2_bzBuffToBuffDecompress( char*         dest,\n                                unsigned int* destLen,\n                                char*         source,\n                                unsigned int  sourceLen,\n                                int           small,\n                                int           verbosity );</pre>\n<p>Attempts to decompress the data in <code class=\"computeroutput\">source[0\n.. sourceLen-1]</code> into the destination buffer,\n<code class=\"computeroutput\">dest[0 .. *destLen-1]</code>.  If the\ndestination buffer is big enough,\n<code class=\"computeroutput\">*destLen</code> is set to the size of\nthe uncompressed data, and <code class=\"computeroutput\">BZ_OK</code>\nis returned.  If the compressed data won't fit,\n<code class=\"computeroutput\">*destLen</code> is unchanged, and\n<code class=\"computeroutput\">BZ_OUTBUFF_FULL</code> is\nreturned.</p>\n<p><code class=\"computeroutput\">source</code> is assumed to hold\na complete <code class=\"computeroutput\">bzip2</code> format data\nstream.\n<code class=\"computeroutput\">BZ2_bzBuffToBuffDecompress</code> tries\nto decompress the entirety of the stream into the output\nbuffer.</p>\n<p>For the meaning of parameters\n<code class=\"computeroutput\">small</code> and\n<code class=\"computeroutput\">verbosity</code>, see\n<code class=\"computeroutput\">BZ2_bzDecompressInit</code>.</p>\n<p>Because the compression ratio of the compressed data cannot\nbe known in advance, there is no easy way to guarantee that the\noutput buffer will be big enough.  You may of course make\narrangements in your code to record the size of the uncompressed\ndata, but such a mechanism is beyond the scope of this\nlibrary.</p>\n<p><code class=\"computeroutput\">BZ2_bzBuffToBuffDecompress</code>\nwill not write data at or beyond\n<code class=\"computeroutput\">dest[*destLen]</code>, even in case of\nbuffer overflow.</p>\n<p>Possible return values:</p>\n<pre class=\"programlisting\">BZ_CONFIG_ERROR\n  if the library has been mis-compiled\nBZ_PARAM_ERROR\n  if dest is NULL or destLen is NULL\n  or small != 0 &amp;&amp; small != 1\n  or verbosity &lt; 0 or verbosity &gt; 4\nBZ_MEM_ERROR\n  if insufficient memory is available \nBZ_OUTBUFF_FULL\n  if the size of the compressed data exceeds *destLen\nBZ_DATA_ERROR\n  if a data integrity error was detected in the compressed data\nBZ_DATA_ERROR_MAGIC\n  if the compressed data doesn't begin with the right magic bytes\nBZ_UNEXPECTED_EOF\n  if the compressed data ends unexpectedly\nBZ_OK\n  otherwise</pre>\n</div>\n</div>\n<div class=\"sect1\" title=\"3.6.zlib compatibility functions\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\" style=\"clear: both\">\n<a name=\"zlib-compat\"></a>3.6.zlib compatibility functions</h2></div></div></div>\n<p>Yoshioka Tsuneo has contributed some functions to give\nbetter <code class=\"computeroutput\">zlib</code> compatibility.\nThese functions are <code class=\"computeroutput\">BZ2_bzopen</code>,\n<code class=\"computeroutput\">BZ2_bzread</code>,\n<code class=\"computeroutput\">BZ2_bzwrite</code>,\n<code class=\"computeroutput\">BZ2_bzflush</code>,\n<code class=\"computeroutput\">BZ2_bzclose</code>,\n<code class=\"computeroutput\">BZ2_bzerror</code> and\n<code class=\"computeroutput\">BZ2_bzlibVersion</code>.  These\nfunctions are not (yet) officially part of the library.  If they\nbreak, you get to keep all the pieces.  Nevertheless, I think\nthey work ok.</p>\n<pre class=\"programlisting\">typedef void BZFILE;\n\nconst char * BZ2_bzlibVersion ( void );</pre>\n<p>Returns a string indicating the library version.</p>\n<pre class=\"programlisting\">BZFILE * BZ2_bzopen  ( const char *path, const char *mode );\nBZFILE * BZ2_bzdopen ( int        fd,    const char *mode );</pre>\n<p>Opens a <code class=\"computeroutput\">.bz2</code> file for\nreading or writing, using either its name or a pre-existing file\ndescriptor.  Analogous to <code class=\"computeroutput\">fopen</code>\nand <code class=\"computeroutput\">fdopen</code>.</p>\n<pre class=\"programlisting\">int BZ2_bzread  ( BZFILE* b, void* buf, int len );\nint BZ2_bzwrite ( BZFILE* b, void* buf, int len );</pre>\n<p>Reads/writes data from/to a previously opened\n<code class=\"computeroutput\">BZFILE</code>.  Analogous to\n<code class=\"computeroutput\">fread</code> and\n<code class=\"computeroutput\">fwrite</code>.</p>\n<pre class=\"programlisting\">int  BZ2_bzflush ( BZFILE* b );\nvoid BZ2_bzclose ( BZFILE* b );</pre>\n<p>Flushes/closes a <code class=\"computeroutput\">BZFILE</code>.\n<code class=\"computeroutput\">BZ2_bzflush</code> doesn't actually do\nanything.  Analogous to <code class=\"computeroutput\">fflush</code>\nand <code class=\"computeroutput\">fclose</code>.</p>\n<pre class=\"programlisting\">const char * BZ2_bzerror ( BZFILE *b, int *errnum )</pre>\n<p>Returns a string describing the more recent error status of\n<code class=\"computeroutput\">b</code>, and also sets\n<code class=\"computeroutput\">*errnum</code> to its numerical\nvalue.</p>\n</div>\n<div class=\"sect1\" title=\"3.7.Using the library in a stdio-free environment\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\" style=\"clear: both\">\n<a name=\"stdio-free\"></a>3.7.Using the library in a stdio-free environment</h2></div></div></div>\n<div class=\"sect2\" title=\"3.7.1.Getting rid of stdio\">\n<div class=\"titlepage\"><div><div><h3 class=\"title\">\n<a name=\"stdio-bye\"></a>3.7.1.Getting rid of stdio</h3></div></div></div>\n<p>In a deeply embedded application, you might want to use\njust the memory-to-memory functions.  You can do this\nconveniently by compiling the library with preprocessor symbol\n<code class=\"computeroutput\">BZ_NO_STDIO</code> defined.  Doing this\ngives you a library containing only the following eight\nfunctions:</p>\n<p><code class=\"computeroutput\">BZ2_bzCompressInit</code>,\n<code class=\"computeroutput\">BZ2_bzCompress</code>,\n<code class=\"computeroutput\">BZ2_bzCompressEnd</code>\n<code class=\"computeroutput\">BZ2_bzDecompressInit</code>,\n<code class=\"computeroutput\">BZ2_bzDecompress</code>,\n<code class=\"computeroutput\">BZ2_bzDecompressEnd</code>\n<code class=\"computeroutput\">BZ2_bzBuffToBuffCompress</code>,\n<code class=\"computeroutput\">BZ2_bzBuffToBuffDecompress</code></p>\n<p>When compiled like this, all functions will ignore\n<code class=\"computeroutput\">verbosity</code> settings.</p>\n</div>\n<div class=\"sect2\" title=\"3.7.2.Critical error handling\">\n<div class=\"titlepage\"><div><div><h3 class=\"title\">\n<a name=\"critical-error\"></a>3.7.2.Critical error handling</h3></div></div></div>\n<p><code class=\"computeroutput\">libbzip2</code> contains a number\nof internal assertion checks which should, needless to say, never\nbe activated.  Nevertheless, if an assertion should fail,\nbehaviour depends on whether or not the library was compiled with\n<code class=\"computeroutput\">BZ_NO_STDIO</code> set.</p>\n<p>For a normal compile, an assertion failure yields the\nmessage:</p>\n<div class=\"blockquote\"><blockquote class=\"blockquote\">\n<p>bzip2/libbzip2: internal error number N.</p>\n<p>This is a bug in bzip2/libbzip2, 1.0.6 of 6 September 2010.\nPlease report it to me at: jseward@bzip.org.  If this happened\nwhen you were using some program which uses libbzip2 as a\ncomponent, you should also report this bug to the author(s)\nof that program.  Please make an effort to report this bug;\ntimely and accurate bug reports eventually lead to higher\nquality software.  Thanks.  Julian Seward, 6 September 2010.\n</p>\n</blockquote></div>\n<p>where <code class=\"computeroutput\">N</code> is some error code\nnumber.  If <code class=\"computeroutput\">N == 1007</code>, it also\nprints some extra text advising the reader that unreliable memory\nis often associated with internal error 1007. (This is a\nfrequently-observed-phenomenon with versions 1.0.0/1.0.1).</p>\n<p><code class=\"computeroutput\">exit(3)</code> is then\ncalled.</p>\n<p>For a <code class=\"computeroutput\">stdio</code>-free library,\nassertion failures result in a call to a function declared\nas:</p>\n<pre class=\"programlisting\">extern void bz_internal_error ( int errcode );</pre>\n<p>The relevant code is passed as a parameter.  You should\nsupply such a function.</p>\n<p>In either case, once an assertion failure has occurred, any\n<code class=\"computeroutput\">bz_stream</code> records involved can\nbe regarded as invalid.  You should not attempt to resume normal\noperation with them.</p>\n<p>You may, of course, change critical error handling to suit\nyour needs.  As I said above, critical errors indicate bugs in\nthe library and should not occur.  All \"normal\" error situations\nare indicated via error return codes from functions, and can be\nrecovered from.</p>\n</div>\n</div>\n<div class=\"sect1\" title=\"3.8.Making a Windows DLL\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\" style=\"clear: both\">\n<a name=\"win-dll\"></a>3.8.Making a Windows DLL</h2></div></div></div>\n<p>Everything related to Windows has been contributed by\nYoshioka Tsuneo\n(<code class=\"computeroutput\">tsuneo@rr.iij4u.or.jp</code>), so\nyou should send your queries to him (but perhaps Cc: me,\n<code class=\"computeroutput\">jseward@bzip.org</code>).</p>\n<p>My vague understanding of what to do is: using Visual C++\n5.0, open the project file\n<code class=\"computeroutput\">libbz2.dsp</code>, and build.  That's\nall.</p>\n<p>If you can't open the project file for some reason, make a\nnew one, naming these files:\n<code class=\"computeroutput\">blocksort.c</code>,\n<code class=\"computeroutput\">bzlib.c</code>,\n<code class=\"computeroutput\">compress.c</code>,\n<code class=\"computeroutput\">crctable.c</code>,\n<code class=\"computeroutput\">decompress.c</code>,\n<code class=\"computeroutput\">huffman.c</code>,\n<code class=\"computeroutput\">randtable.c</code> and\n<code class=\"computeroutput\">libbz2.def</code>.  You will also need\nto name the header files <code class=\"computeroutput\">bzlib.h</code>\nand <code class=\"computeroutput\">bzlib_private.h</code>.</p>\n<p>If you don't use VC++, you may need to define the\nproprocessor symbol\n<code class=\"computeroutput\">_WIN32</code>.</p>\n<p>Finally, <code class=\"computeroutput\">dlltest.c</code> is a\nsample program using the DLL.  It has a project file,\n<code class=\"computeroutput\">dlltest.dsp</code>.</p>\n<p>If you just want a makefile for Visual C, have a look at\n<code class=\"computeroutput\">makefile.msc</code>.</p>\n<p>Be aware that if you compile\n<code class=\"computeroutput\">bzip2</code> itself on Win32, you must\nset <code class=\"computeroutput\">BZ_UNIX</code> to 0 and\n<code class=\"computeroutput\">BZ_LCCWIN32</code> to 1, in the file\n<code class=\"computeroutput\">bzip2.c</code>, before compiling.\nOtherwise the resulting binary won't work correctly.</p>\n<p>I haven't tried any of this stuff myself, but it all looks\nplausible.</p>\n</div>\n</div>\n<div class=\"chapter\" title=\"4.Miscellanea\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\">\n<a name=\"misc\"></a>4.Miscellanea</h2></div></div></div>\n<div class=\"toc\">\n<p><b>Table of Contents</b></p>\n<dl>\n<dt><span class=\"sect1\"><a href=\"#limits\">4.1. Limitations of the compressed file format</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#port-issues\">4.2. Portability issues</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#bugs\">4.3. Reporting bugs</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#package\">4.4. Did you get the right package?</a></span></dt>\n<dt><span class=\"sect1\"><a href=\"#reading\">4.5. Further Reading</a></span></dt>\n</dl>\n</div>\n<p>These are just some random thoughts of mine.  Your mileage\nmay vary.</p>\n<div class=\"sect1\" title=\"4.1.Limitations of the compressed file format\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\" style=\"clear: both\">\n<a name=\"limits\"></a>4.1.Limitations of the compressed file format</h2></div></div></div>\n<p><code class=\"computeroutput\">bzip2-1.0.X</code>,\n<code class=\"computeroutput\">0.9.5</code> and\n<code class=\"computeroutput\">0.9.0</code> use exactly the same file\nformat as the original version,\n<code class=\"computeroutput\">bzip2-0.1</code>.  This decision was\nmade in the interests of stability.  Creating yet another\nincompatible compressed file format would create further\nconfusion and disruption for users.</p>\n<p>Nevertheless, this is not a painless decision.  Development\nwork since the release of\n<code class=\"computeroutput\">bzip2-0.1</code> in August 1997 has\nshown complexities in the file format which slow down\ndecompression and, in retrospect, are unnecessary.  These\nare:</p>\n<div class=\"itemizedlist\"><ul class=\"itemizedlist\" type=\"bullet\">\n<li class=\"listitem\" style=\"list-style-type: disc\"><p>The run-length encoder, which is the first of the\n   compression transformations, is entirely irrelevant.  The\n   original purpose was to protect the sorting algorithm from the\n   very worst case input: a string of repeated symbols.  But\n   algorithm steps Q6a and Q6b in the original Burrows-Wheeler\n   technical report (SRC-124) show how repeats can be handled\n   without difficulty in block sorting.</p></li>\n<li class=\"listitem\" style=\"list-style-type: disc\">\n<p>The randomisation mechanism doesn't really need to be\n   there.  Udi Manber and Gene Myers published a suffix array\n   construction algorithm a few years back, which can be employed\n   to sort any block, no matter how repetitive, in O(N log N)\n   time.  Subsequent work by Kunihiko Sadakane has produced a\n   derivative O(N (log N)^2) algorithm which usually outperforms\n   the Manber-Myers algorithm.</p>\n<p>I could have changed to Sadakane's algorithm, but I find\n   it to be slower than <code class=\"computeroutput\">bzip2</code>'s\n   existing algorithm for most inputs, and the randomisation\n   mechanism protects adequately against bad cases.  I didn't\n   think it was a good tradeoff to make.  Partly this is due to\n   the fact that I was not flooded with email complaints about\n   <code class=\"computeroutput\">bzip2-0.1</code>'s performance on\n   repetitive data, so perhaps it isn't a problem for real\n   inputs.</p>\n<p>Probably the best long-term solution, and the one I have\n   incorporated into 0.9.5 and above, is to use the existing\n   sorting algorithm initially, and fall back to a O(N (log N)^2)\n   algorithm if the standard algorithm gets into\n   difficulties.</p>\n</li>\n<li class=\"listitem\" style=\"list-style-type: disc\"><p>The compressed file format was never designed to be\n   handled by a library, and I have had to jump though some hoops\n   to produce an efficient implementation of decompression.  It's\n   a bit hairy.  Try passing\n   <code class=\"computeroutput\">decompress.c</code> through the C\n   preprocessor and you'll see what I mean.  Much of this\n   complexity could have been avoided if the compressed size of\n   each block of data was recorded in the data stream.</p></li>\n<li class=\"listitem\" style=\"list-style-type: disc\"><p>An Adler-32 checksum, rather than a CRC32 checksum,\n   would be faster to compute.</p></li>\n</ul></div>\n<p>It would be fair to say that the\n<code class=\"computeroutput\">bzip2</code> format was frozen before I\nproperly and fully understood the performance consequences of\ndoing so.</p>\n<p>Improvements which I was able to incorporate into 0.9.0,\ndespite using the same file format, are:</p>\n<div class=\"itemizedlist\"><ul class=\"itemizedlist\" type=\"bullet\">\n<li class=\"listitem\" style=\"list-style-type: disc\"><p>Single array implementation of the inverse BWT.  This\n  significantly speeds up decompression, presumably because it\n  reduces the number of cache misses.</p></li>\n<li class=\"listitem\" style=\"list-style-type: disc\"><p>Faster inverse MTF transform for large MTF values.\n  The new implementation is based on the notion of sliding blocks\n  of values.</p></li>\n<li class=\"listitem\" style=\"list-style-type: disc\"><p><code class=\"computeroutput\">bzip2-0.9.0</code> now reads\n  and writes files with <code class=\"computeroutput\">fread</code>\n  and <code class=\"computeroutput\">fwrite</code>; version 0.1 used\n  <code class=\"computeroutput\">putc</code> and\n  <code class=\"computeroutput\">getc</code>.  Duh!  Well, you live\n  and learn.</p></li>\n</ul></div>\n<p>Further ahead, it would be nice to be able to do random\naccess into files.  This will require some careful design of\ncompressed file formats.</p>\n</div>\n<div class=\"sect1\" title=\"4.2.Portability issues\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\" style=\"clear: both\">\n<a name=\"port-issues\"></a>4.2.Portability issues</h2></div></div></div>\n<p>After some consideration, I have decided not to use GNU\n<code class=\"computeroutput\">autoconf</code> to configure 0.9.5 or\n1.0.</p>\n<p><code class=\"computeroutput\">autoconf</code>, admirable and\nwonderful though it is, mainly assists with portability problems\nbetween Unix-like platforms.  But\n<code class=\"computeroutput\">bzip2</code> doesn't have much in the\nway of portability problems on Unix; most of the difficulties\nappear when porting to the Mac, or to Microsoft's operating\nsystems.  <code class=\"computeroutput\">autoconf</code> doesn't help\nin those cases, and brings in a whole load of new\ncomplexity.</p>\n<p>Most people should be able to compile the library and\nprogram under Unix straight out-of-the-box, so to speak,\nespecially if you have a version of GNU C available.</p>\n<p>There are a couple of\n<code class=\"computeroutput\">__inline__</code> directives in the\ncode.  GNU C (<code class=\"computeroutput\">gcc</code>) should be\nable to handle them.  If you're not using GNU C, your C compiler\nshouldn't see them at all.  If your compiler does, for some\nreason, see them and doesn't like them, just\n<code class=\"computeroutput\">#define</code>\n<code class=\"computeroutput\">__inline__</code> to be\n<code class=\"computeroutput\">/* */</code>.  One easy way to do this\nis to compile with the flag\n<code class=\"computeroutput\">-D__inline__=</code>, which should be\nunderstood by most Unix compilers.</p>\n<p>If you still have difficulties, try compiling with the\nmacro <code class=\"computeroutput\">BZ_STRICT_ANSI</code> defined.\nThis should enable you to build the library in a strictly ANSI\ncompliant environment.  Building the program itself like this is\ndangerous and not supported, since you remove\n<code class=\"computeroutput\">bzip2</code>'s checks against\ncompressing directories, symbolic links, devices, and other\nnot-really-a-file entities.  This could cause filesystem\ncorruption!</p>\n<p>One other thing: if you create a\n<code class=\"computeroutput\">bzip2</code> binary for public distribution,\nplease consider linking it statically (<code class=\"computeroutput\">gcc\n-static</code>).  This avoids all sorts of library-version\nissues that others may encounter later on.</p>\n<p>If you build <code class=\"computeroutput\">bzip2</code> on\nWin32, you must set <code class=\"computeroutput\">BZ_UNIX</code> to 0\nand <code class=\"computeroutput\">BZ_LCCWIN32</code> to 1, in the\nfile <code class=\"computeroutput\">bzip2.c</code>, before compiling.\nOtherwise the resulting binary won't work correctly.</p>\n</div>\n<div class=\"sect1\" title=\"4.3.Reporting bugs\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\" style=\"clear: both\">\n<a name=\"bugs\"></a>4.3.Reporting bugs</h2></div></div></div>\n<p>I tried pretty hard to make sure\n<code class=\"computeroutput\">bzip2</code> is bug free, both by\ndesign and by testing.  Hopefully you'll never need to read this\nsection for real.</p>\n<p>Nevertheless, if <code class=\"computeroutput\">bzip2</code> dies\nwith a segmentation fault, a bus error or an internal assertion\nfailure, it will ask you to email me a bug report.  Experience from\nyears of feedback of bzip2 users indicates that almost all these\nproblems can be traced to either compiler bugs or hardware\nproblems.</p>\n<div class=\"itemizedlist\"><ul class=\"itemizedlist\" type=\"bullet\">\n<li class=\"listitem\" style=\"list-style-type: disc\">\n<p>Recompile the program with no optimisation, and\n  see if it works.  And/or try a different compiler.  I heard all\n  sorts of stories about various flavours of GNU C (and other\n  compilers) generating bad code for\n  <code class=\"computeroutput\">bzip2</code>, and I've run across two\n  such examples myself.</p>\n<p>2.7.X versions of GNU C are known to generate bad code\n  from time to time, at high optimisation levels.  If you get\n  problems, try using the flags\n  <code class=\"computeroutput\">-O2</code>\n  <code class=\"computeroutput\">-fomit-frame-pointer</code>\n  <code class=\"computeroutput\">-fno-strength-reduce</code>.  You\n  should specifically <span class=\"emphasis\"><em>not</em></span> use\n  <code class=\"computeroutput\">-funroll-loops</code>.</p>\n<p>You may notice that the Makefile runs six tests as part\n  of the build process.  If the program passes all of these, it's\n  a pretty good (but not 100%) indication that the compiler has\n  done its job correctly.</p>\n</li>\n<li class=\"listitem\" style=\"list-style-type: disc\">\n<p>If <code class=\"computeroutput\">bzip2</code>\n  crashes randomly, and the crashes are not repeatable, you may\n  have a flaky memory subsystem.\n  <code class=\"computeroutput\">bzip2</code> really hammers your\n  memory hierarchy, and if it's a bit marginal, you may get these\n  problems.  Ditto if your disk or I/O subsystem is slowly\n  failing.  Yup, this really does happen.</p>\n<p>Try using a different machine of the same type, and see\n  if you can repeat the problem.</p>\n</li>\n<li class=\"listitem\" style=\"list-style-type: disc\"><p>This isn't really a bug, but ... If\n  <code class=\"computeroutput\">bzip2</code> tells you your file is\n  corrupted on decompression, and you obtained the file via FTP,\n  there is a possibility that you forgot to tell FTP to do a\n  binary mode transfer.  That absolutely will cause the file to\n  be non-decompressible.  You'll have to transfer it\n  again.</p></li>\n</ul></div>\n<p>If you've incorporated\n<code class=\"computeroutput\">libbzip2</code> into your own program\nand are getting problems, please, please, please, check that the\nparameters you are passing in calls to the library, are correct,\nand in accordance with what the documentation says is allowable.\nI have tried to make the library robust against such problems,\nbut I'm sure I haven't succeeded.</p>\n<p>Finally, if the above comments don't help, you'll have to\nsend me a bug report.  Now, it's just amazing how many people\nwill send me a bug report saying something like:</p>\n<pre class=\"programlisting\">bzip2 crashed with segmentation fault on my machine</pre>\n<p>and absolutely nothing else.  Needless to say, a such a\nreport is <span class=\"emphasis\"><em>totally, utterly, completely and\ncomprehensively 100% useless; a waste of your time, my time, and\nnet bandwidth</em></span>.  With no details at all, there's no way\nI can possibly begin to figure out what the problem is.</p>\n<p>The rules of the game are: facts, facts, facts.  Don't omit\nthem because \"oh, they won't be relevant\".  At the bare\nminimum:</p>\n<pre class=\"programlisting\">Machine type.  Operating system version.  \nExact version of bzip2 (do bzip2 -V).  \nExact version of the compiler used.  \nFlags passed to the compiler.</pre>\n<p>However, the most important single thing that will help me\nis the file that you were trying to compress or decompress at the\ntime the problem happened.  Without that, my ability to do\nanything more than speculate about the cause, is limited.</p>\n</div>\n<div class=\"sect1\" title=\"4.4.Did you get the right package?\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\" style=\"clear: both\">\n<a name=\"package\"></a>4.4.Did you get the right package?</h2></div></div></div>\n<p><code class=\"computeroutput\">bzip2</code> is a resource hog.\nIt soaks up large amounts of CPU cycles and memory.  Also, it\ngives very large latencies.  In the worst case, you can feed many\nmegabytes of uncompressed data into the library before getting\nany compressed output, so this probably rules out applications\nrequiring interactive behaviour.</p>\n<p>These aren't faults of my implementation, I hope, but more\nan intrinsic property of the Burrows-Wheeler transform\n(unfortunately).  Maybe this isn't what you want.</p>\n<p>If you want a compressor and/or library which is faster,\nuses less memory but gets pretty good compression, and has\nminimal latency, consider Jean-loup Gailly's and Mark Adler's\nwork, <code class=\"computeroutput\">zlib-1.2.1</code> and\n<code class=\"computeroutput\">gzip-1.2.4</code>.  Look for them at \n<a class=\"ulink\" href=\"http://www.zlib.org\" target=\"_top\">http://www.zlib.org</a> and \n<a class=\"ulink\" href=\"http://www.gzip.org\" target=\"_top\">http://www.gzip.org</a>\nrespectively.</p>\n<p>For something faster and lighter still, you might try Markus F\nX J Oberhumer's <code class=\"computeroutput\">LZO</code> real-time\ncompression/decompression library, at \n<a class=\"ulink\" href=\"http://www.oberhumer.com/opensource\" target=\"_top\">http://www.oberhumer.com/opensource</a>.</p>\n</div>\n<div class=\"sect1\" title=\"4.5.Further Reading\">\n<div class=\"titlepage\"><div><div><h2 class=\"title\" style=\"clear: both\">\n<a name=\"reading\"></a>4.5.Further Reading</h2></div></div></div>\n<p><code class=\"computeroutput\">bzip2</code> is not research\nwork, in the sense that it doesn't present any new ideas.\nRather, it's an engineering exercise based on existing\nideas.</p>\n<p>Four documents describe essentially all the ideas behind\n<code class=\"computeroutput\">bzip2</code>:</p>\n<div class=\"literallayout\"><p>MichaelBurrowsandD.J.Wheeler:<br>\n\"Ablock-sortinglosslessdatacompressionalgorithm\"<br>\n10thMay1994.<br>\nDigitalSRCResearchReport124.<br>\nftp://ftp.digital.com/pub/DEC/SRC/research-reports/SRC-124.ps.gz<br>\nIfyouhavetroublefindingit,trysearchingatthe<br>\nNewZealandDigitalLibrary,http://www.nzdl.org.<br>\n<br>\nDanielS.HirschbergandDebraA.LeLewer<br>\n\"EfficientDecodingofPrefixCodes\"<br>\nCommunicationsoftheACM,April1990,Vol33,Number4.<br>\nYoumightbeabletogetanelectroniccopyofthis<br>\nfromtheACMDigitalLibrary.<br>\n<br>\nDavidJ.Wheeler<br>\nProgrambred3.candaccompanyingdocumentbred3.ps.<br>\nThiscontainstheideabehindthemulti-tableHuffmancodingscheme.<br>\nftp://ftp.cl.cam.ac.uk/users/djw3/<br>\n<br>\nJonL.BentleyandRobertSedgewick<br>\n\"FastAlgorithmsforSortingandSearchingStrings\"<br>\nAvailablefromSedgewick'swebpage,<br>\nwww.cs.princeton.edu/~rs<br>\n</p></div>\n<p>The following paper gives valuable additional insights into\nthe algorithm, but is not immediately the basis of any code used\nin bzip2.</p>\n<div class=\"literallayout\"><p>PeterFenwick:<br>\nBlockSortingTextCompression<br>\nProceedingsofthe19thAustralasianComputerScienceConference,<br>\nMelbourne,Australia.Jan31-Feb2,1996.<br>\nftp://ftp.cs.auckland.ac.nz/pub/peter-f/ACSC96paper.ps</p></div>\n<p>Kunihiko Sadakane's sorting algorithm, mentioned above, is\navailable from:</p>\n<div class=\"literallayout\"><p>http://naomi.is.s.u-tokyo.ac.jp/~sada/papers/Sada98b.ps.gz<br>\n</p></div>\n<p>The Manber-Myers suffix array construction algorithm is\ndescribed in a paper available from:</p>\n<div class=\"literallayout\"><p>http://www.cs.arizona.edu/people/gene/PAPERS/suffix.ps<br>\n</p></div>\n<p>Finally, the following papers document some\ninvestigations I made into the performance of sorting\nand decompression algorithms:</p>\n<div class=\"literallayout\"><p>JulianSeward<br>\nOnthePerformanceofBWTSortingAlgorithms<br>\nProceedingsoftheIEEEDataCompressionConference2000<br>\nSnowbird,Utah.28-30March2000.<br>\n<br>\nJulianSeward<br>\nSpace-timeTradeoffsintheInverseB-WTransform<br>\nProceedingsoftheIEEEDataCompressionConference2001<br>\nSnowbird,Utah.27-29March2001.<br>\n</p></div>\n</div>\n</div>\n</div></body>\n</html>\n"
  },
  {
    "path": "external/bzip2/manual.ps",
    "content": "%!PS-Adobe-3.0\n%%Creator: PassiveTeX 1.25\n%%LanguageLevel: 2\n%%DocumentSuppliedResources: (atend)\n%%DocumentMedia: plain 612 792 0 () ()\n%%BoundingBox: 0 0 612 792\n%%Pages: 38\n%%EndComments\n%%BeginDefaults\n%%PageMedia: plain\n%%EndDefaults\n%%BeginProlog\n%%BeginResource: procset xpdf 3.00 0\n%%Copyright: Copyright 1996-2004 Glyph & Cog, LLC\n/xpdf 75 dict def xpdf begin\n% PDF special state\n/pdfDictSize 15 def\n/pdfSetup {\n  3 1 roll 2 array astore\n  /setpagedevice where {\n    pop 3 dict begin\n      /PageSize exch def\n      /ImagingBBox null def\n      { /Duplex true def } if\n    currentdict end setpagedevice\n  } {\n    pop pop\n  } ifelse\n} def\n/pdfStartPage {\n  pdfDictSize dict begin\n  /pdfFillCS [] def\n  /pdfFillXform {} def\n  /pdfStrokeCS [] def\n  /pdfStrokeXform {} def\n  /pdfFill [0] def\n  /pdfStroke [0] def\n  /pdfFillOP false def\n  /pdfStrokeOP false def\n  /pdfLastFill false def\n  /pdfLastStroke false def\n  /pdfTextMat [1 0 0 1 0 0] def\n  /pdfFontSize 0 def\n  /pdfCharSpacing 0 def\n  /pdfTextRender 0 def\n  /pdfTextRise 0 def\n  /pdfWordSpacing 0 def\n  /pdfHorizScaling 1 def\n  /pdfTextClipPath [] def\n} def\n/pdfEndPage { end } def\n% PDF color state\n/cs { /pdfFillXform exch def dup /pdfFillCS exch def\n      setcolorspace } def\n/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def\n      setcolorspace } def\n/sc { pdfLastFill not { pdfFillCS setcolorspace } if\n      dup /pdfFill exch def aload pop pdfFillXform setcolor\n     /pdfLastFill true def /pdfLastStroke false def } def\n/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if\n      dup /pdfStroke exch def aload pop pdfStrokeXform setcolor\n     /pdfLastStroke true def /pdfLastFill false def } def\n/op { /pdfFillOP exch def\n      pdfLastFill { pdfFillOP setoverprint } if } def\n/OP { /pdfStrokeOP exch def\n      pdfLastStroke { pdfStrokeOP setoverprint } if } def\n/fCol {\n  pdfLastFill not {\n    pdfFillCS setcolorspace\n    pdfFill aload pop pdfFillXform setcolor\n    pdfFillOP setoverprint\n    /pdfLastFill true def /pdfLastStroke false def\n  } if\n} def\n/sCol {\n  pdfLastStroke not {\n    pdfStrokeCS setcolorspace\n    pdfStroke aload pop pdfStrokeXform setcolor\n    pdfStrokeOP setoverprint\n    /pdfLastStroke true def /pdfLastFill false def\n  } if\n} def\n% build a font\n/pdfMakeFont {\n  4 3 roll findfont\n  4 2 roll matrix scale makefont\n  dup length dict begin\n    { 1 index /FID ne { def } { pop pop } ifelse } forall\n    /Encoding exch def\n    currentdict\n  end\n  definefont pop\n} def\n/pdfMakeFont16 {\n  exch findfont\n  dup length dict begin\n    { 1 index /FID ne { def } { pop pop } ifelse } forall\n    /WMode exch def\n    currentdict\n  end\n  definefont pop\n} def\n% graphics state operators\n/q { gsave pdfDictSize dict begin } def\n/Q {\n  end grestore\n  /pdfLastFill where {\n    pop\n    pdfLastFill {\n      pdfFillOP setoverprint\n    } {\n      pdfStrokeOP setoverprint\n    } ifelse\n  } if\n} def\n/cm { concat } def\n/d { setdash } def\n/i { setflat } def\n/j { setlinejoin } def\n/J { setlinecap } def\n/M { setmiterlimit } def\n/w { setlinewidth } def\n% path segment operators\n/m { moveto } def\n/l { lineto } def\n/c { curveto } def\n/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto\n      neg 0 rlineto closepath } def\n/h { closepath } def\n% path painting operators\n/S { sCol stroke } def\n/Sf { fCol stroke } def\n/f { fCol fill } def\n/f* { fCol eofill } def\n% clipping operators\n/W { clip newpath } def\n/W* { eoclip newpath } def\n/Ws { strokepath clip newpath } def\n% text state operators\n/Tc { /pdfCharSpacing exch def } def\n/Tf { dup /pdfFontSize exch def\n      dup pdfHorizScaling mul exch matrix scale\n      pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put\n      exch findfont exch makefont setfont } def\n/Tr { /pdfTextRender exch def } def\n/Ts { /pdfTextRise exch def } def\n/Tw { /pdfWordSpacing exch def } def\n/Tz { /pdfHorizScaling exch def } def\n% text positioning operators\n/Td { pdfTextMat transform moveto } def\n/Tm { /pdfTextMat exch def } def\n% text string operators\n/cshow where {\n  pop\n  /cshow2 {\n    dup {\n      pop pop\n      1 string dup 0 3 index put 3 index exec\n    } exch cshow\n    pop pop\n  } def\n}{\n  /cshow2 {\n    currentfont /FontType get 0 eq {\n      0 2 2 index length 1 sub {\n        2 copy get exch 1 add 2 index exch get\n        2 copy exch 256 mul add\n        2 string dup 0 6 5 roll put dup 1 5 4 roll put\n        3 index exec\n      } for\n    } {\n      dup {\n        1 string dup 0 3 index put 3 index exec\n      } forall\n    } ifelse\n    pop pop\n  } def\n} ifelse\n/awcp {\n  exch {\n    false charpath\n    5 index 5 index rmoveto\n    6 index eq { 7 index 7 index rmoveto } if\n  } exch cshow2\n  6 {pop} repeat\n} def\n/Tj {\n  fCol\n  1 index stringwidth pdfTextMat idtransform pop\n  sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse\n  pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32\n  4 3 roll pdfCharSpacing pdfHorizScaling mul add 0\n  pdfTextMat dtransform\n  6 5 roll Tj1\n} def\n/Tj16 {\n  fCol\n  2 index stringwidth pdfTextMat idtransform pop\n  sub exch div\n  pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32\n  4 3 roll pdfCharSpacing pdfHorizScaling mul add 0\n  pdfTextMat dtransform\n  6 5 roll Tj1\n} def\n/Tj16V {\n  fCol\n  2 index stringwidth pdfTextMat idtransform exch pop\n  sub exch div\n  0 pdfWordSpacing pdfTextMat dtransform 32\n  4 3 roll pdfCharSpacing add 0 exch\n  pdfTextMat dtransform\n  6 5 roll Tj1\n} def\n/Tj1 {\n  0 pdfTextRise pdfTextMat dtransform rmoveto\n  currentpoint 8 2 roll\n  pdfTextRender 1 and 0 eq {\n    6 copy awidthshow\n  } if\n  pdfTextRender 3 and dup 1 eq exch 2 eq or {\n    7 index 7 index moveto\n    6 copy\n    currentfont /FontType get 3 eq { fCol } { sCol } ifelse\n    false awcp currentpoint stroke moveto\n  } if\n  pdfTextRender 4 and 0 ne {\n    8 6 roll moveto\n    false awcp\n    /pdfTextClipPath [ pdfTextClipPath aload pop\n      {/moveto cvx}\n      {/lineto cvx}\n      {/curveto cvx}\n      {/closepath cvx}\n    pathforall ] def\n    currentpoint newpath moveto\n  } {\n    8 {pop} repeat\n  } ifelse\n  0 pdfTextRise neg pdfTextMat dtransform rmoveto\n} def\n/TJm { pdfFontSize 0.001 mul mul neg 0\n       pdfTextMat dtransform rmoveto } def\n/TJmV { pdfFontSize 0.001 mul mul neg 0 exch\n        pdfTextMat dtransform rmoveto } def\n/Tclip { pdfTextClipPath cvx exec clip newpath\n         /pdfTextClipPath [] def } def\n/Tclip* { pdfTextClipPath cvx exec eoclip newpath\n         /pdfTextClipPath [] def } def\n% Level 2 image operators\n/pdfImBuf 100 string def\n/pdfIm {\n  image\n  { currentfile pdfImBuf readline\n    not { pop exit } if\n    (%-EOD-) eq { exit } if } loop\n} def\n/pdfImM {\n  fCol imagemask\n  { currentfile pdfImBuf readline\n    not { pop exit } if\n    (%-EOD-) eq { exit } if } loop\n} def\n/pr { 2 index 2 index 3 2 roll putinterval 4 add } def\n/pdfImClip {\n  gsave\n  0 2 4 index length 1 sub {\n    dup 4 index exch 2 copy\n    get 5 index div put\n    1 add 3 index exch 2 copy\n    get 3 index div put\n  } for\n  pop pop rectclip\n} def\n/pdfImClipEnd { grestore } def\n% shading operators\n/colordelta {\n  false 0 1 3 index length 1 sub {\n    dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {\n      pop true\n    } if\n  } for\n  exch pop exch pop\n} def\n/funcCol { func n array astore } def\n/funcSH {\n  dup 0 eq {\n    true\n  } {\n    dup 6 eq {\n      false\n    } {\n      4 index 4 index funcCol dup\n      6 index 4 index funcCol dup\n      3 1 roll colordelta 3 1 roll\n      5 index 5 index funcCol dup\n      3 1 roll colordelta 3 1 roll\n      6 index 8 index funcCol dup\n      3 1 roll colordelta 3 1 roll\n      colordelta or or or\n    } ifelse\n  } ifelse\n  {\n    1 add\n    4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch\n    6 index 6 index 4 index 4 index 4 index funcSH\n    2 index 6 index 6 index 4 index 4 index funcSH\n    6 index 2 index 4 index 6 index 4 index funcSH\n    5 3 roll 3 2 roll funcSH pop pop\n  } {\n    pop 3 index 2 index add 0.5 mul 3 index  2 index add 0.5 mul\n    funcCol sc\n    dup 4 index exch mat transform m\n    3 index 3 index mat transform l\n    1 index 3 index mat transform l\n    mat transform l pop pop h f*\n  } ifelse\n} def\n/axialCol {\n  dup 0 lt {\n    pop t0\n  } {\n    dup 1 gt {\n      pop t1\n    } {\n      dt mul t0 add\n    } ifelse\n  } ifelse\n  func n array astore\n} def\n/axialSH {\n  dup 0 eq {\n    true\n  } {\n    dup 8 eq {\n      false\n    } {\n      2 index axialCol 2 index axialCol colordelta\n    } ifelse\n  } ifelse\n  {\n    1 add 3 1 roll 2 copy add 0.5 mul\n    dup 4 3 roll exch 4 index axialSH\n    exch 3 2 roll axialSH\n  } {\n    pop 2 copy add 0.5 mul\n    axialCol sc\n    exch dup dx mul x0 add exch dy mul y0 add\n    3 2 roll dup dx mul x0 add exch dy mul y0 add\n    dx abs dy abs ge {\n      2 copy yMin sub dy mul dx div add yMin m\n      yMax sub dy mul dx div add yMax l\n      2 copy yMax sub dy mul dx div add yMax l\n      yMin sub dy mul dx div add yMin l\n      h f*\n    } {\n      exch 2 copy xMin sub dx mul dy div add xMin exch m\n      xMax sub dx mul dy div add xMax exch l\n      exch 2 copy xMax sub dx mul dy div add xMax exch l\n      xMin sub dx mul dy div add xMin exch l\n      h f*\n    } ifelse\n  } ifelse\n} def\n/radialCol {\n  dup t0 lt {\n    pop t0\n  } {\n    dup t1 gt {\n      pop t1\n    } if\n  } ifelse\n  func n array astore\n} def\n/radialSH {\n  dup 0 eq {\n    true\n  } {\n    dup 8 eq {\n      false\n    } {\n      2 index dt mul t0 add radialCol\n      2 index dt mul t0 add radialCol colordelta\n    } ifelse\n  } ifelse\n  {\n    1 add 3 1 roll 2 copy add 0.5 mul\n    dup 4 3 roll exch 4 index radialSH\n    exch 3 2 roll radialSH\n  } {\n    pop 2 copy add 0.5 mul dt mul t0 add\n    radialCol sc\n    encl {\n      exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      0 360 arc h\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      360 0 arcn h f\n    } {\n      2 copy\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      a1 a2 arcn\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      a2 a1 arcn h\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      a1 a2 arc\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      a2 a1 arc h f\n    } ifelse\n  } ifelse\n} def\nend\n%%EndResource\n%%EndProlog\n%%BeginSetup\nxpdf begin\n%%BeginResource: font PYRIYB+NimbusSanL-Bold\n%!PS-AdobeFont-1.0: NimbusSanL-Bold 1.05\n%%CreationDate: Wed Dec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development\n% (URW)++,Copyright 1999 by (URW)++ Design & Development\n% See the file COPYING (GNU General Public License) for license conditions.\n% As a special exception, permission is granted to include this font\n% program in a Postscript or PDF file that consists of a document that\n% contains text to be displayed or printed using this font, regardless\n% of the conditions or license applying to the document itself.\n12 dict begin\n/FontInfo 10 dict dup begin\n/version (1.05) readonly def\n/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def\n/Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def\n/FullName (Nimbus Sans L Bold) readonly def\n/FamilyName (Nimbus Sans L) readonly def\n/Weight (Bold) readonly def\n/ItalicAngle 0.0 def\n/isFixedPitch false def\n/UnderlinePosition -155 def\n/UnderlineThickness 69 def\nend readonly def\n/FontName /PYRIYB+NimbusSanL-Bold def\n/PaintType 0 def\n/WMode 0 def\n/FontBBox {-173 -307 1003 949} readonly def\n/FontType 1 def\n/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def\n/Encoding StandardEncoding def\ncurrentdict end\ncurrentfile eexec\nd9d66f633b846a989b9974b0179fc6cc445bc2c03103c68570a7b354a4a280ae\n6fbf7f9888e039ab60fcaf852eb4ce3afeb979d5ea70fde44a2ae5c8c0166c27\nbf9665eea11c7d2329c1a211dd26bb372be5822f5ea70d99eb578c7befd44cdf\n045a363056e5e1cc51525ea6fc061dcebb337208eff729802376a2801424f670\n0e7e6397b28f15bc10b40012b0a3eaeb2693e8f7f627c4c9c7c6c5bff105c1e4\n1b2b9e8f09253b61177e95ea219474796072f4b363fd772dae3a9d9385cd2163\nc2c8062ef9af240bc02404e5411b401d68ee5d983d33df8a63b6da7ed443e71a\ne94a32ce1db15d759113b684bdc92cb4c920e35cb677534219abcea434fba862\n2fbc8237219af7943fb467616d86b4251b350647c43c8df74289646adecf0367\n7c838d720affd234259e947e6ac432993323e8fc0b1c7609675558ae470b19fc\nba7b5ca1eff86dfe4d9ef0356f5d57d03f0b2d0f449d6165b92c78c00162b164\n648ca123b1ffa8c2bcdf125864ccc81c7d58f19374b71dcdacc3c43450bca81c\n364753c7d444062a98ce202aa990c652d540b1dd09459bd4818f7675d21cd2e1\n45a0d2670c3136a6c56fed36fa640520c0a880f954cf4bea74789d14c9b7ca0a\ne91f4ece020bb0d3cf1890cb79d94675c25c7ca667199195134e70ef0db9949a\n416f0a0443f1191421f2323202445f5af44871eed6956d3a3de21a34e302d41b\nd7eef2a4023a66862fef89ca6386a8e47ba55e6f89db590cc810feb27b68238a\n205275e7573968693cfe1f8a60b5af3fc965dc05bbac5bbd6d2ef74c4f140423\n9fb13eda8457a5b26248ca5ca4d3f896b0a93b69a9045b0adc25b43df700e90b\n820f28307cc6f6ff2fa4a06a8a6deb8cba4cb0d136da07593fabc1c8ba1149d9\n1c422f461a429ece40b7c90417320167d99ffa9490f9abc3101f2359bef6c6f2\n15c5585c8733ca06a9cb793d618247757063ff41c5fce1a209ea5a138777dad8\n943b73186bc17e03fb06ba658e5b3305e39078f5de984bfe093ab3d782150e2f\n8545c9601bd2a531a8196e157f8f18017c0331881abf07d6c21931fcf9b81c51\nbe05d2ace462ab8899e2929f0d821eddb18e9887cb7e8e3ae0beda34ccd0428a\n38c4429417cebce5ef4bebf7f64eedca8769d004d2432ded2240b732481a6da7\n458cd26e4730c4aecdc1078ee3fbaf6cd275b426bbca2d0cbd42eb7b100b1c58\nf043391fc5929fca7ccb7d2188b6cec6bbdb78079e36d67129c17aef9fa72fa7\n5357dda5167e3c0ddb4f9266f3ef69c2ce9b6191ba911c1fc740549496aa76af\nb86e4fddc0f31f92595f8bc0bdd3ac613b16426d722c0d27822944899572bdd7\n96d248b1adba5ec18a7f0cab096e134c36b2fcccd0b2104e43b2123936dbf7d6\ne0706616a7676da73a30a36cfe2231fba5e1fe69952a2f0ac15145c5cff411a8\nb57db37742efd6b78096d0fc69fbcdea39cb05d034f31c23b04ee90fcb4484ab\n2053e8dd69a2eaf120a6bb64bd55409ab4b6a6e92d305e40974b0df80009f4d9\n8fe9e8aceddb346f8e75941c1189aeb685f4f02d20814ad6bbe3c4364bd1c64f\n9c1f111790dd74d635520606a6bc978b65ccb6e8bcfd8fdbae26ea62e36d0317\n5564995f2a07393255d7c3450303f5a26b783afa95962e9438fc3b10239fc8be\n7809f48340aa9a61ded2e1de62b8ece240dbd1dc8be3819ac3e9aacb6e165923\n4a264036c6017b46af959f7e574185e66a3a161eed1f99b8496a9fcfac13492d\nfe3f21bf1c0c1dd432fb523701060720730e9f51b76082ef4e72d2f2ebae7a00\necc0e1a922d6ded5c4f0a76eef3f6e157210a3a46a4a30114f032ba029d8207a\n5946b8242fc9b939559654b5c9831eab6bc2f1a8cd2779f95698f26bdfe2e421\ncccfadd7e6684364a8ce71574f2d675239e404f754237da4cb564bc7b23d7159\n5b1dd8a0b62d6bc044fe0bd2ea98458fb2188b8ab1af6438e9693ebf939c7c9e\ndb285c87698d8eb206cf58d89a05e74a150ae0f0f0300dc1b3bcf1f3d6b73bd4\n70e604c23d313121a4cdcfedcc834feec5b1894e5384979966f496fea5cbf1db\n7f3645abc9a5e9fe04f056648f8b5882a5399fafad915207a1434b7184b48949\n43aa2c3ae059f96905277ec06fc91c4536efe679c6fa6e71167496cc0d2f297d\nd07159b01a02731e578879fb16f9ffd84768207629ba38f902230a03fc844eee\nf9fb458929cc8e1c988b486e9cdc3d00a84de8bf078ba4f1c73cf88a2cbb20a4\ne19a8c02d1bd767103c08b8ce14162a9cd99d167fd5cdbf53bc39fa14cab520b\n2e91ef7a2952c936c9825e30e3ed350ce9ad799b27b1091a0b2f3be2208838d3\n1bcdb3aad13a1299bd93b3f1a972c04f117f05bd9e5029b6c799eb25e3e98734\na0ca4a814d824ee4ca5383c6eb8c6c45882289cf2a52934fb7764f3556eaebba\n2823e5007f83f6a3d3a6eb0f7fbc3b91320de755745ab44513deeb65d6d81c0d\n838125bc1480d494b8cdecb253a230fb950df5fd1cfdf3b8b0c56aa0168b01aa\na690593f22c25e6ea9d2de70b8bb93cccde841d2b923b4a70c7cccfdc1c400e5\nd3d71cf640a201397f09e13d27faec5d041b9d904467c4c573c6fb1820a55c1a\n8d0ec1f6ad502bbda597925ab353429a5bbdf3df01066e5cb3c2bf2d19e7df4c\n285766c06ea868f915e051139ecfe22ac9b8466a5da38e4e2f92c01428ac9051\n4930a9e9420c49bb8dac35d2a7e9846b0c9c8db992bd5dd95fdc0c8d5bf2e7d0\nbaefc4ce8fe265e57b7b6c8c91e1797db85d90eb1888170744db916ca7e353bc\n4edb9fc4a1d42013ba275d3efc76259e25860a3549d104880157db843cc75fcd\n5a14800ab8743fdacc4c5ff064cbf3ba6e737833850e618ad9674d0fb01918e8\nba87eb21aab2c494c6f6ff275d1501d78a9a97d2774ef4d5fbc8032955669b04\n69e354b9984fcf4c0b890e4e8a7796d3b7b3855815f5565b13d95b139c32ee02\n4a2057235cef0b98b1c0bb84d64921dce789c2eccf58364e832cc2bef739d807\n012512769f57dfefa384083415b668285db3f6f9e5c850205dba7c66b2da0280\nf771183b302ff529a691590321a6b06dff8593a28e83a7c66008ae45b2989da0\n0455253031ed2da983e9f1ad6fbaaf85035b4715cc1525cc8d7f1a3c0ec40f9c\n9eca905a50a0f4b1f5db072918617213f7863ef202c0adf926e3be1c8307b571\n2c94daf13b6a659d0f613cb319e8782a0a2781b3a61227424ff5e554eba32b55\nde5bae43483ff916e37a129c877f10f7c8c0ec1fee0fe10b3fc813d976e6e54c\n8ea8aeaa179727d3335f86662bd318260fbc314986a2f97f919ccd564e001903\neec90c13abbf988114cd330ccd7e9fde42e218a9484b565a0cd7e9c1807ada0e\ne6a7f916c5a38d64dae17faae3e84822e6c63bf32148ae3dffc010920509491b\n424d27fc1970abe5ac799936aac46c4a98cf4c66b3182e73df72431e53ab1f36\n460e6c6a9b2db27e38eda8972835ba64210b45dd04a778d59c5751b8478312b4\n38012796f5a8be056c8e3a9e656bfa909f7ebfb7f32fa1ae99dc291b0f002a0f\n8873351e9684adbefe40d607631559c78f5688a708160ad3803db743282353bc\n20098c6212dfad417f106d92527506ca0c9a8864c1eb61997dfedbbbf1d052d9\n81ea593f2a6c4a90676aec9354a6598436d1de7e15e4979344eb976a917471cf\nc85e52ecf3437ebb4b6f8e9b292b7db33be0a9ead500b9353f3f367ceff8dd77\n32b67a559e56ffa3b5311fb52689c1e296c01a362a5c33bbf54b84624f2373bd\n2c25e90644683376f03da577dad1fb9a9903c5ee9f531a5f9da82aadb2098e3d\n15896c3c727d60ee5de0ee1cefa7e4aa3a5336ad2f1a845d16bb2ee58c50d2e8\n055e3e11272224b23c689f2e7ca0051d10ae4d4514b89483ed8d97c2a77894a5\n640d45bc86b1f66de1fd24b08034e70a443cf1c3ee17f2e7c7e11da524781c7a\n75a1f69de55aad4a309e27fc8ae9b1ce1c7d52f94fc84c59f37165e35f0f721a\n9d3d5c3bcead85d8150408c1387e5a348d1f0f376b3cc2d24346280af119df86\nb62f46e2ddf46f38db4aeaa456accf3f29082f73e9c5f003d77d99eea3d5156f\n2043e9b573fe34694910236ef3a1ce03ffb205406f3466e028b635f3ec5173e7\n482c796060bcb0efae62308e3624c466df5b49b1dfd3445233a03cff1f58bf86\n0a2b46225d1784e91f65ecd52504c8605aaf2a5dca560db5b8ce7eb86187e6df\n677c977ab4d1fec4f124324bc896ee7d669aa295897fec0b881221434fae3a4b\n1a3a1f1457fca374bca91885e74543ee919b881181642cb1f6c34ff817fa8e81\n18aa5e21c994d8aa12e1fdf5d6ff6726dd3d075dcd056f046ddd86894235d7db\nfc11532518f8d8695ae74dfbb769528840e8c30572ad06d6ef7b0ed471db9418\n11ea9cd32b4ba6205b5c198bd528b06092df3f50b9714fc1275aa5105a3a7422\n823d4a30d7fd19f77bb2cc4c5df23202d6a74092a710a9a855d8059031ec6ec9\n4d4fc86b37186c46a5cd183a81fc12a743c7168837953d2b5202ade986b4b00d\n86e41a88fad5ba0d91c150f4a7c396a02aef1ae9b96c0cea83b3306785ab3ba5\n39c49d9f984a08a9e8c06d282af94d87606d5601296456b6a0ef4ea8c88a1fcb\n96cd1b1bc0e287adfd1b9aa1a8c8a7d4a6b14ed3b04b1f0532ed5d40238ebf71\n5bd8c8b032afdccd26a940b19a1340b1e93041b2265b8534c099d14f00b82fbb\n2b55d8dc64691c3e5a6dd7c0cdc1212d0c80be2f454a7d8613d0cf64ac5bcc7c\n64d4166bfda12bc262de9cdfc614d7dc1bc569109bb84bf469071963e5a576db\nb19f3e748799d49c30612c1d7fa918d72051db6cfba44520b5b5689c87541560\n292dd6bf1f40f6a5af97c3ff71b1fb57cb36234be973890a1a610551a724abb6\nb01bb5bd1fc5191c9f99b389b6445a99de978b0d81e4baa92e8b121a1e1b32b1\n601a34dbe6cd348e56f59a92af56caa782b3b416958a6f1bb73771f35000fb9e\na55a132f9b151bea59cafa3a1cc72f7cd60952852c53379530e0a6bd4e9545bd\nf78da021349902332707106bbb5d307960ea2bd811adf35b869bb210e44a5717\n8893af229268d805262725a0904bcb5ea7c17a39552a1f26283f54ae45449943\n5270b17b9afe2e0c0729e5f10461a8ddb85efc35dc8a32bcfebfdb16a0642e5c\nc69e5a25a661cfbd1f3a9386aa2433b68a356f36404f96d97fff817b42a58a62\na5fcb5653373df412068876f541169bf642bce8458297fb6a6e936d80af2004c\ne9a248e1c92fb63b3e53caadd749924c390fd9f542496cf2347a3a429cc25917\nc31fc437291fa9856a7d3b2b6a5644d82e23a14d0281ed4d8f9dd687e06f23a0\nd0e8a3dab5fe6ded172ebbcac68218092f4480c7ceabc55b059877d7e82d2846\nb4f9e82aabc56f397be2c6b67040dc71a9d1f39b1a60c33288bbae4e41457830\nf8d8c96c8dce7c01bc6efd70e021a0c2d160a61b906a3ea551b7e3fe8c1f9952\n7e9583c6b6010e0887560f1c3e19e0be82efe91f0114e726c888f580d6b514cb\na0933ccde04de0872dd0e07b1a7cede67bf9f4e73400d118a6d600e13debe6f2\naa1d895dcc127c76ff82e579a06d8a3a323458808bad060afc953c2158d476d0\nfe0725dee6886bde038e2726886d255dec9052e9ba886a318c75b8c7a218edc5\n78783ab8dd90b738b16cfb47ef8610f428a4315c703763d6b3dda570cd0a89af\n4e6c215ea5395b13a5c1f0883faa2eb2d6de918ec5fef99c21758e4b6bf72861\nb684a28787b63d3ae7f1096b1c56e4862e7f3650884d0803db03362c587e2ed7\nbf5c7f2847bebe35327f1f7fb76f3cf7e9fec9a5c057acedf6245c724a8e754b\nd44e028181b75ad590b3989a7f340fd59c3b75cc4a8e28b155b5da0fbf3cc358\n375edb0992206514347924c69ab28e30c707f24199767937bd7990bc70bd5849\n5c335a752c06bdd9f0520c6d8b2f5fffce931b601151b37f1be9885e41864e31\n1ea0f33e17fb4b844425ee7de31d839ad3a8609bfc9e393079b9a7891e17b48f\n2e5fed17943313afccc55826cc0144c2e7ac9784261bb40d51bbd4467103f432\n865cd4b821dd5be8fc760171b49b70141ce2042376e879013edf8180d185d988\n591f9084536cbf97816291ee77255315987422c2c2489d209d78e0a2fd3fa71c\n28edfc1577db5c080e7881848222220a63605f00205c205b35d0a017013ca099\ndeb71a9ffd511549c61f9ee36a63ee00b0610d1b290e073b8a067dd91bf52f9c\nab53a258ccd29d9220a659e44717f84062d39dd554294996c46e69608ca111e1\n088494c6c3c0b75cf06c2b39a08172700b35d1efd0526d78f2ca5388056b02d8\n28962b456a44b1348bc4c199c2425217cee4297873ba2018259ad02cdb518b24\n023f4ffc5fd7c2b7b022d8f61aecd1e97bf78c7d0448611c0af788af2447d5a7\nb66b496dfde8522f9dc0ff8513baf8b19b51256da57159b87df032545708fad8\n0b15a0764cb951263a5008d1a61a1b69f171a5d7449f1c1d2cba92e9ae340e13\nee455edc278caf37e5733a34a5c1b2206833d4ec3c41db8e8c760624c6031550\n7124f71f9d18399c3df46c5023a753a08ecc991b61acb6ad781cd9c258af17ae\n33a2f8c5a86b5dae8ae1061893bdbca4e76473fb073cc9c5c3389e525553a879\n16c23e3fb51d65f3cc3bf3e87f97a02eedfbb928cd37a770e7e7b5413cbfb0c1\n3281f30eac6290a85ffe8ebf68a7fe77b4a68982d010a2284051861a35230401\n234b3278bd810686b1ee0c63104adfeaeb7ec79e0a4fae757018fc05fb12db3d\n81e0400f7760b46fa0ac5f9e52583f2af265843cbb2ec1d1392ee68c7410c9f5\n87351a0f3247036a01080242732f5453b54a88de2d7515b5b570d94bd2b97f2a\nd3894658627178dc90029c8e7131855b422c912c9fb6141439042b1df9f3739f\n063d8d054258cb1c9cc893aed8097aa06fbb7e923b3756409c61b7cff54c2c87\n51cc2f11c2b7bc0be6868584f64bbbc22a1e0ed325b6c2064cc0ef2fa8acfde8\n6fa40b544ab6d2c360b6786c29b69e80d20566e1e25cbb075f9a687b428f4ed2\n10c028936c8f5e7308d2a3984290d96e5c8df5c959a563b4be5b7ce15c24d5d2\nfd6dfeee85e0e9595f52ef13aa08f52db73e858a3932e9e913f5ba674289523d\n0eaaefd670f3ba4fb5a0295816fcfc042f7141c64ce577b103558455dbd0852b\n730b2acb37b3115ca4ff017602f9428879e96a621a760e7961c006801c5908c5\nf291981da07820a11aaafc3f4ae613c7cb4424b0e1b797094ddd88829d5d4eff\nd8613b50b2df38eef34ad0b05a9f13dac5b3c31d44c06bcc58d737f7d239ebe3\neee1a4f981b35641482b536ee869389888c2eb28b56a5d0864a7f451f7d362e3\nd56ef1ec01fc6eb85c40c78d791b16aedf904c7d75890bf99bfef9783fdff55d\nee19cdf9e0217133b8af29fd87ad09382b8f64a6690f4ece0ff8116d44bac576\nbe9a602084c63bd4dbf56354dfe69300cfcbbb99ae3c8226d02b1bef022851fd\n896d83549c594e8fa709d23465207626632319b253dbb32a74155939d9fa0631\n8aaeaf9c26c04a55e1fe935fc5d21f1d798107a625fc25cb90d2ca72c31b3eb2\nc2aef7615eeb8c7f0e7f767aa672ffc236271f98c01bf41acd72da9d108792e4\n66ed133eced633ba0fe7503aaf68ebb226ed6d0e18561eb03c9b9763680f9295\n7709b653d3940ddc7703da6c3fcd893ace04627cc6bd92b65b80cfba4d0a50c6\nd48c5239a76bdaa4319fa9f0382e5ff6bb51c5a390678ef4bcb6a56a13828f32\nfa51ba7bd7d6a11405b0873d4e96b93fc693f21bada72f9f257d89630711cca0\nc3a78e2a0e5735617e77a7a77881b37d77877df4eff9da9d465239f1f2dfb5dc\n9351a5dd8216e98c15cf443250b85be6a463526d8aaed42fabc1cdc095ef9e42\n8f956a2abed2cb7fa127f49bd2b5accf7ed80cef4fe96fea42c0ed4991bbb734\n596379a991607836c6ea74bbc359ecf2eb52d015910b847534a519cfc32d5216\n9510940a9ded08ed2a83fe52ee1275b05d19666994836add094ad38cc0a3e081\nbed96e0cec2d8e17d51bbe3a63a34884da909733ab092c9ce8d8e411ca3b2831\na022e5a3fd1abccb902647e484833b8181d1b9edcb5448098e13b5ad289c9aa5\n8e4726f0c2df0ceb089401871c26c7ddfc5d5cbeeae249871ac5604056b69e96\n3c1bf9b8ce006b701c9523b5b9b145be6f6c7b9e513973df94cc2d37694850ec\ne54c80d2ce79309ce51515d2ba0d44855014654d1a999cad1a5e9dd53a34e44c\n9cb32ea91176d5c3294e3064016e8554b9b6c6d2e6c03b4e655bf2a7957d95ff\n01cae1dc020e577abe5775f656caf198f1073b7bfe06ea127ba3b1edf4784917\n51d41bea93204e6ad3aada6f2415a8bcd5c987b6629874253852ca417bf6a259\n27b0e7f34e0ed0f9dfbe1be2c64d805c2edf0bd62c77be4224613f2e788c56eb\n0dccd0a467bb30d529610944338ea0b832d3ecedd85ad4da22ea2b47e799a1a1\n1cd56274f7dcd9a66a32d8509f3d0eb4c4a160a723a9e71f504da5549eab101c\n70c73efbf1ee0805c0f8e394f94f3e6623eb2fb5896563404fe4a7f0d47e802f\n698295ca19ad813ae552e8dce8d6f73a7e676308a07f230edb99902132ca5b6e\n0e95558764ff3f6f854cc29b338a5e1bc14c9468b5528f5b5dc8bcce69bcd0b8\ne295f3ff96dff56779de49a1157c7d1fe777e3a94cf95e3c707d6c1fb41b279e\n9abf7b4077fe611a1669c689c1d9a81c933e8075af7b5b440c24318b26a1206e\n92266a64a0577abd20659d83fbc433621c7a01f74c6863d43b02651ea96fd0a1\ne1a553a05978a4fbff7d591254a5e3a2642c0eec9b4a0988e4aae449964323b7\n9bade117a3ce68969f62944d027dd0bf7ff0f73b0283c8843e9a3001bd096baa\nf61833401353462890af71b05b84b2e8a8a3bce954febceeaf5c10ec704a68ff\n24364e70e1749dbc2b1299887309e014f82b805c37aecf05fd413220403e48c3\n3cb49d0c265ec2511211833f8c475d7bdc3959c3378597773f02b5d41fbded8f\neb58a06037a79c3424e56d48a1cf82672026b3122e379a0012322a325bef16b1\nf95958c7b22cce273e8aaa1e8e40978abf5626000a2563577e164b89e24e4d06\n483f503454a37fac420c7945ad53a6c102f1713208c99ab6ccb0bb3e50a70b6a\n38b38bce6444a7951cd669008776a1720790b0b6722be634f90120f42e3b5cdf\n9007d9b8fcfeb1c2042367c5f7445e69bbc19cbea5b305b1bca2f6398211ca07\n96d5bd57d23639b1a7d7a5f50b609dff3c7622e922714dffc7dbd6b820460c67\ne8ea1c017e57fd172fa3cac1678df44f20e718542342847e33698d382ec37f60\n21b7d901ca384beec87374854e4a1372610ef8fe5c69a141b860b5a9c51af0be\n8e33cd57dc6f1d2fe672e72fd0f370cef74a02fef6a0e6303b7445efa72758ff\nb98b3549de42d525c166c92b652ef1e71c92b0ed3c1ba2418dd13a2d301ea894\n7b3d54d469676944a58f147851fcd8500747899ec3bd885f25e1631a3dedd10b\n4eeb87c74ac62e316d2ebd3aa0ce027e91b39450ea3e30cb01baafab02ed0567\ncd83c482d6e92d7835fe387cd6c050d8f4f2f64b95fc44e1101d89e112b971e6\n61d975a98183617bc942f425b837e4e868136b17ecde0e1380ce8a52b95881da\n2bf547a37f38c603e43ae53f32b5a347e4b43c0bb86d8aaf447bb5f4c983616e\nbe1a48c7dc636242f20e876baef484506e2888f0913d8b76b1086b60409a2a03\ne82ac9970d6c120a6621bd68250d88e95c01abb861af559132e6d9b8f5abbb66\n4152d65779019e678cc86909e31bee3d13a16d764998d94ae5df24f02fc8153d\n72b41953605ca86a99bc3dd05ca620e7a28d51beddff28596ec8eb878c09c041\n74baef8d2fc52b3b0c55e95b7482dde018c706a3fb83b945d3df90cffeb1380b\n09c4576040668f537083afc50a1e26d28c4d58bad52b17964871210ecb2f148c\ndaa07db5d3780ecd1635cc5d5dc23867a13e152872c78e20b95f11a4afb8508e\n813f4c580f80546b2d5dcda546a6fa4b28a906511be9ae09f3adf926fa237825\nac9f250d275294c5f21466af681e4e61ea6915d623c7d48837d0bbfd7f893a2c\nd347cd7514ace7badbbff683aa9c6eef46d1c830afac64a9f64b95a6fba4bc48\na33135b70cf12c2eb19c2af6a45b9be09619e4b89f47ef4b9d3d234466822c1f\n3ce559a85fc52ac8aa947f981fb5fe7605a373f5484d4929932590eb79a504e5\nec35c263a30ab3e50ca900c2488baf5f1c1c23cd42d6401bfd7b09172be16f1a\ndf93f41ab0b4465a4f1e2ab556078dbe76729d69434690fec8f59894a77d3b8b\nbbd3a87346b6706fb127da2f6b458208befdd75d68207bc88ca1f2e36b65d170\n922071549c382790beee82ba0dfde07d7d5f58ebd02b19feeaeb6aaad59792cf\n461d467665cb3a0cda48058fb5181273c8632075e2f11f8de7181373a9b73901\na816cfde3e2029a04b1139eb306132f989f4a2e85cbebfdc52bda2e88bd8d1df\n3f331602fe0fc1802abcb35b8e6dbe5bff9740a4af24077a725d17660fee662b\n209db93c54baffeffbce92a9e2e696d5f56f5d7c81b29cd00a59ccaa389183b0\nae2507f0ec1a9e224097be40e0db4c8099a96a858425c6a680365704f39a05cd\n4887bf94f49e4f8efacdab96877a18272900237356ce576042dcb16e5851e1b9\n4fa0ef754cc9d84e91486d771871151a5983f158b7e05cecad73ba064c258397\ncd00cd6b8cecbb898c5d4609531d387ebf15a5c38b80efe629bedc9314736e90\nd4117c763f18dda7974d519ef1bef9824934159d0fe29edaea2173c69c56967e\nff9c37eea1e8b38eaed338699c6a3763c6353dfb2584f6da9923ab74b18cbe05\n278a5ed2936b193c75c986e8bfdcc63904a25ecb4a04e998ef8789e9c3ec618f\n1fefe74fe5a23d368b563579e318bbe956f29d191748ee26bc883bec714e1f8c\n88c98dc012b95385e894919f1de5afc62c9c513014d6105baf24ecaf88275909\n4d13079cccc3f103d6751b4f79b785577686abc760a6c56bf34db0f2ac3d0b82\nee63f9e750c7790d7a3a1626d66e70d26617459a8103e08b6f14af71c017d3c4\ne5b4450986908ec345af9bfc4d650cf35f337026ae940513a9b3de95df3e16c0\n588a59a7f2f1d5e2a418410b5e2fcb4692998921834fa44f30f2117228005347\n9a3a82341434ea71f82d87e1bbcaed725ede9f6001ae4c8651da9afa36b3e6ef\n07a8b311afe1bda98e3143c8e2417fc188bfd48627d9b6aae94f510054dab99c\n12fa0d5d73069f48c86391d27e37265c91ab1c06ce4d4bf0af63db65e16e783f\n7dc649a88967284c9d9fe861add619a3ffde0a31a5719bb456d1ab8010ccc8ec\n89615ae875db7a321398ff923c088a6ab51ffe2fd21d3541474d79f07e536709\n46d1a8c65e8dd6ba6f19410b76ee7b5468462b9aadd9f8ddb68c32b08b0df0c4\nf3b909fe714f453bb1ebe914752c5eb5f68377a82e5d5b90abc19402bd589b43\n05f905efc12878733902c54391c267fd81aecb8cd692aaaac3218d34a4c1612a\n5aa9844d171e6ebf94f4d8900236e8e27c5bd7460fa1e195c1077da5918afdc3\n90abc6db247885a42158c3cd36ee89d82cbf2471c6daf51120ba3f6937d537e9\n370af7ce73f3b50b742ade8264df9288120dd74094a064909c00764e9347d2f9\na3f92bb53d8263053a3082809e04e9bc7c9f3b8a7c97c5cc1f9f886115676a18\ncc04c656aa33535e5893b8db3ba5d627f8810048b2a7a28e6d1374afd6af6980\nace96ee05d890339773f6dbdc92f2f840b50770213bf6188dcdd1bad8d527e71\n9692ab1dfc47e7673c175a1b9841d56e2e0b30e8685b01a68ce561bfc6463a6a\nd34557d05276f7befbc1fec7bd56a18bf0292cd25eae57450b3b590e60181258\n4b35e2004e7b1e27f3b26d7108a03c94dea662b7342e38f8300adbd92261809e\nbee8ec971a7f2f59487c89357580f9aa8145a1825573f037a0ade5b98be24a86\n530435bcb82e17054f67fa873946c732c8840b9eaa9130bbd360ef27fe72ecfb\nb421627d2d52578373ca7ef9fc6f850f4b7f22e6501378de0a9dd56f5f5815f2\n7ea81d8ee3a4f7b98e59ea1cb3159f5816fa703b18f03c5b0aafbbdcc979df41\n7258af2ed57f7da62871c0efdab55fafcbda5fbef92ce65aa0ff37b92ce6c953\na9d92a8c6e02b8a1f9a9f0c66461c5a62097e12e9f656c87ae283e6f3b63ed10\na6a723316b9beb28b62a55d372b9a22bdc669b51533c5690e593f2a409619b2a\nd73655a40a33e83c65e66f18a40c8e77b048674fad760b9a7d86621181d498b5\n59707d36440af3e015851ce43cfad5d1d96e9274ad714ef46cac1a02974245a8\nd25d894caa256c320af31f954bf574dd95bf32e5841333063d32709b93b009fe\ne680d5b2bb5f95275d118a085e98506d0272fd1b8220a2343979bb1467f9006a\n1f17b2ae2941413683c3cbbaa1c0a3aa55193d46a2573f2cbb8b7adc7e74d0d0\n135dfa18405bfaeda37f3d4787a965192ca64e4462a0c701de5c361088b3319e\n7b5d19a14337068661abc7c36002ff4dbe90e7b655b8e06bd70e283cad1c5d88\nde63628c638083b303ee6b038836893707f6e1121ef56292a75bd9301d987ae1\nada2acdf61ef74f2b3dc4f87c6374254f865f6e8f6c0933c54265e9a5cc7ef62\n432baad5fa08dd485c3b1d0e75ffd5180e99df967b85861d9710ff294e93cfc3\n7ba6c006164690c10339aae9c1113cb48687672e8a2dd88ea9af6d0cae13ac05\n9b61095b999c87bc3c80748fe6722bb76818b2339223dc051a4938f435b92629\n4395dc3d2b9b3a0e370363535d960735fca855ffcba0aefe767732f7991c5977\n46fb683b9a0c11fcd6a3eb370bb56d6611e7c20dfa1d9fdb3b90ef31bf0a6aaa\nd8bee6d7ceb116373e74f072d2c61b646f0da308955829be7578d1909b03c4d9\n307709be75ab3d72d0864af89bb713da0938f038ffb3459b793d06bb37d6efd5\n5d4e755f3403c32c28201fa5f979f51f3a9d4c521480e58ccf06cc60a056a5b1\nc48f27872ef36da126d580ec0520ee9d252cd27c207b6a12b27b1861ae0debbc\n21e549144604b277ac8e7b4caaf5f7220d67fa9a985001488c128e1a4c9ebaa9\nde54a13cd4baedcd50653b73a6514ac47bb5411d8094854212c9219caa4e4c7c\n447324ab35edc9ceeeef505fb71a2348c3be2082fba20b8ab572bf9276e84e2b\n0b328828eb0c636750dc104e741c5df9caf3808a061484a23dd0aafcf5bfd1a7\n319c50d09cb55d73c87d3ab59e74e29de58723ea32cb96a0b497e2e530b54b9a\n355a27d988ef4387d8260863e8beecbcc27e4b051961aeffcb8475d7da9bdec6\n42d6a55f06ae9af2450545811fc6486c6be309955c53121db95ac255263e93ef\n3adb9e07e56b1133c491b550a511204ed55c8dd911e2fc0669c90fd904267f0e\n79d56ddeb72895002a7f795349da2137b6eedcc300c1206dbdfdc3a52f71c86b\n8141b63c3d33957c66a9e074bfa703ba2344d802028d787878f9fea87fa9ccdf\nf4ed49f4daa6e6839fd64c91e60f99b8e10652bffdac46169c413a36e8105d8d\n9343496c1a9b5bc33cb5e573166d4097fb4f3f5517b38f9298de2ac6d51121e2\n0eb9f07ecaf4d70c56a5280948c67e506e47fe9d3465c7cd156e5768b70f694c\n57c11c80e7a4d1417c25690197d058d02216a81d7104ef27003dadb3ed10c742\n4b03f54aeba13d17f681fee3a8797754348b134d89572a2083225178a9db4466\nababce914cf2777d3ae7effca5f4973eb2945672c0218c420173d8d2fdb8d60a\na1b40773a74f904955e7991bc973d12eb5bffc4dd0032b1a1397cb5ba3b431cf\n92b76b1f7bf1f9eec8389e525553a8791692a9a9eb495822684df34bc5209953\n1b38bc4875beb62a391a8e0fdef5b0ad35190c44c782e374e3ca17b9f5e2f5b7\nc8566acd0df90ef22b50100f501a80c17a32ef4eb28da320c20ff407fa116404\naef81d37037013406eb51aa024605e01257fd78c625bd120d4bbbed7bfd4f95f\na3c3088a0fb237d44fdf4aa0bff28254063416918e276e7b68c545def20f896e\n509cdc2c31b65668200637bbfa587b547b77f81bad98ff0b70805d9c6fd17abd\nf107e1d39d98d9ba1a7bcdf98ed607a3770508ada6bc25fcb63f5bb642a4e028\nbed525fcd1a9dbf1e1520c5164a53c0ddb1b3974366b8feaaf766f02a4085f57\n948854365bad4f6cf18fc871256f9ba3c60a79f3d08617f6a483fb6b50ef2dd5\n0755b2b824dad8935247fcff268b7cd152cab7e7a876b381491589f3d4c65c50\n3353d07c94786db7346cb89cf5350b585cf890fde7a891e7646e5fb912b71db0\n10e73de1100848dd1bd100d0daf43c4bef2b43440513be6281ea0359ae0be4ff\na861b07d06a311b97028daf2fcfb14eb8e8f713bca854befa5a46172dbc0dbd4\n448a8c20ce02a71d33457d4c52704733b90b005b03fe89fa90b73e747f273118\n4bc20d38fca2e51eb0d5bd5454a23e0fa6616a330d61e5a487aa516daa6ca1d7\nb8cfc260bedbfcdfd3d3d0c115359c73a67c1921df252899298bc9015a6c96dd\ne70e6dee29597cc7c111a565a6877ec4efe425783478bd79ae97b5d1bac5d10f\n5cf77c6c026966155264c7ff1dd30028f21bfe0b7948edb1710f30ee09747272\n81aa09b166177f5e507ce6a09a6368505a1d7b58d5aa2d63dac1b073442be702\n9b2ba6a5a6073bb8aa8c6f741e1b135a73675ef22ea810435f4b1a899d180e2e\nbe37106d4db6ac2c01d2d962117c4b6a62b1eafdd923d89cc830c00f4cacf98a\n3e02d0863389d2dd73db37d8af50cee306da798989047e47c165d47926ec533d\n5e1f5fd0d039ff2fb3e01c61509b3ddc62754cc30b7946c4a705d56f16730b99\n8a40275da604170fe8da1f8d8c5e4a393c701aa708f916fb66939adf2546097f\n2ad583fd795ad2fd059e9450c6df7be3a22f36c359ddcd8de44e1106b1edeed8\n65e317c06382f6473e3d15fd731ee92b39d3a3dc42c9107ca046febf2ed214f8\n014ea9efdd078b94dfe6a53e5357dcb99a937583a89b90105349829575a5f474\nce7519336dedef19083bf6d9312f19c78f09085db567895a10edb5a6cfbf3532\n5cec8e3db206815af7bd78c8dcde6a910eb9232eea4b9e68684be8083f335761\n916fc1f64c649fefda1b3fd499e851cdfa7ad22acd535a04986f35b62c2adf2e\n74519f043c7c1864c6b3a9d5126fd87c105f123711b560531f46628f872b085d\nad00961bf770b386b416ca2c5a738ba54f7a7a2e234dd97b2918d007c135aabe\n9ba541eaa0d19c216b5a6f245cd33a1666e26bcd5ece41bbd5bfb3aea9511bd7\nda27388e8b62f49f0b4db0b190c5dbb7bfdb1fec5a786bf43783cbecf09d8056\n15ce4179710883f8fe7bf4fde22e8a7b46273172e9a4751b4fdf6ec099e8d685\n32a4c9c4708902285df499de4a6b0e143d72c13b747461bda19f5e3a34f1dc8a\n96dd2194b6083c75715f9f5261947ef0eb21c496effe37f407f45c5f66aadb99\ncf42aea5fab6694a64cd89daecab44bcc134280a3614f02c432b98054ff8be39\n7cb464de7b1ee896f798a90377bdd07afbc9394ba931c3fe490d11fc60506a3e\n476d86bff5d3d850683942744d651355cb081b39d8d2147409a4bbf3ec699da2\nd79303ca40261fa3b6ab5b17ff331eb3d9f01896590905a2c7841d1f4b1f85a0\nb4afeb0183a61e21958ab3f541d321ac6bc81dafc5dc633cf1f4231b0e4dbc9e\nbd3c\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\ncleartomark\n%%EndResource\n/F116_0 /PYRIYB+NimbusSanL-Bold 1 1\n[ /.notdef/.notdef/fi/fl/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright\n  /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash\n  /zero/one/two/three/four/five/six/seven\n  /eight/nine/colon/semicolon/less/equal/greater/question\n  /at/A/B/C/D/E/F/G\n  /H/I/J/K/L/M/N/O\n  /P/Q/R/S/T/U/V/W\n  /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore\n  /quoteleft/a/b/c/d/e/f/g\n  /h/i/j/k/l/m/n/o\n  /p/q/r/s/t/u/v/w\n  /x/y/z/braceleft/bar/braceright/asciitilde/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/bullet/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section\n  /currency/copyright/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl\n  /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet\n  /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown\n  /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent\n  /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron\n  /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef\n  /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef\n  /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef\n  /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef]\npdfMakeFont\n%%BeginResource: font XDVKOU+NimbusRomNo9L-Regu\n%!PS-AdobeFont-1.0: NimbusRomNo9L-Regu 1.05\n%%CreationDate: Wed Dec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development\n% (URW)++,Copyright 1999 by (URW)++ Design & Development\n% See the file COPYING (GNU General Public License) for license conditions.\n% As a special exception, permission is granted to include this font\n% program in a Postscript or PDF file that consists of a document that\n% contains text to be displayed or printed using this font, regardless\n% of the conditions or license applying to the document itself.\n12 dict begin\n/FontInfo 10 dict dup begin\n/version (1.05) readonly def\n/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def\n/Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def\n/FullName (Nimbus Roman No9 L Regular) readonly def\n/FamilyName (Nimbus Roman No9 L) readonly def\n/Weight (Regular) readonly def\n/ItalicAngle 0.0 def\n/isFixedPitch false def\n/UnderlinePosition -100 def\n/UnderlineThickness 50 def\nend readonly def\n/FontName /XDVKOU+NimbusRomNo9L-Regu def\n/PaintType 0 def\n/WMode 0 def\n/FontBBox {-168 -281 1000 924} readonly def\n/FontType 1 def\n/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def\n/Encoding StandardEncoding def\ncurrentdict end\ncurrentfile eexec\nd9d66f633b846a989b9974b0179fc6cc445bc2c03103c68570a7b354a4a280ae\n6fbf7f9888e039ab60fcaf852eb4ce3afeb979d5ea70fde44a2ae5c8c0166c27\nbf9665eea11c7d2329c1a211dd26bb372be5822f5ea70d99eb578c7befd44cdf\n045a363056e5e1cc51525ea6fc061dcebb337208eff729802376a2801424f670\n0e7e6397b28f15bc10b40012b0a3eaeb2693e8f7f627c4c9c7c6c5bff105c1e4\n1b2b9e8f09253b61177e95ea219474796072f4b363fe05fa763773acd59cb757\nae119355777a1bfbd6751f24f58ee0133199ed331e67ff4101e33040d6628f4b\n77ee87860b8e32a4923e2c1fca43cf544a5eb1bcd649ebd836daecb23e3a986b\n9bd8398e690be6b48bd6479823a435defe1156284048c4d49b5a869164485630\n3810995159568b3dcf3734b11a3f25453e0e8b40b080c9aa94e140a58d5ebb74\n7d1e083dbe00ad5498c3b19deb502dc63d69032d8d31e6778af4713c30404059\n6a862aeb8cf607fa52a9348e3fe23c1a0296ddb41642aacd6aacd2c6d905073f\n98b58ebd11af774beee32533fa19871148dd6db41f3a8c499f25f37cf3955eb7\nbf5bbdbe984535820dd33f60cfe7c2b44ba6e10879b3c65948beed00a84b093e\n8e4ea07e34955aebfd0ed462afc5b4b42c5b8be85ce0ab1b9cba42969bbf8a36\ne2943b1d9b20f6ef3416e226763f55a196ca0d86788a6b0ed38ec5b0124ac901\nf55f2f67306ce94aae5809b2203bbb5a8b185b66b2f8a18a456d028f62d8e17f\n4cfccddc0743fb02567f0294ab77dca0b9708b262570e3097c76769bd590a09f\nad1523e3bd1ed5fd8475c0b57b95011759d1a55c70b39970dccf76069cdb9690\n68a4626bc863ae1d579604011354cd3ebd51b54a1ba9789f7678546bdef64c9c\n51cb6f654c25578c3b4b7c2bbfad476423ab58c57f48b2a54c9d44ad356d106d\n8186a85f8578b1735610f6767883701431f5a2503341005020b639f45810440f\nf341eda457f8ad2213058a3369016452185f849ee25140060264a04eda7e04b8\nafedf6924f2da0adf944e4ee346e33735f6e78691634e18c4179f28fdb673ec1\n6a2b093eec51a4611030ffe1d4c1a1456e3ead051b01c94e5d9ee94c855cf31b\nb8e544e687f2e2a99fd8865ad44eb929430ed39ac0985e4a5c382e16aa2d6ec3\n3b396fe9643124dc587fde09d3d867e9efde49c283dd44fd33b04ba4eacded81\nb3e7d3f7c09d565a6412ac30fc8e81be8821a9031850579b02cefe615c8e7c22\n61a77e73f5382e58ae160043a5defca7470ea62b90e0260faaf5a97a7254b091\n2a187ace29ac6adfa49c7d6f35cdab93ad32553137363ba2f0dcbafd40fa8ffa\n7747eb9bb51dcd01291bc073331531dbdcea7db24c9a0302c9896a1c2cd0191a\nd88b33d0b0352b356c93987ed9613720cf2be3b164c6a4a3360bf41c9f178831\n62fb73ae514d9c57675572e8c1f93313fbd1b05302f57bbebaa2e76feefea0b8\n9c83d511164b53b481bc920f40d59d152bb1f5674344801f0dc7e71ca5de4e24\ncc79207c66d0b692fe7c1c258be75488f2a0bfd5c81ec5bd0585986d0c5d4575\n82e9ce40b7477b87facaa826ebf147bddb1dc60788dec671c199d18dcd2ca48a\n4653963ca85e8944074c501c8143685306d4f133037fea449b0d1cb4ab3bce89\n04a311f9410984d754a3509f51d89a4ef73ffa7f9f3bccd80daa0a34e0e10912\nb7897005607925758237d0bd3b92ac9669b1a1dcf19ff0864f84a993bf7cf266\n1d1b3981fbc5e4fdc3a5b70bd79bce35c6fcfc0a5aca0006433bc0c120073e96\ndd4ae86f022260fcfe119fd4655c3bf00be48c470b0d86e721afca140fe6bf31\n836d578fdae49d71676c77ebe2d09016e1ab71d7c681c8c0565cff9b73d79920\n1ee2def2f16d65647262f96082dd5c44fa3993d3bd1d10c217ea56b73b38428c\n767dd9b71530c5f01be2d2611cf9644c28f3f52fd814e463358d70de7bc6bafe\ncd377b48633d0107b05ad2472ad6652a1ad30c39adce69ebde3aadb1c5fcdaa6\n96fa9b3c3e63a7c4dac907e3b5cb7a3713505c5ad53c8dd8710acdb3786a919f\nb356cc2695cb227540a5f235ae1ba3c6f3547ff24606651e5887fe889cd8913d\nde9f3b04019ce0d724c1f6521925bd4fd8154f6f4d640ff94a0b0b027e483f9a\nbd1188942cdff486f1a234fdf8adeb552b7e7e10aa577ed3d559010aea480709\nfa1f644fe5b7ca3479599a7e708dcd3ba33a6b2d640f8e39492565965e3b7c74\nbc8c48f3ea9a6048e86197146abc446788a3c83782f797cd278ee1b740627726\n3e1703246bc561faa060de93d224ed3eb1bf548892bc64806c4e9186a2b276d0\nfed43a3021b5a54530de20db8168d44e1947cce7fa1dc8f7927a591d6798c5a2\nb51185c3e74bb6ac782af6f089a4204b6379298617c8f67e38900ac231610ab9\n79400dfaf270c91679c516d2062b949a8d91bd5c8c1a0af1e7401489ad6e8101\nb9103cb5f50dc53ddcf2b32afa218289e9f1b5e29e5c5a2a0f67238558343524\n78cb11a68006685e13f8b9ae54732c180b4949f09839b935b1f7a944f1d4bd84\na5074b583202cc4aeccb4b8e18096e258bff705476440b9864e746f18703321e\n5d5e2f8ca5e2d07b195779f6a0d6a731116f1a26a484fb0d9931dfaafef53b41\ne56e00f32e3952261c0205afbb6f2afaffee7cc1fd39b2e108841f39dc8df97c\n0f776adaf41423b47c551d48add01398dad167f4590dccc3106a5a4386499462\n78831779383abaae807b3b03b5dbd4b973219f2d1d19369889dd72e446ec95e1\n37017fbf85f4064f81f27cdb4f9117be248a8d5a65225edca22e833df98da456\n98a428edafa84085c323399562865aaa8286eb5dc63dad6839b597386e0558d2\n11bc45d66e0e60a86c968519b8b305d5ba7ebc2fad7cb5004559544330668c1a\n7b77dc9762baafb4190dcc1aae670824824e00f023c574e1c017e33650e24fb5\nd4ad701ab8d93f0fd91867bd21299867f966e93cd621ec0332fa04a2a691ae0b\n179d1dd6364166f94716b69027d8d0bcfc6622a086dbe92198e5c625699d0bbf\na9dee06d20554b4d82584108208ca24d7509c4ea30e71ec44f014f8cd97b8eeb\nf1322fd5b116009584559a3b0574e24329aef35d2964756d50ee8a0fdae1be91\n19e20fb52c3437ef677f37b549851cc9bb60c04cbee8d80b6f1442cd8676b0e7\nbc4b2c4883d212135bcde4fc15eff6d20269a6f4463b12c214d99e68f113c5c6\n7c2d25384d8e7b9eb31d79e2c4607421389827e2fac887dbf08a43a5ddbc5797\n797a1fd10143a4e97ad79bd0bd7f3f1205130061a6581a4d30183e71fe80d570\n42083823e3ecdb6d6352b6bd54413a9b6bbaab94a76d12ad93ff99f9433e3ec6\nbab36ccf8168cfb64c4b15987379cc129f6c7c1761df5d7dc46e0996e5588298\nb329b023056dd59f4befb792c4e43fa095d63df49b6e25f821b999b56ae05919\n16346777c2579ecd17b5a87f1505f4686ba2aad3045cb414cc65cde98b92c76f\n20a9be4a42b77e077b9c00eaa3914709c3fc1a16787e639a2c7fd9a30d9e8ffa\n1d5a900dc9cfd5c319ec34570cb758bae3a342d936a30915dbd5160922aaf241\n74c014836eb17224a681c1d7cae7fe0d0627bd5af08286c59e2640cadf9e33db\n6636197d955a073214899ae76156146452d063a460fdc5a82df0eafe9ad88a24\n905f7db7dc8097c0d9b0f9319aea0aaf7aaed4a85c93979445e8d1e5a9bdd3b5\n4d74320a1b797ace38376db0b2f6566432b8a90ca4fc7842b90623603f7aa2e5\na2f0298157822d42f334b8f9f80fb04c36bfde0eb1187c1b15ad0666031c5c09\n62bab12d2476f696939130c5b59fe70b61320e4510be29e04f13236cbcc78a8f\n93bd11c24fcc4b45405a13a65ea47c13be1f82075662c316b4de144f89beb6aa\ncfb84f0d288c67d488faed8dbfff92be9a24bed443e9db3f1deab63ae94eecef\n43ae1d68455826cb3a48c456d7e9a849a9822c77503e5b9f029fe70168831ea5\n2ec0c2c4471627fb5f2d03bdf8726bcce14a8a162bd9bb26137253ba8b581941\ne759a7ca7917d4244da33f45df6684d3dc361bda88b4a0a02e5e55a1efb0d851\nb4e418bc6a0e213172a08b7596b1fd93aaf111f2778006da546ca1db88d5db98\n4ae9658c1d31adf6ecd3180c19791c85a0ddd1547fdb800479a6dfea56ff1e11\n9b3c1dc388c0f372a44712954373ab66cc420b2cc80a92c2fa011d91c441bab2\nf54dbbea462e186e0617b2f3921f1aa33dcd2c1c5eccbcc37dc50bc29d0ffb03\ne45372aefe3b44d8584035f3bf5ad94459a65fa170516c271b722a2f08bd241b\n7816ae887856fef57292179987b26bbff4cf1da6cd2bb092df2f6ae3064d61b9\ne7bed1d13e534b991610a2c067a1c107ec6b0a8dfa6f6c4c2539c8747ad33057\nf5a9d083a689e34c8ca2957263786c1f78cff0347ba42730544865be79b7c461\n7ebf003f8cec1e4b6af75689fa6f6dcc317c7f6975df451eada5382583a1d1c6\n510ca60fd85e55c6e16ed39a86dea378d6f41c00beed05ff2f9f1a2219e6838c\n819e9576e4ef216802c4a913de00062e70df8d83754166a27708337ec6b8a031\n04a426a1c31371eaf807c8d638d16e6515ef0693651bc2dfc870a1a7e340d504\nbe0feabf24b5bc879e75801d188856be2225a82eae90a792fb4e0d66ca0c4a64\na5064e1c9c2fbe84b5d6578c2af56fef340a49911a0a346813fd5da9e694726e\na0dea4f42008ef28f8d6ea9f974327fe71889fe76945b30fa99c4c8c7bd3c40c\nccaa4f19c0e0e0c4cc88611829bdca334cd69463228c2f83e1467125b7eb3c9e\n812c62fdaf831871ea0af75efe4c81224eff156fb21bf1a27123d020beb9e1a4\nd72626ddf4dfd474b98694e87ef0691b71a8aa4d346d03eb56e0715d8f6148fc\n424cc472407f00bbff0cb49d05b0b5923821fccfc27869a85fedae1ecd60b31b\n1c8e8810879809ec069ca308454613df0f673b5516598fb5b822833fe3e0c0fd\n1b3684f7a66ff0f9132de78d198fb6dd459c42208ddd13ecf433d4c9901b0aaf\n4c8ca7685711deb49d9a2cfa4209a0d058aa8490963164652bbd3cf858e53975\n0af2b20db08bad60ac71809271597b65071e7946d81c02d8e8eac13adf5d5249\nac0b42f5c602e16b6199dde3666d58abec0c1485ba6ba71086c36481229891a6\n89bd1c4d67e91e5ad6d75ae80420cac489198821227c1ac94954cd0c94098773\nef4313cd8aa49aacd7d34bec814e77f9aa794e57bd14f678a5f3d9311036fcf3\nd39a94b0b23b982214469f645fdb728751627c28359d6613978a340b2b2ba9b6\na0304f87a77389a09a36a660cc983072063683920005b2434951a9c8ff375cb8\n17ce6c78b6991ab5a5efd7dd4e8b3171133da1cb44af59bd84724150d09f13b4\n39a1046904d4d3ec3d2a90cf5275a9527f8c3c62a0ae24a60e9e7d1765eabd75\ncdfc9a14c4043fd34ea73afa2e08cec40386f048879987699fb8123ded9709a8\n75b020943bfafac56dcbe4a2101223949b0179cf7de6b550657c91bf3116ee7c\n66e23e4ff64cedac326536ca1f75ed1bc7113f0267ea7a26fd44728714e2a1a3\n13e88daf24c9a46de29e3767648e961b346ddc72a6724a0857078c9a2ed39df9\nd17c65b89136a6cc0c954e0c46e9f23900c7ce91ae71d74237ea1128637a673c\nf6ea0c8286ef99801cc6d45bb780e21c5a7464d16f77b45236bb9819ed3a8c4c\n7e1b15400eac8a99511e77effdceaf8af6cef034b79862eaaaaa00bd02f5667a\nc1a03c0188d09fe4d1fcc0b0d3354c880b2943b9666224238db22257a3873b36\nbe9a8a55e01165f4e8d3c8eb3521ed57aa834a4f88b97f2fd77b3b3c39ae4bbe\n869a24a4714476b3d396eff67982ba0a8f9ac34bf7b247951c0c241a01f347f7\n84bf841495d76f9fb2ac130779145677c799a07678eb8a3ea3de9fd00430d46c\nb1b3b6c392afd853df1d0bcee9a053d6fecad859bb9bad0bf186a6196b89fcb8\n44799928b4da77817a8cd1c36cf9515090cbf63f373aaf151154a769cb58704c\n2c0263028c641e1ae224235cdb17d89af5398f3d1daf44254089e6b4db47475a\n1fc228e0151f244b025e5c14411c8834486e483e4cb4406752788fa99336d980\na7a6e6f1afecbd87f2c615880f3a6bc21524abd7076eaba6ea1bae0f995fee85\nf938283c60a7a1dfdfc053a8353051b18bd03129dfe6b472e73958d11467aded\nced7829ddf6e7879dced36391a1d113cb87969b0465d64b96b5360f774a98596\n1272aefdb74ea23d85c8af588ae0f6b43ec47292c880217c0ad03d87e1cc22bd\n8117ee06e36394a8fa5e72cab0825bc3af8bea7256e7f8abe7fcf57a38e38df6\nb60d783d56905a5d7794904c0cb95e2aa835145062e022b159fa7247af415890\n117a2c9a99674891b134760def15804badb8d4ae414a1410886eff8d5284b042\n9586db6610fc1e7c2ff53f19060e6b43dfb0d8bf8dd94efd5105ee20ae0bddd9\n58176c666d2ccdbaa1a3b0a8cda0b452409c8cf61b9e085d9a9164b7eac06dad\nf878ef8ff5e36bbd6414aa86e1d73d211175ab042ed5ff72030b44aba32b970b\n917282a1d69f3005b0a110f90942ea6f9cb2d9eb57a43000c48bfc2af2b572c3\nf8387ab21c90facde17d772ed98280b44061671ea4d98e901f33b8a8bf0f97a3\nd87d0c4d81d6e29d895f50c1552fcbef2df93a75e3b0046c794d20229d7eae01\n7f230053c4c2f463020d060b8552cfd6463018b4c03275dea0ac42977b3dbe97\n3d7efc22c9ddbf499f2a2358f6287a8c9946fd16e6e998dc763b5abaa6888484\nc2430f2fb9f2b0ae84984af32ba54cb191274f7b85695f5faa3cd5eb154b0f1b\nfa2a0b9ae93d591648d33b6c23e27f9a18e0b8548bf1f45158ba7c171bd1136c\nd045e9dd27e4f23dbfe5b29a66695628a87949cd0d4d15cd066916eeddc6cbc6\nf0a5c77201d4cd352584ae70d1b8e4ad2d5278a472d230997c7c03d16cb5ea0d\nd04df0bccfc7a277a0ec9516e10134a9ff93b3e6267c5ede4e5b848bdeb76b87\n52249e458b602c175ce8717e89da05ceb850d2538c340ef6142f0b5cf5906f99\nc271b6e5b9e614d64a7c72372835ec4a99bb39a7aecbc41d021118dd56d21326\nc818bff4de332c9c00e96755e71288117c19e3b920c23766f249b1abf4ebb173\n3f9d38f1772128cad4514c4c06fee49abf401feaf2368edf5b4f78fb13336189\n5040b953d2ec56876cc72fdf69ea7692da01a508c2ff7096e17d78e2f61a04b5\n400d9c28610aa8d48b790edb4bd5cf08646923b0d5a86178956bf7940f291242\n1c4f3bc76fd991e36e18d40f813095c5b9165700cf94403b23b2b7887458c4d4\n4a4f160ceee87c7d50fb4ddc3d4e3242d9ac170b060d472889e553c988126096\ndd343532e74b54d664d63141b1eda0e6ffd1d82ce4d084352e97f09e2e05a17d\ncd8bed5a8adc08494e5ba8b57ce522758413cbe5e5d74e6d3b251a6567fbea78\n5d838a9506c98691e0ee47be4421a95e6b02e8c66aa06f9c88b0ab94a1a32660\nfa0d8a24f2d5873ac94ff8e0670b96d4eb007ab89f1c77e0f1d1be46155fa2c4\n5930779b70c9a6d559a3646af2b83590b2f1ac3a3f1c9e8d465e145c69fc07cb\n5df5093b7cda7f1780def8060d7daf747491b0486e7ca427857946d2f3d0e22e\n018cf12b04b2ecfe3accb88e5e52dde2d9118a1747917e6a9f211c1d210b2b15\n8f31adac46b63cc00beed35638a2e8155805bc068a00b757d6f9dca2ae540883\n11ed782d682b511c557ab8c413e95ea8b6dd3a6c12ea9716d670fe4446629890\nd14a1ff76cdb4eb9e2ff314ed9094148bb33db76e4f6bbd5b6ec76aac13c6660\n38b1790d9c6ecf2f33b6d4ece409f012d58a75a1a4ef5e580986db61edcd97c9\n7ae81fa20bd7fcb07053311dbd6f3f73077ddd3949fa6dc327ad2fc056a8b798\n53b22c193126e73803c83fc4b7bd9cdc54c2fb1f6353ebddc027d3925bd32d89\n219a778cdc38e5f9621b41a27cb8fee8ffc1a2fc48ebd25828373b9bca8742c3\n0a58b2473a33b4805383415deeed7197a840f6c39267de16ecfcafe7d585f672\nb5ff6bb9d143e8e615d349ed779b847f2b5930aa83b08792e193d64aa163a090\n586a383d4ef4bc273f162164154d9abe6e68e23078cbbbd0a357a771bbc427c2\n3b6a3f24401e31edd9fd7091e8849c8e37d83ef396dc505f8f843f4ef305c505\n53776af2c088aaaa5a5efc05258cf692b579cba82efe7dd3f3394d985a5518cf\n93c258a168969d01842a624f56b4a6e50fde64083aa7cd0a8f3c0eea6e6d9a06\nd24b1f96d34d66c2fed66cf844b490b537561865299d18dbea55e025643f78d0\n2419619759dbcd65ed0ac4a2866c61f37383902b4e1665b2fd9414d348b4d41f\nebaf2a1e4bc97f5497de6237170ec27597c98e6cdbefee9c6a7b106b3b6aff2f\n7dbc6ba1b2d145285029bed2766715781b230aedca4dbe0c92945bb7954d9fd6\n1702f5a981dc0c5c876c28659d744803202a5929f03db99b32f776a794afbec5\n3f03ab51fbdf52c98de52fcae577c7ef0a72cb1f4170bffa48734f1df30ac772\n9f23e8541aed00a2cb2bfa219626421f669494c472c88e288e5698541185b862\n29881c30d6b6124b276110bca39fc496691eb1c61432cf296b055401f2f63e03\n22b0f37395a0489a031945a21fba843a881730d3298008bb4c023b24b195dd5a\n1e30b76210c17a06095e3222bd39ff2b7f7b6366a173a9e0cb527172e1da2308\n5eb7568000e9e9fa521f977c341e7c4cefc883522696ab5617d6f6854bcaaafe\nccb82352f821fd30f6edbab80310bfff84779899bc62743894dd9e726c6a585d\nb4a2883fddf1d1ccb7dc8242c6d0f16d008d551ee9e02cddd4a21a28cb56bba4\n0bcaaaf95dc41650643302346318e7eef6bba6f4fb6eb956f99457f2d2ebf601\n65b6b1e4405501ddedc0d2cce1a9cc7ee6282a2432e88ff45ac520a8155a2b4c\n4bfbef1e1a860ac2a2f2d25c1bcbd864001a54be48c3686cf72e98856e8d4e4f\n2b3f382c3e3a75bef479a567bab3764282da78b388d27a6dec10e31db5088362\nd3586e219c55ec4e24bdfcd77b920f5ea332d29630559785a900d05813400556\nd1d0721754258799fb25bb59a79699f6f4e56f0e58f6748bf8091d848e4bf22b\n728c913b0db74e9bae863413ba5ba04ec732d6f50d838424dd1a47b29e51aaaf\n8ee4831f52722e1627bc84cbc737535206f251d92549b8e2d24bc6b3d2cd5687\n9c4bdc972846bceecb47b5ad23df0a82cc481e37d74ff3389ad3535d0d6254d6\nd8ec450fa1e3b81b7be26897b75025a64f480dada26aa777cda828ed66cd65fc\n9d02717638bdb88571460a45aaf9abe1b460659f7893c1c64008192e38cef686\n8a076a626165bb53e34766580ea78b2bb63e45d6fa0ec31687bc4f243760d452\nb459dbed951640b1f5083a19705a3384af93eaf503a000e3f2384062bb52559e\n1e0d8bdaf66cdacfaaf91636d01f7a76dd5424b7b620a706304cae6fc50f0dd3\n8d395cf39dc796c7ec271721e13b1dcff35f06b5bf5cbb6b2eb908714f4fdd35\n9763585e39484118b080504f1bdb293321cfd1b2913fb217c7b41d7212b1daac\n1c4d770cfe91a1f649d760c132fd77024f7a0a4e8d0cfb275f5435f3dd911be1\n1db381c01a9c04645631fd9e1c871c5d2c91ac39a18d8b9dc563633d709a909d\n614024729bbb2824c33c216612efe88278d6b1082e18f486631fde76aefda526\n2a194ecb406ec7315a43695256b1f7503d323c8fcce1f572ce5410edc931f97a\nfe2671156d0167b444ab02691b81fa57696d07e235dda15640ce4d2a936d1dbc\na0d1f41aff8f3ca1792ac1c146021056a40ba5b30278222286a89825638edeaf\n429cfba89cc85ff869cc5d51e41a8ffe937e03744732e3fab250127c9eb21d53\n48e3f6fbfa7d4abb16dac3c45e68e355e43d59c67a717495a6acdff50208c2c9\n7ecc5243915c0ba12e420d4fbc39c5332db7d681e51158af491169d7f7212fdf\n47b9a9dd0af18a2c28bf94199e0480f9cd97c2ed0e79a57a02adae4b0cd3c1c8\nf91521a111933abee28bfa1ee0810db409fe8dfa17195a9a7637f180ec400844\ne497a7f9cbafb57866834f37b2937cd71cfd5a88eb86b64a01e33e9a639ee133\n89460417242cec260f151b9613f6aca727b2578770e86b45b395b951caba7afd\n94c3442bd844ff531d069b8a2bc52710d341882860864884714eacfe23bc1cb9\ne4823b3c2315c09342cf097030f14fd7e663c2d030d2d71079b6d53799e5917c\n9798624793a0f850b6046e7c987f7b1b01b586a83e8fea61486dcbe8b1362ba3\na2ddf29c622fa55d54800823824af57e426b41b6aeb440da475e13240445d467\n26a6d4518ca92a6003209d30974a40872e176ec005233706148979aa159c2b7e\ndcd5136921bb9116855f20b0de9f99a919854a9fb381d71265dbe5375b06ffcd\n490b11631704a069a04c0cf952ea0d9c4176d5acfbc48d8a48074357b1b4a8d7\n1a9bff215c77e14d23e09393eb10015a5474701d12005e66a31aaaafcae6a030\n34e2281bec8d06f7b41e9b2dabb7783daec99bc7a3a8dd48e90d36848efdde98\nc09309fb1c506f5a1c0af132020b07afb2a9b3c457cb0f1a66684e043872b794\n534308404c4d7faeb296d9f1561cac5fac91f4b02f89b429212c58c55cb96fc8\nbd812563b864833a0f9fd69422d24eb4a4acc9cb2bebc4ff8b9d8e891a63babe\nc423cda2fcb7cd52a04774b3738108a19eeb1208256540bfcea23ba55f4dce15\ne1d176c21f166ddc1c2bb79b75d40e38050c6658a23c416650a1dadd17e15584\nb382a148d2df13b0d186484217ce6e11308856598534befb42a76389263e975b\n0a17b79be1c651630970b99d5956213b5da9d41d160dfdbb14de1e25f83725df\nee7b04c5f1eb6cf4914ce25d050de1e1fd701490f5e4d82dd51b28cdd8cce9e9\ne39bba025c012e85b2b1c125c45943798f8b93c791b06f159bbbe9a3ab1e0fde\n320164f98cb091b751a57d86d15a0fe812f9a8de5306b3cb033c9e7eaaba9054\n54af59e9d61518b06302c9aad9a4884c222a41898ed8e340c7b0163e5152a394\nded4c2abb46fa6e763e27b55fad2c1f9c5e4ddf0bc39fb7178f9f5c84eb6d793\n04815fb8fe12ba84b91019d3c52d36febd917e5fc58c423b5c9e09ea31bf78f1\nda64ca6686189475dbdaa3fa111c24cd98c82e2a9f4c768969ca12ab4d160b85\n7aff1f4af235f5127e7735fd8a4e1f4023de13c477e98d7190bf7b6e45b4f867\n38f0c045e958f0e2e20fef19fe492044c0c04fa16a3a0d33dcdbded65d83cc01\n38ae67b6b6c82ce18705e39c04ad8308ff32f03939586fade451f2dc110ab4dc\nfb3125e09d8edeeb9c0ebf3d289f9354973ed883cc9df86e126f0cdf91d07622\n8d14814c51a72aaf37bf555a0e2e8ea5eb932165a430a9d0364247f0ef15886d\nfb61e13710f14ee5ff73120542ea256894a17034c5b5d2db4089ee4ae8a5aaa2\ncedfa0b8453c045c75ccf036b34d53f810c2a219e2765e0f6b1aa7c7d78dd6ed\n27df905f4874e65d79c161371032be490231487d9b877b3a2c6e8a9840e8f421\n7c2a536aa271ac2f44ee7037758b75f5eccdf5ffc7cb94cb100a8710a118e0cd\ncdee5ffe9a3cb0797b1015e78da676e14b78a252fe4f86deb0bda164d4058b46\n3cbc28247564d64fca96b4e6f54499e08714982e495918059ef68b396226aaeb\ne5ea86f697256fbb59abc1c752d459d585ddeec5792b769e8f1c55c79f9dccf9\ncb52f236496e84fd5e9a7e4e63d037835b976d5cbad20aa538a07fca3e44ee5e\nf03e7b4acf304a825c3d1783a46fe5c046e30f75e8935fd323a022161f2636d7\n287b209d2aff608abf3074cba61563cbe724afa0f51b8e2b49023d2165aba623\naac35969666595b7f010b911eac958005ac45a5b756a9a1b711f79f2d64067a9\nd4258ff5e7b4fb2142de1e561d8d098a11d63934a065585dafb5693d7b9a546a\nec40b879bb5b7c167e85cc4e9df665cbf0ea67d12e230d9bd922af96eb39dfb5\ne7bf1751f575552d9df1da8402ef816ba3be8f3c19b8912004e1da13463baf48\nff7b3b33a57aed2a3e9e9f145be50f2e84900daa0b996632263af132f7e6b374\n35d91cbcf393cb46649ff8ee35a93b7e27a9bf39734b53cf410ab3f3a2fc4027\naf2c873a42c13aff732acc9bb83bf2862e7da328eecac95b7c0f0bf79744ea95\n363f54a5b19fd37f0282ffc0c1779d733f531ff661381dc983de2858e791ff20\n17a15a90500c579a5f61209d9a1f503788babb313bfb33f3ca0732c984c398db\n687dd0868699e20655fa21040c952224811bceceb52c86e3666430e4fec39c47\n4462ea17dbd53ce9feb02d52615b93ffd7928c8f6d24b3be92f7731b8b087c0c\n1d51c663dba72b2a6879c6f55c1de28f339676d7bb9af94fbe12af5488d4b3f5\nb529a6a3474e3f0cc46869343243748527080265184bbfb93eb971bdcb298e54\n16030d4076d4402b653b180ca984be40eebf024d2a7faf3910fa14a5545c6242\nfc6d8a9b6380cae5e75df338e07b8784bcbbd5369ad30a2c6a7ec32cf5d78219\n41b18b7aa533b522565cfa592c54a428813751b5943328dcd2c6a622ebd2ba11\nc6d2d65f03b4f419ba4375c714e62974b83a5a5c4392c26da2650e0ef90e5905\n402cbcac72fe007cdc6dd09bab715b7776e327215024acc013cc55f0a3a26859\n2a02a0a9f87370cc81e5c185db2e6090b6b2e947170a41ebd0cc6d71a264f0ca\n16eb08e781695fd8d35777542ba057443ec42bf0a822c27327b1e064af38db65\n9233639f837a74efb758b74a117ec8841779afda95ef3f0f916c97936ec16bbe\nf2b917a8e8e686aca6930649129fbe9dfd1f8247b34dbc586678999dbff6a12a\nc51c1881425432805a253cfeb23c5ea0cdf05c62f99d34aa7f73d90272af0969\n68ab75f3f1ebb30b5ddd6233202fdae3573f67a51662367833673f7ff1344346\n446dcd3e29699b9028c7bbed09471ebc899cb3139284a914b98fabb1d50119b2\n347ed0d201cfd78dee828badc1655fa2c70191b24e20e699454570fb31850dac\n38ae12ca5cdbbe2b0f22f0de8ef8b927dc6c54ecf3801e5c2544710a2e8f726d\ncf297becfb7a93b4b422089200aafafb934334704c3d384379d34147f7d163af\n3cb42599ea902106ca1befeae26d641d49b7a3490f09bf16b8d17c026e40a2f0\n8d727fa2aefcbe4ac82dafeef86eb672a95f413b73858600c7d9dc544694e25f\n259b039558da35ba48443e6c931f6cc6ed108e765c879314e532d888a79c1b2d\n460204838fb662dc90465032792f03f18ceb654a379648ba449922c9447c00d5\n08b81dddf1fd0304b2b803785ee94ae63b9700b36fcc894782782f51f397ccff\n2a1734032660685070d6d5fe94636e6de386bf347f063dff5819b6b8554ea416\n59da8bb46c01807fdc883e15a200a6cedd4b95810da0a805c3d71c6467d84899\n6b88c60191c3a5e3c4dff6863ff024a5c4d4092164792a397b7d390b4306b56d\nb002e6533752ab431804dcd2ec8c9cf242efc7b93dd9c3fdb21824068d3abb6a\n831d89d241613946e097ce77a82f68c92da11dfcbde58e3450f2830a3a049bdf\nc6e9bdff298b4800f150ad3833a612643316cb420af3db29f008ba36a2ef0181\nf64b4bdbb6334233c58e0e68876a6d2048db062b61a9cd020ed7ef071525cdb9\n3880a24eaeadf171b5c077e4de8527b5ed5b7e5005f73c09b2279ecf72e1ec79\na3e4837d33cfd614e6d82df617f77eab048e71b51b3ba4334d8be27798576a28\na21ed866fa75cd39ad747a1fea7a57446111ca317372060aacb159ee90e5efbc\ndc5fd16b41a5e63363b41f13c0160f719ce353b913d069e4126743b420562d52\ne56b970fe3e660f4a850e8ef45f7262128f936ab5610401756ebeb0d9b5dab1c\n8ef2d95e0cbe3542bfe0c6f29febf3f5a39fbd16a5c27d652c4a0c542124855f\n4b53071df5537a5fd5bcf653c0578b4e324bfd7587ed10318333382ea137d90b\nf0f83b4eb5d4796e42fb7053d4cd9feeb842d909cb67ba4bedf8592c876a83cf\n48e4a2f7e92558e57a5cc6c3c6a4eddd68bba96359eef224fd78f909e016c5f0\nad7740a686e566386c4f000764c8b6e97a1f3e9e98b047f75cad6b84d502c377\n846904339303da4c0436f1f67fcefa9fc0581f769b319c38d4221576b74b949e\n532b99ed1cc90a2de4189b346dab2d48777ba5bd5cfc80bb15f0c8d4f478d007\nb84aff3121f7c0cc0887dc20cf195b1d964e14685acd86aabdecf09337ac26bb\nb0e45caec8be479279364fb840c6ff36d164b7be25f9f811a466ce04c2ce5a77\n4ee329b9bd773657737db17709d3a6913793de0357bdea11ddd259b5bdc94e1a\nbf95d33b8396ae9b26342cc1d2a2831e95939a0ef5f13443a9150f35aac5623b\ncbaf6cc5d24d51225c2920e3bcee9d09ca5c60f22b07f24a26dd856f8efec9ef\nb184f8a92781ea228c2f15ad9ab1da75002c9b352316a588d00af46a86b73aac\nfeb16d461c9cf969977681a88806c8e6330c1e9e8d428c91de717fe3908802ec\n38abd40d988b018fd7a4c02a20f2f3c18d8364fb18692c310d4d1977be4108a8\n56f807519b471ded405d1e7ed6c02676970c2a1df6cdcda3b38edad9b5cee11e\n5b221716f3137083d4a433e6af2eafe4760b0cf8ccbd5c15af998b5d5785a3f9\nb79a81aeaa9a6706b2dcd217ed437b23de309a360ff60ca82a8251be5671a625\na90de4daee9941d44d8d1e3a19399f13b93d9b567b2ab2f9cf2b71058ccd9776\n3b6a3f95ea470066f36b343c0429655f8f25c89e65074a52cc6047885f4105de\n2ceb8f80846530a88228b1f44c73e8cf8ff1e99d5cdcd3c91487caba9cce19ac\nbee693c2479d8dc2c8799895e188155502f957b20e26619874cebe43d125f6e8\n638092ae98ef4429bf719bf6cbd17b1f1fd9a7c90bbb6b0b34614b32234a7f4b\n1c259e4b10ec72d3a2e5526473e551450a11d8537cd6d3dfc472576307ad3354\nb2a9c24ae22c90aa37b1ac70352969e2aeb30d0fa894724d5e47a87e7319bb35\n7b76e95d7f665952ce39e05815e5718a7ec0d09dfb566e589c3655e87588b6b6\n95a272aba75b07eff8041298b7a1bf6fd1b10c5ce008180940df9f4235fab68d\nbc3d2ab597192b0912b5d9486b5c8f6cd5238cb94a0c807f4baabe7e81f072ca\n0b626d0a5cb1b8254a4ef588149c84c53d27ca3cbc729416976bf6a20bbed57c\n6c0fd85c86dabd7ade406b27a8890bef705bf3c5c8a59615d858ca2707c47404\n78f55c4d6da862b50f90997989ce492d884f97482166d5ddd4eae075395d7be3\ncb0dfed4d966b2fd24c41acb6ba9f1280ca84aa8cf607bf1d2cae3c6dae6871e\nc5eb10a943c84b83095fe1b7b9bc3682b5681a850001be80a48a2b1bf22790ec\nf53a1ddb50e2325392f118cd56727005b947495ae8ca6e46cab765670ea03488\n39275b5711fd6b227ed1a6b66c02c9f199c8d54b46609a0804fcffcfe0cc8b65\n0f1ec83354d395ae89ef02d548088674fcbc0ac0daed78ab47e3ed00df77c01f\n2d0e5967da9348fc0434d71eaf90785c3666694604f48bf2043bd54dae61ea1d\n3e2da8efc1ae867ecb0e7d11093ba20786413e80c8f05dabcf474d6d9a1149b1\nbe96ad65eeb5b865f4b321de61ff8904a072092910bbfce7bd5a42f10c355e73\nc0890e342af2f2f4d7fac20c846d372877c7b12776b76756a9002723d5ee71fe\n5b1c0e5fbed5c354cf4b9cfb843f01b9e378e90e7a56994325c7c447e5269204\nc83b98d99dafc77ddb6a3fcfbbf430f6d0ab8a832c262f879369fd9ddd33b1df\n602f5462b9f2b29360f1a1b7d7eecacc4f10f188e7e2ba08005878b1d9c3762c\nab8a29d01c0c164efe8d37328deb51567d5f17b25c11590a1078d53a36bee786\n5813fee10723c1acefe111dbc08b796895f2e1bb190f3da6accd6dc6c884eb44\nec4d78df308ae7e774cef87ed4d6200bde349c35d7262448f165a6706c33563d\n24d04d409c69924949aae19c13d07ee64910d1c29d15ac711fb56e3dd05a980f\nacc11d9c08863c32a28bf94eb2c8fd1fa0ee61b939ed944b017a46b681e95cbd\n0365d77433a27195df9d20a3483ec94192fec56b9af5c656bfc2924ca0c19fef\nad23207ac6d0169a15cc273d66899cc044b5efca9ef4078b9bc1e91f83842624\nc08a91c1c0d20306b1479e749386cc50fed78f22a27579fcfe943b033738bd67\ndb8c4cba7f60e8ebbefeb2ceba747c757e902b70dc09622aa4ba96347b6948fb\n3ed5c54ac78148b5976001bd3f0474d93f4903d15a6cd68727714ebcda244345\nd9a4b0020bde3e2c74385736f244206da78d0331de35feb4960d8fcd0ef4bb75\n5ab20087c2aa1da104d16ade37b9159caa0f8bf528b55cc005f017d6823268d9\nb13d199ce47d3c95e492ac8067fc44b42ac8be86b639770a91c75b7f7a55ff60\n0181451587fca8bea1721f4950b3322dd9c8a09cf8e4d2abef3ec038c8302e9a\n3194d54745d5798e3b3844696d3c4566b179c98b7adcff4bd2a4fb402ab275f4\n30f2c77eecfb3c473d2e7102592e101c3d38f79a08021227f8f782a59d20cdf9\nc9750a8c0ac70e34d983356c313f85acb56ced4467357e07e23a62ab3fb6ed71\n9f9bf85edd20af93c1c1736b6112dfc8447b6d06ca12202f84b34f892a1a13af\n4423b723c13701aa57982dbf20ed6ca129b72f79f77f1705485967980db5df42\nc662f0ed38a02b55cf048e713c0c6a1a85c900acaeaf6d045dc96bea5d45ecf2\n8ae85d1accc9b38a45d6f516078c72388e5337b9c1a2023d086e97e3affd3f64\n517df9ece75c3afd0e3dc74e2ed3b4aef8a8c032cdd70127ec4698db19c78646\n58f9dcd6b98676dede88a1efae04d182ba73475290ba87fdc71cee2737057855\nc9b151917eb5b3cde9f70db961ab5c8a10443a7aff427bae1d1e720a604c39a0\n14de8b45e528237198f086421b5938871ef89008148eac965bfcc850ed7aeae5\nec3e8e37b9762a8a6580c791cd89c4d25fcdbe778bae071bb1e18257fefe9771\n255f977611825be7f64134c3521ebe7c549741265838ef00f0687ce14c463d97\n884893e5c967d3ca5286b52d0aaca5ada20e778a4f4c807a9cd97f0c05ed4876\n1cb09c787085e213a86b7aaf33acf64552ce5d8c3459c261447024035997ae76\n85d1d4337cd1a1def984e185779b2a0a8a3c8da6212730f96174f4c3b104d096\n3e0e395fb85f918cdd5f98c77daeb09a64169dfac253730c7da4122a7025ef19\ndec6042fc24d4565a1f8a7b37da00d170b6c4be72475544dc73b111c775e5c20\n401ad5b382559c2dde0bc3ec0e46c07e42a08de477b3c07159666bda273e29d1\n8ef5b8e6d514e510d8210e0a998508c3062ae26b504abb3613f3d1f167c87bc6\n48308196ff8fe6ca97db5fe0baadbfa22593c01bfab9640edc31410fa037bc90\nf6ca35ea8010a6b3c031b43e19c38a010e84f1c5c97b73fb3330ac18268c16bb\n88648034875df43ea61c877c3278caddd457ee47509154aef00a86d801f8ddb1\n44e43f5ee5683e3ae84b7f6ba7aaa51f038607beb96ad79183364c49793ff0c6\n98c2a8fb0ac71b8f38eb7479a4995e1fbac92278b9f3528261d822db91d5d4f1\n9876784d0651ec7291f19a5437e987cd727afdcd267f983eabe8e5f3879805d1\n3f2089d9fca9d35e4fbfae0d72d7d0021c386bf7608fbfaa87d26a57933bb6ec\n95739fbc3f7229a82efe4343b679165df1ed79eb650fac11cb7f1e74d6fdc9b9\na8847a85bd24f58e2d988aea2f26eaea9d27f5892d2cdd77669b849a92f8d0d7\n5c54ed9682ba9d0c7058e04997279bdb3454d2b6a44598267a269a814aa9e1f0\nabf598a1b6c2afb75e173eb6fc2634253c04fcee9cb2a896523aad92457ef0eb\n321e0a037eb6cfe349911c148473f86b5aff5b8985533a5f6d3b406ddac73d35\n23071332a8fc34a4816171b2c8a19bf458b4ce7259270785060b9d673f3c4997\n2da999ce0f2e7ebc2b2cce6de818d40f020d5e53b882f0d3754c341d5740ae72\n2868f364a2faa97e8c8143de444a9f3ae27eab6c4f7c838f3a5f8b9600d70831\ncbc2dc64ed3189f33030d0b32211b757f6682949ab889db99693f4dea2f670cf\n057032d3034aaa6c3e75a0bbdc092c5f4886b169e59ad2d7f4d41cf7ad2f5882\n77914fdb7253e198a40b2186b1a9a0aa958ba9fb99f21a074825e053e562c2af\n8cd8866861ae914042dc4b8b5342089b21013d519c44c28482cb8801c73de3a4\n9d6dd060294e4ccdc55f000f0ab7900b088e141fc2d8ce68cf771a068541657a\n8b41e95fd2b1b452949716ad5bb0b8c2ece99d07a41f3c3ec381212baf8cca9d\n801a993c8a3926b0e0d60637618f69facf70c7b3e6af9762afde0deb9e5be5a9\n105c3164b4d8372414fbee3181066f1772d21da04d0b350c806935669fd69cf9\n6073c324b8ea582638b11e58e43267c3854fa35c3deb3160d7756d66b87c8385\n92f86ab8a97bc9d6260e2723d435769d15dce8cec387318add815687ddb99d5f\n1980da44a5332e5c98c59c8d6ba28a995ef8d809d783a9b2510e1c6b820c25bb\n90f52ccb9fa3fdeaa661a69921794a60a591fc9157e755c28aa399f30e93d298\n9e7b35fcce14d5fe6bedab37c173d384d3f67323e702b14ea74951c5c07917af\nf9f9fcc450950a8232cfc4744dd38ba79b9fc41a37205c97f44ddac6ea5d423d\n7af9883610084080de39e5a71db472081595235f72c7ccea69a20cac059f2357\nb4d60e158834ad26f85fc1e9bbc948db8fe7a03c5c401ac2ed880fef8803e464\n76b00961ff910f1fcc897e1fa4f6b697a616f07aa95f5616a313ca01f39aa99e\n8a5a9fcd389c99d750ccfa38bdbdd9a0376452970f91859aefebe5b55779516e\n665c6f786b3d22a1cc781a729e477c5f82a65027c87b54a97d9130bd4464956d\n735fa5b8f710cea51eb9bb909e89716160cdb112e44876ac49494f62b8f46e63\nc978f80f3a57d99ede832bb7bc1ae59ad0025944669343f432bfeadf8d7408f0\n50c7568da4400df96139c1d243b8634b19f2134fd13c783fe9012a58a7e7843d\n55bc3b7c768579bee6f5931f1ea9caa44bd6808b12bf4550c852c1ee3cfa72b3\n5c883f0b6a4f4e5d768f93aed79bb5c70b681c3a9d604b6eecb7026c1b22e28d\nc184d2fdade4c6afb6b9fe8d7495abe07547d092bdd73c5701696e6f256cda8e\n1a6e58f3335e51498df75cf37a7213fa50f6d9a7a4ea4a251c3cd004b75b8805\n8c8b8efba9f66bbe5e8f321981aa2d8f5d455b47347e368686689d00fa5f996a\nb6922e325bf4e72ac9cb09fd5802f365e4a15045683884b45f15175cabb62651\n3e71fdf4e7ac9b4b91772644ca8e55c530a9459719e181f9f2d211601d1bc5d0\n55731eebc2964f4add0f713c6b22abd36bd9163902a147f5172c4e054ff44ff1\n1999337a57a673028374a04b65e7e77ef2ce24a75c90fa2bb48cad9e9fa77111\n24514b9400e2cadf75e9d7f62fb7993f82cc336c77716bea4c00c931ac21e95b\n04f35462cee46670514510bfa22ded3ea18bbb8b511f42c637bbd06134280404\n05d4355a5d252d9bc291c14cc81d77c491f62a54387442b9a884b3d21e0adc5e\n1c120ac2c0b03a0355204eda408570d379547d40314f5c61f8c97971b91c521c\na5e86c1c321a90ae21dfbed0688e8c7287e7a35a1f0807b0a9a811a6d2d68636\n0fe12a04126f19c9b0fbed1083265ef6b2f4d463563df3b1be5b9fd0d277d53f\nf4f5ee43b113f580be21183338592a57e29c025bfcbd56dad49e4b5bef14363a\ndb5594baba9ec550bd4cda1759277595d677a71c91925e6e1960f31a24117609\n4213750579cf163fdf9b3590951bb5e2a8f117412025f1807584ce1a4cd382f0\n9da5d7b56954f85327c0eb4ae556b79c08048b127101d2fb38f16996f1b66fbe\n0040841b5578762c35849b0641d3343d8290f2aba7f075a0e2721718e08f0a85\n1fc82805f23c2cb0cd67740ce3d5bc6b97f98f8818cd39ad76ea2779c48ce48d\n43302c382ec8d61904242e9a5e28527ea6a3bfcf9dce17a9d36398152c7c47ed\n777c944db9ba4bec4f30a1261a0096081ceb94708ebe98e7165ebcbd768240be\nd03fa2a0904086e1a4fbae8788315c7f864754e63f2399702bf2dca498b2b352\n09ce951389384a9e8ec4f01b207f61112956e9a59c0bf46677b9b1f8459b41e1\nb8323e5bb1ecde22bf2c47938e0e2f548cb02758dc7135004e448d9e689cf431\n11d2fa0a98f3e31b3882cf8689c76d276b85177cb27357bcb2ff0de3cb032166\nc58f25e0ddec5971b6a81325abcad1fc2a27cf0b20332769e80028ea27b841aa\n16506f7c22dd55171341687682311e1f884ef87494bccfec13f5b0b217333376\nfb86573ee65386e19628e78f49c6cd9fbe4cfdaf21ab25e6f62a99cba323ebbf\nc5eeaa523613eddbf85de5dbb9c66de1748624c271d8fdbc16bb8f9196428516\nf85e26d904878f9da7bd61848e96250c225e09dbd4f15180759e3e5da86d0dc3\nf5f4c5df81625a466d31872b9644afa35c81cd8a84a052b954bbada87c1e50c2\nc39594078c068c9b0aed83074cf941bc7afa3afbbcf3f40f34e4e3d1f133a57e\n9c10799313813684dc597fe5ae551cec1f61802dd873526fde81f323b6c62530\n0a5ad9bec4131b9cc9cf26a4554d6d64bbd5c7eb59024b2526f12f3f9352dad4\n7043446118b2339223dc051a4938bc6a2c691029d693b8bd3d35fcc458f7df7d\nbc2e51ea969285ad222a233e5331f99ee402eaf6d76403f6fec3114e6315a2db\n23659ff88a0cf2738c290fb6ccacc2472bcaa3e0ce03f9e9d8357b89580c95f6\nf97c1ef3f0bad43253b8e97e6613f0ac04f55f2f321b5688fbe4076558738b71\nb378712d45c48ff6ec34057bb2a0aa7086c27716aed9c3e6ca6703ffdcfc451a\n0471ae9d6512f0fa82155ae17e133b685717138397757d0230b62cda0ab1ee9b\nb1f0bb791daad5f3789ec0f22d13b44143b63250f09ac760e86ce3219292c6f1\nca0e77313611d8282d8f62c986fd525baf75a8ab194038359f6e0217d1a5fde7\nec7de056f4fc6893e740dd8c9efcd629fe529d5116db5482d12bf39b0e3a40bc\nbf1b3f99f627cbe937656f38909e3924b89ef1478be176320b6fb8a7c750f41b\n90dfa427229c900b51d806d959be3b8b2b6e6187fb1bd406fd179dac8af5e70d\nbe10e747e198dd6cb67872b48585f33aec68a3ca94a22224056a32a8139cdba7\naa07ea5cecad1d2e1054cd265d35c6b2ec0a25a0dc415955186cffd2c4b6a86c\n028129fe12b4fd07dde82836ded99925994f058cf323bd1b362a86a8b4ac5aa5\ndbad763abb2613b41ae6b947fb79a7edf3ad23eb7d732727376a1fa9ee0e8d79\n3b5871fc0e4535563bccef6ce24a71b717f90590a7317652d7978bfa78a72454\n353fcf512ec5e804ff6d2984c3e905401b69246e1b040693c581e794e6d57ed2\n5dba59acdedbc4114116da97b749c4007f51addf7dc9bec79c77cfe29b6a93c2\n61e2007b01a0b8d6f95a9e6c25551a20ed592c90c7ab5071280e5d85200d776d\n938df156ecd2d863f8b1848dfbe5d3a40d4b817deab66d5c191b4b05035e0009\n5f04c4cdfa26de785889829564c27377ff1f2518da932d4559017881aa68a802\n5bdaacfd2611e101ac667d3b69e7895337d522e56b4d9698c4c5f9a0e83c2386\nf084f40a75282c72b2fcc12973e5edf34e810fd247f9c0317899fe6efc833822\n8a788d33265883fcb78366ce69783b9a15e8c041e4556293f61c571bcc985d69\nb1761aca9460781c4b9f9035370dda95c777de8d35e1d7aac234987fe1a8ff45\n37888fde3267d97e27c8fb6d95088f0d207e4b8d3e3d689172b2d89b8dc28b34\n43d14646b23e3807afeaf3c83a22f45cbfe9eabdcee160ab7b1a664bb5fdba38\n4446b84b6b863c892a6ecf33f7a569d82df118582e514c11314dc73fdb04be15\nb6bc9b3be801419d90b74cdc52ac40e1342167440621fcaaeaaf9db8f78f9e20\n045d3a26e1b51f2c786b23c09cb94f9cc91df0b5236e3f54062925ce8804113b\nc93c3ab041948a2027d00e112043ef82ce54365fe241a2c503fa334df6973406\n3402fc6d246a8694f436b318bd5558f69c9f182746a25aea1bf1993f61ca48b3\nb04074f8a44206716d6a6d834ed3c455e272b41810c6d70133c455f246aa7764\na104c482caff864d86eebb2e1764735775e78850006f959de537d66dfcea3f2a\n45e24e7d905439a59ab155474bb3dc63897c1dcb7e8f298366dd49b9b1e42f94\n816a3c275460375dbdf175ca420b46df137a34bb1ad7983807677f093a05b90e\n81fd0ee6b6de147a9813a1a1ec0c7d859777c0b2945edf2901f883b8b54aca59\n814b951e4c97fdbf48aaff19cb9fe7c6c0de6532f656e5b1f03193b58ee693f8\n4684114fdbbc86134a483ba1be41cf4fd823a23f5a52ceab00021c2954e5c04c\n865ec7222d33d82f19e09375610ff6dfcea95e0a25a1cd3d6156b63bcfa13740\n63bfe1d8a5e45659b0c924eb81cb3d4e70e59515ca1be45f66faadb5993ec547\n966f70f5d761c8731063422a510984f7b4587efe6799d2f28d90236b49ac10b6\nfbc45ecb7d91017e16e4fbf716709b37120d3586363e33d94ac92b01d1349c00\n18825eddd5cd9cccbf8c70046ca295d885209aa3fb0b6209c5298ef4843c39ed\nd64dc504c278334107d322cde4a388a4a079bd303c4d5588be979eaa6cbdf8b4\n942ffd0d27b2ebe1533f1d31b3da2c7fb5c8b663391151fe897cffda8c227d45\ne292e9113ed2538712b40601f1f0c8f3d0d69ccb584abe6db54b4044034791b7\nd7a0838aa9d80c971f45486b4304f20d68b76ebc6e55bb683dc20c356176006c\nb1f902f8d0be642da9f9209703c23e48235c35778221689c16d426fbd2903d19\n7fd00e071a1989e8b2ccef17d51e7d73d7189c06adcda120cd3e849c603729f8\n85006337a3a1136ca31e0e41d674620f97f0101a297a1b731b1d0348c51d72c1\n4be0366a2667999067d102d7007d510f31074799ec5cf6ee355e59bb68dd85fe\n3e3f553168c337afddf1bbf895c0df509355dd9120735dec0715fac5804075fd\ncd57fda443cffeb9e9d8e6f24a3daf1d9523ddbd29532a6c5a79e6b1ea1f2b1e\n55e0369cff1bf0c074873ac1226354a6a74e62faf42f1a15c863c0ba21c3c399\nb9c1ddc4ff6e9bc9a3ba58581b6bf67b89b7045b9542694b9c2dc3e185a1390b\n67aacd3c344d37467671f728fddce8bb08e2c6b8cd4a8abc60de087fdd560130\n3f40599da3a1d4abe2e93cffc5628e62d972f034681db1c6b07cdd0e7f9963dc\n0b146051fe8140004c5cb27f0f0411027ba88646baa9d6f02931a762300a8085\n7aba1853932d380a72753ebcf4c9c24a03fedbb2dc057c6f62f31695d35a7e8d\nda73ea4a610f515fb52ad509605b8deed5e44c36b7210dbafb46cf2c5ca7f42e\n00571a8a157a953226cc00a87592050135386c5e7fa1c5e3c023edb0359cc26e\n96762eff0ea623651b10ff61835614486760930756e59d54919f0dfe0b8fe93b\n9b28c474055246750aa1679389c5204657d283981a5cb160e21c1737503ab109\n044a661a3b3d100ec7f4581bf7b67b50970078319890d5a67d133bdc07265d22\n99504698a00ed8c9747feb1e747737e19850d39c03a837f0d504f9b43c8fe9a5\n725eba04ee6cd478f8416470ed154a11484aed5822bf9979b1ebd5e56af698f3\n4b865aecd29c67ca74814b0cd0109767f6d582205574670b0182e0ec6d23675a\n11e489fcd58f0965af4c2f2b891aabd05185de26ba4e0a86b4fce3ba710d9c81\n3a97ecb07ce16ba156e2627048da3a2155ae68a5063f6c2eebc0091711290605\nb540ca4ddd10838e2a64835ba38ecba8043074be230baddd628d8b253734397a\na213b0a9bee70d623dd5411eb58e25855209b3648a42e4681f90d51b13354f28\n267d48d1b8aaec412be2dc199ea3ed041bc3edaace1af401d01e56b5762f7c71\ncadaf26892f3e1f6ab0438a4ba0e3f5ad953fb15a7d821f6444efc966c67082e\n47e1af0e6e0d199189a994239c9716711f9ed82f6fc2fa1f923b4e3aa45e5ad8\nc0dc71bb5481fa6a105b90a77bf4b8b9b852714cdf4fa814e9d0d89d349ba57e\ndce13210f79ceb8733526aff221386f826a435af47f027d81bfd4d263b84f8a2\na807c55d1bada31a59649717a4ed8d560d4f5b81ae7f6943c66e9b2ba9739c3b\n559d49fe652de7c968c64030d91099ceacb9ac69417e8210f64eeb6dbec7ab1e\nfe4a3babea0a42ed49cba2e70a6db7018ea0ff1b2b0af498dc6b5e686eecd7a2\na6b85e07401e08b825457e99d0b5fe48ef13a14fc0ceaea7bd7748b2c7414522\n59ef4ddcd6a12d5e84ad402badb6af6b8d50738250677ac12324e4e3c5d72887\nc3f36f99c04cc898704bada948b431f543765f3112175412fdb80af9850ac5cd\n19b65b018df357498fb4255439913acd686e3edd9a3bed54235ca6a3d93ac968\n6ccc1400b8ecc647ad4fb7334eb768ee32d3213b8a30ac2caae37e99ebd9e903\nb319139533fffa9289c29424a030940ab2b43df031c3f72542e7a8227d56c29c\na3b07551a0be3cc4d406d2b0db792e9e72942777388d1dcb4d48704c64a99434\n885c4f4f170294c7179dd43944d60739ba9412245f2c34699d04f9815db6db1e\nb3835adbf1d8d9cba2da0d217562a25e0adeaa51bd8258b9b49f1ab66fb1e72b\nd0312788da672625511e07ba68cb0eaf05485044acd338305f55c7b67e52af4c\n124e54d8e3bbd2c6ec6080dd3e191416acaef07bfecc0e77acc92236749ecd88\n96577190a9e86b7ee306b613e0b19015af7bd544e26c6a3e98c51d98cbef559b\n29d79e6bc3ff0966663de38b24b2449d38846e6652159ea825303122ffb55333\na108e242a05d015a9abb0089a5b9974cffa5eef0de271c243fd9a4f5ebed3b53\n324de92d22fae131fc7676b747460fdcf199076cb5d922e2098446275946481d\n681674c97c00466e79ed31008c4f83626ac2dda6b0464b589f01082e5ed3d7b3\n1caaff1052012b1da1e37f3c0049623555b7d1525f44c0824a53903b54d4da9c\n083d7acf2717e26be8596a07574661a53c504866959e13dfe3547fb8c5ee9c54\ne4d16952d25f0d32c103c1b2381a3b06ab7a26262f95755e2cef7a028266ffdf\n3687304ec78638f3607e1d4c76af0cea8a30bdb7afd9fed23b79acabfe622c82\n9059c90c5bc732c53d8ae7e55f6385ab5d78e0c4e0b55bb9c5867ff9a498d3d8\ndbe4f0c548de9edc0944f1119bd9a2c33d5d1c8de7c5156bccf7d4e52265464e\n5e58d93fd79f40f0ad593f50bafdad06a77fbb22982b35516497305e78f50471\n746076b77160149dd7a38f2fdd678ddc2a954ed788a19ddac34ba6ecfa9f0ed2\nf7bcb5f97eb077bf90e7c3852ea49b1a64b3a1e618cc83bffeabd15abb82fcd5\n38b644942b6b9741b3eff1409c67632c6a40d77c42ee0846d8edeedf56100f28\nce8a9fb58b4aea6fd3fa0345832062d748ede2877fbe30187b635ae95227a7ae\ne15f86beee2718058ee928c73d0e6f2bfba3c144d5fcabdfdcd499f8b8db426e\n0553781a197bad1798327e3bdd32060bb55c660c24f3ea4e658d4e95f69fd589\ne9b35a2153bd45fde6f56e50a7cbdf803e26103a62824b24ee929b16add5f9d3\n5817264fbd1d0b3171fff576d67bf6aecb15eb25c5bc6024d558725718ea8406\nde77df6446ce372a13fc2d96fa72f65932fc34e7caf2ea065d3c94367070ad57\n84e94fef2858bcaf7c60f999caa4d0a483fcf77bfda5ead04c77b87c69a3bda4\n9e752456a8a91e78c89e72b3d805cddf729c8d13346df0c1150a7e16f37abdf4\n07f8a69b062fa83cc8996e8857d26bb0c09d5a5182cacc745772b78b584cde14\n6f5e78de240c5f6bc995606afd03afb003e0f8f07f4f62478caf38494a162a82\necbcedb9ba0d4f074611e68f0cb7bbfb76bb11615cf4cf26772a57d635613fbb\n9fae0485183a90656c81750e962f35cb61689ec21f11539df17b2662006e2391\nb5d31851ae55c40d408649349ae3500bd52990f1ad042a09d0f31fef1a5c7c89\n5ea1118ea0c1576b630bdba01bc628ceded0ad35e6decc10c02be1a05be5259c\nf318b84f4a0d5eeef0ef8d991e029c55213d73a07306160751c8fa142d010c1b\n9e85dce81b6c4638de70603f7dddf7fc3a80540151b985066926c581d21cda9e\n9a2a0b9f428fca992ef1970a985b3f5fa6e80e5923db4de6ed7898c508852a47\n439a8c50e416c2b75d7b3c8046513d91af6de66ee4b6f26f6b639d492b105b1c\n9049b04aeb7962405871e868f15b6e1a8e8806253672c6eba1d9447c1b453d36\n59860fc02c285f5f2d773f0e76c75d5fb2493a5c26901d9559a9f3550411039c\n129fa2d0fb9f5aa4d6a11f490488a08fb3de699fe868ce02120fa973fa0ae84f\nfb524eb2d7823fe52ed58ebf40ef5c7609b7b8a5e1d47cdb9f624d53d35a40fe\nc7ae7c17bc941a7fe4c9c50777595a97573e3ef83582033e1851577036e02f5a\n65aea4282fe5171269ab39a07939b2a71890ca4043102dfd0afcd8688996a45e\n7b6a858c30e54a6f32fb19bd71adabd584ab82ebb85535e53788081e553fa09a\nd97345c2ff7e6b7dda5093bb78844783002adae6217581860729e94f5455e6bf\n8050a1df07128cfd83f682b4d11696a62d204a7d7be0a43a653d1cb6f58a760e\ncc565ef2e33662ddd7daf376653963f1485cd1c523d9341b1131d527ddc5e166\nf49f08b1bf9344bf9f7551a2688bb258cf46775a6a31a4e38dd1114fe2e44e5b\n3b56d7f3d7f44e3c9f09c6e9e098d425370daf4dc3c638581a3f34336e80e8de\n9016f94e65ef7664a4ffc441c52d073d47da7b90c39aea70ee619b199ef79773\nbbf5ad46ce9dd19afdb335492d31fe45cd69650eac723a9d6d0a3c9c00eea011\ndaae00acdde96c901f111c402703f7b1732e1527aabdab32fe1355348e76081b\n27491e40f472c84e26568e8fe043ae3b0813137b34205d5a005eecd8003b244c\n20e0fd57bdb3755e7bed94304a77ddf69a9c6ad5f286bd2e95e4f4f37b6b6004\nb9f7436171c6a17af1136c05bea345577c488112c7c8cecfe7c57f2601265076\ndc5cbfd0d2e66b8587d92d02ecf628c297f4d08c149fb2efd989e9ad7a41cdea\n03b48ae9853b03768a1528cef605f9d64045b1c1de64a5e0d26ec5af66ff278d\n296f02349a6344767f0b0983530d314a370687f2019ef6c778654c011206e8a7\nc47e5572f904f2946372e8ce442bef2cca4fde1ada3a06580539088c11804c76\ne66c32e076f0e3de041e9c9950dab9d79886a404c081f61d1eb5e0bb4ff05df3\n8412f34b01dac78411e4cd8c6322b956fdce30b66dbaa9e8df62f797e553b83e\ne379d96df6a2b11fa7edb9ea2f1fd8ec4b89b5ddf937bf91d3b574ea667a9847\n5737f2bce293b7f9ed9ae06ec39ca2befe1d4378b707e266ee3363acba05eef4\n7a9d71f8a205bbe81569ff184de2e187735829b17680534888904fe67fdadf4b\n146c1d80f3453840667908b0bd497d22c8ffbfd1400fbd57e140afe219fa8f51\nc8354af1cb982ef423f250eb9e8aebf30166780d631400ec33bd84bf71140403\nf5cd03fe38b27f08167cbe99bcaa3fbca13d734c74148a4321627b672468905e\nc93b528e396a0d2a917ce042d8dfa63eb2575723962063a2487f044c365462fc\n907b42eee612f0fb4e34a3fe9ea1a0f168da2cb89cccc1b5422e81f09bfa175e\n3479915053e90007ad92ab92a2a0644726bf022737f3b7b0ee7579fb7731ac29\ne7e043175277ef22942a9030e0bf91a1e775f9fa3f6d86ea3b72c8ddb42a670c\n68694780e5a7ab25968592d823bdc6e812d19641c1e176e26351ea5355435739\n7f0f92c33c67\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\ncleartomark\n%%EndResource\n/F122_0 /XDVKOU+NimbusRomNo9L-Regu 1 1\n[ /.notdef/.notdef/fi/fl/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright\n  /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash\n  /zero/one/two/three/four/five/six/seven\n  /eight/nine/colon/semicolon/less/equal/greater/question\n  /at/A/B/C/D/E/F/G\n  /H/I/J/K/L/M/N/O\n  /P/Q/R/S/T/U/V/W\n  /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore\n  /quoteleft/a/b/c/d/e/f/g\n  /h/i/j/k/l/m/n/o\n  /p/q/r/s/t/u/v/w\n  /x/y/z/braceleft/bar/braceright/asciitilde/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/bullet/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section\n  /currency/copyright/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl\n  /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet\n  /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown\n  /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent\n  /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron\n  /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef\n  /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef\n  /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef\n  /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef]\npdfMakeFont\n%%BeginResource: font QYKIKI+NimbusMonL-Regu\n%!PS-AdobeFont-1.0: NimbusMonL-Regu 1.05\n%%CreationDate: Wed Dec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development\n% (URW)++,Copyright 1999 by (URW)++ Design & Development\n% See the file COPYING (GNU General Public License) for license conditions.\n% As a special exception, permission is granted to include this font\n% program in a Postscript or PDF file that consists of a document that\n% contains text to be displayed or printed using this font, regardless\n% of the conditions or license applying to the document itself.\n12 dict begin\n/FontInfo 10 dict dup begin\n/version (1.05) readonly def\n/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def\n/Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def\n/FullName (Nimbus Mono L Regular) readonly def\n/FamilyName (Nimbus Mono L) readonly def\n/Weight (Regular) readonly def\n/ItalicAngle 0.0 def\n/isFixedPitch false def\n/UnderlinePosition -100 def\n/UnderlineThickness 50 def\nend readonly def\n/FontName /QYKIKI+NimbusMonL-Regu def\n/PaintType 0 def\n/WMode 0 def\n/FontBBox {-12 -237 650 811} readonly def\n/FontType 1 def\n/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def\n/Encoding StandardEncoding def\ncurrentdict end\ncurrentfile eexec\nd9d66f633b846a989b9974b0179fc6cc445bc2c03103c68570a7b354a4a280ae\n6fbf7f9888e039ab60fcaf852eb4ce3afeb979d5ea70fde44a2ae5c8c0166c27\nbf9665eea11c7d2329c1a211dd26bb372be5822f5ea70d99eb578c7befd44cdf\n045a363056e5e1cc51525ea6fc061dcebb337208eff729802376a2801424f670\n0e7e6397b28f15bc10b40012b0a3eaeb2693e8f7f627c4c9c7c6c5bff105c1e4\n1b2b9e8f09253b61177e95ea219474796072f4b363fe05fa763777e13b518310\nac032eeb94b88c7dc8741fef59c541b57b0441c6888237a2b66a182599d1517f\n9ec474a9539f1632c9a5a1801fd646b529cec2b430f1cd205feff509b4092535\n29e0b7b372145ddf62052c9c08b7673d36dce58e3e78a8e4788b34e36eb543c0\nd68a36e2831e23c440c3e5f1ba2248633aec75ba8d6c9e7fc0da01af08776246\n9a8009a4f3a93241f2f34c72db3361e701c06538a631f6a8cc47b1b5df7cbf9e\n9029d42fad4b90f81cdc2b4cf52c09864f657c7c357180375c0b64206515e472\nc6d71a2c5d03c5143600d0dd439998956b9896ffbcbbb77fc1b6675f1e428390\n144b29367ed224ea9e5f51cb3e349dd118422bda8b6adfe217a02320be72983f\nd6fa232c9289e529552708746c4c76df4ff0c7b27fbca194c650679504c0fcaf\n0c643c945a2563ed47cd8538edd441bfee93dc4160421cd9efe6cb32d81a8e1d\ne1c446eb5ec2a6c855e4449731ed3da1c3ebbc3cfb6553c0f78fe88bea6edb14\na4abb572eaea91681b7e9f6a2a08005164340dc1983f75b8abe75fc02747fc2f\n0c5b31e0f9a8960410d5cc677ea77d0b1b28681ab5e6b3ac11368b1e493f594e\n9d037f4fa4c47ee06351cb471af4c1966aad3e51415d70e57eb0d84ec3a655d2\nb0e3a818baebfcc472b485625414c4e20d63b9673b0a0780d8838b0b4004df79\nda0444405db6a534a7571cb1aaff7d4975ea8a578ac37044cb1395a056c7d9e1\nccd617391a2e852a4d71101cdc3c9350e57657b376cfc7cf7e387414e4a017f9\n943ba9c3aa45e955812e6b8173acbb5e5fd0f0654868def282d134d0b4533159\nc2bf0fb6959689dde7e8e5d22618fe9c8a973a87ac0e853af5542de5b89e7b94\n44ad4496afb696be0eafc9dd7a421856b1c0baf95b5fa887669124ad3698b544\n5e82a4c5cfba4e5083784e52462f3724e7273de6e00e84a1d83b6a8c0e79afcd\n1df167b97e2dd796b6826231d31fd02991e990dcf2dbbb0026f9a151c0720467\ne68e2cc0a5fce825564902efd08e2ce18896ca20df47d2df8928baa632825543\nd0f6a5c94630e63411a6adb264443eb7d0f6c3883d195661ca3a1bbaea7bcb41\nd5c18fee8453579ee23f1785112e31c6dfd8e9ecb8681b248f0ce3d77aef339f\nb455f3817cf7182d1fb0c53589750be5bd6543beb9c341427d0a4107dd5d6ef6\n2197b85088749f3cafa40a6a3223d4ced495d6228b3398fbbd0d4765cad178a6\nf93c5217bd254777c20cbfbd33673c5ba58e2b021580d63c76bf196391815c05\nd05159b171c9034edbd0e861c5a26f2dd38736457fcd38003882a66a4cf8d7b1\ne2803ccfc1c9fc2abda0271c331247360b7f2cee58ad9cef1b325f62dbe2be6c\nbabe23a220f662247df70428c1f79c79684890324e6b7166b269b174b98ec8cf\nf33b589cc3d3daf1aba6835a22aa2f59f8d386610bfe936a05794242e99cddea\n8da5b4e5e56a875c49267e2d48ccae616053235b4b64ae53a573922009e8a05c\na56fe84205488200ac68b62fe4f07572392940638301363c4131ccb86462c242\nafa463e3f7f036f63e622243893261e7ef744ed489397030a6604318da3f592d\n037a620fcdc10da51b8f31c816f91016d38efc65b6d463779720ebe8df03be2d\n0ec52886ef9205fbfc6563ca80accfecb7c686f0212f85da5024129f01bd81b0\nbb90d58eefd17fb353ca143a4757421323238c5653a3bf9f28cabdce6ff9d946\n867a33fc9ffe0adabd3679b555a9ed3c181d3e108f776e13bb39794cb9f4edd7\n7a607e017fe054811b3ea3f5b02c95343a5eb449723c9fe7857441feab37cc93\n70c285d3d91df0a0e1bb21d022f68f0c0c8bfb311b8efd056f47c67b03b45dc9\n0bd78333d366796421469cda8df6f0095a5eee1a56621d055a5b12d6464cceee\n9f5fb6a40ce44ab669786f4f0ff1f348c9d3712761a07eb8aac26c35c694e1cd\n65b01b32a2319a381734864a06a349db71a2fba74ddd58010c94aeec901ddeb5\n41e0205df489d02664b4e2fa03a404c8aeeddd6d1506bfe56e2e8a6d3a83f79f\n35f2d552dfff754bad59df45582e3aa87e6bd45725b2c44260e651b70af70186\n8b168e440bd70014be5c4ff89028997bde67279b107f9fec9b4b2f2dc112d811\n4dae65205429ffb3c9734df32328ede30565ad65d8a1aa620bd543286908d747\nd13cec2a2f19cafbd2ad480206f8b2b39524a2fee286cea20b22b67dde321e3e\n3ed87d8f7d9b253a16c648de1c9c8cd84c4f2304510ee263083ac617954b7c9e\n62f397daee458e60e6058addaa14ea573888162b6777c4b5e80c2fbfc8f75ebb\n2026c01a1ea38b85c4fca949d15b9a470f36e0b697ef5dcee10c45f01230dc48\n728f50abafaa52ec5f2899b09db8b74f46ed55c8efbd3f54f6afb0691a992b15\ne1bfe3b6fcb6764227aabba94c4450183f139da7e12df63878b0aff0d07c51e5\n21a29ab9fa0482e9dcb043cf704f17bdc1fa1f79bac725d6fb01dda18a700eff\n5d691d1573cb0ba677a9b1a62dc483fbbb7e4fb0ee0c87cd631f7145b710d181\n85d5bf85df1cff42d9dda4430a8f6f4b6f6c01d20055d8d9cf1d48f268e046a4\n9bc64bcbd7742d090608a1c025f39d44bad9a05ec2c7b5ea4b48959f1cab0974\n537bdbb8828a830843ecb3b6bac3589cb8a35fddf8a55fe4445ee3419ecb9dc1\n3c9a3045f5fa5264860b6e310854cfec5bf920061c6a4784d911fbd82c6b5353\n72cdc7ff3dba22cbd02303654e4d1ce6c5f03ea5719bb456d1ab804a6a9e08e1\n15d0ddbc46f2ff494f0703fcb9f6c079e5af3f4a7bb5a4546f9ef8d708732fbb\n1bb4d11a942470e0a96d5c83d20343876d89fd6db3ae1fe60034cb97659382b8\n03a4c8ee4a01738285c8af5812c4de7a97b1eae85315c9497c082b28990e232d\n7603a06ade5075fa217ef86ed78492c31ce4082f14a6952e0d07ca9d8e15589e\n7c3f49cfde17055e8695923477b71b4c09986c62875e25576dfc3a3854c1cf5f\n73004b97da00a3deef1be0aec1920342613d3e4f805eda2ac121809b02a42d3f\nde9e9245943a23627ae0c1c34b5e6bb1504ceb67966e9b6f104fddff62e82b16\ncbe3d401aaff4d9b44236ef0d04b7edf16eb08b7d19862effe88b696d05008ae\nffbfd118722a55a1597604e232416c2190b36c30928f82b208006c26b85d7428\n7153fccc92a65f04229c8d7b2c27ac4294034a051b45f6ed5b0fa3e23af3b5a3\n5f996bb65cf298c4e15e98d228a719e1c968e7d5d0a75a9bc3cdf8b5c4a136cd\na6995d94f5dbe307ae1ca6beb56dfd09a6683bb1437fdcd537e43cb1633a72bc\n1e72a5f98497227072d863dee990660c137064f8f73d78d9c5a40096dcff10a9\n4e3c9dff0d2bb80c429e2c135895b2b3c5be663adb1bf39e3125e4017a6050c5\nd4dac24a8149a6166cf87493f766d9706e13a4c3b443722d7ddedf777c5d0bdd\n780e839b10a61dcbb8c06caf2246feccc66c6fbaaaf8270e06a4838391d7ba0a\na3d35b278235fff9a707e8da8344c078d88e8eb2b5e2f8cd8f2134d458221623\n1dd96524af97b92662292f6e1759e004e2255dbdc4e0a9fe007e550144af357a\n32cd32e348fd2e60d4c10c33d032fc02ff8a897c4b4b5c35992e6caa8bc4c966\n6a520e2e98184efcb59e2d534fa34c428bb51998e68e91dc9382e28798845da1\nae9d6e418c2e3b05373fe26901654e1e1a7849431681479cf05e0c19392ac9e0\n562794d94316670bdf9afe2d368fdc31fc2a2a98dc8f23bc236690d897e209b1\nc6048724f4ad378857640140a356919180b348fd6ceeb5da8e4b3f9dae1cda65\nfc155e10b53a271f23c65397711cedf404dc45dcfd9d3c87d57c1365cf9e6f9d\n64a11df0f71f72ff52a8a4c899879f38e797867570844ce904c3104e28f1b85c\ne31f5e4dc09852f5b47b4fcf2b1fb394f4a8c9cc8b807eaa9ad4d8ddd816a28d\n7bdea3811e47722cb0a11f3967bfdc501f5f19f5b7f925455da271243465b55f\n56030748235d6c1e8cda657c5fb7c1ef58427b148713c569d2fa172a2d32e50f\n7440f4cb961d34feff587acfc3009b39005f8ef1b91c28718601d140034b4030\n05dcca93b5d4a0778cfc1a3fbf7e489221c88c27e05652d3c3aacae2cbcd9b5a\n439d3687e32bdaa54a317a6f70833c88af86056dcd68e8546832e7662713ce20\n98e5bd9dcfee48545391246e794e408adbeba57fc3a3ba4e18e487abd6f26a3d\n085eed9bf8e30a77c85271294eff2f8e3def17482c5455dd60fb942f85dc73ec\n9f57db31ce83e7e3574e17004ebe6fd903f485e5ea88c8294ac48ed09afa41d3\n80ea17e2cd33190477a0492a51ba20be31a367e6260d0dbab050cedae7659cf5\na67d94540d7022178ae1d4463f84630d51af81054a6b7ecf1229d9ba0a6773c8\ne3aa1a9d95416fbeea9ed901f1dab166058080d42f90499b415ad8aafd99ac0b\n7220401edb7a32b298bd9b9010679a1f9369a5bbe7cbe04b2c395f1159c2a2fe\nb4a85292714a8f491e29c703932acd583f6405828ca8331612f5f580c049da26\n22a27b7aef2806c427af57147beef345e56a2ad82b0fa3662a31828bab7f6b6a\nabf00d5bdcf2d595ef576d7da2ea634a82458444145803d443560553a7d17313\nb67ce7fa22fe118e9e8187dae14e79860b371c83ae2ae787210a86a6fdcb95d0\nc05f1b2ac98eaf239af2469397fd8afa989eb8ba0c15412b9f90c1555cbef583\n25c0999b1b10ce4345e6e949b375a91ec348eda0b0d418ad25ae482e02cb47d9\nec19b444406d720a45986bdf85b4181b8064872f65e7a93bde15ff80ebe555dd\n8adfc28b6ab58525a6a72bbe50cde6461edd83ac9359c0042709e63ffda54a50\na5a6e72058b498b7c494b2a7e68014bf1c354506c4dda52d7173e6530340f834\n7db62785ac8e70a8f560574249630f3f89c159f31ce437b8a86cac7f5b25ccfd\nb2fc41fc8392430c296146477d501ea752cf52ec9bfbf462d12b39291f49ae74\n28485eec80df5a1fa01806b3013bda44477e671e87e82f58fab32ffc10c111cb\n76e7099f297d6a67a7374e26109f751361768ef8118dca742c8f20774549a2d4\nda72d15706888cec1edbfba70bb8149b54655eba7caaa85529df4bea9ce0c633\n38837abff2597c6b75bd058dfe7091d3719efc3964d1a386b7c6b93d491b02ac\n86b08ff115b548abdb68f67de3b6cd280ee1544ddf344782fe30913a21eadc6e\n314f3ea2ab3d9a3783d5f9be76c4caed815af7def664098cf1a167444f31cf02\nb9229bfdd8109322df0cce8fe0405d523bd8020753f3d80f49365d5006829fed\n63cb9571b219b3869dddfdc2212f0fd468aa3a8c78d06f58fc6be0753bf19eb2\nb014e28d06053e931257185ff8a46b2c443b163f9d9997cd2225a33ec6bef513\n41aeafb9f384bdb7f3c78de5d4adb511c16259b1916b29440fd8cc01dde8ccf4\ne8bf0a4dc53a1e26c020f813cab07eda515e7d395348ecbf8c64186fa5a81390\n7653da3f3143382a374b96398d14bf60fcc5f7603512bed7e8b33e7b20529244\n187795b01754b61d5aaab742be9be4532ddcbe6b88671076aa9551ffd58e4930\n1f3fa48529d85586f1e197dd896f91f0c64ce80bd48519f8c1bf9c4816622cad\nd9cbbb97e7628a64f96b6816c5b0312bb98a23715c3de2a797015203e2787aa5\nef40b3e17cac398805fe76a33819d4825f80654270445ba955779204f5e8fb5f\n418edf66b627b992cd3db5f04b18b5dd3f742689b3182d41760bfe95be97e313\ned97e32ecdc16d3d574a2ba1092408b5ad6c165a39eb148b2513bcdd01141a77\n0720028f31693360e9909897d85bcb5364188d391e34dc98d86d4909fb41a13a\ncd4e43c7f943889aaf1d430714d1b0f3302432135a39b11be63f77d04780a191\ncb686729a89c7badec30d3a9b416c32350eb416fbd37104d038b0252a8b91f77\n45b543618155a76f06274dfcc284bfea8726e55ee8b47df6b4760e22c8f2020c\ne0da1fbba9564cd974075c1670bbbfa32b5b1598d198a1a9b82d87a7814f5d6a\ne5a97d890ae6e9307f3147d78d4fa40f5388b9759429acdb0e20d9ddc923f4cf\nf2865f95a8fc0595724b0043e90091a2315ea8c071ab631ccd04c3ea77541646\nb2fae2bd69c5bb80849b85fcc583ed6bc743c7ab0e83634e9625262ca557911a\n3715e19e727337fd16171908a75e44fd7f6ba76157167a214f11c228bb1f132a\nb6cb965beb1aeb597276e4e1bf52614076a37eb859f9d61669257c195560586b\nb567183114c9895464a71774bae8eb31e9de3c11e0011f85024f749a571a3e2f\n0fa7d8ce0d53deb20fd2f10895bb8aed95ac89f8956a8c93e809536e9087cca8\n09106a42a59417359e0ec681c5905a6024bd3208fed44320b723392e3f900e90\n767a6af4c4e67b407b215422a6f409d59c309d1999f973fd9b3746d983b0bb9e\n1675aa41b9f6713630710faa59328b3659f559a5e547451191d88e336863256e\nd43a577b77f81bad982c3d06cbe5a12321cf45da2d300346d8534c4ed6f449e5\n14ad627693dd361913862aa14548113a553b5558f8da4f5fe5cce86ef8b6efec\n00b188a5fa1ac6cf819110e6feb793411cfac4f900a379178c2d7990f8adfe06\n4d741594d2134678e7f9789fd72e87985334ce7e531f0855525b9dcac36196cd\n2d75d8bbe2b02ad9b20184d54e9ac6bbcfdb0d13367e2b4b4310b9f89172d59c\n385866af42d06f9477dbb56e8d3bc8ee8c129849080ced3d7b83d9dc1a32da0d\nb79f6e1760b7b836e2d9a0b59dc7312a3cd10932fc771d14f0f2278479e7168f\n2f4e058c0177456811b2de2b5358ef33a162bdbd4d908e3332930d0e1bfdcf35\nebaad4210a5f80a39279c5faad2803a748d96651778d0ce97289bb70ba010d93\n60ca05073141c30ee35fb9b8d9eb3ba37cb97fe42fdeef382fd604a1cccbee9a\n65716ccdb777bee502ce3b654612362291ab13fcb507ab797d697f4f32d85763\n39b9cf437eb119eba024e775fe01501a8e7982d266531a5a9316abcbaf5b9672\n8ffdd900cd9814cf82b9ee6e789309cbf1dfc11f715b1a201dda33cf7527da51\ncff0e36d2f4856808b522d5344596058508302f36554419f9654f941ca0804e6\nb38a6d596ca3fd660901d1c3553aa92bcc95703219cdb0cc8bb540c2e60ce0ad\n0eaeab36ac18b3ae477967bf586ddc3a45b5949ca5fad78910e834d8c83faed8\n3cd8b0546efd2575a42e8d4e44c80f375c9d960686e6885a6cd283ad3c1f1a9e\n8e0cd7ed0590ffcad9da423285a26c04960dfbde0a5315d81e5170ae081644b0\n2aee581ab984fc189b5adbfb155a52d9f7ed759091062e9d2b2c2b03c9272ebc\na0101422d252aeba66664b23a123ab5fb05da5c62e83934c10f7a9489fe6a26e\n72ae45fa17dfe3c1badf296c09a375d2451b7b7ed5dfd262a7c74fa4a9a4f5d1\nf431bfd1e79decc99db3f7eddfa78dfc46a47c0881f500f8fdb96aeb4fc4dcaa\nae0f9687e6edb2519ea85fef772477c3e33ddb52900657f018ff227701992647\nc9db8e4802cb0d6976b1cb0e3dccbc573bfb38ecc9db8a95bed9c4d90c97d3b7\n0f87ecba2fc8b03a7088f1eb02875c27cbfa32efbbf38ddfa77ab23c8fb36d1b\nce1112bfc0de7f911f1b096461faf86cc41be0bf61ef31581847b1b478fe28c2\ncf6a34770e43a95e08ba67e429545a65bb9e6e18a6c4dd2a34ca9cfbdba9cfe6\n63826142391f15c543076928f9867bde8b2b1acefe68c777fbcb70707f4f91e4\n7eff73b0c3c26986d1ca582bd05873f4e40179723271d1799dc4fc5e3dd9cf77\n64e41b8aa8dfb907abf53e3a0007a714d6c941114f5beaac82c46927441e3402\n36c2fb70de002ae35627ee5119577ad7fcb9fe5deefc239aa09e6bef15aee873\ndb24b3cd614565415a3077b20c1b095a5726ae475c889cd9341c93d4a1984709\n5ffa8e8ef4f31ea7dcf6375177f319a05e551a8905bb47c9f23cc5c0e5fcd8e0\n29b3072632a060e6891f2b77bc1da20cf7da33173db210baaaf8270e0315b6ff\n3fd6c2207b1a429577d5d9d66a0f8268d4aaeb29681a21f7319ab813e2a1eadc\n39b8eb7aec1c33cc62809a10ef560d2453ed7551f097960efb4e4708858d5729\n6307189fdfd3ab62c75a7c501fada7428e157752fcabfe629902715193acb11f\nca4aff2b0ed13442450e4f2a4873d5cc3689f7d4f7e372326e2f7093bd7df4d0\nca957794a61a2e813e24155ee3a67c4312a06c72f84acba679e67e6c71f43027\ncdf8a21da3bb5f68e576405c1283016e541a3e9eadd67a20ff9ad7a658a8b831\n2f30c18c451f553c1149960156b201304263eff2f2549fef2e4906909c1b4904\nced62fd9c0c973b82dd66044bfcd36e1991e0b6b84b6102258e205a458952aa9\n53832d094e6915c3a1669d4f532132424fc707dce60bf9ee9e06d4035394192d\n922641adf5777d563ae7960c8cd6175dafb255747737b02c40687953c766601e\ncaf56e747afdc67f8163de81bec4dbd48b3712c0d24e92747d98d5d1da952de3\neb9ccb3a132121cb1c9b2de42fe1417bea313043b5aec119bb0d1e3058a82087\nbea4d00203fefed8ac113723b1081e92ca7e91363b86eec7bb5dc2e123e41c66\n577dce271c93c667cd8665372d5d3b906070bd229489a91867551f3127591bca\nb1ce86d7d9bbd5f265bebdca4c58af03023e9ba2c291d78b629ef48bdd731c45\n591edf98d4eae6290a00c331780943d1c6671ac237a2844cbb84082c06d39cd6\nb04a2e5819d27a25da749ee7c94488fff5f59eb0a3789522ea85eb999c66f359\nd1ecc77cfe14774fd76b97270e30e95bec696aef56f99123db82304bc662d8d4\n6b342e53171a512e7d435f3009de3613d91a6f32f9ec2e11bc98b09c4dc4d516\n8a2ed64ac351109e5e38a68caac84ab583421eafafee02980bf8d8fc700f1a00\n129564d5efcd4f7896130e76fbcc6c6ad66411285958e3d17c2d408960cecab4\n02c5068c43df99d4de6b9876ec4fa2128d9ddcb0f10aa89aa8935f22c9445804\n4c1b0ce6cd07c272cfaddab0719ef5cc8c597960b7eea7b4cb5a10c826bed1b8\n219d464d72a0be58ae80de6edf876c04dd2abdca41253efcefc0552989dea491\n9605795e6ecbac4ffbc39307ce1fc794d4bd78b64ae38b2750546b8613378f70\n7c5c29640874f1bc3549f9a381ec1d13ab38b1c20d59f90dbd2397a573ffc9df\n525a4d4e995618a58148687c5c949e14c0879316236284a571a5a386fc94cb2c\nc5f7327f9269996e2483e9c4f22a813db3ba38cd036a454d335497f53d654d6f\ne28e4583febc2fe34cac50be37bb6e42b8f92f694cfd4f805c6423089bba4461\n8e36e92d90a06f749d8a1dfd93bd0645dc66cd18ee797ffc06d4938ed9fe7959\nee2ee5daac4e5f2e15a8b4c311eff43f5ea1a13fb288ac57267b71bd0ae02964\nf1901a7b5005a834e366399eae62532648625bbc13c64c006c372491878ef7fc\n645667f249fc7ba564e152012e485320fb3c5dffbfcd936a93916045e0ddf257\n992e927120370994664643e2d57678fb19f0754ec4c483a8b6ceae60d39703d9\nf309e68388cf20bc752caee575c86ba39575a07528b65400cbe9fdae6a5f307a\nb199a54aaf70c5889bc64a30d5cce65c2276ed1d9fb30bcdc94a65941a2b0e76\n3940f7d243c8de8120b5b2f2995d2ec3c7be6421aa1f7a5f8b6050c17771c5f9\nd61330fb818df90f3062f9f21c23fd0a59d6ad28e023e0d3d7eb4dfbcf0c6bc9\n9fdfb74f740579c8460fa6755dfc800c5327da99e494d9e18efc6752f1e6eb31\n5e399606ddfe98339d085bf92634d2f557d2a07db440f45fc2e60732c51fc4c3\n047f9f6dfaccaea71a9b14ae1e22223987cfc33856fa6d78be0c8b4cfbd8d608\n96c0699ff248a80af31d111d3d7437427688430782e1e99858a2379852ca04de\nbf7d0922b11865b5771d902dae865c3ff7aba28da86ce91a6c031a647b6d5676\n672480a7ea057dd805ade4318482e9f5c7e2592df1672342b98c8b67cf25dda2\nf69d55e28f1c35b070acca2e4c5100c18b102164f534b151375bf8e9ec27cd8e\ne43a7a23cca2c5462ea92b202d9eaae4da36f8df69c38a4689b04ba3e6e6a2a7\n8b06763decd52595b21d5348e3f6fbfa775f8b88330a4f35bc3213a5ba19d277\n4fa8c256d06787e6aced43124b422d3ed2ca884c64da93933135926880b21cac\n35e222c4b6076bb2b391357e0c643f04d209788fc140c7303c90a3c3faf5fccc\n046d3b268154e017f1e4082819de8a5bef0c1725f008b936a243b2eb850d0900\n4560651003c30ae5fd462d8e68e4ae51d17b636bf9d45c7fe07255e470d2748e\nf9720203181e528304f71c1fa2fdde7872ccfe55bb77c8a04b529cc5ff114c64\n544c4896f091965dafaa0eef5e8671d258f4303512567dfe2eacc764f0ab9a78\n206ddb0942d1dc868d52241185e7c830c57f31ca9c08453c6a8f35bfd7220a52\n3e3148beb6fca0c2d56048b7755f068220d59d4fc713056bde03b1146e8e4b37\ncb5cb8a90858920236e561fa21f179c12f7be7cb63eba15759bf0b6299ef3835\nb8d41edd37c1f1098fa2bf3cbbfe0f7a98620e7b072f5ce1c90bdb8d5f6fa9e7\n8629f3c6b4bfb047c9ac1869daf234e4a95bc0bb73f036de76595dcfa2d5e856\n22b48bec72edc8a798ae673dd434b01e89019a908f59089c9789f58b8350a43d\nb00ca1fe192390daa4e85e7235492ce567dc403ae5fe8f0761274973e07ec119\n1b0ae1cb7f6f31076771d896139920861da5c58d3403a416f243f1b58cf54e94\nf3dbc9351633887e8d7ea6f88fc4a0dc6d2a471a78f98ebdc2a98613499a80fe\nb166a4b803b7b4ed05ccabefb2405745f1ff28921a05a0245bfae09355910031\n180305de2f64f071a7abb75a72eff13539eecbc4cf54ff0bc87f6d72d8a742cf\n5073aaf7942a137ab2f273e22391ad1d0dec9dafd58ec68553be5fc4e6c4936f\na3e67a86f4ec045cf294a1cb7f9a60ebe5178026fda700042cf5bfadac3d7ad3\n17f9bfb62ebd5946992569e9aedbdce9f3abfaecd6d8fee82559f0888d48f794\n697c54b805026ceb1d708751d88af0e5cf88332068833ceeb24223f5b5025384\n066f67ce49e586ebc4249bfb15074cb522c3626bf2571af43f0164b044b5aa66\n9d8217230edeae2453fe02f018bf8a8043cfd63d744388c12cc8430ca4157c81\ne7018b963021ef43aeb42f1f5246eedde76ad7507e65225430f2ed40877214ad\n78a2e199f951e52790e30ca09c0ea8bb318756137639532e638661228e314364\n1b1d60aefb5222a3b724674ab6fbbc3445b878f99b629de47e52e36693dc4060\n9fcb048910f3d70211659cdbce05f0733af96afad264d1841b2fe33f3df5262a\n92e98f7a5873f70b931a7c78863dbaacfde460906281d5ba5accd188edb2924a\nbfc1c6313cf0cd29ac91d2d374734280adb1ec4b2dac9b53da1134b7ef26d10e\ne05685ea4b31e5396c4281ba371b59b12516816675ef303fe4f01f1f84de922d\n69edc0d18568c06d4dc79be0b9754b8f88632fc3a74fa418833aa2943c05c912\nb7b60343a7dc7a3f6f1aea9d83011afcc00619ca95cd8f97ea85176570bcb441\ne9b74ce8b100efa22290b3dc8113db1b383ec98f8367eca2844bf1742d752d29\n7cca604ed822c3f7b560300b39afe9fc8d9340735a718b09064157fd10d43dbf\n96302c60195fa1d5bde0c68c4f235184898d0381849a6011239ed7d6c47814e0\na163b82e56389248e7594fb9f4a2522ccea4eca0d36e1295b3ef67aead84cc8b\nc297009eb5d21eaad7ab4176a443acadee13915c5ca44ff41ccc2bb9abb47fd9\n6461ec3d38876df77e5fa9993a300c39813f788e17320de56592806658b42a04\ndbcdaf7bd0684f445884e6f1a574467e52019ee8fc129ff3fe74fb03a5d67047\n80155de767defb2964317f6d058d5b8cc35324368469291ebb15cd320d566b96\nc5079d12493a8f84dda5005f8f3fd7038c40d1e704b4faade3ccbbdc7e90903d\nfd3da3bfeb37ba41db2557640f2bbd6f3f49d9e37925007cb97f98c6e365d06d\n282a433e1aa95dbef41be2facde3f5a08254a366a74b7a2f5c14898881d4be99\naec4b0ee10022dcc55501637ef6f6570d437dc8120e63045002d7419057e5c15\n6a5539ebefa7d632d343a41df8804a6f855eaa3186b3f97fb7f79fe1377f5472\n04e186f1a97011fb950ecfbdeec1ff992b1ebc6837afbc0d9362c1712b114bb4\n4747c291759e7fee3f81b000f9ce65feaed5c16287f5e812f152ec27815bc6aa\n35aaa245c882c9176baabcbb81548b5f271c42169287da48a7c6140af35f09a6\nb82abdc84b8220577cbf0ecf0d8edfd303f468ab9d6a2b89d806b3e19297eb13\needade8e405ae9e0e9412525f95e6a7716948fa2ac037dce19d67a156c5b813c\n0af189b9b778bbfdf730c2050091018865e23d6cff0ea4fc0d26a0cc510ddf5f\n456f6aa4f1c33fe7b40f5f8576b477970d6487275389ce7b2444f09e3fa5c426\n9090dc59354fba985544a261230fb1758bac67e142c4a1e71664d7f66eafd525\n22b83d1f2cbb5f97f04924e8cc4645b27331eae812266982efccbccc4ee93bed\ne1e0ae7e88768e690cfaa0abba98973caff66daa632834527b26260e0a4b1655\n3994bdc9c729f2d45f72ba1c510a000b731ac3d9191e1faa5c9cbb7b94056d90\nf65df04c47abd4bc12b9ba0c1f84e4d77081d773a9dd939ba4c4b32785bbb337\nab4df32d20ce0df7ef0374dcbf88be107e8813b5a769d530cded5649ec7de7de\n0f7f373f006ce997b6f7bef0c52d49b8a62a620a37069ee851e7d23244f6a014\n4d50911d347551a63f9ea59cfe0159797af521c09bdf75e12a4a8e4c38ede4c4\n4e7a9712340d42110b7cbf4061ba2f2a5ddcf67a39eef57345975a9198fb8573\nf34b9a350845815873e4ddb7866c702ba7193fb92d21bb74d8bb4c49f2f3c7fc\n3b703bcee9e7745fa637a9383786fc2729c73c29d2efa5ea274d9573265df506\nc1ddb510c9f3fdcd3a80c0ab90748651537efa2d8e0bf374472b5c7bb50b0101\n7263ffae7f90a979c3e5f3cd8a5cea478627890536251c4c16c0f63c1c822efa\n66a75e01a68758fd97c5928bb2b1df6f2b74d2950015f2eacca793e7888c26ee\n723e78f3cd926b1979bdf422bc83b4b51d1a0ae3ce120540e9b653728d769265\nc03c0a3cbee6240c0de90646e7ab730e5e0cf1124566bc16ec17989c1052f8e1\n84590223348e5b4510204322929d8632c4bd136c89169d45718a88babd7f2cda\n62afba21cc46bb3207676b96695d911fb99bbf37b375ff4fb8be949fcc4b0481\n3776a3451fe65a47d623565160358c977d4bebce7aadea5648814b8769dfbaee\nb8bc2da767da69b10daaff6a50b6a7006ab74f8bd0ec64e5681199b7f3bafeb9\nbd0ebd1a79554e8cf3e5896956d279d4d27202a4667afbc46b84c6b9873e8ef6\n9d5b0777a750a5c8ce86f3d5851cf3203e8b47edaabcc6c6256872f31ff228d5\n7b686b38b35d5dca23c755a5ab9e661630e61d1d376a46466b1f0100f66affcb\nfd1d6befb5b196143998848e48119456d6f5791bf1473a2cacb9973bb80421fa\n781d90e0c1e6912dcff9ff07ebe821aaff09597bdea4e71e72136c4e37946f0c\n146b9d507ee79dc7a715cf4d65db2614cd87c5709112938acf9bb2e01187fc03\n5cea0fd5c2ca980adb6bbf5b9eb427971bed47970a13775be150a7a87bb2b8df\na92f8c86b98a36ab956ece9f5c562071306642d74f177ea0ebc1eadf96cda6ee\n4c53703763505ff273c296a11adf59c4919f63c78f9b7c2fa998f5befc631ab5\n4dfec01d96fbd7d076357fd85f26eef6c10aaf99a7639c5111b3a13bd144bdfa\ndaf1fa9633b69feb2590a878ce4621251a2b860b3e1ad8d7a6ac1a896380f206\n158dbd525bde081e9e7c58f7aba0ba68a22065d3fb7638ab4b2027cfdf4dd926\n0f624b197d19691e1219f705d63781d6eac4ed8bddc3cbe2e7c735f73aabbfa8\n01081532536832bb4455483b827fa9f37d547a4d2cfc98707e5a4efe77037671\nfaafb5489b64ea22fa51f2df96a89e8f986b3fa39e113be69438f1a4bb1b5d1f\n33ed7ca77228938a98bf47fa54eeb2da8d81ecedec102f71c278d824c2bf5bb5\n37cde6342b1ac156946de7f6c4c12e1d639d83cbe78d8775cce11584a4edbcf4\n59c05abd0b590172401b83fe9cd49b347c01671277ea43400b1ff4212b3d02fa\ncc6d384f815d7fdb652ab34d7bacca2e9b2b120de79e3532f81d778b6081d631\n32c88f10184f07abe8830a3f5efe712e7e3cac875f3b157ca3a0dd8a0417d512\n9554ac58171e09ae6ad91f69d3235be00c67d41e00b6988b7df3a07e5d65538b\n6f600988178e4c98db360c5ded8f7f8b7866e6d3168a085ca9a823a347519ab3\n5f4fb80774aa4bcee175c02cbe39ea9a0ca56044f50ffb2fd637f925339d30ba\n8f4f7fd7ea5a606dfd7b82ba69b4724c960a5cb49ad40f1900a0969cd912957f\n345c08603ed7e8292789984bcfafc504dcfc19eadb79ee198dcb6539164db7bd\n4d210c9bde5bfe4207c363af21967146511d70f7a0fd682afb045cf22a37bfaa\nedf500dc18251dd086a8d2a91ceb979d2a1e9cb45a6b59afedf66174b764dfc1\n1048356c96b585d142f943ec97c62de95f9b8a8253ee0d6b2b0153c445563826\n787921b9a60417cd4075922332dfd82be6d45b581b581c24c4548ac5782f726b\n0bf70d2d08493e9a96668054bccea2db3f66cfa6a4d37b36418f9fc8d8058c9f\ne713810483a5e75b3f61cfc012dae494dfc2b717cc59e417e25e8c0e21f62186\nacab4158cdf47343ad8b73dc8e43dc792dd29897d8aa1fbb977e9a3dd20fd247\nd0ceb53d2fcc627179dabb49f2920cf8a1fa4d57f39da7e5ca0a94d377cbb20e\n2c98445881201bebff5e33ce17d8089f552c3dea96bc70b99cdad2289a3686dc\nb5aea099076ae9450c3aa43f18a3d98d711e43835c31f566866ca556b2945738\nf359ef7e7ade8e1f56bfbb0317fc2d08846163cf343c919adbe19686ab94f7b0\n7a06f3d97d5545df781e11a06b06b175fbdd1316580a66af1d94f4247f158c59\nd8e1fee6ecb6ad565e772fdcfead3898a5be123f2d0303ddda02b8e86c7baeea\n70eca3cbd43509a85b853eb3286deae9e29921782ed417b13cf1e6775921b2dc\nff5b2424f98bf14408d446d0ab530d88f49d231315c6739ccd0cc8d01cfdc259\nf47bedfe7a53dd893cd5be51674e6ba162e1a8aeb2b21ad54819bd3d648318e5\n4d651933c280e81a327934ef0eebb83b795b3b384a129c16536bdb05bb2ea560\n72241eeb5f35e10fa050fc0f05fe4deb3e2e8eb52a97450c56594746d0278802\n9559abdc108ddd3431c2cea2da1886ebc7a973ef73038004fa13752c80a35ee2\n8e5772676df858dc9ff0d05c735576262b80e3e49751d78f2febd65ae4c1d0d7\n66cb53656583299d2c058bc94f272d398f72728e72368362a69f69af06a708f7\nceac24a0846496457635fdfae466621eb4e0755230abb71bb5abe293abf7cc5f\n8ea2fc15c66a5b2fc6a6d510a6730d9fb678a485616374f5c1c01b2ce834add5\n6f8dba31a95983c97af9e9ec5b8406fc67dc045c551ddf6131834edd18f79d55\n983aec1d18d5fb2209e87f1157df947772de42d04da8085d3691dc7010505c0f\na9724190d9a82611cf435b360971bdcd2e569629d98d439da052bda080ce1e33\nbfa5ebd35ef2e7dd77bd517f1cae2250b13a031c69bfe0d147919c53ad773024\n142ecb1a3ba1ab50a941fb54e63ef49edf844306f7e5d12c9090d2819dc6e450\n42936015482c7bd75693e910eaae10f04385f624083d00276d0499cf9891cecc\nd31b06128a7afa49154eed960f37e7fc260e1372f1d4559062471db4f0db6faf\nefd3e6e06b578e2ba8ffa1e9c3f5a787124a22e0111ae960bd85fb1d62b6ca5c\nb2b3a87e3081470706237fcf936e37dc5b408d0c41299f921d810e01b5052751\ncfcc27024185194c147fe01bc1c4409c520b3e3a5c0f5514aea4cc899ca9e9ff\n7834dfe5bb0b4b0b019c1e8163f294fb6ee50b05fec276b53f04160fce3defca\n2c33ff34f6b1515705ecaba0aebd40a99fba99942bd8d451e1c1e489655daf7d\n39437b97be715b11ff28fb291b972b143da98f5c66b2d02a47850765017bf4e9\n82e2bb732dc64b51fd4fdd3d8144d1231548dcc29bb9927280492da505dfe82a\ndd17fb67b02ef0804bc82339d60dcc1c0f8789074747a805a7250f494dd1e9b9\n173110c4b3f2154e865371295ebad4e321f15826b3d3e61a400bdcd15ead2adc\n2a5f00bc25e36413e46e195eab01069a35f34fe5c00f46b90d2e444c8d5e8a53\nbfaf1fa61745cec24611b2854a7ee8532b54b40ad523f955a4fa2a9c546dea87\ne6d9e2de21fc4b3b2da747fb3075a641b29f6d6cfc3ecd725f26972e31594686\n111bfe80caba23be92b04171b738c1709bad40060fb0b603d3a2ed6e7d49daa2\n627ea6916d3fc19815fbd0fcbe5d1ec8a8c7a6a7488b465973d3c1991664bf71\n003353d2b025d571348227ec1700407e16fc5bda2cae07dbe55bcd7dd0207219\nf4e61479f22c8b7aaa0ec7281e933379b5d25a6ad9ce46a1c67a488cbb315f2c\n08fece286194bb86c66bfcda0fbc668b8b84c2af3e9cc85d065e17f55863529c\nd1668f07dcd6e51caca4eca02811c1ffb9a4eaea01a41e8bbb12b1d23cdd10a4\n97d1a6b9ad43927837f9b12b9f703d414070ee06729c1e0f78d5f63629739f5d\n95cbfaa9a695db4862149ee51c566b8f94f79ef9a3de87c0ebfd3bcdf4940bfb\n314e1bcd17595f3d041b65e4e7765b60a192c4ed917b8361ba0b5fb4fce8f49c\nb09412a1ae8f99d878a8fbdd375de3631a63119042e11e6d742f909fcd775784\n1f5a40a168b4da3dddc65d947ad0950a1a275fc72a923422db5fda3d54e4ed03\na1ae04ab0f59134abf88aa65d6944affa2bd46ed8c5596062e4d32536d2c8ffd\ne5cee1bf927d1affbf9dd4e214ef0f323a9f48af8ce0ef87e858edac7a6cbc3f\n9ee530f7609cf023032a19298b334306ab3f5ed123b7652aaf77ef421dfa4ea2\ne1dbc68390082b50940aef52f583767e8a5d9eb33142f9883ec9dd26a4c0a446\n31e1b1e55031a9defc48060e783c7a56426e4f690aa6cd006c5a9fa76310d351\n9f8ba5c79c301bb370d30c7b3adcab60adb70e4b4cb9b9dbeac8bb08f07aba62\n3fa6c7805a38a4cf9c5b7f2ddd6dd510b174f7c63b2d5f4e391005bacb81b7e8\n5249518ce22a99e8811376e7a464e22fbdc4574ab3684b416dab3526b3bd0c75\n0acea306c0d448fc4942d2c61d44566f8a058ab93651eb319affdd9ecf2655c1\nd00500943b59360b6c75b780beaa2f1b98165ce2ea6a64aa9435ad5b4d57a089\n0fb6274b5f137ff957e2dc801dfcc8f778fec72a96b31e7457f421399dbd9dfa\nc99e611405a24bdf0bdce785d6ade5a5c09ffb66f787bcc2ca4b7e0f5dad5453\nb3d87e5ba383065143952a9364df8cf4063b2f7b3ab30c263e5b92ec64c43c30\n502894c1b01fee36aac472a6e2adbb9b74129074e25e4cfa3c70e8ac2b3d645c\n8f54f45ba3ed89629cb4f2f35c418ef74a194c496c4b2518429067932d57bc0f\n7569bf4fcac26e621327db71e19eeb5335d8a6f25c99d6aea57bc6ca73238c6f\nea54a43c09c65c83d5319231adc05299a668372a9f77833064c460b312fd39e7\n49426fa209cb1f5d3d90c043603c8f997470de5cded5bef35daf0145f5dca5da\n50de2bb8b678e6f36c53643aa97f3fb0bfb3191ef20abf0022d160732455237d\n45d23239e4700ca5d7b71231d537bd032c3f2e7fee61b5e32caafd5de34b2a31\n9a4745e6e94da94286497233f66637586af51856552b0430710606bb3aefe457\nacaae21b8cdcd140b2bc4ff16705fcc80d04e0bd9b6a3207d933388b624893fc\n349fce3e420690841637e1ce83247d5de15a109350c60944853a42fc3adabeeb\n69e78bb11a5143fd2c465be7f72c9478a96883d1369414bcbc5b20bb60457eb5\n22e748594f23e082c29689369e48e01187efc53b3637218a36813cc4da7faa36\n9e29596f5de513074eb3a364b82e1af8a0cdcc513ec66d60f1173dd50937ee3f\ndc888950c9a6b86ceebd3bf64b6319eee63db2199b824dc84e53553442b80e6a\n6f29d9ed68d767c3d1ae78037e2c7835800e08a67c5be8f57571a71426c25e30\na80439f9976ba351cc64a15249905b04742ab07e98b867d4985444e7a9096346\n8f70bfe63fe94f0a4f23257703e8793d059ffdc798ef3cf642a870aa311abca2\nc2a19fcbe68054c2bc94e2d030e8bede94db3c839e3d85302c297369903b9c9a\nfc45596809d3c3f2be2c287d8b49273640d1dde3c7a4000616cb0821a01ee775\ne7e1b96c796acb7764ce16478e2c98547840df255eb133fe407b5081d808f368\nc575cc039dfd5fcc9e332e629e8565cf227079d25627dcd5e4d6a0710b486b00\n7189b9cc441a094d4be628d1990b63cbc5cb7fa127f49bd2b5ac659115bbb018\ndfb667d4154218d907abe558d4fa3ea3c753aef0e05b94772e6ddba0b88961ce\n49d8d6f1d85930efde0fbd9dfa0682c5a8adb81d8d0be2fcd209238765af1977\ndcb18c4f80bbafa42b4cccb09f9da4db574398d30754f0c2870f0ff1d628dd4c\nb57e3791ffd27ee4a9793f3ee5e105a917cbf9b6dc9fb7a32c752519b8334b71\n8fbdd41eb77d5e6c5438c6cb200559b914cb5b562cb914d777f889dc0af180a0\n3d2c2036358f8a105ec2a6f6313155cb96c5d792e2dd3c2fec6c56084f295047\nc1ef4ce1317930046ee382913d7df30626801fc5f6d1501fa31e643345128e7c\n1f9dbd43ba580ef2bffd9af99a7a325a4e39f02f4ff5d372fd1ad895c3741914\nb1b944da9fefbe268e9a4763767718dae9d44728591c4e60845231f31ee5e929\n30f7c26c3235548323c5d14c3d7bc73033940071739c215441a9e72f2ff242f5\n5c65173ef32f00001340a53936c3f926a54e0818aa8cb28dd6fe9fd1c62ea09e\n141fd00782dc1203b43dadebeb2104286082a14af250bf64ec9bc75371a9542a\n2d27f971d3ff426371bfaae72a51d2aba44e859625120ccdfb350ba1c7f31413\n4669405f69b8515e23b0e305f3cfb9b0f29b410d26062bc8a1930ca753184e1e\ndc97b40c9769450780c4a742ece35d726475e7d5ca91700e23cd325c7853b6c2\nb9b439ea12ea4576d7267e7e19baa00665f42d0cd312715e3b92493bb6a3a6db\n54afd1f4c5e7f7bb20be232591b37778de18eecb0d6cfd30d247240b777501c8\n82b269a8959952836bf7d26713019f7677937a97354fd1106f6ee6d09f6c75d0\n296b22831ecac76882f68bb9434dfeef9d18f0d5b8ff6615dcafb348ec7a9866\n6fd749afbcf651be1ed1ca671a6013ce0c183f1ea86566dc9159cd9383b9e5ea\n9900ae6c384ce3409aa4db1603fdc010083db0f0ee139b27c6090b8135799e8b\n420f8f7b10e7334d53df7a0b1581485bc449776ca4b2678a490f9d0ec5207514\nde7bf64d8cf9711cbaef78b6b599d518d77b4544434b8cd95d04149e1b546204\n32b266a48da343d0704d10661485e4c11d4fd05fb727ab2db4975482edbc7c42\nb9b3af2806828da2173a304f83b9cff0ac4c5d4f553fe7276caec477bef48321\nba153884a05e23002239cef2f5c95d8f6e99dc9554ea767409ce0108e73b76a4\n273aa49f123dfd32d27fb45f80622c7f61bc3242b8e00e6f50ea21d0b2c35f0f\n10308818835feeb760d0ae64c755aae98e40eacb8f0ce744c8aa6d6b5c1d256a\n0a476118f5f2d1de2bf12a0dfa68ca2a2e99f5cc0fb1aeb3e56cd8ee3221dd3d\n5ad1fd57901727acb63a9aac3aef6c753f57e34aec57d0876b442066c2e324cf\nb6637243db0a9cb9d2fe8e82e0dd2d513ad2b33f99bdf99b5c551cc0114da38e\n392ac1ba0d3f536963f6e078a6a123f973395ae4846dbd335e30af20c3c23134\n91e2bc5987f44b6d377af7c5242e4f9ffb43517017dc7340f54460977dd8f8b5\nd1461c6707040c47de84d198d4164ddd7e7715a70abd458507fb336b824ba24c\nac0e6901295372b2863c119d0ee2fab224f7c0b56af33c8b82436ba9303cc0ee\n3a809129e3c15b8c7a45538ec88fd1597406f696adc7ecdce383d3715325bcec\n7563f1f4baaad70af9d24dbe272710dbff77d95c3462aec9e75a1e24e9f0f716\n2f82f1410d4b77344983fcae866279a98112d6718ff23da33bf16255c1b10736\ne8f98e8ef876d73ab139009bda89836d18dd03dfb13e332c50227032ff403ec7\n26dc8fa78d77aaef79bee7e0656275fbb6cc6aba6bec4920167380a1b07f8ede\n5fa970f56f530ea2cb06be96def3b5327ff0f35d2d2152d23d712013bfb47b1f\ne34f9339712f75c84d90df05f9ba2e8ab689f7804c588e5e075942b6dd11d875\nc56c016d18f48d569ff5ddcf4e323fd9fe03d5c702da6b98776601e925c73ff1\n7943756f5a4867c8d9c3f0a23280e873a891a6371c258e1cca3c4dd8be44e16c\n267512e5fcf49a6db090e47da0f7a2f56804992df1c5387639b67aea74912727\n2d54a49823165ad330dd59020f1351f22d2172d018383555b8bd88bd50d5f715\n0839576ac6b14c3d651b54411167189c9b93f44e1783880a4c1b31f671988e19\nbe05d3e519b72857420d6053ee7e459e98b31ee77dbe9242fb65d39e7065b67d\n4c4b6619bb0a8bf1f860b98111710a61e2038d8ecf06c4f825322a66d327a631\n0bc1e8941fc36ff52d7286dfa8d2c38b76864f062457c198ee7335602cd975ec\n1958a3930918b4959aeee256b98e0bbba1c370c9ea62913e9ef33ec799bcccea\nde68997283d202476f1f065861c7d611478ffca395677e4152bc82e9686bc4fa\na82c0cc2a7e8b025eabf0fdc11e0564eab69bcdd8c4a05e5c249164c117ba859\n3b0d1c7293455320b0dd104b95afbfde7a03c0ec5b25f9d9ac6accc4de9ce736\neab4c6726b23a116ff885b29258a57981be31f03ea5c5bf6db8c9ba21b831f37\n41c32223133c36127a0b3ea1d378a31002722f439564eaa70bf9c6465c3a7d03\nda8deaf66b1534bf11654562b6f4ee776d5fd7f3d288b51bb1e78808d261120b\nb367cab8ac4ad2e910abe6bd80f9d421127cacdd282116a4bd376ff6999746f1\n4202272291588b6acc250700f32398d7ca3229bdad1e2244fa8d5a93af30fd0b\n98f114afb0e4f4f917aa0935f735ec4d5d3293ba3c9d70af980d3fc9b9ba6db0\nec2d4038a4c9872775c3ff227583bf4a0bb3baa3a14fa3757b01c461b2f6b1c9\n4e549e58ea596670aa747ee95f8b881391593f409cf52daeed278831aaede2f4\nb7dc53a8ea279127c7ac74bd500f97c86a513e546e05b343a3d590b7081df88a\n3acc4d21a3c8bb060bd4ac8cf01971a8ba33d1e7828a5e64453028be2731bb48\ndec51bd85a6114c8dbb2f6ee87ed07af749318c90fb75a672b2b9c656c0b760c\nee4c6c462f9d6fae1d26469b37a043720fc710031abe62cf4deb987749340f27\n43a142310687a8b5822724b7b0657e7b291e803d14d2eee8b795b432a983f54e\n53b17161d32c7a2d937fc8151c37866d3e25469c346b59c13930312fbbed651b\n3019b9f09ef2c2a217780eebe098bb92f43e86c1062e161110d23b17b9b92682\ne32feb15891454b1c6201c375d58c4f66bb0a322fa8cdcdb2ad5556a9b6f0eea\n2b3066c1c89a44adf94a7ee1cf4e15d51ae4c17052ac66df51d27e2b1cc36871\n14867d0fc33ea44338e9823c1016ee6263b1bf8365b900d2acdf2dc41b53429c\nb64e9e89bf148370f62822b51bc4faf675fac2c9cf47a29f34f37628a471c4e3\n6daa47bc0b23ea7c1933d849ed2cec6eecc3ca56cc93a14a4258ce5148c0dc0c\nf4f236316363140a32b91a4a7d78f7bd49e9e138b037621e52dd5e8e30062fb4\n1c537aac83e2e85b2e57cb43102568966d75c37fedd7799108a24de96670fd6a\n4e5d9b9b778b6d25d0030070ba7329e482c82696e65df223e0579823f0db7323\ne7ff8a4bbe8ed37afde9a15deb7fc8521a1179e9197e2d3e6640e591c50606e9\n11815ea278b0809d5b7ed1dac77d333638b027e340fb624e9f1d6fdc40ad7cf5\nbc8b03e4cae755be841a9c72c86930024006b17f89f9d4ee22bef17b5baf4cd1\n364f889aecf94c1cce61909dd22f6d35a389136125d44a6b4c27efac337d8e46\n6d657a804eefea97ad0b436468e088a93764365d2481aa2d5e79ab437ecde035\n43f6023c3b75a1eb4c5b1685bf0eb3b9e3944a78c9aa0d410d20f7e366670095\n8f17d09d8b713ba121c46774ce83b09ce675193b845ace5496ed1ed96bd0f1bf\n505353ed69f2aab2eef00169531e57f8ae498ec78d5d01aa45f4d7e2c96c486b\ne14a1b21a1b61f6e73c970630692e385184d32c08036af05fe240976397d06e1\n18892245ebace16be7ad3445945b9edfd4794f190bc4bdd159813aba09f80544\n58a0c5d5b5624fe081c09dcf2b1707890dbc43def71d3222f8f853a5d169fdaa\n95a33d1667b9e9bd7bf5883cdab58f17708bed530ebf7eee4acb2c9bae6b8337\nf1b4cb61b37c32cc0b3e390fdf35df5bb198a2d704ffbee24e27c4c1248f3f85\n606de45396611b4ba6ddbe1e9434e7e48273365ec73dd8df8aa378822e6f1f6f\n8f35454c47ac054c77d62fddaa17b41f60997bb9f1ba5b700e7f840f1cbad1cd\ne2305a92564e0f4c88bc4f3ccc6ee1175af3b2f83cbc57fcf10f0e63e7f635e7\n1e428064be1542f59407f2a18f70adb7d0eeff6baf6ed415d7a2a0237d17a726\ne84344dd77c48b43f47451142ae90d22b0e90e993715c55d0be8c808944f24d7\nd3b167f8f6f6469aba9fba2bde048298e85784ade8d96fe228ae328a0c8532b8\n1d97be36095fb1a3930417db8c50713f86e647113b607c7c93bfb424316e1aa4\n4f8543880efeb8b9be6fc7b978a4acaae9782a2721757f32173cc39142103963\n9da323208310b292114a62ff42e3cc0c986f709f986e07b9364634fad4a3be7a\n8a63cb7b26036eb8515b8ae6af058874ca36054c184f2626ec2683bf21304e1b\n5fde01772a0895de5ae8caa031125b614a83b949bf40681252218b10f5d4ec6c\n21e8190dafab34551a3b8712b13d195ad6c934cf96b9da70302e84b34e6f8bc0\nef3d383ccb7adb2e5d67ee464f9b2124cd034dd4ffb20962a6abd3764694e07f\n4b4d244fad6fcee6167f5f44f943a02caa9b326726e949a8424496a79f5acb37\nd8c7c3b10d5fec76b568ee77b02061eec7bfc67c9e75ea1784e15ecaf2bade6b\n48a80532beea72fbe2ce5062da978663984b2cfcf067ddef4de6155f60a6c34b\nb469c3db6fdc40e5f79f3562cf6f8bc43ff8032692ec0f95a03263e2cd7cbfe7\n5b2f4a7c4dc6b8445dbecf16b800f43a6835ba3226b5b112cb09a18bb0161210\n4ab91a24919291406a436f4cafde0ed998da1b99718d003d3afa3729203b5999\na87df0b91c5adda6e678039344bb36495fb1b5e5965fcfc86f6f61763d48c0d3\n7c55d221b1fded8a9a359371f8c08c778e269334c2af994b75186f3b75b7f61f\n6d6d48def0aa6856962f7b9c468c795abec3b622ed16241f4c506963acf2cb36\n29ab91296d06193741f36343fe0f315877a090df94858d93c527d44670760ba5\n68b61609a3d750e4153c0f17dcd5f870b3a38b7d2272ee60a24668afc2b54084\n63664a6fff7ebdf7d2bdf9b1636b17041bb12f49ee3cda336f84c77746fb5036\n61b18775cf02fbb4c635fd09886798b09085b8cdb795bab93438ad36f4e9c23b\nb30e1fcff1bab17fe49566f755ff904cbc11da5e966a545c6c7d7259ba4c729a\n391ae47953a99bc4d500d68420204e23a07f6c0e137bd1a7034d670e1e9d8804\n1bc039653a023a6edcae8f73c93ddcd8a2e85396f5debed0d0565be384f21c5f\n1171e37ce2443cd8ea5b20da6bab9b62ce5e8f1f485a4b3fd7fb22ba4bdd28df\nf76493059c56b7a5c65209ee98f2e81ab6e25cd0a0f81cb511004e9da7fcd65a\n8e73b549ee33577db68adc05e0b24e820500cd50523470eb760844155d4ffcd1\n759d5f50b803888f3bb3a616f99aad9a18a745fc6c248684c2b0df40e38234fe\n1d21017d2a7a1def67c9dd2884d2239e9e1790910a8486e5cd001d2aed32e05c\nbf6fd016f4e70e6af610330f47048bfc8d0a490e60b9e27cc75098a74147b30f\n267ca6983b5940b8ce47d4fdbfc3a7f89f78ff4c35ec0a50228aed5907e05dd7\nea33ef10c079981b1ab1c361d78f58f78fcbb3d9d4a569e0c8e1f86067bd61a6\ncdcc34c490078ea150b792d466b7a6a1a4ed7c46f4ca2e46800f5498820464f2\nc88c8e6ea79bac3535fe2c12f9e121a07588426e60067e13e77999939ac6e36d\n9b63c024d67d2dd1a1e7172a6441a051b2e1405877aea4ad0e78cabb4cff67cb\n82535954d4ba25bbffaf67dfa0d2a889592d2ba5718168b3a620ed8fcc10720f\nb25da0cabd8265af47ce144b68c6058350d643d8f0746c43ace3b7445efebca4\n8d48d6f46c9154a95a4f4b8962fe1392418ab22e84ffe824554c74679bfd6662\n09b79c6d147858aa4ea978389503c1b8f0dd5ce10af89739f19a42a932c3cc14\n25882a16c505ddd2547572b93581ae8f0eea2c7725f91b8b2bddfed70ce9b39c\n398a0beb2d83471822dc81039695f6fda204907ea0078d854dc4b86318921169\nc744ac7d846af8980e123b6219f8663b9fdbaa3416e6cba8ae367755309372ee\n84b812650858053cd0f7f2d4e62d8905b0cd349112adac19953517ac36219044\n3cfb831fbe6e045dc567c182337d4148036e6e715a366a7e2be5bf0da704808d\n7bf418275826e99d696b0c296e7b5a15f5e63f9c90c5ac093822290c8d254e7e\n828104afc3ef7c5a8d8fe631f191e266434f34d9e10619a7f4b7df6566c86463\na86f6dfff94f01f8b4c7688e999f306a65628679ab9123af6dca39e88808dfe3\ne99107b918a8dbb02b1d5ed0f6bb82d115cb36889e5aa14c9cef78bf09d3b429\nc1e3cf2ff96d289a6279d186130ec5cfcdd5a7dea4d23124f012646dca173108\n2ad555c142a587d98fca7b8308cccf3856b0901dbb3ca53082b368cd2850613b\n32da388cffd23ab28d932eeff2a7388295286539aaf03746f35eb28338ad23f9\nf4fb3c91c79ab2fef1e061cdf2aa1f2a991b39fd0afa1063cd54dae5d31d2f44\n516cd6be0ee051bbb0201cc747a04d5b171d4f13686e77b9ebf9ba2236886c4a\n505461037b7a5f2ee8db790e6fdfd047033354f60786c1f2c00aa6847c8fa0f6\n3ab3215c78229d47364fc91ac88f98eec9e5d96ecaf41c0aedb88dc216964a52\n54bf9f88a7bc9f5ed16fd210252dd2f8e7f54ca4b4ef4a7356023556fb69a31e\n72df664882f57b786417d6955b17783e9c206fd33064f6d9a9e23ca274189782\n1c18375d12d1ee22e74713f6911c3ab08b1d7f35f00f18f5e9b669ad15d4e1ad\n0831fb8edaa74fc257fcc5ab9ade88ed85a19cc22d32b2a9e2ff3830e76caa2d\n15f5c1fe3fc21bd1eb96d1d35e8966ac563d1ea40d6d3d2b79a9c602bafadceb\n31cc10aa90012955cef8982620ae3d6d01ce14bc184f5dcdbebf94cfb5b10c42\nd174ae261dbed22fb969fcf1bb64f2bdfe0e43ef54eacce5fb5e537e872eb1bd\nd7070d3bee6768186c4bc824cb828830b8696af783d3410a62fca2b996aaafab\n4ee639122e65f121b941485cfb581c57df7e0c5b7e4c912b75eb6409352ff5c0\n33b1c7e4dca272245235cd8b23a5e9452652d212fad18eaa899935b90bebf320\n3c50b223eb1caaa160a4ce8469a1311c69ba2ae787edc9ee304f32afa013a0e9\n092d80c29dde16413909f3d00f9844e86dc234442748128e96b3ee0d243ac8a8\n00d872aba50e81604e5270aa9972e57b021dbb1eac08a064d250df6acf727c6a\n098c99b2074af3b4bf14913fe867707fe0f9b058e05c38205d1603925f7fe1a2\n54eaa39ce49ff00bfb494cbfeec9b738750b53feaead8bce2bfa1e20cedb5e2f\nd815755c40352198c1daa5d092c700d3745eaf183bc281b86e7762985bb5f730\nbaa1ffa889dbb0e2f7aee08d5abc2180466eecef7c588a1c0f78453685526911\n165bcbf5cf3e9e\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\ncleartomark\n%%EndResource\n/F124_0 /QYKIKI+NimbusMonL-Regu 1 1\n[ /.notdef/.notdef/fi/fl/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright\n  /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash\n  /zero/one/two/three/four/five/six/seven\n  /eight/nine/colon/semicolon/less/equal/greater/question\n  /at/A/B/C/D/E/F/G\n  /H/I/J/K/L/M/N/O\n  /P/Q/R/S/T/U/V/W\n  /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore\n  /quoteleft/a/b/c/d/e/f/g\n  /h/i/j/k/l/m/n/o\n  /p/q/r/s/t/u/v/w\n  /x/y/z/braceleft/bar/braceright/asciitilde/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/bullet/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section\n  /currency/copyright/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl\n  /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet\n  /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown\n  /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent\n  /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron\n  /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef\n  /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef\n  /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef\n  /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef]\npdfMakeFont\n%%BeginResource: font BITXNG+CMMI10\n%!PS-AdobeFont-1.0: CMMI10 003.002\n%%Title: CMMI10\n%Version: 003.002\n%%CreationDate: Mon Jul 13 16:17:00 2009\n%%Creator: David M. Jones\n%Copyright: Copyright (c) 1997, 2009 American Mathematical Society\n%Copyright: (<http://www.ams.org>), with Reserved Font Name CMMI10.\n% This Font Software is licensed under the SIL Open Font License, Version 1.1.\n% This license is in the accompanying file OFL.txt, and is also\n% available with a FAQ at: http://scripts.sil.org/OFL.\n%%EndComments\nFontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup\n/UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse\n{save true}{false}ifelse}{false}ifelse\n11 dict begin\n/FontType 1 def\n/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def\n/FontName /BITXNG+CMMI10 def\n/FontBBox {-32 -250 1048 750 }readonly def\n/UniqueID 5087385 def\n/PaintType 0 def\n/FontInfo 10 dict dup begin\n/version (003.002) readonly def\n/Notice (Copyright \\050c\\051 1997, 2009 American Mathematical Society \\050<http://www.ams.org>\\051, with Reserved Font Name CMMI10.) readonly def\n/FullName (CMMI10) readonly def\n/FamilyName (Computer Modern) readonly def\n/Weight (Medium) readonly def\n/ItalicAngle -14.04 def\n/isFixedPitch false def\n/UnderlinePosition -100 def\n/UnderlineThickness 50 def\n/ascent 750 def\nend readonly def\n/Encoding 256 array\n0 1 255 {1 index exch /.notdef put} for\ndup 45 /arrowhookright put\ndup 58 /period put\nreadonly def\ncurrentdict end\ncurrentfile eexec\nd9d66f633b846ab284bcf8b0411b772de5ce3c05ef98f858322dcea45e0874c5\n45d25fe192539d9cda4baa46d9c431465e6abf4e4271f89eded7f37be4b31fb4\n7934f62d1f46e8671f6290d6fff601d4937bf71c22d60fb800a15796421e3aa7\n72c500501d8b10c0093f6467c553250f7c27b2c3d893772614a846374a85bc4e\nbec0b0a89c4c161c3956ece25274b962c854e535f418279fe26d8f83e38c5c89\n974e9a224b3cbef90a9277af10e0c7cac8dc11c41dc18b814a7682e5f0248674\n11453bc81c443407af56dca20efc9fa776eb9a127b62471340eb64c5abdf2996\nf8b24ef268e4f2eb5d212894c037686094668c31ec7af91d1170dc14429872a0\na3e68a64db9e871f03b7c73e93f77356c3996948c2deade21d6b4a87854b79da\nd4c3d1e0fc754b97495bcfc684282c4d923dfeace4ec7db525bd8d76668602ba\n27b09611e4452b169c29ea7d6683a2c6246c9ddcf62885d457325b389868bc54\n3ea6dc3984ba80581133330d766998ae550e2fb5e7c707a559f67b7a34fea2f3\nbebe4226da71af8b6e8d128c7ae0b3dc7c9aa4a1faef312fc9b46399b18c437a\n776de1f67caf78e15d4cc76d6fa57dad7abc6d35ede0d7118e8c6f3a201f9ea9\neabf8a848d182eba8922addbe3c488f51eac02906400a84ea0abfaf48116cdc6\n6fbc00330a76a8818cfaeb7afdeb029a204e0a70b47a05aa50153b56d2bf6736\nc7a2c50b023ed92cfff13eba974f804a346d4130ccfd5233b6d6b92a14c87bbe\n2ba216bae4123911e1856975e5cf4d94e44f400f687d2d13db288e0d821451c8\n83e9928f8cbc41e0f4b99f8b29d3b11bd4ed0cbca83d81082e39a9e79cebf433\n671b1af39c3d0e1f5bbe5f1fff62ff6f5f15f0421c56a4dffac682cb07b6f257\n221fed1902e4b69d9bc2e061f2e96f5a46734f91298494a425ef6432f2b9778c\n4ebbadd3483ef5447df5f008db9d91c559950ebcedb4b1316a5aae8367a80e06\nbf3162beb99c4aaa617c60be688da7627f29c1775983ef635b26306a94f0b258\n003779f8670a1398681953b785a226057f7d1270fe2dd2ea66d65e2061fbd65f\n0ac51b6c347a56e9f3e86e52f3e0bf1d5f8d6540afb32a027a7c96919557692e\nb739cc298ec7999b4286538edf7333cf8f8f6ba02c5e8c62929af07acbb90861\n0bcb85345f4206e3ea130512dcfbc6cefa31ef2bd1da11d3010fec57b5b232ca\n706f9c44fb9cab8903be783eca66d748b3fa5b1f5d5445f6c16a9a52c88a7e2f\n2bfb0be4e416ea209a9810dd6c38e47a58dc9270b2f49f9b9d482156f7dc8164\nb621b6803b6434a2a354a50fd9353a2ce3fa761423634b8f2adcd63b2b7acf15\n07588caf127a0d6b2017a451d3df77c53e6171c66236e5318d49fab9ce4b1026\n853f65d0d5f7913d88ea66b9b63cf06a4bfc8ed3246bb86cf6de255ff46d245d\n109939e32dc483a0e5176b614ccb7f1adcf99854cf50317bd081131a146ea089\n8ed59e46da7b6254bdccbc660686e2eda0ad7b894cd2eb2688c0c00aca589d39\ne3caa6e0faf7eeb5df3e3f8113dae4b454a0d8c86fee52779ad3e13a0a871e9b\n65b9ef0a2ff20989bae81d1cc1181679fbedb80e7d84a08774e6da58a283ba22\n3780f2717484e066fa7dc012e6d19429b08638045352d358957917123c9c73b4\n326a954f5ebce183ba1025c00c8f559dba85e07b3ed48d2fa0acafa9436d6fdf\ne530ce25ac7da170db1764e77b6816343e8a128a075e7744a6f0406551f4640e\nc403ea61696459d15ee040bfb53f08700c69333b1cb28142c5b9411d65fbfb1e\nc7f4f50c03d122ad4b63e9e65f0a0af43efcc9fc546fd13da42a1c13b8c9cbfa\n79a480d923701306249955ce1c61a680b2809d3551325a333a189db71bc83c59\n47d17b31f8ff63564919b00336285f724d22f889748564808083ddaa4eeb8632\n5d636961e1f634f3ff3def1dcd7299bb7679dbaf685e2ac1484bd9b17c5cf4d8\n59897713b51a4deba3332c2ab5c48a76357d2eaaa539a617b09f223661bcb411\n0e6559e99a7d900336a9327d4b8330ee5f56b016cebb8c07dbcc2fa736c07ecb\n8930f26b429288c6fe6cee3e7792de58ea3ce248598db0c604787612bd137d80\ne4462d249b229b62142128b57a6b44515262743bb3c70ee96aa4b8c49d6b0be4\n4e19f634add30634f999f4dfb3dcff6a412a9b6067d28751aab1b20928a6e73b\ncb81b0510d551f84437062e8cd403bf8c343003965e926465b288b0aa2fc85f9\n90f9a63fce188d72008aed98bcba5ff4ae850711d2664f0857ded002e3a89fa8\n75f930ddf7918d6b2f92ae26af35f50cc9d2a8f9b5d5d80981b12ddf4c59565a\naa62ec34589e5bcc3075cc6a163e45d46bb280b22158c5c04c90beb6f8a1c791\n5597b0f69be3204d876cfa54481cc86ed2fe799bc46555c6c6fffc73854104dc\n9c8a6f85331fce7c5d1f20af5d99e4e61b7ab981dd4eae26951a9447d5553140\nb5862e2f39023bc7d14901eacf467a9424a6be8055d82f4b02036cd766367871\ne0a01d09790ab2777db18248482fb32a25fadb62956b93affc59b1796f78d0b6\n6aaeee9778a3b253bd98035c79b5296e173fba9e56e8824ab6191ef9062b1fc8\n1b6b6185a05b167adccc6698b1801297d766492add5b66193d024d121633d329\n25bcf1a9ae109371aaaeb64f2805bf5c2d5a218c191e9eeb4ac30a48291c7251\nf690b51d5135f6a37f5418624c7d2f3ece356b12ec18f73d5177a24ffe371635\nfc88231b3a95d72ca2555f164c503f91b5c7ca174e43aee6534df6d569efd50d\nda3e950e11c6cff788e50ce5f1332ad76a2357c39d44ea38e88b24f2d37cf29e\n21b7468adfcacc8ab8fe1ae9da4c933b5f7f0a6451964a4924b6ba96c359c828\nd818166d5271e813f7a34a5b18927e66d61003392c96ab36b3e2175f31faa3d3\n7e77200bbbeba91c532c053f318f3f83080bf3d641d4c5df796c2882e34c01b9\ncf74bba01f03ef559012eeece809c019ab6d40d22a16fb9054143990db45b902\na5574f672dda96d6c18c0fb048e970e6180e6148061e22085c7aa4fdc2102fd2\nd31e84456a56057b9d3189f331cc8354b195564cfdd23579574b7c7a80d2f3e3\n97f07cdab67407a46a4264e985563dae7ad933dac054d64a7ebce65bb2beb5fe\nd53360fd76a0fe706e7283550c4d5657aa9bf62ee713592d74e89998e9b0adb2\n327a9dd5f19184a500870a3c53367431b56cc4dd60bb629ae68a009fba0049eb\n16d11d5f299d5a99f3d45f6510450e53740da5556335eccd43e1408b826fc535\n10c7784c44cdbf41988ab67ffdc54ea61dd05208204c8bed9c66c678e6324428\n9682cc6ea0b2dad69cdb69dc8daacfd1a98c730dc3d9bc8d83e2fa2e72de08b0\n031ef3455ba92d03acfdb7ecf50ee883a8817abd96e58f72ae050feae0d224a5\n42aa0b4c022f8a90e73ab84216f520d6ded72680471b9ed2ce317536305d7360\n810a92f4957c9aba9328b116349fdfa728e9f042b2fd2d116bbcbbb99ec6966b\na5e1f4fbbb4b1eae6d8bdd40de5fa44127e6d7c05abad3c012082c245265096d\nd4445b03ad8dc08d707ecbf0aef0890b0658dc9341fd386d417ad9f5e79c0464\nbe4e3b22e4997e1806d192a8be70dfbcf69715b8194347a60e80934ed09fb08e\nc4df7c3b204b07ee3610c041dff7d4c76060e4be6a3a2f0b0217005ab38f80ff\nfe55a6252afa361b5cd8f3b642e6e193da913ccaeae5508c2470036aad80c0c6\ne977c374852b69a8de69aea44aaad49eb7fcd420bd55a5c5cbf073e859ba9d6a\n857da20a5cc2744843ea07efcaf91e992f0a44e1e520bbca097b6965c4e30c99\n03ac3ca1af1bbeeacffd7cc22e7b9763b0876cf8308ea38828a716da7f430898\n2beecd1cb81cd95ab8fe70242026f11061a70fb42445aa9246488d6d0029df17\ndea43305ac74df52e5699b6c243025786b21fd43993a8039e9e75fce2dbb7d6b\n7e4cd140e7edacc20dcb473dc45eab68d8ea296baf9bb969093862d391f84073\n5e17f87847ff2e9186080feb184ff7869a5a8bee6aafe3461454dcbcd00d2c24\n61ef831a52dbb0fa736694b4a3a4d85c6d80636b316fb12be67f0887cce6df04\n80c145ea8762ef8b2c43ae71f3c32686fd5813eb49a39bc6d4980472bd5cdbb6\nc282c9ffe2fb52656f607692e1ba726417703feccfd4aeaf9c66d543ce1506b1\na9d6b95705f67086d4f36b06a283cec841a01f1028d95d4de419d7110f091014\nf6dc905e81add1d54f95b16cddcfd0793d1cf4a85e7a35458c81197a24fe82cb\n63edde30cb6b538a708fbd41f00268a772730b85bd8860054acd93fe6b8bbcb9\ncc474568d426e83f15838520a313e0ae1b60959de340398b21986f5c404c9361\n54975d52740bec0f7abfaf271a2ac1f7553b862d45d11ae585936fbb5462e2dd\nbf35e4afb7bffcbd3294be3eabec4b787133c3a5e0c95f74a71dad9be990d07c\nd157d7258830a3cc3de6459140afba942eef325ee072b3a53a9f281d483eac65\ne8da50ccddb3d43baff7d8c7d7a1847d6d579ce92df1b54de141ce7a73607362\n7d909e8cd9fdc373b840145f9373bc2f02979ee34688bf840f4f9245c2ab976c\nee8bde685c47606201f6611e38a49ab72428def2c85e553313af719ab4d4f5ef\ne3f3430522abff76bf8bb8f56afe11008d3f989ffadccb411dd3b7e6352ea873\n3abe5dc71b3b4832ae85bdb23f6cbfb4b2631412e4fe0050a5f7f4216508a3db\nea2d74318ed82f1a2fc791623c869593dcfd6bfb2fe57bdf06e9d1946f9bcea0\n13848fcdc603e3eca5384725118970cebcc9ebc6b74df13ad395fa6efdc22463\n5380eb1b3521aa929eba30958ae2da40852196b67ee44409d323383b0c7fa1f2\nb4fff373041d9f5eeab03d6743f0a291b481dd3ff9e8ebd77a073b8d5f5d93bc\n727e6566204893af892f74fc0bc3f3e83643a93747678eb998f9c91b3a0ff942\n3d3924f507f1c7eb18249b2ab73691f5fac868720ff52183091f65ac3be8cb0e\n80d257c52ea8647ef747fe304598e1ce0900a4de4031e4b6a58d7869b08a56aa\n710c91ccb8afab94ad10d670e767a44e0177795ddfd65c9cdc7332716deefe3f\n9e2ed8a54bb6faf63b7bf5f554b934821086c09fc28fa74ea2efd410e006be6b\nebe0c464e078c14968453dc783a788a55d925d72205492c07d0dbaee4982fbed\n9b32dd19ae230da5870499feeac55b09b0970ad5926375fd79b95552816be003\n90515262b5ca891babcd81bf86847cbc5850d4a056bdc528e97aded1ea6d7b76\nbd8ec34e742a9fccf19a6310004499b1cc1a920b5f3b746bd4de2d9b9dea341d\n25a7a7b60546a8f9ef99190cf8ddedb21a0103414f9f28ae8673c966b12528dc\nfb70ce44db4822322605982d708a0b4bef7eb08962e3f433213d7545f351e994\n970828eb443c3bb36ab0c4cab7fadfd949e5f93273141da2b6dffb41b4678647\n93cd4e53c78a63c632d4fcbad772122e86dde337d5438e5e4342a0e18be8b014\n3ddd7290d16096f2149c6c71ad28325dddbf994e651b9d4be89430b31dec3fa7\nd2703196f7f10b5e8d98f20e14151160507e53ff1f3d4bddff3f45f9e64b1b9b\n9b26b32bf389a3725c243209245bd78c2f78d67033be00ebe25955a1ac718305\nb52a0260a07220a9f7410bad935538c6c7c56f902a70730c1cf90d45a5f66c6b\na762406e512bf3cc3b52918c6e9e92893279cf86af1684d9b67d1ebbe84be9d8\n4b56548323ab381ae18c9e9570453abe77ca9d9ed1164563120b939fc3acc33d\n49f5e989a74ac760f0c99458295278efde92e99003c4780935d12eda68a82308\nba444819ea9fd930c80263b57ec1b9164aa50ce386b8ef81a53a710416c6c868\n794bddb4fe463b3c59ff9fd085fc7ec37cf2abb7df09d41113f4542f72bffda6\n1fafef41c462eabcc7a3b4fbe46cac256c7af4309a617e73e7934450434e344b\n5cb6ddf2e63f4523f1526ed2f79522eae16b23dd9ff4924053a0fa7c4a0b29ff\nf4485c041b06147d2c94d276553f443c2980cb96ef5da49bfda4ee95bbf092ac\ne2dee947d0c711c1930500b79a5424e8494df6e1798b009a3816342f4d1d7cb0\nb7bf239f3d60361ac605020591740d13ce386bca1e69a2e8063c62f9959c9fb9\n010ae39f18882b1e3b3d0d9b0447db7f7f7a3810375372702686b224896bf5e4\ncd40e308b5a6988b614d8088c296171423cab2657cfb98f462afe21e990b0c74\n4c8738d1b13097ca887ccfd3eabe4f1e29df71d0e51046957409964f9f02a33d\n78b2a5bac5058bda0dd8a65fe6c53dff9310fd2b97afd24f39e586417dcc18a1\n5c0be1795e0f2c3d785f8cc1ab5505bb8fc0dfa1364f08876a42dae3383f853f\n84e7e54405bb8d00911c5b8ef4794494d9bf076d57a65f2392628b61ff967c77\n29114960e00fadc36961617c61c673bd2d2e4a9d54702233c8414026e67940bd\ned16e2d3822f06068502c0966f2ff68f74d11a0b780b95f3f52bcc162a37b6ef\n48cf5ff8513cf4183176734f80b9835401b3db6bd53597645873fa96488eb183\n646b577037e5717952d23cc71ee1780b3df42d9c768804fc47cf147db059b9ee\n7a6399d4f4afcf2d296902f16d56d6df28ac4c9a96e357678ba901fe72ce3d2f\nb10fbf263146547d455df1bc33a1dfa753251c264db8798da35943a4940962f9\ne3b8a68d2b094177154ba30af7bd201cad919c09a34536e41d6c5772873c0634\nfef84dca5f1a5d5488997e279876af1dfb3f51790a6ae085d09ea4e1947fc10b\n987c2db0634c100484f4b45404119fee7a7ec81111029cff1b4cfa1a8637d4a5\nad472b5ac0cb9f428cb1df8abfea3db8082a26cc815437ab387e7f87902398d2\ne0c6bf6c95c2381f15b61fb2c5bdb8684afbb7a6c1a01ca2286a8dff62e52a16\n3d7c748c1b2c63d2933012c5306cb7efb0b4cd733c56ba7700acc731d294f7a1\n1f2a1f8f461983f2972da8c3dbb3f9117f7a6f3583c8a5dcabb364ac0310457f\n93fbca26c31482d806c6a7a4f87f4cb92e3f30b4dd2dd5e3da5360430c008237\n7165549aa416a73c62a50b707074b2b7ded2b07454574f60861cd2f0342e4f78\n24789278e711f18ef858b819a0accb67384b47145fee30b32181d66ff47aa657\n83f0cccb693ac70657bc2bf204974bb3bcbffcd6540477e7a973718754acbe68\n823672daeaf24c93263a57598ac4bc999120e367aaa4b54c643e8c8987024b07\n9b0d40fb33d55cee534e3a38a1a316276704e9a6df08553fde29e4d4526225d1\nfbda6f8cb78098e83e8a360de3c4c77e2998094f920aaba9c7587735cd2f22cb\ne17c6b99a8286519242f18de4aabbe470bb8e0931ec7f5c19e1c304df56f2368\n70d154e925c4f2e5012d52a0283ea52acefa09d2a8ecc832358868bce8efba7c\n492e3575c1605150a3f7d6822960f1a9975151c7b6e928fc07f73493351895b3\n5ea783de8482144ddfaf6f881d0835472a603fcd52464da80de0c380fed5cc67\ne38eea70c066dadf026e03fe00be35c6310f64aca4b991ed4bc4eb125b4c0a79\nb87109b442c0b624c340271988ca36e92157ebe00ace90fa4515b6c649b9ef36\nf82cfb4954c124878dfece799bd987ee930148967069b9e6ff5663689e5d186c\n26dbdfa146c3dd3ab9c2104fa4e92423c88a0821443aa8008b11008525290207\n146118e39b4d7893fdc8c7225f4c97fa3f1cc264122afa3a87d630ef325d3778\n28ecba34700bae5038bc2a1c2e0476351d9e73cb623cf58eb35d4c518630ef2a\nf8b64bed95d72bb7403e652e2dda6faad38fe8fe4319ae190f0496a1c6806cca\n10efc6d15c7e19522b152476c36f9644a599da6786df08fe7981f9eaa0e8611f\n880ce7444e6e72e82aefccf6ae7aa0ae68f883d9f85b8126a6c52687c0ffe6d4\nfc712eae8bcaf81dbfddd0a58717c4cea5ebc76c94567833f5549daa0cf6254c\n627a1a0662537ad3b43c6f3a90d553bd6e7e841769777c502e4dd5fb8b15431a\n61ad9b26cd69b5d7d2b28776074e7b7beb25da2d5b8ce39e2d982b9fb9122e6f\n401cdba8684365458bd82680150de4ea9c386dc6666e613f4de18bcf4540ce5e\n663a6f3de86e8ff97339085dd62fc33bdaed076740de76c1830a14618ced99f8\n07519a5526f787b5f96e8086ff187ddc36ab3b385520dd23ceb0b0a779c97537\n496cdcbd8b82bc87bd2473acc490c6a86a6e6f85496a2dabbe2c92f4394c23bb\n714c0cdce7c02a397f2a66862ac165931eadc3dd374873357e315c8cd99f00b9\n20d3c62c04401d15413d4c640c2aa4caf5fa5db6eecf4ecf43478b2ed317e06f\ncdbab783a6921463b346d8bf72e98a4d7fbe011cbe565cb54a7157af3fa4d5c9\nd6a36c7600f5a884595278efddf5085f74c3d7d8e9beb3be3f7f6131e8233b08\n4b16dfda9cc778dc10adda42786156d707750d12c920cc297e8f58578d5084a8\n6d68a5180a\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\ncleartomark\n%%EndResource\n/F230_0 /BITXNG+CMMI10 1 1\n[ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/arrowhookright/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/period/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef]\npdfMakeFont\n%%BeginResource: font ZWXELK+NimbusMonL-Bold\n%!PS-AdobeFont-1.0: NimbusMonL-Bold 1.05\n%%CreationDate: Wed Dec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development\n% (URW)++,Copyright 1999 by (URW)++ Design & Development\n% See the file COPYING (GNU General Public License) for license conditions.\n% As a special exception, permission is granted to include this font\n% program in a Postscript or PDF file that consists of a document that\n% contains text to be displayed or printed using this font, regardless\n% of the conditions or license applying to the document itself.\n12 dict begin\n/FontInfo 10 dict dup begin\n/version (1.05) readonly def\n/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def\n/Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def\n/FullName (Nimbus Mono L Bold) readonly def\n/FamilyName (Nimbus Mono L) readonly def\n/Weight (Bold) readonly def\n/ItalicAngle 0.0 def\n/isFixedPitch false def\n/UnderlinePosition -100 def\n/UnderlineThickness 50 def\nend readonly def\n/FontName /ZWXELK+NimbusMonL-Bold def\n/PaintType 0 def\n/WMode 0 def\n/FontBBox {-43 -278 681 871} readonly def\n/FontType 1 def\n/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def\n/Encoding StandardEncoding def\ncurrentdict end\ncurrentfile eexec\nd9d66f633b846a989b9974b0179fc6cc445bc2c03103c68570a7b354a4a280ae\n6fbf7f9888e039ab60fcaf852eb4ce3afeb979d5ea70fde44a2ae5c8c0166c27\nbf9665eea11c7d2329c1a211dd26bb372be5822f5ea70d99eb578c7befd44cdf\n045a363056e5e1cc51525ea6fc061dcebb337208eff729802376a2801424f670\n0e7e6397b28f15bc10b40012b0a3eaeb2693e8f7f627c4c9c7c6c5bff105c1e4\n1b2b9e8f09253b61177e95ea219474796072f4b363fe05fa7637750ee32abe88\n6f7c1368d9ce6c8e0c490dfce9b86d093c646a926013616599be4a08eeab1ef9\n4d9066aa43407ce8754ca1bb33035af23db30794e2d3368c4fa14ccccbdeaf01\n2caf3cd75f4a9430011661c1bf054a530ddc57f032ecffb56ef20be97a76074d\na40f2ab5f5ca4b83c12482c76211aebb54d996a3771a33008145b436f16e5100\n3c766da4e9fc3ac88ac60879f47b0d72099a606f615cd397a05aed4a92a6e86b\n6a9685a3fce4cb303371639026c74f19dd67a353e70a7f40b4d317f830c0342a\n9f2fec7a3304e4c4009e2bc3f0dcee97c8381bc7682c6d3f80d93a69ce5d74bb\nb3ae9b016bca6cf044056c8ab210f7f1ab28c6b4c457d0184278951c4e2bd743\n41f9c9c8fafb9f11da77c2ce9f820e65ba3b7184d08598f9ecc956d38ffa3d71\n0ef485905434474fbb7cf4b43b193a537efe076c26a9251d45d06ff575a5b9a6\n20ec66effcfa67a9e089a1a78ab7331d3841898dd7476d70a2a97c8f6c283fae\n4010a9eb770604ba65878fa2105d063a44c56e21bd4847b542af04cec1cfc7d5\nec2b1ee2103bd35e162f2dc6d1f224925a0d7eb5b883a6eff782245605bb8fcc\n1e0453694af4725205d9225ffa329bbdd4392fcccb8dac6a0e8be2059177757e\n2fc359426f4e1ed2e19ca9b5311c2e77ef9f97618b0c337a906ff39926d2b0b7\n883abba6508102d9f4fb0387d88d82973b53718c98d58c9b83d2a62386b74c16\n9cb5c33dda965420dd78aa19ff23f88bd2355f93ebaca543d8b18ea36b4ee8fc\nb5924e01f73a9501819be812383107d361fe8c805163a6957de6aa4af7fa6963\ne77ac8e5d39349be33448d2f6258da61aaf47917c66c7c5ae99a990b727c6c70\n20f14175225efea39202b489cb6623c51f41fe9a5f6d3be27796e51be6945774\n6cdc1ec49ed6114400f4724ecff05fe0bed476dd3d5650ce735475ff6f232456\n5918f9ed222319d2a544aa4a74be19f45cd466fcf191e7ea641ea38f9d3133f8\n872bafe19691dcdf0bce48ed6fd0e0ee9a81faa6dff8b239874ffe2072a73107\n0ffb5095f90a653a1690655a9b4287545138b8049e04eeb928256a05a73edf71\n4e0c8692f37cf1d7e3defd43b2b428f853f35bd79f3811fa7bf788d1c1cf4a61\n65b8eebc60521fac324403d3bca11817c9d15012e0be84e194435fd27361e68d\n79b52b6c9a96c1a40596f048a31c49088b883ee21d9bd24b48e4d1e03e7378c0\n5b62dc00623f9c5dbe5087eb9122de23199ac72b491ff847674d6141ca7facd9\n6bdbfc373e1e1f87881fd7bc3a7d64292c55a687f3837424612103bd6be8fe2c\n0b3f529ff61d27d3fe8cbb25636f48e6a41f205d04a802e50fd974cfa67f94ec\n19c3ec32aa714e650af284926ec5f2e29bb880efc696d77d210536d7d1148ac9\nea9263bc02d2ba97369f2ab531944e132484c3f2c2638b01fc97731f1b39a492\n4822b5265773a5e86a17a41e7346b7c4c48029f58450663e0d09836d75ca7f8a\nd9a78eeea4f41976945501f32bb383455467d217777e642f32777bbd74cff9c7\n97041d0a982ab1c0d4999077201cc9ab52a92cf959cafd2e6790ab45f6927c7e\n96f24481280a0242e823e22a4e32669bc829ef1b7ec3fa34e9cdd920b0f7e2c3\n8f138ee0922fbdd3d7bec614805aa562591c3969760019c54ede008db2c2f8af\nbc66034e5810bc32c823b819eb39a15c0f25be8f2dfe5a01b90848a5adcc95de\n49241dc602f4b71f8901fbb38725ee7ff097f769c017f16598b835a0b93cc6aa\nc437310f1a7d586cc05048684af27ef3c09f72ac62adb2f4fe7f99d1340d27c4\n479c144afdc37e4131d8fc6479afbb1004ba15e3e5d0ee470b9811a0f51294c6\ndee3fa7431267cb6ec7a96c590ebc1cc7333a103eddc21219f392ddbea601d6d\ndce7a8645953235a0ab6d46578e8e438ffc41be6b509b844b73e586131f694bf\nf0ed77a7847f7c747410cbba2473f5869eda83ec8118d800f3b2a7b5ea03e16b\n204962bc68ac47bcc5d29f88aee951c2452d22aa967d32c3f37a91ba88baad3d\nbc74cf2c7fbf0c76faa4eb347390dd08303b439cb1f1a3363d265fec5734c81c\nbf1af913f88820cc29f4a3b54c712e006e1d6bd993668999c3ad54676c71fda5\ne29df4c794a4fa812b13ad32b28bc57e05c7908b8334bd4fe842d57b04423fd0\ndb3a43eb047f86eb925dfe31a012031f36d5f6099187724b0e2203ca1da764db\n623d1e0a59b9fe47d7d4d67c241d297bc5a6641770f5e9f75c572675ae6e69e7\nae37627c1e4d3ba60b95605da55c67c5f6ef7ae2049ea3d1246a0c03309ebd39\n951a398883fc919a711e8e891d914459d4296bc3a584610663af1c2ff053c137\n9f447f918ca55c5dd4a52a060d1725c26e6940371eb4fd9d254749d04ebc0f11\n06f62a30d3f714a33e4f65f4dd0b20daaa10aa02b9a6e6eeec07fd93d19f9c0a\n6cd6bde1d7ccd1a973bf297fe6a8821e03a381c468b9adfde87a4b7f484a55ff\na5b83052ac23f4b3644234d935485f912cba1c84227a609b32509552ad1d7ce4\n6f564f7f9da1e131d9921befbf53cad1adfee699702cb6bc949688b30f0b4f3f\nd3afc9caa04a796e5afe2aa8f8e14a7959731a74dc4b215d7ec095ebe86a3863\nef6d7975c3d2edc2e7c2f5d2c8cfc5f6fda37368a54dc07a7026ebe9e2d290b1\needfe0322838aad2f5be5c299a658f47d0487584b1f9e7def39aaddd212138e0\n8a8d2479be76477e5193944353796d86aa5e2ebce0a453bae8cd9bc976a14910\n93b30d44f25a29808227330b98bb42bad91b4964f6832f2946b0ff1701853c49\ndc522636d5b7fb6ef764097a17da725c3af793585d24c91627f49e83271b7498\ncbd67abde015c94f5f24579852564ef01dc4ad98f15d522bd15fb9043b241350\n2b1f128d874c1d119798ebb0e11be341f78db622204aef7778aa81055bf4b7e8\nc455a6398d7d5dac94a5007b4f76265bc8875392b5354bd38ddc111dbb8b5b92\n15beaf72f041f17d55b49b81f3d1279bb7a5ccb1a9daaf125e79d5ad7dab0595\n9e694040bce7da09f795dd3cd508b405c6bd07cc7ee9bfe298156ff2620bc3cb\ncc7b27d9618e04a2ee6e3744d7a344f6554e0baa2290b2082f996026adc420c6\n76ad5978868e062323522240a388179de4d224f19182ba7a35c3aa952844df49\nf6c532d429e5c86f89d1e697fce1b50861cca95504dd63423bf603b14459b7c6\n91bf64bed93e5ca158ed057c9bf9160f61584608ee366e3be548bf2dc46c219e\n9e0acdbaaca1a5b02770bbf21dede6a80f3af65ae92a9089683dce3ec5e6ec68\n9de2dc208f7304afddf88f35e1f428dbe74e7042766346ec02e1eda87b8c246f\n89a0eb22d1c6fdb17142af0c8c0b565ab6db819d2ae2bb3bad7c7778c53b2686\n72191116278357d8659bcc81753c2906eac08fc3fb966aa5ded522da2a5edf40\n9a3eeb5735617e77a7a77009cd38c2b62bcb89ab73052cce4526f4f02bbec777\ne6ca65c90ff5931dadf03da48afb8561fc2e71008fb1d1d4343512ada1b78e71\n0a10079f211faa5227eb0b30588e9e03fad6d901dca2b6bac956eb8cd2ccfad8\n80e8cb37e31fa6a8206f6a9a2a9e1cfff1205345019a0feaecde57fb0fa418c6\nf4cb83025e7180e50394f52064d8ea0383b80482e48ac91c24d10c7ddabe98b2\n13eaacad917275e916fc0803796efc1f9597f8952547d27dee1fad9ac1fa6d10\n27127514e0f2dcdf9ca30393cefc7cda027c85e53d10ce53796529fb13b079c2\n0c7402109235a0c25965b3b7d741e90e500ec2476c5dd11dfae57d6f57b218c4\nb9cce956161aff0a55a52eb58a59d7a62d90b110f9a0dd26b8c902122271a38b\n7923957a15d11cf1427ce56323c7e4428d2ee1ec6b1c465be35668b0a7ac8eb8\naf1f080a993c3c74871e4b7bdb2602d07587aed96ddb05374c2aadaa24486f9a\n831ba1179b2ea3602d071411f1756b58168f9ffb572d787b2ffe01bc07c04d48\nf893271ee576454a86a0c216b224e0de81d66ace456d352a5b2537eb96be26e0\n342e4165d30208448c9314ec962ac31ee36f887d0cf61a575444b31180850172\n10ce125407e77e5c63c947fa320845efd26c85ae8813a99e518d679137ae1dfa\n9e9f19c49b461da073dc1be4a9d32f6ad62d05afdcdce4e33091132d471edcae\n38607b7f5a17e7340b4e1a110bf7ed2bbbb9ad9b8ab909430f29f87b1db0a04f\na4a80796d144bc1875a846990df6fb3f14a1457be695a3cf1a5c16878d44be38\n107e327ec4096cd66caa90efb30bf9837ad04d995c4f9165b1ef14d394b71ff1\n281b0d67d4d3cd375c79603efa6e0830183be17f77e7d5423dbe0776fa1387d7\ndf0dccfbda67f6ada4d87dc8c6325f0460690be677aa6db7e0250b5196b420d0\ncc8d66fec329d81a7584a5d001c2c3e42350eb22313f036b5ae64868fc6aeed9\naf95ec8f2aeefe4a95e69cc77f321fb7e7aeaa45b2f56d92d0956bf321ad859b\nd2e2bbe984b17fe9303f13428a68d6a1959288ffb63d800c11ffb6226920324f\n6517eb5373f2b8f058be35adbc7ff15a2b0a81683aea4ff11071451a49efd1cc\nf15664182fc26672cf89416da86a3b8cfb45510e1ebbe11060963434bcb7581c\n4816bbd63c6d79dbdca7dcf26a4217bff8060ad7955402af67fe4743997a028c\nc33d49847b57712e0e23a1c5b72da33198426130a132be52890df4423fe21d4d\n2625e646ce72588478bf941f1f74e875812f7d7ac9c54d0ddcd12178abf50bcf\nf5131713cf9c42d0faf6cde696534896406a8a5234a8ac19bfd531ca934c35e1\n576099082701fce199811dd294cc46ca147d5a187c3737d3d128ee8d437a2afb\n114183da45b49ddc768c31e35c395c3bf67a79f8b1ac292f38ab2ef721453256\n523e9dc08e80bedabece9bc9af135276c819140d7a0e966156dea6e2f7aae463\nc634c4de83feff86407b556651a455077d64b52c5ff4b80250d312dbdf83dc0e\nb9ebd541aa9fbfddef1f775be0c411788b054aad44c85d8723ca7d2a6b00cca2\n4ac55e90ec48e4acc15be17b9544bb71ad967c4b8437470e4d020fc6e8677251\n92e2307b51148b2cf46fc1b7f2b149ebc1ebb02c33477b4c56e56a9f06566377\nd2de31c00d90ff5ddb509f8ed457e915c6fee8103da73b5d782bffad7f7c029e\n12e1930e95fd7b7bb37c48b7cc48d99dc9aa79388c90bf6c7c0b83c7f7fc0935\n8fd5f673dcc906c7e0fa7711abe8258828289ef48a40723e39b7ec79f2d3822c\n6f45a6ae0745413ce860467d7cc0aef52c680b8cf1767915d3550d9813b5bde7\n1c21b0f7b7119bb0e1eae6a7874ff0588adf14626d101b4e117c63f2e7a60627\ndc40cb9ab16032434469f390804b9039e21f1afc9380f26571e3b2c64a86c851\n74fc32a61b787769985079d60cf71131977accec6954da9032b1333396fd5450\n00e364e7e6a79bdbc9f1e842e222ca480f1f22089a38079692312519392296ef\n08f00707ec53e1cf114795631e3b14687b9e351f1b7bd44d6f7d41ac91e8404d\n8ae952c3c78e4a6bc9ad64ac1baeb952053c409cfad43a877a7c420006ce3e9e\n0278a33cebd6d9d9737432c982165ed82c45d26f55c133162a41be27005cd6fd\ne60cc41bc098314a5a1619dedc6bd9acc637f398219f9a3c543f8421ad4c4e58\n9265d23edb6cb45f2273a908ca416ad8c32c2992d9efa95d86e631ac8fad778f\nef9936c2dff4053cfb253c24c65bd20fd534d6509c0c141a358d4ad95bd9b5af\n8abb5cacb94788cbf6c43bb54d52751d05a1a2e6848c33ab9b769ca9bccd8e3b\nee742c0d93ecba4c5c31c1d32a567d4213522f2a5687b014351cc01a42c14208\n69ef5852aa703ba076abcd4c6653fe6c4100bfbe047e34d4d6e9c62a6e5532e3\nf9ac9e7cac24e076546134c226f38ad0f51f8f2dd8501a001b5c0da65d9286eb\n3560b947ee38fa27a502e87f8c99ffcd54b1d128096360be6c5b6f3e536c57e9\n1acffa0392e87026f5acadd1d81295d54155ac6154e247d95bad5d9ace11215a\ne0ca996979f6dd8e94e7567ea17b8827ea4d5d5c9a8484ca568332bac134f993\n91505c7fbd8ba336f9c37d6dedd17261483c232995658b078fe8f1a312cf74ca\nde87453964bc73a936a0ea09f74e9b0822b8336cc888f0f1f399061c342c8b18\n1d93b17a0afe2a2a69acf2f91ecbc8441db2aa35091968a0408b2abbfa35e4cc\n77208f81b76a199312d8b3c3426e49e08f8359e6ceb694550f4b8fb113f2b977\n937eb20585083e72e0abd60e60ca4ac0f216b65b7a9bcbe1005c5b8bbddb702d\nca9da36f1fd416315266905f3ca5ed221be1ec496c5b16070bbe38ea094ae5ef\nbe93eb0eacb95603d7c36ba04f606a11ad22580b1ee5498ffae48f218108b774\nd71bde64b7de26f696d95abd3c13853aa368cd2582f2b03be9b7ac59e9bf0207\ndf0ad55054c594811c5e89277d3804d058e1fa5419b15d11605066742d284108\n7411f111e7375c6710060d26e0b60f6aa8387f348cf2bcc5762c16ef320e24c1\n755f88376f5f2ec00b4121861518c97145a7105bd0d571454c177da407fbfbc3\n4a93ee4852b09cb436f682f9f84da4d61ecf72f8f801a548a9304f19163d6bb8\n12f5de6e1f2b4ccc494015627416d54877ee71221b95fe357bf67271242a8f17\na4eb4be3b7a649c234524b2554a8fd24210b7acefdecb2198265167b8bb28593\n07ed7a654e9a6e2119e6dd14fb33faa084c71e930b8035952b87fe8b4a297dc0\ne4a89d17214cf1063caac03d4bdd5b4fd62bfa6897811c3494ec3018c558282c\n2efa94538edde156727152eea21c6e3f88f68a0176aaee333b79e6b37344bfe2\n77292544c72d4023a3728c2e39d2841c2450465852d02503fe0a871700b470c1\na73d8c1db644db39e9c1ce3ccbf2149625e915599ecc3091e15e0a74768ed5b1\n8271fc242e10bd83e73b4636cf874ca6e6d756e707e671d99fc43d61ce6bf80c\n3a3be178d9f5d3cb32ca669cf99b70b10dad7d270d0cd85a9865d60df07fdd94\ncd\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\ncleartomark\n%%EndResource\n/F440_0 /ZWXELK+NimbusMonL-Bold 1 1\n[ /.notdef/.notdef/fi/fl/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright\n  /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash\n  /zero/one/two/three/four/five/six/seven\n  /eight/nine/colon/semicolon/less/equal/greater/question\n  /at/A/B/C/D/E/F/G\n  /H/I/J/K/L/M/N/O\n  /P/Q/R/S/T/U/V/W\n  /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore\n  /quoteleft/a/b/c/d/e/f/g\n  /h/i/j/k/l/m/n/o\n  /p/q/r/s/t/u/v/w\n  /x/y/z/braceleft/bar/braceright/asciitilde/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/bullet/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section\n  /currency/copyright/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl\n  /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet\n  /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown\n  /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent\n  /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron\n  /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef\n  /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef\n  /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef\n  /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef]\npdfMakeFont\n%%BeginResource: font FRBTTO+CMSY10\n%!PS-AdobeFont-1.0: CMSY10 003.002\n%%Title: CMSY10\n%Version: 003.002\n%%CreationDate: Mon Jul 13 16:17:00 2009\n%%Creator: David M. Jones\n%Copyright: Copyright (c) 1997, 2009 American Mathematical Society\n%Copyright: (<http://www.ams.org>), with Reserved Font Name CMSY10.\n% This Font Software is licensed under the SIL Open Font License, Version 1.1.\n% This license is in the accompanying file OFL.txt, and is also\n% available with a FAQ at: http://scripts.sil.org/OFL.\n%%EndComments\nFontDirectory/CMSY10 known{/CMSY10 findfont dup/UniqueID known{dup\n/UniqueID get 5096651 eq exch/FontType get 1 eq and}{pop false}ifelse\n{save true}{false}ifelse}{false}ifelse\n11 dict begin\n/FontType 1 def\n/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def\n/FontName /FRBTTO+CMSY10 def\n/FontBBox {-29 -960 1116 775 }readonly def\n/UniqueID 5096651 def\n/PaintType 0 def\n/FontInfo 9 dict dup begin\n/version (003.002) readonly def\n/Notice (Copyright \\050c\\051 1997, 2009 American Mathematical Society \\050<http://www.ams.org>\\051, with Reserved Font Name CMSY10.) readonly def\n/FullName (CMSY10) readonly def\n/FamilyName (Computer Modern) readonly def\n/Weight (Medium) readonly def\n/ItalicAngle -14.04 def\n/isFixedPitch false def\n/UnderlinePosition -100 def\n/UnderlineThickness 50 def\nend readonly def\n/Encoding 256 array\n0 1 255 {1 index exch /.notdef put} for\ndup 32 /arrowleft put\nreadonly def\ncurrentdict end\ncurrentfile eexec\nd9d66f633b846ab284bcf8b0411b772de5cd06dfe1be899059c588357426d7a0\n7b684c079a47d271426064ad18cb9750d8a986d1d67c1b2aeef8ce785cc19c81\nde96489f740045c5e342f02da1c9f9f3c167651e646f1a67cf379789e311ef91\n511d0f605b045b279357d6fc8537c233e7aee6a4fdbe73e75a39eb206d20a6f6\n1021961b748d419ebeeb028b592124e174ca595c108e12725b9875544955cffd\n028b698ef742bc8c19f979e35b8e99caddddc89cc6c59733f2a24bc3af36ad86\n1319147a4a219ecb92c71915919c4ab77300264235f643a995902219a56d8626\nde036037defbd3a2c6bb91c73375b5674e43810b4f7eccb675b36f35d63d9ec2\ndef21c5fe49b54f92f0d18b89289682cb097244225af6400f6ca98efaf336c9f\nc304161e2006b3bedbff4dd36fa7a8f7594c02dab68c077e83335ee6d018f860\n8d9a9131325d953d6c38c7e0a34236506c1e70cb6657dafc3c9520131a251350\n49034e216ae175cb232c2ef5a3c569ab581f936ef4e8b8c8bccac287f06f24ee\n1d15d2819058bd9aebc4ea91b74935f6d411562a453674b14bd76fbf5f298f9e\n8fd37f529f9e0450bbbe473b5a4039d8d0228f56330fa15411d7544ce700984e\n09593a854180d3100e136beea91daedaac36cca03d82b83d953880307edbd0f0\n014451ec8f10b1e30b51c2f9055e906272f02f32085e4b9fbe5a6860a74e274a\n74349069b6eb90fce84259d281f037d6de9f42fe557f5f13a87e5c9f668dfb8e\nf5e7f4b5ef9f5841b3885a6c8994bfd27fe35fa3cc1dbd5ac68e1c98c0d0ecc3\nbd2795e77848b5faf604f01362ca473ac72284a56cabb68f35ba43ddc6158955\n5bc6614cbcf4b80872c2cc66b6f4f90c315bf73b34e481705ee8b54eef70fbaa\n71424420120f27d8853933e3ad4d8026397b040c88567f440df538120d61d0b5\n8232d66e2e006866b60ae46c3f4bda16a2eb5b248bb88a11b3fa4770f0f6c31c\ndd13bab11c2f4ac77a63f703a5824638fb765033dce02f584f36c879416fbfb1\nee7eebe75d57711b44824db906885934dfa7f386b811a2598fd5cca2585045f0\n4cfd32e35f32b90badb9a96f48957b0a311778d21914c9ea27bfbc75197cbb6f\n0df8f6fa574e1f1d529a4594f2a6ed99b98fd302f4fb2694e3986c1f46ff165c\n7f4c1102526831ae1e469e62f1a6adcf7d2b876c0d43f85d20a6a5dbc2280884\n1c7666d56f832b66cf189c4debed1fb37df76c3f1c632ade8822eead5e7f52ac\ne65daa6d86e410d469a7844baa4fc9d28e21490b8cb2d3b2fbe718f55211fe5f\n74d3573b99bfccf198c775402823aa742acca713d30b55a09c7b7ce3f5f5517d\n6133e546a86c0395bef3387804ac1b07a4d27492485741a8c2ade23bb321da56\nded0fe0d43baca1483566fb397db76ba9eec923fc2b3941f3b949cb13dcbdc3e\n2c84c6e3a7abbe5c22abf9b6959a17d152ed0576524395d8a5049c5144680a19\n0ed3405f2c9ec716cb9c0fbd6b12168d62666ce74149f8505e02aab39977d99a\n13a66449c9487a6b2863f7338378fb901e8ac981ec53ca555049b3667b4bcea9\ncd731a850ceecd59afbca1ed2fec76c18fcf5ba1b9fbd81eb84c254fa140eb99\n48838693123cde50278e4aa3cbdb7f7691d52cc624b4226855a74d3ff4b3eb3f\ne193702ad68437760ed7173ddb5031737de3470f9340a44e92355ef033958954\ne5b33866ba86201a7951a68783b94f2984b40dac3037d3e6d2250e850984470c\na4fa92527aa313f3f366e97b87d05e114468dcf43ce4a27b9999e24295cbead6\n7dfac0c6d99e7332662743f379dee2b05fc7aed3ae405d631e3893b16e1a3771\n278319e6014b88fc346b4f3d17edfeab40d6552092a8dc6c2cdd506f458bde17\ne66b02d4992a0e370871035bda2106ecf7fab7ced8e8d35c6fbb825ed724b726\n8ce5f3f25d11386c958fe4b773b9268484c12f90e2e25e299a2154e5c480610d\nf302e1aceed9d0b3e11681bd5322a13b8fe895fc755e0053890a4135f2993642\n3d11dba2766edb9954e308ad998fb1cfbc2285d1f7a9135d2f06cd2d7f7d7b88\nd1c6c9409fd3962b8b1c9a690e01fda96361ce706ec9dbe3b4d3e0d57baa0d4e\na98200ef682573f9aae9f09e2000b9d7e14ea41682e4e5ac56dae4cec783bf61\na99a5df4e83fd52c0c02edf26274a16c939868103691ff4f8876c25fa70652e9\nccb3399053205e0350ed215170f709c1901bf7b97236f7bcc13ba5b35a96e8bf\nc6e476d81e396b0c79118e16b5489279703b1a44c9d7e320936a19ed319cd03a\nf052845dacdd9b627a47433f2225827c65dda57721e8b196cd368dcba55250e8\n24e6b7b93affbdd429c9bd8e4523d8e8a56427acc3e5bf1b2db9b60cc832002f\n1bc52025f18e7d87d9bf1b8cd8dc170c6dcb85af5afc1ac4a24c0e38cfc0f4d9\n8d63cbf3b5cf6f14d902ac8a9b4c48a5d4ba4bdcf4f3b69e2998f507719e2bd7\ndb63597995c5cdbba59f9b010a135f4dcc8cfd602d40b30730125606fd1b27f4\n9ccfb1d0f6a97453a8c9a40f643fddb1581504132883598385c4f76b4e57b559\nc0ed46d83ce8427db396e96bb3dbc307df52ed28dad5cf5e32d82510300241fc\nfdec6d84bb008cce0fe96c7c6d836fd3c8eca9341951e5ba15ad84a1799d137c\n938fda761f12ef2b7e90a49f1ec49445b5638ed4b2d903924dc6ebd72fadf61d\n16eb74d88503fc48659a86d95043b4e9764eeee72247367d0ca6ec0dee079f9e\n5db531a1411790c08c942b7ce7b028e4b956d5f1df8a47a8ac6c37824b661b57\n147ade729f5fed3dfb47227b27aa34cb86584d20a628bf18c395b186ef197a2f\ndcb3b6d97ad24cc35a847cb98944011ec6342d0ff9e13045ed70b68a1a5a53fa\nb8f341c7e187ac0888b3c8e119d8b841e494b9c1bd746cbeb1ce48fda15b0054\n817873ce4da21d8550892ab4a06565a98fa666a6be00776bda87181ef8483129\n3708a88f69228dd0c3ef8224301dd8fe81b4abc3563f69bf1212897af3e738c6\nc57cbfa53e64ff6a79549a8d81c3b5566dc7e697e11971a7cc6743ca1991f391\nefd8c0ba9a01397a05bbe5548843de7f2fc4747eba91c5988605a76f1d2aed97\n398cc672cfd5498ba16f6aaf55ed4bf613786aa1ba2e092c06cdf82b6231b0d6\nb2f10cc3499b6c444cef515a033381f7b6502d6e6ff4bcf2bd273cd059bddf06\n652dec312ff80e8c9f37818c2a453523976487f1a46f8e967b5d43aa3e24fe03\n46097a6721d0882aa36fba00d3056a8ad42d4efb81edcda5cdad6ff2388fc54b\n775167dd8d709c2a315e130e822ed68a889dcec2ebb10c4c56897ef4c8fffcf8\n6d0d146c61ce0d5d2514ec2e22a66090bba95fae51b7691c7f1ae470c0f6c58e\n1eca070773920235792e58838f031cd2cdae29f1e61ca254a1ed00a6f664314b\n9fa26bababcc8a6add7faba2081b6e307a17aa47ae1de11f7189b78feb61a957\n51e9257a84d3184ab2b9d858a41aa2c23374497930c4bea32e04d32389c55b93\n23a41d83442345d482927070af462aaba8f5b1de9876ef724fd364ce6e376e0b\na411d2036639832aaf1bec583af5bee73ec7bc9a3a2acdde4c1d6602cd8d15c3\n39922661926a3b2b1d7b15bb30870929d0da419267c3b04b2aea81584bc202db\n56b6277ad95af3cc411dda29096eeef6cf0bb3d554bc9411c39990db4ccedf0e\n4aebeff2e95e4469a8fd5ba6f03a733c9ddcb832c221f114de5587fa7c9b0096\n2306f9355684eb66d1558aea7150817df7fcd27c3dff8c9abbbe47c2354f7c50\nc306e8739a39f1a71e8e7de4e5932a0a1d2b677041802cb02cc13d7c6aab3235\n1143c982379bf5d50c92ef96afb597d81c107f2ee92f46a81b1bc9b9cb30a296\n74529ce1ba8a022e221c77650c681a19bf0e5080a065e4d66d70f2ee4a876fb4\n40b0b1e29681ff5ff0ea41d27f33a7e25115e9bf421e56f47e24f03945a2ba16\n906a3d0a8b5d3f20abe89d7b7705af5f0f3533f7a546ee67d3bfb3349d4299e8\ne49bec41a8ab12e1bd71b2cff0cb0f1fdfc0ded134b5078a1e87a490d0ee31ae\n506618d409acf32cd653c59f36f4e3bc051ca072a4a75b91ddc17660e00cbcb5\nb1fb8d17f4bf7f78f74724ff9f1b84a5eacf2e7da1b9ce0bcc94b7a817dccfbe\n46cd999463b0b19a91823d18adc1662117011f2acbbdaa2e062fe77706c48952\n38ba2840d9d98b9a7a0d63b8bd40c34e26496d979edda33e5821c86d9565f1ca\n40ce6c160e57ff22d2564348e8f89d38d46b17d591053c79f89c4e750d619407\neaa5a8bdc52ea6c6ef02744eb4a5c4886c32b210b86b41495d8729174df80f7f\nb653a2e6ff5996d96eb51a828d0606998fd526a82a5e8e1dc79127fc6340000f\ne218fc26b7c97c3cdfcec5a497f7be1ed11aedb012ffead9aa2b94630ead80b6\n3ca17e79276dec733c9955e9813970215fbe02a751bcdaf5e427a64e9b47b4ef\ne105983e0e02c5a8cdc06a5db4126ef333583e4aa17a3fd944ed803d4ef88501\nbd626e0d1d8d7b71176259283e22d9382ae88bbec9cd6ba87933f86fe28af800\ndc2080f38948e3c20d8f4477e2b9f85da4800cbd1b9015eb64a07b459215caa5\nc38b7781d919e199112e241556e1e7681a749cf67a6b246b6b245d34ebaf1504\nf06366b8a1faaf10bb4304579640f2cbf3fb339df697701f6c51afa09351e699\n890462e1a8152f70f301b5f3a01c549371be46d138045ffed5411192bf6eeb13\n51d407ffa26d4b8e7b267a3b3cd5bf9e06816df2e35b6937cccf16b4eb9ca3f1\n272a16fd71588054016ef2743c1bd58c6bf22f083fa9326d19299ecbcf66f4b9\nafed95e1e2a2f8792328e3af6025da7baa1b10a721bc511e9c2f302673df78b9\nf466e742ab2bacd5728bef45dfef5b74d1da674f4b1c8d51a324fa24b23d141a\ne082d79c3fea6440336329105d33aa1a960eead51cd500252a4d7d481cc31a99\ne9a59e3b4364a3e19805c97270bd19b031146afd9f46111a10bf886385731d74\n95ed4727f7e2435c96ba702904ad29f606fe9c5f1f9a11a229b1d528b9fa9ba5\nb50b4d4dba0ab5b3840d71c67626b6afcaf743dfe5334e00b64c5a73b3775450\n757b911673bcbacfb0f8509e8b2b2d9dada9a1558b97b146f555f85022bb4bce\n86862babbcd259be6537133f30ab2895f60869641b1b9a4cb43b676b0739c112\n2859492d908c6c60aef5ee3b60d515e7e641d008483ab4aea0e159481d623193\nb5e2bb48c77bb87783c7525e59d19a190e2c0aa02446a8d4964844d9f2561a3f\n70f20779d197b91450de25463dbb82c2c7c6428706f6d9f6a1474bd85068b37e\n4eb45bb80449ca5fea88804308f054167aded26609e7093cd396948cfc810160\n347c6d834531d64a27bcfde1dd24607d5209060f8207da7f5ca88011e24e326b\n66a261f36f754a37339d7f10eab4f276e1eabff47f4bdb577b9c4dd3de333fd7\n8f8da94df25df93a57193b1411761f908510980558e23b0584421f920989a758\n138f2e50e1493b3f9f2154a488202e0bb77316ec03f6555de4ae83923dd1588a\nfe0bfd9235b4c08a8072804d743e793daf862ae381624303be7e5e0dbd74c51b\n4172b1a16c27b6f8c5a695fcf3015cf4f7d89fc91c4c8102eb83a15093263774\n740f02f675477a3b4b6734daf3d18d1e3bb7752922e9b33bfadc539596c276bd\ncbf0fcf5437eb33fbf4a83bb2f92462236552eb0303ee70602f42bdc4b51d384\n301922cad3abd13deb81f173e9deed83786f4a5de1d7aa21cc77fc364fdd2e7d\n8b9e8074ebcb7f3511f0a256e2cba9b32bac11a5b7acadc0fc1d378ab3557382\n9aaed6a9c679e7e5cac49307549f8c4335fc477267e25506c41035cc248f8797\n8c267cb08fb5bf8a087e95dd47aae4d8389e97ea0da1af064d76e5df286a1774\na783e3df200df1cfa26ef1ed9b5dce5dc55102cc5718854fd8911a886d0e2e8c\na38eadf009525bbe17d0986f4e3c6a23e608fe2782e7c4bc31ad13d80ec03b7d\n1f0ff0855c4d7f9d63d6283ad8658fb13ff68586e3135a99341e4b88678704a9\nc5e8a4c2a9e70f13408c9c54ac9420d52761f62225c64b7c60514b7de0a2c8e3\nf27544869c93890e7df32680fdc438392efdd6a7bbe7621a7642632b7f45bf2b\n3f0cc935a688266c39f458b9503ed06e67f4094946e73a3fc27494d890065355\n4fce63c60e6a32436d5ba5e0ab4f373e816b57fa6ba5a2a9bd02cb58af2783b2\nee1da6169c0f15c23c55a7b2d74edb384c6f646adb73d70e3310873e0c99231b\n1af196d1742758956415392b4537b1f04ee4060899648c387bc55df28c6db99d\n2f87190bc6f1109ebbd78e15a5641a76198b590286065996f6fe1f776f7013f4\ne999219945c4509d37463f6f18cfc46a500f39e2f2ad229bc16793428a9d8cce\nc5d950ee8ef43b425e518f4fa99333f9bf2a420b33b383756ebb0324b7df49c6\n0eeaff9f5f4f0665fe60d40a1f9824c0df60827d2d3915512fc4a5e54db36580\n9e3fd8c1c7c9ead2b0b5011e10ec68e4035d8aa662f0bf09fde9bbeaab5fea32\n3cd1f8cd96c62b0410ec741cc2aab05bcf9cb188194aa1fea94f40a4254d9149\n82dee90d74a6b5d876068386d55c1ab92f62e3d1c3f24d564615ca3035ffce2b\n6b49e53257393e66967da9b72010d0f8c4b6f4337487b6abffbaa16aaa86a6c3\n7c22a7b4e6f4ee90d60a9fc7c95b15d34c8a689f028e591215b329d86f35376b\n15dffe9323257f0748925c002cac78ce7cf473af7378eda5489e3c464b11e3e4\n87d805cded68a70bb95a36d01885006d2cded168532d575a128f0e03ce4a1827\nb7b0f7ca3da8e4dc774ee59db3616caa3a8924f84f35df50e48477c35fd08945\n308a214bde3389d0cb225ee5d1f96771fe3930b16645c6283b70223dfeca6663\nd72e9b6b4773edd543cbeb81e38a094ff9f1eb6012ca08a77092987bb8dfa849\n361743964bfd43032f77b09d6d1407abdcca53d424ae51fb1ed1434cf4a2f391\nb81678987709e0bea61d8546b8de9b05260d7e2284e445933ecd867cb63b6004\n0fc50c76fb25f81fdaaf545bed63d6065def8265028a224797551a6a8ddfab06\n84798af0747678d53a7564519116755a795f14b254642293aaa3622be7c14f86\n5dd86caf78e0273677f2e33658b24310bf444b1e4f0719c187669b286740775d\n66a65699cbc25bea7f7eeb8c3146f9e91e5e0f413376ac09c7e24f9b76d2af1c\nb63201760c0a7afae554b8defacb30d9dd146223f69b015b9b7a79cf92d52404\n6531acdb6bd53597645241ec6028c585407b903d0579573ebff088e43efa91af\ne77940e6c5ffb955e1fa083b949cb13dc3483bc7637b96f03c79426237a96c21\n26788fbaf00540a987d4ef95082d64a104dbbd75e4ea5c00c2cd02e622987ff7\n2775eeca7c15213edb33fb30b48d17c3bca35ed5ae941829d5992d7bb74f8fb9\nb04fd6fa321052a8c2b40f78c8e8eb081f8851c508f4774267d091e2bcfd53fd\nbb9e9b22d7aa6c9b62f0f67a3bb9b1984979d55c45d705c1cbea897072a86b4d\n0cb7400640c26526c0a03395986cc3ca897453f7e6c4251d81ed29e82f7052c7\nf8ded9c0aa221832b5750a9845659235f82bc4d9b073a75af2271a0814b1b9a7\nf598e0e7628851b21af4f0b0536c129f6ac5f62090191a7a0776190010de80e2\n7e252e134b7a5c4e14a18a84e7fce3f71645ea072ce3655632d2113d4d176f13\n29142d814a63c756e0a43ad21a55d932d1b83ec93188d7c893220fbf5157baa0\n834ffdf5d191342a4f7afbba2e63b8f36a6394ab5926fcdfdcd8d8cf138fecea\n3deb371294591899b4f6f8c8f0ea2c41356eca49df468a952f9c3ffccc8a99e1\n0d5d61732eb44e2ae7b254bab320d13990ffcdb63f3d541ed21ae022e86ddf20\n1eac6701a072aaf27664dd4e7874c4e428682c44de9d9b14c25fa8c2e8760acd\n79f11c13e198602be9d9573f6f04643b80abae1cb6269e00c8ab419d49c3606b\n11b1f8f46e7977789b19ee83c5bc35bfc48da6d32dd4d16c1303b0799dfe98fa\n0cf8531205195af9e992dac76c6cb79ef51865e6b012f29df6d3333daae56b36\n8ede2fc26a580344fdedcdf9c61366f5887fb1e7300f7898e38de35b4dac436d\nc4f79f7b365cdf9b6a32d842b6f8494b7b6c91c122af116dd8a3c3c1a35a21a9\n509f5c0c8479c5e57b2c0e175fbb4a85d3b52c927a20fd0cfdf3e2273ec8726b\n58c23b0d4f56d69ec2c59d8ce896ea7dd86cea423c2f7250170a09991fdba4f2\n40a6df094cd170ee83bab69d4b8706441730cf417284c8206c646b5105d592da\n9274bc54d07e141fcdcd130e51bacc353ea2e99dfae63ecfb9138e0aaa07178e\nde98a4f4d365375190585c8579e73929b840667afbc659f5ba4b9f25fe55c75a\n2a42fe330a4b90f3a088202806baa50fa1e99fb32973f23819fba8\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\ncleartomark\n%%EndResource\n/F548_0 /FRBTTO+CMSY10 1 1\n[ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /arrowleft/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef]\npdfMakeFont\n%%BeginResource: font AMYDOG+NimbusRomNo9L-ReguItal\n%!PS-AdobeFont-1.0: NimbusRomNo9L-ReguItal 1.05\n%%CreationDate: Wed Dec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development\n% (URW)++,Copyright 1999 by (URW)++ Design & Development\n% See the file COPYING (GNU General Public License) for license conditions.\n% As a special exception, permission is granted to include this font\n% program in a Postscript or PDF file that consists of a document that\n% contains text to be displayed or printed using this font, regardless\n% of the conditions or license applying to the document itself.\n12 dict begin\n/FontInfo 10 dict dup begin\n/version (1.05) readonly def\n/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def\n/Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def\n/FullName (Nimbus Roman No9 L Regular Italic) readonly def\n/FamilyName (Nimbus Roman No9 L) readonly def\n/Weight (Regular) readonly def\n/ItalicAngle -15.5 def\n/isFixedPitch false def\n/UnderlinePosition -100 def\n/UnderlineThickness 50 def\nend readonly def\n/FontName /AMYDOG+NimbusRomNo9L-ReguItal def\n/PaintType 0 def\n/WMode 0 def\n/FontBBox {-169 -270 1010 924} readonly def\n/FontType 1 def\n/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def\n/Encoding StandardEncoding def\ncurrentdict end\ncurrentfile eexec\nd9d66f633b846a989b9974b0179fc6cc445bc2c03103c68570a7b354a4a280ae\n6fbf7f9888e039ab60fcaf852eb4ce3afeb979d5ea70fde44a2ae5c8c0166c27\nbf9665eea11c7d2329c1a211dd26bb372be5822f5ea70d99eb578c7befd44cdf\n045a363056e5e1cc51525ea6fc061dcebb337208eff729802376a2801424f670\n0e7e6397b28f15bc10b40012b0a3eaeb2693e8f7f627c4c9c7c6c5bff105c1e4\n1b2b9e8f09253b61177e95ea219474796072f4b363fe05fa7637750b770d7b13\n99fd7523816e22986f43b17ad2f9328028bba7f383ce5c429773b3d968b4307a\nefc6f468433d2320871c85fc9a377c8146b0238e6386f2f010e4c23bf50f301c\n95de2b4a559abd765880f5b3d8960d7c462f28339aec4978f261a05761583468\nb73b46da2852db1d9b0b53f6427551b6e87f1a1492a19dd774ccc6a1d0bf8d1f\nafb24bc1b3a56e452791e8fb9206a2c9df1677e848a67c4dc754cd0833116c84\n25127a919ffae922f6ec724252ae53662f3eeab1dba230a6ab6ad98cf27afcb2\n6837487ece5214be13a113d27d5ec449ac017cc7f12ff7b731b6aea24462f3bf\ne743debd18a99eda36d085ad3602ee939e3c2a40fb9551f4e5e904578e8df0ae\na6e10910d5205c917b45b0d0f44caa993ea6fc2e17ea43b83e62abb31717b3cf\nd783d25486084caa1c642a4d9719906889510d7e60c8ba0b48b9d40222d36a01\n1aa4c8148ba57f165bb7181534df0a597bcd1df98fd644fd3e3a09a21bb018bf\n637e620e494eeb843c575bdc71016214e19d0d3d030b8a9eaea88822ee97d8ba\nffbd2f522d3ac2f34927961e189b0c163c365ebb410088e95a5bd200e62bd5b5\ne846bdf4c127018a54a78bce6dc744c4c1aec0087df470d72e461c8079f1e8a5\n12794d770d391a02d428fccaaa4fc4ce3eefcf12b553d8fc59588b922565aba2\nc179b29dcecea5254dd73f388bb94a7ea4f16c0ea0278deaa11f2be56dadb4b0\n43bf781fb5151a4d2491bfa2d439082e8cf7a05cbc84393aa92f1d09af1e69f1\n692065dfb293c7d7bb552469bead4b1479ad1b75e552af4c162d37027dda9863\n5e1ff0b4c3ba9cdb41e9c292e901446d40a10906ca0c3f649f7968b4ffd2c653\n650bb2320e55fa19938e4c3775f286a05a1011cff4e4c7f353bfdd88ce318584\n799cd9350da919e462621dc3556b48bf53edce91940eab01870741f0fbbebd2b\nc6a26e593fd78e7ab5d05af43231c262477a5309acf964c0fbc114419c98df24\n279612da5ae02b2db3eb07c329891aeab0da742593183a92a619912d6e53b33e\nf9489dfb011045b4f20c79a7038e473f435dcc8dfed5b9071acab5a322d4e4b9\nf225eef68b8281688882693085432c16d81dbadaa3df3c2ed508a5547c4b8b18\n2cbe2aab5bfd98acf80d5927a07da8a3aa987a899e28e69a49aca9aa960b45b0\n53079246f09b1f8be89a5912784ef566497df949ac722c37b8b4c641f602217d\ne1c7fcd757c04c263aa2a4a08d7e08055e5b922d850c2a898cf32baf2418e0a1\nfa6e54e2459ef6283fbcdd406b9079950669763106c9d8b16d0aac8815fe894b\ne1c7af9702ca13b36325fdd90110f1b8a03ce3e7aff614a0a2b1b15a1041800b\nb72ceea17cf4a939410c53d5bac0b89eeeb9e2f9cfc6bcdfd9a438c109784adf\n9d2843fc809a040b9287f0c71d93f7c2b3273d39c5ed535a8e130b46d3c97f4d\ne0bf14ef07eec07f1c747a6b5d294cf4d47ac12f1d9282d2de0f808a4c609e4a\n0e2a68646e9583b6b9a75c95840bab3fe259ad8846a82af91f44923f25bac677\n3c8ad0a810731fafb0a95a5445b5800d0be0378909aec60f544c3e7438760b6b\nfeb2b9b16652caab36f65ac444ce9358670e060a90cc422043b8ea8f0b065446\n0b4ed94690003cc77027d8a3c0a06a48bccdf5d6d6770402b4f44ed2673b1329\n06d4f88bf12a3445794fc9db3f1bb4afb8d380def7dc1dc78624c748192fa321\nc96b32dc26b30e54dffe770165d1759d82a5542cfc4a772d8c2cadcd2e2fb1ca\n1517ac15deb0bccf94ce83436e989adba2903489abb6b2eb9f977f3f4d690b31\ne8f6e27faa56bde2c4fd331ceb502ad286857dd67d898f8b86e13a98044f77c9\nef13c7b14a754fd0e07c68a90940f3fe3594afe83c605102c08ccb046b807975\ne69c165c9b833f41da40d17653b80730495803061fe194ca599d53a3367ba3c2\n8db6183ae68f6564178dc0372c58a103da58de056b7b0f8795cccb1cbd4239ee\na2b6af7eeec2f7da99f12110e07d663dfbdc0645dbf9e051f91924855405f022\n13933f1c51af2ca7a39ae3204ed31d68b15f2b74914bf86548d87316170a909e\ne9638b25282a209e9d8bbea3ecfa3ed46c2dba5cb3b38d8fadd66baf9417f5cb\n6b3a9186e34d1710c011e3a16fe8f9dbc207edeaa72c2f7d4b7b7112bfdd1b0a\n1330a7f88ee867f55c828a9154dda3c57b6e596b830b33ff636e46d8d00fb39e\ncc497f82e037ae6f7975a36876d66694e3dfccdd4a5f9ee70883fde704969531\n9cf38a1bbe0c7fbea056326e41636e17d93850a1df92ee50089f30f3c4ade4d3\n07305271d998208c7ac0f998b96ab3e3e182e29b819fd861e52b04e00f9b6be0\n8f5766fa4f3557d0ccc9edf31bf84531d664fc186ae2e7f9c81fe8c4f9f1f2ae\n3b9560c9df5fe69d969a0d6c120a6621bd68991fd5593f3197223c9f09613eb7\n1ae0c78d9ffad6be1e36df5885f657994ffb6eefb5e0949674c34768f001827f\n12f1ba77ae821657e3e96f17de324f9355152cd28c7bc3bb93b0bd0d40d17d35\n2b303f2518e05cfdc4dfa697683ecbd6a949a2eab9cce57b8b14c53ba2265a49\n5c28d22dab35e36b5b02d2fc02738aa6fa7c4cc66c88f5bf25b2be88a4987cfd\n39ca40be4ebe0174ba827e7dba9579fe52b869142fe488f9ea5cff30111d6400\nac3cdd3e1476468fb113f2b977937e70b7214069a06007d987d0f3ade59460c4\n35361b9ee2378b0b2365178ce4fdaff19dc8e52a4eba7cea25387a2e330bea1f\ndac191c9e385c837ee253220a279f05876328864c9c2248258814f7a16030c60\n5a0da56b130757b262ba58ab68340b32d30ba67ae01efd748994a6510bdfb15b\n50c31f5dedaa1866ee9123cfc235591e6516e8210dc0157687a8f081c3aae846\n7481d16e8af6d8caa9c8596c801dd5948cf7361cafb8e01268eaf0cb40ae29d0\nde3bb879970e06fea94930ffce9d4a15ff822de7486a4023fb6bcf27d496e0a5\n2c73d409ed6aea6923de8e6ddcd7615d76b5af4f2be2cee210bb781fd622574e\n042b2fa03ff6e45cbefae7dfb53447fc56da42938717098806352776208567e1\nf07e8372e0bd8a19332de3a09320e82dfb6ac58689a65ec1fb97808e3ecfc84c\n1173378bbcabc629bb8d4f2642cfbe1bfa1a25137db295526810f349baa1e4fe\n9bc755f32a1ed330171ada792e10540d41b177bffbd9b94c2c008ff74a20138b\neb2d0b23fcdc136e434d7fc5e7710559b91756ad1171ed3bae249960384eb4b8\n4ec4c71e91d872b1db3b7ee412aa9b4e66c8e5a03d5f1d98de47ab51dd77014c\n2926ab5e994a095d9ee5fb336746bba506603279bfa91724f6cc868abb2ce5b2\nc145dae2b6128e6c913c8814a5a0b4134c30edc7f97908ddc6e7bb65cf8a58de\n88ffab9273afe5819be1d31040559f763e95cfe230d48681d0b4103ebb92a3f8\n01177bde9bdd61e288e9c5dbd18163eac0a67899acfc1c386f8b261fabd320ab\n89fe9be450e41549b3753c32e2cd3069e82101530513728dc24d8c2c25b06ae0\n91db97dcde55f701a63895445c0bcce07ccf4c82b318494f42c776d9482c8c19\n46fce4e987e770a4a7512b5276e36ec3072c6dc9812e56e11b34baaaf9bed596\ne52d1ac1768e8e0a8b20b94f320d56406f4ea3202920fe665809102ba71932b5\n51ad5c83f6f34b1e87272e8ac300761cb99c9104a20557c09df9cf7ac51625ab\n05c5a60689321d8cef7eb8edd092b9feaba272a94e133aa84a9b7cded15c6824\n3f7ef11eee530323afe1153fbd6285b2302588252609824ed75c05416beae011\n98155779dec43c2e7fc92532951a1ce0dd6613afb3f9c73055f528f993a342c2\n3ea326391cb99feae1d61d95af36536b1c53d0a2c19709f7c85f07715f95a98a\ncdb7722e297692fc187c000a9e64bdfb0c56852bf7ff946f932852d3931043f2\n60b7beabb6b6faf76bd8ff3f2a6fca03fb36ef04f59a9f67d26da5ddbc23bf20\nd82e99326a41155cfc7b4fedb80f69d361c31826743ec395b7aa83c10f9b5eed\n80044f3c258d7e2052d2cfe08f6046189bd0022ad8e6e7890cd31848b2477ecd\n095ba2ca9f4e9ad4bc8c7b2dae33d20d4cd01885c2f172052c1f8bcea593fff3\n4821540e79f626f4d7fa64c0bb4cc5485309e67071d0277a61369645ad3a4d8c\nfbfb1722ef6011fa6b2095aa4e5b32746f64c16af093df2e9bc175409949d440\n795f6f2b72a69435be1621154ade8d4dfb1bfbb0e28da8f08c76cd0521ff176a\nd2e7dd44916af6a1dfa3ecd6194189190b428cb56e2ef4a1bdc5d739ff1cbefc\n39eac4b5934d3707bd30caf67adb3612b37056151b45e9eb73c3bde4b4350148\n23c3ea6ad5be04886842418ea1872bc169f92a890670fe0b8bdd86421400b49d\n57e5ae8fdded5d706eebe573a5a172004e59b9c81fc990d2cf7036344c4335b1\n842a5c879354a84cc837d76b2babf981d4e60c857649054fc69fc59bf14aea72\n51210ac8babc95d58f4f3b497d5db3395a638fe339c5149f284b8dfd340c0b0c\n1984d43b5951b7bdb82423182dce8af2baad5eb25e037c5d976b534a3459f742\n751b5ed1c5bbe4915a7b281d1b1c806c58bbf900d5ca092fe2119ce099e52872\n0e5c8231dd6d7ed8fa5d2c953bd8bdc13781119d2b31a94bf39948d4b3688e58\n8aeae48e2d66e17935058ed16528d28e50e37bbeb1d155450364517018b1b44d\nbb0703befedb3681a2b609063302129628fcc24d88653589b431fb84e4ddb650\nc2f783594de613ebdad8a1324574cad1fd05a37844799928b4da778710e3a4cf\nb85afd46ed46ccad840106074f69ae7c306abf4cead6c66f4fbc0fdeef002570\n25305004426efca887ed5b4f2ef6dcb912ff552089f383d270c1312811b510f4\n11622aab22c5add53e1979fa80a9ac5ab80b3255c901cda700904e4254725a18\n6925971163b35469c55ddf9d36d2e690c988678e2be17e2668807c0fee64d264\n5a8f26899ceae3abc5553bc58674333d43f27d0ead9297619e8169554512d7f2\n9984c12dd44285a3d8a75dd20ebdb5280b95471bcbe5473447fcf750c3b061ba\nbf491a61adf487ccefc79cc514569978f12a7a3420ee046e1c28776c96c550e7\nfb0e2b46b3e57b2b8a6ae7d306fd0eaeb026beb5b13b8c980828f78905369fad\naa7ac9c3b91df9a4d1be00b3aea709995849ae4ece16c126b99c3d0fc0bdc084\nf8486d70022e0d5a8e50a27e9439e37d3bc175c3a3bb19914a4bded2feb81ec1\nfa7e274b027f4f4bfb331bf4fcb58fcdd1b999a775bd2a9002e846d7fe61c6d2\ne29fedf3121af6edcef90f23f54b128efad5fcc3e2236e1f9f59218994460d1a\nf21eb9a2999501fc489873e9eafb986d9e9e780b4eddf332aa72697ec956f63a\n4307133ed0fd2dfafe283677469b7b14b155b17a8da4a81cbce56da716149124\nbb3b20fa7a2b64b58d6eab90dbaff1d560e5e5492f17615b7308cf7670f09a04\n6115d454937c733ed45b1156c2e7d0ed43c093d6416b91533637d5d5f649bca5\n50a5ca5522b0f8362042caa30a4bc87a4a4339710e2de9b2c0c84baebedd073f\n25cacf0e4c4bdba46f4c545e27d20536827ea4a4d5f5e19518fae6ba2d45b5e0\nb247f20752a795594d9ce548b5c0217ef480cc5a0be6794178fc7c017aa8a3bd\n74686310f635ae6153d9e18a0514882d4ccfe9d7dae9f24b393985e8da776880\n1d9a6515ed7bfad3cabd1e13f2a9be17d42dda60f38dc5dd5412b03b938bed86\n0f9cc900eba7eb281e619edc39b5413af1e242ab56171d3a01203c76788d9024\n2f72c89b7adb10f5caf6851acd3a4369972f796d5a1a9816023f5a454dbf5bfa\n5ea34c00df81a76fd79a0198e91ea01efbf7d89d78f9da5253250bb29770c4e8\ndf955af85d48c33fbdff3845d6868920a3b09ceb0b7de798354e80d1f3ec05d6\n3ceeb37751ab5f9d5f7e682958235c0fb224551296108eeded2e000bf86193ad\n5f290f698375727743a699633867f03f2d7801b18627f25628c0b65ace0e766e\ned22bae384ad0305bbba6a3cbb913641106259e2947e77caa437856febd8b604\n7621e8be93bf909cf3893cb2e0b4c75afabcac6ee9ebfa30dc6ba5e9bb572318\nba844429bd3b5bec550ebf2b7a3776f11dcb71c930489a792bbad9f6a1679b6e\n22a32048d0652fe2e3c1dfebce17cf97281087ed892b5d02d83a97dba1b3b221\n4f52eaa45592670902f979905281d7e92e9bbeebb909d5152f97aa49068d3b2e\n8ce26b784b48936a3f8e569e5d96d8f3cf19335c7ca5f139815f26b62ef0be05\n2f436d3d7ad037451cef14021a15b0b10a07048ffd4cc4b4ca987cde5290318d\n7100cdfb146fa044c694c79f3ff3ac98f1067bcdddc054cb3867af0b7e340e39\n81cc10ba0763901afa3f492590664fbddc6fe2ef568d6765579eaa5ff1501a1e\n6b6b303c415557a70b4d60994b9841785a8791b51814f08ce8f0b048c690dc05\nfce223f392df0b93c030960e7a4717203c957f428fa52cf5d206eac92a7ec569\nb1353585ae6a14877eebbd8c402163bec563feab67ed764809e5205bc3f50fcb\n557af616a430215a7f9915872478572a2335fa3817abd8ff113020f023c513b4\n202a3015e22d173b07d87e6d6eeeb3e0b0891c00831843c6a2613c15bfbcaf5a\n8bad5d9e69a88eed3a1965e1876b223b74dedd8f16a2302c7f70ed7c8b5e60e2\n25c39cd88e4b559888007abc4f48955fe377c69b00be16bf9eec8248ebeb6808\n5a80b2f60ae03c29fa29b91f30efb4ca29bc51fb2bc09a7343d0b107ffd02a03\nb26ffb1c6b1d2b5adb3647d37bdb45420e8a115beadb142e3aeedbcc8d0ecd93\n8777fb9ee661d5db7088e3faf04e91f1865418e2723565fe2617d2d8e106a230\na2dcb6a4502528d22457a4399cb7f9e4f788a03d6c8b5757cf59267fd86ac4f9\n21675f6da1a90156bbdfa77facf6df331491cd2cde707e509b8e5d03ba1b6781\neacd2ac3eeabb5f5ac4d0d8f5b10676e7357557c23bd6412c625d7944302c969\n561c704f937fe5304e1704b20352a758d6237e52c4a356a08f9893743a5c20da\n6a817899bb2edbadbf4234e1ece52b9b3f3e29095f0975259c931b67595f0ce0\ndb8e4ccd5f6fdfdda07663d252bd05fd4ca58fa54a9fa6acceabd97f2313c59d\n195cbc3bfb55f9050d5e3ec4e42f883635f18d17efb2a0ab333e09c2521705be\naa147b6717c816e57d38adfb2f4658249a3a345b337251b7537cd305c6424dbf\nb204417f4c36086edaa8da348dc065aa5a7f68a0ad3e3676a7c240e76ddc8786\n96b56cd4e70c28c3009185ae13ad4e96c8522735074ad649cabf39201903e974\n12967a45b574790d727dc68222dff726fd162dbfee4964afbe6549abeead5264\na033fb29e70f1d17fe58934bfdd5ee6defe6056ea4a0e39a39b7fc1a6da06713\nf952bc20c689bdddb94bd67997f60f31fa6239387089deee5b687455a5c06fa9\nfe941781f0d9835d8d020cc6286c2fb8ed5906eccffacadd71ee0b7c7b67d8c7\naaa95f9cb24fd22bea989e0e0919a4ea35fac630a9090346da895bb5b6e1c1ba\nff90f1e16665998ab7612444979edefd96f1f701d13950e0ca2daa7787735fc8\n4b268e36cba6d7de0506dc5353f3d13ad666cba8f8c56e27e44b57873adee581\nfafd1f33a85b6169d4794b1d73940c134f11dfde03ccc5709f6d806cfffdb6fd\nf9361520d0023ac6aa3c93b843d8cd8a652a665eb31d6b75d752e7679a9e1327\nd0adf92820acc78b0793b9f0307c776c201a408a883f99f9d2ade3960b1e62e2\ndb5d6ca4115a028f87f77651c95bd71456ba087709827b05a80ff78746cd3c09\n72eec0baa7ebc8a05043e18e63517fb66e333973dfa6bc796af520e8efbae640\na2f4b94f244d365b76fb3e229726dd7c61478dff4d616cdceaec1ad70d9cefd6\n0e9e6affa41f34b777da7174b3281acda204977bcedb3f5f9f0c5d77607237a6\n9d6780dd18cef875257fd719d237a35864498978239cc0933a9ad0fb8ac74f3d\n869fab0c30e8001a2df0ada8f56de43c5e9a7dc78220720dae05f0fff948adf9\n0e8319eafa3fc8e936c9c040b1498e7eafc36f03bb4cd11a6fed37b7a8d05b1d\n00b5f36799e9556526f5e5f2205dd641ee39a4bd6c8ec20a36473eadfe1a499e\n88284d2fb544b7bdb637868345ae4b3dca6bc0754bad59df4558d2d608faf166\n68daeac6bfb73db431a3146628d371c2d158a1ba65c8d2d47ceec7addae77864\n042ef587a6d6c04dce664bf83492d164d2fc00c1313c220bfdd7a30dede201c5\n1e84d9573c79235a8d847d0a4c231fe009058f5848c775e343c61835c7c8e025\n44dbe77ccfff9e9c950ace49091771604234e586c1335904da22349a847ade3c\n060aec69c2987eb1f3332d8b66e59be53edab3da137d59cc6efa0f579f8a1d03\n882c720c27834570c10bf892f79b30340ead8535881b11171b2040fb6637140b\ne927369f803a4ff311d78d7e68f4b5f8628fdcfa2cc376442d78e6f47cb378eb\n31f079902cd32d6aec688f02a7365b66797de1ea022afec2f3aae36fe01a3e5e\n6cc49c79ca23dc10ed8071eea3a0f8924a0dcc610f842e4e30c1104f859ac970\n06c7490195599c65393be11269c8dd7247c96d632523256f59edeb144329b8da\nb35303c922432e92394a95196dad464e35858f00e6a27320cf515b7b8af90d06\n82e89f09afb605862d14eab6a99218b3f66f11ea2f345629c402bd9aeb25e3e9\n8734a0ca4a814d824ee4ca5383c6eb8ff1458c767dd9b71530c5f01be2d2611c\nf9644c28f3f52ac748749b54eb652f76630e3a62b63a3562a54144c306beddfd\n557e154c7d4931bafe9a9136c3aae071b00e7204150cece0d45e10bd736b633c\n8abf3817168828ba17b23c8ef8ee35119c43cd7fe068e1f016aadc734d4338d7\n8abd60567f307d6ec471f99b03cc7b5e8140dc07f726303c2185590f9f2224c1\n52bf01b038ae1e963098a309edf98ce5ba1ab235e1190ba23732e42841b2bf69\n36560701e1653df36a29c8c3254d402d0140f5ffeda15ded4728c176e3f39c35\n48b5a2be25266587b52bda256f255c940adddbfcaf37ba2500213239f12dc7e0\n0b61230190a4380917962c18effc6774f6db08b799c5966ca7133fadfd7e2b25\n75116286d1c2a40545f973870cbb5cf97691afe304ca7b586f198c426a71dfa8\ncedbe3d94bda4267b9b5ff1454ac7d54f59c5d94588bb274601cee186b9ee892\n5f359ec5bc402442bba33b2663d564461ca130d7f1405b0467027ec1e27bbec4\n8d51c674c81b66ec733c4c57410956520f9c16708aaee0d9ae34f1050f6412c7\n7a23c8c3364dad8e407319772c9b201c49b75dea4685566d9c912acdb47aece3\nf9786e47398891c07b0269e74e2eb935991c9d7a835eb88bc04eb2b195ddeb02\n38dcd1e4bb773e269ad58fa9e2f5482db94a661f065bfafee3ccc1c812e9fac3\n31fd70975e3a0c72d37207d6c90f998103a821c35734f0153950e5f72ff6a8ac\ncb831f57267142dcc4079c915a4d01807fdc883e15a15b67e8cea1ef8d26e4fc\nb55c69418d7a4dcef51473a037050cc43e204fc7de2392905800993bbccaf459\n3bd84187fd1c295d111867930dd068988631f5d0abb9adc48b7ca8134f8a3baf\n3569f5ffbf19291022b3e13fdabbf0ddf64fef601cf97dc70ed2e4355de38f1c\n0ca81966adfc95cf03e794d875025af92bbeaacd9ee58b49c3f0b67d72b13a0a\n971076819781d91814c47a0a3b53f767b7630fb55df3d2706d834b127d56fc95\nb9b30ab934839b8324c9ee0147f0bbec998eb1b2939a2102c59c896b9f57c9b2\nfc138cfd94fd5c512bd83e30e8356e983cceb0de72224f78b3c8a98359e46f22\nc19ab808b70c4287397eade3b28a311244385d3d49fb80adc4f90f32366fcf42\neaea8d05392164a48f03184563922bcbeb78376f512b9a289325a61c0c357e40\nbb3dbeebf870ec12ef096a8997bb6ec55251ad55bd881ebdda84056556380935\nb0b8eb1f74ef96bf02375a30dc53795da638252a12a2e9bc18bfd7ff5aa7a8f4\n4a6bb4a34f1c94a781a129fc975823bd16a6df7c5d75b7f6dff55ac5f82e3e2f\n572f339f48024e93f0c59fb1fc95bacf7bf5fd7c683c9b159c3b5d937c3a2110\ne78889021ebbbbe76b1f984317d310ea61f7b5cdb4ed1754a35adc9c6924c3e0\n2e3b157261eea5092e0e7a914a259eea2b14192343680a18710db9f82e54c920\n369587bcdeed8f8acb72d2565ca89ea92b6b58bb861012ccab7270200ed5cef3\n9bdc58f4831161e8ce4ef5c6fc839deb8216482d906d60c1a3292de191b40c79\n85529eae01de8fadd442ec8bfa775366070a9e193138a4c6f6eca7ff554c57a0\n19346015d6ed5dfe8b9dd876a207e7247deaa1e42a41c3edccb32d47e5fa97c0\n9bf3f8324a366856d6c6df8f295da2a9164a99b6e66adf4247dd79bbf54525dd\nbcf518651fd8b374cbca6ac532ed443a1c952ce148a67cc655d92b670ab76c64\ncba90089f1d252ab55d93cfd0ec1545e79b65c5337fc57e46ad6ddcf5ca56204\n867e467d3982d77c2e603fee7ec4b57bd8718e5be9203666459815b7428679b2\n134188b7c2c89f64b7426e0dde73f586a7a86a4cc4136bcd5b09b2482aaf3ea2\n6a9c99cdc852ae0a7262b57c06143f1a6528b02cdd69b9fd5edc635873997b4d\n7c5644daa467783e154ad0a787e72bf5a627f712267198d9368b480a4e764627\nb268d7f1500b8e155615bf9e59bedc125774802dcbe33451e222f6a9ba24afc1\n92933742c74822f138baac4bddcfbf447dea77a4e913028db069e802014b5d57\nb0c7d6b7a727742eebb6a7c7a2231c94d63fbe66fa8030f3b378006027ceb4b2\n74d8d75d001c7b4d0225ec9cb04ca7f5e1668b44682847a8b14dda4ecd87fda2\n6b1694a2810f90537c403ff242d0accc8b73fa0088d668fb4fd50c4a0b0aafe3\n0dddc6e893c1bb127147fd1b35254e2ef659f023cd826cbf5e400dfba85f4df9\nf70b30a42df485bf5dd6c620e37c82bedef5841131716bc5eeb40aefec8c0379\nf9348a1d7ad0618a422d85300bc0f4208a5b4baf9dd1f568da943f0023eec988\n21187716ec2104282a7fed77b0c5b01e78d5d9d5d99994a9f232859ce68a62a9\ne6960f557f153d7101dd98b7836d7841d3180be3b34a99d4434af82db181de42\ne7f3fd86d86678ea86c4ea4d0af845955141ca4f9266f3ef69c2ce9b73ae1558\n9dd98a8a0802572fba00fc509918a64f1dcabd06286039e75042d53d472ae66e\n38ecb6e6795e3dd12757255e786909f306fc17d14ed432f5107aac6cc50236b7\nd381ad2c4da239669d94cb276610a846e991f508a75e1a3a851be789b9a3f75b\nf5d7dfde15eadd55e7710d79b5a4127b5e9f85f6bceace031aa9ad412541848d\n59dd3f66886672db5d90f51fd15334eb973e64baa4181186cc3c090b2a5bbb70\ne9e1fd9420a31674e9e517b1dc0196fcb5624668785a65dfa60a0944386beda0\n66e2a3d871913d23001c0b5f22c4136fa48e6fbd636fe0bbc104cba53ecd15b7\n0034db9200070b7924ab31ea318cffc35cb44bbda45e04f64516b48bbaceed37\n56a2aaa5d5c0a2d06f71a5ca689c8c8afc991638fff960d060555d9ee7a13868\n434853e22d4d9aed6231039517aa713e67e7c08467c687a21bfb00e6c99c9b15\n51859fb8f437c77bca2b0fc97a36ee9b552645b83ddcd2ae48049085693c356c\n53b214b9216d5466852340dbb92eadc60bb6225d9c08bb9f5e9f50e40dfb7c12\n2b5126c6e11393d04691831af2707bf11e0c4e887511a59442469df76bc8eb2e\nd2e97d09b6b2f1b533ac64d85d454f57702af92cc88d5ddc46388d6c203ba06a\nf57846d420ef1727d97d964da29018245d91f1e37e3e3f9f04e02d997b0c28fe\n4c99293e87c978606c3a0c7ca1d121c60ac58fad627be407057eae2ebc2074dd\nfd2bd9fb017ad048ead3d1243b7634701508034a934c81a9f63a05b7319676d7\nbb9af94fbe826f84d4149e81b46424e482c8c1c655affecb4393177d768eaa24\na68a71e4faf578e57865b15f459315a26ddf6e39bd3d16958a3a8cbeab793eaa\n533eaa3d89e78d292fe37f0c23e32abfd50b2c9fba8261331c66458340bb4cd5\n4e7a7cac3df5ca530fbffd93789357877ad2fe127377b899340416d6100e2165\n64c62ed803d484656ef5ff7587902285671f280de39228b9432ba46c3ecbdd23\n46222998ef3c528cec6da555eb72092d97664cf35ea21e31ffb70e8b8102ddf6\n0203d3dddaa7593a8dc0b1c6af796d891e80860e6bba501e4c38dd5c6b5a6f35\na38ef0c7cd4ab7cce0e17fae913eec2572565070169cce8517c37b21699fe4d3\n58439dcec0066047253d42a74ba564d2fc7ccf34b3b4e77fbac09d950c3c134c\n5671c64b9964c124d123a299d2070826fde61b7f637bf87739e7a0de70ef82af\nc901821eabb31969a27596e9826dd506912d05918ddd2981d5fb153526683f83\n04bbb13678af6d8a65aaae58240688caf7a8419f7bacf078dae7495ab646fc40\nc9004cbabf4c76143e33fe49fed460a102129b9f6cdda0797e53df9b9db99890\n7dc89ecb49ee18cd7556b44b096c9337f6a5618b589c6d7c87ea0f292bb446fe\nc901b120180e3b514e3e7e32e52028a30cfd6879068a68b7ef5db202f575a6f3\n52748c45a3509d747d672b446efd09b0dcab7b3f8808c011a0470eb5c9d8d632\n0f413186fdf227c7f9c45c403ef93db5fb63819de4ca368f1b9387dfb0f039e8\n2c47f56fa0d3073c901393803ae628eba7313821a01b07918efa4d901aca044e\n90d0227813c537cdc2c906e44140bdcb8717e95b7597ad7c01b51b7dac732e65\nfa3870fe8865ae6dbc96b5a984e2e363c4b67a3a07fe4eb42044112ecfff74f4\n09329f03a55e1f57656f88a08e597bfccb97a2b0bc0c26db9aa5bc5f1d1bafa3\n65f32c6ae5de5f798233ed6878583d8335e8988021438e992be94f6b73608413\nb83693b45e539261664f851652bd9458e643bd60628d0acb48a0edd350749e13\n9e480bb10cfb50b4fa0e37348d2f5ebc3e3f3457128b9793ef1359076da9e92d\ne3bbd59ccc0c0327867bd7895a19cb93fdcd6ef8d459ccabadb1e0bc6896b456\nb13cab755da348b349da1b485947a23d05e9bb5dfeb8300f8fef30d7f09d288f\n681ee6e23d21f76f806440680e7913d323a264fd6d69d4be33527e050856f8d7\n20fcf33f81e5021271c2cefd7b1c6a2dc9e207140be0030fd866fb65e33cf5fb\n8879dd70eed5e887537c45d136be8bb191bd9dc4cea400137903a12b66dcd359\n9b6c2e43306759110af0878c8f37c8daf847657c2bd68d5c3ca105b332d18d5e\n03269eedc1ae92f4e45c79915981c1f32b5a39c46c358708460301ca4298bbb4\n5b91e0d45fd1de756c6885545bdf5bce1cd40bb0c92c481a629b0d8dafb6b895\n995c6777d9355af0b03720d3c7456ad60eaa5a80549bb54c0820e000eb30a3e6\nf81c1cdc55b70d902a432d13a233c63ae54f98718d6ddae3c6aabebc65760e59\nd87abb67a5171a4ec2b2377bb5a39f\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000\ncleartomark\n%%EndResource\n/F621_0 /AMYDOG+NimbusRomNo9L-ReguItal 1 1\n[ /.notdef/.notdef/fi/fl/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright\n  /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash\n  /zero/one/two/three/four/five/six/seven\n  /eight/nine/colon/semicolon/less/equal/greater/question\n  /at/A/B/C/D/E/F/G\n  /H/I/J/K/L/M/N/O\n  /P/Q/R/S/T/U/V/W\n  /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore\n  /quoteleft/a/b/c/d/e/f/g\n  /h/i/j/k/l/m/n/o\n  /p/q/r/s/t/u/v/w\n  /x/y/z/braceleft/bar/braceright/asciitilde/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/bullet/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section\n  /currency/copyright/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl\n  /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet\n  /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown\n  /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent\n  /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron\n  /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n  /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef\n  /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef\n  /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef\n  /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef]\npdfMakeFont\n612 792 false pdfSetup\n%%EndSetup\n%%Page: 1 1\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n117.435 701.916 Td\n/F116_0 24.7902 Tf\n(bzip2) 63.3638 Tj\n-278 TJm\n(and) 44.077 Tj\n-278 TJm\n(libbzip2,) 99.1856 Tj\n-278 TJm\n(ver) 37.2101 Tj\n15 TJm\n(sion) 50.9687 Tj\n-278 TJm\n(1.0.6) 55.1334 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n90.493 661.631 Td\n/F116_0 20.6585 Tf\n(A) 14.9154 Tj\n-278 TJm\n(pr) 20.6585 Tj\n20 TJm\n(ogram) 63.1324 Tj\n-278 TJm\n(and) 36.7308 Tj\n-278 TJm\n(librar) 51.6669 Tj\n-10 TJm\n(y) 11.4861 Tj\n-278 TJm\n(f) 6.8793 Tj\n20 TJm\n(or) 20.6585 Tj\n-278 TJm\n(data) 42.4739 Tj\n-278 TJm\n(compression) 128.5785 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n207.676 503.285 Td\n/F116_0 11.9552 Tf\n(J) 6.6471 Tj\n20 TJm\n(ulian) 27.9034 Tj\n-278 TJm\n(Se) 14.6212 Tj\n15 TJm\n(war) 20.5988 Tj\n20 TJm\n(d,) 10.6282 Tj\n-278 TJm\n(http://www) 61.103 Tj\n40 TJm\n(.bzip.or) 42.5127 Tj\n15 TJm\n(g) 7.3046 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 2 2\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n72 709.534 Td\n/F116_0 14.3462 Tf\n(bzip2) 36.6689 Tj\n-489 TJm\n(and) 25.5075 Tj\n-488 TJm\n(libbzip2,) 57.3991 Tj\n-542 TJm\n(ver) 21.5336 Tj\n15 TJm\n(sion) 29.4958 Tj\n-488 TJm\n(1.0.6:) 36.6832 Tj\n-766 TJm\n(A) 10.358 Tj\n-488 TJm\n(pr) 14.3462 Tj\n20 TJm\n(ogram) 43.842 Tj\n-489 TJm\n(and) 25.5075 Tj\n-489 TJm\n(librar) 35.8798 Tj\n-10 TJm\n(y) 7.9765 Tj\n-488 TJm\n(f) 4.7773 Tj\n20 TJm\n(or) 14.3462 Tj\n-489 TJm\n(data) 29.4958 Tj\n72 692.319 Td\n(compression) 89.2907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 680.364 Td\n/F122_0 9.9626 Tf\n(by) 9.9626 Tj\n-250 TJm\n(Julian) 23.8007 Tj\n-250 TJm\n(Se) 9.9626 Tj\n25 TJm\n(w) 7.193 Tj\n10 TJm\n(ard) 12.7222 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 663.427 Td\n(V) 7.193 Tj\n111 TJm\n(ersion) 24.3486 Tj\n-250 TJm\n(1.0.6) 19.9252 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(6) 4.9813 Tj\n-250 TJm\n(September) 42.61 Tj\n-250 TJm\n(2010) 19.9252 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 651.472 Td\n(Cop) 16.6077 Tj\n10 TJm\n(yright) 23.8007 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-250 TJm\n(\\251) 7.5716 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-250 TJm\n(1996-2010) 43.1679 Tj\n-250 TJm\n(Julian) 23.8007 Tj\n-250 TJm\n(Se) 9.9626 Tj\n25 TJm\n(w) 7.193 Tj\n10 TJm\n(ard) 12.7222 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 633.938 Td\n/F122_0 7.9701 Tf\n(This) 14.1708 Tj\n-250 TJm\n(program,) 28.9952 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n119.151 633.938 Td\n/F124_0 7.9701 Tf\n(bzip2) 23.9103 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n143.061 633.938 Td\n/F122_0 7.9701 Tf\n(,) 1.9925 Tj\n-250 TJm\n(the) 9.7395 Tj\n-250 TJm\n(associated) 32.7571 Tj\n-250 TJm\n(library) 21.2483 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n216.768 633.938 Td\n/F124_0 7.9701 Tf\n(libbzip2) 38.2565 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n255.025 633.938 Td\n/F122_0 7.9701 Tf\n(,) 1.9925 Tj\n-250 TJm\n(and) 11.5088 Tj\n-250 TJm\n(all) 7.9701 Tj\n-250 TJm\n(documentation,) 49.3668 Tj\n-250 TJm\n(are) 9.7315 Tj\n-250 TJm\n(cop) 11.5088 Tj\n10 TJm\n(yright) 19.0406 Tj\n-250 TJm\n(\\251) 6.0573 Tj\n-250 TJm\n(1996-2010) 34.5344 Tj\n-250 TJm\n(Julian) 19.0406 Tj\n-250 TJm\n(Se) 7.9701 Tj\n25 TJm\n(w) 5.7544 Tj\n10 TJm\n(ard.) 12.1703 Tj\n-310 TJm\n(All) 10.1858 Tj\n-250 TJm\n(rights) 18.1559 Tj\n-250 TJm\n(reserv) 19.471 Tj\n15 TJm\n(ed.) 9.5163 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 616.404 Td\n(Redistrib) 29.2264 Tj\n20 TJm\n(ution) 16.3865 Tj\n-250 TJm\n(and) 11.5088 Tj\n-250 TJm\n(use) 10.6241 Tj\n-250 TJm\n(in) 6.2007 Tj\n-250 TJm\n(source) 20.802 Tj\n-250 TJm\n(and) 11.5088 Tj\n-250 TJm\n(binary) 20.3636 Tj\n-250 TJm\n(forms,) 20.5868 Tj\n-250 TJm\n(with) 14.1708 Tj\n-250 TJm\n(or) 6.6391 Tj\n-250 TJm\n(without) 24.3566 Tj\n-250 TJm\n(modi\\002cation,) 42.2894 Tj\n-250 TJm\n(are) 9.7315 Tj\n-250 TJm\n(permitted) 30.5494 Tj\n-250 TJm\n(pro) 10.6241 Tj\n15 TJm\n(vided) 17.7096 Tj\n-250 TJm\n(that) 11.9552 Tj\n-250 TJm\n(the) 9.7395 Tj\n-250 TJm\n(follo) 15.0555 Tj\n25 TJm\n(wing) 15.9402 Tj\n-250 TJm\n(conditions) 33.2114 Tj\n-250 TJm\n(are) 9.7315 Tj\n-250 TJm\n(met:) 14.1708 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n73.993 590.899 Td\n(\\225) 2.7895 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-450 TJm\n(Redistrib) 29.2264 Tj\n20 TJm\n(utions) 19.4869 Tj\n-250 TJm\n(of) 6.6391 Tj\n-250 TJm\n(source) 20.802 Tj\n-250 TJm\n(code) 15.0475 Tj\n-250 TJm\n(must) 15.5018 Tj\n-250 TJm\n(retain) 18.1479 Tj\n-250 TJm\n(the) 9.7395 Tj\n-250 TJm\n(abo) 11.5088 Tj\n15 TJm\n(v) 3.9851 Tj\n15 TJm\n(e) 3.5387 Tj\n-250 TJm\n(cop) 11.5088 Tj\n10 TJm\n(yright) 19.0406 Tj\n-250 TJm\n(notice,) 21.4714 Tj\n-250 TJm\n(this) 11.5168 Tj\n-250 TJm\n(list) 9.7474 Tj\n-250 TJm\n(of) 6.6391 Tj\n-250 TJm\n(conditions) 33.2114 Tj\n-250 TJm\n(and) 11.5088 Tj\n-250 TJm\n(the) 9.7395 Tj\n-250 TJm\n(follo) 15.0555 Tj\n25 TJm\n(wing) 15.9402 Tj\n-250 TJm\n(disclaimer) 33.2034 Tj\n55 TJm\n(.) 1.9925 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n73.993 573.365 Td\n(\\225) 2.7895 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-450 TJm\n(The) 12.3935 Tj\n-285 TJm\n(origin) 19.0406 Tj\n-284 TJm\n(of) 6.6391 Tj\n-285 TJm\n(this) 11.5168 Tj\n-285 TJm\n(softw) 17.7096 Tj\n10 TJm\n(are) 9.7315 Tj\n-284 TJm\n(must) 15.5018 Tj\n-285 TJm\n(not) 10.1858 Tj\n-285 TJm\n(be) 7.5238 Tj\n-285 TJm\n(misrepresente) 44.2659 Tj\n1 TJm\n(d;) 6.2007 Tj\n-303 TJm\n(you) 11.9552 Tj\n-284 TJm\n(must) 15.5018 Tj\n-285 TJm\n(not) 10.1858 Tj\n-285 TJm\n(claim) 17.7096 Tj\n-284 TJm\n(that) 11.9552 Tj\n-285 TJm\n(you) 11.9552 Tj\n-285 TJm\n(wrote) 18.1479 Tj\n-284 TJm\n(the) 9.7395 Tj\n-285 TJm\n(original) 24.795 Tj\n-285 TJm\n(softw) 17.7096 Tj\n10 TJm\n(are.) 11.724 Tj\n-828 TJm\n(If) 5.3081 Tj\n-285 TJm\n(you) 11.9552 Tj\n-285 TJm\n(use) 10.6241 Tj\n-284 TJm\n(this) 11.5168 Tj\n-285 TJm\n(softw) 17.7096 Tj\n10 TJm\n(are) 9.7315 Tj\n-285 TJm\n(in) 6.2007 Tj\n-284 TJm\n(a) 3.5387 Tj\n79.97 563.801 Td\n(product,) 26.3412 Tj\n-250 TJm\n(an) 7.5238 Tj\n-250 TJm\n(ackno) 19.0326 Tj\n25 TJm\n(wledgment) 35.4191 Tj\n-250 TJm\n(in) 6.2007 Tj\n-250 TJm\n(the) 9.7395 Tj\n-250 TJm\n(product) 24.3487 Tj\n-250 TJm\n(documentation) 47.3743 Tj\n-250 TJm\n(w) 5.7544 Tj\n10 TJm\n(ould) 14.1708 Tj\n-250 TJm\n(be) 7.5238 Tj\n-250 TJm\n(appreciated) 36.7342 Tj\n-250 TJm\n(b) 3.9851 Tj\n20 TJm\n(ut) 6.2007 Tj\n-250 TJm\n(is) 5.3161 Tj\n-250 TJm\n(not) 10.1858 Tj\n-250 TJm\n(required.) 28.5489 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n73.993 546.267 Td\n(\\225) 2.7895 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-450 TJm\n(Altered) 23.9023 Tj\n-250 TJm\n(source) 20.802 Tj\n-250 TJm\n(v) 3.9851 Tj\n15 TJm\n(ersions) 22.5793 Tj\n-250 TJm\n(must) 15.5018 Tj\n-250 TJm\n(be) 7.5238 Tj\n-250 TJm\n(plainly) 22.1409 Tj\n-250 TJm\n(mark) 16.3786 Tj\n10 TJm\n(ed) 7.5238 Tj\n-250 TJm\n(as) 6.6391 Tj\n-250 TJm\n(such,) 16.6017 Tj\n-250 TJm\n(and) 11.5088 Tj\n-250 TJm\n(must) 15.5018 Tj\n-250 TJm\n(not) 10.1858 Tj\n-250 TJm\n(be) 7.5238 Tj\n-250 TJm\n(misrepresented) 48.251 Tj\n-250 TJm\n(as) 6.6391 Tj\n-250 TJm\n(being) 17.7096 Tj\n-250 TJm\n(the) 9.7395 Tj\n-250 TJm\n(original) 24.795 Tj\n-250 TJm\n(softw) 17.7096 Tj\n10 TJm\n(are.) 11.724 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n73.993 528.733 Td\n(\\225) 2.7895 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-450 TJm\n(The) 12.3935 Tj\n-250 TJm\n(name) 17.2632 Tj\n-250 TJm\n(of) 6.6391 Tj\n-250 TJm\n(the) 9.7395 Tj\n-250 TJm\n(author) 20.3636 Tj\n-250 TJm\n(may) 13.7245 Tj\n-250 TJm\n(not) 10.1858 Tj\n-250 TJm\n(be) 7.5238 Tj\n-250 TJm\n(used) 14.6092 Tj\n-250 TJm\n(to) 6.2007 Tj\n-250 TJm\n(endorse) 24.787 Tj\n-250 TJm\n(or) 6.6391 Tj\n-250 TJm\n(promote) 26.5643 Tj\n-250 TJm\n(products) 27.449 Tj\n-250 TJm\n(deri) 12.3935 Tj\n25 TJm\n(v) 3.9851 Tj\n15 TJm\n(ed) 7.5238 Tj\n-250 TJm\n(from) 15.4939 Tj\n-250 TJm\n(this) 11.5168 Tj\n-250 TJm\n(softw) 17.7096 Tj\n10 TJm\n(are) 9.7315 Tj\n-250 TJm\n(without) 24.3566 Tj\n-250 TJm\n(speci\\002c) 24.3487 Tj\n-250 TJm\n(prior) 15.4939 Tj\n-250 TJm\n(written) 22.5793 Tj\n-250 TJm\n(permission.) 36.9733 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 511.198 Td\n(THIS) 17.7096 Tj\n-401 TJm\n(SOFTW) 27.0107 Tj\n120 TJm\n(ARE) 15.9402 Tj\n-401 TJm\n(IS) 7.0854 Tj\n-400 TJm\n(PR) 9.7474 Tj\n40 TJm\n(O) 5.7544 Tj\n50 TJm\n(VIDED) 24.787 Tj\n-401 TJm\n(BY) 11.0705 Tj\n-401 TJm\n(THE) 15.4939 Tj\n-401 TJm\n(A) 5.7544 Tj\n55 TJm\n(UTHOR) 27.449 Tj\n-401 TJm\n(\"AS) 13.4376 Tj\n-401 TJm\n(IS\") 10.3372 Tj\n-401 TJm\n(AND) 17.2632 Tj\n-400 TJm\n(ANY) 17.2632 Tj\n-401 TJm\n(EXPRESS) 34.1041 Tj\n-401 TJm\n(OR) 11.0705 Tj\n-401 TJm\n(IMPLIED) 32.3188 Tj\n-401 TJm\n(W) 7.5238 Tj\n120 TJm\n(ARRANTIES,) 46.7128 Tj\n-401 TJm\n(INCLUDING,) 46.2585 Tj\n-401 TJm\n(B) 5.3161 Tj\n11 TJm\n(UT) 10.6241 Tj\n72 501.634 Td\n(NO) 11.5088 Tj\n40 TJm\n(T) 4.8697 Tj\n-304 TJm\n(LIMITED) 32.7571 Tj\n-304 TJm\n(T) 4.8697 Tj\n18 TJm\n(O,) 7.7469 Tj\n-305 TJm\n(THE) 15.4939 Tj\n-304 TJm\n(IMPLIED) 32.3188 Tj\n-304 TJm\n(W) 7.5238 Tj\n120 TJm\n(ARRANTIES) 44.7202 Tj\n-304 TJm\n(OF) 10.1858 Tj\n-304 TJm\n(MERCHANT) 44.7202 Tj\n93 TJm\n(ABILITY) 31.8724 Tj\n-304 TJm\n(AND) 17.2632 Tj\n-305 TJm\n(FITNESS) 31.442 Tj\n-304 TJm\n(FOR) 15.5018 Tj\n-304 TJm\n(A) 5.7544 Tj\n-304 TJm\n(P) 4.4314 Tj\n92 TJm\n(AR) 11.0705 Tj\n60 TJm\n(TICULAR) 34.5344 Tj\n-304 TJm\n(PURPOSE) 34.9887 Tj\n-304 TJm\n(ARE) 15.9402 Tj\n-305 TJm\n(DIS) 12.8398 Tj\n1 TJm\n(-) 2.654 Tj\n72 492.07 Td\n(CLAIMED.) 38.2963 Tj\n-576 TJm\n(IN) 8.4085 Tj\n-287 TJm\n(NO) 11.5088 Tj\n-288 TJm\n(EVENT) 26.118 Tj\n-288 TJm\n(SHALL) 25.6797 Tj\n-288 TJm\n(THE) 15.4939 Tj\n-287 TJm\n(A) 5.7544 Tj\n55 TJm\n(UTHOR) 27.449 Tj\n-288 TJm\n(BE) 10.1858 Tj\n-288 TJm\n(LIABLE) 28.3337 Tj\n-288 TJm\n(FOR) 15.5018 Tj\n-288 TJm\n(ANY) 17.2632 Tj\n-287 TJm\n(DIRECT) 28.78 Tj\n74 TJm\n(,) 1.9925 Tj\n-288 TJm\n(INDIRECT) 37.1885 Tj\n74 TJm\n(,) 1.9925 Tj\n-288 TJm\n(INCIDENT) 37.6268 Tj\n93 TJm\n(AL,) 12.6167 Tj\n-288 TJm\n(SPECIAL,) 34.3193 Tj\n-288 TJm\n(EXEMPLAR) 42.9509 Tj\n65 TJm\n(Y) 5.7544 Tj\n129 TJm\n(,) 1.9925 Tj\n72 482.506 Td\n(OR) 11.0705 Tj\n-299 TJm\n(CONSEQ) 31.8804 Tj\n10 TJm\n(UENTIAL) 34.5265 Tj\n-300 TJm\n(D) 5.7544 Tj\n40 TJm\n(AMA) 18.5942 Tj\n40 TJm\n(GES) 15.0555 Tj\n-299 TJm\n(\\(INCLUDING,) 48.9125 Tj\n-299 TJm\n(B) 5.3161 Tj\n10 TJm\n(UT) 10.6241 Tj\n-299 TJm\n(NO) 11.5088 Tj\n40 TJm\n(T) 4.8697 Tj\n-300 TJm\n(LIMITED) 32.7571 Tj\n-299 TJm\n(T) 4.8697 Tj\n18 TJm\n(O,) 7.7469 Tj\n-299 TJm\n(PR) 9.7474 Tj\n40 TJm\n(OCUREMENT) 49.59 Tj\n-299 TJm\n(OF) 10.1858 Tj\n-300 TJm\n(SUBSTITUTE) 47.8206 Tj\n-299 TJm\n(GOODS) 27.449 Tj\n-299 TJm\n(OR) 11.0705 Tj\n-300 TJm\n(SER) 14.6172 Tj\n80 TJm\n(VICES) 23.0256 Tj\n1 TJm\n(;) 2.2157 Tj\n72 472.942 Td\n(LOSS) 19.4869 Tj\n-360 TJm\n(OF) 10.1858 Tj\n-360 TJm\n(USE,) 17.048 Tj\n-360 TJm\n(D) 5.7544 Tj\n40 TJm\n(A) 5.7544 Tj\n111 TJm\n(T) 4.8697 Tj\n93 TJm\n(A,) 7.7469 Tj\n-360 TJm\n(OR) 11.0705 Tj\n-359 TJm\n(PR) 9.7474 Tj\n40 TJm\n(OFITS;) 24.3566 Tj\n-360 TJm\n(OR) 11.0705 Tj\n-360 TJm\n(B) 5.3161 Tj\n10 TJm\n(USINESS) 32.3267 Tj\n-360 TJm\n(INTERR) 28.78 Tj\n40 TJm\n(UPTION\\)) 31.8724 Tj\n-360 TJm\n(HO) 11.5088 Tj\n35 TJm\n(WEVER) 28.3337 Tj\n-360 TJm\n(CA) 11.0705 Tj\n55 TJm\n(USED) 20.8099 Tj\n-359 TJm\n(AND) 17.2632 Tj\n-360 TJm\n(ON) 11.5088 Tj\n-360 TJm\n(ANY) 17.2632 Tj\n-360 TJm\n(THEOR) 26.5643 Tj\n65 TJm\n(Y) 5.7544 Tj\n-360 TJm\n(OF) 10.1858 Tj\n-360 TJm\n(LIABI) 21.2483 Tj\n1 TJm\n(LITY) 18.1479 Tj\n128 TJm\n(,) 1.9925 Tj\n72 463.378 Td\n(WHETHER) 38.9578 Tj\n-247 TJm\n(IN) 8.4085 Tj\n-247 TJm\n(CONTRA) 32.7651 Tj\n40 TJm\n(CT) 10.1858 Tj\n74 TJm\n(,) 1.9925 Tj\n-247 TJm\n(STRICT) 27.457 Tj\n-247 TJm\n(LIABILITY) 39.3962 Tj\n129 TJm\n(,) 1.9925 Tj\n-247 TJm\n(O) 5.7544 Tj\n1 TJm\n(R) 5.3161 Tj\n-247 TJm\n(T) 4.8697 Tj\n18 TJm\n(OR) 11.0705 Tj\n60 TJm\n(T) 4.8697 Tj\n-247 TJm\n(\\(INCLUDING) 46.92 Tj\n-247 TJm\n(NEGLIGENCE) 50.4667 Tj\n-247 TJm\n(OR) 11.0705 Tj\n-247 TJm\n(O) 5.7544 Tj\n40 TJm\n(THER) 20.8099 Tj\n55 TJm\n(WISE\\)) 22.133 Tj\n-247 TJm\n(ARISING) 32.3188 Tj\n-247 TJm\n(IN) 8.4085 Tj\n-247 TJm\n(ANY) 17.2632 Tj\n-247 TJm\n(W) 7.5238 Tj\n120 TJm\n(A) 5.7544 Tj\n105 TJm\n(Y) 5.7544 Tj\n-247 TJm\n(OUT) 16.3786 Tj\n72 453.814 Td\n(OF) 10.1858 Tj\n-250 TJm\n(THE) 15.4939 Tj\n-250 TJm\n(USE) 15.0555 Tj\n-250 TJm\n(OF) 10.1858 Tj\n-250 TJm\n(THIS) 17.7096 Tj\n-250 TJm\n(SOFTW) 27.0107 Tj\n120 TJm\n(ARE,) 17.9327 Tj\n-250 TJm\n(EVEN) 21.2483 Tj\n-250 TJm\n(IF) 7.0854 Tj\n-250 TJm\n(AD) 11.5088 Tj\n40 TJm\n(VISED) 23.464 Tj\n-250 TJm\n(OF) 10.1858 Tj\n-250 TJm\n(THE) 15.4939 Tj\n-250 TJm\n(POSSIBILITY) 47.8206 Tj\n-250 TJm\n(OF) 10.1858 Tj\n-250 TJm\n(SUCH) 21.2563 Tj\n-250 TJm\n(D) 5.7544 Tj\n40 TJm\n(AMA) 18.5942 Tj\n40 TJm\n(GE.) 12.6167 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 436.279 Td\n(P) 4.4314 Tj\n92 TJm\n(A) 5.7544 Tj\n111 TJm\n(TENTS:) 27.0107 Tj\n-296 TJm\n(T) 4.8697 Tj\n80 TJm\n(o) 3.9851 Tj\n-295 TJm\n(the) 9.7395 Tj\n-296 TJm\n(best) 12.8398 Tj\n-295 TJm\n(of) 6.6391 Tj\n-296 TJm\n(my) 10.1858 Tj\n-295 TJm\n(kno) 11.9552 Tj\n25 TJm\n(wledge,) 25.0102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n208.544 436.279 Td\n/F124_0 7.9701 Tf\n(bzip2) 23.9103 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n234.81 436.279 Td\n/F122_0 7.9701 Tf\n(and) 11.5088 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n248.674 436.279 Td\n/F124_0 7.9701 Tf\n(libbzip2) 38.2565 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n289.286 436.279 Td\n/F122_0 7.9701 Tf\n(do) 7.9701 Tj\n-296 TJm\n(not) 10.1858 Tj\n-295 TJm\n(use) 10.6241 Tj\n-296 TJm\n(an) 7.5238 Tj\n15 TJm\n(y) 3.9851 Tj\n-295 TJm\n(patented) 27.0027 Tj\n-296 TJm\n(algorithms.) 36.0886 Tj\n-893 TJm\n(Ho) 9.7395 Tj\n25 TJm\n(we) 9.2931 Tj\n25 TJm\n(v) 3.9851 Tj\n15 TJm\n(er) 6.1928 Tj\n40 TJm\n(,) 1.9925 Tj\n-307 TJm\n(I) 2.654 Tj\n-295 TJm\n(do) 7.9701 Tj\n-296 TJm\n(not) 10.1858 Tj\n-295 TJm\n(ha) 7.5238 Tj\n20 TJm\n(v) 3.9851 Tj\n15 TJm\n(e) 3.5387 Tj\n-296 TJm\n(the) 9.7395 Tj\n-295 TJm\n(resources) 30.0951 Tj\n-296 TJm\n(to) 6.2007 Tj\n72 426.715 Td\n(carry) 16.3706 Tj\n-250 TJm\n(out) 10.1858 Tj\n-250 TJm\n(a) 3.5387 Tj\n-250 TJm\n(patent) 19.4789 Tj\n-250 TJm\n(search.) 22.3482 Tj\n-620 TJm\n(Therefore) 31.4181 Tj\n-250 TJm\n(I) 2.654 Tj\n-250 TJm\n(cannot) 21.2483 Tj\n-250 TJm\n(gi) 6.2007 Tj\n25 TJm\n(v) 3.9851 Tj\n15 TJm\n(e) 3.5387 Tj\n-250 TJm\n(an) 7.5238 Tj\n15 TJm\n(y) 3.9851 Tj\n-250 TJm\n(guarantee) 30.9798 Tj\n-250 TJm\n(of) 6.6391 Tj\n-250 TJm\n(the) 9.7395 Tj\n-250 TJm\n(abo) 11.5088 Tj\n15 TJm\n(v) 3.9851 Tj\n15 TJm\n(e) 3.5387 Tj\n-250 TJm\n(statement.) 32.5419 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 3 3\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n72 707.441 Td\n/F116_0 17.2154 Tf\n(T) 10.5186 Tj\n80 TJm\n(ab) 20.0904 Tj\n10 TJm\n(le) 14.3576 Tj\n-278 TJm\n(of) 16.2513 Tj\n-278 TJm\n(Contents) 74.5943 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 686.878 Td\n/F122_0 9.9626 Tf\n(1.) 7.472 Tj\n-310 TJm\n(Introduction) 49.2551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n145.733 686.878 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 686.878 Td\n/F122_0 9.9626 Tf\n(1) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 674.923 Td\n(2.) 7.472 Tj\n-310 TJm\n(Ho) 12.1743 Tj\n25 TJm\n(w) 7.193 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(use) 13.2801 Tj\n-250 TJm\n(bzip2) 22.1369 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n167.054 674.923 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 674.923 Td\n/F122_0 9.9626 Tf\n(2) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 662.968 Td\n(2.1.) 14.9439 Tj\n-310 TJm\n(N) 7.193 Tj\n35 TJm\n(AME) 22.1369 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n132.691 662.968 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 662.968 Td\n/F122_0 9.9626 Tf\n(2) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 651.013 Td\n(2.2.) 14.9439 Tj\n-310 TJm\n(SYNOPSIS) 47.0534 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n150.582 651.013 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 651.013 Td\n/F122_0 9.9626 Tf\n(2) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 639.058 Td\n(2.3.) 14.9439 Tj\n-310 TJm\n(DESCRIPTION) 64.7569 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n168.29 639.058 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 639.058 Td\n/F122_0 9.9626 Tf\n(3) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 627.103 Td\n(2.4.) 14.9439 Tj\n-310 TJm\n(OPTIONS) 42.0621 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n145.873 627.103 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 627.103 Td\n/F122_0 9.9626 Tf\n(4) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 615.147 Td\n(2.5.) 14.9439 Tj\n-310 TJm\n(MEMOR) 37.6387 Tj\n65 TJm\n(Y) 7.193 Tj\n-250 TJm\n(MAN) 23.2427 Tj\n35 TJm\n(A) 7.193 Tj\n40 TJm\n(GEMENT) 41.5042 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n221.412 615.147 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 615.147 Td\n/F122_0 9.9626 Tf\n(5) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 603.192 Td\n(2.6.) 14.9439 Tj\n-310 TJm\n(RECO) 26.5703 Tj\n50 TJm\n(VERING) 37.6287 Tj\n-250 TJm\n(D) 7.193 Tj\n40 TJm\n(A) 7.193 Tj\n111 TJm\n(T) 6.0871 Tj\n93 TJm\n(A) 7.193 Tj\n-250 TJm\n(FR) 12.1843 Tj\n40 TJm\n(OM) 16.0497 Tj\n-250 TJm\n(D) 7.193 Tj\n40 TJm\n(AMA) 23.2427 Tj\n40 TJm\n(GED) 20.4731 Tj\n-250 TJm\n(FILES) 26.5703 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n308.464 603.192 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 603.192 Td\n/F122_0 9.9626 Tf\n(6) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 591.237 Td\n(2.7.) 14.9439 Tj\n-310 TJm\n(PERFORMANCE) 73.6236 Tj\n-250 TJm\n(NO) 14.386 Tj\n40 TJm\n(TES) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n211.958 591.237 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 591.237 Td\n/F122_0 9.9626 Tf\n(6) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 579.282 Td\n(2.8.) 14.9439 Tj\n-310 TJm\n(CA) 13.8381 Tj\n135 TJm\n(VEA) 20.4731 Tj\n111 TJm\n(TS) 11.6264 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n148.799 579.282 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 579.282 Td\n/F122_0 9.9626 Tf\n(7) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 567.327 Td\n(2.9.) 14.9439 Tj\n-310 TJm\n(A) 7.193 Tj\n55 TJm\n(UTHOR) 34.3112 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n145.32 567.327 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 567.327 Td\n/F122_0 9.9626 Tf\n(7) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 555.372 Td\n(3.) 7.472 Tj\n-310 TJm\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n160.049 555.372 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n224.856 555.372 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 555.372 Td\n/F122_0 9.9626 Tf\n(8) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 543.416 Td\n(3.1.) 14.9439 Tj\n-310 TJm\n(T) 6.0871 Tj\n80 TJm\n(op-le) 20.4731 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(el) 7.193 Tj\n-250 TJm\n(structure) 34.8591 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n179.997 543.416 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 543.416 Td\n/F122_0 9.9626 Tf\n(8) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 531.461 Td\n(3.1.1.) 22.4159 Tj\n-310 TJm\n(Lo) 11.0684 Tj\n25 TJm\n(w-le) 17.7035 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(el) 7.193 Tj\n-250 TJm\n(summary) 37.0808 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n192.866 531.461 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 531.461 Td\n/F122_0 9.9626 Tf\n(9) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 519.506 Td\n(3.1.2.) 22.4159 Tj\n-310 TJm\n(High-le) 30.4357 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(el) 7.193 Tj\n-250 TJm\n(summary) 37.0808 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n193.822 519.506 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 519.506 Td\n/F122_0 9.9626 Tf\n(9) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 507.551 Td\n(3.1.3.) 22.4159 Tj\n-310 TJm\n(Utility) 26.0223 Tj\n-250 TJm\n(functions) 37.0808 Tj\n-250 TJm\n(summary) 37.0808 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n216.582 507.551 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 507.551 Td\n/F122_0 9.9626 Tf\n(9) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 495.596 Td\n(3.2.) 14.9439 Tj\n-310 TJm\n(Error) 21.0211 Tj\n-250 TJm\n(handling) 34.8691 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n162.611 495.596 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 495.596 Td\n/F122_0 9.9626 Tf\n(10) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 483.64 Td\n(3.3.) 14.9439 Tj\n-310 TJm\n(Lo) 11.0684 Tj\n25 TJm\n(w-le) 17.7035 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(el) 7.193 Tj\n-250 TJm\n(interf) 21.579 Tj\n10 TJm\n(ace) 13.2702 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n181.045 483.64 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 483.64 Td\n/F122_0 9.9626 Tf\n(11) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 471.685 Td\n(3.3.1.) 22.4159 Tj\n-310 TJm\n(BZ2_bzCompressInit) 85.7879 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n197.762 471.685 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 471.685 Td\n/F122_0 9.9626 Tf\n(11) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 459.73 Td\n(3.3.2.) 22.4159 Tj\n-310 TJm\n(BZ2_bzCompress) 71.9499 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n184.201 459.73 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 459.73 Td\n/F122_0 9.9626 Tf\n(13) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 447.775 Td\n(3.3.3.) 22.4159 Tj\n-310 TJm\n(BZ2_bzCompressEnd) 87.9996 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n198.868 447.775 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 447.775 Td\n/F122_0 9.9626 Tf\n(16) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 435.82 Td\n(3.3.4.) 22.4159 Tj\n-310 TJm\n(BZ2_bzDecompressInit) 95.1827 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n206.887 435.82 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 435.82 Td\n/F122_0 9.9626 Tf\n(16) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 423.865 Td\n(3.3.5.) 22.4159 Tj\n-310 TJm\n(BZ2_bzDecompress) 81.3446 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n193.326 423.865 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 423.865 Td\n/F122_0 9.9626 Tf\n(17) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 411.909 Td\n(3.3.6.) 22.4159 Tj\n-310 TJm\n(BZ2_bzDecompressEnd) 97.3944 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n210.207 411.909 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 411.909 Td\n/F122_0 9.9626 Tf\n(18) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 399.954 Td\n(3.4.) 14.9439 Tj\n-310 TJm\n(High-le) 30.4357 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(el) 7.193 Tj\n-250 TJm\n(interf) 21.579 Tj\n10 TJm\n(ace) 13.2702 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n184.216 399.954 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 399.954 Td\n/F122_0 9.9626 Tf\n(18) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 387.999 Td\n(3.4.1.) 22.4159 Tj\n-310 TJm\n(BZ2_bzReadOpen) 74.1516 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n185.302 387.999 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 387.999 Td\n/F122_0 9.9626 Tf\n(19) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 376.044 Td\n(3.4.2.) 22.4159 Tj\n-310 TJm\n(BZ2_bzRead) 52.5726 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n163.443 376.044 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 376.044 Td\n/F122_0 9.9626 Tf\n(20) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 364.089 Td\n(3.4.3.) 22.4159 Tj\n-310 TJm\n(BZ2_bzReadGetUnused) 97.3944 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n210.207 364.089 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 364.089 Td\n/F122_0 9.9626 Tf\n(21) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 352.134 Td\n(3.4.4.) 22.4159 Tj\n-310 TJm\n(BZ2_bzReadClose) 75.2674 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n188.074 352.134 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 352.134 Td\n/F122_0 9.9626 Tf\n(22) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 340.178 Td\n(3.4.5.) 22.4159 Tj\n-310 TJm\n(BZ2_bzWriteOpen) 76.3633 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n188.622 340.178 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 340.178 Td\n/F122_0 9.9626 Tf\n(22) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 328.223 Td\n(3.4.6.) 22.4159 Tj\n-310 TJm\n(BZ2_bzWrite) 54.7843 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n166.763 328.223 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 328.223 Td\n/F122_0 9.9626 Tf\n(23) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 316.268 Td\n(3.4.7.) 22.4159 Tj\n-310 TJm\n(BZ2_bzWriteClose) 77.4791 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n189.179 316.268 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 316.268 Td\n/F122_0 9.9626 Tf\n(23) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 304.313 Td\n(3.4.8.) 22.4159 Tj\n-310 TJm\n(Handling) 37.0808 Tj\n-250 TJm\n(embedded) 40.9463 Tj\n-250 TJm\n(compressed) 47.0334 Tj\n-250 TJm\n(data) 16.5977 Tj\n-250 TJm\n(streams) 30.4357 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n294.601 304.313 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 304.313 Td\n/F122_0 9.9626 Tf\n(24) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 292.358 Td\n(3.4.9.) 22.4159 Tj\n-310 TJm\n(Standard) 35.417 Tj\n-250 TJm\n(\\002le-reading/writing) 77.4791 Tj\n-250 TJm\n(code) 18.8094 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n247.564 292.358 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 292.358 Td\n/F122_0 9.9626 Tf\n(25) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 280.403 Td\n(3.5.) 14.9439 Tj\n-310 TJm\n(Utility) 26.0223 Tj\n-250 TJm\n(functions) 37.0808 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n170.645 280.403 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 280.403 Td\n/F122_0 9.9626 Tf\n(26) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 268.447 Td\n(3.5.1.) 22.4159 Tj\n-310 TJm\n(BZ2_bzBuf) 47.0434 Tj\n25 TJm\n(fT) 9.4047 Tj\n80 TJm\n(oBuf) 19.9252 Tj\n25 TJm\n(fCompress) 43.1679 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n229.488 268.447 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 268.447 Td\n/F122_0 9.9626 Tf\n(26) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 256.492 Td\n(3.5.2.) 22.4159 Tj\n-310 TJm\n(BZ2_bzBuf) 47.0434 Tj\n25 TJm\n(fT) 9.4047 Tj\n80 TJm\n(oBuf) 19.9252 Tj\n25 TJm\n(fDecompress) 52.5627 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n238.613 256.492 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 256.492 Td\n/F122_0 9.9626 Tf\n(27) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 244.537 Td\n(3.6.) 14.9439 Tj\n-310 TJm\n(zlib) 14.9439 Tj\n-250 TJm\n(compatibility) 53.1405 Tj\n-250 TJm\n(functions) 37.0808 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n215.06 244.537 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 244.537 Td\n/F122_0 9.9626 Tf\n(28) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 232.582 Td\n(3.7.) 14.9439 Tj\n-310 TJm\n(Using) 23.8007 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(library) 26.5603 Tj\n-250 TJm\n(in) 7.7509 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(stdio-free) 38.1767 Tj\n-250 TJm\n(en) 9.4047 Tj\n40 TJm\n(vironment) 40.9562 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n282.092 232.582 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 232.582 Td\n/F122_0 9.9626 Tf\n(28) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 220.627 Td\n(3.7.1.) 22.4159 Tj\n-310 TJm\n(Getting) 29.8878 Tj\n-250 TJm\n(rid) 11.0684 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(stdio) 19.3773 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n188.492 220.627 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 220.627 Td\n/F122_0 9.9626 Tf\n(29) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 208.671 Td\n(3.7.2.) 22.4159 Tj\n-310 TJm\n(Critical) 29.8878 Tj\n-250 TJm\n(error) 19.3573 Tj\n-250 TJm\n(handling) 34.8691 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n201.629 208.671 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 208.671 Td\n/F122_0 9.9626 Tf\n(29) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 196.716 Td\n(3.8.) 14.9439 Tj\n-310 TJm\n(Making) 30.9936 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(W) 9.4047 Tj\n40 TJm\n(indo) 17.7135 Tj\n25 TJm\n(ws) 11.0684 Tj\n-250 TJm\n(DLL) 19.3673 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n203.243 196.716 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 196.716 Td\n/F122_0 9.9626 Tf\n(29) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 184.761 Td\n(4.) 7.472 Tj\n-310 TJm\n(Miscellanea) 48.1393 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n144.898 184.761 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 184.761 Td\n/F122_0 9.9626 Tf\n(31) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 172.806 Td\n(4.1.) 14.9439 Tj\n-310 TJm\n(Limitations) 45.9475 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(compressed) 47.0334 Tj\n-250 TJm\n(\\002le) 12.7322 Tj\n-250 TJm\n(format) 26.5603 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n269.154 172.806 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 172.806 Td\n/F122_0 9.9626 Tf\n(31) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 160.851 Td\n(4.2.) 14.9439 Tj\n-310 TJm\n(Portability) 42.0721 Tj\n-250 TJm\n(issues) 23.8007 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n172.03 160.851 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 160.851 Td\n/F122_0 9.9626 Tf\n(32) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 148.896 Td\n(4.3.) 14.9439 Tj\n-310 TJm\n(Reporting) 39.8504 Tj\n-250 TJm\n(b) 4.9813 Tj\n20 TJm\n(ugs) 13.8381 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n166.115 148.896 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 148.896 Td\n/F122_0 9.9626 Tf\n(32) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 136.94 Td\n(4.4.) 14.9439 Tj\n-310 TJm\n(Did) 14.9439 Tj\n-250 TJm\n(you) 14.9439 Tj\n-250 TJm\n(get) 12.1743 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(right) 18.8194 Tj\n-250 TJm\n(package?) 37.0609 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n229.109 136.94 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 136.94 Td\n/F122_0 9.9626 Tf\n(33) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 124.985 Td\n(4.5.) 14.9439 Tj\n-310 TJm\n(Further) 29.3299 Tj\n-250 TJm\n(Reading) 33.2053 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n170.361 124.985 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 124.985 Td\n/F122_0 9.9626 Tf\n(34) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n536.068 50.852 Td\n(iii) 8.3088 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 1 4\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n72 701.916 Td\n/F116_0 24.7902 Tf\n(1.) 20.675 Tj\n-278 TJm\n(Intr) 39.937 Tj\n20 TJm\n(oduction) 104.6642 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 679.998 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n104.507 679.998 Td\n/F122_0 9.9626 Tf\n(compresses) 45.9276 Tj\n-263 TJm\n(\\002les) 16.6077 Tj\n-263 TJm\n(using) 21.589 Tj\n-263 TJm\n(the) 12.1743 Tj\n-262 TJm\n(Burro) 23.2427 Tj\n25 TJm\n(ws-Wheeler) 48.1293 Tj\n-263 TJm\n(block-sorting) 53.1305 Tj\n-263 TJm\n(te) 7.193 Tj\n15 TJm\n(xt) 7.7509 Tj\n-263 TJm\n(compression) 50.3609 Tj\n-263 TJm\n(algorithm,) 41.2352 Tj\n-266 TJm\n(and) 14.386 Tj\n-263 TJm\n(Huf) 15.4918 Tj\n25 TJm\n(fman) 20.4731 Tj\n-263 TJm\n(coding.) 29.6088 Tj\n72 668.043 Td\n(Compression) 52.5826 Tj\n-203 TJm\n(is) 6.6451 Tj\n-204 TJm\n(generally) 37.0708 Tj\n-203 TJm\n(considerably) 50.9089 Tj\n-203 TJm\n(better) 22.6848 Tj\n-204 TJm\n(t) 2.7696 Tj\n1 TJm\n(han) 14.386 Tj\n-204 TJm\n(that) 14.9439 Tj\n-203 TJm\n(achie) 21.0211 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(ed) 9.4047 Tj\n-203 TJm\n(by) 9.9626 Tj\n-204 TJm\n(more) 20.4731 Tj\n-203 TJm\n(con) 14.386 Tj\n40 TJm\n(v) 4.9813 Tj\n15 TJm\n(entional) 32.0995 Tj\n-203 TJm\n(LZ77/LZ78-based) 73.0458 Tj\n-204 TJm\n(compressors,) 52.2937 Tj\n72 656.087 Td\n(and) 14.386 Tj\n-250 TJm\n(approaches) 44.8118 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(performance) 50.341 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(PPM) 19.9352 Tj\n-250 TJm\n(f) 3.3175 Tj\n10 TJm\n(amily) 22.6948 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(statistical) 37.6387 Tj\n-250 TJm\n(compressors.) 52.2937 Tj\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 634.17 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n105.074 634.17 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-320 TJm\n(b) 4.9813 Tj\n20 TJm\n(uilt) 13.2901 Tj\n-319 TJm\n(on) 9.9626 Tj\n-320 TJm\n(top) 12.7322 Tj\n-320 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n176.712 634.17 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n224.533 634.17 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-337 TJm\n(a) 4.4234 Tj\n-320 TJm\n(\\003e) 9.9626 Tj\n15 TJm\n(xible) 19.9252 Tj\n-320 TJm\n(library) 26.5603 Tj\n-319 TJm\n(for) 11.6164 Tj\n-320 TJm\n(handling) 34.8691 Tj\n-320 TJm\n(compressed) 47.0334 Tj\n-320 TJm\n(data) 16.5977 Tj\n-319 TJm\n(in) 7.7509 Tj\n-320 TJm\n(the) 12.1743 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n449.816 634.17 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n482.889 634.17 Td\n/F122_0 9.9626 Tf\n(format.) 29.0509 Tj\n-1039 TJm\n(This) 17.7135 Tj\n72 622.214 Td\n(manual) 29.3299 Tj\n-316 TJm\n(describes) 37.0708 Tj\n-316 TJm\n(both) 17.7135 Tj\n-317 TJm\n(ho) 9.9626 Tj\n25 TJm\n(w) 7.193 Tj\n-316 TJm\n(to) 7.7509 Tj\n-316 TJm\n(use) 13.2801 Tj\n-316 TJm\n(the) 12.1743 Tj\n-316 TJm\n(program) 33.7533 Tj\n-316 TJm\n(and) 14.386 Tj\n-317 TJm\n(ho) 9.9626 Tj\n25 TJm\n(w) 7.193 Tj\n-316 TJm\n(to) 7.7509 Tj\n-316 TJm\n(w) 7.193 Tj\n10 TJm\n(ork) 13.2801 Tj\n-316 TJm\n(with) 17.7135 Tj\n-316 TJm\n(the) 12.1743 Tj\n-317 TJm\n(library) 26.5603 Tj\n-316 TJm\n(interf) 21.579 Tj\n10 TJm\n(ace.) 15.7608 Tj\n-1017 TJm\n(Most) 20.4831 Tj\n-316 TJm\n(of) 8.2988 Tj\n-316 TJm\n(the) 12.1743 Tj\n-317 TJm\n(manual) 29.3299 Tj\n-316 TJm\n(is) 6.6451 Tj\n72 610.259 Td\n(de) 9.4047 Tj\n25 TJm\n(v) 4.9813 Tj\n20 TJm\n(oted) 17.1556 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(this) 14.396 Tj\n-250 TJm\n(library) 26.5603 Tj\n65 TJm\n(,) 2.4907 Tj\n-250 TJm\n(not) 12.7322 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(program,) 36.2439 Tj\n-250 TJm\n(which) 24.3486 Tj\n-250 TJm\n(is) 6.6451 Tj\n-250 TJm\n(good) 19.9252 Tj\n-250 TJm\n(ne) 9.4047 Tj\n25 TJm\n(ws) 11.0684 Tj\n-250 TJm\n(if) 6.0871 Tj\n-250 TJm\n(your) 18.2614 Tj\n-250 TJm\n(interest) 29.3299 Tj\n-250 TJm\n(is) 6.6451 Tj\n-250 TJm\n(only) 17.7135 Tj\n-250 TJm\n(in) 7.7509 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(program.) 36.2439 Tj\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 578.379 Td\n(\\225) 3.4869 Tj\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n-450 TJm\n(Ho) 12.1743 Tj\n25 TJm\n(w) 7.193 Tj\n-278 TJm\n(to) 7.7509 Tj\n-278 TJm\n(use) 13.2801 Tj\n-277 TJm\n(bzip2) 22.1369 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n-278 TJm\n([2]) 11.6164 Tj\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-278 TJm\n(describes) 37.0708 Tj\n-278 TJm\n(ho) 9.9626 Tj\n25 TJm\n(w) 7.193 Tj\n-278 TJm\n(to) 7.7509 Tj\n-278 TJm\n(use) 13.2801 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n256.282 578.379 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n286.17 578.379 Td\n/F122_0 9.9626 Tf\n(;) 2.7696 Tj\n-292 TJm\n(this) 14.396 Tj\n-278 TJm\n(is) 6.6451 Tj\n-277 TJm\n(the) 12.1743 Tj\n-278 TJm\n(only) 17.7135 Tj\n-278 TJm\n(part) 15.4918 Tj\n-278 TJm\n(you) 14.9439 Tj\n-278 TJm\n(need) 18.8094 Tj\n-278 TJm\n(to) 7.7509 Tj\n-277 TJm\n(read) 17.1456 Tj\n-278 TJm\n(if) 6.0871 Tj\n-278 TJm\n(you) 14.9439 Tj\n-278 TJm\n(just) 14.396 Tj\n-278 TJm\n(w) 7.193 Tj\n10 TJm\n(ant) 12.1743 Tj\n-277 TJm\n(to) 7.7509 Tj\n-278 TJm\n(kno) 14.9439 Tj\n25 TJm\n(w) 7.193 Tj\n81.963 566.424 Td\n(ho) 9.9626 Tj\n25 TJm\n(w) 7.193 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(operate) 29.3199 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(program.) 36.2439 Tj\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 544.506 Td\n(\\225) 3.4869 Tj\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n-450 TJm\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n-250 TJm\n(libbzip2) 32.6574 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n-250 TJm\n([8]) 11.6164 Tj\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-250 TJm\n(describes) 37.0708 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(programming) 54.2364 Tj\n-250 TJm\n(interf) 21.579 Tj\n10 TJm\n(aces) 17.1456 Tj\n-250 TJm\n(in) 7.7509 Tj\n-250 TJm\n(detail,) 24.6275 Tj\n-250 TJm\n(and) 14.386 Tj\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 522.588 Td\n(\\225) 3.4869 Tj\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n-450 TJm\n(Miscellanea) 48.1393 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n-250 TJm\n([31]) 16.5977 Tj\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-250 TJm\n(records) 29.3199 Tj\n-250 TJm\n(some) 21.031 Tj\n-250 TJm\n(miscellaneous) 56.4481 Tj\n-250 TJm\n(notes) 21.031 Tj\n-250 TJm\n(which) 24.3486 Tj\n-250 TJm\n(I) 3.3175 Tj\n-250 TJm\n(thought) 30.4457 Tj\n-250 TJm\n(ought) 22.6948 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(be) 9.4047 Tj\n-250 TJm\n(recorded) 34.8492 Tj\n-250 TJm\n(some) 21.031 Tj\n25 TJm\n(where.) 26.8293 Tj\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n539.395 50.852 Td\n(1) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 2 5\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n72 701.916 Td\n/F116_0 24.7902 Tf\n(2.) 20.675 Tj\n-278 TJm\n(Ho) 33.0453 Tj\n15 TJm\n(w) 19.2868 Tj\n-278 TJm\n(to) 23.4019 Tj\n-278 TJm\n(use) 42.7135 Tj\n-278 TJm\n(bzip2) 63.3638 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 656.35 Td\n/F116_0 17.2154 Tf\n(T) 10.5186 Tj\n80 TJm\n(ab) 20.0904 Tj\n10 TJm\n(le) 14.3576 Tj\n-278 TJm\n(of) 16.2513 Tj\n-278 TJm\n(Contents) 74.5943 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 635.788 Td\n/F122_0 9.9626 Tf\n(2.1.) 14.9439 Tj\n-310 TJm\n(N) 7.193 Tj\n35 TJm\n(AME) 22.1369 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n132.691 635.788 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 635.788 Td\n/F122_0 9.9626 Tf\n(2) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 623.832 Td\n(2.2.) 14.9439 Tj\n-310 TJm\n(SYNOPSIS) 47.0534 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n150.582 623.832 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 623.832 Td\n/F122_0 9.9626 Tf\n(2) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 611.877 Td\n(2.3.) 14.9439 Tj\n-310 TJm\n(DESCRIPTION) 64.7569 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n168.29 611.877 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 611.877 Td\n/F122_0 9.9626 Tf\n(3) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 599.922 Td\n(2.4.) 14.9439 Tj\n-310 TJm\n(OPTIONS) 42.0621 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n145.873 599.922 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 599.922 Td\n/F122_0 9.9626 Tf\n(4) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 587.967 Td\n(2.5.) 14.9439 Tj\n-310 TJm\n(MEMOR) 37.6387 Tj\n65 TJm\n(Y) 7.193 Tj\n-250 TJm\n(MAN) 23.2427 Tj\n35 TJm\n(A) 7.193 Tj\n40 TJm\n(GEMENT) 41.5042 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n221.412 587.967 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 587.967 Td\n/F122_0 9.9626 Tf\n(5) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 576.012 Td\n(2.6.) 14.9439 Tj\n-310 TJm\n(RECO) 26.5703 Tj\n50 TJm\n(VERING) 37.6287 Tj\n-250 TJm\n(D) 7.193 Tj\n40 TJm\n(A) 7.193 Tj\n111 TJm\n(T) 6.0871 Tj\n93 TJm\n(A) 7.193 Tj\n-250 TJm\n(FR) 12.1843 Tj\n40 TJm\n(OM) 16.0497 Tj\n-250 TJm\n(D) 7.193 Tj\n40 TJm\n(AMA) 23.2427 Tj\n40 TJm\n(GED) 20.4731 Tj\n-250 TJm\n(FILES) 26.5703 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n308.464 576.012 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 576.012 Td\n/F122_0 9.9626 Tf\n(6) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 564.057 Td\n(2.7.) 14.9439 Tj\n-310 TJm\n(PERFORMANCE) 73.6236 Tj\n-250 TJm\n(NO) 14.386 Tj\n40 TJm\n(TES) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n211.958 564.057 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 564.057 Td\n/F122_0 9.9626 Tf\n(6) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 552.101 Td\n(2.8.) 14.9439 Tj\n-310 TJm\n(CA) 13.8381 Tj\n135 TJm\n(VEA) 20.4731 Tj\n111 TJm\n(TS) 11.6264 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n148.799 552.101 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 552.101 Td\n/F122_0 9.9626 Tf\n(7) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 540.146 Td\n(2.9.) 14.9439 Tj\n-310 TJm\n(A) 7.193 Tj\n55 TJm\n(UTHOR) 34.3112 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n145.32 540.146 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 540.146 Td\n/F122_0 9.9626 Tf\n(7) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 508.266 Td\n(This) 17.7135 Tj\n-250 TJm\n(chapter) 29.3199 Tj\n-250 TJm\n(contains) 33.2053 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(cop) 14.386 Tj\n10 TJm\n(y) 4.9813 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(the) 12.1743 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n213.837 508.266 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n246.215 508.266 Td\n/F122_0 9.9626 Tf\n(man) 17.1556 Tj\n-250 TJm\n(page,) 21.3 Tj\n-250 TJm\n(and) 14.386 Tj\n-250 TJm\n(nothing) 30.4457 Tj\n-250 TJm\n(else.) 17.9825 Tj\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 473.513 Td\n/F116_0 20.6585 Tf\n(2.1.) 34.4584 Tj\n-278 TJm\n(NAME) 60.8186 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 441.632 Td\n/F122_0 9.9626 Tf\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n82.461 441.632 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n112.349 441.632 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n117.33 441.632 Td\n/F124_0 9.9626 Tf\n(bunzip2) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n161.664 441.632 Td\n/F122_0 9.9626 Tf\n(-) 3.3175 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(block-sorting) 53.1305 Tj\n-250 TJm\n(\\002le) 12.7322 Tj\n-250 TJm\n(compressor) 45.9276 Tj\n40 TJm\n(,) 2.4907 Tj\n-250 TJm\n(v1.0.6) 24.9065 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 419.715 Td\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n82.461 419.715 Td\n/F124_0 9.9626 Tf\n(bzcat) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n114.839 419.715 Td\n/F122_0 9.9626 Tf\n(-) 3.3175 Tj\n-250 TJm\n(decompresses) 55.3323 Tj\n-250 TJm\n(\\002les) 16.6077 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(stdout) 24.3586 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 397.797 Td\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n82.461 397.797 Td\n/F124_0 9.9626 Tf\n(bzip2recover) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n156.682 397.797 Td\n/F122_0 9.9626 Tf\n(-) 3.3175 Tj\n-250 TJm\n(reco) 17.1456 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(ers) 11.6164 Tj\n-250 TJm\n(data) 16.5977 Tj\n-250 TJm\n(from) 19.3673 Tj\n-250 TJm\n(damaged) 35.965 Tj\n-250 TJm\n(bzip2) 22.1369 Tj\n-250 TJm\n(\\002les) 16.6077 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 353.081 Td\n/F116_0 20.6585 Tf\n(2.2.) 34.4584 Tj\n-278 TJm\n(SYNOPSIS) 105.6269 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 321.201 Td\n/F122_0 9.9626 Tf\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n82.461 321.201 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n114.839 321.201 Td\n/F122_0 9.9626 Tf\n([) 3.3175 Tj\n-250 TJm\n(-cdfkqstvzVL123456789) 100.164 Tj\n-250 TJm\n(]) 3.3175 Tj\n-250 TJm\n([) 3.3175 Tj\n-250 TJm\n(\\002lenames) 38.1866 Tj\n-250 TJm\n(...) 7.472 Tj\n-620 TJm\n(]) 3.3175 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 299.283 Td\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n82.461 299.283 Td\n/F124_0 9.9626 Tf\n(bunzip2) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n126.795 299.283 Td\n/F122_0 9.9626 Tf\n([) 3.3175 Tj\n-250 TJm\n(-fkvsVL) 33.7533 Tj\n-250 TJm\n(]) 3.3175 Tj\n-250 TJm\n([) 3.3175 Tj\n-250 TJm\n(\\002lenames) 38.1866 Tj\n-250 TJm\n(...) 7.472 Tj\n-620 TJm\n(]) 3.3175 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 277.365 Td\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n82.461 277.365 Td\n/F124_0 9.9626 Tf\n(bzcat) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n114.839 277.365 Td\n/F122_0 9.9626 Tf\n([) 3.3175 Tj\n-250 TJm\n(-s) 7.193 Tj\n-250 TJm\n(]) 3.3175 Tj\n-250 TJm\n([) 3.3175 Tj\n-250 TJm\n(\\002lenames) 38.1866 Tj\n-250 TJm\n(...) 7.472 Tj\n-620 TJm\n(]) 3.3175 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 255.447 Td\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n82.461 255.447 Td\n/F124_0 9.9626 Tf\n(bzip2recover) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n156.683 255.447 Td\n/F122_0 9.9626 Tf\n(\\002lename) 34.3112 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n539.395 50.852 Td\n(2) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 3 6\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n477.109 749.245 Td\n/F122_0 9.9626 Tf\n(Ho) 12.1743 Tj\n25 TJm\n(w) 7.193 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(use) 13.2801 Tj\n-250 TJm\n(bzip2) 22.1369 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n72 704.93 Td\n/F116_0 20.6585 Tf\n(2.3.) 34.4584 Tj\n-278 TJm\n(DESCRIPTION) 141.1802 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 683.012 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n104.56 683.012 Td\n/F122_0 9.9626 Tf\n(compresses) 45.9276 Tj\n-268 TJm\n(\\002les) 16.6077 Tj\n-268 TJm\n(using) 21.589 Tj\n-268 TJm\n(the) 12.1743 Tj\n-269 TJm\n(Burro) 23.2427 Tj\n25 TJm\n(ws-Wheeler) 48.1293 Tj\n-268 TJm\n(block) 22.1369 Tj\n-268 TJm\n(sorting) 27.6761 Tj\n-268 TJm\n(te) 7.193 Tj\n15 TJm\n(xt) 7.7509 Tj\n-268 TJm\n(compression) 50.3609 Tj\n-268 TJm\n(algorithm,) 41.2352 Tj\n-273 TJm\n(and) 14.386 Tj\n-268 TJm\n(Huf) 15.4918 Tj\n25 TJm\n(fman) 20.4731 Tj\n-268 TJm\n(coding.) 29.6088 Tj\n72 671.057 Td\n(Compression) 52.5826 Tj\n-203 TJm\n(is) 6.6451 Tj\n-204 TJm\n(generally) 37.0708 Tj\n-203 TJm\n(considerably) 50.9089 Tj\n-203 TJm\n(better) 22.6848 Tj\n-204 TJm\n(t) 2.7696 Tj\n1 TJm\n(han) 14.386 Tj\n-204 TJm\n(that) 14.9439 Tj\n-203 TJm\n(achie) 21.0211 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(ed) 9.4047 Tj\n-203 TJm\n(by) 9.9626 Tj\n-204 TJm\n(more) 20.4731 Tj\n-203 TJm\n(con) 14.386 Tj\n40 TJm\n(v) 4.9813 Tj\n15 TJm\n(entional) 32.0995 Tj\n-203 TJm\n(LZ77/LZ78-based) 73.0458 Tj\n-204 TJm\n(compressors,) 52.2937 Tj\n72 659.101 Td\n(and) 14.386 Tj\n-250 TJm\n(approaches) 44.8118 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(performance) 50.341 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(PPM) 19.9352 Tj\n-250 TJm\n(f) 3.3175 Tj\n10 TJm\n(amily) 22.6948 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(statistical) 37.6387 Tj\n-250 TJm\n(compressors.) 52.2937 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 637.184 Td\n(The) 15.4918 Tj\n-250 TJm\n(command-line) 57.5539 Tj\n-250 TJm\n(options) 29.3399 Tj\n-250 TJm\n(are) 12.1643 Tj\n-250 TJm\n(deliberately) 47.0334 Tj\n-250 TJm\n(v) 4.9813 Tj\n15 TJm\n(ery) 12.7222 Tj\n-250 TJm\n(similar) 27.6761 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(those) 21.031 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(GNU) 21.579 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n364.869 637.184 Td\n/F124_0 9.9626 Tf\n(gzip) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n388.779 637.184 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-250 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-250 TJm\n(the) 12.1743 Tj\n15 TJm\n(y) 4.9813 Tj\n-250 TJm\n(are) 12.1643 Tj\n-250 TJm\n(not) 12.7322 Tj\n-250 TJm\n(identical.) 36.8018 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 615.266 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n105.175 615.266 Td\n/F122_0 9.9626 Tf\n(e) 4.4234 Tj\n15 TJm\n(xpects) 25.4544 Tj\n-330 TJm\n(a) 4.4234 Tj\n-330 TJm\n(list) 12.1843 Tj\n-330 TJm\n(of) 8.2988 Tj\n-330 TJm\n(\\002le) 12.7322 Tj\n-329 TJm\n(names) 25.4544 Tj\n-330 TJm\n(to) 7.7509 Tj\n-330 TJm\n(accompan) 40.3884 Tj\n15 TJm\n(y) 4.9813 Tj\n-330 TJm\n(the) 12.1743 Tj\n-330 TJm\n(command-line) 57.5539 Tj\n-330 TJm\n(\\003ags.) 21.31 Tj\n-1099 TJm\n(Each) 19.9152 Tj\n-330 TJm\n(\\002le) 12.7322 Tj\n-330 TJm\n(is) 6.6451 Tj\n-330 TJm\n(replaced) 33.7433 Tj\n-330 TJm\n(by) 9.9626 Tj\n-330 TJm\n(a) 4.4234 Tj\n-330 TJm\n(compressed) 47.0334 Tj\n72 603.311 Td\n(v) 4.9813 Tj\n15 TJm\n(ersion) 24.3486 Tj\n-349 TJm\n(of) 8.2988 Tj\n-348 TJm\n(itself,) 22.4159 Tj\n-373 TJm\n(with) 17.7135 Tj\n-349 TJm\n(the) 12.1743 Tj\n-349 TJm\n(name) 21.579 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n204.444 603.311 Td\n/F124_0 9.9626 Tf\n(original_name.bz2) 101.6185 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n306.063 603.311 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-1212 TJm\n(Each) 19.9152 Tj\n-348 TJm\n(compressed) 47.0334 Tj\n-349 TJm\n(\\002le) 12.7322 Tj\n-348 TJm\n(has) 13.2801 Tj\n-349 TJm\n(the) 12.1743 Tj\n-348 TJm\n(same) 20.4731 Tj\n-349 TJm\n(modi\\002cation) 50.3709 Tj\n-349 TJm\n(date,) 19.0883 Tj\n72 591.356 Td\n(permissions,) 50.092 Tj\n-344 TJm\n(and,) 16.8766 Tj\n-344 TJm\n(when) 21.579 Tj\n-325 TJm\n(possible,) 35.1481 Tj\n-344 TJm\n(o) 4.9813 Tj\n25 TJm\n(wnership) 36.5229 Tj\n-325 TJm\n(as) 8.2988 Tj\n-325 TJm\n(the) 12.1743 Tj\n-326 TJm\n(corresponding) 56.996 Tj\n-325 TJm\n(original,) 33.4843 Tj\n-344 TJm\n(so) 8.8568 Tj\n-325 TJm\n(that) 14.9439 Tj\n-325 TJm\n(these) 20.4731 Tj\n-325 TJm\n(properties) 39.8404 Tj\n-325 TJm\n(can) 13.8281 Tj\n-326 TJm\n(be) 9.4047 Tj\n-325 TJm\n(correctly) 35.4071 Tj\n72 579.4 Td\n(restored) 32.0895 Tj\n-308 TJm\n(at) 7.193 Tj\n-308 TJm\n(decompression) 59.7656 Tj\n-307 TJm\n(time.) 20.2042 Tj\n-484 TJm\n(File) 15.5018 Tj\n-308 TJm\n(name) 21.579 Tj\n-308 TJm\n(handling) 34.8691 Tj\n-308 TJm\n(is) 6.6451 Tj\n-307 TJm\n(nai) 12.1743 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-308 TJm\n(in) 7.7509 Tj\n-308 TJm\n(the) 12.1743 Tj\n-308 TJm\n(sense) 21.579 Tj\n-308 TJm\n(that) 14.9439 Tj\n-308 TJm\n(there) 19.9152 Tj\n-307 TJm\n(is) 6.6451 Tj\n-308 TJm\n(no) 9.9626 Tj\n-308 TJm\n(mechanism) 45.3796 Tj\n-308 TJm\n(for) 11.6164 Tj\n-308 TJm\n(preserving) 42.0521 Tj\n72 567.445 Td\n(original) 30.9936 Tj\n-334 TJm\n(\\002le) 12.7322 Tj\n-333 TJm\n(names,) 27.9451 Tj\n-355 TJm\n(permissions,) 50.092 Tj\n-355 TJm\n(o) 4.9813 Tj\n25 TJm\n(wnerships) 40.3983 Tj\n-333 TJm\n(or) 8.2988 Tj\n-334 TJm\n(dates) 20.4731 Tj\n-334 TJm\n(in) 7.7509 Tj\n-333 TJm\n(\\002lesystems) 44.2838 Tj\n-334 TJm\n(which) 24.3486 Tj\n-334 TJm\n(lack) 16.5977 Tj\n-333 TJm\n(these) 20.4731 Tj\n-334 TJm\n(concepts,) 37.3498 Tj\n-355 TJm\n(or) 8.2988 Tj\n-333 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-334 TJm\n(serious) 28.224 Tj\n-334 TJm\n(\\002le) 12.7322 Tj\n72 555.49 Td\n(name) 21.579 Tj\n-250 TJm\n(length) 24.9065 Tj\n-250 TJm\n(restrictions,) 46.7644 Tj\n-250 TJm\n(such) 18.2614 Tj\n-250 TJm\n(as) 8.2988 Tj\n-250 TJm\n(MS-DOS.) 40.1294 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 533.572 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n104.379 533.572 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n121.255 533.572 Td\n/F124_0 9.9626 Tf\n(bunzip2) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n165.589 533.572 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-250 TJm\n(by) 9.9626 Tj\n-250 TJm\n(def) 12.7222 Tj\n10 TJm\n(ault) 14.9439 Tj\n-250 TJm\n(not) 12.7322 Tj\n-250 TJm\n(o) 4.9813 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(erwrite) 28.2141 Tj\n-250 TJm\n(e) 4.4234 Tj\n15 TJm\n(xisting) 27.1282 Tj\n-250 TJm\n(\\002les.) 19.0983 Tj\n-620 TJm\n(If) 6.6351 Tj\n-250 TJm\n(you) 14.9439 Tj\n-250 TJm\n(w) 7.193 Tj\n10 TJm\n(ant) 12.1743 Tj\n-250 TJm\n(this) 14.396 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(happen,) 31.2626 Tj\n-250 TJm\n(specify) 28.772 Tj\n-250 TJm\n(the) 12.1743 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n495.977 533.572 Td\n/F124_0 9.9626 Tf\n(-f) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n510.423 533.572 Td\n/F122_0 9.9626 Tf\n(\\003ag.) 17.4346 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 511.654 Td\n(If) 6.6351 Tj\n-284 TJm\n(no) 9.9626 Tj\n-285 TJm\n(\\002le) 12.7322 Tj\n-284 TJm\n(names) 25.4544 Tj\n-284 TJm\n(are) 12.1643 Tj\n-284 TJm\n(speci\\002ed,) 37.9077 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n193.935 511.654 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n226.655 511.654 Td\n/F122_0 9.9626 Tf\n(compresses) 45.9276 Tj\n-284 TJm\n(from) 19.3673 Tj\n-285 TJm\n(standard) 33.7533 Tj\n-284 TJm\n(input) 20.4831 Tj\n-284 TJm\n(to) 7.7509 Tj\n-284 TJm\n(standard) 33.7533 Tj\n-285 TJm\n(output.) 27.9551 Tj\n-825 TJm\n(In) 8.2988 Tj\n-285 TJm\n(this) 14.396 Tj\n-284 TJm\n(case,) 19.6363 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n491.778 511.654 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n524.499 511.654 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n72 499.699 Td\n(decline) 28.772 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(write) 20.4731 Tj\n-250 TJm\n(compressed) 47.0334 Tj\n-250 TJm\n(output) 25.4644 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(terminal,) 35.696 Tj\n-250 TJm\n(as) 8.2988 Tj\n-250 TJm\n(this) 14.396 Tj\n-250 TJm\n(w) 7.193 Tj\n10 TJm\n(ould) 17.7135 Tj\n-250 TJm\n(be) 9.4047 Tj\n-250 TJm\n(entirely) 30.4357 Tj\n-250 TJm\n(incomprehensible) 70.8341 Tj\n-250 TJm\n(and) 14.386 Tj\n-250 TJm\n(therefore) 35.955 Tj\n-250 TJm\n(pointless.) 37.9177 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 477.781 Td\n/F124_0 9.9626 Tf\n(bunzip2) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n116.176 477.781 Td\n/F122_0 9.9626 Tf\n(\\(or) 11.6164 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n130.125 477.781 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n-600 TJm\n(-d) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n177.946 477.781 Td\n/F122_0 9.9626 Tf\n(\\)) 3.3175 Tj\n-234 TJm\n(decompresses) 55.3323 Tj\n-234 TJm\n(all) 9.9626 Tj\n-234 TJm\n(speci\\002ed) 35.417 Tj\n-235 TJm\n(\\002les.) 19.0983 Tj\n-609 TJm\n(Files) 19.3773 Tj\n-234 TJm\n(which) 24.3486 Tj\n-234 TJm\n(were) 19.3573 Tj\n-234 TJm\n(not) 12.7322 Tj\n-235 TJm\n(created) 28.762 Tj\n-234 TJm\n(by) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n445.012 477.781 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n477.233 477.781 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-234 TJm\n(be) 9.4047 Tj\n-234 TJm\n(detected) 33.1954 Tj\n72 465.826 Td\n(and) 14.386 Tj\n-280 TJm\n(i) 2.7696 Tj\n1 TJm\n(gnored,) 30.1568 Tj\n-287 TJm\n(and) 14.386 Tj\n-280 TJm\n(a) 4.4234 Tj\n-279 TJm\n(w) 7.193 Tj\n10 TJm\n(arning) 25.4544 Tj\n-280 TJm\n(issued.) 27.3972 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n216.033 465.826 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n248.705 465.826 Td\n/F122_0 9.9626 Tf\n(attempts) 33.7633 Tj\n-279 TJm\n(to) 7.7509 Tj\n-280 TJm\n(guess) 22.1369 Tj\n-279 TJm\n(the) 12.1743 Tj\n-280 TJm\n(\\002lename) 34.3112 Tj\n-279 TJm\n(for) 11.6164 Tj\n-280 TJm\n(the) 12.1743 Tj\n-279 TJm\n(decompressed) 56.4381 Tj\n-280 TJm\n(\\002le) 12.7322 Tj\n-279 TJm\n(from) 19.3673 Tj\n-280 TJm\n(that) 14.9439 Tj\n-279 TJm\n(of) 8.2988 Tj\n-280 TJm\n(the) 12.1743 Tj\n72 453.871 Td\n(compressed) 47.0334 Tj\n-250 TJm\n(\\002le) 12.7322 Tj\n-250 TJm\n(as) 8.2988 Tj\n-250 TJm\n(follo) 18.8194 Tj\n25 TJm\n(ws:) 13.8381 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 421.991 Td\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n82.461 421.991 Td\n/F124_0 9.9626 Tf\n(filename.bz2) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n162.66 421.991 Td\n/F122_0 9.9626 Tf\n(becomes) 34.8591 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n200.01 421.991 Td\n/F124_0 9.9626 Tf\n(filename) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 400.073 Td\n/F122_0 9.9626 Tf\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n82.461 400.073 Td\n/F124_0 9.9626 Tf\n(filename.bz) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n156.682 400.073 Td\n/F122_0 9.9626 Tf\n(becomes) 34.8591 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n194.032 400.073 Td\n/F124_0 9.9626 Tf\n(filename) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 378.155 Td\n/F122_0 9.9626 Tf\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n82.461 378.155 Td\n/F124_0 9.9626 Tf\n(filename.tbz2) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n162.66 378.155 Td\n/F122_0 9.9626 Tf\n(becomes) 34.8591 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n200.01 378.155 Td\n/F124_0 9.9626 Tf\n(filename.tar) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 356.237 Td\n/F122_0 9.9626 Tf\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n82.461 356.237 Td\n/F124_0 9.9626 Tf\n(filename.tbz) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n162.66 356.237 Td\n/F122_0 9.9626 Tf\n(becomes) 34.8591 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n200.01 356.237 Td\n/F124_0 9.9626 Tf\n(filename.tar) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 334.319 Td\n/F122_0 9.9626 Tf\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n82.461 334.319 Td\n/F124_0 9.9626 Tf\n(anyothername) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n162.66 334.319 Td\n/F122_0 9.9626 Tf\n(becomes) 34.8591 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n200.01 334.319 Td\n/F124_0 9.9626 Tf\n(anyothername.out) 95.641 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 312.402 Td\n/F122_0 9.9626 Tf\n(If) 6.6351 Tj\n-342 TJm\n(the) 12.1743 Tj\n-342 TJm\n(\\002le) 12.7322 Tj\n-342 TJm\n(does) 18.2614 Tj\n-342 TJm\n(n) 4.9813 Tj\n-1 TJm\n(ot) 7.7509 Tj\n-342 TJm\n(end) 14.386 Tj\n-342 TJm\n(in) 7.7509 Tj\n-342 TJm\n(one) 14.386 Tj\n-342 TJm\n(of) 8.2988 Tj\n-342 TJm\n(the) 12.1743 Tj\n-342 TJm\n(recognised) 43.158 Tj\n-342 TJm\n(endings,) 33.4843 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n309.305 312.402 Td\n/F124_0 9.9626 Tf\n(.bz2) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n333.215 312.402 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n339.344 312.402 Td\n/F124_0 9.9626 Tf\n(.bz) 17.9327 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n357.276 312.402 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n363.405 312.402 Td\n/F124_0 9.9626 Tf\n(.tbz2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n396.702 312.402 Td\n/F122_0 9.9626 Tf\n(or) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n408.409 312.402 Td\n/F124_0 9.9626 Tf\n(.tbz) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n432.319 312.402 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n438.448 312.402 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n471.744 312.402 Td\n/F122_0 9.9626 Tf\n(complains) 40.9562 Tj\n-342 TJm\n(that) 14.9439 Tj\n-342 TJm\n(it) 5.5392 Tj\n72 300.446 Td\n(cannot) 26.5603 Tj\n-250 TJm\n(guess) 22.1369 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(name) 21.579 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(original) 30.9936 Tj\n-250 TJm\n(\\002le,) 15.2229 Tj\n-250 TJm\n(and) 14.386 Tj\n-250 TJm\n(uses) 17.1556 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(original) 30.9936 Tj\n-250 TJm\n(name) 21.579 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n370.009 300.446 Td\n/F124_0 9.9626 Tf\n(.out) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n396.41 300.446 Td\n/F122_0 9.9626 Tf\n(appended.) 40.6673 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 278.529 Td\n(As) 11.0684 Tj\n-250 TJm\n(with) 17.7135 Tj\n-250 TJm\n(compression,) 52.8516 Tj\n-250 TJm\n(supplying) 39.3025 Tj\n-250 TJm\n(no) 9.9626 Tj\n-250 TJm\n(\\002lenames) 38.1866 Tj\n-250 TJm\n(causes) 26.0024 Tj\n-250 TJm\n(decompression) 59.7656 Tj\n-250 TJm\n(from) 19.3673 Tj\n-250 TJm\n(standard) 33.7533 Tj\n-250 TJm\n(input) 20.4831 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(standard) 33.7533 Tj\n-250 TJm\n(output.) 27.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 256.611 Td\n/F124_0 9.9626 Tf\n(bunzip2) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n116.409 256.611 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-257 TJm\n(correctly) 35.4071 Tj\n-258 TJm\n(decompress) 47.0334 Tj\n-257 TJm\n(a) 4.4234 Tj\n-258 TJm\n(\\002le) 12.7322 Tj\n-257 TJm\n(which) 24.3486 Tj\n-258 TJm\n(is) 6.6451 Tj\n-257 TJm\n(the) 12.1743 Tj\n-258 TJm\n(concatenation) 55.3323 Tj\n-257 TJm\n(of) 8.2988 Tj\n-258 TJm\n(tw) 9.9626 Tj\n10 TJm\n(o) 4.9813 Tj\n-258 TJm\n(or) 8.2988 Tj\n-257 TJm\n(more) 20.4731 Tj\n-258 TJm\n(compressed) 47.0334 Tj\n-257 TJm\n(\\002les.) 19.0983 Tj\n-665 TJm\n(The) 15.4918 Tj\n-258 TJm\n(result) 22.1369 Tj\n-257 TJm\n(is) 6.6451 Tj\n72 244.656 Td\n(the) 12.1743 Tj\n-239 TJm\n(concatenation) 55.3323 Tj\n-238 TJm\n(of) 8.2988 Tj\n-239 TJm\n(the) 12.1743 Tj\n-239 TJm\n(corresponding) 56.996 Tj\n-239 TJm\n(uncompressed) 56.996 Tj\n-238 TJm\n(\\002les.) 19.0983 Tj\n-613 TJm\n(Inte) 15.4918 Tj\n15 TJm\n(grity) 18.8194 Tj\n-238 TJm\n(testing) 26.5703 Tj\n-239 TJm\n(\\() 3.3175 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n382.247 244.656 Td\n/F124_0 9.9626 Tf\n(-t) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n394.202 244.656 Td\n/F122_0 9.9626 Tf\n(\\)) 3.3175 Tj\n-239 TJm\n(of) 8.2988 Tj\n-238 TJm\n(concatenated) 52.0048 Tj\n-239 TJm\n(compressed) 47.0334 Tj\n-239 TJm\n(\\002les) 16.6077 Tj\n-239 TJm\n(is) 6.6451 Tj\n72 232.7 Td\n(also) 16.0497 Tj\n-250 TJm\n(supported.) 41.7831 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 210.783 Td\n(Y) 7.193 Tj\n110 TJm\n(ou) 9.9626 Tj\n-399 TJm\n(can) 13.8281 Tj\n-399 TJm\n(also) 16.0497 Tj\n-399 TJm\n(compress) 37.6287 Tj\n-400 TJm\n(or) 8.2988 Tj\n-399 TJm\n(decompress) 47.0334 Tj\n-399 TJm\n(\\002les) 16.6077 Tj\n-399 TJm\n(to) 7.7509 Tj\n-399 TJm\n(the) 12.1743 Tj\n-399 TJm\n(standard) 33.7533 Tj\n-399 TJm\n(output) 25.4644 Tj\n-399 TJm\n(by) 9.9626 Tj\n-400 TJm\n(gi) 7.7509 Tj\n25 TJm\n(ving) 17.7135 Tj\n-399 TJm\n(the) 12.1743 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n409.67 210.783 Td\n/F124_0 9.9626 Tf\n(-c) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n425.602 210.783 Td\n/F122_0 9.9626 Tf\n(\\003ag.) 17.4346 Tj\n-757 TJm\n(Multiple) 34.3212 Tj\n-400 TJm\n(\\002l) 8.3088 Tj\n1 TJm\n(es) 8.2988 Tj\n-400 TJm\n(may) 17.1556 Tj\n-399 TJm\n(be) 9.4047 Tj\n72 198.827 Td\n(compressed) 47.0334 Tj\n-367 TJm\n(and) 14.386 Tj\n-367 TJm\n(decompressed) 56.4381 Tj\n-367 TJm\n(lik) 10.5205 Tj\n10 TJm\n(e) 4.4234 Tj\n-367 TJm\n(this.) 16.8866 Tj\n-1321 TJm\n(The) 15.4918 Tj\n-367 TJm\n(resulting) 34.8691 Tj\n-367 TJm\n(outputs) 29.3399 Tj\n-367 TJm\n(are) 12.1643 Tj\n-367 TJm\n(fed) 12.7222 Tj\n-367 TJm\n(sequentially) 48.1492 Tj\n-366 TJm\n(to) 7.7509 Tj\n-367 TJm\n(stdout.) 26.8492 Tj\n-1322 TJm\n(Compression) 52.5826 Tj\n-367 TJm\n(of) 8.2988 Tj\n72 186.872 Td\n(multiple) 33.2153 Tj\n-289 TJm\n(\\002les) 16.6077 Tj\n-289 TJm\n(in) 7.7509 Tj\n-289 TJm\n(this) 14.396 Tj\n-289 TJm\n(manner) 29.8778 Tj\n-288 TJm\n(generates) 37.6188 Tj\n-289 TJm\n(a) 4.4234 Tj\n-289 TJm\n(stream) 26.5603 Tj\n-289 TJm\n(containing) 42.0621 Tj\n-289 TJm\n(multiple) 33.2153 Tj\n-289 TJm\n(compressed) 47.0334 Tj\n-289 TJm\n(\\002le) 12.7322 Tj\n-289 TJm\n(representations.) 62.8042 Tj\n-853 TJm\n(Such) 19.9252 Tj\n-289 TJm\n(a) 4.4234 Tj\n-289 TJm\n(stream) 26.5603 Tj\n72 174.917 Td\n(can) 13.8281 Tj\n-391 TJm\n(be) 9.4047 Tj\n-391 TJm\n(decompressed) 56.4381 Tj\n-390 TJm\n(correctly) 35.4071 Tj\n-391 TJm\n(only) 17.7135 Tj\n-391 TJm\n(by) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n238.116 174.917 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n271.898 174.917 Td\n/F122_0 9.9626 Tf\n(v) 4.9813 Tj\n15 TJm\n(ersion) 24.3486 Tj\n-391 TJm\n(0.9.0) 19.9252 Tj\n-391 TJm\n(or) 8.2988 Tj\n-390 TJm\n(later) 17.7035 Tj\n55 TJm\n(.) 2.4907 Tj\n-733 TJm\n(Earlier) 27.1082 Tj\n-391 TJm\n(v) 4.9813 Tj\n15 TJm\n(ersions) 28.224 Tj\n-391 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n448.071 174.917 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n481.852 174.917 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-391 TJm\n(stop) 16.6077 Tj\n-391 TJm\n(after) 18.2515 Tj\n72 162.962 Td\n(decompressing) 59.7656 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(\\002rst) 15.5018 Tj\n-250 TJm\n(\\002le) 12.7322 Tj\n-250 TJm\n(in) 7.7509 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(stream.) 29.0509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 141.044 Td\n/F124_0 9.9626 Tf\n(bzcat) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n104.379 141.044 Td\n/F122_0 9.9626 Tf\n(\\(or) 11.6164 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n118.486 141.044 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n-600 TJm\n(-dc) 17.9327 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n172.284 141.044 Td\n/F122_0 9.9626 Tf\n(\\)) 3.3175 Tj\n-250 TJm\n(decompresses) 55.3323 Tj\n-250 TJm\n(all) 9.9626 Tj\n-250 TJm\n(speci\\002ed) 35.417 Tj\n-250 TJm\n(\\002les) 16.6077 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(standard) 33.7533 Tj\n-250 TJm\n(output.) 27.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 119.126 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n104.866 119.126 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-299 TJm\n(read) 17.1456 Tj\n-299 TJm\n(ar) 7.7409 Tj\n18 TJm\n(guments) 33.7633 Tj\n-299 TJm\n(from) 19.3673 Tj\n-299 TJm\n(the) 12.1743 Tj\n-299 TJm\n(en) 9.4047 Tj\n40 TJm\n(vironment) 40.9562 Tj\n-298 TJm\n(v) 4.9813 Tj\n25 TJm\n(ariables) 30.9837 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n316.903 119.126 Td\n/F124_0 9.9626 Tf\n(BZIP2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n349.769 119.126 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n367.133 119.126 Td\n/F124_0 9.9626 Tf\n(BZIP) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n391.043 119.126 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-299 TJm\n(in) 7.7509 Tj\n-299 TJm\n(that) 14.9439 Tj\n-299 TJm\n(order) 21.0211 Tj\n40 TJm\n(,) 2.4907 Tj\n-311 TJm\n(and) 14.386 Tj\n-299 TJm\n(will) 15.5018 Tj\n-299 TJm\n(process) 29.8778 Tj\n-299 TJm\n(them) 19.9252 Tj\n72 107.171 Td\n(before) 25.4445 Tj\n-250 TJm\n(an) 9.4047 Tj\n15 TJm\n(y) 4.9813 Tj\n-250 TJm\n(ar) 7.7409 Tj\n18 TJm\n(guments) 33.7633 Tj\n-250 TJm\n(read) 17.1456 Tj\n-250 TJm\n(from) 19.3673 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(command) 39.2925 Tj\n-250 TJm\n(line.) 17.4346 Tj\n-310 TJm\n(This) 17.7135 Tj\n-250 TJm\n(gi) 7.7509 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(es) 8.2988 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(con) 14.386 Tj\n40 TJm\n(v) 4.9813 Tj\n15 TJm\n(enient) 24.3486 Tj\n-250 TJm\n(w) 7.193 Tj\n10 TJm\n(ay) 9.4047 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(supply) 26.5703 Tj\n-250 TJm\n(def) 12.7222 Tj\n10 TJm\n(ault) 14.9439 Tj\n-250 TJm\n(ar) 7.7409 Tj\n18 TJm\n(guments.) 36.2539 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 85.253 Td\n(Compression) 52.5826 Tj\n-294 TJm\n(is) 6.6451 Tj\n-294 TJm\n(al) 7.193 Tj\n10 TJm\n(w) 7.193 Tj\n10 TJm\n(ays) 13.2801 Tj\n-294 TJm\n(performed,) 43.9849 Tj\n-305 TJm\n(e) 4.4234 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(en) 9.4047 Tj\n-294 TJm\n(if) 6.0871 Tj\n-294 TJm\n(the) 12.1743 Tj\n-294 TJm\n(compressed) 47.0334 Tj\n-294 TJm\n(\\002le) 12.7322 Tj\n-293 TJm\n(is) 6.6451 Tj\n-294 TJm\n(slightly) 29.8978 Tj\n-294 TJm\n(lar) 10.5105 Tj\n18 TJm\n(ger) 12.7222 Tj\n-294 TJm\n(than) 17.1556 Tj\n-294 TJm\n(the) 12.1743 Tj\n-294 TJm\n(original.) 33.4843 Tj\n-884 TJm\n(Files) 19.3773 Tj\n-294 TJm\n(of) 8.2988 Tj\n-294 TJm\n(less) 14.9439 Tj\n-294 TJm\n(than) 17.1556 Tj\n72 73.298 Td\n(about) 22.1369 Tj\n-246 TJm\n(one) 14.386 Tj\n-246 TJm\n(hundred) 32.6474 Tj\n-245 TJm\n(bytes) 21.031 Tj\n-246 TJm\n(tend) 17.1556 Tj\n-246 TJm\n(to) 7.7509 Tj\n-246 TJm\n(get) 12.1743 Tj\n-246 TJm\n(l) 2.7696 Tj\n1 TJm\n(ar) 7.7409 Tj\n18 TJm\n(ger) 12.7222 Tj\n40 TJm\n(,) 2.4907 Tj\n-247 TJm\n(since) 20.4731 Tj\n-246 TJm\n(the) 12.1743 Tj\n-246 TJm\n(compression) 50.3609 Tj\n-245 TJm\n(mechanism) 45.3796 Tj\n-246 TJm\n(has) 13.2801 Tj\n-246 TJm\n(a) 4.4234 Tj\n-246 TJm\n(constant) 33.2053 Tj\n-246 TJm\n(o) 4.9813 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(erhead) 26.5503 Tj\n-245 TJm\n(in) 7.7509 Tj\n-246 TJm\n(the) 12.1743 Tj\n-246 TJm\n(re) 7.7409 Tj\n15 TJm\n(gion) 17.7135 Tj\n-246 TJm\n(of) 8.2988 Tj\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n539.395 50.951 Td\n(3) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 4 7\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n477.109 749.245 Td\n/F122_0 9.9626 Tf\n(Ho) 12.1743 Tj\n25 TJm\n(w) 7.193 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(use) 13.2801 Tj\n-250 TJm\n(bzip2) 22.1369 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n72 710.037 Td\n/F122_0 9.9626 Tf\n(50) 9.9626 Tj\n-264 TJm\n(bytes.) 23.5217 Tj\n-351 TJm\n(Random) 33.7633 Tj\n-264 TJm\n(dat) 12.1743 Tj\n1 TJm\n(a) 4.4234 Tj\n-264 TJm\n(\\(including) 40.9562 Tj\n-264 TJm\n(the) 12.1743 Tj\n-264 TJm\n(output) 25.4644 Tj\n-263 TJm\n(of) 8.2988 Tj\n-264 TJm\n(most) 19.3773 Tj\n-264 TJm\n(\\002le) 12.7322 Tj\n-263 TJm\n(compressors\\)) 53.1206 Tj\n-264 TJm\n(is) 6.6451 Tj\n-264 TJm\n(coded) 23.7907 Tj\n-263 TJm\n(at) 7.193 Tj\n-264 TJm\n(about) 22.1369 Tj\n-264 TJm\n(8.05) 17.4346 Tj\n-263 TJm\n(bits) 14.396 Tj\n-264 TJm\n(per) 12.7222 Tj\n-264 TJm\n(byte,) 19.6462 Tj\n-267 TJm\n(gi) 7.7509 Tj\n25 TJm\n(ving) 17.7135 Tj\n-264 TJm\n(an) 9.4047 Tj\n72 698.082 Td\n(e) 4.4234 Tj\n15 TJm\n(xpansion) 35.9749 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(around) 27.6661 Tj\n-250 TJm\n(0.5%.) 23.2427 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 676.283 Td\n(As) 11.0684 Tj\n-268 TJm\n(a) 4.4234 Tj\n-268 TJm\n(self-check) 40.9363 Tj\n-269 TJm\n(for) 11.6164 Tj\n-268 TJm\n(your) 18.2614 Tj\n-268 TJm\n(protection,) 42.889 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n217.273 676.283 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n249.833 676.283 Td\n/F122_0 9.9626 Tf\n(uses) 17.1556 Tj\n-268 TJm\n(32-bit) 23.8007 Tj\n-268 TJm\n(CRCs) 23.8106 Tj\n-269 TJm\n(to) 7.7509 Tj\n-268 TJm\n(mak) 17.1556 Tj\n10 TJm\n(e) 4.4234 Tj\n-268 TJm\n(sure) 16.5977 Tj\n-268 TJm\n(that) 14.9439 Tj\n-268 TJm\n(the) 12.1743 Tj\n-269 TJm\n(decompressed) 56.4381 Tj\n-268 TJm\n(v) 4.9813 Tj\n15 TJm\n(ersion) 24.3486 Tj\n-268 TJm\n(of) 8.2988 Tj\n-268 TJm\n(a) 4.4234 Tj\n-268 TJm\n(\\002le) 12.7322 Tj\n-269 TJm\n(is) 6.6451 Tj\n72 664.328 Td\n(identical) 34.3112 Tj\n-200 TJm\n(to) 7.7509 Tj\n-199 TJm\n(the) 12.1743 Tj\n-200 TJm\n(original.) 33.4843 Tj\n-586 TJm\n(This) 17.7135 Tj\n-200 TJm\n(guards) 26.5603 Tj\n-199 TJm\n(ag) 9.4047 Tj\n5 TJm\n(ainst) 18.8194 Tj\n-200 TJm\n(corruption) 41.5042 Tj\n-199 TJm\n(of) 8.2988 Tj\n-200 TJm\n(the) 12.1743 Tj\n-200 TJm\n(compressed) 47.0334 Tj\n-199 TJm\n(data,) 19.0883 Tj\n-210 TJm\n(and) 14.386 Tj\n-199 TJm\n(ag) 9.4047 Tj\n5 TJm\n(ainst) 18.8194 Tj\n-200 TJm\n(undetected) 43.158 Tj\n-200 TJm\n(b) 4.9813 Tj\n20 TJm\n(ugs) 13.8381 Tj\n-199 TJm\n(in) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n510.112 664.328 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 652.373 Td\n/F122_0 9.9626 Tf\n(\\(hopefully) 41.5042 Tj\n-275 TJm\n(v) 4.9813 Tj\n15 TJm\n(ery) 12.7222 Tj\n-274 TJm\n(unlik) 20.4831 Tj\n10 TJm\n(ely\\).) 17.9825 Tj\n-384 TJm\n(The) 15.4918 Tj\n-275 TJm\n(chances) 31.5316 Tj\n-275 TJm\n(of) 8.2988 Tj\n-275 TJm\n(data) 16.5977 Tj\n-274 TJm\n(corruption) 41.5042 Tj\n-275 TJm\n(going) 22.6948 Tj\n-275 TJm\n(undetected) 43.158 Tj\n-274 TJm\n(is) 6.6451 Tj\n-275 TJm\n(microscopic,) 51.1878 Tj\n-281 TJm\n(about) 22.1369 Tj\n-275 TJm\n(one) 14.386 Tj\n-274 TJm\n(chance) 27.6562 Tj\n-275 TJm\n(in) 7.7509 Tj\n-275 TJm\n(four) 16.5977 Tj\n72 640.417 Td\n(billion) 26.0223 Tj\n-279 TJm\n(for) 11.6164 Tj\n-279 TJm\n(each) 18.2515 Tj\n-279 TJm\n(\\002le) 12.7322 Tj\n-280 TJm\n(processed.) 41.7732 Tj\n-795 TJm\n(Be) 11.0684 Tj\n-279 TJm\n(a) 4.4234 Tj\n15 TJm\n(w) 7.193 Tj\n10 TJm\n(are,) 14.655 Tj\n-286 TJm\n(though,) 30.1668 Tj\n-287 TJm\n(that) 14.9439 Tj\n-279 TJm\n(the) 12.1743 Tj\n-279 TJm\n(check) 23.2328 Tj\n-279 TJm\n(occurs) 26.0024 Tj\n-279 TJm\n(upon) 19.9252 Tj\n-279 TJm\n(decompression,) 62.2563 Tj\n-287 TJm\n(so) 8.8568 Tj\n-279 TJm\n(it) 5.5392 Tj\n-279 TJm\n(can) 13.8281 Tj\n-279 TJm\n(only) 17.7135 Tj\n-280 TJm\n(tell) 12.7322 Tj\n-279 TJm\n(you) 14.9439 Tj\n72 628.462 Td\n(that) 14.9439 Tj\n-237 TJm\n(something) 41.5142 Tj\n-236 TJm\n(is) 6.6451 Tj\n-237 TJm\n(wrong.) 27.9451 Tj\n-611 TJm\n(It) 6.0871 Tj\n-237 TJm\n(can') 17.1456 Tj\n18 TJm\n(t) 2.7696 Tj\n-237 TJm\n(help) 17.1556 Tj\n-237 TJm\n(you) 14.9439 Tj\n-236 TJm\n(reco) 17.1456 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(er) 7.7409 Tj\n-237 TJm\n(the) 12.1743 Tj\n-237 TJm\n(original) 30.9936 Tj\n-237 TJm\n(uncompressed) 56.996 Tj\n-236 TJm\n(data.) 19.0883 Tj\n-612 TJm\n(Y) 7.193 Tj\n110 TJm\n(ou) 9.9626 Tj\n-236 TJm\n(can) 13.8281 Tj\n-237 TJm\n(use) 13.2801 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n458.159 628.462 Td\n/F124_0 9.9626 Tf\n(bzip2recover) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n532.249 628.462 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n72 616.507 Td\n(try) 11.0684 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(reco) 17.1456 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(er) 7.7409 Tj\n-250 TJm\n(data) 16.5977 Tj\n-250 TJm\n(from) 19.3673 Tj\n-250 TJm\n(damaged) 35.965 Tj\n-250 TJm\n(\\002les.) 19.0983 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 594.708 Td\n(Return) 27.1182 Tj\n-298 TJm\n(v) 4.9813 Tj\n25 TJm\n(alues:) 23.2427 Tj\n-406 TJm\n(0) 4.9813 Tj\n-298 TJm\n(for) 11.6164 Tj\n-298 TJm\n(a) 4.4234 Tj\n-298 TJm\n(normal) 28.224 Tj\n-298 TJm\n(e) 4.4234 Tj\n15 TJm\n(xit,) 13.0112 Tj\n-310 TJm\n(1) 4.9813 Tj\n-298 TJm\n(for) 11.6164 Tj\n-297 TJm\n(en) 9.4047 Tj\n40 TJm\n(vironmental) 48.1492 Tj\n-298 TJm\n(problems) 37.0808 Tj\n-298 TJm\n(\\(\\002le) 16.0497 Tj\n-298 TJm\n(not) 12.7322 Tj\n-298 TJm\n(found,) 25.7334 Tj\n-310 TJm\n(in) 7.7509 Tj\n40 TJm\n(v) 4.9813 Tj\n25 TJm\n(alid) 14.9439 Tj\n-298 TJm\n(\\003ags,) 21.31 Tj\n-310 TJm\n(I/O) 13.2801 Tj\n-298 TJm\n(errors,) 25.7234 Tj\n-310 TJm\n(etc.\\),) 19.9152 Tj\n-310 TJm\n(2) 4.9813 Tj\n-298 TJm\n(to) 7.7509 Tj\n72 582.753 Td\n(indicate) 31.5416 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(corrupt) 28.772 Tj\n-250 TJm\n(compressed) 47.0334 Tj\n-250 TJm\n(\\002le,) 15.2229 Tj\n-250 TJm\n(3) 4.9813 Tj\n-250 TJm\n(for) 11.6164 Tj\n-250 TJm\n(an) 9.4047 Tj\n-250 TJm\n(internal) 30.4357 Tj\n-250 TJm\n(consistenc) 41.5042 Tj\n15 TJm\n(y) 4.9813 Tj\n-250 TJm\n(error) 19.3573 Tj\n-250 TJm\n(\\(e) 7.7409 Tj\n15 TJm\n(g,) 7.472 Tj\n-250 TJm\n(b) 4.9813 Tj\n20 TJm\n(ug\\)) 13.2801 Tj\n-250 TJm\n(which) 24.3486 Tj\n-250 TJm\n(caused) 27.1082 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n443.065 582.753 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n475.444 582.753 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-250 TJm\n(panic.) 24.0696 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 548.118 Td\n/F116_0 20.6585 Tf\n(2.4.) 34.4584 Tj\n-278 TJm\n(OPTIONS) 92.9839 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 516.475 Td\n/F124_0 9.9626 Tf\n(-c) 11.9551 Tj\n-600 TJm\n(--stdout) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 504.52 Td\n/F122_0 9.9626 Tf\n(Compress) 39.8504 Tj\n-250 TJm\n(or) 8.2988 Tj\n-250 TJm\n(decompress) 47.0334 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(standard) 33.7533 Tj\n-250 TJm\n(output.) 27.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 478.854 Td\n/F124_0 9.9626 Tf\n(-d) 11.9551 Tj\n-600 TJm\n(--decompress) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 466.899 Td\n/F122_0 9.9626 Tf\n(F) 5.5392 Tj\n15 TJm\n(orce) 17.1456 Tj\n-296 TJm\n(decompression.) 62.2563 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n200.214 466.899 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n230.102 466.899 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n235.659 466.899 Td\n/F124_0 9.9626 Tf\n(bunzip2) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n280.454 466.899 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n297.791 466.899 Td\n/F124_0 9.9626 Tf\n(bzcat) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n330.631 466.899 Td\n/F122_0 9.9626 Tf\n(are) 12.1643 Tj\n-296 TJm\n(really) 22.6848 Tj\n-296 TJm\n(the) 12.1743 Tj\n-297 TJm\n(same) 20.4731 Tj\n-296 TJm\n(program,) 36.2439 Tj\n-308 TJm\n(and) 14.386 Tj\n-296 TJm\n(the) 12.1743 Tj\n-296 TJm\n(decision) 33.2053 Tj\n-297 TJm\n(about) 22.1369 Tj\n108 454.944 Td\n(what) 19.3673 Tj\n-303 TJm\n(actions) 28.224 Tj\n-303 TJm\n(to) 7.7509 Tj\n-303 TJm\n(tak) 12.1743 Tj\n10 TJm\n(e) 4.4234 Tj\n-303 TJm\n(is) 6.6451 Tj\n-303 TJm\n(done) 19.3673 Tj\n-303 TJm\n(on) 9.9626 Tj\n-304 TJm\n(the) 12.1743 Tj\n-303 TJm\n(basis) 19.9252 Tj\n-303 TJm\n(of) 8.2988 Tj\n-303 TJm\n(which) 24.3486 Tj\n-303 TJm\n(name) 21.579 Tj\n-303 TJm\n(is) 6.6451 Tj\n-303 TJm\n(used.) 20.7521 Tj\n-939 TJm\n(This) 17.7135 Tj\n-303 TJm\n(\\003ag) 14.9439 Tj\n-303 TJm\n(o) 4.9813 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(errides) 27.1082 Tj\n-303 TJm\n(that) 14.9439 Tj\n-303 TJm\n(mechanism,) 47.8703 Tj\n-316 TJm\n(and) 14.386 Tj\n108 442.988 Td\n(forces) 24.3386 Tj\n-250 TJm\n(bzip2) 22.1369 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(decompress.) 49.5241 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 417.323 Td\n/F124_0 9.9626 Tf\n(-z) 11.9551 Tj\n-600 TJm\n(--compress) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 405.368 Td\n/F122_0 9.9626 Tf\n(The) 15.4918 Tj\n-250 TJm\n(complement) 49.2551 Tj\n-250 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n187.969 405.368 Td\n/F124_0 9.9626 Tf\n(-d) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n199.924 405.368 Td\n/F122_0 9.9626 Tf\n(:) 2.7696 Tj\n-310 TJm\n(forces) 24.3386 Tj\n-250 TJm\n(compression,) 52.8516 Tj\n-250 TJm\n(re) 7.7409 Tj\n15 TJm\n(g) 4.9813 Tj\n5 TJm\n(ardless) 27.6661 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(in) 7.7509 Tj\n40 TJm\n(v) 4.9813 Tj\n20 TJm\n(okation) 29.8878 Tj\n-250 TJm\n(name.) 24.0696 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 379.702 Td\n/F124_0 9.9626 Tf\n(-t) 11.9551 Tj\n-600 TJm\n(--test) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 367.747 Td\n/F122_0 9.9626 Tf\n(Check) 25.4544 Tj\n-270 TJm\n(inte) 14.9439 Tj\n15 TJm\n(grity) 18.8194 Tj\n-271 TJm\n(of) 8.2988 Tj\n-270 TJm\n(the) 12.1743 Tj\n-271 TJm\n(speci\\002ed) 35.417 Tj\n-270 TJm\n(\\002le\\(s\\),) 25.7334 Tj\n-276 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-270 TJm\n(don') 18.2614 Tj\n18 TJm\n(t) 2.7696 Tj\n-270 TJm\n(decompress) 47.0334 Tj\n-271 TJm\n(them.) 22.4159 Tj\n-742 TJm\n(This) 17.7135 Tj\n-271 TJm\n(really) 22.6848 Tj\n-270 TJm\n(performs) 35.965 Tj\n-270 TJm\n(a) 4.4234 Tj\n-271 TJm\n(trial) 16.0497 Tj\n-270 TJm\n(decompres-) 46.4755 Tj\n108 355.792 Td\n(sion) 16.6077 Tj\n-250 TJm\n(and) 14.386 Tj\n-250 TJm\n(thro) 16.0497 Tj\n25 TJm\n(ws) 11.0684 Tj\n-250 TJm\n(a) 4.4234 Tj\n15 TJm\n(w) 7.193 Tj\n10 TJm\n(ay) 9.4047 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(result.) 24.6275 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 330.126 Td\n/F124_0 9.9626 Tf\n(-f) 11.9551 Tj\n-600 TJm\n(--force) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 318.171 Td\n/F122_0 9.9626 Tf\n(F) 5.5392 Tj\n15 TJm\n(orce) 17.1456 Tj\n-338 TJm\n(o) 4.9813 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(erwrite) 28.2141 Tj\n-339 TJm\n(of) 8.2988 Tj\n-338 TJm\n(output) 25.4644 Tj\n-338 TJm\n(\\002les.) 19.0983 Tj\n-1150 TJm\n(Normally) 38.1866 Tj\n65 TJm\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n289.831 318.171 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n323.089 318.171 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-338 TJm\n(not) 12.7322 Tj\n-339 TJm\n(o) 4.9813 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(erwrite) 28.2141 Tj\n-338 TJm\n(e) 4.4234 Tj\n15 TJm\n(xisting) 27.1282 Tj\n-338 TJm\n(output) 25.4644 Tj\n-338 TJm\n(\\002les.) 19.0983 Tj\n-1150 TJm\n(Also) 18.8194 Tj\n-339 TJm\n(forces) 24.3386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 306.215 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n140.379 306.215 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-250 TJm\n(break) 22.1269 Tj\n-250 TJm\n(hard) 17.7035 Tj\n-250 TJm\n(links) 19.3773 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(\\002les,) 19.0983 Tj\n-250 TJm\n(which) 24.3486 Tj\n-250 TJm\n(it) 5.5392 Tj\n-250 TJm\n(otherwise) 38.7346 Tj\n-250 TJm\n(w) 7.193 Tj\n10 TJm\n(ouldn') 26.0123 Tj\n18 TJm\n(t) 2.7696 Tj\n-250 TJm\n(do.) 12.4533 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 284.416 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n141.211 284.416 Td\n/F122_0 9.9626 Tf\n(normally) 35.9749 Tj\n-334 TJm\n(declines) 32.6474 Tj\n-333 TJm\n(to) 7.7509 Tj\n-334 TJm\n(decompress) 47.0334 Tj\n-333 TJm\n(\\002les) 16.6077 Tj\n-334 TJm\n(which) 24.3486 Tj\n-333 TJm\n(don') 18.2614 Tj\n18 TJm\n(t) 2.7696 Tj\n-334 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-333 TJm\n(the) 12.1743 Tj\n-334 TJm\n(correct) 27.6562 Tj\n-333 TJm\n(magic) 24.3486 Tj\n-334 TJm\n(header) 26.5503 Tj\n-333 TJm\n(bytes.) 23.5217 Tj\n-561 TJm\n(If) 6.6351 Tj\n-334 TJm\n(forced) 25.4445 Tj\n108 272.461 Td\n(\\() 3.3175 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n111.318 272.461 Td\n/F124_0 9.9626 Tf\n(-f) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n123.273 272.461 Td\n/F122_0 9.9626 Tf\n(\\),) 5.8082 Tj\n-250 TJm\n(ho) 9.9626 Tj\n25 TJm\n(we) 11.6164 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(er) 7.7409 Tj\n40 TJm\n(,) 2.4907 Tj\n-250 TJm\n(it) 5.5392 Tj\n-250 TJm\n(will) 15.5018 Tj\n-250 TJm\n(pass) 17.1556 Tj\n-250 TJm\n(such) 18.2614 Tj\n-250 TJm\n(\\002les) 16.6077 Tj\n-250 TJm\n(through) 30.9936 Tj\n-250 TJm\n(unmodi\\002ed.) 47.8803 Tj\n-310 TJm\n(This) 17.7135 Tj\n-250 TJm\n(is) 6.6451 Tj\n-250 TJm\n(ho) 9.9626 Tj\n25 TJm\n(w) 7.193 Tj\n-250 TJm\n(GNU) 21.579 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n412.585 272.461 Td\n/F124_0 9.9626 Tf\n(gzip) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n438.986 272.461 Td\n/F122_0 9.9626 Tf\n(beha) 18.8094 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(es.) 10.7895 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 246.795 Td\n/F124_0 9.9626 Tf\n(-k) 11.9551 Tj\n-600 TJm\n(--keep) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 234.84 Td\n/F122_0 9.9626 Tf\n(K) 7.193 Tj\n25 TJm\n(eep) 13.8281 Tj\n-250 TJm\n(\\(don') 21.579 Tj\n18 TJm\n(t) 2.7696 Tj\n-250 TJm\n(delete\\)) 27.1082 Tj\n-250 TJm\n(input) 20.4831 Tj\n-250 TJm\n(\\002les) 16.6077 Tj\n-250 TJm\n(during) 26.0123 Tj\n-250 TJm\n(compression) 50.3609 Tj\n-250 TJm\n(or) 8.2988 Tj\n-250 TJm\n(decompression.) 62.2563 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 209.174 Td\n/F124_0 9.9626 Tf\n(-s) 11.9551 Tj\n-600 TJm\n(--small) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 197.219 Td\n/F122_0 9.9626 Tf\n(Reduce) 29.8778 Tj\n-347 TJm\n(memory) 33.2053 Tj\n-347 TJm\n(usage,) 25.1755 Tj\n-371 TJm\n(for) 11.6164 Tj\n-346 TJm\n(compression,) 52.8516 Tj\n-371 TJm\n(decompression) 59.7656 Tj\n-347 TJm\n(and) 14.386 Tj\n-347 TJm\n(testing.) 29.0609 Tj\n-1201 TJm\n(Files) 19.3773 Tj\n-347 TJm\n(are) 12.1643 Tj\n-347 TJm\n(decompressed) 56.4381 Tj\n-346 TJm\n(and) 14.386 Tj\n-347 TJm\n(tested) 23.2427 Tj\n108 185.264 Td\n(using) 21.589 Tj\n-388 TJm\n(a) 4.4234 Tj\n-388 TJm\n(modi\\002ed) 35.427 Tj\n-388 TJm\n(algorithm) 38.7446 Tj\n-389 TJm\n(which) 24.3486 Tj\n-388 TJm\n(only) 17.7135 Tj\n-388 TJm\n(requires) 32.0895 Tj\n-388 TJm\n(2.5) 12.4533 Tj\n-388 TJm\n(bytes) 21.031 Tj\n-388 TJm\n(per) 12.7222 Tj\n-388 TJm\n(block) 22.1369 Tj\n-389 TJm\n(byte.) 19.6462 Tj\n-1448 TJm\n(This) 17.7135 Tj\n-389 TJm\n(means) 25.4544 Tj\n-388 TJm\n(an) 9.4047 Tj\n15 TJm\n(y) 4.9813 Tj\n-388 TJm\n(\\002le) 12.7322 Tj\n-388 TJm\n(can) 13.8281 Tj\n-388 TJm\n(be) 9.4047 Tj\n108 173.309 Td\n(decompressed) 56.4381 Tj\n-250 TJm\n(in) 7.7509 Tj\n-250 TJm\n(2300k) 24.9065 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(memory) 33.2053 Tj\n65 TJm\n(,) 2.4907 Tj\n-250 TJm\n(albeit) 22.1369 Tj\n-250 TJm\n(at) 7.193 Tj\n-250 TJm\n(about) 22.1369 Tj\n-250 TJm\n(half) 15.4918 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(normal) 28.224 Tj\n-250 TJm\n(speed.) 25.1755 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 151.51 Td\n(During) 28.224 Tj\n-252 TJm\n(compr) 25.4544 Tj\n1 TJm\n(ession,) 27.3972 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n194.091 151.51 Td\n/F124_0 9.9626 Tf\n(-s) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n208.551 151.51 Td\n/F122_0 9.9626 Tf\n(selects) 26.5603 Tj\n-252 TJm\n(a) 4.4234 Tj\n-251 TJm\n(block) 22.1369 Tj\n-252 TJm\n(size) 15.4918 Tj\n-251 TJm\n(of) 8.2988 Tj\n-252 TJm\n(200k,) 22.4159 Tj\n-251 TJm\n(which) 24.3486 Tj\n-252 TJm\n(limits) 22.7048 Tj\n-251 TJm\n(memory) 33.2053 Tj\n-252 TJm\n(use) 13.2801 Tj\n-251 TJm\n(to) 7.7509 Tj\n-252 TJm\n(around) 27.6661 Tj\n-251 TJm\n(the) 12.1743 Tj\n-252 TJm\n(same) 20.4731 Tj\n-251 TJm\n(\\002gure,) 25.7334 Tj\n-252 TJm\n(at) 7.193 Tj\n108 139.554 Td\n(the) 12.1743 Tj\n-287 TJm\n(e) 4.4234 Tj\n15 TJm\n(xpense) 27.6661 Tj\n-287 TJm\n(of) 8.2988 Tj\n-288 TJm\n(your) 18.2614 Tj\n-287 TJm\n(compression) 50.3609 Tj\n-287 TJm\n(ratio.) 20.7521 Tj\n-843 TJm\n(In) 8.2988 Tj\n-287 TJm\n(short,) 22.4159 Tj\n-297 TJm\n(if) 6.0871 Tj\n-287 TJm\n(your) 18.2614 Tj\n-287 TJm\n(machine) 33.7533 Tj\n-287 TJm\n(is) 6.6451 Tj\n-287 TJm\n(lo) 7.7509 Tj\n25 TJm\n(w) 7.193 Tj\n-287 TJm\n(on) 9.9626 Tj\n-288 TJm\n(memory) 33.2053 Tj\n-287 TJm\n(\\(8) 8.2988 Tj\n-287 TJm\n(me) 12.1743 Tj\n15 TJm\n(g) 4.9813 Tj\n5 TJm\n(abytes) 25.4544 Tj\n-287 TJm\n(or) 8.2988 Tj\n-287 TJm\n(less\\),) 20.7521 Tj\n108 127.599 Td\n(use) 13.2801 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n123.771 127.599 Td\n/F124_0 9.9626 Tf\n(-s) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n138.217 127.599 Td\n/F122_0 9.9626 Tf\n(for) 11.6164 Tj\n-250 TJm\n(e) 4.4234 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(erything.) 35.696 Tj\n-620 TJm\n(See) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n-250 TJm\n(MEMOR) 37.6387 Tj\n65 TJm\n(Y) 7.193 Tj\n-250 TJm\n(MAN) 23.2427 Tj\n35 TJm\n(A) 7.193 Tj\n40 TJm\n(GEMENT) 41.5042 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n-250 TJm\n([5]) 11.6164 Tj\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-250 TJm\n(belo) 17.1556 Tj\n25 TJm\n(w) 7.193 Tj\n65 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 101.933 Td\n/F124_0 9.9626 Tf\n(-q) 11.9551 Tj\n-600 TJm\n(--quiet) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 89.978 Td\n/F122_0 9.9626 Tf\n(Suppress) 35.9749 Tj\n-221 TJm\n(non-essential) 52.5726 Tj\n-220 TJm\n(w) 7.193 Tj\n10 TJm\n(arning) 25.4544 Tj\n-221 TJm\n(messages.) 40.1194 Tj\n-300 TJm\n(Messages) 38.7346 Tj\n-221 TJm\n(pertaining) 40.3983 Tj\n-221 TJm\n(to) 7.7509 Tj\n-220 TJm\n(I/O) 13.2801 Tj\n-221 TJm\n(errors) 23.2328 Tj\n-221 TJm\n(and) 14.386 Tj\n-220 TJm\n(other) 20.4731 Tj\n-221 TJm\n(critical) 27.6661 Tj\n-221 TJm\n(e) 4.4234 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(ents) 16.0497 Tj\n-221 TJm\n(wi) 9.9626 Tj\n1 TJm\n(ll) 5.5392 Tj\n-221 TJm\n(not) 12.7322 Tj\n108 78.023 Td\n(be) 9.4047 Tj\n-250 TJm\n(suppressed.) 46.2065 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n539.395 50.852 Td\n(4) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 5 8\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n477.109 749.245 Td\n/F122_0 9.9626 Tf\n(Ho) 12.1743 Tj\n25 TJm\n(w) 7.193 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(use) 13.2801 Tj\n-250 TJm\n(bzip2) 22.1369 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n72 710.037 Td\n/F124_0 9.9626 Tf\n(-v) 11.9551 Tj\n-600 TJm\n(--verbose) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 698.082 Td\n/F122_0 9.9626 Tf\n(V) 7.193 Tj\n111 TJm\n(erbose) 26.0024 Tj\n-323 TJm\n(mode) 22.1369 Tj\n-322 TJm\n(--) 6.6351 Tj\n-323 TJm\n(sho) 13.8381 Tj\n25 TJm\n(w) 7.193 Tj\n-322 TJm\n(the) 12.1743 Tj\n-323 TJm\n(compression) 50.3609 Tj\n-323 TJm\n(ratio) 18.2614 Tj\n-322 TJm\n(for) 11.6164 Tj\n-323 TJm\n(each) 18.2515 Tj\n-322 TJm\n(\\002le) 12.7322 Tj\n-323 TJm\n(processed.) 41.7732 Tj\n-1056 TJm\n(Further) 29.3299 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n430.015 698.082 Td\n/F124_0 9.9626 Tf\n(-v) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n441.97 698.082 Td\n/F122_0 9.9626 Tf\n(') 3.3175 Tj\n55 TJm\n(s) 3.8755 Tj\n-323 TJm\n(increase) 32.6375 Tj\n-322 TJm\n(the) 12.1743 Tj\n-323 TJm\n(v) 4.9813 Tj\n15 TJm\n(erbosity) 32.0995 Tj\n108 686.127 Td\n(le) 7.193 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(el,) 9.6836 Tj\n-250 TJm\n(spe) 13.2801 Tj\n25 TJm\n(wing) 19.9252 Tj\n-250 TJm\n(out) 12.7322 Tj\n-250 TJm\n(lots) 14.396 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(information) 47.0434 Tj\n-250 TJm\n(which) 24.3486 Tj\n-250 TJm\n(is) 6.6451 Tj\n-250 TJm\n(primarily) 37.0808 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(interest) 29.3299 Tj\n-250 TJm\n(for) 11.6164 Tj\n-250 TJm\n(diagnostic) 40.9562 Tj\n-250 TJm\n(purposes.) 37.9077 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 660.224 Td\n/F124_0 9.9626 Tf\n(-L) 11.9551 Tj\n-600 TJm\n(--license) 53.798 Tj\n-600 TJm\n(-V) 11.9551 Tj\n-600 TJm\n(--version) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 648.269 Td\n/F122_0 9.9626 Tf\n(Display) 30.9936 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(softw) 22.1369 Tj\n10 TJm\n(are) 12.1643 Tj\n-250 TJm\n(v) 4.9813 Tj\n15 TJm\n(ersion,) 26.8392 Tj\n-250 TJm\n(license) 27.6661 Tj\n-250 TJm\n(terms) 22.1369 Tj\n-250 TJm\n(and) 14.386 Tj\n-250 TJm\n(conditions.) 44.0048 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 622.366 Td\n/F124_0 9.9626 Tf\n(-1) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n86.446 622.366 Td\n/F122_0 9.9626 Tf\n(\\(or) 11.6164 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n100.553 622.366 Td\n/F124_0 9.9626 Tf\n(--fast) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n136.418 622.366 Td\n/F122_0 9.9626 Tf\n(\\)) 3.3175 Tj\n-250 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n152.468 622.366 Td\n/F124_0 9.9626 Tf\n(-9) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n166.914 622.366 Td\n/F122_0 9.9626 Tf\n(\\(or) 11.6164 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n181.021 622.366 Td\n/F124_0 9.9626 Tf\n(-best) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n210.909 622.366 Td\n/F122_0 9.9626 Tf\n(\\)) 3.3175 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 610.411 Td\n(Set) 12.7322 Tj\n-288 TJm\n(the) 12.1743 Tj\n-289 TJm\n(block) 22.1369 Tj\n-288 TJm\n(size) 15.4918 Tj\n-288 TJm\n(to) 7.7509 Tj\n-288 TJm\n(100) 14.9439 Tj\n-289 TJm\n(k,) 7.472 Tj\n-298 TJm\n(200) 14.9439 Tj\n-288 TJm\n(k) 4.9813 Tj\n-288 TJm\n(...) 7.472 Tj\n-850 TJm\n(900) 14.9439 Tj\n-288 TJm\n(k) 4.9813 Tj\n-288 TJm\n(when) 21.579 Tj\n-289 TJm\n(compressing.) 52.8516 Tj\n-849 TJm\n(Has) 15.4918 Tj\n-289 TJm\n(no) 9.9626 Tj\n-288 TJm\n(ef) 7.7409 Tj\n25 TJm\n(fect) 14.9339 Tj\n-288 TJm\n(when) 21.579 Tj\n-288 TJm\n(decompressing.) 62.2563 Tj\n-850 TJm\n(See) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n108 598.456 Td\n(MEMOR) 37.6387 Tj\n65 TJm\n(Y) 7.193 Tj\n-297 TJm\n(MAN) 23.2427 Tj\n35 TJm\n(A) 7.193 Tj\n40 TJm\n(GEMENT) 41.5042 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n-297 TJm\n([5]) 11.6164 Tj\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-298 TJm\n(belo) 17.1556 Tj\n25 TJm\n(w) 7.193 Tj\n65 TJm\n(.) 2.4907 Tj\n-904 TJm\n(The) 15.4918 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n297.278 598.456 Td\n/F124_0 9.9626 Tf\n(--fast) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n336.106 598.456 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n353.454 598.456 Td\n/F124_0 9.9626 Tf\n(--best) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n392.281 598.456 Td\n/F122_0 9.9626 Tf\n(aliases) 26.5603 Tj\n-297 TJm\n(are) 12.1643 Tj\n-298 TJm\n(primarily) 37.0808 Tj\n-297 TJm\n(for) 11.6164 Tj\n-297 TJm\n(GNU) 21.579 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n516.09 598.456 Td\n/F124_0 9.9626 Tf\n(gzip) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 586.501 Td\n/F122_0 9.9626 Tf\n(compatibility) 53.1405 Tj\n65 TJm\n(.) 2.4907 Tj\n-356 TJm\n(In) 8.2988 Tj\n-265 TJm\n(particular) 38.1767 Tj\n40 TJm\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n220.423 586.501 Td\n/F124_0 9.9626 Tf\n(--fast) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n258.932 586.501 Td\n/F122_0 9.9626 Tf\n(doesn') 26.5603 Tj\n18 TJm\n(t) 2.7696 Tj\n-265 TJm\n(mak) 17.1556 Tj\n10 TJm\n(e) 4.4234 Tj\n-266 TJm\n(things) 24.3586 Tj\n-265 TJm\n(signi\\002cantly) 49.2651 Tj\n-265 TJm\n(f) 3.3175 Tj\n10 TJm\n(aster) 18.8094 Tj\n55 TJm\n(.) 2.4907 Tj\n-712 TJm\n(And) 17.1556 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n444.622 586.501 Td\n/F124_0 9.9626 Tf\n(--best) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n483.131 586.501 Td\n/F122_0 9.9626 Tf\n(merely) 27.6661 Tj\n-265 TJm\n(selects) 26.5603 Tj\n108 574.545 Td\n(the) 12.1743 Tj\n-250 TJm\n(def) 12.7222 Tj\n10 TJm\n(ault) 14.9439 Tj\n-250 TJm\n(beha) 18.8094 Tj\n20 TJm\n(viour) 21.031 Tj\n55 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 548.643 Td\n/F124_0 9.9626 Tf\n(--) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 536.688 Td\n/F122_0 9.9626 Tf\n(T) 6.0871 Tj\n35 TJm\n(reats) 18.8094 Tj\n-261 TJm\n(all) 9.9626 Tj\n-261 TJm\n(subsequent) 44.2738 Tj\n-260 TJm\n(ar) 7.7409 Tj\n18 TJm\n(guments) 33.7633 Tj\n-261 TJm\n(as) 8.2988 Tj\n-261 TJm\n(\\002le) 12.7322 Tj\n-261 TJm\n(names,) 27.9451 Tj\n-263 TJm\n(e) 4.4234 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(en) 9.4047 Tj\n-261 TJm\n(if) 6.0871 Tj\n-261 TJm\n(the) 12.1743 Tj\n15 TJm\n(y) 4.9813 Tj\n-260 TJm\n(start) 17.1556 Tj\n-261 TJm\n(with) 17.7135 Tj\n-261 TJm\n(a) 4.4234 Tj\n-261 TJm\n(dash.) 20.7521 Tj\n-685 TJm\n(This) 17.7135 Tj\n-260 TJm\n(is) 6.6451 Tj\n-261 TJm\n(so) 8.8568 Tj\n-261 TJm\n(you) 14.9439 Tj\n-261 TJm\n(can) 13.8281 Tj\n-260 TJm\n(handle) 26.5603 Tj\n-261 TJm\n(\\002les) 16.6077 Tj\n108 524.732 Td\n(with) 17.7135 Tj\n-250 TJm\n(names) 25.4544 Tj\n-250 TJm\n(be) 9.4047 Tj\n15 TJm\n(ginning) 30.4457 Tj\n-250 TJm\n(with) 17.7135 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(dash,) 20.7521 Tj\n-250 TJm\n(for) 11.6164 Tj\n-250 TJm\n(e) 4.4234 Tj\n15 TJm\n(xample:) 32.0995 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n302.27 524.732 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n-600 TJm\n(--) 11.9551 Tj\n-600 TJm\n(-myfilename) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n421.821 524.732 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 498.83 Td\n/F124_0 9.9626 Tf\n(--repetitive-fast) 101.6185 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n178.6 498.83 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n188.563 498.83 Td\n/F124_0 9.9626 Tf\n(--repetitive-best) 101.6185 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 486.874 Td\n/F122_0 9.9626 Tf\n(These) 23.7907 Tj\n-207 TJm\n(\\003ags) 18.8194 Tj\n-206 TJm\n(are) 12.1643 Tj\n-207 TJm\n(redundant) 39.8404 Tj\n-207 TJm\n(in) 7.7509 Tj\n-206 TJm\n(v) 4.9813 Tj\n15 TJm\n(ersions) 28.224 Tj\n-207 TJm\n(0.9.5) 19.9252 Tj\n-207 TJm\n(and) 14.386 Tj\n-206 TJm\n(abo) 14.386 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(e.) 6.914 Tj\n-591 TJm\n(The) 15.4918 Tj\n15 TJm\n(y) 4.9813 Tj\n-207 TJm\n(pro) 13.2801 Tj\n15 TJm\n(vided) 22.1369 Tj\n-207 TJm\n(some) 21.031 Tj\n-207 TJm\n(coa) 13.8281 Tj\n1 TJm\n(rse) 11.6164 Tj\n-207 TJm\n(control) 28.224 Tj\n-207 TJm\n(o) 4.9813 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(er) 7.7409 Tj\n-207 TJm\n(the) 12.1743 Tj\n-206 TJm\n(beha) 18.8094 Tj\n20 TJm\n(viour) 21.031 Tj\n108 474.919 Td\n(of) 8.2988 Tj\n-250 TJm\n(the) 12.1743 Tj\n-251 TJm\n(sorting) 27.6761 Tj\n-250 TJm\n(algorithm) 38.7446 Tj\n-250 TJm\n(in) 7.7509 Tj\n-251 TJm\n(earlier) 25.4445 Tj\n-250 TJm\n(v) 4.9813 Tj\n15 TJm\n(ersions,) 30.7147 Tj\n-250 TJm\n(which) 24.3486 Tj\n-251 TJm\n(w) 7.193 Tj\n10 TJm\n(as) 8.2988 Tj\n-250 TJm\n(sometimes) 42.62 Tj\n-250 TJm\n(useful.) 26.8392 Tj\n-622 TJm\n(0.9.5) 19.9252 Tj\n-251 TJm\n(and) 14.386 Tj\n-250 TJm\n(abo) 14.386 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-250 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-251 TJm\n(an) 9.4047 Tj\n-250 TJm\n(impro) 23.8007 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(ed) 9.4047 Tj\n108 462.964 Td\n(algorithm) 38.7446 Tj\n-250 TJm\n(which) 24.3486 Tj\n-250 TJm\n(renders) 29.3199 Tj\n-250 TJm\n(these) 20.4731 Tj\n-250 TJm\n(\\003ags) 18.8194 Tj\n-250 TJm\n(irrele) 21.0211 Tj\n25 TJm\n(v) 4.9813 Tj\n25 TJm\n(ant.) 14.6649 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 414.264 Td\n/F116_0 20.6585 Tf\n(2.5.) 34.4584 Tj\n-278 TJm\n(MEMOR) 79.184 Tj\n50 TJm\n(Y) 13.7792 Tj\n-278 TJm\n(MANA) 61.9548 Tj\n50 TJm\n(GEMENT) 88.3771 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 392.346 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n104.454 392.346 Td\n/F122_0 9.9626 Tf\n(compresses) 45.9276 Tj\n-258 TJm\n(lar) 10.5105 Tj\n18 TJm\n(ge) 9.4047 Tj\n-257 TJm\n(\\002les) 16.6077 Tj\n-258 TJm\n(in) 7.7509 Tj\n-257 TJm\n(blocks.) 28.503 Tj\n-666 TJm\n(The) 15.4918 Tj\n-257 TJm\n(block) 22.1369 Tj\n-258 TJm\n(size) 15.4918 Tj\n-258 TJm\n(af) 7.7409 Tj\n25 TJm\n(fects) 18.8094 Tj\n-257 TJm\n(both) 17.7135 Tj\n-258 TJm\n(the) 12.1743 Tj\n-257 TJm\n(compression) 50.3609 Tj\n-258 TJm\n(ratio) 18.2614 Tj\n-257 TJm\n(achie) 21.0211 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(ed,) 11.8953 Tj\n-260 TJm\n(and) 14.386 Tj\n-258 TJm\n(the) 12.1743 Tj\n-257 TJm\n(amount) 29.8878 Tj\n72 380.391 Td\n(of) 8.2988 Tj\n-215 TJm\n(memory) 33.2053 Tj\n-215 TJm\n(needed) 28.2141 Tj\n-215 TJm\n(for) 11.6164 Tj\n-215 TJm\n(compression) 50.3609 Tj\n-214 TJm\n(and) 14.386 Tj\n-215 TJm\n(decompression.) 62.2563 Tj\n-597 TJm\n(The) 15.4918 Tj\n-215 TJm\n(\\003ags) 18.8194 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n337.719 380.391 Td\n/F124_0 9.9626 Tf\n(-1) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n351.815 380.391 Td\n/F122_0 9.9626 Tf\n(through) 30.9936 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n384.95 380.391 Td\n/F124_0 9.9626 Tf\n(-9) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n399.046 380.391 Td\n/F122_0 9.9626 Tf\n(specify) 28.772 Tj\n-215 TJm\n(the) 12.1743 Tj\n-215 TJm\n(block) 22.1369 Tj\n-215 TJm\n(size) 15.4918 Tj\n-215 TJm\n(to) 7.7509 Tj\n-214 TJm\n(be) 9.4047 Tj\n-215 TJm\n(100,000) 32.3785 Tj\n72 368.435 Td\n(bytes) 21.031 Tj\n-278 TJm\n(through) 30.9936 Tj\n-277 TJm\n(900,000) 32.3785 Tj\n-278 TJm\n(bytes) 21.031 Tj\n-278 TJm\n(\\(the) 15.4918 Tj\n-277 TJm\n(def) 12.7222 Tj\n10 TJm\n(ault\\)) 18.2614 Tj\n-278 TJm\n(respecti) 30.9837 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(ely) 12.1743 Tj\n65 TJm\n(.) 2.4907 Tj\n-786 TJm\n(At) 9.9626 Tj\n-278 TJm\n(decompression) 59.7656 Tj\n-278 TJm\n(time,) 20.2042 Tj\n-284 TJm\n(the) 12.1743 Tj\n-278 TJm\n(block) 22.1369 Tj\n-278 TJm\n(size) 15.4918 Tj\n-277 TJm\n(used) 18.2614 Tj\n-278 TJm\n(for) 11.6164 Tj\n-278 TJm\n(compression) 50.3609 Tj\n72 356.48 Td\n(is) 6.6451 Tj\n-243 TJm\n(read) 17.1456 Tj\n-242 TJm\n(from) 19.3673 Tj\n-243 TJm\n(the) 12.1743 Tj\n-242 TJm\n(header) 26.5503 Tj\n-243 TJm\n(of) 8.2988 Tj\n-242 TJm\n(the) 12.1743 Tj\n-243 TJm\n(compressed) 47.0334 Tj\n-242 TJm\n(\\002le,) 15.2229 Tj\n-244 TJm\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n275.174 356.48 Td\n/F124_0 9.9626 Tf\n(bunzip2) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n319.433 356.48 Td\n/F122_0 9.9626 Tf\n(then) 17.1556 Tj\n-243 TJm\n(all) 9.9626 Tj\n1 TJm\n(o) 4.9813 Tj\n-1 TJm\n(c) 4.4234 Tj\n1 TJm\n(ates) 15.4918 Tj\n-243 TJm\n(itself) 19.9252 Tj\n-242 TJm\n(just) 14.396 Tj\n-243 TJm\n(enough) 29.3299 Tj\n-243 TJm\n(memory) 33.2053 Tj\n-242 TJm\n(to) 7.7509 Tj\n-243 TJm\n(decompress) 47.0334 Tj\n72 344.525 Td\n(the) 12.1743 Tj\n-303 TJm\n(\\002le.) 15.2229 Tj\n-940 TJm\n(Since) 22.1369 Tj\n-304 TJm\n(block) 22.1369 Tj\n-303 TJm\n(sizes) 19.3673 Tj\n-303 TJm\n(are) 12.1643 Tj\n-303 TJm\n(stored) 24.3486 Tj\n-304 TJm\n(in) 7.7509 Tj\n-303 TJm\n(compressed) 47.0334 Tj\n-303 TJm\n(\\002les,) 19.0983 Tj\n-317 TJm\n(it) 5.5392 Tj\n-303 TJm\n(follo) 18.8194 Tj\n25 TJm\n(ws) 11.0684 Tj\n-304 TJm\n(that) 14.9439 Tj\n-303 TJm\n(the) 12.1743 Tj\n-303 TJm\n(\\003ags) 18.8194 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n406.35 344.525 Td\n/F124_0 9.9626 Tf\n(-1) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n421.327 344.525 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n432.1 344.525 Td\n/F124_0 9.9626 Tf\n(-9) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n447.077 344.525 Td\n/F122_0 9.9626 Tf\n(are) 12.1643 Tj\n-303 TJm\n(irrele) 21.0211 Tj\n25 TJm\n(v) 4.9813 Tj\n25 TJm\n(ant) 12.1743 Tj\n-304 TJm\n(to) 7.7509 Tj\n-303 TJm\n(and) 14.386 Tj\n-303 TJm\n(so) 8.8568 Tj\n72 332.57 Td\n(ignored) 30.4357 Tj\n-250 TJm\n(during) 26.0123 Tj\n-250 TJm\n(decompression.) 62.2563 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 310.652 Td\n(Compression) 52.5826 Tj\n-250 TJm\n(and) 14.386 Tj\n-250 TJm\n(decompression) 59.7656 Tj\n-250 TJm\n(requirements,) 54.5054 Tj\n-250 TJm\n(in) 7.7509 Tj\n-250 TJm\n(bytes,) 23.5217 Tj\n-250 TJm\n(can) 13.8281 Tj\n-250 TJm\n(be) 9.4047 Tj\n-250 TJm\n(estimated) 38.1866 Tj\n-250 TJm\n(as:) 11.0684 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 247.723] cm\n0 0 468 59.776 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 299.131 Td\n/F124_0 9.9626 Tf\n(Compression:) 71.7307 Tj\n-1278 TJm\n(400k) 23.9102 Tj\n-426 TJm\n(+) 5.9776 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(8) 5.9776 Tj\n-426 TJm\n(x) 5.9776 Tj\n-426 TJm\n(block) 29.8878 Tj\n-426 TJm\n(size) 23.9102 Tj\n-426 TJm\n(\\)) 5.9776 Tj\n90 275.22 Td\n(Decompression:) 83.6858 Tj\n-426 TJm\n(100k) 23.9102 Tj\n-426 TJm\n(+) 5.9776 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(4) 5.9776 Tj\n-426 TJm\n(x) 5.9776 Tj\n-426 TJm\n(block) 29.8878 Tj\n-426 TJm\n(size) 23.9102 Tj\n-426 TJm\n(\\),) 11.9551 Tj\n-426 TJm\n(or) 11.9551 Tj\n153.66 263.265 Td\n(100k) 23.9102 Tj\n-426 TJm\n(+) 5.9776 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(2.5) 17.9327 Tj\n-426 TJm\n(x) 5.9776 Tj\n-426 TJm\n(block) 29.8878 Tj\n-426 TJm\n(size) 23.9102 Tj\n-426 TJm\n(\\)) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 225.805 Td\n/F122_0 9.9626 Tf\n(Lar) 13.8281 Tj\n18 TJm\n(ger) 12.7222 Tj\n-292 TJm\n(block) 22.1369 Tj\n-292 TJm\n(sizes) 19.3673 Tj\n-291 TJm\n(gi) 7.7509 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-292 TJm\n(rapidly) 28.224 Tj\n-292 TJm\n(diminishing) 47.6113 Tj\n-292 TJm\n(mar) 15.4918 Tj\n18 TJm\n(ginal) 19.9252 Tj\n-291 TJm\n(returns.) 30.1568 Tj\n-871 TJm\n(Most) 20.4831 Tj\n-292 TJm\n(of) 8.2988 Tj\n-291 TJm\n(the) 12.1743 Tj\n-292 TJm\n(compression) 50.3609 Tj\n-292 TJm\n(comes) 25.4544 Tj\n-292 TJm\n(from) 19.3673 Tj\n-291 TJm\n(the) 12.1743 Tj\n-292 TJm\n(\\002rst) 15.5018 Tj\n-292 TJm\n(tw) 9.9626 Tj\n10 TJm\n(o) 4.9813 Tj\n-292 TJm\n(or) 8.2988 Tj\n72 213.85 Td\n(three) 19.9152 Tj\n-232 TJm\n(hundred) 32.6474 Tj\n-232 TJm\n(k) 4.9813 Tj\n-232 TJm\n(of) 8.2988 Tj\n-232 TJm\n(block) 22.1369 Tj\n-232 TJm\n(size,) 17.9825 Tj\n-235 TJm\n(a) 4.4234 Tj\n-232 TJm\n(f) 3.3175 Tj\n10 TJm\n(act) 11.6164 Tj\n-232 TJm\n(w) 7.193 Tj\n10 TJm\n(orth) 16.0497 Tj\n-232 TJm\n(bearing) 29.8778 Tj\n-232 TJm\n(in) 7.7509 Tj\n-232 TJm\n(mind) 20.4831 Tj\n-232 TJm\n(when) 21.579 Tj\n-231 TJm\n(using) 21.589 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n354.025 213.85 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n386.223 213.85 Td\n/F122_0 9.9626 Tf\n(on) 9.9626 Tj\n-232 TJm\n(small) 21.589 Tj\n-232 TJm\n(machines.) 40.1194 Tj\n-304 TJm\n(It) 6.0871 Tj\n-232 TJm\n(is) 6.6451 Tj\n-232 TJm\n(also) 16.0497 Tj\n-231 TJm\n(important) 38.7446 Tj\n72 201.895 Td\n(to) 7.7509 Tj\n-250 TJm\n(appreciate) 40.9363 Tj\n-250 TJm\n(that) 14.9439 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(decompression) 59.7656 Tj\n-250 TJm\n(memory) 33.2053 Tj\n-250 TJm\n(requirement) 48.1393 Tj\n-250 TJm\n(is) 6.6451 Tj\n-250 TJm\n(set) 11.0684 Tj\n-250 TJm\n(at) 7.193 Tj\n-250 TJm\n(compression) 50.3609 Tj\n-250 TJm\n(time) 17.7135 Tj\n-250 TJm\n(by) 9.9626 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(choice) 26.0024 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(block) 22.1369 Tj\n-250 TJm\n(size.) 17.9825 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 179.977 Td\n(F) 5.5392 Tj\n15 TJm\n(or) 8.2988 Tj\n-388 TJm\n(\\002les) 16.6077 Tj\n-389 TJm\n(compressed) 47.0334 Tj\n-388 TJm\n(with) 17.7135 Tj\n-389 TJm\n(the) 12.1743 Tj\n-388 TJm\n(def) 12.7222 Tj\n10 TJm\n(ault) 14.9439 Tj\n-389 TJm\n(900k) 19.9252 Tj\n-388 TJm\n(block) 22.1369 Tj\n-389 TJm\n(size,) 17.9825 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n302.002 179.977 Td\n/F124_0 9.9626 Tf\n(bunzip2) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n347.716 179.977 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-388 TJm\n(require) 28.2141 Tj\n-389 TJm\n(about) 22.1369 Tj\n-388 TJm\n(3700) 19.9252 Tj\n-389 TJm\n(kbytes) 26.0123 Tj\n-388 TJm\n(to) 7.7509 Tj\n-389 TJm\n(decompress.) 49.5241 Tj\n72 168.022 Td\n(T) 6.0871 Tj\n80 TJm\n(o) 4.9813 Tj\n-424 TJm\n(support) 29.8878 Tj\n-425 TJm\n(decompression) 59.7656 Tj\n-424 TJm\n(of) 8.2988 Tj\n-424 TJm\n(an) 9.4047 Tj\n15 TJm\n(y) 4.9813 Tj\n-425 TJm\n(\\002l) 8.3088 Tj\n1 TJm\n(e) 4.4234 Tj\n-425 TJm\n(on) 9.9626 Tj\n-424 TJm\n(a) 4.4234 Tj\n-424 TJm\n(4) 4.9813 Tj\n-425 TJm\n(me) 12.1743 Tj\n15 TJm\n(g) 4.9813 Tj\n5 TJm\n(abyte) 21.579 Tj\n-424 TJm\n(machine,) 36.2439 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n348.272 168.022 Td\n/F124_0 9.9626 Tf\n(bunzip2) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n394.342 168.022 Td\n/F122_0 9.9626 Tf\n(has) 13.2801 Tj\n-424 TJm\n(an) 9.4047 Tj\n-425 TJm\n(option) 25.4644 Tj\n-424 TJm\n(to) 7.7509 Tj\n-424 TJm\n(decompress) 47.0334 Tj\n-424 TJm\n(using) 21.589 Tj\n72 156.067 Td\n(approximately) 57.5539 Tj\n-281 TJm\n(half) 15.4918 Tj\n-281 TJm\n(this) 14.396 Tj\n-280 TJm\n(amount) 29.8878 Tj\n-281 TJm\n(of) 8.2988 Tj\n-281 TJm\n(memory) 33.2053 Tj\n65 TJm\n(,) 2.4907 Tj\n-288 TJm\n(about) 22.1369 Tj\n-281 TJm\n(2300) 19.9252 Tj\n-281 TJm\n(kbytes.) 28.503 Tj\n-805 TJm\n(Decompression) 61.9773 Tj\n-280 TJm\n(speed) 22.6848 Tj\n-281 TJm\n(is) 6.6451 Tj\n-281 TJm\n(also) 16.0497 Tj\n-281 TJm\n(halv) 17.1556 Tj\n15 TJm\n(ed,) 11.8953 Tj\n-288 TJm\n(so) 8.8568 Tj\n-281 TJm\n(you) 14.9439 Tj\n-281 TJm\n(should) 26.5703 Tj\n72 144.112 Td\n(use) 13.2801 Tj\n-250 TJm\n(this) 14.396 Tj\n-250 TJm\n(option) 25.4644 Tj\n-250 TJm\n(only) 17.7135 Tj\n-250 TJm\n(where) 24.3386 Tj\n-250 TJm\n(necessary) 38.7246 Tj\n65 TJm\n(.) 2.4907 Tj\n-620 TJm\n(The) 15.4918 Tj\n-250 TJm\n(rele) 14.9339 Tj\n25 TJm\n(v) 4.9813 Tj\n25 TJm\n(ant) 12.1743 Tj\n-250 TJm\n(\\003ag) 14.9439 Tj\n-250 TJm\n(is) 6.6451 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n305.024 144.112 Td\n/F124_0 9.9626 Tf\n(-s) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n316.979 144.112 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 122.194 Td\n(In) 8.2988 Tj\n-204 TJm\n(general,) 31.8106 Tj\n-214 TJm\n(try) 11.0684 Tj\n-204 TJm\n(and) 14.386 Tj\n-205 TJm\n(use) 13.2801 Tj\n-204 TJm\n(the) 12.1743 Tj\n-204 TJm\n(lar) 10.5105 Tj\n18 TJm\n(gest) 16.0497 Tj\n-205 TJm\n(block) 22.1369 Tj\n-204 TJm\n(size) 15.4918 Tj\n-205 TJm\n(memory) 33.2053 Tj\n-204 TJm\n(constraints) 43.1679 Tj\n-204 TJm\n(allo) 14.9439 Tj\n25 TJm\n(w) 7.193 Tj\n65 TJm\n(,) 2.4907 Tj\n-214 TJm\n(since) 20.4731 Tj\n-204 TJm\n(that) 14.9439 Tj\n-205 TJm\n(maximises) 42.62 Tj\n-204 TJm\n(the) 12.1743 Tj\n-204 TJm\n(compression) 50.3609 Tj\n-205 TJm\n(achie) 21.0211 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(ed.) 11.8953 Tj\n72 110.239 Td\n(Compression) 52.5826 Tj\n-250 TJm\n(and) 14.386 Tj\n-250 TJm\n(decompression) 59.7656 Tj\n-250 TJm\n(speed) 22.6848 Tj\n-250 TJm\n(are) 12.1643 Tj\n-250 TJm\n(virtually) 33.7633 Tj\n-250 TJm\n(unaf) 17.7035 Tj\n25 TJm\n(fected) 24.3386 Tj\n-250 TJm\n(by) 9.9626 Tj\n-250 TJm\n(block) 22.1369 Tj\n-250 TJm\n(size.) 17.9825 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 88.321 Td\n(Another) 32.6474 Tj\n-296 TJm\n(signi\\002cant) 41.5142 Tj\n-296 TJm\n(point) 20.4831 Tj\n-295 TJm\n(applies) 28.224 Tj\n-296 TJm\n(to) 7.7509 Tj\n-296 TJm\n(\\002les) 16.6077 Tj\n-296 TJm\n(which) 24.3486 Tj\n-296 TJm\n(\\002t) 8.3088 Tj\n-296 TJm\n(in) 7.7509 Tj\n-296 TJm\n(a) 4.4234 Tj\n-295 TJm\n(single) 23.8007 Tj\n-296 TJm\n(block) 22.1369 Tj\n-296 TJm\n(--) 6.6351 Tj\n-296 TJm\n(that) 14.9439 Tj\n-296 TJm\n(means) 25.4544 Tj\n-296 TJm\n(most) 19.3773 Tj\n-295 TJm\n(\\002les) 16.6077 Tj\n-296 TJm\n(you') 18.2614 Tj\n50 TJm\n(d) 4.9813 Tj\n-296 TJm\n(encounter) 39.2825 Tj\n-296 TJm\n(using) 21.589 Tj\n-296 TJm\n(a) 4.4234 Tj\n72 76.366 Td\n(lar) 10.5105 Tj\n18 TJm\n(ge) 9.4047 Tj\n-290 TJm\n(block) 22.1369 Tj\n-290 TJm\n(size.) 17.9825 Tj\n-859 TJm\n(The) 15.4918 Tj\n-290 TJm\n(amount) 29.8878 Tj\n-290 TJm\n(of) 8.2988 Tj\n-290 TJm\n(real) 14.9339 Tj\n-290 TJm\n(memory) 33.2053 Tj\n-289 TJm\n(touched) 31.5416 Tj\n-290 TJm\n(is) 6.6451 Tj\n-290 TJm\n(proportional) 49.2551 Tj\n-290 TJm\n(to) 7.7509 Tj\n-290 TJm\n(the) 12.1743 Tj\n-290 TJm\n(size) 15.4918 Tj\n-290 TJm\n(of) 8.2988 Tj\n-290 TJm\n(the) 12.1743 Tj\n-289 TJm\n(\\002le,) 15.2229 Tj\n-300 TJm\n(since) 20.4731 Tj\n-290 TJm\n(the) 12.1743 Tj\n-290 TJm\n(\\002le) 12.7322 Tj\n-290 TJm\n(is) 6.6451 Tj\n-290 TJm\n(smaller) 29.3299 Tj\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n539.395 50.951 Td\n(5) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 6 9\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n477.109 749.245 Td\n/F122_0 9.9626 Tf\n(Ho) 12.1743 Tj\n25 TJm\n(w) 7.193 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(use) 13.2801 Tj\n-250 TJm\n(bzip2) 22.1369 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n72 710.037 Td\n/F122_0 9.9626 Tf\n(than) 17.1556 Tj\n-362 TJm\n(a) 4.4234 Tj\n-362 TJm\n(block.) 24.6275 Tj\n-1293 TJm\n(F) 5.5392 Tj\n15 TJm\n(or) 8.2988 Tj\n-362 TJm\n(e) 4.4234 Tj\n15 TJm\n(xample,) 31.8205 Tj\n-390 TJm\n(compressing) 50.3609 Tj\n-362 TJm\n(a) 4.4234 Tj\n-362 TJm\n(\\002le) 12.7322 Tj\n-362 TJm\n(20,000) 27.3972 Tj\n-362 TJm\n(bytes) 21.031 Tj\n-362 TJm\n(long) 17.7135 Tj\n-362 TJm\n(with) 17.7135 Tj\n-362 TJm\n(the) 12.1743 Tj\n-362 TJm\n(\\003ag) 14.9439 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n406.528 710.037 Td\n/F124_0 9.9626 Tf\n(-9) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n422.09 710.037 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-362 TJm\n(cause) 22.1269 Tj\n-362 TJm\n(the) 12.1743 Tj\n-362 TJm\n(compressor) 45.9276 Tj\n-362 TJm\n(to) 7.7509 Tj\n72 698.082 Td\n(allocate) 30.9837 Tj\n-271 TJm\n(around) 27.6661 Tj\n-272 TJm\n(7600k) 24.9065 Tj\n-271 TJm\n(of) 8.2988 Tj\n-272 TJm\n(memory) 33.2053 Tj\n65 TJm\n(,) 2.4907 Tj\n-277 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-271 TJm\n(only) 17.7135 Tj\n-272 TJm\n(touch) 22.1369 Tj\n-271 TJm\n(400k) 19.9252 Tj\n-272 TJm\n(+) 5.6189 Tj\n-271 TJm\n(20000) 24.9065 Tj\n-272 TJm\n(*) 4.9813 Tj\n-271 TJm\n(8) 4.9813 Tj\n-272 TJm\n(=) 5.6189 Tj\n-271 TJm\n(560) 14.9439 Tj\n-272 TJm\n(kbytes) 26.0123 Tj\n-271 TJm\n(of) 8.2988 Tj\n-272 TJm\n(it.) 8.0299 Tj\n-748 TJm\n(Similarly) 37.0908 Tj\n65 TJm\n(,) 2.4907 Tj\n-277 TJm\n(the) 12.1743 Tj\n-272 TJm\n(decompressor) 55.3323 Tj\n72 686.127 Td\n(will) 15.5018 Tj\n-250 TJm\n(allocate) 30.9837 Tj\n-250 TJm\n(3700k) 24.9065 Tj\n-250 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-250 TJm\n(only) 17.7135 Tj\n-250 TJm\n(touch) 22.1369 Tj\n-250 TJm\n(100k) 19.9252 Tj\n-250 TJm\n(+) 5.6189 Tj\n-250 TJm\n(20000) 24.9065 Tj\n-250 TJm\n(*) 4.9813 Tj\n-250 TJm\n(4) 4.9813 Tj\n-250 TJm\n(=) 5.6189 Tj\n-250 TJm\n(180) 14.9439 Tj\n-250 TJm\n(kbytes.) 28.503 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 664.209 Td\n(Here) 19.3573 Tj\n-293 TJm\n(is) 6.6451 Tj\n-294 TJm\n(a) 4.4234 Tj\n-293 TJm\n(table) 19.3673 Tj\n-294 TJm\n(which) 24.3486 Tj\n-293 TJm\n(summarises) 47.0434 Tj\n-294 TJm\n(the) 12.1743 Tj\n-293 TJm\n(maximum) 40.4083 Tj\n-294 TJm\n(memory) 33.2053 Tj\n-293 TJm\n(usage) 22.6848 Tj\n-294 TJm\n(for) 11.6164 Tj\n-293 TJm\n(dif) 11.0684 Tj\n25 TJm\n(ferent) 23.2328 Tj\n-294 TJm\n(block) 22.1369 Tj\n-293 TJm\n(sizes.) 21.8579 Tj\n-881 TJm\n(Also) 18.8194 Tj\n-293 TJm\n(recorded) 34.8492 Tj\n-294 TJm\n(is) 6.6451 Tj\n-293 TJm\n(the) 12.1743 Tj\n-294 TJm\n(total) 17.7135 Tj\n72 652.254 Td\n(compressed) 47.0334 Tj\n-289 TJm\n(size) 15.4918 Tj\n-289 TJm\n(for) 11.6164 Tj\n-289 TJm\n(14) 9.9626 Tj\n-289 TJm\n(\\002les) 16.6077 Tj\n-290 TJm\n(of) 8.2988 Tj\n-289 TJm\n(the) 12.1743 Tj\n-289 TJm\n(Calg) 18.8194 Tj\n5 TJm\n(ary) 12.7222 Tj\n-289 TJm\n(T) 6.0871 Tj\n70 TJm\n(e) 4.4234 Tj\n15 TJm\n(xt) 7.7509 Tj\n-289 TJm\n(Compression) 52.5826 Tj\n-289 TJm\n(Corpus) 28.782 Tj\n-289 TJm\n(totalling) 33.2153 Tj\n-289 TJm\n(3,141,622) 39.8504 Tj\n-290 TJm\n(bytes.) 23.5217 Tj\n-854 TJm\n(This) 17.7135 Tj\n-290 TJm\n(column) 29.8878 Tj\n-289 TJm\n(gi) 7.7509 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(es) 8.2988 Tj\n72 640.299 Td\n(some) 21.031 Tj\n-253 TJm\n(feel) 14.9339 Tj\n-253 TJm\n(for) 11.6164 Tj\n-253 TJm\n(ho) 9.9626 Tj\n25 TJm\n(w) 7.193 Tj\n-253 TJm\n(compression) 50.3609 Tj\n-253 TJm\n(v) 4.9813 Tj\n25 TJm\n(aries) 18.8094 Tj\n-253 TJm\n(with) 17.7135 Tj\n-253 TJm\n(block) 22.1369 Tj\n-253 TJm\n(size.) 17.9825 Tj\n-638 TJm\n(These) 23.7907 Tj\n-253 TJm\n(\\002gures) 27.1182 Tj\n-253 TJm\n(tend) 17.1556 Tj\n-254 TJm\n(to) 7.7509 Tj\n-253 TJm\n(understate) 40.9463 Tj\n-253 TJm\n(the) 12.1743 Tj\n-253 TJm\n(adv) 14.386 Tj\n25 TJm\n(antage) 26.0024 Tj\n-253 TJm\n(of) 8.2988 Tj\n-253 TJm\n(lar) 10.5105 Tj\n18 TJm\n(ger) 12.7222 Tj\n-253 TJm\n(block) 22.1369 Tj\n72 628.344 Td\n(sizes) 19.3673 Tj\n-250 TJm\n(for) 11.6164 Tj\n-250 TJm\n(lar) 10.5105 Tj\n18 TJm\n(ger) 12.7222 Tj\n-250 TJm\n(\\002les,) 19.0983 Tj\n-250 TJm\n(since) 20.4731 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(Corpus) 28.782 Tj\n-250 TJm\n(is) 6.6451 Tj\n-250 TJm\n(dominated) 42.0621 Tj\n-250 TJm\n(by) 9.9626 Tj\n-250 TJm\n(smaller) 29.3299 Tj\n-250 TJm\n(\\002les.) 19.0983 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 469.773] cm\n0 0 468 155.417 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n123.952 616.822 Td\n/F124_0 9.9626 Tf\n(Compress) 47.8205 Tj\n-1278 TJm\n(Decompress) 59.7756 Tj\n-1278 TJm\n(Decompress) 59.7756 Tj\n-1278 TJm\n(Corpus) 35.8654 Tj\n90 604.867 Td\n(Flag) 23.9102 Tj\n-2130 TJm\n(usage) 29.8878 Tj\n-2556 TJm\n(usage) 29.8878 Tj\n-2982 TJm\n(-s) 11.9551 Tj\n-426 TJm\n(usage) 29.8878 Tj\n-2130 TJm\n(Size) 23.9102 Tj\n94.244 580.957 Td\n(-1) 11.9551 Tj\n-2556 TJm\n(1200k) 29.8878 Tj\n-2982 TJm\n(500k) 23.9102 Tj\n-3834 TJm\n(350k) 23.9102 Tj\n-2556 TJm\n(914704) 35.8654 Tj\n94.244 569.001 Td\n(-2) 11.9551 Tj\n-2556 TJm\n(2000k) 29.8878 Tj\n-2982 TJm\n(900k) 23.9102 Tj\n-3834 TJm\n(600k) 23.9102 Tj\n-2556 TJm\n(877703) 35.8654 Tj\n94.244 557.046 Td\n(-3) 11.9551 Tj\n-2556 TJm\n(2800k) 29.8878 Tj\n-2556 TJm\n(1300k) 29.8878 Tj\n-3834 TJm\n(850k) 23.9102 Tj\n-2556 TJm\n(860338) 35.8654 Tj\n94.244 545.091 Td\n(-4) 11.9551 Tj\n-2556 TJm\n(3600k) 29.8878 Tj\n-2556 TJm\n(1700k) 29.8878 Tj\n-3408 TJm\n(1100k) 29.8878 Tj\n-2556 TJm\n(846899) 35.8654 Tj\n94.244 533.136 Td\n(-5) 11.9551 Tj\n-2556 TJm\n(4400k) 29.8878 Tj\n-2556 TJm\n(2100k) 29.8878 Tj\n-3408 TJm\n(1350k) 29.8878 Tj\n-2556 TJm\n(845160) 35.8654 Tj\n94.244 521.181 Td\n(-6) 11.9551 Tj\n-2556 TJm\n(5200k) 29.8878 Tj\n-2556 TJm\n(2500k) 29.8878 Tj\n-3408 TJm\n(1600k) 29.8878 Tj\n-2556 TJm\n(838626) 35.8654 Tj\n94.244 509.225 Td\n(-7) 11.9551 Tj\n-2556 TJm\n(6100k) 29.8878 Tj\n-2556 TJm\n(2900k) 29.8878 Tj\n-3408 TJm\n(1850k) 29.8878 Tj\n-2556 TJm\n(834096) 35.8654 Tj\n94.244 497.27 Td\n(-8) 11.9551 Tj\n-2556 TJm\n(6800k) 29.8878 Tj\n-2556 TJm\n(3300k) 29.8878 Tj\n-3408 TJm\n(2100k) 29.8878 Tj\n-2556 TJm\n(828642) 35.8654 Tj\n94.244 485.315 Td\n(-9) 11.9551 Tj\n-2556 TJm\n(7600k) 29.8878 Tj\n-2556 TJm\n(3700k) 29.8878 Tj\n-3408 TJm\n(2350k) 29.8878 Tj\n-2556 TJm\n(828642) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 435.021 Td\n/F116_0 20.6585 Tf\n(2.6.) 34.4584 Tj\n-278 TJm\n(RECO) 59.6824 Tj\n50 TJm\n(VERING) 79.2047 Tj\n-278 TJm\n(D) 14.9154 Tj\n40 TJm\n(A) 14.9154 Tj\n90 TJm\n(T) 12.6223 Tj\n90 TJm\n(A) 14.9154 Tj\n-278 TJm\n(FR) 27.5378 Tj\n20 TJm\n(OM) 33.2808 Tj\n-278 TJm\n(D) 14.9154 Tj\n40 TJm\n(AMA) 47.0394 Tj\n50 TJm\n(GED) 44.767 Tj\n72 410.23 Td\n(FILES) 58.5462 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 388.312 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n105.138 388.312 Td\n/F122_0 9.9626 Tf\n(compresses) 45.9276 Tj\n-326 TJm\n(\\002les) 16.6077 Tj\n-326 TJm\n(in) 7.7509 Tj\n-326 TJm\n(blocks,) 28.503 Tj\n-346 TJm\n(usually) 28.782 Tj\n-326 TJm\n(900kbytes) 40.9562 Tj\n-326 TJm\n(long.) 20.2042 Tj\n-1077 TJm\n(Each) 19.9152 Tj\n-326 TJm\n(block) 22.1369 Tj\n-326 TJm\n(is) 6.6451 Tj\n-327 TJm\n(handled) 31.5416 Tj\n-326 TJm\n(independently) 56.4481 Tj\n65 TJm\n(.) 2.4907 Tj\n-1077 TJm\n(If) 6.6351 Tj\n-326 TJm\n(a) 4.4234 Tj\n-326 TJm\n(media) 24.3486 Tj\n-326 TJm\n(or) 8.2988 Tj\n72 376.357 Td\n(transmission) 50.3709 Tj\n-319 TJm\n(error) 19.3573 Tj\n-318 TJm\n(causes) 26.0024 Tj\n-319 TJm\n(a) 4.4234 Tj\n-318 TJm\n(multi-block) 46.4955 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n234.519 376.357 Td\n/F124_0 9.9626 Tf\n(.bz2) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n261.603 376.357 Td\n/F122_0 9.9626 Tf\n(\\002le) 12.7322 Tj\n-319 TJm\n(to) 7.7509 Tj\n-318 TJm\n(become) 30.9837 Tj\n-319 TJm\n(damaged,) 38.4556 Tj\n-336 TJm\n(i) 2.7696 Tj\n1 TJm\n(t) 2.7696 Tj\n-319 TJm\n(may) 17.1556 Tj\n-319 TJm\n(be) 9.4047 Tj\n-318 TJm\n(possible) 32.6574 Tj\n-319 TJm\n(to) 7.7509 Tj\n-318 TJm\n(reco) 17.1456 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(er) 7.7409 Tj\n-319 TJm\n(data) 16.5977 Tj\n-319 TJm\n(from) 19.3673 Tj\n-318 TJm\n(the) 12.1743 Tj\n72 364.402 Td\n(undamaged) 45.9276 Tj\n-250 TJm\n(blocks) 26.0123 Tj\n-250 TJm\n(in) 7.7509 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(\\002le.) 15.2229 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 342.484 Td\n(The) 15.4918 Tj\n-358 TJm\n(compressed) 47.0334 Tj\n-357 TJm\n(representation) 56.4381 Tj\n-358 TJm\n(of) 8.2988 Tj\n-357 TJm\n(each) 18.2515 Tj\n-358 TJm\n(block) 22.1369 Tj\n-358 TJm\n(is) 6.6451 Tj\n-357 TJm\n(delimited) 37.6387 Tj\n-358 TJm\n(by) 9.9626 Tj\n-357 TJm\n(a) 4.4234 Tj\n-358 TJm\n(48-bit) 23.8007 Tj\n-358 TJm\n(pattern,) 30.1568 Tj\n-384 TJm\n(which) 24.3486 Tj\n-358 TJm\n(mak) 17.1556 Tj\n10 TJm\n(es) 8.2988 Tj\n-357 TJm\n(it) 5.5392 Tj\n-358 TJm\n(possible) 32.6574 Tj\n-357 TJm\n(to) 7.7509 Tj\n-358 TJm\n(\\002nd) 15.5018 Tj\n-358 TJm\n(the) 12.1743 Tj\n72 330.529 Td\n(block) 22.1369 Tj\n-286 TJm\n(boundaries) 43.7159 Tj\n-286 TJm\n(with) 17.7135 Tj\n-285 TJm\n(reasonable) 42.6001 Tj\n-286 TJm\n(certainty) 34.8591 Tj\n65 TJm\n(.) 2.4907 Tj\n-835 TJm\n(Each) 19.9152 Tj\n-285 TJm\n(block) 22.1369 Tj\n-286 TJm\n(also) 16.0497 Tj\n-286 TJm\n(carries) 26.5503 Tj\n-286 TJm\n(its) 9.4147 Tj\n-285 TJm\n(o) 4.9813 Tj\n25 TJm\n(wn) 12.1743 Tj\n-286 TJm\n(32-bit) 23.8007 Tj\n-286 TJm\n(CRC,) 22.4258 Tj\n-286 TJm\n(so) 8.8568 Tj\n-285 TJm\n(damaged) 35.965 Tj\n-286 TJm\n(blocks) 26.0123 Tj\n-286 TJm\n(can) 13.8281 Tj\n-286 TJm\n(be) 9.4047 Tj\n72 318.574 Td\n(distinguished) 53.1405 Tj\n-250 TJm\n(from) 19.3673 Tj\n-250 TJm\n(undamaged) 45.9276 Tj\n-250 TJm\n(ones.) 20.7521 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 296.656 Td\n/F124_0 9.9626 Tf\n(bzip2recover) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n146.448 296.656 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-273 TJm\n(a) 4.4234 Tj\n-272 TJm\n(simple) 26.5703 Tj\n-273 TJm\n(program) 33.7533 Tj\n-273 TJm\n(whose) 25.4544 Tj\n-272 TJm\n(purpose) 31.5416 Tj\n-273 TJm\n(is) 6.6451 Tj\n-273 TJm\n(to) 7.7509 Tj\n-272 TJm\n(search) 25.4445 Tj\n-273 TJm\n(for) 11.6164 Tj\n-273 TJm\n(blocks) 26.0123 Tj\n-272 TJm\n(in) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n392.655 296.656 Td\n/F124_0 9.9626 Tf\n(.bz2) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n419.282 296.656 Td\n/F122_0 9.9626 Tf\n(\\002les,) 19.0983 Tj\n-278 TJm\n(and) 14.386 Tj\n-273 TJm\n(write) 20.4731 Tj\n-273 TJm\n(each) 18.2515 Tj\n-272 TJm\n(block) 22.1369 Tj\n-273 TJm\n(out) 12.7322 Tj\n72 284.701 Td\n(into) 15.5018 Tj\n-255 TJm\n(i) 2.7696 Tj\n1 TJm\n(ts) 6.6451 Tj\n-255 TJm\n(o) 4.9813 Tj\n25 TJm\n(wn) 12.1743 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n121.429 284.701 Td\n/F124_0 9.9626 Tf\n(.bz2) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n147.875 284.701 Td\n/F122_0 9.9626 Tf\n(\\002le.) 15.2229 Tj\n-647 TJm\n(Y) 7.193 Tj\n110 TJm\n(ou) 9.9626 Tj\n-255 TJm\n(can) 13.8281 Tj\n-254 TJm\n(then) 17.1556 Tj\n-255 TJm\n(use) 13.2801 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n240.01 284.701 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n-600 TJm\n(-t) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n290.367 284.701 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-254 TJm\n(test) 13.8381 Tj\n-255 TJm\n(the) 12.1743 Tj\n-254 TJm\n(inte) 14.9439 Tj\n15 TJm\n(grity) 18.8194 Tj\n-255 TJm\n(of) 8.2988 Tj\n-254 TJm\n(the) 12.1743 Tj\n-255 TJm\n(resulting) 34.8691 Tj\n-254 TJm\n(\\002les,) 19.0983 Tj\n-256 TJm\n(and) 14.386 Tj\n-255 TJm\n(decompress) 47.0334 Tj\n-254 TJm\n(those) 21.031 Tj\n72 272.746 Td\n(which) 24.3486 Tj\n-250 TJm\n(are) 12.1643 Tj\n-250 TJm\n(undamaged.) 48.4182 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 250.828 Td\n/F124_0 9.9626 Tf\n(bzip2recover) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n150.099 250.828 Td\n/F122_0 9.9626 Tf\n(tak) 12.1743 Tj\n10 TJm\n(es) 8.2988 Tj\n-639 TJm\n(a) 4.4234 Tj\n-639 TJm\n(single) 23.8007 Tj\n-639 TJm\n(ar) 7.7409 Tj\n18 TJm\n(gument,) 32.3785 Tj\n-737 TJm\n(the) 12.1743 Tj\n-639 TJm\n(name) 21.579 Tj\n-639 TJm\n(of) 8.2988 Tj\n-639 TJm\n(the) 12.1743 Tj\n-639 TJm\n(damaged) 35.965 Tj\n-639 TJm\n(\\002le,) 15.2229 Tj\n-737 TJm\n(and) 14.386 Tj\n-639 TJm\n(writes) 24.3486 Tj\n-639 TJm\n(a) 4.4234 Tj\n-639 TJm\n(number) 30.4357 Tj\n-639 TJm\n(of) 8.2988 Tj\n-640 TJm\n(\\002) 5.5392 Tj\n1 TJm\n(les) 11.0684 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 238.873 Td\n/F124_0 9.9626 Tf\n(rec0001file.bz2) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n161.664 238.873 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n169.072 238.873 Td\n/F124_0 9.9626 Tf\n(rec0002file.bz2) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n258.736 238.873 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-494 TJm\n(etc,) 14.107 Tj\n-493 TJm\n(containing) 42.0621 Tj\n-445 TJm\n(the) 12.1743 Tj\n-445 TJm\n(e) 4.4234 Tj\n15 TJm\n(xtracted) 32.0895 Tj\n-445 TJm\n(blocks.) 28.503 Tj\n-1789 TJm\n(The) 15.4918 Tj\n-445 TJm\n(output) 25.4644 Tj\n-445 TJm\n(\\002lenames) 38.1866 Tj\n-445 TJm\n(are) 12.1643 Tj\n72 226.918 Td\n(designed) 35.417 Tj\n-337 TJm\n(so) 8.8568 Tj\n-337 TJm\n(that) 14.9439 Tj\n-337 TJm\n(the) 12.1743 Tj\n-337 TJm\n(use) 13.2801 Tj\n-337 TJm\n(of) 8.2988 Tj\n-337 TJm\n(wildc) 22.1369 Tj\n1 TJm\n(ards) 16.5977 Tj\n-337 TJm\n(in) 7.7509 Tj\n-337 TJm\n(subsequent) 44.2738 Tj\n-337 TJm\n(processing) 42.61 Tj\n-337 TJm\n(--) 6.6351 Tj\n-337 TJm\n(for) 11.6164 Tj\n-337 TJm\n(e) 4.4234 Tj\n15 TJm\n(xample,) 31.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n396.538 226.918 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n-600 TJm\n(-dc) 17.9327 Tj\n-600 TJm\n(rec) 17.9327 Tj\n474.247 225.174 Td\n(*) 5.9776 Tj\n480.224 226.918 Td\n(file.bz2) 47.8205 Tj\n-600 TJm\n(>) 5.9776 Tj\n72 214.962 Td\n(recovered_data) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n158.177 214.962 Td\n/F122_0 9.9626 Tf\n(--) 6.6351 Tj\n-250 TJm\n(lists) 16.0597 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(\\002les) 16.6077 Tj\n-250 TJm\n(in) 7.7509 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(correct) 27.6562 Tj\n-250 TJm\n(order) 21.0211 Tj\n55 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 193.045 Td\n/F124_0 9.9626 Tf\n(bzip2recover) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n145.93 193.045 Td\n/F122_0 9.9626 Tf\n(should) 26.5703 Tj\n-221 TJm\n(be) 9.4047 Tj\n-220 TJm\n(of) 8.2988 Tj\n-221 TJm\n(most) 19.3773 Tj\n-221 TJm\n(use) 13.2801 Tj\n-220 TJm\n(dealing) 29.3299 Tj\n-221 TJm\n(with) 17.7135 Tj\n-221 TJm\n(lar) 10.5105 Tj\n18 TJm\n(ge) 9.4047 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n307.229 193.045 Td\n/F124_0 9.9626 Tf\n(.bz2) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n333.338 193.045 Td\n/F122_0 9.9626 Tf\n(\\002les,) 19.0983 Tj\n-227 TJm\n(as) 8.2988 Tj\n-220 TJm\n(these) 20.4731 Tj\n-221 TJm\n(will) 15.5018 Tj\n-221 TJm\n(contain) 29.3299 Tj\n-220 TJm\n(man) 17.1556 Tj\n15 TJm\n(y) 4.9813 Tj\n-221 TJm\n(blocks.) 28.503 Tj\n-600 TJm\n(It) 6.0871 Tj\n-221 TJm\n(is) 6.6451 Tj\n-221 TJm\n(clearly) 27.1082 Tj\n72 181.089 Td\n(futile) 21.031 Tj\n-289 TJm\n(to) 7.7509 Tj\n-289 TJm\n(use) 13.2801 Tj\n-289 TJm\n(it) 5.5392 Tj\n-289 TJm\n(on) 9.9626 Tj\n-289 TJm\n(damaged) 35.965 Tj\n-289 TJm\n(single-block) 49.2551 Tj\n-290 TJm\n(\\002les) 16.6077 Tj\n1 TJm\n(,) 2.4907 Tj\n-299 TJm\n(since) 20.4731 Tj\n-289 TJm\n(a) 4.4234 Tj\n-290 TJm\n(damaged) 35.965 Tj\n-289 TJm\n(block) 22.1369 Tj\n-289 TJm\n(cannot) 26.5603 Tj\n-289 TJm\n(be) 9.4047 Tj\n-289 TJm\n(reco) 17.1456 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(ered.) 19.6363 Tj\n-854 TJm\n(If) 6.6351 Tj\n-289 TJm\n(you) 14.9439 Tj\n-290 TJm\n(wish) 18.8194 Tj\n-289 TJm\n(to) 7.7509 Tj\n-289 TJm\n(minimise) 37.0908 Tj\n72 169.134 Td\n(an) 9.4047 Tj\n15 TJm\n(y) 4.9813 Tj\n-320 TJm\n(potential) 34.8691 Tj\n-320 TJm\n(data) 16.5977 Tj\n-319 TJm\n(loss) 15.5018 Tj\n-320 TJm\n(through) 30.9936 Tj\n-320 TJm\n(media) 24.3486 Tj\n-320 TJm\n(or) 8.2988 Tj\n-319 TJm\n(transmission) 50.3709 Tj\n-320 TJm\n(errors,) 25.7234 Tj\n-337 TJm\n(you) 14.9439 Tj\n-320 TJm\n(might) 23.2527 Tj\n-320 TJm\n(consider) 33.7533 Tj\n-320 TJm\n(compressing) 50.3609 Tj\n-319 TJm\n(with) 17.7135 Tj\n-320 TJm\n(a) 4.4234 Tj\n-320 TJm\n(smaller) 29.3299 Tj\n-320 TJm\n(block) 22.1369 Tj\n72 157.179 Td\n(size.) 17.9825 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 122.426 Td\n/F116_0 20.6585 Tf\n(2.7.) 34.4584 Tj\n-278 TJm\n(PERFORMANCE) 161.818 Tj\n-278 TJm\n(NO) 30.9878 Tj\n40 TJm\n(TES) 40.1808 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 100.508 Td\n/F122_0 9.9626 Tf\n(The) 15.4918 Tj\n-305 TJm\n(sorting) 27.6761 Tj\n-304 TJm\n(phase) 22.6848 Tj\n-305 TJm\n(of) 8.2988 Tj\n-304 TJm\n(compression) 50.3609 Tj\n-305 TJm\n(g) 4.9813 Tj\n5 TJm\n(athers) 23.7907 Tj\n-304 TJm\n(together) 32.6474 Tj\n-305 TJm\n(similar) 27.6761 Tj\n-304 TJm\n(strings) 26.5703 Tj\n-305 TJm\n(in) 7.7509 Tj\n-304 TJm\n(the) 12.1743 Tj\n-305 TJm\n(\\002le.) 15.2229 Tj\n-947 TJm\n(Because) 33.1954 Tj\n-305 TJm\n(of) 8.2988 Tj\n-304 TJm\n(this,) 16.8866 Tj\n-319 TJm\n(\\002les) 16.6077 Tj\n-304 TJm\n(containing) 42.0621 Tj\n-305 TJm\n(v) 4.9813 Tj\n15 TJm\n(ery) 12.7222 Tj\n72 88.553 Td\n(long) 17.7135 Tj\n-286 TJm\n(runs) 17.1556 Tj\n-285 TJm\n(of) 8.2988 Tj\n-286 TJm\n(repeated) 33.7433 Tj\n-285 TJm\n(symbols,) 35.706 Tj\n-295 TJm\n(lik) 10.5205 Tj\n10 TJm\n(e) 4.4234 Tj\n-286 TJm\n(\"aabaabaabaab) 59.3771 Tj\n-285 TJm\n(...\") 11.5367 Tj\n-571 TJm\n(\\(repeated) 37.0609 Tj\n-286 TJm\n(se) 8.2988 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(eral) 14.9339 Tj\n-286 TJm\n(hundred) 32.6474 Tj\n-285 TJm\n(times\\)) 24.9065 Tj\n-286 TJm\n(may) 17.1556 Tj\n-286 TJm\n(com) 17.1556 Tj\n1 TJm\n(press) 20.4731 Tj\n-286 TJm\n(more) 20.4731 Tj\n-286 TJm\n(slo) 11.6264 Tj\n25 TJm\n(wly) 14.9439 Tj\n72 76.598 Td\n(than) 17.1556 Tj\n-322 TJm\n(normal.) 30.7147 Tj\n-524 TJm\n(V) 7.193 Tj\n111 TJm\n(ersions) 28.224 Tj\n-322 TJm\n(0.9.5) 19.9252 Tj\n-321 TJm\n(and) 14.386 Tj\n-322 TJm\n(abo) 14.386 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-322 TJm\n(f) 3.3175 Tj\n10 TJm\n(are) 12.1643 Tj\n-321 TJm\n(much) 22.1369 Tj\n-322 TJm\n(better) 22.6848 Tj\n-321 TJm\n(than) 17.1556 Tj\n-322 TJm\n(pre) 12.7222 Tj\n25 TJm\n(vious) 21.589 Tj\n-321 TJm\n(v) 4.9813 Tj\n15 TJm\n(ersions) 28.224 Tj\n-322 TJm\n(in) 7.7509 Tj\n-322 TJm\n(this) 14.396 Tj\n-321 TJm\n(respect.) 30.7047 Tj\n-1050 TJm\n(The) 15.4918 Tj\n-321 TJm\n(ratio) 18.2614 Tj\n-322 TJm\n(between) 33.1954 Tj\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n539.395 50.951 Td\n(6) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 7 10\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n477.109 749.245 Td\n/F122_0 9.9626 Tf\n(Ho) 12.1743 Tj\n25 TJm\n(w) 7.193 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(use) 13.2801 Tj\n-250 TJm\n(bzip2) 22.1369 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n72 710.037 Td\n/F122_0 9.9626 Tf\n(w) 7.193 Tj\n10 TJm\n(orst-case) 35.4071 Tj\n-289 TJm\n(and) 14.386 Tj\n-290 TJm\n(a) 4.4234 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(erage-case) 42.0322 Tj\n-289 TJm\n(compression) 50.3609 Tj\n-290 TJm\n(time) 17.7135 Tj\n-289 TJm\n(is) 6.6451 Tj\n-290 TJm\n(in) 7.7509 Tj\n-289 TJm\n(the) 12.1743 Tj\n-290 TJm\n(re) 7.7409 Tj\n15 TJm\n(gion) 17.7135 Tj\n-289 TJm\n(of) 8.2988 Tj\n-289 TJm\n(10:1.) 20.2042 Tj\n-857 TJm\n(F) 5.5392 Tj\n15 TJm\n(or) 8.2988 Tj\n-290 TJm\n(pre) 12.7222 Tj\n25 TJm\n(vious) 21.589 Tj\n-289 TJm\n(v) 4.9813 Tj\n15 TJm\n(ersions,) 30.7147 Tj\n-299 TJm\n(this) 14.396 Tj\n-290 TJm\n(\\002gure) 23.2427 Tj\n-289 TJm\n(w) 7.193 Tj\n10 TJm\n(as) 8.2988 Tj\n-290 TJm\n(more) 20.4731 Tj\n72 698.082 Td\n(lik) 10.5205 Tj\n10 TJm\n(e) 4.4234 Tj\n-250 TJm\n(100:1.) 25.1855 Tj\n-620 TJm\n(Y) 7.193 Tj\n110 TJm\n(ou) 9.9626 Tj\n-250 TJm\n(can) 13.8281 Tj\n-250 TJm\n(use) 13.2801 Tj\n-250 TJm\n(the) 12.1743 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n186.002 698.082 Td\n/F124_0 9.9626 Tf\n(-vvvv) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n218.38 698.082 Td\n/F122_0 9.9626 Tf\n(option) 25.4644 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(monitor) 31.5516 Tj\n-250 TJm\n(progress) 33.7533 Tj\n-250 TJm\n(in) 7.7509 Tj\n-250 TJm\n(great) 19.9152 Tj\n-250 TJm\n(detail,) 24.6275 Tj\n-250 TJm\n(if) 6.0871 Tj\n-250 TJm\n(you) 14.9439 Tj\n-250 TJm\n(w) 7.193 Tj\n10 TJm\n(ant.) 14.6649 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 676.164 Td\n(Decompression) 61.9773 Tj\n-250 TJm\n(speed) 22.6848 Tj\n-250 TJm\n(is) 6.6451 Tj\n-250 TJm\n(unaf) 17.7035 Tj\n25 TJm\n(fected) 24.3386 Tj\n-250 TJm\n(by) 9.9626 Tj\n-250 TJm\n(these) 20.4731 Tj\n-250 TJm\n(phenomena.) 48.4182 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 654.247 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n104.863 654.247 Td\n/F122_0 9.9626 Tf\n(usually) 28.782 Tj\n-299 TJm\n(allocates) 34.8591 Tj\n-298 TJm\n(se) 8.2988 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(eral) 14.9339 Tj\n-299 TJm\n(me) 12.1743 Tj\n15 TJm\n(g) 4.9813 Tj\n5 TJm\n(abytes) 25.4544 Tj\n-298 TJm\n(of) 8.2988 Tj\n-299 TJm\n(memory) 33.2053 Tj\n-299 TJm\n(to) 7.7509 Tj\n-298 TJm\n(operate) 29.3199 Tj\n-299 TJm\n(in,) 10.2416 Tj\n-311 TJm\n(and) 14.386 Tj\n-298 TJm\n(then) 17.1556 Tj\n-299 TJm\n(char) 17.1456 Tj\n18 TJm\n(ges) 13.2801 Tj\n-298 TJm\n(all) 9.9626 Tj\n-299 TJm\n(o) 4.9813 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(er) 7.7409 Tj\n-299 TJm\n(it) 5.5392 Tj\n-298 TJm\n(in) 7.7509 Tj\n-299 TJm\n(a) 4.4234 Tj\n-298 TJm\n(f) 3.3175 Tj\n10 TJm\n(airly) 18.2614 Tj\n-299 TJm\n(random) 30.4357 Tj\n72 642.291 Td\n(f) 3.3175 Tj\n10 TJm\n(ashion.) 28.503 Tj\n-743 TJm\n(This) 17.7135 Tj\n-270 TJm\n(means) 25.4544 Tj\n-271 TJm\n(that) 14.9439 Tj\n-270 TJm\n(performance,) 52.8317 Tj\n-276 TJm\n(both) 17.7135 Tj\n-270 TJm\n(for) 11.6164 Tj\n-271 TJm\n(compressing) 50.3609 Tj\n-270 TJm\n(and) 14.386 Tj\n-271 TJm\n(decompressing,) 62.2563 Tj\n-275 TJm\n(is) 6.6451 Tj\n-271 TJm\n(lar) 10.5105 Tj\n18 TJm\n(gely) 17.1556 Tj\n-270 TJm\n(determined) 44.8217 Tj\n-271 TJm\n(by) 9.9626 Tj\n-270 TJm\n(the) 12.1743 Tj\n-271 TJm\n(speed) 22.6848 Tj\n72 630.336 Td\n(at) 7.193 Tj\n-294 TJm\n(which) 24.3486 Tj\n-294 TJm\n(your) 18.2614 Tj\n-294 TJm\n(machine) 33.7533 Tj\n-295 TJm\n(ca) 8.8468 Tj\n1 TJm\n(n) 4.9813 Tj\n-295 TJm\n(service) 28.2141 Tj\n-294 TJm\n(cache) 22.6749 Tj\n-294 TJm\n(misses.) 29.0609 Tj\n-442 TJm\n(Because) 33.1954 Tj\n-294 TJm\n(of) 8.2988 Tj\n-294 TJm\n(this,) 16.8866 Tj\n-306 TJm\n(small) 21.589 Tj\n-294 TJm\n(changes) 32.0895 Tj\n-294 TJm\n(to) 7.7509 Tj\n-294 TJm\n(the) 12.1743 Tj\n-294 TJm\n(code) 18.8094 Tj\n-294 TJm\n(to) 7.7509 Tj\n-294 TJm\n(reduce) 26.5503 Tj\n-294 TJm\n(the) 12.1743 Tj\n-295 TJm\n(miss) 18.2714 Tj\n-294 TJm\n(rate) 14.9339 Tj\n72 618.381 Td\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-253 TJm\n(been) 18.8094 Tj\n-253 TJm\n(observ) 26.5603 Tj\n15 TJm\n(ed) 9.4047 Tj\n-253 TJm\n(to) 7.7509 Tj\n-253 TJm\n(gi) 7.7509 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-253 TJm\n(disproportionately) 73.0557 Tj\n-253 TJm\n(lar) 10.5105 Tj\n18 TJm\n(ge) 9.4047 Tj\n-253 TJm\n(performance) 50.341 Tj\n-253 TJm\n(impro) 23.8007 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(ements.) 30.7147 Tj\n-639 TJm\n(I) 3.3175 Tj\n-253 TJm\n(imagine) 32.0995 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n438.909 618.381 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n471.318 618.381 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-253 TJm\n(perform) 32.0895 Tj\n-253 TJm\n(best) 16.0497 Tj\n72 606.426 Td\n(on) 9.9626 Tj\n-250 TJm\n(machines) 37.6287 Tj\n-250 TJm\n(with) 17.7135 Tj\n-250 TJm\n(v) 4.9813 Tj\n15 TJm\n(ery) 12.7222 Tj\n-250 TJm\n(lar) 10.5105 Tj\n18 TJm\n(ge) 9.4047 Tj\n-250 TJm\n(caches.) 29.041 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 571.673 Td\n/F116_0 20.6585 Tf\n(2.8.) 34.4584 Tj\n-278 TJm\n(CA) 29.8309 Tj\n80 TJm\n(VEA) 42.4739 Tj\n90 TJm\n(TS) 26.4016 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 549.755 Td\n/F122_0 9.9626 Tf\n(I/O) 13.2801 Tj\n-268 TJm\n(error) 19.3573 Tj\n-267 TJm\n(messages) 37.6287 Tj\n-268 TJm\n(are) 12.1643 Tj\n-268 TJm\n(not) 12.7322 Tj\n-268 TJm\n(as) 8.2988 Tj\n-267 TJm\n(helpful) 28.224 Tj\n-268 TJm\n(as) 8.2988 Tj\n-268 TJm\n(the) 12.1743 Tj\n15 TJm\n(y) 4.9813 Tj\n-267 TJm\n(could) 22.1369 Tj\n-268 TJm\n(be.) 11.8953 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n293.313 549.755 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n325.868 549.755 Td\n/F122_0 9.9626 Tf\n(tries) 17.1556 Tj\n-268 TJm\n(hard) 17.7035 Tj\n-267 TJm\n(to) 7.7509 Tj\n-268 TJm\n(detect) 23.7907 Tj\n-268 TJm\n(I/O) 13.2801 Tj\n-268 TJm\n(errors) 23.2328 Tj\n-267 TJm\n(and) 14.386 Tj\n-268 TJm\n(e) 4.4234 Tj\n15 TJm\n(xit) 10.5205 Tj\n-268 TJm\n(cleanly) 28.772 Tj\n65 TJm\n(,) 2.4907 Tj\n-272 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-268 TJm\n(the) 12.1743 Tj\n72 537.8 Td\n(details) 26.0123 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(what) 19.3673 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(problem) 33.2053 Tj\n-250 TJm\n(is) 6.6451 Tj\n-250 TJm\n(sometimes) 42.62 Tj\n-250 TJm\n(seem) 20.4731 Tj\n-250 TJm\n(rather) 23.2328 Tj\n-250 TJm\n(misleading.) 46.2165 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 515.882 Td\n(This) 17.7135 Tj\n-280 TJm\n(manual) 29.3299 Tj\n-279 TJm\n(page) 18.8094 Tj\n-280 TJm\n(pertains) 31.5416 Tj\n-280 TJm\n(to) 7.7509 Tj\n-279 TJm\n(v) 4.9813 Tj\n15 TJm\n(ersion) 24.3486 Tj\n-280 TJm\n(1.0.6) 19.9252 Tj\n-280 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n256.84 515.882 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n286.728 515.882 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-798 TJm\n(Compressed) 49.2551 Tj\n-280 TJm\n(data) 16.5977 Tj\n-279 TJm\n(created) 28.762 Tj\n-280 TJm\n(by) 9.9626 Tj\n-280 TJm\n(this) 14.396 Tj\n-279 TJm\n(v) 4.9813 Tj\n15 TJm\n(ersion) 24.3486 Tj\n-280 TJm\n(is) 6.6451 Tj\n-280 TJm\n(entirely) 30.4357 Tj\n-279 TJm\n(forw) 18.8094 Tj\n10 TJm\n(ards) 16.5977 Tj\n72 503.927 Td\n(and) 14.386 Tj\n-294 TJm\n(backw) 26.0024 Tj\n10 TJm\n(ards) 16.5977 Tj\n-293 TJm\n(compatible) 44.2738 Tj\n-294 TJm\n(with) 17.7135 Tj\n-294 TJm\n(the) 12.1743 Tj\n-293 TJm\n(pre) 12.7222 Tj\n25 TJm\n(vious) 21.589 Tj\n-294 TJm\n(public) 24.9065 Tj\n-294 TJm\n(releases,) 34.0223 Tj\n-304 TJm\n(v) 4.9813 Tj\n15 TJm\n(ersions) 28.224 Tj\n-294 TJm\n(0.1pl2,) 27.6761 Tj\n-305 TJm\n(0.9.0) 19.9252 Tj\n-293 TJm\n(and) 14.386 Tj\n-294 TJm\n(0.9.5,) 22.4159 Tj\n-305 TJm\n(1.0.0,) 22.4159 Tj\n-304 TJm\n(1.0.1,) 22.4159 Tj\n-305 TJm\n(1.0.2) 19.9252 Tj\n-294 TJm\n(and) 14.386 Tj\n72 491.972 Td\n(1.0.3,) 22.4159 Tj\n-263 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-260 TJm\n(with) 17.7135 Tj\n-260 TJm\n(the) 12.1743 Tj\n-260 TJm\n(follo) 18.8194 Tj\n25 TJm\n(wing) 19.9252 Tj\n-260 TJm\n(e) 4.4234 Tj\n15 TJm\n(xception:) 37.0808 Tj\n-330 TJm\n(0.9.0) 19.9252 Tj\n-260 TJm\n(and) 14.386 Tj\n-260 TJm\n(abo) 14.386 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-260 TJm\n(can) 13.8281 Tj\n-260 TJm\n(correctly) 35.4071 Tj\n-260 TJm\n(decompress) 47.0334 Tj\n-260 TJm\n(multiple) 33.2153 Tj\n-260 TJm\n(concatenated) 52.0048 Tj\n-260 TJm\n(compressed) 47.0334 Tj\n72 480.017 Td\n(\\002les.) 19.0983 Tj\n-310 TJm\n(0.1pl2) 25.1855 Tj\n-250 TJm\n(cannot) 26.5603 Tj\n-250 TJm\n(do) 9.9626 Tj\n-250 TJm\n(this;) 17.1656 Tj\n-250 TJm\n(it) 5.5392 Tj\n-250 TJm\n(will) 15.5018 Tj\n-250 TJm\n(stop) 16.6077 Tj\n-250 TJm\n(after) 18.2515 Tj\n-250 TJm\n(decompressing) 59.7656 Tj\n-250 TJm\n(just) 14.396 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(\\002rst) 15.5018 Tj\n-250 TJm\n(\\002le) 12.7322 Tj\n-250 TJm\n(in) 7.7509 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(stream.) 29.0509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 458.099 Td\n/F124_0 9.9626 Tf\n(bzip2recover) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n146.174 458.099 Td\n/F122_0 9.9626 Tf\n(v) 4.9813 Tj\n15 TJm\n(ersions) 28.224 Tj\n-245 TJm\n(prior) 19.3673 Tj\n-245 TJm\n(to) 7.7509 Tj\n-245 TJm\n(1.0.2) 19.9252 Tj\n-246 TJm\n(used) 18.2614 Tj\n-245 TJm\n(32-bit) 23.8007 Tj\n-245 TJm\n(inte) 14.9439 Tj\n15 TJm\n(gers) 16.5977 Tj\n-245 TJm\n(to) 7.7509 Tj\n-245 TJm\n(represent) 36.5129 Tj\n-245 TJm\n(bit) 10.5205 Tj\n-246 TJm\n(positions) 35.9849 Tj\n-245 TJm\n(in) 7.7509 Tj\n-245 TJm\n(compressed) 47.0334 Tj\n-245 TJm\n(\\002les,) 19.0983 Tj\n-246 TJm\n(so) 8.8568 Tj\n-245 TJm\n(it) 5.5392 Tj\n-245 TJm\n(could) 22.1369 Tj\n72 446.144 Td\n(not) 12.7322 Tj\n-384 TJm\n(handle) 26.5603 Tj\n-383 TJm\n(compressed) 47.0334 Tj\n-384 TJm\n(\\002les) 16.6077 Tj\n-383 TJm\n(more) 20.4731 Tj\n-384 TJm\n(than) 17.1556 Tj\n-383 TJm\n(512) 14.9439 Tj\n-384 TJm\n(me) 12.1743 Tj\n15 TJm\n(g) 4.9813 Tj\n5 TJm\n(abytes) 25.4544 Tj\n-383 TJm\n(long.) 20.2042 Tj\n-1421 TJm\n(V) 7.193 Tj\n111 TJm\n(ersions) 28.224 Tj\n-384 TJm\n(1.0.2) 19.9252 Tj\n-383 TJm\n(and) 14.386 Tj\n-384 TJm\n(abo) 14.386 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-384 TJm\n(use) 13.2801 Tj\n-383 TJm\n(64-bit) 23.8007 Tj\n-384 TJm\n(ints) 14.396 Tj\n-383 TJm\n(on) 9.9626 Tj\n-384 TJm\n(some) 21.031 Tj\n72 434.189 Td\n(platforms) 38.1866 Tj\n-245 TJm\n(which) 24.3486 Tj\n-246 TJm\n(support) 29.8878 Tj\n-245 TJm\n(them) 19.9252 Tj\n-246 TJm\n(\\(GNU) 24.8965 Tj\n-245 TJm\n(supported) 39.2925 Tj\n-245 TJm\n(tar) 10.5105 Tj\n18 TJm\n(gets,) 18.5404 Tj\n-247 TJm\n(and) 14.386 Tj\n-245 TJm\n(W) 9.4047 Tj\n40 TJm\n(indo) 17.7135 Tj\n25 TJm\n(ws\\).) 16.8766 Tj\n-309 TJm\n(T) 6.0871 Tj\n80 TJm\n(o) 4.9813 Tj\n-245 TJm\n(establish) 34.8691 Tj\n-245 TJm\n(whether) 32.0895 Tj\n-246 TJm\n(or) 8.2988 Tj\n-245 TJm\n(not) 12.7322 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n468.269 434.189 Td\n/F124_0 9.9626 Tf\n(bzip2recover) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 422.233 Td\n/F122_0 9.9626 Tf\n(w) 7.193 Tj\n10 TJm\n(as) 8.2988 Tj\n-255 TJm\n(b) 4.9813 Tj\n20 TJm\n(uilt) 13.2901 Tj\n-255 TJm\n(with) 17.7135 Tj\n-255 TJm\n(such) 18.2614 Tj\n-255 TJm\n(a) 4.4234 Tj\n-255 TJm\n(limitation,) 41.2452 Tj\n-256 TJm\n(run) 13.2801 Tj\n-255 TJm\n(it) 5.5392 Tj\n-255 TJm\n(without) 30.4457 Tj\n-255 TJm\n(ar) 7.7409 Tj\n18 TJm\n(guments.) 36.2539 Tj\n-325 TJm\n(In) 8.2988 Tj\n-255 TJm\n(an) 9.4047 Tj\n15 TJm\n(y) 4.9813 Tj\n-256 TJm\n(e) 4.4234 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(ent) 12.1743 Tj\n-255 TJm\n(you) 14.9439 Tj\n-255 TJm\n(can) 13.8281 Tj\n-255 TJm\n(b) 4.9813 Tj\n20 TJm\n(uild) 15.5018 Tj\n-255 TJm\n(yourself) 32.6474 Tj\n-255 TJm\n(an) 9.4047 Tj\n-255 TJm\n(unlimited) 38.1966 Tj\n-255 TJm\n(v) 4.9813 Tj\n15 TJm\n(ersion) 24.3486 Tj\n-255 TJm\n(if) 6.0871 Tj\n72 410.278 Td\n(you) 14.9439 Tj\n-250 TJm\n(can) 13.8281 Tj\n-250 TJm\n(recompile) 39.8404 Tj\n-250 TJm\n(it) 5.5392 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n176.318 410.278 Td\n/F124_0 9.9626 Tf\n(MaybeUInt64) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n244.562 410.278 Td\n/F122_0 9.9626 Tf\n(set) 11.0684 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(be) 9.4047 Tj\n-250 TJm\n(an) 9.4047 Tj\n-250 TJm\n(unsigned) 35.9749 Tj\n-250 TJm\n(64-bit) 23.8007 Tj\n-250 TJm\n(inte) 14.9439 Tj\n15 TJm\n(ger) 12.7222 Tj\n55 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 375.525 Td\n/F116_0 20.6585 Tf\n(2.9.) 34.4584 Tj\n-278 TJm\n(A) 14.9154 Tj\n50 TJm\n(UTHOR) 73.441 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 353.607 Td\n/F122_0 9.9626 Tf\n(Julian) 23.8007 Tj\n-250 TJm\n(Se) 9.9626 Tj\n25 TJm\n(w) 7.193 Tj\n10 TJm\n(ard,) 15.2129 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n132.801 353.607 Td\n/F124_0 9.9626 Tf\n(jseward@bzip.org) 95.641 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 331.69 Td\n/F122_0 9.9626 Tf\n(The) 15.4918 Tj\n-299 TJm\n(ideas) 20.4731 Tj\n-300 TJm\n(embodied) 39.2925 Tj\n-299 TJm\n(in) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n166.942 331.69 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n199.813 331.69 Td\n/F122_0 9.9626 Tf\n(are) 12.1643 Tj\n-299 TJm\n(du) 9.9626 Tj\n-1 TJm\n(e) 4.4234 Tj\n-299 TJm\n(to) 7.7509 Tj\n-299 TJm\n(\\(at) 10.5105 Tj\n-300 TJm\n(least\\)) 21.579 Tj\n-299 TJm\n(the) 12.1743 Tj\n-300 TJm\n(follo) 18.8194 Tj\n25 TJm\n(wing) 19.9252 Tj\n-299 TJm\n(people:) 29.3299 Tj\n-409 TJm\n(Michael) 32.6474 Tj\n-300 TJm\n(Burro) 23.2427 Tj\n25 TJm\n(ws) 11.0684 Tj\n-299 TJm\n(and) 14.386 Tj\n-300 TJm\n(Da) 11.6164 Tj\n20 TJm\n(vid) 12.7322 Tj\n-299 TJm\n(Wheeler) 33.7433 Tj\n-299 TJm\n(\\(for) 14.9339 Tj\n72 319.735 Td\n(the) 12.1743 Tj\n-312 TJm\n(block) 22.1369 Tj\n-313 TJm\n(sorting) 27.6761 Tj\n-312 TJm\n(transformation\\),) 64.468 Tj\n-328 TJm\n(Da) 11.6164 Tj\n20 TJm\n(vid) 12.7322 Tj\n-312 TJm\n(Wheeler) 33.7433 Tj\n-313 TJm\n(\\(ag) 12.7222 Tj\n5 TJm\n(ain,) 14.6649 Tj\n-327 TJm\n(for) 11.6164 Tj\n-313 TJm\n(the) 12.1743 Tj\n-312 TJm\n(Huf) 15.4918 Tj\n25 TJm\n(fman) 20.4731 Tj\n-312 TJm\n(coder\\),) 27.9351 Tj\n-328 TJm\n(Peter) 20.4731 Tj\n-313 TJm\n(Fenwick) 34.3112 Tj\n-312 TJm\n(\\(for) 14.9339 Tj\n-312 TJm\n(the) 12.1743 Tj\n-313 TJm\n(structured) 39.8404 Tj\n72 307.779 Td\n(coding) 27.1182 Tj\n-325 TJm\n(model) 24.9065 Tj\n-326 TJm\n(in) 7.7509 Tj\n-325 TJm\n(the) 12.1743 Tj\n-326 TJm\n(original) 30.9936 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n191.156 307.779 Td\n/F124_0 9.9626 Tf\n(bzip) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n215.067 307.779 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-344 TJm\n(and) 14.386 Tj\n-326 TJm\n(man) 17.1556 Tj\n15 TJm\n(y) 4.9813 Tj\n-325 TJm\n(re\\002nements\\),) 52.2937 Tj\n-345 TJm\n(and) 14.386 Tj\n-325 TJm\n(Alistair) 29.8878 Tj\n-326 TJm\n(Mof) 17.1556 Tj\n25 TJm\n(f) 3.3175 Tj\n10 TJm\n(at,) 9.6836 Tj\n-344 TJm\n(Radford) 32.6474 Tj\n-325 TJm\n(Neal) 18.8094 Tj\n-326 TJm\n(and) 14.386 Tj\n-325 TJm\n(Ian) 12.7222 Tj\n-326 TJm\n(W) 9.4047 Tj\n40 TJm\n(itten) 17.7135 Tj\n-325 TJm\n(\\(for) 14.9339 Tj\n72 295.824 Td\n(the) 12.1743 Tj\n-277 TJm\n(arithmetic) 40.3983 Tj\n-277 TJm\n(coder) 22.1269 Tj\n-277 TJm\n(in) 7.7509 Tj\n-277 TJm\n(the) 12.1743 Tj\n-277 TJm\n(original) 30.9936 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n214.171 295.824 Td\n/F124_0 9.9626 Tf\n(bzip) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n238.082 295.824 Td\n/F122_0 9.9626 Tf\n(\\).) 5.8082 Tj\n-782 TJm\n(I) 3.3175 Tj\n-277 TJm\n(am) 12.1743 Tj\n-276 TJm\n(much) 22.1369 Tj\n-277 TJm\n(indebted) 34.3112 Tj\n-277 TJm\n(for) 11.6164 Tj\n-277 TJm\n(their) 18.2614 Tj\n-277 TJm\n(help,) 19.6462 Tj\n-284 TJm\n(support) 29.8878 Tj\n-277 TJm\n(and) 14.386 Tj\n-277 TJm\n(advice.) 28.493 Tj\n-781 TJm\n(See) 14.386 Tj\n-277 TJm\n(the) 12.1743 Tj\n-277 TJm\n(manual) 29.3299 Tj\n72 283.869 Td\n(in) 7.7509 Tj\n-330 TJm\n(the) 12.1743 Tj\n-330 TJm\n(source) 26.0024 Tj\n-330 TJm\n(distrib) 25.4644 Tj\n20 TJm\n(ution) 20.4831 Tj\n-330 TJm\n(for) 11.6164 Tj\n-329 TJm\n(pointers) 32.0995 Tj\n-330 TJm\n(to) 7.7509 Tj\n-330 TJm\n(sources) 29.8778 Tj\n-330 TJm\n(of) 8.2988 Tj\n-330 TJm\n(documentation.) 61.7083 Tj\n-1099 TJm\n(Christian) 36.5329 Tj\n-330 TJm\n(v) 4.9813 Tj\n20 TJm\n(on) 9.9626 Tj\n-330 TJm\n(Roques) 29.8878 Tj\n-330 TJm\n(encouraged) 45.9176 Tj\n-330 TJm\n(me) 12.1743 Tj\n-330 TJm\n(to) 7.7509 Tj\n-330 TJm\n(look) 17.7135 Tj\n72 271.914 Td\n(for) 11.6164 Tj\n-271 TJm\n(f) 3.3175 Tj\n10 TJm\n(aster) 18.8094 Tj\n-271 TJm\n(sorting) 27.6761 Tj\n-271 TJm\n(algorithms,) 45.1107 Tj\n-276 TJm\n(so) 8.8568 Tj\n-272 TJm\n(as) 8.2988 Tj\n-271 TJm\n(to) 7.7509 Tj\n-271 TJm\n(speed) 22.6848 Tj\n-271 TJm\n(up) 9.9626 Tj\n-271 TJm\n(compression.) 52.8516 Tj\n-746 TJm\n(Bela) 18.2614 Tj\n-271 TJm\n(Lubkin) 28.782 Tj\n-271 TJm\n(encouraged) 45.9176 Tj\n-271 TJm\n(me) 12.1743 Tj\n-272 TJm\n(to) 7.7509 Tj\n-271 TJm\n(impro) 23.8007 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-271 TJm\n(the) 12.1743 Tj\n-271 TJm\n(w) 7.193 Tj\n10 TJm\n(orst-case) 35.4071 Tj\n72 259.959 Td\n(compression) 50.3609 Tj\n-340 TJm\n(performance.) 52.8317 Tj\n-580 TJm\n(Donna) 26.5603 Tj\n-339 TJm\n(Robinson) 38.1966 Tj\n-340 TJm\n(XMLised) 38.1866 Tj\n-340 TJm\n(the) 12.1743 Tj\n-340 TJm\n(documentation.) 61.7083 Tj\n-580 TJm\n(Man) 18.2614 Tj\n15 TJm\n(y) 4.9813 Tj\n-340 TJm\n(people) 26.5603 Tj\n-340 TJm\n(sent) 16.0497 Tj\n-339 TJm\n(patches,) 32.3685 Tj\n-363 TJm\n(helped) 26.5603 Tj\n-340 TJm\n(with) 17.7135 Tj\n72 248.003 Td\n(portability) 41.5142 Tj\n-250 TJm\n(problems,) 39.5714 Tj\n-250 TJm\n(lent) 14.9439 Tj\n-250 TJm\n(machines,) 40.1194 Tj\n-250 TJm\n(g) 4.9813 Tj\n5 TJm\n(a) 4.4234 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-250 TJm\n(advice) 26.0024 Tj\n-250 TJm\n(and) 14.386 Tj\n-250 TJm\n(were) 19.3573 Tj\n-250 TJm\n(generally) 37.0708 Tj\n-250 TJm\n(helpful.) 30.7147 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n539.395 50.951 Td\n(7) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 8 11\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 75.786 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n72 701.916 Td\n/F116_0 24.7902 Tf\n(3.) 20.675 Tj\n-556 TJm\n(Pr) 26.1785 Tj\n20 TJm\n(ogramming) 134.9826 Tj\n-278 TJm\n(with) 49.5804 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n330.484 701.916 Td\n/F440_0 24.7902 Tf\n(libbzip2) 118.993 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 656.35 Td\n/F116_0 17.2154 Tf\n(T) 10.5186 Tj\n80 TJm\n(ab) 20.0904 Tj\n10 TJm\n(le) 14.3576 Tj\n-278 TJm\n(of) 16.2513 Tj\n-278 TJm\n(Contents) 74.5943 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 635.788 Td\n/F122_0 9.9626 Tf\n(3.1.) 14.9439 Tj\n-310 TJm\n(T) 6.0871 Tj\n80 TJm\n(op-le) 20.4731 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(el) 7.193 Tj\n-250 TJm\n(structure) 34.8591 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n179.997 635.788 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 635.788 Td\n/F122_0 9.9626 Tf\n(8) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 623.832 Td\n(3.1.1.) 22.4159 Tj\n-310 TJm\n(Lo) 11.0684 Tj\n25 TJm\n(w-le) 17.7035 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(el) 7.193 Tj\n-250 TJm\n(summary) 37.0808 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n192.866 623.832 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 623.832 Td\n/F122_0 9.9626 Tf\n(9) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 611.877 Td\n(3.1.2.) 22.4159 Tj\n-310 TJm\n(High-le) 30.4357 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(el) 7.193 Tj\n-250 TJm\n(summary) 37.0808 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n193.822 611.877 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 611.877 Td\n/F122_0 9.9626 Tf\n(9) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 599.922 Td\n(3.1.3.) 22.4159 Tj\n-310 TJm\n(Utility) 26.0223 Tj\n-250 TJm\n(functions) 37.0808 Tj\n-250 TJm\n(summary) 37.0808 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n216.582 599.922 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.108 599.922 Td\n/F122_0 9.9626 Tf\n(9) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 587.967 Td\n(3.2.) 14.9439 Tj\n-310 TJm\n(Error) 21.0211 Tj\n-250 TJm\n(handling) 34.8691 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n162.611 587.967 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 587.967 Td\n/F122_0 9.9626 Tf\n(10) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 576.012 Td\n(3.3.) 14.9439 Tj\n-310 TJm\n(Lo) 11.0684 Tj\n25 TJm\n(w-le) 17.7035 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(el) 7.193 Tj\n-250 TJm\n(interf) 21.579 Tj\n10 TJm\n(ace) 13.2702 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n181.045 576.012 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 576.012 Td\n/F122_0 9.9626 Tf\n(11) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 564.057 Td\n(3.3.1.) 22.4159 Tj\n-310 TJm\n(BZ2_bzCompressInit) 85.7879 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n197.762 564.057 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 564.057 Td\n/F122_0 9.9626 Tf\n(11) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 552.101 Td\n(3.3.2.) 22.4159 Tj\n-310 TJm\n(BZ2_bzCompress) 71.9499 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n184.201 552.101 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 552.101 Td\n/F122_0 9.9626 Tf\n(13) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 540.146 Td\n(3.3.3.) 22.4159 Tj\n-310 TJm\n(BZ2_bzCompressEnd) 87.9996 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n198.868 540.146 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 540.146 Td\n/F122_0 9.9626 Tf\n(16) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 528.191 Td\n(3.3.4.) 22.4159 Tj\n-310 TJm\n(BZ2_bzDecompressInit) 95.1827 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n206.887 528.191 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 528.191 Td\n/F122_0 9.9626 Tf\n(16) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 516.236 Td\n(3.3.5.) 22.4159 Tj\n-310 TJm\n(BZ2_bzDecompress) 81.3446 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n193.326 516.236 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 516.236 Td\n/F122_0 9.9626 Tf\n(17) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 504.281 Td\n(3.3.6.) 22.4159 Tj\n-310 TJm\n(BZ2_bzDecompressEnd) 97.3944 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n210.207 504.281 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 504.281 Td\n/F122_0 9.9626 Tf\n(18) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 492.325 Td\n(3.4.) 14.9439 Tj\n-310 TJm\n(High-le) 30.4357 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(el) 7.193 Tj\n-250 TJm\n(interf) 21.579 Tj\n10 TJm\n(ace) 13.2702 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n184.216 492.325 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 492.325 Td\n/F122_0 9.9626 Tf\n(18) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 480.37 Td\n(3.4.1.) 22.4159 Tj\n-310 TJm\n(BZ2_bzReadOpen) 74.1516 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n185.302 480.37 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 480.37 Td\n/F122_0 9.9626 Tf\n(19) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 468.415 Td\n(3.4.2.) 22.4159 Tj\n-310 TJm\n(BZ2_bzRead) 52.5726 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n163.443 468.415 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 468.415 Td\n/F122_0 9.9626 Tf\n(20) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 456.46 Td\n(3.4.3.) 22.4159 Tj\n-310 TJm\n(BZ2_bzReadGetUnused) 97.3944 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n210.207 456.46 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 456.46 Td\n/F122_0 9.9626 Tf\n(21) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 444.505 Td\n(3.4.4.) 22.4159 Tj\n-310 TJm\n(BZ2_bzReadClose) 75.2674 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n188.074 444.505 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 444.505 Td\n/F122_0 9.9626 Tf\n(22) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 432.55 Td\n(3.4.5.) 22.4159 Tj\n-310 TJm\n(BZ2_bzWriteOpen) 76.3633 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n188.622 432.55 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 432.55 Td\n/F122_0 9.9626 Tf\n(22) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 420.594 Td\n(3.4.6.) 22.4159 Tj\n-310 TJm\n(BZ2_bzWrite) 54.7843 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n166.763 420.594 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 420.594 Td\n/F122_0 9.9626 Tf\n(23) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 408.639 Td\n(3.4.7.) 22.4159 Tj\n-310 TJm\n(BZ2_bzWriteClose) 77.4791 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n189.179 408.639 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 408.639 Td\n/F122_0 9.9626 Tf\n(23) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 396.684 Td\n(3.4.8.) 22.4159 Tj\n-310 TJm\n(Handling) 37.0808 Tj\n-250 TJm\n(embedded) 40.9463 Tj\n-250 TJm\n(compressed) 47.0334 Tj\n-250 TJm\n(data) 16.5977 Tj\n-250 TJm\n(streams) 30.4357 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n294.601 396.684 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 396.684 Td\n/F122_0 9.9626 Tf\n(24) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 384.729 Td\n(3.4.9.) 22.4159 Tj\n-310 TJm\n(Standard) 35.417 Tj\n-250 TJm\n(\\002le-reading/writing) 77.4791 Tj\n-250 TJm\n(code) 18.8094 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n247.564 384.729 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 384.729 Td\n/F122_0 9.9626 Tf\n(25) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 372.774 Td\n(3.5.) 14.9439 Tj\n-310 TJm\n(Utility) 26.0223 Tj\n-250 TJm\n(functions) 37.0808 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n170.645 372.774 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 372.774 Td\n/F122_0 9.9626 Tf\n(26) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 360.819 Td\n(3.5.1.) 22.4159 Tj\n-310 TJm\n(BZ2_bzBuf) 47.0434 Tj\n25 TJm\n(fT) 9.4047 Tj\n80 TJm\n(oBuf) 19.9252 Tj\n25 TJm\n(fCompress) 43.1679 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n229.488 360.819 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 360.819 Td\n/F122_0 9.9626 Tf\n(26) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 348.863 Td\n(3.5.2.) 22.4159 Tj\n-310 TJm\n(BZ2_bzBuf) 47.0434 Tj\n25 TJm\n(fT) 9.4047 Tj\n80 TJm\n(oBuf) 19.9252 Tj\n25 TJm\n(fDecompress) 52.5627 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n238.613 348.863 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 348.863 Td\n/F122_0 9.9626 Tf\n(27) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 336.908 Td\n(3.6.) 14.9439 Tj\n-310 TJm\n(zlib) 14.9439 Tj\n-250 TJm\n(compatibility) 53.1405 Tj\n-250 TJm\n(functions) 37.0808 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n215.06 336.908 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 336.908 Td\n/F122_0 9.9626 Tf\n(28) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 324.953 Td\n(3.7.) 14.9439 Tj\n-310 TJm\n(Using) 23.8007 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(library) 26.5603 Tj\n-250 TJm\n(in) 7.7509 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(stdio-free) 38.1767 Tj\n-250 TJm\n(en) 9.4047 Tj\n40 TJm\n(vironment) 40.9562 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n282.092 324.953 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 324.953 Td\n/F122_0 9.9626 Tf\n(28) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 312.998 Td\n(3.7.1.) 22.4159 Tj\n-310 TJm\n(Getting) 29.8878 Tj\n-250 TJm\n(rid) 11.0684 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(stdio) 19.3773 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n188.492 312.998 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 312.998 Td\n/F122_0 9.9626 Tf\n(29) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 301.043 Td\n(3.7.2.) 22.4159 Tj\n-310 TJm\n(Critical) 29.8878 Tj\n-250 TJm\n(error) 19.3573 Tj\n-250 TJm\n(handling) 34.8691 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n201.629 301.043 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 301.043 Td\n/F122_0 9.9626 Tf\n(29) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 289.088 Td\n(3.8.) 14.9439 Tj\n-310 TJm\n(Making) 30.9936 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(W) 9.4047 Tj\n40 TJm\n(indo) 17.7135 Tj\n25 TJm\n(ws) 11.0684 Tj\n-250 TJm\n(DLL) 19.3673 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n203.243 289.088 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 289.088 Td\n/F122_0 9.9626 Tf\n(29) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 257.207 Td\n(This) 17.7135 Tj\n-250 TJm\n(chapter) 29.3199 Tj\n-250 TJm\n(describes) 37.0708 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(programming) 54.2364 Tj\n-250 TJm\n(interf) 21.579 Tj\n10 TJm\n(ace) 13.2702 Tj\n-250 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n282.448 257.207 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n330.269 257.207 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 235.289 Td\n(F) 5.5392 Tj\n15 TJm\n(or) 8.2988 Tj\n-273 TJm\n(general) 29.3199 Tj\n-272 TJm\n(background) 47.0334 Tj\n-273 TJm\n(information,) 49.534 Tj\n-278 TJm\n(particularly) 45.9276 Tj\n-273 TJm\n(about) 22.1369 Tj\n-273 TJm\n(memory) 33.2053 Tj\n-272 TJm\n(use) 13.2801 Tj\n-273 TJm\n(and) 14.386 Tj\n-273 TJm\n(performance) 50.341 Tj\n-272 TJm\n(aspects,) 31.2626 Tj\n-279 TJm\n(you') 18.2614 Tj\n50 TJm\n(d) 4.9813 Tj\n-272 TJm\n(be) 9.4047 Tj\n-273 TJm\n(well) 17.1556 Tj\n-273 TJm\n(advised) 30.4357 Tj\n72 223.334 Td\n(to) 7.7509 Tj\n-250 TJm\n(read) 17.1456 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n-250 TJm\n(Ho) 12.1743 Tj\n25 TJm\n(w) 7.193 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(use) 13.2801 Tj\n-250 TJm\n(bzip2) 22.1369 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n-250 TJm\n([2]) 11.6164 Tj\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-250 TJm\n(as) 8.2988 Tj\n-250 TJm\n(well.) 19.6462 Tj\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 188.581 Td\n/F116_0 20.6585 Tf\n(3.1.) 34.4584 Tj\n-278 TJm\n(T) 12.6223 Tj\n80 TJm\n(op-le) 49.3532 Tj\n15 TJm\n(vel) 28.7153 Tj\n-278 TJm\n(structure) 89.5339 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 166.663 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n123.608 166.663 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-380 TJm\n(a) 4.4234 Tj\n-380 TJm\n(\\003e) 9.9626 Tj\n15 TJm\n(xible) 19.9252 Tj\n-381 TJm\n(library) 26.5603 Tj\n-380 TJm\n(for) 11.6164 Tj\n-380 TJm\n(compressing) 50.3609 Tj\n-380 TJm\n(and) 14.386 Tj\n-380 TJm\n(decompressing) 59.7656 Tj\n-380 TJm\n(data) 16.5977 Tj\n-381 TJm\n(in) 7.7509 Tj\n-380 TJm\n(the) 12.1743 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n405.291 166.663 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n438.966 166.663 Td\n/F122_0 9.9626 Tf\n(data) 16.5977 Tj\n-380 TJm\n(format.) 29.0509 Tj\n-1401 TJm\n(Although) 37.6387 Tj\n72 154.708 Td\n(packaged) 37.6188 Tj\n-285 TJm\n(as) 8.2988 Tj\n-284 TJm\n(a) 4.4234 Tj\n-285 TJm\n(single) 23.8007 Tj\n-285 TJm\n(entity) 22.6948 Tj\n65 TJm\n(,) 2.4907 Tj\n-293 TJm\n(it) 5.5392 Tj\n-285 TJm\n(helps) 21.031 Tj\n-285 TJm\n(to) 7.7509 Tj\n-284 TJm\n(re) 7.7409 Tj\n15 TJm\n(g) 4.9813 Tj\n5 TJm\n(ard) 12.7222 Tj\n-285 TJm\n(the) 12.1743 Tj\n-285 TJm\n(library) 26.5603 Tj\n-284 TJm\n(as) 8.2988 Tj\n-285 TJm\n(three) 19.9152 Tj\n-285 TJm\n(separate) 32.6375 Tj\n-284 TJm\n(parts:) 22.1369 Tj\n-380 TJm\n(the) 12.1743 Tj\n-285 TJm\n(lo) 7.7509 Tj\n25 TJm\n(w) 7.193 Tj\n-284 TJm\n(le) 7.193 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(el) 7.193 Tj\n-285 TJm\n(interf) 21.579 Tj\n10 TJm\n(ace,) 15.7608 Tj\n-293 TJm\n(and) 14.386 Tj\n-285 TJm\n(the) 12.1743 Tj\n-285 TJm\n(high) 17.7135 Tj\n72 142.753 Td\n(le) 7.193 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(el) 7.193 Tj\n-250 TJm\n(interf) 21.579 Tj\n10 TJm\n(ace,) 15.7608 Tj\n-250 TJm\n(and) 14.386 Tj\n-250 TJm\n(some) 21.031 Tj\n-250 TJm\n(utility) 23.8106 Tj\n-250 TJm\n(functions.) 39.5714 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 120.835 Td\n(The) 15.4918 Tj\n-349 TJm\n(structure) 34.8591 Tj\n-349 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n141.082 120.835 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n188.903 120.835 Td\n/F122_0 9.9626 Tf\n(') 3.3175 Tj\n55 TJm\n(s) 3.8755 Tj\n-349 TJm\n(interf) 21.579 Tj\n10 TJm\n(aces) 17.1456 Tj\n-349 TJm\n(is) 6.6451 Tj\n-349 TJm\n(similar) 27.6761 Tj\n-349 TJm\n(to) 7.7509 Tj\n-349 TJm\n(that) 14.9439 Tj\n-349 TJm\n(of) 8.2988 Tj\n-349 TJm\n(Jean-loup) 38.7346 Tj\n-349 TJm\n(Gailly') 28.224 Tj\n55 TJm\n(s) 3.8755 Tj\n-349 TJm\n(and) 14.386 Tj\n-349 TJm\n(Mark) 21.579 Tj\n-349 TJm\n(Adler') 26.0024 Tj\n55 TJm\n(s) 3.8755 Tj\n-349 TJm\n(e) 4.4234 Tj\n15 TJm\n(xcellent) 31.5416 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n516.09 120.835 Td\n/F124_0 9.9626 Tf\n(zlib) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 108.88 Td\n/F122_0 9.9626 Tf\n(library) 26.5603 Tj\n65 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 86.962 Td\n(All) 12.7322 Tj\n-242 TJm\n(e) 4.4234 Tj\n15 TJm\n(xternally) 35.417 Tj\n-242 TJm\n(visible) 26.5703 Tj\n-241 TJm\n(symbols) 33.2153 Tj\n-242 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-242 TJm\n(names) 25.4544 Tj\n-242 TJm\n(be) 9.4047 Tj\n15 TJm\n(ginning) 30.4457 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n284.687 86.962 Td\n/F124_0 9.9626 Tf\n(BZ2_) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n308.597 86.962 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-615 TJm\n(This) 17.7135 Tj\n-241 TJm\n(is) 6.6451 Tj\n-242 TJm\n(ne) 9.4047 Tj\n25 TJm\n(w) 7.193 Tj\n-242 TJm\n(in) 7.7509 Tj\n-242 TJm\n(v) 4.9813 Tj\n15 TJm\n(ersion) 24.3486 Tj\n-242 TJm\n(1.0.) 14.9439 Tj\n-614 TJm\n(The) 15.4918 Tj\n-242 TJm\n(intention) 35.427 Tj\n-242 TJm\n(is) 6.6451 Tj\n-241 TJm\n(to) 7.7509 Tj\n-242 TJm\n(minimise) 37.0908 Tj\n72 75.007 Td\n(pollution) 35.9849 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(namespaces) 47.5814 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(library) 26.5603 Tj\n-250 TJm\n(clients.) 28.503 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n541.288 50.951 Td\n(8) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 9 12\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n420.96 749.245 Td\n/F122_0 9.9626 Tf\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n498.449 749.245 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 75.786 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n72 710.037 Td\n/F122_0 9.9626 Tf\n(T) 6.0871 Tj\n80 TJm\n(o) 4.9813 Tj\n-250 TJm\n(use) 13.2801 Tj\n-250 TJm\n(an) 9.4047 Tj\n15 TJm\n(y) 4.9813 Tj\n-250 TJm\n(part) 15.4918 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(library) 26.5603 Tj\n65 TJm\n(,) 2.4907 Tj\n-250 TJm\n(you) 14.9439 Tj\n-250 TJm\n(need) 18.8094 Tj\n-250 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n240.567 710.037 Td\n/F124_0 9.9626 Tf\n(#include) 47.8205 Tj\n-600 TJm\n(<bzlib.h>) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n350.654 710.037 Td\n/F122_0 9.9626 Tf\n(into) 15.5018 Tj\n-250 TJm\n(your) 18.2614 Tj\n-250 TJm\n(sources.) 32.3685 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 679.416 Td\n/F116_0 17.2154 Tf\n(3.1.1.) 43.0729 Tj\n-278 TJm\n(Lo) 21.0372 Tj\n15 TJm\n(w-le) 33.484 Tj\n15 TJm\n(vel) 23.9294 Tj\n-278 TJm\n(summar) 66.9679 Tj\n-10 TJm\n(y) 9.5718 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 657.498 Td\n/F122_0 9.9626 Tf\n(This) 17.7135 Tj\n-212 TJm\n(interf) 21.579 Tj\n10 TJm\n(ace) 13.2702 Tj\n-212 TJm\n(pro) 13.2801 Tj\n15 TJm\n(vides) 21.031 Tj\n-212 TJm\n(services) 32.0895 Tj\n-212 TJm\n(for) 11.6164 Tj\n-212 TJm\n(compressing) 50.3609 Tj\n-212 TJm\n(and) 14.386 Tj\n-212 TJm\n(decompress) 47.0334 Tj\n1 TJm\n(ing) 12.7322 Tj\n-212 TJm\n(data) 16.5977 Tj\n-212 TJm\n(in) 7.7509 Tj\n-212 TJm\n(memory) 33.2053 Tj\n65 TJm\n(.) 2.4907 Tj\n-595 TJm\n(There') 26.5503 Tj\n55 TJm\n(s) 3.8755 Tj\n-212 TJm\n(no) 9.9626 Tj\n-212 TJm\n(pro) 13.2801 Tj\n15 TJm\n(vision) 24.3586 Tj\n-212 TJm\n(for) 11.6164 Tj\n-212 TJm\n(dealing) 29.3299 Tj\n72 645.543 Td\n(with) 17.7135 Tj\n-213 TJm\n(\\002les,) 19.0983 Tj\n-220 TJm\n(streams) 30.4357 Tj\n-213 TJm\n(or) 8.2988 Tj\n-213 TJm\n(an) 9.4047 Tj\n15 TJm\n(y) 4.9813 Tj\n-213 TJm\n(other) 20.4731 Tj\n-213 TJm\n(I/O) 13.2801 Tj\n-213 TJm\n(mechanisms,) 51.7457 Tj\n-221 TJm\n(just) 14.396 Tj\n-213 TJm\n(straight) 29.8878 Tj\n-213 TJm\n(memory-to-memory) 80.7967 Tj\n-213 TJm\n(w) 7.193 Tj\n10 TJm\n(ork.) 15.7708 Tj\n-595 TJm\n(In) 8.2988 Tj\n-213 TJm\n(f) 3.3175 Tj\n10 TJm\n(act,) 14.107 Tj\n-221 TJm\n(this) 14.396 Tj\n-213 TJm\n(part) 15.4918 Tj\n-213 TJm\n(of) 8.2988 Tj\n-213 TJm\n(the) 12.1743 Tj\n-213 TJm\n(library) 26.5603 Tj\n72 633.588 Td\n(can) 13.8281 Tj\n-250 TJm\n(be) 9.4047 Tj\n-250 TJm\n(compiled) 37.0808 Tj\n-250 TJm\n(without) 30.4457 Tj\n-250 TJm\n(inclusion) 36.5329 Tj\n-250 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n222.534 633.588 Td\n/F124_0 9.9626 Tf\n(stdio.h) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n264.377 633.588 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-250 TJm\n(which) 24.3486 Tj\n-250 TJm\n(may) 17.1556 Tj\n-250 TJm\n(be) 9.4047 Tj\n-250 TJm\n(helpful) 28.224 Tj\n-250 TJm\n(for) 11.6164 Tj\n-250 TJm\n(embedded) 40.9463 Tj\n-250 TJm\n(applications.) 50.6399 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 611.67 Td\n(The) 15.4918 Tj\n-250 TJm\n(lo) 7.7509 Tj\n25 TJm\n(w-le) 17.7035 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(el) 7.193 Tj\n-250 TJm\n(part) 15.4918 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(library) 26.5603 Tj\n-250 TJm\n(has) 13.2801 Tj\n-250 TJm\n(no) 9.9626 Tj\n-250 TJm\n(global) 24.9065 Tj\n-250 TJm\n(v) 4.9813 Tj\n25 TJm\n(ariables) 30.9837 Tj\n-250 TJm\n(and) 14.386 Tj\n-250 TJm\n(is) 6.6451 Tj\n-250 TJm\n(therefore) 35.955 Tj\n-250 TJm\n(thread-safe.) 46.7445 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 589.752 Td\n(Six) 13.2901 Tj\n-875 TJm\n(routines) 32.0995 Tj\n-876 TJm\n(mak) 17.1556 Tj\n10 TJm\n(e) 4.4234 Tj\n-875 TJm\n(up) 9.9626 Tj\n-876 TJm\n(the) 12.1743 Tj\n-875 TJm\n(lo) 7.7509 Tj\n25 TJm\n(w) 7.193 Tj\n-876 TJm\n(le) 7.193 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(el) 7.193 Tj\n-875 TJm\n(interf) 21.579 Tj\n10 TJm\n(ace:) 16.0398 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n308.791 589.752 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompressInit) 107.5961 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n416.387 589.752 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n429.158 589.752 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n512.844 589.752 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-1032 TJm\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 577.797 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompressEnd) 101.6185 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n186.15 577.797 Td\n/F122_0 9.9626 Tf\n(for) 11.6164 Tj\n-1258 TJm\n(compression,) 52.8516 Tj\n-1510 TJm\n(and) 14.386 Tj\n-1257 TJm\n(a) 4.4234 Tj\n-1258 TJm\n(corresponding) 56.996 Tj\n-1258 TJm\n(trio) 13.8381 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n417.958 577.797 Td\n/F124_0 9.9626 Tf\n(BZ2_bzDecompressInit) 119.5512 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n537.509 577.797 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 565.842 Td\n/F124_0 9.9626 Tf\n(BZ2_bzDecompress) 95.641 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n172.707 565.842 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n192.158 565.842 Td\n/F124_0 9.9626 Tf\n(BZ2_bzDecompressEnd) 113.5736 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n310.798 565.842 Td\n/F122_0 9.9626 Tf\n(for) 11.6164 Tj\n-508 TJm\n(decompression.) 62.2563 Tj\n-2171 TJm\n(The) 15.4918 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n431.918 564.099 Td\n/F124_0 9.9626 Tf\n(*) 5.9776 Tj\n437.895 565.842 Td\n(Init) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n466.871 565.842 Td\n/F122_0 9.9626 Tf\n(functions) 37.0808 Tj\n-508 TJm\n(allocate) 30.9837 Tj\n72 553.887 Td\n(memory) 33.2053 Tj\n-574 TJm\n(for) 11.6164 Tj\n-573 TJm\n(compression/decompression) 112.8962 Tj\n-574 TJm\n(and) 14.386 Tj\n-574 TJm\n(do) 9.9626 Tj\n-573 TJm\n(other) 20.4731 Tj\n-574 TJm\n(initialisations,) 56.1891 Tj\n-654 TJm\n(whilst) 24.3586 Tj\n-574 TJm\n(the) 12.1743 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n419.503 552.143 Td\n/F124_0 9.9626 Tf\n(*) 5.9776 Tj\n425.48 553.887 Td\n(End) 17.9327 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n449.128 553.887 Td\n/F122_0 9.9626 Tf\n(functions) 37.0808 Tj\n-574 TJm\n(close) 20.4731 Tj\n-573 TJm\n(do) 9.9626 Tj\n25 TJm\n(wn) 12.1743 Tj\n72 541.932 Td\n(operations) 41.5042 Tj\n-250 TJm\n(and) 14.386 Tj\n-250 TJm\n(release) 27.6562 Tj\n-250 TJm\n(memory) 33.2053 Tj\n65 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 520.014 Td\n(The) 15.4918 Tj\n-303 TJm\n(real) 14.9339 Tj\n-303 TJm\n(w) 7.193 Tj\n10 TJm\n(ork) 13.2801 Tj\n-303 TJm\n(is) 6.6451 Tj\n-303 TJm\n(done) 19.3673 Tj\n-303 TJm\n(by) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n176.892 520.014 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n263.598 520.014 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n281.003 520.014 Td\n/F124_0 9.9626 Tf\n(BZ2_bzDecompress) 95.641 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n376.645 520.014 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-939 TJm\n(These) 23.7907 Tj\n-303 TJm\n(compress) 37.6287 Tj\n-303 TJm\n(and) 14.386 Tj\n-303 TJm\n(decompress) 47.0334 Tj\n-303 TJm\n(data) 16.5977 Tj\n72 508.059 Td\n(from) 19.3673 Tj\n-205 TJm\n(a) 4.4234 Tj\n-205 TJm\n(user) 16.5977 Tj\n20 TJm\n(-supplied) 37.0808 Tj\n-205 TJm\n(input) 20.4831 Tj\n-206 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n-205 TJm\n(to) 7.7509 Tj\n-205 TJm\n(a) 4.4234 Tj\n-205 TJm\n(user) 16.5977 Tj\n20 TJm\n(-supplied) 37.0808 Tj\n-205 TJm\n(output) 25.4644 Tj\n-205 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n55 TJm\n(.) 2.4907 Tj\n-591 TJm\n(These) 23.7907 Tj\n-205 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fers) 14.9339 Tj\n-205 TJm\n(can) 13.8281 Tj\n-205 TJm\n(be) 9.4047 Tj\n-205 TJm\n(an) 9.4047 Tj\n15 TJm\n(y) 4.9813 Tj\n-205 TJm\n(size;) 18.2614 Tj\n-220 TJm\n(arbitrary) 34.3012 Tj\n-206 TJm\n(quantities) 38.7446 Tj\n-205 TJm\n(of) 8.2988 Tj\n72 496.104 Td\n(data) 16.5977 Tj\n-258 TJm\n(are) 12.1643 Tj\n-258 TJm\n(handled) 31.5416 Tj\n-258 TJm\n(by) 9.9626 Tj\n-257 TJm\n(making) 29.8878 Tj\n-258 TJm\n(repeated) 33.7433 Tj\n-258 TJm\n(calls) 18.2614 Tj\n-258 TJm\n(to) 7.7509 Tj\n-258 TJm\n(these) 20.4731 Tj\n-258 TJm\n(functions.) 39.5714 Tj\n-667 TJm\n(This) 17.7135 Tj\n-258 TJm\n(is) 6.6451 Tj\n-258 TJm\n(a) 4.4234 Tj\n-257 TJm\n(\\003e) 9.9626 Tj\n15 TJm\n(xible) 19.9252 Tj\n-258 TJm\n(mechanism) 45.3796 Tj\n-258 TJm\n(allo) 14.9439 Tj\n25 TJm\n(wing) 19.9252 Tj\n-258 TJm\n(a) 4.4234 Tj\n-258 TJm\n(consumer) 38.7346 Tj\n20 TJm\n(-pull) 18.8194 Tj\n72 484.148 Td\n(style) 18.8194 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(acti) 14.386 Tj\n25 TJm\n(vity) 15.5018 Tj\n65 TJm\n(,) 2.4907 Tj\n-250 TJm\n(or) 8.2988 Tj\n-250 TJm\n(producer) 35.4071 Tj\n20 TJm\n(-push,) 24.6275 Tj\n-250 TJm\n(or) 8.2988 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(mixture) 30.9936 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(both.) 20.2042 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 453.527 Td\n/F116_0 17.2154 Tf\n(3.1.2.) 43.0729 Tj\n-278 TJm\n(High-le) 58.343 Tj\n15 TJm\n(vel) 23.9294 Tj\n-278 TJm\n(summar) 66.9679 Tj\n-10 TJm\n(y) 9.5718 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 431.609 Td\n/F122_0 9.9626 Tf\n(This) 17.7135 Tj\n-284 TJm\n(interf) 21.579 Tj\n10 TJm\n(ace) 13.2702 Tj\n-284 TJm\n(pro) 13.2801 Tj\n15 TJm\n(vides) 21.031 Tj\n-285 TJm\n(some) 21.031 Tj\n-284 TJm\n(handy) 24.3486 Tj\n-284 TJm\n(wrappers) 36.5129 Tj\n-284 TJm\n(around) 27.6661 Tj\n-284 TJm\n(the) 12.1743 Tj\n-284 TJm\n(lo) 7.7509 Tj\n25 TJm\n(w-le) 17.7035 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(el) 7.193 Tj\n-285 TJm\n(interf) 21.579 Tj\n10 TJm\n(ace) 13.2702 Tj\n-284 TJm\n(to) 7.7509 Tj\n-284 TJm\n(f) 3.3175 Tj\n10 TJm\n(acilitate) 31.5416 Tj\n-284 TJm\n(reading) 29.8778 Tj\n-284 TJm\n(and) 14.386 Tj\n-285 TJm\n(writ) 16.0497 Tj\n1 TJm\n(ing) 12.7322 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n510.112 431.609 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 419.654 Td\n/F122_0 9.9626 Tf\n(format) 26.5603 Tj\n-347 TJm\n(\\002les) 16.6077 Tj\n-346 TJm\n(\\() 3.3175 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n125.391 419.654 Td\n/F124_0 9.9626 Tf\n(.bz2) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n152.754 419.654 Td\n/F122_0 9.9626 Tf\n(\\002les\\).) 22.4159 Tj\n-1200 TJm\n(The) 15.4918 Tj\n-346 TJm\n(routines) 32.0995 Tj\n-347 TJm\n(pro) 13.2801 Tj\n15 TJm\n(vide) 17.1556 Tj\n-346 TJm\n(hooks) 23.8007 Tj\n-347 TJm\n(to) 7.7509 Tj\n-346 TJm\n(f) 3.3175 Tj\n10 TJm\n(acilitate) 31.5416 Tj\n-347 TJm\n(reading) 29.8778 Tj\n-347 TJm\n(\\002les) 16.6077 Tj\n-346 TJm\n(in) 7.7509 Tj\n-347 TJm\n(which) 24.3486 Tj\n-346 TJm\n(the) 12.1743 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n460.049 419.654 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n493.39 419.654 Td\n/F122_0 9.9626 Tf\n(data) 16.5977 Tj\n-347 TJm\n(stream) 26.5603 Tj\n72 407.699 Td\n(is) 6.6451 Tj\n-339 TJm\n(embedded) 40.9463 Tj\n-339 TJm\n(within) 25.4644 Tj\n-339 TJm\n(some) 21.031 Tj\n-339 TJm\n(lar) 10.5105 Tj\n18 TJm\n(ger) 12.7222 Tj\n20 TJm\n(-scale) 23.2328 Tj\n-339 TJm\n(\\002le) 12.7322 Tj\n-339 TJm\n(structure,) 37.3498 Tj\n-361 TJm\n(or) 8.2988 Tj\n-340 TJm\n(wher) 19.9152 Tj\n1 TJm\n(e) 4.4234 Tj\n-340 TJm\n(there) 19.9152 Tj\n-339 TJm\n(are) 12.1643 Tj\n-339 TJm\n(multiple) 33.2153 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n400.941 407.699 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n434.207 407.699 Td\n/F122_0 9.9626 Tf\n(data) 16.5977 Tj\n-339 TJm\n(streams) 30.4357 Tj\n-339 TJm\n(concatenated) 52.0048 Tj\n72 395.744 Td\n(end-to-end.) 45.6486 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 373.826 Td\n(F) 5.5392 Tj\n15 TJm\n(or) 8.2988 Tj\n-332 TJm\n(reading) 29.8778 Tj\n-333 TJm\n(\\002les,) 19.0983 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n144.803 373.826 Td\n/F124_0 9.9626 Tf\n(BZ2_bzReadOpen) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n228.489 373.826 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n234.496 373.826 Td\n/F124_0 9.9626 Tf\n(BZ2_bzRead) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n294.272 373.826 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n300.279 373.826 Td\n/F124_0 9.9626 Tf\n(BZ2_bzReadClose) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n393.253 373.826 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n410.951 373.826 Td\n/F124_0 9.9626 Tf\n(BZ2_bzReadGetUnused) 113.5736 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n527.836 373.826 Td\n/F122_0 9.9626 Tf\n(are) 12.1643 Tj\n72 361.871 Td\n(supplied.) 36.2539 Tj\n-620 TJm\n(F) 5.5392 Tj\n15 TJm\n(or) 8.2988 Tj\n-250 TJm\n(writing) 28.782 Tj\n-250 TJm\n(\\002les,) 19.0983 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n183.471 361.871 Td\n/F124_0 9.9626 Tf\n(BZ2_bzWriteOpen) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n273.135 361.871 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n278.116 361.871 Td\n/F124_0 9.9626 Tf\n(BZ2_bzWrite) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n346.36 361.871 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n363.237 361.871 Td\n/F124_0 9.9626 Tf\n(BZ2_bzWriteFinish) 101.6185 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n467.346 361.871 Td\n/F122_0 9.9626 Tf\n(are) 12.1643 Tj\n-250 TJm\n(a) 4.4234 Tj\n20 TJm\n(v) 4.9813 Tj\n25 TJm\n(ailable.) 29.0509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 339.953 Td\n(As) 11.0684 Tj\n-374 TJm\n(with) 17.7135 Tj\n-374 TJm\n(the) 12.1743 Tj\n-375 TJm\n(lo) 7.7509 Tj\n25 TJm\n(w-le) 17.7035 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(el) 7.193 Tj\n-374 TJm\n(library) 26.5603 Tj\n65 TJm\n(,) 2.4907 Tj\n-405 TJm\n(no) 9.9626 Tj\n-374 TJm\n(global) 24.9065 Tj\n-374 TJm\n(v) 4.9813 Tj\n25 TJm\n(ariables) 30.9837 Tj\n-375 TJm\n(are) 12.1643 Tj\n-374 TJm\n(used) 18.2614 Tj\n-374 TJm\n(so) 8.8568 Tj\n-374 TJm\n(the) 12.1743 Tj\n-374 TJm\n(library) 26.5603 Tj\n-375 TJm\n(is) 6.6451 Tj\n-374 TJm\n(per) 12.7222 Tj\n-374 TJm\n(se) 8.2988 Tj\n-374 TJm\n(thread-safe.) 46.7445 Tj\n-1365 TJm\n(Ho) 12.1743 Tj\n25 TJm\n(we) 11.6164 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(er) 7.7409 Tj\n40 TJm\n(,) 2.4907 Tj\n-406 TJm\n(if) 6.0871 Tj\n-374 TJm\n(I/O) 13.2801 Tj\n72 327.998 Td\n(errors) 23.2328 Tj\n-267 TJm\n(occur) 22.1269 Tj\n-267 TJm\n(whilst) 24.3586 Tj\n-267 TJm\n(reading) 29.8778 Tj\n-267 TJm\n(or) 8.2988 Tj\n-267 TJm\n(writing) 28.782 Tj\n-267 TJm\n(the) 12.1743 Tj\n-268 TJm\n(underlying) 43.1679 Tj\n-267 TJm\n(compressed) 47.0334 Tj\n-267 TJm\n(\\002les,) 19.0983 Tj\n-271 TJm\n(you) 14.9439 Tj\n-267 TJm\n(may) 17.1556 Tj\n-267 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-267 TJm\n(to) 7.7509 Tj\n-267 TJm\n(consult) 28.782 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n457.199 327.998 Td\n/F124_0 9.9626 Tf\n(errno) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n489.748 327.998 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-267 TJm\n(determine) 39.8404 Tj\n72 316.043 Td\n(the) 12.1743 Tj\n-366 TJm\n(cause) 22.1269 Tj\n-365 TJm\n(of) 8.2988 Tj\n-366 TJm\n(the) 12.1743 Tj\n-365 TJm\n(error) 19.3573 Tj\n55 TJm\n(.) 2.4907 Tj\n-1314 TJm\n(In) 8.2988 Tj\n-366 TJm\n(that) 14.9439 Tj\n-365 TJm\n(case,) 19.6363 Tj\n-395 TJm\n(you') 18.2614 Tj\n50 TJm\n(d) 4.9813 Tj\n-366 TJm\n(need) 18.8094 Tj\n-365 TJm\n(a) 4.4234 Tj\n-366 TJm\n(C) 6.6451 Tj\n-365 TJm\n(library) 26.5603 Tj\n-366 TJm\n(which) 24.3486 Tj\n-366 TJm\n(correctly) 35.4071 Tj\n-365 TJm\n(supports) 33.7633 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n431.668 316.043 Td\n/F124_0 9.9626 Tf\n(errno) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n465.199 316.043 Td\n/F122_0 9.9626 Tf\n(in) 7.7509 Tj\n-366 TJm\n(a) 4.4234 Tj\n-365 TJm\n(multithreaded) 55.3422 Tj\n72 304.088 Td\n(en) 9.4047 Tj\n40 TJm\n(vironment.) 43.4469 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 282.17 Td\n(T) 6.0871 Tj\n80 TJm\n(o) 4.9813 Tj\n-243 TJm\n(mak) 17.1556 Tj\n10 TJm\n(e) 4.4234 Tj\n-243 TJm\n(the) 12.1743 Tj\n-242 TJm\n(library) 26.5603 Tj\n-243 TJm\n(a) 4.4234 Tj\n-243 TJm\n(little) 18.2714 Tj\n-242 TJm\n(simpler) 29.8878 Tj\n-243 TJm\n(and) 14.386 Tj\n-243 TJm\n(more) 20.4731 Tj\n-243 TJm\n(portable,) 35.1381 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n289.263 282.17 Td\n/F124_0 9.9626 Tf\n(BZ2_bzReadOpen) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n375.368 282.17 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n392.172 282.17 Td\n/F124_0 9.9626 Tf\n(BZ2_bzWriteOpen) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n484.254 282.17 Td\n/F122_0 9.9626 Tf\n(require) 28.2141 Tj\n-243 TJm\n(you) 14.9439 Tj\n-243 TJm\n(to) 7.7509 Tj\n72 270.215 Td\n(pass) 17.1556 Tj\n-247 TJm\n(them) 19.9252 Tj\n-248 TJm\n(\\002le) 12.7322 Tj\n-247 TJm\n(handles) 30.4357 Tj\n-247 TJm\n(\\() 3.3175 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n165.421 270.215 Td\n/F124_0 9.9626 Tf\n(FILE) 23.9102 Tj\n189.331 268.471 Td\n(*) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n195.309 270.215 Td\n/F122_0 9.9626 Tf\n(s\\)) 7.193 Tj\n-247 TJm\n(which) 24.3486 Tj\n-248 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-247 TJm\n(pre) 12.7222 Tj\n25 TJm\n(viously) 29.3399 Tj\n-247 TJm\n(been) 18.8094 Tj\n-248 TJm\n(opened) 28.772 Tj\n-247 TJm\n(for) 11.6164 Tj\n-247 TJm\n(reading) 29.8778 Tj\n-247 TJm\n(or) 8.2988 Tj\n-248 TJm\n(writing) 28.782 Tj\n-247 TJm\n(respecti) 30.9837 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(ely) 12.1743 Tj\n65 TJm\n(.) 2.4907 Tj\n-618 TJm\n(That) 18.2614 Tj\n-248 TJm\n(a) 4.4234 Tj\n20 TJm\n(v) 4.9813 Tj\n20 TJm\n(oids) 16.6077 Tj\n72 258.259 Td\n(portability) 41.5142 Tj\n-272 TJm\n(problems) 37.0808 Tj\n-273 TJm\n(associated) 40.9463 Tj\n-272 TJm\n(with) 17.7135 Tj\n-272 TJm\n(\\002le) 12.7322 Tj\n-273 TJm\n(operations) 41.5042 Tj\n-272 TJm\n(and) 14.386 Tj\n-272 TJm\n(\\002le) 12.7322 Tj\n-273 TJm\n(attrib) 21.031 Tj\n20 TJm\n(utes,) 18.5404 Tj\n-278 TJm\n(whilst) 24.3586 Tj\n-272 TJm\n(not) 12.7322 Tj\n-272 TJm\n(being) 22.1369 Tj\n-273 TJm\n(much) 22.1369 Tj\n-272 TJm\n(of) 8.2988 Tj\n-273 TJm\n(an) 9.4047 Tj\n-272 TJm\n(imposition) 42.63 Tj\n-272 TJm\n(on) 9.9626 Tj\n-273 TJm\n(the) 12.1743 Tj\n72 246.304 Td\n(programmer) 49.2451 Tj\n55 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 215.683 Td\n/F116_0 17.2154 Tf\n(3.1.3.) 43.0729 Tj\n-278 TJm\n(Utility) 47.8244 Tj\n-278 TJm\n(functions) 77.4693 Tj\n-278 TJm\n(summar) 66.9679 Tj\n-10 TJm\n(y) 9.5718 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 193.765 Td\n/F122_0 9.9626 Tf\n(F) 5.5392 Tj\n15 TJm\n(or) 8.2988 Tj\n-273 TJm\n(v) 4.9813 Tj\n15 TJm\n(ery) 12.7222 Tj\n-273 TJm\n(simple) 26.5703 Tj\n-273 TJm\n(needs,) 25.1755 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n165.929 193.765 Td\n/F124_0 9.9626 Tf\n(BZ2_bzBuffToBuffCompress) 143.4614 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n312.112 193.765 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n329.219 193.765 Td\n/F124_0 9.9626 Tf\n(BZ2_bzBuffToBuffDecompress) 155.4166 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n487.357 193.765 Td\n/F122_0 9.9626 Tf\n(are) 12.1643 Tj\n-273 TJm\n(pro) 13.2801 Tj\n15 TJm\n(vided.) 24.6275 Tj\n72 181.81 Td\n(These) 23.7907 Tj\n-374 TJm\n(compress) 37.6287 Tj\n-373 TJm\n(data) 16.5977 Tj\n-374 TJm\n(in) 7.7509 Tj\n-373 TJm\n(memory) 33.2053 Tj\n-374 TJm\n(from) 19.3673 Tj\n-373 TJm\n(one) 14.386 Tj\n-374 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n-373 TJm\n(to) 7.7509 Tj\n-374 TJm\n(another) 29.8778 Tj\n-374 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n-373 TJm\n(in) 7.7509 Tj\n-374 TJm\n(a) 4.4234 Tj\n-373 TJm\n(single) 23.8007 Tj\n-374 TJm\n(function) 33.2053 Tj\n-373 TJm\n(call.) 16.8766 Tj\n-1362 TJm\n(Y) 7.193 Tj\n110 TJm\n(ou) 9.9626 Tj\n-373 TJm\n(should) 26.5703 Tj\n-374 TJm\n(assess) 24.3486 Tj\n72 169.855 Td\n(whether) 32.0895 Tj\n-344 TJm\n(these) 20.4731 Tj\n-343 TJm\n(functions) 37.0808 Tj\n-344 TJm\n(ful\\002ll) 22.1469 Tj\n-344 TJm\n(your) 18.2614 Tj\n-343 TJm\n(memory-to-memory) 80.7967 Tj\n-344 TJm\n(compression/decompression) 112.8962 Tj\n-343 TJm\n(requirements) 52.0147 Tj\n-344 TJm\n(before) 25.4445 Tj\n-344 TJm\n(in) 7.7509 Tj\n40 TJm\n(v) 4.9813 Tj\n15 TJm\n(esting) 23.8007 Tj\n72 157.9 Td\n(ef) 7.7409 Tj\n25 TJm\n(fort) 14.386 Tj\n-250 TJm\n(in) 7.7509 Tj\n-250 TJm\n(understanding) 56.4481 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(more) 20.4731 Tj\n-250 TJm\n(general) 29.3199 Tj\n-250 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-250 TJm\n(more) 20.4731 Tj\n-250 TJm\n(comple) 29.3299 Tj\n15 TJm\n(x) 4.9813 Tj\n-250 TJm\n(lo) 7.7509 Tj\n25 TJm\n(w-le) 17.7035 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(el) 7.193 Tj\n-250 TJm\n(interf) 21.579 Tj\n10 TJm\n(ace.) 15.7608 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 135.982 Td\n(Y) 7.193 Tj\n110 TJm\n(oshioka) 30.9936 Tj\n-423 TJm\n(Tsuneo) 29.3299 Tj\n-422 TJm\n(\\() 3.3175 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n150.161 135.982 Td\n/F124_0 9.9626 Tf\n(tsuneo@rr.iij4u.or.jp) 125.5288 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n275.69 135.982 Td\n/F122_0 9.9626 Tf\n(\\)) 3.3175 Tj\n-423 TJm\n(has) 13.2801 Tj\n-422 TJm\n(contrib) 28.224 Tj\n20 TJm\n(uted) 17.1556 Tj\n-423 TJm\n(some) 21.031 Tj\n-423 TJm\n(functions) 37.0808 Tj\n-422 TJm\n(to) 7.7509 Tj\n-423 TJm\n(gi) 7.7509 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-423 TJm\n(better) 22.6848 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n476.462 135.982 Td\n/F124_0 9.9626 Tf\n(zlib) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n504.583 135.982 Td\n/F122_0 9.9626 Tf\n(compati-) 35.417 Tj\n72 124.027 Td\n(bility) 21.041 Tj\n65 TJm\n(.) 2.4907 Tj\n-1446 TJm\n(These) 23.7907 Tj\n-388 TJm\n(functions) 37.0808 Tj\n-387 TJm\n(are) 12.1643 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n193.914 124.027 Td\n/F124_0 9.9626 Tf\n(BZ2_bzopen) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n253.689 124.027 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n260.385 124.027 Td\n/F124_0 9.9626 Tf\n(BZ2_bzread) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n320.161 124.027 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n326.857 124.027 Td\n/F124_0 9.9626 Tf\n(BZ2_bzwrite) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n392.611 124.027 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n399.307 124.027 Td\n/F124_0 9.9626 Tf\n(BZ2_bzflush) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n465.06 124.027 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n471.756 124.027 Td\n/F124_0 9.9626 Tf\n(BZ2_bzclose) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n537.509 124.027 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 112.072 Td\n/F124_0 9.9626 Tf\n(BZ2_bzerror) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n140.408 112.072 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n157.449 112.072 Td\n/F124_0 9.9626 Tf\n(BZ2_bzlibVersion) 95.641 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n253.091 112.072 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-719 TJm\n(Y) 7.193 Tj\n110 TJm\n(ou) 9.9626 Tj\n-266 TJm\n(may) 17.1556 Tj\n-267 TJm\n(\\002nd) 15.5018 Tj\n-266 TJm\n(these) 20.4731 Tj\n-267 TJm\n(functions) 37.0808 Tj\n-266 TJm\n(more) 20.4731 Tj\n-267 TJm\n(con) 14.386 Tj\n40 TJm\n(v) 4.9813 Tj\n15 TJm\n(enient) 24.3486 Tj\n-266 TJm\n(for) 11.6164 Tj\n-267 TJm\n(simple) 26.5703 Tj\n-266 TJm\n(\\002le) 12.7322 Tj\n-267 TJm\n(reading) 29.8778 Tj\n72 100.116 Td\n(and) 14.386 Tj\n-270 TJm\n(writ) 16.0497 Tj\n1 TJm\n(ing,) 15.2229 Tj\n-275 TJm\n(than) 17.1556 Tj\n-269 TJm\n(those) 21.031 Tj\n-270 TJm\n(in) 7.7509 Tj\n-269 TJm\n(the) 12.1743 Tj\n-270 TJm\n(high-le) 28.224 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(el) 7.193 Tj\n-269 TJm\n(interf) 21.579 Tj\n10 TJm\n(ace.) 15.7608 Tj\n-737 TJm\n(These) 23.7907 Tj\n-270 TJm\n(functions) 37.0808 Tj\n-269 TJm\n(are) 12.1643 Tj\n-270 TJm\n(not) 12.7322 Tj\n-269 TJm\n(\\(yet\\)) 18.8094 Tj\n-270 TJm\n(of) 8.2988 Tj\n25 TJm\n(\\002cially) 27.6761 Tj\n-269 TJm\n(part) 15.4918 Tj\n-270 TJm\n(of) 8.2988 Tj\n-269 TJm\n(the) 12.1743 Tj\n-270 TJm\n(library) 26.5603 Tj\n65 TJm\n(,) 2.4907 Tj\n-274 TJm\n(and) 14.386 Tj\n-270 TJm\n(are) 12.1643 Tj\n72 88.161 Td\n(minimally) 40.9662 Tj\n-291 TJm\n(documented) 48.6972 Tj\n-291 TJm\n(here.) 19.6363 Tj\n-867 TJm\n(If) 6.6351 Tj\n-291 TJm\n(the) 12.1743 Tj\n15 TJm\n(y) 4.9813 Tj\n-291 TJm\n(break,) 24.6176 Tj\n-301 TJm\n(you) 14.9439 Tj\n-291 TJm\n(get) 12.1743 Tj\n-292 TJm\n(to) 7.7509 Tj\n-291 TJm\n(k) 4.9813 Tj\n10 TJm\n(eep) 13.8281 Tj\n-291 TJm\n(all) 9.9626 Tj\n-291 TJm\n(the) 12.1743 Tj\n-291 TJm\n(pieces.) 27.3872 Tj\n-433 TJm\n(I) 3.3175 Tj\n-291 TJm\n(hope) 19.3673 Tj\n-291 TJm\n(to) 7.7509 Tj\n-291 TJm\n(document) 39.2925 Tj\n-292 TJm\n(them) 19.9252 Tj\n-291 TJm\n(properly) 33.7533 Tj\n-291 TJm\n(when) 21.579 Tj\n72 76.206 Td\n(time) 17.7135 Tj\n-250 TJm\n(permits.) 32.3785 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n541.288 51.071 Td\n(9) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 10 13\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n419.067 749.245 Td\n/F122_0 9.9626 Tf\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n496.556 749.245 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n72 710.037 Td\n/F122_0 9.9626 Tf\n(Y) 7.193 Tj\n110 TJm\n(oshioka) 30.9936 Tj\n-250 TJm\n(also) 16.0497 Tj\n-250 TJm\n(contrib) 28.224 Tj\n20 TJm\n(uted) 17.1556 Tj\n-250 TJm\n(modi\\002cations) 54.2464 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(allo) 14.9439 Tj\n25 TJm\n(w) 7.193 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(library) 26.5603 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(be) 9.4047 Tj\n-250 TJm\n(b) 4.9813 Tj\n20 TJm\n(uilt) 13.2901 Tj\n-250 TJm\n(as) 8.2988 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(W) 9.4047 Tj\n40 TJm\n(indo) 17.7135 Tj\n25 TJm\n(ws) 11.0684 Tj\n-250 TJm\n(DLL.) 21.8579 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 675.504 Td\n/F116_0 20.6585 Tf\n(3.2.) 34.4584 Tj\n-278 TJm\n(Err) 29.8515 Tj\n20 TJm\n(or) 20.6585 Tj\n-278 TJm\n(handling) 86.084 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 653.805 Td\n/F122_0 9.9626 Tf\n(The) 15.4918 Tj\n-214 TJm\n(library) 26.5603 Tj\n-215 TJm\n(is) 6.6451 Tj\n-214 TJm\n(designed) 35.417 Tj\n-215 TJm\n(to) 7.7509 Tj\n-214 TJm\n(reco) 17.1456 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(er) 7.7409 Tj\n-215 TJm\n(cleanly) 28.772 Tj\n-214 TJm\n(in) 7.7509 Tj\n-215 TJm\n(all) 9.9626 Tj\n-214 TJm\n(situations,) 40.6873 Tj\n-222 TJm\n(including) 37.6387 Tj\n-214 TJm\n(the) 12.1743 Tj\n-215 TJm\n(w) 7.193 Tj\n10 TJm\n(orst-case) 35.4071 Tj\n-214 TJm\n(situation) 34.3212 Tj\n-215 TJm\n(of) 8.2988 Tj\n-214 TJm\n(decompressing) 59.7656 Tj\n-215 TJm\n(random) 30.4357 Tj\n72 641.85 Td\n(data.) 19.0883 Tj\n-764 TJm\n(I'm) 14.386 Tj\n-274 TJm\n(not) 12.7322 Tj\n-275 TJm\n(100%) 23.2427 Tj\n-274 TJm\n(sure) 16.5977 Tj\n-274 TJm\n(that) 14.9439 Tj\n-274 TJm\n(it) 5.5392 Tj\n-274 TJm\n(can) 13.8281 Tj\n-274 TJm\n(al) 7.193 Tj\n10 TJm\n(w) 7.193 Tj\n10 TJm\n(ays) 13.2801 Tj\n-274 TJm\n(do) 9.9626 Tj\n-274 TJm\n(this,) 16.8866 Tj\n-280 TJm\n(so) 8.8568 Tj\n-274 TJm\n(you) 14.9439 Tj\n-274 TJm\n(might) 23.2527 Tj\n-274 TJm\n(w) 7.193 Tj\n10 TJm\n(ant) 12.1743 Tj\n-274 TJm\n(to) 7.7509 Tj\n-274 TJm\n(add) 14.386 Tj\n-274 TJm\n(a) 4.4234 Tj\n-275 TJm\n(s) 3.8755 Tj\n1 TJm\n(ignal) 19.9252 Tj\n-275 TJm\n(handler) 29.8778 Tj\n-274 TJm\n(to) 7.7509 Tj\n-274 TJm\n(catch) 21.0211 Tj\n-274 TJm\n(se) 8.2988 Tj\n15 TJm\n(gmentation) 44.8317 Tj\n72 629.895 Td\n(violations) 39.3025 Tj\n-273 TJm\n(during) 26.0123 Tj\n-273 TJm\n(decompression) 59.7656 Tj\n-273 TJm\n(if) 6.0871 Tj\n-273 TJm\n(you) 14.9439 Tj\n-273 TJm\n(are) 12.1643 Tj\n-273 TJm\n(feeling) 27.6661 Tj\n-274 TJm\n(especiall) 34.8591 Tj\n1 TJm\n(y) 4.9813 Tj\n-274 TJm\n(paranoid.) 37.3498 Tj\n-758 TJm\n(I) 3.3175 Tj\n-273 TJm\n(w) 7.193 Tj\n10 TJm\n(ould) 17.7135 Tj\n-273 TJm\n(be) 9.4047 Tj\n-273 TJm\n(interested) 38.7346 Tj\n-273 TJm\n(in) 7.7509 Tj\n-274 TJm\n(hearing) 29.8778 Tj\n-273 TJm\n(more) 20.4731 Tj\n-273 TJm\n(about) 22.1369 Tj\n72 617.939 Td\n(the) 12.1743 Tj\n-250 TJm\n(rob) 13.2801 Tj\n20 TJm\n(ustness) 28.782 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(library) 26.5603 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(corrupted) 38.1767 Tj\n-250 TJm\n(compressed) 47.0334 Tj\n-250 TJm\n(data.) 19.0883 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 596.241 Td\n(V) 7.193 Tj\n111 TJm\n(ersion) 24.3486 Tj\n-251 TJm\n(1.0.3) 19.9252 Tj\n-251 TJm\n(more) 20.4731 Tj\n-251 TJm\n(rob) 13.2801 Tj\n20 TJm\n(ust) 11.6264 Tj\n-251 TJm\n(in) 7.7509 Tj\n-251 TJm\n(this) 14.396 Tj\n-251 TJm\n(respect) 28.2141 Tj\n-252 TJm\n(than) 17.1556 Tj\n-251 TJm\n(an) 9.4047 Tj\n15 TJm\n(y) 4.9813 Tj\n-251 TJm\n(pre) 12.7222 Tj\n25 TJm\n(vious) 21.589 Tj\n-251 TJm\n(v) 4.9813 Tj\n15 TJm\n(ersion.) 26.8392 Tj\n-626 TJm\n(In) 8.2988 Tj\n40 TJm\n(v) 4.9813 Tj\n15 TJm\n(estig) 18.8194 Tj\n5 TJm\n(ations) 23.8007 Tj\n-251 TJm\n(with) 17.7135 Tj\n-251 TJm\n(V) 7.193 Tj\n111 TJm\n(algrind) 28.224 Tj\n-251 TJm\n(\\(a) 7.7409 Tj\n-252 TJm\n(tool) 15.5018 Tj\n-251 TJm\n(for) 11.6164 Tj\n-251 TJm\n(detecting) 36.5229 Tj\n72 584.285 Td\n(problems) 37.0808 Tj\n-422 TJm\n(with) 17.7135 Tj\n-421 TJm\n(memory) 33.2053 Tj\n-422 TJm\n(management\\)) 54.2264 Tj\n-421 TJm\n(indicate) 31.5416 Tj\n-422 TJm\n(that,) 17.4346 Tj\n-464 TJm\n(at) 7.193 Tj\n-422 TJm\n(least) 18.2614 Tj\n-421 TJm\n(for) 11.6164 Tj\n-422 TJm\n(the) 12.1743 Tj\n-422 TJm\n(f) 3.3175 Tj\n1 TJm\n(e) 4.4234 Tj\n25 TJm\n(w) 7.193 Tj\n-422 TJm\n(\\002les) 16.6077 Tj\n-422 TJm\n(I) 3.3175 Tj\n-421 TJm\n(tested,) 25.7334 Tj\n-464 TJm\n(all) 9.9626 Tj\n-422 TJm\n(single-bit) 37.6387 Tj\n-422 TJm\n(errors) 23.2328 Tj\n-421 TJm\n(in) 7.7509 Tj\n-422 TJm\n(the) 12.1743 Tj\n72 572.33 Td\n(decompressed) 56.4381 Tj\n-342 TJm\n(data) 16.5977 Tj\n-341 TJm\n(are) 12.1643 Tj\n-342 TJm\n(caught) 26.5603 Tj\n-342 TJm\n(properly) 33.7533 Tj\n65 TJm\n(,) 2.4907 Tj\n-365 TJm\n(with) 17.7135 Tj\n-341 TJm\n(no) 9.9626 Tj\n-342 TJm\n(se) 8.2988 Tj\n15 TJm\n(gmentation) 44.8317 Tj\n-342 TJm\n(f) 3.3175 Tj\n10 TJm\n(aults,) 21.31 Tj\n-365 TJm\n(no) 9.9626 Tj\n-341 TJm\n(uses) 17.1556 Tj\n-342 TJm\n(of) 8.2988 Tj\n-342 TJm\n(uninitialised) 49.2651 Tj\n-342 TJm\n(data,) 19.0883 Tj\n-364 TJm\n(no) 9.9626 Tj\n-342 TJm\n(out) 12.7322 Tj\n-342 TJm\n(of) 8.2988 Tj\n-342 TJm\n(range) 22.1269 Tj\n72 560.375 Td\n(reads) 21.0211 Tj\n-261 TJm\n(or) 8.2988 Tj\n-260 TJm\n(writes,) 26.8392 Tj\n-263 TJm\n(and) 14.386 Tj\n-261 TJm\n(no) 9.9626 Tj\n-261 TJm\n(in\\002nit) 23.8106 Tj\n1 TJm\n(e) 4.4234 Tj\n-261 TJm\n(looping) 30.4457 Tj\n-261 TJm\n(in) 7.7509 Tj\n-260 TJm\n(the) 12.1743 Tj\n-261 TJm\n(decompressor) 55.3323 Tj\n55 TJm\n(.) 2.4907 Tj\n-342 TJm\n(So) 10.5205 Tj\n-260 TJm\n(it') 8.8568 Tj\n55 TJm\n(s) 3.8755 Tj\n-261 TJm\n(certainly) 34.8591 Tj\n-260 TJm\n(pretty) 23.2427 Tj\n-261 TJm\n(rob) 13.2801 Tj\n20 TJm\n(ust,) 14.117 Tj\n-263 TJm\n(although) 34.8691 Tj\n-261 TJm\n(I) 3.3175 Tj\n-260 TJm\n(w) 7.193 Tj\n10 TJm\n(ouldn') 26.0123 Tj\n18 TJm\n(t) 2.7696 Tj\n-261 TJm\n(claim) 22.1369 Tj\n72 548.42 Td\n(it) 5.5392 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(be) 9.4047 Tj\n-250 TJm\n(totally) 25.4644 Tj\n-250 TJm\n(bombproof.) 46.7644 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 526.721 Td\n(The) 15.4918 Tj\n-282 TJm\n(\\002le) 12.7322 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n105.84 526.721 Td\n/F124_0 9.9626 Tf\n(bzlib.h) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n150.491 526.721 Td\n/F122_0 9.9626 Tf\n(contains) 33.2053 Tj\n-282 TJm\n(all) 9.9626 Tj\n-282 TJm\n(de\\002nitions) 42.0721 Tj\n-282 TJm\n(needed) 28.2141 Tj\n-281 TJm\n(to) 7.7509 Tj\n-282 TJm\n(use) 13.2801 Tj\n-282 TJm\n(the) 12.1743 Tj\n-282 TJm\n(library) 26.5603 Tj\n65 TJm\n(.) 2.4907 Tj\n-811 TJm\n(In) 8.2988 Tj\n-282 TJm\n(particular) 38.1767 Tj\n40 TJm\n(,) 2.4907 Tj\n-290 TJm\n(you) 14.9439 Tj\n-282 TJm\n(should) 26.5703 Tj\n-281 TJm\n(de\\002nitely) 37.6387 Tj\n-282 TJm\n(not) 12.7322 Tj\n-282 TJm\n(include) 29.3299 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 514.766 Td\n/F124_0 9.9626 Tf\n(bzlib_private.h) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n161.664 514.766 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 493.067 Td\n(In) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n82.807 493.067 Td\n/F124_0 9.9626 Tf\n(bzlib.h) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n124.651 493.067 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-252 TJm\n(the) 12.1743 Tj\n-252 TJm\n(v) 4.9813 Tj\n25 TJm\n(arious) 24.3486 Tj\n-252 TJm\n(return) 23.7907 Tj\n-252 TJm\n(v) 4.9813 Tj\n25 TJm\n(alues) 20.4731 Tj\n-251 TJm\n(are) 12.1643 Tj\n-252 TJm\n(de\\002ned.) 31.8205 Tj\n-631 TJm\n(The) 15.4918 Tj\n-252 TJm\n(follo) 18.8194 Tj\n25 TJm\n(wing) 19.9252 Tj\n-252 TJm\n(list) 12.1843 Tj\n-251 TJm\n(is) 6.6451 Tj\n-252 TJm\n(not) 12.7322 Tj\n-252 TJm\n(intended) 34.3112 Tj\n-252 TJm\n(as) 8.2988 Tj\n-251 TJm\n(an) 9.4047 Tj\n-252 TJm\n(e) 4.4234 Tj\n15 TJm\n(xhausti) 28.782 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-252 TJm\n(description) 44.2738 Tj\n-252 TJm\n(of) 8.2988 Tj\n72 481.112 Td\n(the) 12.1743 Tj\n-236 TJm\n(circumstances) 56.4381 Tj\n-236 TJm\n(in) 7.7509 Tj\n-237 TJm\n(which) 24.3486 Tj\n-236 TJm\n(a) 4.4234 Tj\n-236 TJm\n(gi) 7.7509 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(en) 9.4047 Tj\n-236 TJm\n(v) 4.9813 Tj\n25 TJm\n(alue) 16.5977 Tj\n-236 TJm\n(may) 17.1556 Tj\n-237 TJm\n(be) 9.4047 Tj\n-236 TJm\n(returned) 33.1954 Tj\n-236 TJm\n(--) 6.6351 Tj\n-236 TJm\n(those) 21.031 Tj\n-236 TJm\n(descriptions) 48.1492 Tj\n-236 TJm\n(are) 12.1643 Tj\n-237 TJm\n(gi) 7.7509 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(en) 9.4047 Tj\n-236 TJm\n(later) 17.7035 Tj\n55 TJm\n(.) 2.4907 Tj\n-305 TJm\n(Rather) 26.5603 Tj\n40 TJm\n(,) 2.4907 Tj\n-239 TJm\n(it) 5.5392 Tj\n-236 TJm\n(is) 6.6451 Tj\n-237 TJm\n(intended) 34.3112 Tj\n-236 TJm\n(to) 7.7509 Tj\n72 469.157 Td\n(con) 14.386 Tj\n40 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n15 TJm\n(y) 4.9813 Tj\n-266 TJm\n(the) 12.1743 Tj\n-265 TJm\n(rough) 23.2427 Tj\n-266 TJm\n(meaning) 34.3112 Tj\n-265 TJm\n(of) 8.2988 Tj\n-266 TJm\n(each) 18.2515 Tj\n-266 TJm\n(return) 23.7907 Tj\n-265 TJm\n(v) 4.9813 Tj\n25 TJm\n(alue.) 19.0883 Tj\n-714 TJm\n(The) 15.4918 Tj\n-265 TJm\n(\\002rst) 15.5018 Tj\n-266 TJm\n(\\002) 5.5392 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-265 TJm\n(actions) 28.224 Tj\n-266 TJm\n(are) 12.1643 Tj\n-266 TJm\n(normal) 28.224 Tj\n-265 TJm\n(and) 14.386 Tj\n-266 TJm\n(not) 12.7322 Tj\n-265 TJm\n(intended) 34.3112 Tj\n-266 TJm\n(to) 7.7509 Tj\n-266 TJm\n(denote) 26.5603 Tj\n-265 TJm\n(an) 9.4047 Tj\n-266 TJm\n(error) 19.3573 Tj\n72 457.202 Td\n(situation.) 36.8118 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 425.759 Td\n/F124_0 9.9626 Tf\n(BZ_OK) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 413.804 Td\n/F122_0 9.9626 Tf\n(The) 15.4918 Tj\n-250 TJm\n(requested) 38.1767 Tj\n-250 TJm\n(action) 24.3486 Tj\n-250 TJm\n(w) 7.193 Tj\n10 TJm\n(as) 8.2988 Tj\n-250 TJm\n(completed) 41.5042 Tj\n-250 TJm\n(successfully) 48.6972 Tj\n65 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 388.34 Td\n/F124_0 9.9626 Tf\n(BZ_RUN_OK,) 59.7756 Tj\n-600 TJm\n(BZ_FLUSH_OK,) 71.7307 Tj\n-600 TJm\n(BZ_FINISH_OK) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 376.384 Td\n/F122_0 9.9626 Tf\n(In) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n118.789 376.384 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n202.476 376.384 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(requested) 38.1767 Tj\n-250 TJm\n(\\003ush/\\002nish/nothing-special) 108.4927 Tj\n-250 TJm\n(action) 24.3486 Tj\n-250 TJm\n(w) 7.193 Tj\n10 TJm\n(as) 8.2988 Tj\n-250 TJm\n(completed) 41.5042 Tj\n-250 TJm\n(successfully) 48.6972 Tj\n65 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 350.92 Td\n/F124_0 9.9626 Tf\n(BZ_STREAM_END) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 338.965 Td\n/F122_0 9.9626 Tf\n(Compression) 52.5826 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(data) 16.5977 Tj\n-250 TJm\n(w) 7.193 Tj\n10 TJm\n(as) 8.2988 Tj\n-250 TJm\n(completed,) 43.9948 Tj\n-250 TJm\n(or) 8.2988 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(logical) 27.1182 Tj\n-250 TJm\n(stream) 26.5603 Tj\n-250 TJm\n(end) 14.386 Tj\n-250 TJm\n(w) 7.193 Tj\n10 TJm\n(as) 8.2988 Tj\n-250 TJm\n(detected) 33.1954 Tj\n-250 TJm\n(during) 26.0123 Tj\n-250 TJm\n(decompression.) 62.2563 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 303.756 Td\n(The) 15.4918 Tj\n-250 TJm\n(follo) 18.8194 Tj\n25 TJm\n(wing) 19.9252 Tj\n-250 TJm\n(return) 23.7907 Tj\n-250 TJm\n(v) 4.9813 Tj\n25 TJm\n(alues) 20.4731 Tj\n-250 TJm\n(indicate) 31.5416 Tj\n-250 TJm\n(an) 9.4047 Tj\n-250 TJm\n(error) 19.3573 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(some) 21.031 Tj\n-250 TJm\n(kind.) 20.2042 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 272.314 Td\n/F124_0 9.9626 Tf\n(BZ_CONFIG_ERROR) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 260.359 Td\n/F122_0 9.9626 Tf\n(Indicates) 35.965 Tj\n-386 TJm\n(that) 14.9439 Tj\n-385 TJm\n(the) 12.1743 Tj\n-386 TJm\n(library) 26.5603 Tj\n-386 TJm\n(has) 13.2801 Tj\n-386 TJm\n(been) 18.8094 Tj\n-385 TJm\n(improperly) 44.2738 Tj\n-386 TJm\n(compiled) 37.0808 Tj\n-386 TJm\n(on) 9.9626 Tj\n-386 TJm\n(your) 18.2614 Tj\n-385 TJm\n(platform) 34.3112 Tj\n-386 TJm\n(--) 6.6351 Tj\n-386 TJm\n(a) 4.4234 Tj\n-386 TJm\n(major) 23.2427 Tj\n-385 TJm\n(con\\002guration) 53.1305 Tj\n-386 TJm\n(error) 19.3573 Tj\n55 TJm\n(.) 2.4907 Tj\n108 248.404 Td\n(Speci\\002cally) 47.0434 Tj\n65 TJm\n(,) 2.4907 Tj\n-481 TJm\n(it) 5.5392 Tj\n-435 TJm\n(means) 25.4544 Tj\n-435 TJm\n(that) 14.9439 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n220.614 248.404 Td\n/F124_0 9.9626 Tf\n(sizeof\\(char\\)) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n292.345 248.404 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n299.628 248.404 Td\n/F124_0 9.9626 Tf\n(sizeof\\(short\\)) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n381.669 248.404 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n400.388 248.404 Td\n/F124_0 9.9626 Tf\n(sizeof\\(int\\)) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n470.474 248.404 Td\n/F122_0 9.9626 Tf\n(are) 12.1643 Tj\n-435 TJm\n(not) 12.7322 Tj\n-435 TJm\n(1,) 7.472 Tj\n-481 TJm\n(2) 4.9813 Tj\n-435 TJm\n(and) 14.386 Tj\n108 236.448 Td\n(4) 4.9813 Tj\n-389 TJm\n(respecti) 30.9837 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(ely) 12.1743 Tj\n65 TJm\n(,) 2.4907 Tj\n-424 TJm\n(as) 8.2988 Tj\n-390 TJm\n(the) 12.1743 Tj\n15 TJm\n(y) 4.9813 Tj\n-389 TJm\n(should) 26.5703 Tj\n-389 TJm\n(be.) 11.8953 Tj\n-1456 TJm\n(Note) 19.3673 Tj\n-389 TJm\n(that) 14.9439 Tj\n-389 TJm\n(the) 12.1743 Tj\n-389 TJm\n(library) 26.5603 Tj\n-390 TJm\n(should) 26.5703 Tj\n-389 TJm\n(still) 14.9539 Tj\n-389 TJm\n(w) 7.193 Tj\n10 TJm\n(ork) 13.2801 Tj\n-389 TJm\n(properly) 33.7533 Tj\n-390 TJm\n(on) 9.9626 Tj\n-389 TJm\n(64-bit) 23.8007 Tj\n-389 TJm\n(platforms) 38.1866 Tj\n108 224.493 Td\n(which) 24.3486 Tj\n-292 TJm\n(follo) 18.8194 Tj\n25 TJm\n(w) 7.193 Tj\n-292 TJm\n(the) 12.1743 Tj\n-292 TJm\n(LP64) 21.589 Tj\n-292 TJm\n(programming) 54.2364 Tj\n-293 TJm\n(model) 24.9065 Tj\n-292 TJm\n(--) 6.6351 Tj\n-292 TJm\n(that) 14.9439 Tj\n-292 TJm\n(is,) 9.1357 Tj\n-303 TJm\n(where) 24.3386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n355.279 224.493 Td\n/F124_0 9.9626 Tf\n(sizeof\\(long\\)) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n429.92 224.493 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n447.217 224.493 Td\n/F124_0 9.9626 Tf\n(sizeof\\(void) 65.7532 Tj\n512.97 222.75 Td\n(*) 5.9776 Tj\n518.948 224.493 Td\n(\\)) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n527.836 224.493 Td\n/F122_0 9.9626 Tf\n(are) 12.1643 Tj\n108 212.538 Td\n(8.) 7.472 Tj\n-620 TJm\n(Under) 24.8965 Tj\n-250 TJm\n(LP64,) 24.0796 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n175.606 212.538 Td\n/F124_0 9.9626 Tf\n(sizeof\\(int\\)) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n243.85 212.538 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-250 TJm\n(still) 14.9539 Tj\n-250 TJm\n(4,) 7.472 Tj\n-250 TJm\n(so) 8.8568 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n291.74 212.538 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n339.561 212.538 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-250 TJm\n(which) 24.3486 Tj\n-250 TJm\n(doesn') 26.5603 Tj\n18 TJm\n(t) 2.7696 Tj\n-250 TJm\n(use) 13.2801 Tj\n-250 TJm\n(the) 12.1743 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n433.458 212.538 Td\n/F124_0 9.9626 Tf\n(long) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n459.859 212.538 Td\n/F122_0 9.9626 Tf\n(type,) 19.6462 Tj\n-250 TJm\n(is) 6.6451 Tj\n-250 TJm\n(OK.) 16.8766 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 187.073 Td\n/F124_0 9.9626 Tf\n(BZ_SEQUENCE_ERROR) 101.6185 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 175.118 Td\n/F122_0 9.9626 Tf\n(When) 23.7907 Tj\n-291 TJm\n(using) 21.589 Tj\n-290 TJm\n(the) 12.1743 Tj\n-291 TJm\n(library) 26.5603 Tj\n65 TJm\n(,) 2.4907 Tj\n-300 TJm\n(it) 5.5392 Tj\n-291 TJm\n(is) 6.6451 Tj\n-290 TJm\n(important) 38.7446 Tj\n-291 TJm\n(to) 7.7509 Tj\n-290 TJm\n(call) 14.386 Tj\n-291 TJm\n(the) 12.1743 Tj\n-290 TJm\n(functions) 37.0808 Tj\n-291 TJm\n(in) 7.7509 Tj\n-290 TJm\n(the) 12.1743 Tj\n-291 TJm\n(correct) 27.6562 Tj\n-290 TJm\n(sequence) 36.5129 Tj\n-291 TJm\n(and) 14.386 Tj\n-290 TJm\n(with) 17.7135 Tj\n-291 TJm\n(data) 16.5977 Tj\n-290 TJm\n(structures) 38.7346 Tj\n108 163.163 Td\n(\\(b) 8.2988 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fers) 14.9339 Tj\n-206 TJm\n(etc\\)) 14.9339 Tj\n-205 TJm\n(in) 7.7509 Tj\n-206 TJm\n(the) 12.1743 Tj\n-205 TJm\n(correct) 27.6562 Tj\n-206 TJm\n(states.) 24.6275 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n239.409 163.163 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n289.278 163.163 Td\n/F122_0 9.9626 Tf\n(checks) 27.1082 Tj\n-206 TJm\n(as) 8.2988 Tj\n-205 TJm\n(much) 22.1369 Tj\n-206 TJm\n(as) 8.2988 Tj\n-206 TJm\n(it) 5.5392 Tj\n-205 TJm\n(can) 13.8281 Tj\n-206 TJm\n(to) 7.7509 Tj\n-205 TJm\n(ensure) 26.0024 Tj\n-206 TJm\n(this) 14.396 Tj\n-206 TJm\n(is) 6.6451 Tj\n-205 TJm\n(happening,) 43.9948 Tj\n-215 TJm\n(and) 14.386 Tj\n-205 TJm\n(returns) 27.6661 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 151.208 Td\n/F124_0 9.9626 Tf\n(BZ_SEQUENCE_ERROR) 101.6185 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n213.27 151.208 Td\n/F122_0 9.9626 Tf\n(if) 6.0871 Tj\n-367 TJm\n(not.) 15.2229 Tj\n-659 TJm\n(Code) 21.031 Tj\n-367 TJm\n(which) 24.3486 Tj\n-367 TJm\n(complies) 35.9749 Tj\n-366 TJm\n(precisely) 35.965 Tj\n-367 TJm\n(with) 17.7135 Tj\n-366 TJm\n(the) 12.1743 Tj\n-367 TJm\n(function) 33.2053 Tj\n-366 TJm\n(semantics,) 41.7831 Tj\n-396 TJm\n(as) 8.2988 Tj\n-367 TJm\n(detailed) 31.5416 Tj\n108 139.253 Td\n(belo) 17.1556 Tj\n25 TJm\n(w) 7.193 Tj\n65 TJm\n(,) 2.4907 Tj\n-250 TJm\n(should) 26.5703 Tj\n-250 TJm\n(ne) 9.4047 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(er) 7.7409 Tj\n-250 TJm\n(recei) 19.3573 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-250 TJm\n(this) 14.396 Tj\n-250 TJm\n(v) 4.9813 Tj\n25 TJm\n(alue;) 19.3673 Tj\n-250 TJm\n(such) 18.2614 Tj\n-250 TJm\n(an) 9.4047 Tj\n-250 TJm\n(e) 4.4234 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(ent) 12.1743 Tj\n-250 TJm\n(denotes) 30.4357 Tj\n-250 TJm\n(b) 4.9813 Tj\n20 TJm\n(uggy) 19.9252 Tj\n-250 TJm\n(code) 18.8094 Tj\n-250 TJm\n(which) 24.3486 Tj\n-250 TJm\n(you) 14.9439 Tj\n-250 TJm\n(should) 26.5703 Tj\n-250 TJm\n(in) 7.7509 Tj\n40 TJm\n(v) 4.9813 Tj\n15 TJm\n(estig) 18.8194 Tj\n5 TJm\n(ate.) 14.107 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 113.788 Td\n/F124_0 9.9626 Tf\n(BZ_PARAM_ERROR) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 101.833 Td\n/F122_0 9.9626 Tf\n(Returned) 36.5229 Tj\n-434 TJm\n(when) 21.579 Tj\n-434 TJm\n(a) 4.4234 Tj\n-434 TJm\n(parameter) 39.8305 Tj\n-434 TJm\n(to) 7.7509 Tj\n-434 TJm\n(a) 4.4234 Tj\n-433 TJm\n(function) 33.2053 Tj\n-434 TJm\n(call) 14.386 Tj\n-434 TJm\n(is) 6.6451 Tj\n-434 TJm\n(out) 12.7322 Tj\n-434 TJm\n(of) 8.2988 Tj\n-434 TJm\n(range) 22.1269 Tj\n-434 TJm\n(or) 8.2988 Tj\n-434 TJm\n(otherwise) 38.7346 Tj\n-434 TJm\n(manifestly) 42.0621 Tj\n-434 TJm\n(incorrect.) 37.8977 Tj\n-1723 TJm\n(As) 11.0684 Tj\n108 89.878 Td\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n131.644 89.878 Td\n/F124_0 9.9626 Tf\n(BZ_SEQUENCE_ERROR) 101.6185 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n233.263 89.878 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-595 TJm\n(this) 14.396 Tj\n-596 TJm\n(denotes) 30.4357 Tj\n-595 TJm\n(a) 4.4234 Tj\n-595 TJm\n(b) 4.9813 Tj\n20 TJm\n(ug) 9.9626 Tj\n-596 TJm\n(in) 7.7509 Tj\n-595 TJm\n(the) 12.1743 Tj\n-595 TJm\n(client) 22.1369 Tj\n-595 TJm\n(code.) 21.3 Tj\n-2692 TJm\n(The) 15.4918 Tj\n-596 TJm\n(distinction) 42.0721 Tj\n-595 TJm\n(between) 33.1954 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 77.923 Td\n/F124_0 9.9626 Tf\n(BZ_PARAM_ERROR) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n194.177 77.923 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n211.054 77.923 Td\n/F124_0 9.9626 Tf\n(BZ_SEQUENCE_ERROR) 101.6185 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n315.163 77.923 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(bit) 10.5205 Tj\n-250 TJm\n(hazy) 18.8094 Tj\n65 TJm\n(,) 2.4907 Tj\n-250 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-250 TJm\n(still) 14.9539 Tj\n-250 TJm\n(w) 7.193 Tj\n10 TJm\n(orth) 16.0497 Tj\n-250 TJm\n(making.) 32.3785 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 50.951 Td\n(10) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 11 14\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n419.067 749.245 Td\n/F122_0 9.9626 Tf\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n496.556 749.245 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n72 710.037 Td\n/F124_0 9.9626 Tf\n(BZ_MEM_ERROR) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 698.082 Td\n/F122_0 9.9626 Tf\n(Returned) 36.5229 Tj\n-228 TJm\n(when) 21.579 Tj\n-227 TJm\n(a) 4.4234 Tj\n-228 TJm\n(request) 28.772 Tj\n-227 TJm\n(to) 7.7509 Tj\n-228 TJm\n(allocate) 30.9837 Tj\n-228 TJm\n(memory) 33.2053 Tj\n-227 TJm\n(f) 3.3175 Tj\n10 TJm\n(ailed.) 21.8579 Tj\n-605 TJm\n(Note) 19.3673 Tj\n-228 TJm\n(that) 14.9439 Tj\n-228 TJm\n(the) 12.1743 Tj\n-227 TJm\n(quantity) 32.6574 Tj\n-228 TJm\n(of) 8.2988 Tj\n-227 TJm\n(memory) 33.2053 Tj\n-228 TJm\n(needed) 28.2141 Tj\n-228 TJm\n(to) 7.7509 Tj\n-227 TJm\n(decompress) 47.0334 Tj\n108 686.127 Td\n(a) 4.4234 Tj\n-351 TJm\n(stream) 26.5603 Tj\n-352 TJm\n(cannot) 26.5603 Tj\n-351 TJm\n(be) 9.4047 Tj\n-352 TJm\n(determined) 44.8217 Tj\n-351 TJm\n(until) 18.2714 Tj\n-352 TJm\n(the) 12.1743 Tj\n-351 TJm\n(stream') 29.8778 Tj\n55 TJm\n(s) 3.8755 Tj\n-351 TJm\n(header) 26.5503 Tj\n-352 TJm\n(has) 13.2801 Tj\n-351 TJm\n(been) 18.8094 Tj\n-352 TJm\n(read.) 19.6363 Tj\n-1228 TJm\n(So) 10.5205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n426.471 686.127 Td\n/F124_0 9.9626 Tf\n(BZ2_bzDecompress) 95.641 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n525.614 686.127 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 674.172 Td\n/F124_0 9.9626 Tf\n(BZ2_bzRead) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n172.13 674.172 Td\n/F122_0 9.9626 Tf\n(may) 17.1556 Tj\n-437 TJm\n(return) 23.7907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n221.784 674.172 Td\n/F124_0 9.9626 Tf\n(BZ_MEM_ERROR) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n297.867 674.172 Td\n/F122_0 9.9626 Tf\n(e) 4.4234 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(en) 9.4047 Tj\n-437 TJm\n(though) 27.6761 Tj\n-437 TJm\n(some) 21.031 Tj\n-437 TJm\n(of) 8.2988 Tj\n-437 TJm\n(the) 12.1743 Tj\n-437 TJm\n(compressed) 47.0334 Tj\n-437 TJm\n(data) 16.5977 Tj\n-437 TJm\n(has) 13.2801 Tj\n-437 TJm\n(been) 18.8094 Tj\n-437 TJm\n(read.) 19.6363 Tj\n108 662.217 Td\n(The) 15.4918 Tj\n-479 TJm\n(same) 20.4731 Tj\n-478 TJm\n(is) 6.6451 Tj\n-479 TJm\n(not) 12.7322 Tj\n-478 TJm\n(true) 15.4918 Tj\n-479 TJm\n(for) 11.6164 Tj\n-479 TJm\n(compression;) 53.1305 Tj\n-593 TJm\n(once) 18.8094 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n301.675 662.217 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompressInit) 107.5961 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n414.04 662.217 Td\n/F122_0 9.9626 Tf\n(or) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n427.107 662.217 Td\n/F124_0 9.9626 Tf\n(BZ2_bzWriteOpen) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n521.539 662.217 Td\n/F122_0 9.9626 Tf\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n108 650.261 Td\n(successfully) 48.6972 Tj\n-250 TJm\n(completed,) 43.9948 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n205.672 650.261 Td\n/F124_0 9.9626 Tf\n(BZ_MEM_ERROR) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n279.894 650.261 Td\n/F122_0 9.9626 Tf\n(cannot) 26.5603 Tj\n-250 TJm\n(occur) 22.1269 Tj\n55 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 624.359 Td\n/F124_0 9.9626 Tf\n(BZ_DATA_ERROR) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 612.404 Td\n/F122_0 9.9626 Tf\n(Returned) 36.5229 Tj\n-266 TJm\n(when) 21.579 Tj\n-265 TJm\n(a) 4.4234 Tj\n-266 TJm\n(data) 16.5977 Tj\n-265 TJm\n(inte) 14.9439 Tj\n15 TJm\n(grity) 18.8194 Tj\n-266 TJm\n(error) 19.3573 Tj\n-266 TJm\n(is) 6.6451 Tj\n-265 TJm\n(detected) 33.1954 Tj\n-266 TJm\n(during) 26.0123 Tj\n-265 TJm\n(decompression.) 62.2563 Tj\n-714 TJm\n(Most) 20.4831 Tj\n-266 TJm\n(importantl) 41.5142 Tj\n1 TJm\n(y) 4.9813 Tj\n64 TJm\n(,) 2.4907 Tj\n-269 TJm\n(this) 14.396 Tj\n-266 TJm\n(means) 25.4544 Tj\n-265 TJm\n(when) 21.579 Tj\n108 600.448 Td\n(stored) 24.3486 Tj\n-222 TJm\n(and) 14.386 Tj\n-223 TJm\n(computed) 39.2925 Tj\n-222 TJm\n(CRCs) 23.8106 Tj\n-222 TJm\n(for) 11.6164 Tj\n-222 TJm\n(the) 12.1743 Tj\n-223 TJm\n(data) 16.5977 Tj\n-222 TJm\n(do) 9.9626 Tj\n-222 TJm\n(not) 12.7322 Tj\n-222 TJm\n(match.) 26.8392 Tj\n-602 TJm\n(This) 17.7135 Tj\n-222 TJm\n(v) 4.9813 Tj\n25 TJm\n(alue) 16.5977 Tj\n-222 TJm\n(is) 6.6451 Tj\n-223 TJm\n(also) 16.0497 Tj\n-222 TJm\n(returned) 33.1954 Tj\n-222 TJm\n(upon) 19.9252 Tj\n-222 TJm\n(detection) 36.5229 Tj\n-223 TJm\n(of) 8.2988 Tj\n-222 TJm\n(an) 9.4047 Tj\n15 TJm\n(y) 4.9813 Tj\n-222 TJm\n(other) 20.4731 Tj\n108 588.493 Td\n(anomaly) 34.3112 Tj\n-250 TJm\n(in) 7.7509 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(compressed) 47.0334 Tj\n-250 TJm\n(data.) 19.0883 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 562.59 Td\n/F124_0 9.9626 Tf\n(BZ_DATA_ERROR_MAGIC) 113.5736 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 550.635 Td\n/F122_0 9.9626 Tf\n(As) 11.0684 Tj\n-306 TJm\n(a) 4.4234 Tj\n-306 TJm\n(special) 27.6661 Tj\n-306 TJm\n(case) 17.1456 Tj\n-307 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n191.852 550.635 Td\n/F124_0 9.9626 Tf\n(BZ_DATA_ERROR) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n269.561 550.635 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-306 TJm\n(it) 5.5392 Tj\n-306 TJm\n(is) 6.6451 Tj\n-306 TJm\n(sometimes) 42.62 Tj\n-306 TJm\n(useful) 24.3486 Tj\n-307 TJm\n(to) 7.7509 Tj\n-306 TJm\n(kno) 14.9439 Tj\n25 TJm\n(w) 7.193 Tj\n-306 TJm\n(when) 21.579 Tj\n-306 TJm\n(the) 12.1743 Tj\n-306 TJm\n(compressed) 47.0334 Tj\n-306 TJm\n(stream) 26.5603 Tj\n-306 TJm\n(does) 18.2614 Tj\n108 538.68 Td\n(not) 12.7322 Tj\n-250 TJm\n(start) 17.1556 Tj\n-250 TJm\n(with) 17.7135 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(correct) 27.6562 Tj\n-250 TJm\n(magic) 24.3486 Tj\n-250 TJm\n(bytes) 21.031 Tj\n-250 TJm\n(\\() 3.3175 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n261.562 538.68 Td\n/F124_0 9.9626 Tf\n('B') 17.9327 Tj\n-600 TJm\n('Z') 17.9327 Tj\n-600 TJm\n('h') 17.9327 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n327.316 538.68 Td\n/F122_0 9.9626 Tf\n(\\).) 5.8082 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 512.777 Td\n/F124_0 9.9626 Tf\n(BZ_IO_ERROR) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 500.822 Td\n/F122_0 9.9626 Tf\n(Returned) 36.5229 Tj\n-233 TJm\n(by) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n159.123 500.822 Td\n/F124_0 9.9626 Tf\n(BZ2_bzRead) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n221.218 500.822 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n237.922 500.822 Td\n/F124_0 9.9626 Tf\n(BZ2_bzWrite) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n305.995 500.822 Td\n/F122_0 9.9626 Tf\n(when) 21.579 Tj\n-233 TJm\n(there) 19.9152 Tj\n-232 TJm\n(is) 6.6451 Tj\n-233 TJm\n(an) 9.4047 Tj\n-233 TJm\n(error) 19.3573 Tj\n-233 TJm\n(reading) 29.8778 Tj\n-232 TJm\n(or) 8.2988 Tj\n-233 TJm\n(writing) 28.782 Tj\n-233 TJm\n(in) 7.7509 Tj\n-233 TJm\n(the) 12.1743 Tj\n-232 TJm\n(compressed) 47.0334 Tj\n108 488.867 Td\n(\\002le,) 15.2229 Tj\n-384 TJm\n(and) 14.386 Tj\n-357 TJm\n(by) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n158.511 488.867 Td\n/F124_0 9.9626 Tf\n(BZ2_bzReadOpen) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n245.755 488.867 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n263.698 488.867 Td\n/F124_0 9.9626 Tf\n(BZ2_bzWriteOpen) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n356.92 488.867 Td\n/F122_0 9.9626 Tf\n(for) 11.6164 Tj\n-357 TJm\n(attempts) 33.7633 Tj\n-357 TJm\n(to) 7.7509 Tj\n-357 TJm\n(use) 13.2801 Tj\n-357 TJm\n(a) 4.4234 Tj\n-357 TJm\n(\\002le) 12.7322 Tj\n-357 TJm\n(for) 11.6164 Tj\n-358 TJm\n(which) 24.3486 Tj\n-357 TJm\n(the) 12.1743 Tj\n-357 TJm\n(error) 19.3573 Tj\n108 476.912 Td\n(indicator) 35.417 Tj\n-260 TJm\n(\\(viz,) 17.9825 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n166.603 476.912 Td\n/F124_0 9.9626 Tf\n(ferror\\(f\\)) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n220.401 476.912 Td\n/F122_0 9.9626 Tf\n(\\)) 3.3175 Tj\n-260 TJm\n(is) 6.6451 Tj\n-260 TJm\n(set.) 13.5591 Tj\n-680 TJm\n(On) 12.1743 Tj\n-259 TJm\n(receipt) 27.1082 Tj\n-260 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n311.223 476.912 Td\n/F124_0 9.9626 Tf\n(BZ_IO_ERROR) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n376.976 476.912 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-260 TJm\n(the) 12.1743 Tj\n-260 TJm\n(caller) 22.1269 Tj\n-260 TJm\n(should) 26.5703 Tj\n-260 TJm\n(consult) 28.782 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n482.068 476.912 Td\n/F124_0 9.9626 Tf\n(errno) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n514.546 476.912 Td\n/F122_0 9.9626 Tf\n(and/or) 25.4544 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 464.956 Td\n/F124_0 9.9626 Tf\n(perror) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n146.356 464.956 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-250 TJm\n(acquire) 29.3199 Tj\n-250 TJm\n(operating-system) 68.6224 Tj\n-250 TJm\n(speci\\002c) 30.4357 Tj\n-250 TJm\n(information) 47.0434 Tj\n-250 TJm\n(about) 22.1369 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(problem.) 35.696 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 439.054 Td\n/F124_0 9.9626 Tf\n(BZ_UNEXPECTED_EOF) 101.6185 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 427.099 Td\n/F122_0 9.9626 Tf\n(Returned) 36.5229 Tj\n-250 TJm\n(by) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n159.467 427.099 Td\n/F124_0 9.9626 Tf\n(BZ2_bzRead) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n221.733 427.099 Td\n/F122_0 9.9626 Tf\n(when) 21.579 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(compressed) 47.0334 Tj\n-250 TJm\n(\\002le) 12.7322 Tj\n-250 TJm\n(\\002nishes) 30.4457 Tj\n-250 TJm\n(before) 25.4445 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(logical) 27.1182 Tj\n-250 TJm\n(end) 14.386 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(stream) 26.5603 Tj\n-250 TJm\n(is) 6.6451 Tj\n-250 TJm\n(detected.) 35.686 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 401.196 Td\n/F124_0 9.9626 Tf\n(BZ_OUTBUFF_FULL) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n108 389.241 Td\n/F122_0 9.9626 Tf\n(Returned) 36.5229 Tj\n-258 TJm\n(by) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n159.632 389.241 Td\n/F124_0 9.9626 Tf\n(BZ2_bzBuffToBuffCompress) 143.4614 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n305.668 389.241 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n322.627 389.241 Td\n/F124_0 9.9626 Tf\n(BZ2_bzBuffToBuffDecompress) 155.4166 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n480.617 389.241 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-258 TJm\n(indicate) 31.5416 Tj\n-259 TJm\n(that) 14.9439 Tj\n108 377.285 Td\n(the) 12.1743 Tj\n-250 TJm\n(output) 25.4644 Tj\n-250 TJm\n(data) 16.5977 Tj\n-250 TJm\n(will) 15.5018 Tj\n-250 TJm\n(not) 12.7322 Tj\n-250 TJm\n(\\002t) 8.3088 Tj\n-250 TJm\n(into) 15.5018 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(output) 25.4644 Tj\n-250 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n-250 TJm\n(pro) 13.2801 Tj\n15 TJm\n(vided.) 24.6275 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 328.585 Td\n/F116_0 20.6585 Tf\n(3.3.) 34.4584 Tj\n-278 TJm\n(Lo) 25.2447 Tj\n15 TJm\n(w-le) 40.1808 Tj\n15 TJm\n(vel) 28.7153 Tj\n-278 TJm\n(interface) 86.1046 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 297.964 Td\n/F116_0 17.2154 Tf\n(3.3.1.) 43.0729 Tj\n-278 TJm\n(BZ2_bzCompressInit) 171.2244 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 50.852 Td\n/F122_0 9.9626 Tf\n(11) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 12 15\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n419.067 749.245 Td\n/F122_0 9.9626 Tf\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n496.556 749.245 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 445.031] cm\n0 0 468 274.969 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 711.631 Td\n/F124_0 9.9626 Tf\n(typedef) 41.8429 Tj\n-426 TJm\n(struct) 35.8654 Tj\n-426 TJm\n({) 5.9776 Tj\n98.488 699.676 Td\n(char) 23.9102 Tj\n126.642 697.933 Td\n(*) 5.9776 Tj\n132.62 699.676 Td\n(next_in;) 47.8205 Tj\n98.488 687.721 Td\n(unsigned) 47.8205 Tj\n-426 TJm\n(int) 17.9327 Tj\n-426 TJm\n(avail_in;) 53.798 Tj\n98.488 675.766 Td\n(unsigned) 47.8205 Tj\n-426 TJm\n(int) 17.9327 Tj\n-426 TJm\n(total_in_lo32;) 83.6858 Tj\n98.488 663.811 Td\n(unsigned) 47.8205 Tj\n-426 TJm\n(int) 17.9327 Tj\n-426 TJm\n(total_in_hi32;) 83.6858 Tj\n98.488 639.9 Td\n(char) 23.9102 Tj\n126.642 638.157 Td\n(*) 5.9776 Tj\n132.62 639.9 Td\n(next_out;) 53.798 Tj\n98.488 627.945 Td\n(unsigned) 47.8205 Tj\n-426 TJm\n(int) 17.9327 Tj\n-426 TJm\n(avail_out;) 59.7756 Tj\n98.488 615.99 Td\n(unsigned) 47.8205 Tj\n-426 TJm\n(int) 17.9327 Tj\n-426 TJm\n(total_out_lo32;) 89.6634 Tj\n98.488 604.035 Td\n(unsigned) 47.8205 Tj\n-426 TJm\n(int) 17.9327 Tj\n-426 TJm\n(total_out_hi32;) 89.6634 Tj\n98.488 580.124 Td\n(void) 23.9102 Tj\n126.642 578.381 Td\n(*) 5.9776 Tj\n132.62 580.124 Td\n(state;) 35.8654 Tj\n98.488 556.214 Td\n(void) 23.9102 Tj\n126.642 554.471 Td\n(*) 5.9776 Tj\n132.62 556.214 Td\n(\\() 5.9776 Tj\n138.597 554.471 Td\n(*) 5.9776 Tj\n144.575 556.214 Td\n(bzalloc\\)\\(void) 77.7083 Tj\n226.528 554.471 Td\n(*) 5.9776 Tj\n232.505 556.214 Td\n(,int,int\\);) 59.7756 Tj\n98.488 544.259 Td\n(void) 23.9102 Tj\n-426 TJm\n(\\() 5.9776 Tj\n132.62 542.515 Td\n(*) 5.9776 Tj\n138.597 544.259 Td\n(bzfree\\)\\(void) 71.7307 Tj\n214.572 542.515 Td\n(*) 5.9776 Tj\n220.55 544.259 Td\n(,void) 29.8878 Tj\n254.682 542.515 Td\n(*) 5.9776 Tj\n260.659 544.259 Td\n(\\);) 11.9551 Tj\n98.488 532.304 Td\n(void) 23.9102 Tj\n126.642 530.56 Td\n(*) 5.9776 Tj\n132.62 532.304 Td\n(opaque;) 41.8429 Tj\n90 520.349 Td\n(}) 5.9776 Tj\n-426 TJm\n(bz_stream;) 59.7756 Tj\n90 496.438 Td\n(int) 17.9327 Tj\n-426 TJm\n(BZ2_bzCompressInit) 107.5961 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(bz_stream) 53.798 Tj\n292.281 494.695 Td\n(*) 5.9776 Tj\n298.259 496.438 Td\n(strm,) 29.8878 Tj\n196.099 484.483 Td\n(int) 17.9327 Tj\n-426 TJm\n(blockSize100k,) 83.6858 Tj\n196.099 472.528 Td\n(int) 17.9327 Tj\n-426 TJm\n(verbosity,) 59.7756 Tj\n196.099 460.573 Td\n(int) 17.9327 Tj\n-426 TJm\n(workFactor) 59.7756 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 423.113 Td\n/F122_0 9.9626 Tf\n(Prepares) 34.3012 Tj\n-356 TJm\n(for) 11.6164 Tj\n-356 TJm\n(compression.) 52.8516 Tj\n-1256 TJm\n(The) 15.4918 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n209.41 423.113 Td\n/F124_0 9.9626 Tf\n(bz_stream) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n266.754 423.113 Td\n/F122_0 9.9626 Tf\n(structure) 34.8591 Tj\n-356 TJm\n(holds) 21.589 Tj\n-356 TJm\n(all) 9.9626 Tj\n-356 TJm\n(data) 16.5977 Tj\n-356 TJm\n(pertaining) 40.3983 Tj\n-356 TJm\n(to) 7.7509 Tj\n-356 TJm\n(the) 12.1743 Tj\n-356 TJm\n(compression) 50.3609 Tj\n-355 TJm\n(acti) 14.386 Tj\n25 TJm\n(vity) 15.5018 Tj\n65 TJm\n(.) 2.4907 Tj\n-1256 TJm\n(A) 7.193 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 411.158 Td\n/F124_0 9.9626 Tf\n(bz_stream) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n128.581 411.158 Td\n/F122_0 9.9626 Tf\n(structure) 34.8591 Tj\n-279 TJm\n(should) 26.5703 Tj\n-280 TJm\n(be) 9.4047 Tj\n-279 TJm\n(allocated) 35.965 Tj\n-279 TJm\n(and) 14.386 Tj\n-280 TJm\n(initialised) 39.3025 Tj\n-279 TJm\n(prior) 19.3673 Tj\n-279 TJm\n(to) 7.7509 Tj\n-279 TJm\n(the) 12.1743 Tj\n-280 TJm\n(call.) 16.8766 Tj\n-796 TJm\n(The) 15.4918 Tj\n-279 TJm\n(\\002elds) 21.589 Tj\n-279 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n431.939 411.158 Td\n/F124_0 9.9626 Tf\n(bz_stream) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n488.52 411.158 Td\n/F122_0 9.9626 Tf\n(comprise) 36.5229 Tj\n-279 TJm\n(the) 12.1743 Tj\n72 399.203 Td\n(entirety) 30.4357 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(user) 16.5977 Tj\n20 TJm\n(-visible) 29.8878 Tj\n-250 TJm\n(data.) 19.0883 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n204.422 399.203 Td\n/F124_0 9.9626 Tf\n(state) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n236.8 399.203 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(pointer) 28.224 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(pri) 11.0684 Tj\n25 TJm\n(v) 4.9813 Tj\n25 TJm\n(ate) 11.6164 Tj\n-250 TJm\n(data) 16.5977 Tj\n-250 TJm\n(structures) 38.7346 Tj\n-250 TJm\n(required) 33.1954 Tj\n-250 TJm\n(for) 11.6164 Tj\n-250 TJm\n(compression.) 52.8516 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 377.285 Td\n(Custom) 31.0036 Tj\n-372 TJm\n(memory) 33.2053 Tj\n-372 TJm\n(allocators) 38.7346 Tj\n-372 TJm\n(are) 12.1643 Tj\n-372 TJm\n(supported,) 41.7831 Tj\n-403 TJm\n(via) 12.1743 Tj\n-372 TJm\n(\\002elds) 21.589 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n288.908 377.285 Td\n/F124_0 9.9626 Tf\n(bzalloc) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n330.751 377.285 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n337.253 377.285 Td\n/F124_0 9.9626 Tf\n(bzfree) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n373.118 377.285 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-403 TJm\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n397.714 377.285 Td\n/F124_0 9.9626 Tf\n(opaque) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n433.579 377.285 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-1353 TJm\n(The) 15.4918 Tj\n-372 TJm\n(v) 4.9813 Tj\n25 TJm\n(alue) 16.5977 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n493.782 377.285 Td\n/F124_0 9.9626 Tf\n(opaque) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n533.355 377.285 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n72 365.33 Td\n(passed) 26.5603 Tj\n-306 TJm\n(to) 7.7509 Tj\n-306 TJm\n(as) 8.2988 Tj\n-306 TJm\n(the) 12.1743 Tj\n-306 TJm\n(\\002rst) 15.5018 Tj\n-306 TJm\n(ar) 7.7409 Tj\n18 TJm\n(gument) 29.8878 Tj\n-306 TJm\n(to) 7.7509 Tj\n-306 TJm\n(all) 9.9626 Tj\n-306 TJm\n(calls) 18.2614 Tj\n-305 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n253.941 365.33 Td\n/F124_0 9.9626 Tf\n(bzalloc) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n298.832 365.33 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n316.266 365.33 Td\n/F124_0 9.9626 Tf\n(bzfree) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n352.132 365.33 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-320 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-306 TJm\n(is) 6.6451 Tj\n-306 TJm\n(otherwise) 38.7346 Tj\n-306 TJm\n(ignored) 30.4357 Tj\n-306 TJm\n(by) 9.9626 Tj\n-306 TJm\n(the) 12.1743 Tj\n-306 TJm\n(library) 26.5603 Tj\n65 TJm\n(.) 2.4907 Tj\n-955 TJm\n(The) 15.4918 Tj\n72 353.375 Td\n(call) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n89.431 353.375 Td\n/F124_0 9.9626 Tf\n(bzalloc) 41.8429 Tj\n-600 TJm\n(\\() 5.9776 Tj\n-600 TJm\n(opaque,) 41.8429 Tj\n-600 TJm\n(n,) 11.9551 Tj\n-600 TJm\n(m) 5.9776 Tj\n-600 TJm\n(\\)) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n235.938 353.375 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-306 TJm\n(e) 4.4234 Tj\n15 TJm\n(xpected) 30.9837 Tj\n-305 TJm\n(to) 7.7509 Tj\n-306 TJm\n(return) 23.7907 Tj\n-306 TJm\n(a) 4.4234 Tj\n-305 TJm\n(pointer) 28.224 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n360.3 353.375 Td\n/F124_0 9.9626 Tf\n(p) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n369.322 353.375 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n380.118 353.375 Td\n/F124_0 9.9626 Tf\n(n) 5.9776 Tj\n392.073 351.631 Td\n(*) 5.9776 Tj\n404.029 353.375 Td\n(m) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n413.051 353.375 Td\n/F122_0 9.9626 Tf\n(bytes) 21.031 Tj\n-306 TJm\n(of) 8.2988 Tj\n-305 TJm\n(memory) 33.2053 Tj\n65 TJm\n(,) 2.4907 Tj\n-320 TJm\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n504.135 353.375 Td\n/F124_0 9.9626 Tf\n(bzfree) 35.8654 Tj\n72 341.42 Td\n(\\() 5.9776 Tj\n-600 TJm\n(opaque,) 41.8429 Tj\n-600 TJm\n(p) 5.9776 Tj\n-600 TJm\n(\\)) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n152.199 341.42 Td\n/F122_0 9.9626 Tf\n(should) 26.5703 Tj\n-250 TJm\n(free) 15.4819 Tj\n-250 TJm\n(that) 14.9439 Tj\n-250 TJm\n(memory) 33.2053 Tj\n65 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 319.502 Td\n(If) 6.6351 Tj\n-280 TJm\n(you) 14.9439 Tj\n-280 TJm\n(don') 18.2614 Tj\n18 TJm\n(t) 2.7696 Tj\n-280 TJm\n(w) 7.193 Tj\n10 TJm\n(ant) 12.1743 Tj\n-279 TJm\n(to) 7.7509 Tj\n-280 TJm\n(use) 13.2801 Tj\n-280 TJm\n(a) 4.4234 Tj\n-280 TJm\n(custom) 28.782 Tj\n-280 TJm\n(memory) 33.2053 Tj\n-279 TJm\n(allocator) 34.8591 Tj\n40 TJm\n(,) 2.4907 Tj\n-288 TJm\n(set) 11.0684 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n299.9 319.502 Td\n/F124_0 9.9626 Tf\n(bzalloc) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n341.743 319.502 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n347.096 319.502 Td\n/F124_0 9.9626 Tf\n(bzfree) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n385.749 319.502 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n402.923 319.502 Td\n/F124_0 9.9626 Tf\n(opaque) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n441.576 319.502 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n452.115 319.502 Td\n/F124_0 9.9626 Tf\n(NULL) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n476.025 319.502 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-280 TJm\n(and) 14.386 Tj\n-280 TJm\n(the) 12.1743 Tj\n-280 TJm\n(library) 26.5603 Tj\n72 307.547 Td\n(will) 15.5018 Tj\n-250 TJm\n(then) 17.1556 Tj\n-250 TJm\n(use) 13.2801 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(standard) 33.7533 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n176.318 307.547 Td\n/F124_0 9.9626 Tf\n(malloc) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n214.674 307.547 Td\n/F122_0 9.9626 Tf\n(/) 2.7696 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n219.934 307.547 Td\n/F124_0 9.9626 Tf\n(free) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n246.335 307.547 Td\n/F122_0 9.9626 Tf\n(routines.) 34.5901 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 285.629 Td\n(Before) 27.1082 Tj\n-362 TJm\n(calling) 27.1182 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n133.438 285.629 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompressInit) 107.5961 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n241.035 285.629 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-390 TJm\n(\\002elds) 21.589 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n272.606 285.629 Td\n/F124_0 9.9626 Tf\n(bzalloc) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n314.449 285.629 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n320.825 285.629 Td\n/F124_0 9.9626 Tf\n(bzfree) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n360.296 285.629 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n378.289 285.629 Td\n/F124_0 9.9626 Tf\n(opaque) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n417.76 285.629 Td\n/F122_0 9.9626 Tf\n(should) 26.5703 Tj\n-362 TJm\n(be) 9.4047 Tj\n-362 TJm\n(\\002lled) 20.4831 Tj\n-362 TJm\n(appropriately) 53.1206 Tj\n65 TJm\n(,) 2.4907 Tj\n72 273.674 Td\n(as) 8.2988 Tj\n-322 TJm\n(just) 14.396 Tj\n-323 TJm\n(described.) 40.6673 Tj\n-1055 TJm\n(Upon) 22.1369 Tj\n-322 TJm\n(return,) 26.2813 Tj\n-341 TJm\n(the) 12.1743 Tj\n-322 TJm\n(internal) 30.4357 Tj\n-323 TJm\n(state) 18.2614 Tj\n-322 TJm\n(will) 15.5018 Tj\n-323 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-322 TJm\n(been) 18.8094 Tj\n-323 TJm\n(allocated) 35.965 Tj\n-322 TJm\n(and) 14.386 Tj\n-323 TJm\n(initialised,) 41.7931 Tj\n-340 TJm\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n459.801 273.674 Td\n/F124_0 9.9626 Tf\n(total_in_lo32) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n537.509 273.674 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 261.718 Td\n/F124_0 9.9626 Tf\n(total_in_hi32) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n149.709 261.718 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n155.006 261.718 Td\n/F124_0 9.9626 Tf\n(total_out_lo32) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n241.435 261.718 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n258.564 261.718 Td\n/F124_0 9.9626 Tf\n(total_out_hi32) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n344.994 261.718 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-275 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-276 TJm\n(been) 18.8094 Tj\n-275 TJm\n(set) 11.0684 Tj\n-275 TJm\n(to) 7.7509 Tj\n-276 TJm\n(zero.) 19.6363 Tj\n-772 TJm\n(These) 23.7907 Tj\n-275 TJm\n(four) 16.5977 Tj\n-275 TJm\n(\\002elds) 21.589 Tj\n-276 TJm\n(are) 12.1643 Tj\n72 249.763 Td\n(used) 18.2614 Tj\n-340 TJm\n(by) 9.9626 Tj\n-339 TJm\n(the) 12.1743 Tj\n-340 TJm\n(library) 26.5603 Tj\n-339 TJm\n(to) 7.7509 Tj\n-340 TJm\n(inform) 27.1182 Tj\n-339 TJm\n(the) 12.1743 Tj\n-340 TJm\n(caller) 22.1269 Tj\n-339 TJm\n(of) 8.2988 Tj\n-340 TJm\n(the) 12.1743 Tj\n-339 TJm\n(total) 17.7135 Tj\n-340 TJm\n(amount) 29.8878 Tj\n-339 TJm\n(of) 8.2988 Tj\n-340 TJm\n(data) 16.5977 Tj\n-340 TJm\n(passed) 26.5603 Tj\n-339 TJm\n(into) 15.5018 Tj\n-340 TJm\n(and) 14.386 Tj\n-339 TJm\n(out) 12.7322 Tj\n-340 TJm\n(of) 8.2988 Tj\n-339 TJm\n(the) 12.1743 Tj\n-340 TJm\n(library) 26.5603 Tj\n65 TJm\n(,) 2.4907 Tj\n-362 TJm\n(respecti) 30.9837 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(ely) 12.1743 Tj\n65 TJm\n(.) 2.4907 Tj\n72 237.808 Td\n(Y) 7.193 Tj\n110 TJm\n(ou) 9.9626 Tj\n-376 TJm\n(should) 26.5703 Tj\n-377 TJm\n(not) 12.7322 Tj\n-376 TJm\n(try) 11.0684 Tj\n-376 TJm\n(to) 7.7509 Tj\n-377 TJm\n(change) 28.2141 Tj\n-376 TJm\n(them.) 22.4159 Tj\n-1378 TJm\n(As) 11.0684 Tj\n-377 TJm\n(of) 8.2988 Tj\n-376 TJm\n(v) 4.9813 Tj\n15 TJm\n(ersion) 24.3486 Tj\n-377 TJm\n(1.0,) 14.9439 Tj\n-408 TJm\n(64-bit) 23.8007 Tj\n-376 TJm\n(counts) 26.0123 Tj\n-376 TJm\n(are) 12.1643 Tj\n-377 TJm\n(maintained,) 46.7644 Tj\n-408 TJm\n(e) 4.4234 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(en) 9.4047 Tj\n-376 TJm\n(on) 9.9626 Tj\n-376 TJm\n(32-bit) 23.8007 Tj\n-377 TJm\n(platforms,) 40.6773 Tj\n72 225.853 Td\n(using) 21.589 Tj\n-371 TJm\n(the) 12.1743 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n113.148 225.853 Td\n/F124_0 9.9626 Tf\n(_hi32) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n146.729 225.853 Td\n/F122_0 9.9626 Tf\n(\\002elds) 21.589 Tj\n-371 TJm\n(to) 7.7509 Tj\n-370 TJm\n(store) 19.3673 Tj\n-371 TJm\n(the) 12.1743 Tj\n-371 TJm\n(upper) 22.6848 Tj\n-370 TJm\n(32) 9.9626 Tj\n-371 TJm\n(bits) 14.396 Tj\n-370 TJm\n(of) 8.2988 Tj\n-371 TJm\n(the) 12.1743 Tj\n-371 TJm\n(count.) 24.6275 Tj\n-1344 TJm\n(So,) 13.0112 Tj\n-400 TJm\n(for) 11.6164 Tj\n-371 TJm\n(e) 4.4234 Tj\n15 TJm\n(xample,) 31.8205 Tj\n-401 TJm\n(the) 12.1743 Tj\n-371 TJm\n(total) 17.7135 Tj\n-370 TJm\n(amount) 29.8878 Tj\n-371 TJm\n(of) 8.2988 Tj\n-370 TJm\n(data) 16.5977 Tj\n-371 TJm\n(in) 7.7509 Tj\n-371 TJm\n(is) 6.6451 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 213.898 Td\n/F124_0 9.9626 Tf\n(\\(total_in_hi32) 83.6858 Tj\n-600 TJm\n(<<) 11.9551 Tj\n-600 TJm\n(32\\)) 17.9327 Tj\n-600 TJm\n(+) 5.9776 Tj\n-600 TJm\n(total_in_lo32) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n293.171 213.898 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 191.98 Td\n(P) 5.5392 Tj\n15 TJm\n(arameter) 34.8492 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n115.367 191.98 Td\n/F124_0 9.9626 Tf\n(blockSize100k) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n196.205 191.98 Td\n/F122_0 9.9626 Tf\n(speci\\002es) 34.3112 Tj\n-314 TJm\n(the) 12.1743 Tj\n-314 TJm\n(block) 22.1369 Tj\n-314 TJm\n(size) 15.4918 Tj\n-314 TJm\n(to) 7.7509 Tj\n-314 TJm\n(be) 9.4047 Tj\n-314 TJm\n(used) 18.2614 Tj\n-314 TJm\n(for) 11.6164 Tj\n-314 TJm\n(compression.) 52.8516 Tj\n-1004 TJm\n(It) 6.0871 Tj\n-314 TJm\n(should) 26.5703 Tj\n-314 TJm\n(be) 9.4047 Tj\n-314 TJm\n(a) 4.4234 Tj\n-315 TJm\n(v) 4.9813 Tj\n25 TJm\n(al) 7.193 Tj\n1 TJm\n(u) 4.9813 Tj\n-1 TJm\n(e) 4.4234 Tj\n-314 TJm\n(between) 33.1954 Tj\n-314 TJm\n(1) 4.9813 Tj\n72 180.025 Td\n(and) 14.386 Tj\n-289 TJm\n(9) 4.9813 Tj\n-289 TJm\n(inclusi) 26.5703 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(e,) 6.914 Tj\n-299 TJm\n(and) 14.386 Tj\n-289 TJm\n(the) 12.1743 Tj\n-289 TJm\n(actual) 23.7907 Tj\n-289 TJm\n(block) 22.1369 Tj\n-289 TJm\n(size) 15.4918 Tj\n-289 TJm\n(used) 18.2614 Tj\n-289 TJm\n(is) 6.6451 Tj\n-289 TJm\n(100000) 29.8878 Tj\n-289 TJm\n(x) 4.9813 Tj\n-289 TJm\n(this) 14.396 Tj\n-289 TJm\n(\\002gure.) 25.7334 Tj\n-854 TJm\n(9) 4.9813 Tj\n-290 TJm\n(gi) 7.7509 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(es) 8.2988 Tj\n-289 TJm\n(the) 12.1743 Tj\n-289 TJm\n(best) 16.0497 Tj\n-289 TJm\n(compression) 50.3609 Tj\n-289 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-289 TJm\n(tak) 12.1743 Tj\n10 TJm\n(es) 8.2988 Tj\n-289 TJm\n(most) 19.3773 Tj\n72 168.07 Td\n(memory) 33.2053 Tj\n65 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 146.152 Td\n(P) 5.5392 Tj\n15 TJm\n(arameter) 34.8492 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n115.095 146.152 Td\n/F124_0 9.9626 Tf\n(verbosity) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n171.75 146.152 Td\n/F122_0 9.9626 Tf\n(should) 26.5703 Tj\n-287 TJm\n(be) 9.4047 Tj\n-286 TJm\n(set) 11.0684 Tj\n-287 TJm\n(to) 7.7509 Tj\n-287 TJm\n(a) 4.4234 Tj\n-287 TJm\n(number) 30.4357 Tj\n-286 TJm\n(between) 33.1954 Tj\n-287 TJm\n(0) 4.9813 Tj\n-287 TJm\n(and) 14.386 Tj\n-287 TJm\n(4) 4.9813 Tj\n-286 TJm\n(inclusi) 26.5703 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(e.) 6.914 Tj\n-841 TJm\n(0) 4.9813 Tj\n-286 TJm\n(is) 6.6451 Tj\n-287 TJm\n(silent,) 24.0796 Tj\n-296 TJm\n(and) 14.386 Tj\n-287 TJm\n(greater) 27.6562 Tj\n-287 TJm\n(numbers) 34.3112 Tj\n-286 TJm\n(gi) 7.7509 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n72 134.197 Td\n(increasingly) 48.6972 Tj\n-342 TJm\n(v) 4.9813 Tj\n15 TJm\n(erbose) 26.0024 Tj\n-342 TJm\n(monitoring/deb) 61.4394 Tj\n20 TJm\n(ugging) 27.6761 Tj\n-342 TJm\n(output.) 27.9551 Tj\n-1173 TJm\n(If) 6.6351 Tj\n-343 TJm\n(the) 12.1743 Tj\n-342 TJm\n(library) 26.5603 Tj\n-342 TJm\n(has) 13.2801 Tj\n-342 TJm\n(been) 18.8094 Tj\n-342 TJm\n(compiled) 37.0808 Tj\n-342 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n446.429 134.197 Td\n/F124_0 9.9626 Tf\n(-DBZ_NO_STDIO) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n524.138 134.197 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-342 TJm\n(no) 9.9626 Tj\n72 122.241 Td\n(such) 18.2614 Tj\n-250 TJm\n(output) 25.4644 Tj\n-250 TJm\n(will) 15.5018 Tj\n-250 TJm\n(appear) 26.5503 Tj\n-250 TJm\n(for) 11.6164 Tj\n-250 TJm\n(an) 9.4047 Tj\n15 TJm\n(y) 4.9813 Tj\n-250 TJm\n(v) 4.9813 Tj\n15 TJm\n(erbosity) 32.0995 Tj\n-250 TJm\n(setting.) 29.0609 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 100.324 Td\n(P) 5.5392 Tj\n15 TJm\n(arameter) 34.8492 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n116.619 100.324 Td\n/F124_0 9.9626 Tf\n(workFactor) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n180.775 100.324 Td\n/F122_0 9.9626 Tf\n(controls) 32.0995 Tj\n-440 TJm\n(ho) 9.9626 Tj\n25 TJm\n(w) 7.193 Tj\n-439 TJm\n(the) 12.1743 Tj\n-440 TJm\n(compression) 50.3609 Tj\n-439 TJm\n(phase) 22.6848 Tj\n-440 TJm\n(beha) 18.8094 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(es) 8.2988 Tj\n-440 TJm\n(when) 21.579 Tj\n-439 TJm\n(presented) 38.1767 Tj\n-440 TJm\n(with) 17.7135 Tj\n-440 TJm\n(w) 7.193 Tj\n10 TJm\n(orst) 14.9439 Tj\n-439 TJm\n(case,) 19.6363 Tj\n-487 TJm\n(highly) 25.4644 Tj\n72 88.368 Td\n(repetiti) 28.224 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(e,) 6.914 Tj\n-433 TJm\n(input) 20.4831 Tj\n-396 TJm\n(data.) 19.0883 Tj\n-1496 TJm\n(If) 6.6351 Tj\n-396 TJm\n(compression) 50.3609 Tj\n-396 TJm\n(runs) 17.1556 Tj\n-397 TJm\n(i) 2.7696 Tj\n1 TJm\n(nto) 12.7322 Tj\n-397 TJm\n(dif) 11.0684 Tj\n25 TJm\n(\\002culties) 31.5516 Tj\n-396 TJm\n(caused) 27.1082 Tj\n-396 TJm\n(by) 9.9626 Tj\n-396 TJm\n(repetiti) 28.224 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-396 TJm\n(data,) 19.0883 Tj\n-432 TJm\n(the) 12.1743 Tj\n-397 TJm\n(library) 26.5603 Tj\n-396 TJm\n(switches) 34.3112 Tj\n-396 TJm\n(from) 19.3673 Tj\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 50.852 Td\n(12) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 13 16\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n419.067 749.245 Td\n/F122_0 9.9626 Tf\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n496.556 749.245 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n72 710.037 Td\n/F122_0 9.9626 Tf\n(the) 12.1743 Tj\n-255 TJm\n(standard) 33.7533 Tj\n-254 TJm\n(sorting) 27.6761 Tj\n-255 TJm\n(algorithm) 38.7446 Tj\n-254 TJm\n(to) 7.7509 Tj\n-255 TJm\n(a) 4.4234 Tj\n-255 TJm\n(f) 3.3175 Tj\n10 TJm\n(allback) 28.772 Tj\n-254 TJm\n(algorithm.) 41.2352 Tj\n-648 TJm\n(The) 15.4918 Tj\n-255 TJm\n(f) 3.3175 Tj\n10 TJm\n(allback) 28.772 Tj\n-254 TJm\n(is) 6.6451 Tj\n-255 TJm\n(slo) 11.6264 Tj\n25 TJm\n(wer) 14.9339 Tj\n-255 TJm\n(than) 17.1556 Tj\n-254 TJm\n(the) 12.1743 Tj\n-255 TJm\n(standard) 33.7533 Tj\n-254 TJm\n(algorithm) 38.7446 Tj\n-255 TJm\n(by) 9.9626 Tj\n-255 TJm\n(perhaps) 30.9837 Tj\n72 698.082 Td\n(a) 4.4234 Tj\n-250 TJm\n(f) 3.3175 Tj\n10 TJm\n(actor) 19.9152 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(three,) 22.4059 Tj\n-250 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-250 TJm\n(al) 7.193 Tj\n10 TJm\n(w) 7.193 Tj\n10 TJm\n(ays) 13.2801 Tj\n-250 TJm\n(beha) 18.8094 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(es) 8.2988 Tj\n-250 TJm\n(reasonably) 43.158 Tj\n65 TJm\n(,) 2.4907 Tj\n-250 TJm\n(no) 9.9626 Tj\n-250 TJm\n(matter) 25.4544 Tj\n-250 TJm\n(ho) 9.9626 Tj\n25 TJm\n(w) 7.193 Tj\n-250 TJm\n(bad) 14.386 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(input.) 22.9738 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 676.268 Td\n(Lo) 11.0684 Tj\n25 TJm\n(wer) 14.9339 Tj\n-240 TJm\n(v) 4.9813 Tj\n25 TJm\n(alues) 20.4731 Tj\n-239 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n138.421 676.268 Td\n/F124_0 9.9626 Tf\n(workFactor) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n200.585 676.268 Td\n/F122_0 9.9626 Tf\n(reduce) 26.5503 Tj\n-240 TJm\n(the) 12.1743 Tj\n-239 TJm\n(amount) 29.8878 Tj\n-240 TJm\n(of) 8.2988 Tj\n-240 TJm\n(ef) 7.7409 Tj\n25 TJm\n(fort) 14.386 Tj\n-239 TJm\n(the) 12.1743 Tj\n-240 TJm\n(standard) 33.7533 Tj\n-240 TJm\n(algorithm) 38.7446 Tj\n-240 TJm\n(wi) 9.9626 Tj\n1 TJm\n(ll) 5.5392 Tj\n-240 TJm\n(e) 4.4234 Tj\n15 TJm\n(xpend) 24.3486 Tj\n-240 TJm\n(before) 25.4445 Tj\n-240 TJm\n(resorting) 35.417 Tj\n-239 TJm\n(to) 7.7509 Tj\n-240 TJm\n(the) 12.1743 Tj\n72 664.313 Td\n(f) 3.3175 Tj\n10 TJm\n(allback.) 31.2626 Tj\n-618 TJm\n(Y) 7.193 Tj\n110 TJm\n(ou) 9.9626 Tj\n-248 TJm\n(should) 26.5703 Tj\n-247 TJm\n(set) 11.0684 Tj\n-248 TJm\n(this) 14.396 Tj\n-247 TJm\n(parameter) 39.8305 Tj\n-248 TJm\n(carefully;) 38.1767 Tj\n-248 TJm\n(too) 12.7322 Tj\n-248 TJm\n(lo) 7.7509 Tj\n25 TJm\n(w) 7.193 Tj\n65 TJm\n(,) 2.4907 Tj\n-248 TJm\n(and) 14.386 Tj\n-247 TJm\n(man) 17.1556 Tj\n15 TJm\n(y) 4.9813 Tj\n-248 TJm\n(inputs) 24.3586 Tj\n-248 TJm\n(will) 15.5018 Tj\n-247 TJm\n(be) 9.4047 Tj\n-248 TJm\n(handled) 31.5416 Tj\n-247 TJm\n(by) 9.9626 Tj\n-248 TJm\n(the) 12.1743 Tj\n-247 TJm\n(f) 3.3175 Tj\n10 TJm\n(allback) 28.772 Tj\n-248 TJm\n(algorithm) 38.7446 Tj\n72 652.358 Td\n(and) 14.386 Tj\n-308 TJm\n(so) 8.8568 Tj\n-308 TJm\n(compress) 37.6287 Tj\n-308 TJm\n(rather) 23.2328 Tj\n-309 TJm\n(slo) 11.6264 Tj\n25 TJm\n(wly) 14.9439 Tj\n65 TJm\n(,) 2.4907 Tj\n-322 TJm\n(too) 12.7322 Tj\n-309 TJm\n(high,) 20.2042 Tj\n-322 TJm\n(and) 14.386 Tj\n-308 TJm\n(your) 18.2614 Tj\n-309 TJm\n(a) 4.4234 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(erage-to-w) 43.148 Tj\n10 TJm\n(orst) 14.9439 Tj\n-308 TJm\n(case) 17.1456 Tj\n-308 TJm\n(compression) 50.3609 Tj\n-308 TJm\n(times) 21.589 Tj\n-308 TJm\n(can) 13.8281 Tj\n-308 TJm\n(become) 30.9837 Tj\n-309 TJm\n(v) 4.9813 Tj\n15 TJm\n(ery) 12.7222 Tj\n-308 TJm\n(lar) 10.5105 Tj\n18 TJm\n(ge.) 11.8953 Tj\n72 640.402 Td\n(The) 15.4918 Tj\n-250 TJm\n(def) 12.7222 Tj\n10 TJm\n(ault) 14.9439 Tj\n-250 TJm\n(v) 4.9813 Tj\n25 TJm\n(alue) 16.5977 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(30) 9.9626 Tj\n-250 TJm\n(gi) 7.7509 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(es) 8.2988 Tj\n-250 TJm\n(reasonable) 42.6001 Tj\n-250 TJm\n(beha) 18.8094 Tj\n20 TJm\n(viour) 21.031 Tj\n-250 TJm\n(o) 4.9813 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(er) 7.7409 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(wide) 19.3673 Tj\n-250 TJm\n(range) 22.1269 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(circumstances.) 58.9288 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 618.588 Td\n(Allo) 17.7135 Tj\n25 TJm\n(w) 7.193 Tj\n10 TJm\n(able) 16.5977 Tj\n-250 TJm\n(v) 4.9813 Tj\n25 TJm\n(alues) 20.4731 Tj\n-250 TJm\n(range) 22.1269 Tj\n-250 TJm\n(from) 19.3673 Tj\n-250 TJm\n(0) 4.9813 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(250) 14.9439 Tj\n-250 TJm\n(inclusi) 26.5703 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(e.) 6.914 Tj\n-620 TJm\n(0) 4.9813 Tj\n-250 TJm\n(is) 6.6451 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(special) 27.6661 Tj\n-250 TJm\n(case,) 19.6363 Tj\n-250 TJm\n(equi) 17.1556 Tj\n25 TJm\n(v) 4.9813 Tj\n25 TJm\n(alent) 19.3673 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(using) 21.589 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(def) 12.7222 Tj\n10 TJm\n(ault) 14.9439 Tj\n-250 TJm\n(v) 4.9813 Tj\n25 TJm\n(alue) 16.5977 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(30.) 12.4533 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 596.774 Td\n(Note) 19.3673 Tj\n-250 TJm\n(that) 14.9439 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(compressed) 47.0334 Tj\n-250 TJm\n(output) 25.4644 Tj\n-250 TJm\n(generated) 38.7246 Tj\n-250 TJm\n(is) 6.6451 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(same) 20.4731 Tj\n-250 TJm\n(re) 7.7409 Tj\n15 TJm\n(g) 4.9813 Tj\n5 TJm\n(ardless) 27.6661 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(whether) 32.0895 Tj\n-250 TJm\n(or) 8.2988 Tj\n-250 TJm\n(not) 12.7322 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(f) 3.3175 Tj\n10 TJm\n(allback) 28.772 Tj\n-250 TJm\n(algorithm) 38.7446 Tj\n-250 TJm\n(is) 6.6451 Tj\n-250 TJm\n(used.) 20.7521 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 574.96 Td\n(Be) 11.0684 Tj\n-303 TJm\n(a) 4.4234 Tj\n15 TJm\n(w) 7.193 Tj\n10 TJm\n(are) 12.1643 Tj\n-303 TJm\n(also) 16.0497 Tj\n-303 TJm\n(that) 14.9439 Tj\n-303 TJm\n(this) 14.396 Tj\n-304 TJm\n(parameter) 39.8305 Tj\n-303 TJm\n(may) 17.1556 Tj\n-303 TJm\n(disappear) 38.1767 Tj\n-303 TJm\n(entirely) 30.4357 Tj\n-303 TJm\n(in) 7.7509 Tj\n-303 TJm\n(future) 23.7907 Tj\n-303 TJm\n(v) 4.9813 Tj\n15 TJm\n(ersions) 28.224 Tj\n-303 TJm\n(of) 8.2988 Tj\n-303 TJm\n(the) 12.1743 Tj\n-304 TJm\n(library) 26.5603 Tj\n65 TJm\n(.) 2.4907 Tj\n-938 TJm\n(In) 8.2988 Tj\n-303 TJm\n(principle) 35.417 Tj\n-303 TJm\n(it) 5.5392 Tj\n-304 TJm\n(should) 26.5703 Tj\n-303 TJm\n(be) 9.4047 Tj\n72 563.005 Td\n(possible) 32.6574 Tj\n-270 TJm\n(to) 7.7509 Tj\n-270 TJm\n(de) 9.4047 Tj\n25 TJm\n(vise) 16.0497 Tj\n-270 TJm\n(a) 4.4234 Tj\n-270 TJm\n(good) 19.9252 Tj\n-270 TJm\n(w) 7.193 Tj\n10 TJm\n(ay) 9.4047 Tj\n-270 TJm\n(to) 7.7509 Tj\n-271 TJm\n(automat) 32.0995 Tj\n1 TJm\n(ically) 22.1369 Tj\n-271 TJm\n(choose) 27.6661 Tj\n-270 TJm\n(which) 24.3486 Tj\n-270 TJm\n(algorithm) 38.7446 Tj\n-270 TJm\n(to) 7.7509 Tj\n-270 TJm\n(use.) 15.7708 Tj\n-740 TJm\n(Such) 19.9252 Tj\n-270 TJm\n(a) 4.4234 Tj\n-270 TJm\n(mechanism) 45.3796 Tj\n-271 TJm\n(w) 7.193 Tj\n10 TJm\n(ould) 17.7135 Tj\n-270 TJm\n(render) 25.4445 Tj\n-270 TJm\n(the) 12.1743 Tj\n72 551.049 Td\n(parameter) 39.8305 Tj\n-250 TJm\n(obsolete.) 35.696 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 529.235 Td\n(Possible) 33.2153 Tj\n-250 TJm\n(return) 23.7907 Tj\n-250 TJm\n(v) 4.9813 Tj\n25 TJm\n(alues:) 23.2427 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 384.677] cm\n0 0 468 143.462 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 519.771 Td\n/F124_0 9.9626 Tf\n(BZ_CONFIG_ERROR) 89.6634 Tj\n98.488 507.816 Td\n(if) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(library) 41.8429 Tj\n-426 TJm\n(has) 17.9327 Tj\n-426 TJm\n(been) 23.9102 Tj\n-426 TJm\n(mis-compiled) 71.7307 Tj\n90 495.86 Td\n(BZ_PARAM_ERROR) 83.6858 Tj\n98.488 483.905 Td\n(if) 11.9551 Tj\n-426 TJm\n(strm) 23.9102 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(NULL) 23.9102 Tj\n98.488 471.95 Td\n(or) 11.9551 Tj\n-426 TJm\n(blockSize) 53.798 Tj\n-426 TJm\n(<) 5.9776 Tj\n-426 TJm\n(1) 5.9776 Tj\n-426 TJm\n(or) 11.9551 Tj\n-426 TJm\n(blockSize) 53.798 Tj\n-426 TJm\n(>) 5.9776 Tj\n-426 TJm\n(9) 5.9776 Tj\n98.488 459.995 Td\n(or) 11.9551 Tj\n-426 TJm\n(verbosity) 53.798 Tj\n-426 TJm\n(<) 5.9776 Tj\n-426 TJm\n(0) 5.9776 Tj\n-426 TJm\n(or) 11.9551 Tj\n-426 TJm\n(verbosity) 53.798 Tj\n-426 TJm\n(>) 5.9776 Tj\n-426 TJm\n(4) 5.9776 Tj\n98.488 448.04 Td\n(or) 11.9551 Tj\n-426 TJm\n(workFactor) 59.7756 Tj\n-426 TJm\n(<) 5.9776 Tj\n-426 TJm\n(0) 5.9776 Tj\n-426 TJm\n(or) 11.9551 Tj\n-426 TJm\n(workFactor) 59.7756 Tj\n-426 TJm\n(>) 5.9776 Tj\n-426 TJm\n(250) 17.9327 Tj\n90 436.085 Td\n(BZ_MEM_ERROR) 71.7307 Tj\n98.488 424.129 Td\n(if) 11.9551 Tj\n-426 TJm\n(not) 17.9327 Tj\n-426 TJm\n(enough) 35.8654 Tj\n-426 TJm\n(memory) 35.8654 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(available) 53.798 Tj\n90 412.174 Td\n(BZ_OK) 29.8878 Tj\n98.488 400.219 Td\n(otherwise) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 362.863 Td\n/F122_0 9.9626 Tf\n(Allo) 17.7135 Tj\n25 TJm\n(w) 7.193 Tj\n10 TJm\n(able) 16.5977 Tj\n-250 TJm\n(ne) 9.4047 Tj\n15 TJm\n(xt) 7.7509 Tj\n-250 TJm\n(actions:) 30.9936 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 313.947] cm\n0 0 468 47.821 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 353.399 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n98.488 341.444 Td\n(if) 11.9551 Tj\n-426 TJm\n(BZ_OK) 29.8878 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(returned) 47.8205 Tj\n98.488 329.488 Td\n(no) 11.9551 Tj\n-426 TJm\n(specific) 47.8205 Tj\n-426 TJm\n(action) 35.8654 Tj\n-426 TJm\n(needed) 35.8654 Tj\n-426 TJm\n(in) 11.9551 Tj\n-426 TJm\n(case) 23.9102 Tj\n-426 TJm\n(of) 11.9551 Tj\n-426 TJm\n(error) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 283.429 Td\n/F116_0 17.2154 Tf\n(3.3.2.) 43.0729 Tj\n-278 TJm\n(BZ2_bzCompress) 145.4013 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 254.959] cm\n0 0 468 23.91 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 270.501 Td\n/F124_0 9.9626 Tf\n(int) 17.9327 Tj\n-426 TJm\n(BZ2_bzCompress) 83.6858 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(bz_stream) 53.798 Tj\n268.371 268.757 Td\n(*) 5.9776 Tj\n274.348 270.501 Td\n(strm,) 29.8878 Tj\n-426 TJm\n(int) 17.9327 Tj\n-426 TJm\n(action) 35.8654 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 233.145 Td\n/F122_0 9.9626 Tf\n(Pro) 13.8381 Tj\n15 TJm\n(vides) 21.031 Tj\n-222 TJm\n(more) 20.4731 Tj\n-221 TJm\n(input) 20.4831 Tj\n-222 TJm\n(and/or) 25.4544 Tj\n-222 TJm\n(output) 25.4644 Tj\n-222 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n-221 TJm\n(space) 22.1269 Tj\n-222 TJm\n(for) 11.6164 Tj\n-222 TJm\n(the) 12.1743 Tj\n-221 TJm\n(library) 26.5603 Tj\n65 TJm\n(.) 2.4907 Tj\n-601 TJm\n(The) 15.4918 Tj\n-222 TJm\n(caller) 22.1269 Tj\n-222 TJm\n(maintains) 38.7446 Tj\n-222 TJm\n(input) 20.4831 Tj\n-221 TJm\n(and) 14.386 Tj\n-222 TJm\n(output) 25.4644 Tj\n-222 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fers,) 17.4246 Tj\n-227 TJm\n(and) 14.386 Tj\n-222 TJm\n(calls) 18.2614 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 221.19 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n158.177 221.19 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-250 TJm\n(transfer) 30.4258 Tj\n-250 TJm\n(data) 16.5977 Tj\n-250 TJm\n(between) 33.1954 Tj\n-250 TJm\n(them.) 22.4159 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 199.375 Td\n(Before) 27.1082 Tj\n-212 TJm\n(each) 18.2515 Tj\n-213 TJm\n(call) 14.386 Tj\n-212 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n147.961 199.375 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n231.647 199.375 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n236.329 199.375 Td\n/F124_0 9.9626 Tf\n(next_in) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n280.288 199.375 Td\n/F122_0 9.9626 Tf\n(should) 26.5703 Tj\n-212 TJm\n(point) 20.4831 Tj\n-213 TJm\n(at) 7.193 Tj\n-212 TJm\n(the) 12.1743 Tj\n-213 TJm\n(data) 16.5977 Tj\n-212 TJm\n(to) 7.7509 Tj\n-213 TJm\n(be) 9.4047 Tj\n-212 TJm\n(compressed,) 49.5241 Tj\n-220 TJm\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n463.493 199.375 Td\n/F124_0 9.9626 Tf\n(avail_in) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n513.43 199.375 Td\n/F122_0 9.9626 Tf\n(should) 26.5703 Tj\n72 187.42 Td\n(indicate) 31.5416 Tj\n-246 TJm\n(ho) 9.9626 Tj\n25 TJm\n(w) 7.193 Tj\n-247 TJm\n(m) 7.7509 Tj\n1 TJm\n(an) 9.4047 Tj\n14 TJm\n(y) 4.9813 Tj\n-246 TJm\n(bytes) 21.031 Tj\n-246 TJm\n(the) 12.1743 Tj\n-246 TJm\n(library) 26.5603 Tj\n-247 TJm\n(may) 17.1556 Tj\n-246 TJm\n(read.) 19.6363 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n259.242 187.42 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n345.382 187.42 Td\n/F122_0 9.9626 Tf\n(updates) 30.4357 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n378.271 187.42 Td\n/F124_0 9.9626 Tf\n(next_in) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n420.114 187.42 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n425.066 187.42 Td\n/F124_0 9.9626 Tf\n(avail_in) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n475.34 187.42 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n492.179 187.42 Td\n/F124_0 9.9626 Tf\n(total_in) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 175.465 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-250 TJm\n(re\\003ect) 24.8965 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(number) 30.4357 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(bytes) 21.031 Tj\n-250 TJm\n(it) 5.5392 Tj\n-250 TJm\n(has) 13.2801 Tj\n-250 TJm\n(read.) 19.6363 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 153.651 Td\n(Similarly) 37.0908 Tj\n65 TJm\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n113.611 153.651 Td\n/F124_0 9.9626 Tf\n(next_out) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n164.072 153.651 Td\n/F122_0 9.9626 Tf\n(should) 26.5703 Tj\n-265 TJm\n(point) 20.4831 Tj\n-265 TJm\n(to) 7.7509 Tj\n-265 TJm\n(a) 4.4234 Tj\n-265 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n-265 TJm\n(in) 7.7509 Tj\n-265 TJm\n(which) 24.3486 Tj\n-265 TJm\n(the) 12.1743 Tj\n-265 TJm\n(compressed) 47.0334 Tj\n-265 TJm\n(data) 16.5977 Tj\n-265 TJm\n(is) 6.6451 Tj\n-265 TJm\n(to) 7.7509 Tj\n-265 TJm\n(be) 9.4047 Tj\n-265 TJm\n(placed,) 28.493 Tj\n-269 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n464.742 153.651 Td\n/F124_0 9.9626 Tf\n(avail_out) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n521.181 153.651 Td\n/F122_0 9.9626 Tf\n(indi-) 18.8194 Tj\n72 141.696 Td\n(cating) 24.3486 Tj\n-209 TJm\n(ho) 9.9626 Tj\n25 TJm\n(w) 7.193 Tj\n-209 TJm\n(much) 22.1369 Tj\n-209 TJm\n(output) 25.4644 Tj\n-209 TJm\n(space) 22.1269 Tj\n-209 TJm\n(is) 6.6451 Tj\n-210 TJm\n(a) 4.4234 Tj\n20 TJm\n(v) 4.9813 Tj\n25 TJm\n(ailable.) 29.0509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n243.087 141.696 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n328.856 141.696 Td\n/F122_0 9.9626 Tf\n(updates) 30.4357 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n361.375 141.696 Td\n/F124_0 9.9626 Tf\n(next_out) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n409.196 141.696 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n413.851 141.696 Td\n/F124_0 9.9626 Tf\n(avail_out) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n469.732 141.696 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n486.202 141.696 Td\n/F124_0 9.9626 Tf\n(total_out) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 129.74 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-250 TJm\n(re\\003ect) 24.8965 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(number) 30.4357 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(bytes) 21.031 Tj\n-250 TJm\n(output.) 27.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 107.926 Td\n(Y) 7.193 Tj\n110 TJm\n(ou) 9.9626 Tj\n-272 TJm\n(may) 17.1556 Tj\n-272 TJm\n(pro) 13.2801 Tj\n15 TJm\n(vide) 17.1556 Tj\n-272 TJm\n(and) 14.386 Tj\n-272 TJm\n(remo) 20.4731 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-272 TJm\n(as) 8.2988 Tj\n-272 TJm\n(little) 18.2714 Tj\n-272 TJm\n(or) 8.2988 Tj\n-272 TJm\n(as) 8.2988 Tj\n-272 TJm\n(much) 22.1369 Tj\n-271 TJm\n(data) 16.5977 Tj\n-272 TJm\n(as) 8.2988 Tj\n-272 TJm\n(you) 14.9439 Tj\n-272 TJm\n(lik) 10.5205 Tj\n10 TJm\n(e) 4.4234 Tj\n-272 TJm\n(on) 9.9626 Tj\n-272 TJm\n(each) 18.2515 Tj\n-272 TJm\n(call) 14.386 Tj\n-272 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n399.123 107.926 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n482.809 107.926 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-752 TJm\n(In) 8.2988 Tj\n-272 TJm\n(the) 12.1743 Tj\n-272 TJm\n(limit,) 21.32 Tj\n72 95.971 Td\n(it) 5.5392 Tj\n-266 TJm\n(is) 6.6451 Tj\n-265 TJm\n(acceptable) 42.0422 Tj\n-266 TJm\n(to) 7.7509 Tj\n-266 TJm\n(supply) 26.5703 Tj\n-266 TJm\n(and) 14.386 Tj\n-265 TJm\n(remo) 20.4731 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-266 TJm\n(data) 16.5977 Tj\n-266 TJm\n(one) 14.386 Tj\n-265 TJm\n(byte) 17.1556 Tj\n-266 TJm\n(at) 7.193 Tj\n-266 TJm\n(a) 4.4234 Tj\n-266 TJm\n(time,) 20.2042 Tj\n-269 TJm\n(although) 34.8691 Tj\n-266 TJm\n(this) 14.396 Tj\n-266 TJm\n(w) 7.193 Tj\n10 TJm\n(ould) 17.7135 Tj\n-265 TJm\n(be) 9.4047 Tj\n-266 TJm\n(terribly) 29.3299 Tj\n-266 TJm\n(inef) 15.4918 Tj\n25 TJm\n(\\002cient.) 27.3972 Tj\n-714 TJm\n(Y) 7.193 Tj\n110 TJm\n(ou) 9.9626 Tj\n-266 TJm\n(should) 26.5703 Tj\n72 84.016 Td\n(al) 7.193 Tj\n10 TJm\n(w) 7.193 Tj\n10 TJm\n(ays) 13.2801 Tj\n-250 TJm\n(ensure) 26.0024 Tj\n-250 TJm\n(that) 14.9439 Tj\n-250 TJm\n(at) 7.193 Tj\n-250 TJm\n(least) 18.2614 Tj\n-250 TJm\n(one) 14.386 Tj\n-250 TJm\n(byte) 17.1556 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(output) 25.4644 Tj\n-250 TJm\n(space) 22.1269 Tj\n-250 TJm\n(is) 6.6451 Tj\n-250 TJm\n(a) 4.4234 Tj\n20 TJm\n(v) 4.9813 Tj\n25 TJm\n(ailable) 26.5603 Tj\n-250 TJm\n(at) 7.193 Tj\n-250 TJm\n(each) 18.2515 Tj\n-250 TJm\n(call.) 16.8766 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 50.951 Td\n(13) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 14 17\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n419.067 749.245 Td\n/F122_0 9.9626 Tf\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n496.556 749.245 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n72 710.037 Td\n/F122_0 9.9626 Tf\n(A) 7.193 Tj\n-250 TJm\n(second) 27.6661 Tj\n-250 TJm\n(purpose) 31.5416 Tj\n-250 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n156.662 710.037 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n242.839 710.037 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(request) 28.772 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(change) 28.2141 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(mode) 22.1369 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(compressed) 47.0334 Tj\n-250 TJm\n(stream.) 29.0509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 688.12 Td\n(Conceptually) 53.1305 Tj\n65 TJm\n(,) 2.4907 Tj\n-217 TJm\n(a) 4.4234 Tj\n-210 TJm\n(compressed) 47.0334 Tj\n-209 TJm\n(stream) 26.5603 Tj\n-209 TJm\n(can) 13.8281 Tj\n-209 TJm\n(be) 9.4047 Tj\n-210 TJm\n(in) 7.7509 Tj\n-209 TJm\n(one) 14.386 Tj\n-209 TJm\n(of) 8.2988 Tj\n-209 TJm\n(four) 16.5977 Tj\n-210 TJm\n(states:) 24.9065 Tj\n-289 TJm\n(IDLE,) 25.1755 Tj\n-209 TJm\n(R) 6.6451 Tj\n40 TJm\n(UNNING,) 41.7732 Tj\n-210 TJm\n(FLUSHING) 49.2551 Tj\n-209 TJm\n(and) 14.386 Tj\n-209 TJm\n(FINISHING.) 52.2937 Tj\n-419 TJm\n(Be-) 14.386 Tj\n72 676.164 Td\n(fore) 16.0398 Tj\n-264 TJm\n(initialisation) 49.823 Tj\n-263 TJm\n(\\() 3.3175 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n146.434 676.164 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompressInit) 107.5961 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n254.031 676.164 Td\n/F122_0 9.9626 Tf\n(\\)) 3.3175 Tj\n-264 TJm\n(and) 14.386 Tj\n-263 TJm\n(after) 18.2515 Tj\n-264 TJm\n(termination) 45.9375 Tj\n-264 TJm\n(\\() 3.3175 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n349.75 676.164 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompressEnd) 101.6185 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n451.369 676.164 Td\n/F122_0 9.9626 Tf\n(\\),) 5.8082 Tj\n-267 TJm\n(a) 4.4234 Tj\n-264 TJm\n(stream) 26.5603 Tj\n-264 TJm\n(is) 6.6451 Tj\n-263 TJm\n(re) 7.7409 Tj\n15 TJm\n(g) 4.9813 Tj\n5 TJm\n(arded) 22.1269 Tj\n72 664.209 Td\n(as) 8.2988 Tj\n-250 TJm\n(IDLE.) 25.1755 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 642.291 Td\n(Upon) 22.1369 Tj\n-389 TJm\n(initialisation) 49.823 Tj\n-390 TJm\n(\\() 3.3175 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n155.036 642.291 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompressInit) 107.5961 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n262.632 642.291 Td\n/F122_0 9.9626 Tf\n(\\),) 5.8082 Tj\n-424 TJm\n(the) 12.1743 Tj\n-390 TJm\n(stream) 26.5603 Tj\n-389 TJm\n(is) 6.6451 Tj\n-390 TJm\n(placed) 26.0024 Tj\n-389 TJm\n(in) 7.7509 Tj\n-389 TJm\n(the) 12.1743 Tj\n-390 TJm\n(R) 6.6451 Tj\n40 TJm\n(UNNING) 39.2825 Tj\n-389 TJm\n(state.) 20.7521 Tj\n-1457 TJm\n(Subsequent) 45.9375 Tj\n-389 TJm\n(calls) 18.2614 Tj\n72 630.336 Td\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n83.818 630.336 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n171.571 630.336 Td\n/F122_0 9.9626 Tf\n(should) 26.5703 Tj\n-408 TJm\n(pass) 17.1556 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n223.431 630.336 Td\n/F124_0 9.9626 Tf\n(BZ_RUN) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n263.362 630.336 Td\n/F122_0 9.9626 Tf\n(as) 8.2988 Tj\n-408 TJm\n(the) 12.1743 Tj\n-409 TJm\n(request) 28.772 Tj\n1 TJm\n(ed) 9.4047 Tj\n-409 TJm\n(action;) 27.1182 Tj\n-487 TJm\n(other) 20.4731 Tj\n-408 TJm\n(actions) 28.224 Tj\n-409 TJm\n(are) 12.1643 Tj\n-408 TJm\n(ille) 12.7322 Tj\n15 TJm\n(g) 4.9813 Tj\n5 TJm\n(al) 7.193 Tj\n-408 TJm\n(and) 14.386 Tj\n-408 TJm\n(will) 15.5018 Tj\n-408 TJm\n(result) 22.1369 Tj\n-409 TJm\n(in) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 618.381 Td\n/F124_0 9.9626 Tf\n(BZ_SEQUENCE_ERROR) 101.6185 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n173.619 618.381 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 596.463 Td\n(At) 9.9626 Tj\n-279 TJm\n(some) 21.031 Tj\n-279 TJm\n(point,) 22.9738 Tj\n-286 TJm\n(the) 12.1743 Tj\n-279 TJm\n(calling) 27.1182 Tj\n-279 TJm\n(program) 33.7533 Tj\n-279 TJm\n(will) 15.5018 Tj\n-279 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-278 TJm\n(pro) 13.2801 Tj\n14 TJm\n(vi) 7.7509 Tj\n1 TJm\n(ded) 14.386 Tj\n-279 TJm\n(all) 9.9626 Tj\n-279 TJm\n(the) 12.1743 Tj\n-279 TJm\n(input) 20.4831 Tj\n-279 TJm\n(data) 16.5977 Tj\n-279 TJm\n(it) 5.5392 Tj\n-279 TJm\n(w) 7.193 Tj\n10 TJm\n(ants) 16.0497 Tj\n-279 TJm\n(to.) 10.2416 Tj\n-793 TJm\n(It) 6.0871 Tj\n-279 TJm\n(will) 15.5018 Tj\n-279 TJm\n(then) 17.1556 Tj\n-279 TJm\n(w) 7.193 Tj\n10 TJm\n(ant) 12.1743 Tj\n-279 TJm\n(to) 7.7509 Tj\n-279 TJm\n(\\002nish) 22.1469 Tj\n-279 TJm\n(up) 9.9626 Tj\n-279 TJm\n(--) 6.6351 Tj\n72 584.508 Td\n(in) 7.7509 Tj\n-287 TJm\n(ef) 7.7409 Tj\n25 TJm\n(fect,) 17.4246 Tj\n-297 TJm\n(asking) 26.0123 Tj\n-288 TJm\n(the) 12.1743 Tj\n-287 TJm\n(library) 26.5603 Tj\n-287 TJm\n(to) 7.7509 Tj\n-288 TJm\n(process) 29.8778 Tj\n-287 TJm\n(an) 9.4047 Tj\n15 TJm\n(y) 4.9813 Tj\n-288 TJm\n(data) 16.5977 Tj\n-287 TJm\n(it) 5.5392 Tj\n-287 TJm\n(might) 23.2527 Tj\n-288 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-287 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fered) 20.4632 Tj\n-288 TJm\n(internally) 38.1866 Tj\n65 TJm\n(.) 2.4907 Tj\n-844 TJm\n(In) 8.2988 Tj\n-288 TJm\n(this) 14.396 Tj\n-287 TJm\n(state,) 20.7521 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n456.314 584.508 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 572.553 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-258 TJm\n(no) 9.9626 Tj\n-257 TJm\n(longer) 25.4544 Tj\n-258 TJm\n(attempt) 29.8878 Tj\n-258 TJm\n(to) 7.7509 Tj\n-258 TJm\n(read) 17.1456 Tj\n-257 TJm\n(data) 16.5977 Tj\n-258 TJm\n(from) 19.3673 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n234.208 572.553 Td\n/F124_0 9.9626 Tf\n(next_in) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n276.051 572.553 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-260 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-257 TJm\n(it) 5.5392 Tj\n-258 TJm\n(will) 15.5018 Tj\n-258 TJm\n(w) 7.193 Tj\n10 TJm\n(ant) 12.1743 Tj\n-257 TJm\n(to) 7.7509 Tj\n-258 TJm\n(write) 20.4731 Tj\n-258 TJm\n(data) 16.5977 Tj\n-258 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n407.082 572.553 Td\n/F124_0 9.9626 Tf\n(next_out) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n454.902 572.553 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-666 TJm\n(Because) 33.1954 Tj\n-258 TJm\n(the) 12.1743 Tj\n-258 TJm\n(output) 25.4644 Tj\n72 560.598 Td\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n-228 TJm\n(supplied) 33.7633 Tj\n-228 TJm\n(by) 9.9626 Tj\n-229 TJm\n(the) 12.1743 Tj\n-228 TJm\n(user) 16.5977 Tj\n-228 TJm\n(can) 13.8281 Tj\n-228 TJm\n(be) 9.4047 Tj\n-228 TJm\n(arbitrarily) 39.8404 Tj\n-229 TJm\n(sma) 16.0497 Tj\n1 TJm\n(ll,) 8.0299 Tj\n-233 TJm\n(the) 12.1743 Tj\n-228 TJm\n(\\002nishing-up) 48.1592 Tj\n-228 TJm\n(operation) 37.6287 Tj\n-229 TJm\n(cannot) 26.5603 Tj\n-228 TJm\n(necessarily) 44.2638 Tj\n-228 TJm\n(be) 9.4047 Tj\n-228 TJm\n(done) 19.3673 Tj\n-228 TJm\n(with) 17.7135 Tj\n-229 TJm\n(a) 4.4234 Tj\n-228 TJm\n(single) 23.8007 Tj\n72 548.642 Td\n(call) 14.386 Tj\n-250 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n99.666 548.642 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n183.352 548.642 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 526.725 Td\n(Instead,) 31.2626 Tj\n-346 TJm\n(the) 12.1743 Tj\n-327 TJm\n(calling) 27.1182 Tj\n-326 TJm\n(program) 33.7533 Tj\n-327 TJm\n(passes) 25.4544 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n218.231 526.725 Td\n/F124_0 9.9626 Tf\n(BZ_FINISH) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n275.284 526.725 Td\n/F122_0 9.9626 Tf\n(as) 8.2988 Tj\n-327 TJm\n(an) 9.4047 Tj\n-327 TJm\n(acti) 14.386 Tj\n1 TJm\n(on) 9.9626 Tj\n-327 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n338.109 526.725 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n421.795 526.725 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-1081 TJm\n(This) 17.7135 Tj\n-326 TJm\n(changes) 32.0895 Tj\n-327 TJm\n(the) 12.1743 Tj\n-327 TJm\n(stream') 29.8778 Tj\n55 TJm\n(s) 3.8755 Tj\n72 514.77 Td\n(state) 18.2614 Tj\n-291 TJm\n(to) 7.7509 Tj\n-290 TJm\n(FINISHING.) 52.2937 Tj\n-581 TJm\n(An) 12.1743 Tj\n15 TJm\n(y) 4.9813 Tj\n-291 TJm\n(remaining) 40.3983 Tj\n-290 TJm\n(input) 20.4831 Tj\n-291 TJm\n(\\(ie,) 13.0012 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n264.452 514.77 Td\n/F124_0 9.9626 Tf\n(next_in[0) 53.798 Tj\n-600 TJm\n(..) 11.9551 Tj\n-1200 TJm\n(avail_in-1]) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n413.892 514.77 Td\n/F122_0 9.9626 Tf\n(\\)) 3.3175 Tj\n-291 TJm\n(is) 6.6451 Tj\n-290 TJm\n(compressed) 47.0334 Tj\n-291 TJm\n(and) 14.386 Tj\n-290 TJm\n(transferred) 43.148 Tj\n72 502.814 Td\n(to) 7.7509 Tj\n-421 TJm\n(the) 12.1743 Tj\n-421 TJm\n(output) 25.4644 Tj\n-421 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n55 TJm\n(.) 2.4907 Tj\n-1646 TJm\n(T) 6.0871 Tj\n80 TJm\n(o) 4.9813 Tj\n-421 TJm\n(do) 9.9626 Tj\n-422 TJm\n(this) 14.396 Tj\n1 TJm\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n222.339 502.814 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n310.22 502.814 Td\n/F122_0 9.9626 Tf\n(must) 19.3773 Tj\n-421 TJm\n(be) 9.4047 Tj\n-421 TJm\n(called) 23.7907 Tj\n-421 TJm\n(repeatedly) 41.4942 Tj\n-421 TJm\n(until) 18.2714 Tj\n-421 TJm\n(all) 9.9626 Tj\n-421 TJm\n(the) 12.1743 Tj\n-421 TJm\n(output) 25.4644 Tj\n-421 TJm\n(has) 13.2801 Tj\n-421 TJm\n(been) 18.8094 Tj\n72 490.859 Td\n(consumed.) 42.889 Tj\n-1397 TJm\n(At) 9.9626 Tj\n-379 TJm\n(that) 14.9439 Tj\n-380 TJm\n(point,) 22.9738 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n188.346 490.859 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n275.813 490.859 Td\n/F122_0 9.9626 Tf\n(returns) 27.6661 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n307.259 490.859 Td\n/F124_0 9.9626 Tf\n(BZ_STREAM_END) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n384.968 490.859 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-379 TJm\n(and) 14.386 Tj\n-380 TJm\n(the) 12.1743 Tj\n-379 TJm\n(stream') 29.8778 Tj\n55 TJm\n(s) 3.8755 Tj\n-380 TJm\n(state) 18.2614 Tj\n-379 TJm\n(is) 6.6451 Tj\n-380 TJm\n(set) 11.0684 Tj\n-379 TJm\n(back) 18.8094 Tj\n-379 TJm\n(to) 7.7509 Tj\n72 478.904 Td\n(IDLE.) 25.1755 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n99.666 478.904 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompressEnd) 101.6185 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n203.776 478.904 Td\n/F122_0 9.9626 Tf\n(should) 26.5703 Tj\n-250 TJm\n(then) 17.1556 Tj\n-250 TJm\n(be) 9.4047 Tj\n-250 TJm\n(called.) 26.2813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 456.986 Td\n(Just) 15.5018 Tj\n-380 TJm\n(to) 7.7509 Tj\n-380 TJm\n(mak) 17.1556 Tj\n10 TJm\n(e) 4.4234 Tj\n-379 TJm\n(sure) 16.5977 Tj\n-380 TJm\n(the) 12.1743 Tj\n-380 TJm\n(calling) 27.1182 Tj\n-380 TJm\n(program) 33.7533 Tj\n-379 TJm\n(does) 18.2614 Tj\n-380 TJm\n(not) 12.7322 Tj\n-380 TJm\n(cheat,) 23.5117 Tj\n-412 TJm\n(the) 12.1743 Tj\n-380 TJm\n(library) 26.5603 Tj\n-380 TJm\n(mak) 17.1556 Tj\n10 TJm\n(es) 8.2988 Tj\n-379 TJm\n(a) 4.4234 Tj\n-380 TJm\n(note) 17.1556 Tj\n-380 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n415.708 456.986 Td\n/F124_0 9.9626 Tf\n(avail_in) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n467.312 456.986 Td\n/F122_0 9.9626 Tf\n(at) 7.193 Tj\n-380 TJm\n(the) 12.1743 Tj\n-380 TJm\n(time) 17.7135 Tj\n-379 TJm\n(of) 8.2988 Tj\n-380 TJm\n(the) 12.1743 Tj\n72 445.031 Td\n(\\002rst) 15.5018 Tj\n-286 TJm\n(call) 14.386 Tj\n-286 TJm\n(t) 2.7696 Tj\n1 TJm\n(o) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n118.179 445.031 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n204.713 445.031 Td\n/F122_0 9.9626 Tf\n(which) 24.3486 Tj\n-286 TJm\n(has) 13.2801 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n248.035 445.031 Td\n/F124_0 9.9626 Tf\n(BZ_FINISH) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n304.68 445.031 Td\n/F122_0 9.9626 Tf\n(as) 8.2988 Tj\n-286 TJm\n(an) 9.4047 Tj\n-286 TJm\n(action) 24.3486 Tj\n-285 TJm\n(\\(ie,) 13.0012 Tj\n-295 TJm\n(at) 7.193 Tj\n-286 TJm\n(the) 12.1743 Tj\n-286 TJm\n(time) 17.7135 Tj\n-285 TJm\n(the) 12.1743 Tj\n-286 TJm\n(program) 33.7533 Tj\n-286 TJm\n(has) 13.2801 Tj\n-286 TJm\n(announced) 43.158 Tj\n-285 TJm\n(its) 9.4147 Tj\n72 433.076 Td\n(intention) 35.427 Tj\n-292 TJm\n(to) 7.7509 Tj\n-292 TJm\n(not) 12.7322 Tj\n-291 TJm\n(supply) 26.5703 Tj\n-292 TJm\n(an) 9.4047 Tj\n15 TJm\n(y) 4.9813 Tj\n-292 TJm\n(more) 20.4731 Tj\n-292 TJm\n(input\\).) 26.2913 Tj\n-870 TJm\n(By) 11.6264 Tj\n-292 TJm\n(comparing) 42.61 Tj\n-292 TJm\n(this) 14.396 Tj\n-292 TJm\n(v) 4.9813 Tj\n25 TJm\n(alue) 16.5977 Tj\n-291 TJm\n(with) 17.7135 Tj\n-292 TJm\n(that) 14.9439 Tj\n-292 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n392.862 433.076 Td\n/F124_0 9.9626 Tf\n(avail_in) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n443.589 433.076 Td\n/F122_0 9.9626 Tf\n(o) 4.9813 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(er) 7.7409 Tj\n-292 TJm\n(subsequent) 44.2738 Tj\n-292 TJm\n(calls) 18.2614 Tj\n-291 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 421.121 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n155.686 421.121 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-247 TJm\n(the) 12.1743 Tj\n-247 TJm\n(library) 26.5603 Tj\n-246 TJm\n(can) 13.8281 Tj\n-247 TJm\n(detect) 23.7907 Tj\n-246 TJm\n(an) 9.4047 Tj\n15 TJm\n(y) 4.9813 Tj\n-247 TJm\n(attem) 22.1369 Tj\n1 TJm\n(p) 4.9813 Tj\n-1 TJm\n(t) 2.7696 Tj\n1 TJm\n(s) 3.8755 Tj\n-247 TJm\n(to) 7.7509 Tj\n-246 TJm\n(slip) 14.396 Tj\n-247 TJm\n(in) 7.7509 Tj\n-246 TJm\n(more) 20.4731 Tj\n-247 TJm\n(data) 16.5977 Tj\n-246 TJm\n(to) 7.7509 Tj\n-247 TJm\n(compress.) 40.1194 Tj\n-617 TJm\n(An) 12.1743 Tj\n15 TJm\n(y) 4.9813 Tj\n-247 TJm\n(calls) 18.2614 Tj\n-246 TJm\n(for) 11.6164 Tj\n-247 TJm\n(which) 24.3486 Tj\n-246 TJm\n(this) 14.396 Tj\n-247 TJm\n(is) 6.6451 Tj\n72 409.165 Td\n(detected) 33.1954 Tj\n-250 TJm\n(will) 15.5018 Tj\n-250 TJm\n(return) 23.7907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n151.959 409.165 Td\n/F124_0 9.9626 Tf\n(BZ_SEQUENCE_ERROR) 101.6185 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n253.578 409.165 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-500 TJm\n(This) 17.7135 Tj\n-250 TJm\n(indicates) 35.417 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(programming) 54.2364 Tj\n-250 TJm\n(mistak) 26.5703 Tj\n10 TJm\n(e) 4.4234 Tj\n-250 TJm\n(which) 24.3486 Tj\n-250 TJm\n(should) 26.5703 Tj\n-250 TJm\n(be) 9.4047 Tj\n-250 TJm\n(corrected.) 39.5515 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 387.248 Td\n(Instead) 28.772 Tj\n-224 TJm\n(of) 8.2988 Tj\n-223 TJm\n(asking) 26.0123 Tj\n-224 TJm\n(to) 7.7509 Tj\n-223 TJm\n(\\002nish,) 24.6375 Tj\n-229 TJm\n(the) 12.1743 Tj\n-224 TJm\n(calling) 27.1182 Tj\n-223 TJm\n(program) 33.7533 Tj\n-224 TJm\n(may) 17.1556 Tj\n-224 TJm\n(ask) 13.2801 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n293.282 387.248 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n379.196 387.248 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-224 TJm\n(tak) 12.1743 Tj\n10 TJm\n(e) 4.4234 Tj\n-223 TJm\n(all) 9.9626 Tj\n-224 TJm\n(the) 12.1743 Tj\n-223 TJm\n(remaining) 40.3983 Tj\n-224 TJm\n(input,) 22.9738 Tj\n-229 TJm\n(compress) 37.6287 Tj\n72 375.293 Td\n(it) 5.5392 Tj\n-278 TJm\n(and) 14.386 Tj\n-278 TJm\n(terminate) 37.6287 Tj\n-278 TJm\n(the) 12.1743 Tj\n-278 TJm\n(current) 28.2141 Tj\n-277 TJm\n(\\(Burro) 26.5603 Tj\n25 TJm\n(ws-Wheeler\\)) 51.4469 Tj\n-278 TJm\n(compression) 50.3609 Tj\n-278 TJm\n(block.) 24.6275 Tj\n-787 TJm\n(Th) 11.0684 Tj\n-1 TJm\n(i) 2.7696 Tj\n1 TJm\n(s) 3.8755 Tj\n-278 TJm\n(could) 22.1369 Tj\n-278 TJm\n(be) 9.4047 Tj\n-278 TJm\n(useful) 24.3486 Tj\n-278 TJm\n(for) 11.6164 Tj\n-278 TJm\n(error) 19.3573 Tj\n-278 TJm\n(control) 28.224 Tj\n-278 TJm\n(purposes.) 37.9077 Tj\n72 363.337 Td\n(The) 15.4918 Tj\n-328 TJm\n(mechanism) 45.3796 Tj\n-328 TJm\n(is) 6.6451 Tj\n-328 TJm\n(analogous) 40.3983 Tj\n-328 TJm\n(to) 7.7509 Tj\n-328 TJm\n(that) 14.9439 Tj\n-328 TJm\n(for) 11.6164 Tj\n-328 TJm\n(\\002nishing:) 37.6487 Tj\n-466 TJm\n(call) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n297.049 363.337 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n384.003 363.337 Td\n/F122_0 9.9626 Tf\n(with) 17.7135 Tj\n-328 TJm\n(an) 9.4047 Tj\n-328 TJm\n(action) 24.3486 Tj\n-328 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n456.841 363.337 Td\n/F124_0 9.9626 Tf\n(BZ_FLUSH) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n504.662 363.337 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-328 TJm\n(remo) 20.4731 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n72 351.382 Td\n(output) 25.4644 Tj\n-445 TJm\n(data,) 19.0883 Tj\n-494 TJm\n(and) 14.386 Tj\n-446 TJm\n(persist) 26.0123 Tj\n-445 TJm\n(with) 17.7135 Tj\n-445 TJm\n(the) 12.1743 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n213.94 351.382 Td\n/F124_0 9.9626 Tf\n(BZ_FLUSH) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n266.195 351.382 Td\n/F122_0 9.9626 Tf\n(action) 24.3486 Tj\n-445 TJm\n(until) 18.2714 Tj\n-445 TJm\n(the) 12.1743 Tj\n-446 TJm\n(v) 4.9813 Tj\n25 TJm\n(alue) 16.5977 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n360.062 351.382 Td\n/F124_0 9.9626 Tf\n(BZ_RUN) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n400.362 351.382 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-445 TJm\n(returned.) 35.686 Tj\n-1792 TJm\n(As) 11.0684 Tj\n-445 TJm\n(with) 17.7135 Tj\n-445 TJm\n(\\002nishing,) 37.3697 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 339.427 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n158.177 339.427 Td\n/F122_0 9.9626 Tf\n(detects) 27.6661 Tj\n-250 TJm\n(an) 9.4047 Tj\n15 TJm\n(y) 4.9813 Tj\n-250 TJm\n(attempt) 29.8878 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(pro) 13.2801 Tj\n15 TJm\n(vide) 17.1556 Tj\n-250 TJm\n(more) 20.4731 Tj\n-250 TJm\n(input) 20.4831 Tj\n-250 TJm\n(data) 16.5977 Tj\n-250 TJm\n(once) 18.8094 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(\\003ush) 19.3773 Tj\n-250 TJm\n(has) 13.2801 Tj\n-250 TJm\n(be) 9.4047 Tj\n15 TJm\n(gun.) 17.4346 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 317.509 Td\n(Once) 21.0211 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(\\003ush) 19.3773 Tj\n-250 TJm\n(is) 6.6451 Tj\n-250 TJm\n(complete,) 39.0135 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(stream) 26.5603 Tj\n-250 TJm\n(returns) 27.6661 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(normal) 28.224 Tj\n-250 TJm\n(R) 6.6451 Tj\n40 TJm\n(UNNING) 39.2825 Tj\n-250 TJm\n(state.) 20.7521 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 295.591 Td\n(This) 17.7135 Tj\n-344 TJm\n(all) 9.9626 Tj\n-343 TJm\n(sounds) 27.6761 Tj\n-344 TJm\n(pretty) 23.2427 Tj\n-344 TJm\n(comple) 29.3299 Tj\n15 TJm\n(x,) 7.472 Tj\n-367 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-344 TJm\n(isn') 14.9439 Tj\n18 TJm\n(t) 2.7696 Tj\n-344 TJm\n(really) 22.6848 Tj\n65 TJm\n(.) 2.4907 Tj\n-1182 TJm\n(Here') 22.6749 Tj\n55 TJm\n(s) 3.8755 Tj\n-344 TJm\n(a) 4.4234 Tj\n-344 TJm\n(table) 19.3673 Tj\n-343 TJm\n(which) 24.3486 Tj\n-344 TJm\n(sho) 13.8381 Tj\n25 TJm\n(ws) 11.0684 Tj\n-344 TJm\n(which) 24.3486 Tj\n-344 TJm\n(actions) 28.224 Tj\n-343 TJm\n(are) 12.1643 Tj\n-344 TJm\n(allo) 14.9439 Tj\n25 TJm\n(w) 7.193 Tj\n10 TJm\n(able) 16.5977 Tj\n-344 TJm\n(in) 7.7509 Tj\n-344 TJm\n(each) 18.2515 Tj\n72 283.636 Td\n(state,) 20.7521 Tj\n-281 TJm\n(what) 19.3673 Tj\n-274 TJm\n(action) 24.3486 Tj\n-275 TJm\n(will) 15.5018 Tj\n-274 TJm\n(be) 9.4047 Tj\n-275 TJm\n(tak) 12.1743 Tj\n10 TJm\n(en,) 11.8953 Tj\n-280 TJm\n(what) 19.3673 Tj\n-275 TJm\n(the) 12.1743 Tj\n-274 TJm\n(ne) 9.4047 Tj\n15 TJm\n(xt) 7.7509 Tj\n-275 TJm\n(state) 18.2614 Tj\n-274 TJm\n(is,) 9.1357 Tj\n-281 TJm\n(and) 14.386 Tj\n-274 TJm\n(what) 19.3673 Tj\n-275 TJm\n(the) 12.1743 Tj\n-275 TJm\n(non-error) 37.6188 Tj\n-274 TJm\n(return) 23.7907 Tj\n-275 TJm\n(v) 4.9813 Tj\n25 TJm\n(alues) 20.4731 Tj\n-274 TJm\n(are.) 14.655 Tj\n-767 TJm\n(Note) 19.3673 Tj\n-275 TJm\n(that) 14.9439 Tj\n-274 TJm\n(you) 14.9439 Tj\n-275 TJm\n(can') 17.1456 Tj\n18 TJm\n(t) 2.7696 Tj\n72 271.681 Td\n(e) 4.4234 Tj\n15 TJm\n(xplicitly) 33.2153 Tj\n-347 TJm\n(ask) 13.2801 Tj\n-348 TJm\n(what) 19.3673 Tj\n-347 TJm\n(state) 18.2614 Tj\n-348 TJm\n(the) 12.1743 Tj\n-347 TJm\n(stream) 26.5603 Tj\n-348 TJm\n(is) 6.6451 Tj\n-347 TJm\n(in,) 10.2416 Tj\n-372 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-347 TJm\n(nor) 13.2801 Tj\n-348 TJm\n(do) 9.9626 Tj\n-347 TJm\n(you) 14.9439 Tj\n-348 TJm\n(need) 18.8094 Tj\n-347 TJm\n(to) 7.7509 Tj\n-348 TJm\n(--) 6.6351 Tj\n-347 TJm\n(it) 5.5392 Tj\n-348 TJm\n(can) 13.8281 Tj\n-347 TJm\n(be) 9.4047 Tj\n-347 TJm\n(inferred) 31.5316 Tj\n-348 TJm\n(from) 19.3673 Tj\n-347 TJm\n(the) 12.1743 Tj\n-348 TJm\n(v) 4.9813 Tj\n25 TJm\n(alues) 20.4731 Tj\n-347 TJm\n(returned) 33.1954 Tj\n-348 TJm\n(by) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 259.726 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n155.686 259.726 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 50.852 Td\n(14) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 15 18\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n419.067 749.245 Td\n/F122_0 9.9626 Tf\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n496.556 749.245 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 146.152] cm\n0 0 468 573.848 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 711.631 Td\n/F124_0 9.9626 Tf\n(IDLE/any) 47.8205 Tj\n98.488 699.676 Td\n(Illegal.) 47.8205 Tj\n-852 TJm\n(IDLE) 23.9102 Tj\n-426 TJm\n(state) 29.8878 Tj\n-426 TJm\n(only) 23.9102 Tj\n-426 TJm\n(exists) 35.8654 Tj\n-426 TJm\n(after) 29.8878 Tj\n-426 TJm\n(BZ2_bzCompressEnd) 101.6185 Tj\n-426 TJm\n(or) 11.9551 Tj\n98.488 687.721 Td\n(before) 35.8654 Tj\n-426 TJm\n(BZ2_bzCompressInit.) 113.5736 Tj\n98.488 675.766 Td\n(Return) 35.8654 Tj\n-426 TJm\n(value) 29.8878 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(BZ_SEQUENCE_ERROR) 101.6185 Tj\n90 651.856 Td\n(RUNNING/BZ_RUN) 83.6858 Tj\n98.488 639.9 Td\n(Compress) 47.8205 Tj\n-426 TJm\n(from) 23.9102 Tj\n-426 TJm\n(next_in) 41.8429 Tj\n-426 TJm\n(to) 11.9551 Tj\n-426 TJm\n(next_out) 47.8205 Tj\n-426 TJm\n(as) 11.9551 Tj\n-426 TJm\n(much) 23.9102 Tj\n-426 TJm\n(as) 11.9551 Tj\n-426 TJm\n(possible.) 53.798 Tj\n98.488 627.945 Td\n(Next) 23.9102 Tj\n-426 TJm\n(state) 29.8878 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(RUNNING) 41.8429 Tj\n98.488 615.99 Td\n(Return) 35.8654 Tj\n-426 TJm\n(value) 29.8878 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(BZ_RUN_OK) 53.798 Tj\n90 592.08 Td\n(RUNNING/BZ_FLUSH) 95.641 Tj\n98.488 580.124 Td\n(Remember) 47.8205 Tj\n-426 TJm\n(current) 41.8429 Tj\n-426 TJm\n(value) 29.8878 Tj\n-426 TJm\n(of) 11.9551 Tj\n-426 TJm\n(next_in.) 47.8205 Tj\n-426 TJm\n(Compress) 47.8205 Tj\n-426 TJm\n(from) 23.9102 Tj\n-426 TJm\n(next_in) 41.8429 Tj\n98.488 568.169 Td\n(to) 11.9551 Tj\n-426 TJm\n(next_out) 47.8205 Tj\n-426 TJm\n(as) 11.9551 Tj\n-426 TJm\n(much) 23.9102 Tj\n-426 TJm\n(as) 11.9551 Tj\n-426 TJm\n(possible,) 53.798 Tj\n-426 TJm\n(but) 17.9327 Tj\n-426 TJm\n(do) 11.9551 Tj\n-426 TJm\n(not) 17.9327 Tj\n-426 TJm\n(accept) 35.8654 Tj\n-426 TJm\n(any) 17.9327 Tj\n-426 TJm\n(more) 23.9102 Tj\n-426 TJm\n(input.) 35.8654 Tj\n98.488 556.214 Td\n(Next) 23.9102 Tj\n-426 TJm\n(state) 29.8878 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(FLUSHING) 47.8205 Tj\n98.488 544.259 Td\n(Return) 35.8654 Tj\n-426 TJm\n(value) 29.8878 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(BZ_FLUSH_OK) 65.7532 Tj\n90 520.349 Td\n(RUNNING/BZ_FINISH) 101.6185 Tj\n98.488 508.393 Td\n(Remember) 47.8205 Tj\n-426 TJm\n(current) 41.8429 Tj\n-426 TJm\n(value) 29.8878 Tj\n-426 TJm\n(of) 11.9551 Tj\n-426 TJm\n(next_in.) 47.8205 Tj\n-426 TJm\n(Compress) 47.8205 Tj\n-426 TJm\n(from) 23.9102 Tj\n-426 TJm\n(next_in) 41.8429 Tj\n98.488 496.438 Td\n(to) 11.9551 Tj\n-426 TJm\n(next_out) 47.8205 Tj\n-426 TJm\n(as) 11.9551 Tj\n-426 TJm\n(much) 23.9102 Tj\n-426 TJm\n(as) 11.9551 Tj\n-426 TJm\n(possible,) 53.798 Tj\n-426 TJm\n(but) 17.9327 Tj\n-426 TJm\n(do) 11.9551 Tj\n-426 TJm\n(not) 17.9327 Tj\n-426 TJm\n(accept) 35.8654 Tj\n-426 TJm\n(any) 17.9327 Tj\n-426 TJm\n(more) 23.9102 Tj\n-426 TJm\n(input.) 35.8654 Tj\n98.488 484.483 Td\n(Next) 23.9102 Tj\n-426 TJm\n(state) 29.8878 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(FINISHING) 53.798 Tj\n98.488 472.528 Td\n(Return) 35.8654 Tj\n-426 TJm\n(value) 29.8878 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(BZ_FINISH_OK) 71.7307 Tj\n90 448.618 Td\n(FLUSHING/BZ_FLUSH) 101.6185 Tj\n98.488 436.662 Td\n(Compress) 47.8205 Tj\n-426 TJm\n(from) 23.9102 Tj\n-426 TJm\n(next_in) 41.8429 Tj\n-426 TJm\n(to) 11.9551 Tj\n-426 TJm\n(next_out) 47.8205 Tj\n-426 TJm\n(as) 11.9551 Tj\n-426 TJm\n(much) 23.9102 Tj\n-426 TJm\n(as) 11.9551 Tj\n-426 TJm\n(possible,) 53.798 Tj\n98.488 424.707 Td\n(but) 17.9327 Tj\n-426 TJm\n(do) 11.9551 Tj\n-426 TJm\n(not) 17.9327 Tj\n-426 TJm\n(accept) 35.8654 Tj\n-426 TJm\n(any) 17.9327 Tj\n-426 TJm\n(more) 23.9102 Tj\n-426 TJm\n(input.) 35.8654 Tj\n98.488 412.752 Td\n(If) 11.9551 Tj\n-426 TJm\n(all) 17.9327 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(existing) 47.8205 Tj\n-426 TJm\n(input) 29.8878 Tj\n-426 TJm\n(has) 17.9327 Tj\n-426 TJm\n(been) 23.9102 Tj\n-426 TJm\n(used) 23.9102 Tj\n-426 TJm\n(up) 11.9551 Tj\n-426 TJm\n(and) 17.9327 Tj\n-426 TJm\n(all) 17.9327 Tj\n-426 TJm\n(compressed) 59.7756 Tj\n98.488 400.797 Td\n(output) 35.8654 Tj\n-426 TJm\n(has) 17.9327 Tj\n-426 TJm\n(been) 23.9102 Tj\n-426 TJm\n(removed) 41.8429 Tj\n106.976 388.842 Td\n(Next) 23.9102 Tj\n-426 TJm\n(state) 29.8878 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(RUNNING;) 47.8205 Tj\n-426 TJm\n(Return) 35.8654 Tj\n-426 TJm\n(value) 29.8878 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(BZ_RUN_OK) 53.798 Tj\n98.488 376.887 Td\n(else) 23.9102 Tj\n106.976 364.931 Td\n(Next) 23.9102 Tj\n-426 TJm\n(state) 29.8878 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(FLUSHING;) 53.798 Tj\n-426 TJm\n(Return) 35.8654 Tj\n-426 TJm\n(value) 29.8878 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(BZ_FLUSH_OK) 65.7532 Tj\n90 341.021 Td\n(FLUSHING/other) 83.6858 Tj\n98.488 329.066 Td\n(Illegal.) 47.8205 Tj\n98.488 317.111 Td\n(Return) 35.8654 Tj\n-426 TJm\n(value) 29.8878 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(BZ_SEQUENCE_ERROR) 101.6185 Tj\n90 293.2 Td\n(FINISHING/BZ_FINISH) 113.5736 Tj\n98.488 281.245 Td\n(Compress) 47.8205 Tj\n-426 TJm\n(from) 23.9102 Tj\n-426 TJm\n(next_in) 41.8429 Tj\n-426 TJm\n(to) 11.9551 Tj\n-426 TJm\n(next_out) 47.8205 Tj\n-426 TJm\n(as) 11.9551 Tj\n-426 TJm\n(much) 23.9102 Tj\n-426 TJm\n(as) 11.9551 Tj\n-426 TJm\n(possible,) 53.798 Tj\n98.488 269.29 Td\n(but) 17.9327 Tj\n-426 TJm\n(to) 11.9551 Tj\n-426 TJm\n(not) 17.9327 Tj\n-426 TJm\n(accept) 35.8654 Tj\n-426 TJm\n(any) 17.9327 Tj\n-426 TJm\n(more) 23.9102 Tj\n-426 TJm\n(input.) 35.8654 Tj\n98.488 257.335 Td\n(If) 11.9551 Tj\n-426 TJm\n(all) 17.9327 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(existing) 47.8205 Tj\n-426 TJm\n(input) 29.8878 Tj\n-426 TJm\n(has) 17.9327 Tj\n-426 TJm\n(been) 23.9102 Tj\n-426 TJm\n(used) 23.9102 Tj\n-426 TJm\n(up) 11.9551 Tj\n-426 TJm\n(and) 17.9327 Tj\n-426 TJm\n(all) 17.9327 Tj\n-426 TJm\n(compressed) 59.7756 Tj\n98.488 245.38 Td\n(output) 35.8654 Tj\n-426 TJm\n(has) 17.9327 Tj\n-426 TJm\n(been) 23.9102 Tj\n-426 TJm\n(removed) 41.8429 Tj\n106.976 233.424 Td\n(Next) 23.9102 Tj\n-426 TJm\n(state) 29.8878 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(IDLE;) 29.8878 Tj\n-426 TJm\n(Return) 35.8654 Tj\n-426 TJm\n(value) 29.8878 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(BZ_STREAM_END) 77.7083 Tj\n98.488 221.469 Td\n(else) 23.9102 Tj\n106.976 209.514 Td\n(Next) 23.9102 Tj\n-426 TJm\n(state) 29.8878 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(FINISHING;) 59.7756 Tj\n-426 TJm\n(Return) 35.8654 Tj\n-426 TJm\n(value) 29.8878 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(BZ_FINISH_OK) 71.7307 Tj\n90 185.604 Td\n(FINISHING/other) 89.6634 Tj\n98.488 173.649 Td\n(Illegal.) 47.8205 Tj\n98.488 161.693 Td\n(Return) 35.8654 Tj\n-426 TJm\n(value) 29.8878 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(BZ_SEQUENCE_ERROR) 101.6185 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 124.234 Td\n/F122_0 9.9626 Tf\n(That) 18.2614 Tj\n-250 TJm\n(still) 14.9539 Tj\n-250 TJm\n(looks) 21.589 Tj\n-250 TJm\n(complicated?) 53.1206 Tj\n-620 TJm\n(W) 9.4047 Tj\n80 TJm\n(ell,) 12.4533 Tj\n-250 TJm\n(f) 3.3175 Tj\n10 TJm\n(air) 10.5105 Tj\n-250 TJm\n(enough.) 31.8205 Tj\n-620 TJm\n(The) 15.4918 Tj\n-250 TJm\n(usual) 21.031 Tj\n-250 TJm\n(sequence) 36.5129 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(calls) 18.2614 Tj\n-250 TJm\n(for) 11.6164 Tj\n-250 TJm\n(compressing) 50.3609 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(load) 17.1556 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(data) 16.5977 Tj\n-250 TJm\n(is:) 9.4147 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 92.353 Td\n(1.) 7.472 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-510 TJm\n(Get) 14.386 Tj\n-250 TJm\n(started) 26.5603 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n153.175 92.353 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompressInit) 107.5961 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n260.771 92.353 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 50.951 Td\n(15) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 16 19\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n419.067 749.245 Td\n/F122_0 9.9626 Tf\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n496.556 749.245 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n74.491 710.037 Td\n/F122_0 9.9626 Tf\n(2.) 7.472 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-510 TJm\n(Sho) 15.5018 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(el) 7.193 Tj\n-267 TJm\n(data) 16.5977 Tj\n-268 TJm\n(in) 7.7509 Tj\n-267 TJm\n(and) 14.386 Tj\n-268 TJm\n(shlurp) 24.9065 Tj\n-267 TJm\n(out) 12.7322 Tj\n-268 TJm\n(its) 9.4147 Tj\n-267 TJm\n(compressed) 47.0334 Tj\n-267 TJm\n(form) 19.3673 Tj\n-268 TJm\n(using) 21.589 Tj\n-267 TJm\n(zero) 17.1456 Tj\n-268 TJm\n(or) 8.2988 Tj\n-267 TJm\n(more) 20.4731 Tj\n-268 TJm\n(call) 14.386 Tj\n1 TJm\n(s) 3.8755 Tj\n-268 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n400.64 710.037 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n486.991 710.037 Td\n/F122_0 9.9626 Tf\n(with) 17.7135 Tj\n-267 TJm\n(action) 24.3486 Tj\n-268 TJm\n(=) 5.6189 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n83.955 698.082 Td\n/F124_0 9.9626 Tf\n(BZ_RUN) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n119.821 698.082 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 676.164 Td\n(3.) 7.472 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-510 TJm\n(Finish) 24.9165 Tj\n-276 TJm\n(up.) 12.4533 Tj\n-387 TJm\n(Repeatedly) 44.8217 Tj\n-276 TJm\n(call) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n195.722 676.164 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n282.156 676.164 Td\n/F122_0 9.9626 Tf\n(with) 17.7135 Tj\n-276 TJm\n(action) 24.3486 Tj\n-276 TJm\n(=) 5.6189 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n338.079 676.164 Td\n/F124_0 9.9626 Tf\n(BZ_FINISH) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n391.877 676.164 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-276 TJm\n(cop) 14.386 Tj\n10 TJm\n(ying) 17.7135 Tj\n-276 TJm\n(out) 12.7322 Tj\n-275 TJm\n(the) 12.1743 Tj\n-276 TJm\n(compressed) 47.0334 Tj\n-276 TJm\n(output,) 27.9551 Tj\n83.955 664.209 Td\n(until) 18.2714 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n104.717 664.209 Td\n/F124_0 9.9626 Tf\n(BZ_STREAM_END) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n184.916 664.209 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-250 TJm\n(returned.) 35.686 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 642.291 Td\n(4.) 7.472 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-510 TJm\n(Close) 22.6948 Tj\n-250 TJm\n(up) 9.9626 Tj\n-250 TJm\n(and) 14.386 Tj\n-250 TJm\n(go) 9.9626 Tj\n-250 TJm\n(home.) 24.6275 Tj\n-620 TJm\n(Call) 16.6077 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n203.914 642.291 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompressEnd) 101.6185 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n305.533 642.291 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 620.374 Td\n(If) 6.6351 Tj\n-269 TJm\n(the) 12.1743 Tj\n-270 TJm\n(data) 16.5977 Tj\n-269 TJm\n(you) 14.9439 Tj\n-270 TJm\n(w) 7.193 Tj\n10 TJm\n(ant) 12.1743 Tj\n-269 TJm\n(to) 7.7509 Tj\n-270 TJm\n(compress) 37.6287 Tj\n-269 TJm\n(\\002ts) 12.1843 Tj\n-270 TJm\n(into) 15.5018 Tj\n-269 TJm\n(your) 18.2614 Tj\n-270 TJm\n(input) 20.4831 Tj\n-269 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n-270 TJm\n(all) 9.9626 Tj\n-269 TJm\n(at) 7.193 Tj\n-270 TJm\n(once,) 21.3 Tj\n-274 TJm\n(you) 14.9439 Tj\n-269 TJm\n(can) 13.8281 Tj\n-270 TJm\n(skip) 16.6077 Tj\n-269 TJm\n(the) 12.1743 Tj\n-270 TJm\n(calls) 18.2614 Tj\n-269 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n456.314 620.374 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n72 608.418 Td\n(\\() 5.9776 Tj\n-600 TJm\n(...,) 23.9102 Tj\n-600 TJm\n(BZ_RUN) 35.8654 Tj\n-600 TJm\n(\\)) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n164.154 608.418 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n-250 TJm\n(just) 14.396 Tj\n-250 TJm\n(do) 9.9626 Tj\n-250 TJm\n(the) 12.1743 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n225.036 608.418 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n-600 TJm\n(\\() 5.9776 Tj\n-600 TJm\n(...,) 23.9102 Tj\n-600 TJm\n(BZ_FINISH) 53.798 Tj\n-600 TJm\n(\\)) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n424.786 608.418 Td\n/F122_0 9.9626 Tf\n(calls.) 20.7521 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 586.501 Td\n(All) 12.7322 Tj\n-278 TJm\n(required) 33.1954 Tj\n-277 TJm\n(memory) 33.2053 Tj\n-278 TJm\n(is) 6.6451 Tj\n-277 TJm\n(allocated) 35.965 Tj\n-278 TJm\n(by) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n220.295 586.501 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompressInit) 107.5961 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n327.891 586.501 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-785 TJm\n(The) 15.4918 Tj\n-278 TJm\n(compression) 50.3609 Tj\n-277 TJm\n(library) 26.5603 Tj\n-278 TJm\n(can) 13.8281 Tj\n-277 TJm\n(accept) 25.4445 Tj\n-278 TJm\n(an) 9.4047 Tj\n15 TJm\n(y) 4.9813 Tj\n-277 TJm\n(data) 16.5977 Tj\n-278 TJm\n(at) 7.193 Tj\n-278 TJm\n(all) 9.9626 Tj\n72 574.545 Td\n(\\(ob) 13.2801 Tj\n15 TJm\n(viously\\).) 35.1481 Tj\n-612 TJm\n(So) 10.5205 Tj\n-238 TJm\n(you) 14.9439 Tj\n-237 TJm\n(shouldn') 34.8691 Tj\n18 TJm\n(t) 2.7696 Tj\n-238 TJm\n(get) 12.1743 Tj\n-238 TJm\n(an) 9.4047 Tj\n15 TJm\n(y) 4.9813 Tj\n-237 TJm\n(error) 19.3573 Tj\n-238 TJm\n(return) 23.7907 Tj\n-238 TJm\n(v) 4.9813 Tj\n25 TJm\n(alues) 20.4731 Tj\n-238 TJm\n(from) 19.3673 Tj\n-237 TJm\n(the) 12.1743 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n339.287 574.545 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n425.342 574.545 Td\n/F122_0 9.9626 Tf\n(calls.) 20.7521 Tj\n-612 TJm\n(If) 6.6351 Tj\n-237 TJm\n(you) 14.9439 Tj\n-238 TJm\n(do,) 12.4533 Tj\n-240 TJm\n(the) 12.1743 Tj\n15 TJm\n(y) 4.9813 Tj\n-238 TJm\n(will) 15.5018 Tj\n-238 TJm\n(be) 9.4047 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 562.59 Td\n/F124_0 9.9626 Tf\n(BZ_SEQUENCE_ERROR) 101.6185 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n173.619 562.59 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-250 TJm\n(and) 14.386 Tj\n-250 TJm\n(indicate) 31.5416 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(b) 4.9813 Tj\n20 TJm\n(ug) 9.9626 Tj\n-250 TJm\n(in) 7.7509 Tj\n-250 TJm\n(your) 18.2614 Tj\n-250 TJm\n(programming.) 56.727 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 540.672 Td\n(T) 6.0871 Tj\n35 TJm\n(ri) 6.0871 Tj\n25 TJm\n(vial) 14.9439 Tj\n-250 TJm\n(other) 20.4731 Tj\n-250 TJm\n(possible) 32.6574 Tj\n-250 TJm\n(return) 23.7907 Tj\n-250 TJm\n(v) 4.9813 Tj\n25 TJm\n(alues:) 23.2427 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 501.654] cm\n0 0 468 35.866 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 529.151 Td\n/F124_0 9.9626 Tf\n(BZ_PARAM_ERROR) 83.6858 Tj\n98.488 517.196 Td\n(if) 11.9551 Tj\n-426 TJm\n(strm) 23.9102 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(NULL,) 29.8878 Tj\n-426 TJm\n(or) 11.9551 Tj\n-426 TJm\n(strm->s) 41.8429 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(NULL) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 471.033 Td\n/F116_0 17.2154 Tf\n(3.3.3.) 43.0729 Tj\n-278 TJm\n(BZ2_bzCompressEnd) 177.9212 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 442.563] cm\n0 0 468 23.91 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 458.104 Td\n/F124_0 9.9626 Tf\n(int) 17.9327 Tj\n-426 TJm\n(BZ2_bzCompressEnd) 101.6185 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(bz_stream) 53.798 Tj\n286.303 456.361 Td\n(*) 5.9776 Tj\n292.281 458.104 Td\n(strm) 23.9102 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 420.645 Td\n/F122_0 9.9626 Tf\n(Releases) 34.8591 Tj\n-250 TJm\n(all) 9.9626 Tj\n-250 TJm\n(memory) 33.2053 Tj\n-250 TJm\n(associated) 40.9463 Tj\n-250 TJm\n(with) 17.7135 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(compression) 50.3609 Tj\n-250 TJm\n(stream.) 29.0509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 398.727 Td\n(Possible) 33.2153 Tj\n-250 TJm\n(return) 23.7907 Tj\n-250 TJm\n(v) 4.9813 Tj\n25 TJm\n(alues:) 23.2427 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 361.766] cm\n0 0 468 35.866 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 389.263 Td\n/F124_0 9.9626 Tf\n(BZ_PARAM_ERROR) 83.6858 Tj\n-852 TJm\n(if) 11.9551 Tj\n-426 TJm\n(strm) 23.9102 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(NULL) 23.9102 Tj\n-426 TJm\n(or) 11.9551 Tj\n-426 TJm\n(strm->s) 41.8429 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(NULL) 23.9102 Tj\n90 377.307 Td\n(BZ_OK) 29.8878 Tj\n-4686 TJm\n(otherwise) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 331.145 Td\n/F116_0 17.2154 Tf\n(3.3.4.) 43.0729 Tj\n-278 TJm\n(BZ2_bzDecompressInit) 190.3679 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 302.674] cm\n0 0 468 23.91 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 318.216 Td\n/F124_0 9.9626 Tf\n(int) 17.9327 Tj\n-426 TJm\n(BZ2_bzDecompressInit) 119.5512 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(bz_stream) 53.798 Tj\n304.236 316.473 Td\n(*) 5.9776 Tj\n310.214 318.216 Td\n(strm,) 29.8878 Tj\n-426 TJm\n(int) 17.9327 Tj\n-426 TJm\n(verbosity,) 59.7756 Tj\n-426 TJm\n(int) 17.9327 Tj\n-426 TJm\n(small) 29.8878 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 280.757 Td\n/F122_0 9.9626 Tf\n(Prepares) 34.3012 Tj\n-351 TJm\n(for) 11.6164 Tj\n-351 TJm\n(decompression.) 62.2563 Tj\n-1228 TJm\n(As) 11.0684 Tj\n-351 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n235.177 280.757 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompressInit) 107.5961 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n342.773 280.757 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-377 TJm\n(a) 4.4234 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n356.937 280.757 Td\n/F124_0 9.9626 Tf\n(bz_stream) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n414.235 280.757 Td\n/F122_0 9.9626 Tf\n(record) 25.4445 Tj\n-351 TJm\n(should) 26.5703 Tj\n-351 TJm\n(be) 9.4047 Tj\n-352 TJm\n(allocated) 35.965 Tj\n-351 TJm\n(and) 14.386 Tj\n72 268.801 Td\n(initialised) 39.3025 Tj\n-306 TJm\n(before) 25.4445 Tj\n-305 TJm\n(the) 12.1743 Tj\n-306 TJm\n(call.) 16.8766 Tj\n-953 TJm\n(Fields) 24.3586 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n211.833 268.801 Td\n/F124_0 9.9626 Tf\n(bzalloc) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n253.676 268.801 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n259.35 268.801 Td\n/F124_0 9.9626 Tf\n(bzfree) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n298.26 268.801 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n315.69 268.801 Td\n/F124_0 9.9626 Tf\n(opaque) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n354.6 268.801 Td\n/F122_0 9.9626 Tf\n(should) 26.5703 Tj\n-306 TJm\n(be) 9.4047 Tj\n-305 TJm\n(set) 11.0684 Tj\n-306 TJm\n(if) 6.0871 Tj\n-305 TJm\n(a) 4.4234 Tj\n-306 TJm\n(custom) 28.782 Tj\n-305 TJm\n(memory) 33.2053 Tj\n-306 TJm\n(allocator) 34.8591 Tj\n-306 TJm\n(is) 6.6451 Tj\n72 256.846 Td\n(required,) 35.686 Tj\n-350 TJm\n(or) 8.2988 Tj\n-331 TJm\n(made) 21.579 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n147.635 256.846 Td\n/F124_0 9.9626 Tf\n(NULL) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n174.836 256.846 Td\n/F122_0 9.9626 Tf\n(for) 11.6164 Tj\n-330 TJm\n(the) 12.1743 Tj\n-331 TJm\n(normal) 28.224 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n236.722 256.846 Td\n/F124_0 9.9626 Tf\n(malloc) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n275.878 256.846 Td\n/F122_0 9.9626 Tf\n(/) 2.7696 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n281.938 256.846 Td\n/F124_0 9.9626 Tf\n(free) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n309.139 256.846 Td\n/F122_0 9.9626 Tf\n(routines.) 34.5901 Tj\n-1102 TJm\n(Upon) 22.1369 Tj\n-330 TJm\n(return,) 26.2813 Tj\n-350 TJm\n(the) 12.1743 Tj\n-331 TJm\n(internal) 30.4357 Tj\n-330 TJm\n(state) 18.2614 Tj\n-330 TJm\n(will) 15.5018 Tj\n-330 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-331 TJm\n(been) 18.8094 Tj\n72 244.891 Td\n(initialised,) 41.7931 Tj\n-250 TJm\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n133.16 244.891 Td\n/F124_0 9.9626 Tf\n(total_in) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n183.471 244.891 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n200.348 244.891 Td\n/F124_0 9.9626 Tf\n(total_out) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n256.637 244.891 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-250 TJm\n(be) 9.4047 Tj\n-250 TJm\n(zero.) 19.6363 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 222.973 Td\n(F) 5.5392 Tj\n15 TJm\n(or) 8.2988 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(meaning) 34.3112 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(parameter) 39.8305 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n192.756 222.973 Td\n/F124_0 9.9626 Tf\n(verbosity) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n246.554 222.973 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-250 TJm\n(see) 12.7222 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n266.748 222.973 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompressInit) 107.5961 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n374.345 222.973 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 201.055 Td\n(If) 6.6351 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n81.497 201.055 Td\n/F124_0 9.9626 Tf\n(small) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n114.248 201.055 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-287 TJm\n(nonzero,) 34.5802 Tj\n-297 TJm\n(the) 12.1743 Tj\n-287 TJm\n(library) 26.5603 Tj\n-288 TJm\n(wil) 12.7322 Tj\n1 TJm\n(l) 2.7696 Tj\n-288 TJm\n(use) 13.2801 Tj\n-287 TJm\n(an) 9.4047 Tj\n-287 TJm\n(alternati) 32.6474 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-288 TJm\n(decompression) 59.7656 Tj\n-287 TJm\n(algorithm) 38.7446 Tj\n-287 TJm\n(which) 24.3486 Tj\n-288 TJm\n(uses) 17.1556 Tj\n-287 TJm\n(less) 14.9439 Tj\n-287 TJm\n(memory) 33.2053 Tj\n-287 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-288 TJm\n(at) 7.193 Tj\n-287 TJm\n(the) 12.1743 Tj\n72 189.1 Td\n(cost) 16.0497 Tj\n-289 TJm\n(of) 8.2988 Tj\n-290 TJm\n(decompressing) 59.7656 Tj\n-289 TJm\n(more) 20.4731 Tj\n-289 TJm\n(slo) 11.6264 Tj\n25 TJm\n(wly) 14.9439 Tj\n-290 TJm\n(\\(roughly) 34.3112 Tj\n-289 TJm\n(speaking,) 37.9077 Tj\n-299 TJm\n(half) 15.4918 Tj\n-290 TJm\n(the) 12.1743 Tj\n-289 TJm\n(speed,) 25.1755 Tj\n-299 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-289 TJm\n(the) 12.1743 Tj\n-290 TJm\n(maximum) 40.4083 Tj\n-289 TJm\n(memory) 33.2053 Tj\n-289 TJm\n(requirement) 48.1393 Tj\n-290 TJm\n(drops) 22.1369 Tj\n72 177.145 Td\n(to) 7.7509 Tj\n-250 TJm\n(around) 27.6661 Tj\n-250 TJm\n(2300k\\).) 30.7147 Tj\n-620 TJm\n(See) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n-250 TJm\n(Ho) 12.1743 Tj\n25 TJm\n(w) 7.193 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(use) 13.2801 Tj\n-250 TJm\n(bzip2) 22.1369 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n-250 TJm\n([2]) 11.6164 Tj\n/DeviceRGB {} cs\n[0 0 1] sc\n/DeviceRGB {} CS\n[0 0 1] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-250 TJm\n(for) 11.6164 Tj\n-250 TJm\n(more) 20.4731 Tj\n-250 TJm\n(information) 47.0434 Tj\n-250 TJm\n(on) 9.9626 Tj\n-250 TJm\n(memory) 33.2053 Tj\n-250 TJm\n(management.) 53.3995 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 155.227 Td\n(Note) 19.3673 Tj\n-289 TJm\n(that) 14.9439 Tj\n-290 TJm\n(the) 12.1743 Tj\n-289 TJm\n(amount) 29.8878 Tj\n-289 TJm\n(of) 8.2988 Tj\n-289 TJm\n(memory) 33.2053 Tj\n-290 TJm\n(needed) 28.2141 Tj\n-289 TJm\n(to) 7.7509 Tj\n-289 TJm\n(decompress) 47.0334 Tj\n-289 TJm\n(a) 4.4234 Tj\n-290 TJm\n(stream) 26.5603 Tj\n-289 TJm\n(cannot) 26.5603 Tj\n-289 TJm\n(be) 9.4047 Tj\n-289 TJm\n(determined) 44.8217 Tj\n-290 TJm\n(until) 18.2714 Tj\n-289 TJm\n(the) 12.1743 Tj\n-289 TJm\n(stream') 29.8778 Tj\n55 TJm\n(s) 3.8755 Tj\n-289 TJm\n(header) 26.5503 Tj\n-290 TJm\n(has) 13.2801 Tj\n72 143.272 Td\n(been) 18.8094 Tj\n-342 TJm\n(read,) 19.6363 Tj\n-366 TJm\n(so) 8.8568 Tj\n-342 TJm\n(e) 4.4234 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(en) 9.4047 Tj\n-342 TJm\n(if) 6.0871 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n161.081 143.272 Td\n/F124_0 9.9626 Tf\n(BZ2_bzDecompressInit) 119.5512 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n284.043 143.272 Td\n/F122_0 9.9626 Tf\n(succeeds,) 37.8977 Tj\n-365 TJm\n(a) 4.4234 Tj\n-343 TJm\n(subsequent) 44.2738 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n381.098 143.272 Td\n/F124_0 9.9626 Tf\n(BZ2_bzDecompress) 95.641 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n480.149 143.272 Td\n/F122_0 9.9626 Tf\n(could) 22.1369 Tj\n-342 TJm\n(f) 3.3175 Tj\n10 TJm\n(ail) 9.9626 Tj\n-343 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 131.317 Td\n/F124_0 9.9626 Tf\n(BZ_MEM_ERROR) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n143.731 131.317 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 109.399 Td\n(Possible) 33.2153 Tj\n-250 TJm\n(return) 23.7907 Tj\n-250 TJm\n(v) 4.9813 Tj\n25 TJm\n(alues:) 23.2427 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 50.951 Td\n(16) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 17 20\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n419.067 749.245 Td\n/F122_0 9.9626 Tf\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n496.556 749.245 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 624.359] cm\n0 0 468 95.641 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 711.631 Td\n/F124_0 9.9626 Tf\n(BZ_CONFIG_ERROR) 89.6634 Tj\n98.488 699.676 Td\n(if) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(library) 41.8429 Tj\n-426 TJm\n(has) 17.9327 Tj\n-426 TJm\n(been) 23.9102 Tj\n-426 TJm\n(mis-compiled) 71.7307 Tj\n90 687.721 Td\n(BZ_PARAM_ERROR) 83.6858 Tj\n98.488 675.766 Td\n(if) 11.9551 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(small) 29.8878 Tj\n-426 TJm\n(!=) 11.9551 Tj\n-426 TJm\n(0) 5.9776 Tj\n-426 TJm\n(&&) 11.9551 Tj\n-426 TJm\n(small) 29.8878 Tj\n-426 TJm\n(!=) 11.9551 Tj\n-426 TJm\n(1) 5.9776 Tj\n-426 TJm\n(\\)) 5.9776 Tj\n98.488 663.811 Td\n(or) 11.9551 Tj\n-426 TJm\n(\\(verbosity) 59.7756 Tj\n-426 TJm\n(<;) 11.9551 Tj\n-426 TJm\n(0) 5.9776 Tj\n-426 TJm\n(||) 11.9551 Tj\n-426 TJm\n(verbosity) 53.798 Tj\n-426 TJm\n(>) 5.9776 Tj\n-426 TJm\n(4\\)) 11.9551 Tj\n90 651.856 Td\n(BZ_MEM_ERROR) 71.7307 Tj\n98.488 639.9 Td\n(if) 11.9551 Tj\n-426 TJm\n(insufficient) 71.7307 Tj\n-426 TJm\n(memory) 35.8654 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(available) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 602.441 Td\n/F122_0 9.9626 Tf\n(Allo) 17.7135 Tj\n25 TJm\n(w) 7.193 Tj\n10 TJm\n(able) 16.5977 Tj\n-250 TJm\n(ne) 9.4047 Tj\n15 TJm\n(xt) 7.7509 Tj\n-250 TJm\n(actions:) 30.9936 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 553.524] cm\n0 0 468 47.821 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 592.976 Td\n/F124_0 9.9626 Tf\n(BZ2_bzDecompress) 95.641 Tj\n98.488 581.021 Td\n(if) 11.9551 Tj\n-426 TJm\n(BZ_OK) 29.8878 Tj\n-426 TJm\n(was) 17.9327 Tj\n-426 TJm\n(returned) 47.8205 Tj\n98.488 569.066 Td\n(no) 11.9551 Tj\n-426 TJm\n(specific) 47.8205 Tj\n-426 TJm\n(action) 35.8654 Tj\n-426 TJm\n(required) 47.8205 Tj\n-426 TJm\n(in) 11.9551 Tj\n-426 TJm\n(case) 23.9102 Tj\n-426 TJm\n(of) 11.9551 Tj\n-426 TJm\n(error) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 522.903 Td\n/F116_0 17.2154 Tf\n(3.3.5.) 43.0729 Tj\n-278 TJm\n(BZ2_bzDecompress) 164.5448 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 494.433] cm\n0 0 468 23.91 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 509.975 Td\n/F124_0 9.9626 Tf\n(int) 17.9327 Tj\n-426 TJm\n(BZ2_bzDecompress) 95.641 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(bz_stream) 53.798 Tj\n280.326 508.231 Td\n(*) 5.9776 Tj\n286.303 509.975 Td\n(strm) 23.9102 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 472.515 Td\n/F122_0 9.9626 Tf\n(Pro) 13.8381 Tj\n15 TJm\n(vides) 21.031 Tj\n-301 TJm\n(more) 20.4731 Tj\n-302 TJm\n(input) 20.4831 Tj\n-301 TJm\n(and/out) 29.8878 Tj\n-302 TJm\n(output) 25.4644 Tj\n-301 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n-301 TJm\n(space) 22.1269 Tj\n-302 TJm\n(for) 11.6164 Tj\n-301 TJm\n(the) 12.1743 Tj\n-302 TJm\n(library) 26.5603 Tj\n65 TJm\n(.) 2.4907 Tj\n-928 TJm\n(The) 15.4918 Tj\n-301 TJm\n(caller) 22.1269 Tj\n-302 TJm\n(maintains) 38.7446 Tj\n-301 TJm\n(input) 20.4831 Tj\n-302 TJm\n(and) 14.386 Tj\n-301 TJm\n(output) 25.4644 Tj\n-301 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fers,) 17.4246 Tj\n-315 TJm\n(and) 14.386 Tj\n72 460.56 Td\n(uses) 17.1556 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n91.646 460.56 Td\n/F124_0 9.9626 Tf\n(BZ2_bzDecompress) 95.641 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n189.778 460.56 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-250 TJm\n(transfer) 30.4258 Tj\n-250 TJm\n(data) 16.5977 Tj\n-250 TJm\n(between) 33.1954 Tj\n-250 TJm\n(them.) 22.4159 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 438.642 Td\n(Before) 27.1082 Tj\n-498 TJm\n(each) 18.2515 Tj\n-499 TJm\n(call) 14.386 Tj\n-498 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n159.356 438.642 Td\n/F124_0 9.9626 Tf\n(BZ2_bzDecompress) 95.641 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n254.997 438.642 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n263.071 438.642 Td\n/F124_0 9.9626 Tf\n(next_in) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n309.879 438.642 Td\n/F122_0 9.9626 Tf\n(should) 26.5703 Tj\n-498 TJm\n(point) 20.4831 Tj\n-499 TJm\n(at) 7.193 Tj\n-498 TJm\n(the) 12.1743 Tj\n-498 TJm\n(compressed) 47.0334 Tj\n-499 TJm\n(data,) 19.0883 Tj\n-560 TJm\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n492.179 438.642 Td\n/F124_0 9.9626 Tf\n(avail_in) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 426.687 Td\n/F122_0 9.9626 Tf\n(should) 26.5703 Tj\n-308 TJm\n(indicate) 31.5416 Tj\n-308 TJm\n(ho) 9.9626 Tj\n25 TJm\n(w) 7.193 Tj\n-309 TJm\n(man) 17.1556 Tj\n15 TJm\n(y) 4.9813 Tj\n-308 TJm\n(bytes) 21.031 Tj\n-308 TJm\n(the) 12.1743 Tj\n-308 TJm\n(library) 26.5603 Tj\n-308 TJm\n(may) 17.1556 Tj\n-309 TJm\n(read.) 19.6363 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n294.955 426.687 Td\n/F124_0 9.9626 Tf\n(BZ2_bzDecompress) 95.641 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n393.667 426.687 Td\n/F122_0 9.9626 Tf\n(updates) 30.4357 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n427.173 426.687 Td\n/F124_0 9.9626 Tf\n(next_in) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n469.016 426.687 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n474.723 426.687 Td\n/F124_0 9.9626 Tf\n(avail_in) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n525.614 426.687 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 414.732 Td\n/F124_0 9.9626 Tf\n(total_in) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n122.311 414.732 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-250 TJm\n(re\\003ect) 24.8965 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(number) 30.4357 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(bytes) 21.031 Tj\n-250 TJm\n(it) 5.5392 Tj\n-250 TJm\n(has) 13.2801 Tj\n-250 TJm\n(read.) 19.6363 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 392.814 Td\n(Similarly) 37.0908 Tj\n65 TJm\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n113.799 392.814 Td\n/F124_0 9.9626 Tf\n(next_out) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n164.41 392.814 Td\n/F122_0 9.9626 Tf\n(should) 26.5703 Tj\n-280 TJm\n(point) 20.4831 Tj\n-280 TJm\n(to) 7.7509 Tj\n-280 TJm\n(a) 4.4234 Tj\n-280 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n-281 TJm\n(i) 2.7696 Tj\n1 TJm\n(n) 4.9813 Tj\n-281 TJm\n(which) 24.3486 Tj\n-280 TJm\n(the) 12.1743 Tj\n-280 TJm\n(uncompressed) 56.996 Tj\n-280 TJm\n(output) 25.4644 Tj\n-280 TJm\n(is) 6.6451 Tj\n-280 TJm\n(to) 7.7509 Tj\n-280 TJm\n(be) 9.4047 Tj\n-280 TJm\n(placed,) 28.493 Tj\n-288 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n486.202 392.814 Td\n/F124_0 9.9626 Tf\n(avail_out) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 380.859 Td\n/F122_0 9.9626 Tf\n(indicating) 39.8504 Tj\n-525 TJm\n(ho) 9.9626 Tj\n25 TJm\n(w) 7.193 Tj\n-524 TJm\n(much) 22.1369 Tj\n-525 TJm\n(output) 25.4644 Tj\n-524 TJm\n(space) 22.1269 Tj\n-525 TJm\n(is) 6.6451 Tj\n-525 TJm\n(a) 4.4234 Tj\n20 TJm\n(v) 4.9813 Tj\n25 TJm\n(ailable.) 29.0509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n285.792 380.859 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n374.705 380.859 Td\n/F122_0 9.9626 Tf\n(updates) 30.4357 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n410.367 380.859 Td\n/F124_0 9.9626 Tf\n(next_out) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n458.188 380.859 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n466.589 380.859 Td\n/F124_0 9.9626 Tf\n(avail_out) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n525.614 380.859 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 368.904 Td\n/F124_0 9.9626 Tf\n(total_out) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n128.289 368.904 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-250 TJm\n(re\\003ect) 24.8965 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(number) 30.4357 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(bytes) 21.031 Tj\n-250 TJm\n(output.) 27.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 346.986 Td\n(Y) 7.193 Tj\n110 TJm\n(ou) 9.9626 Tj\n-320 TJm\n(may) 17.1556 Tj\n-321 TJm\n(pro) 13.2801 Tj\n15 TJm\n(vide) 17.1556 Tj\n-320 TJm\n(and) 14.386 Tj\n-321 TJm\n(remo) 20.4731 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-320 TJm\n(as) 8.2988 Tj\n-321 TJm\n(little) 18.2714 Tj\n-320 TJm\n(or) 8.2988 Tj\n-320 TJm\n(as) 8.2988 Tj\n-321 TJm\n(much) 22.1369 Tj\n-320 TJm\n(data) 16.5977 Tj\n-321 TJm\n(as) 8.2988 Tj\n-320 TJm\n(you) 14.9439 Tj\n-321 TJm\n(lik) 10.5205 Tj\n10 TJm\n(e) 4.4234 Tj\n-320 TJm\n(on) 9.9626 Tj\n-320 TJm\n(each) 18.2515 Tj\n-321 TJm\n(call) 14.386 Tj\n-320 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n407.816 346.986 Td\n/F124_0 9.9626 Tf\n(BZ2_bzDecompress) 95.641 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n503.457 346.986 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-1043 TJm\n(In) 8.2988 Tj\n-320 TJm\n(the) 12.1743 Tj\n72 335.031 Td\n(limit,) 21.32 Tj\n-295 TJm\n(it) 5.5392 Tj\n-286 TJm\n(is) 6.6451 Tj\n-287 TJm\n(acceptable) 42.0422 Tj\n-286 TJm\n(to) 7.7509 Tj\n-286 TJm\n(supply) 26.5703 Tj\n-286 TJm\n(and) 14.386 Tj\n-287 TJm\n(remo) 20.4731 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-286 TJm\n(data) 16.5977 Tj\n-286 TJm\n(one) 14.386 Tj\n-286 TJm\n(byte) 17.1556 Tj\n-287 TJm\n(at) 7.193 Tj\n-286 TJm\n(a) 4.4234 Tj\n-286 TJm\n(time,) 20.2042 Tj\n-295 TJm\n(although) 34.8691 Tj\n-286 TJm\n(this) 14.396 Tj\n-287 TJm\n(w) 7.193 Tj\n10 TJm\n(ould) 17.7135 Tj\n-286 TJm\n(be) 9.4047 Tj\n-286 TJm\n(terribly) 29.3299 Tj\n-286 TJm\n(inef) 15.4918 Tj\n25 TJm\n(\\002cient.) 27.3972 Tj\n-838 TJm\n(Y) 7.193 Tj\n110 TJm\n(ou) 9.9626 Tj\n72 323.076 Td\n(should) 26.5703 Tj\n-250 TJm\n(al) 7.193 Tj\n10 TJm\n(w) 7.193 Tj\n10 TJm\n(ays) 13.2801 Tj\n-250 TJm\n(ensure) 26.0024 Tj\n-250 TJm\n(that) 14.9439 Tj\n-250 TJm\n(at) 7.193 Tj\n-250 TJm\n(least) 18.2614 Tj\n-250 TJm\n(one) 14.386 Tj\n-250 TJm\n(byte) 17.1556 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(output) 25.4644 Tj\n-250 TJm\n(space) 22.1269 Tj\n-250 TJm\n(is) 6.6451 Tj\n-250 TJm\n(a) 4.4234 Tj\n20 TJm\n(v) 4.9813 Tj\n25 TJm\n(ailable) 26.5603 Tj\n-250 TJm\n(at) 7.193 Tj\n-250 TJm\n(each) 18.2515 Tj\n-250 TJm\n(call.) 16.8766 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 301.158 Td\n(Use) 15.4918 Tj\n-250 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n100.772 301.158 Td\n/F124_0 9.9626 Tf\n(BZ2_bzDecompress) 95.641 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n198.904 301.158 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-250 TJm\n(simpler) 29.8878 Tj\n-250 TJm\n(than) 17.1556 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n260.064 301.158 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n343.75 301.158 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 279.24 Td\n(Y) 7.193 Tj\n110 TJm\n(ou) 9.9626 Tj\n-346 TJm\n(should) 26.5703 Tj\n-347 TJm\n(pro) 13.2801 Tj\n15 TJm\n(vide) 17.1556 Tj\n-346 TJm\n(input) 20.4831 Tj\n-346 TJm\n(and) 14.386 Tj\n-346 TJm\n(remo) 20.4731 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-347 TJm\n(output) 25.4644 Tj\n-346 TJm\n(as) 8.2988 Tj\n-346 TJm\n(described) 38.1767 Tj\n-346 TJm\n(abo) 14.386 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(e,) 6.914 Tj\n-371 TJm\n(and) 14.386 Tj\n-346 TJm\n(repeatedly) 41.4942 Tj\n-346 TJm\n(call) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n422.638 279.24 Td\n/F124_0 9.9626 Tf\n(BZ2_bzDecompress) 95.641 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n521.729 279.24 Td\n/F122_0 9.9626 Tf\n(until) 18.2714 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 267.285 Td\n/F124_0 9.9626 Tf\n(BZ_STREAM_END) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n152.314 267.285 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-262 TJm\n(returned.) 35.686 Tj\n-344 TJm\n(Appearance) 47.5714 Tj\n-262 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n261.767 267.285 Td\n/F124_0 9.9626 Tf\n(BZ_STREAM_END) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n342.081 267.285 Td\n/F122_0 9.9626 Tf\n(denotes) 30.4357 Tj\n-262 TJm\n(that) 14.9439 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n392.672 267.285 Td\n/F124_0 9.9626 Tf\n(BZ2_bzDecompress) 95.641 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n490.919 267.285 Td\n/F122_0 9.9626 Tf\n(has) 13.2801 Tj\n-262 TJm\n(detected) 33.1954 Tj\n72 255.33 Td\n(the) 12.1743 Tj\n-212 TJm\n(logical) 27.1182 Tj\n-212 TJm\n(end) 14.386 Tj\n-211 TJm\n(of) 8.2988 Tj\n-212 TJm\n(the) 12.1743 Tj\n-212 TJm\n(compressed) 47.0334 Tj\n-212 TJm\n(stream.) 29.0509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n237.858 255.33 Td\n/F124_0 9.9626 Tf\n(BZ2_bzDecompress) 95.641 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n335.609 255.33 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-212 TJm\n(not) 12.7322 Tj\n-212 TJm\n(produce) 32.0895 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n402.263 255.33 Td\n/F124_0 9.9626 Tf\n(BZ_STREAM_END) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n482.082 255.33 Td\n/F122_0 9.9626 Tf\n(until) 18.2714 Tj\n-212 TJm\n(all) 9.9626 Tj\n-212 TJm\n(output) 25.4644 Tj\n72 243.375 Td\n(data) 16.5977 Tj\n-256 TJm\n(has) 13.2801 Tj\n-256 TJm\n(been) 18.8094 Tj\n-255 TJm\n(placed) 26.0024 Tj\n-256 TJm\n(into) 15.5018 Tj\n-256 TJm\n(the) 12.1743 Tj\n-256 TJm\n(output) 25.4644 Tj\n-256 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n40 TJm\n(,) 2.4907 Tj\n-257 TJm\n(so) 8.8568 Tj\n-256 TJm\n(once) 18.8094 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n278.979 243.375 Td\n/F124_0 9.9626 Tf\n(BZ_STREAM_END) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n359.236 243.375 Td\n/F122_0 9.9626 Tf\n(appears,) 32.9164 Tj\n-257 TJm\n(you) 14.9439 Tj\n-256 TJm\n(are) 12.1643 Tj\n-256 TJm\n(guaranteed) 43.7059 Tj\n-256 TJm\n(to) 7.7509 Tj\n-255 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-256 TJm\n(a) 4.4234 Tj\n20 TJm\n(v) 4.9813 Tj\n25 TJm\n(ailable) 26.5603 Tj\n72 231.419 Td\n(all) 9.9626 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(decompressed) 56.4381 Tj\n-250 TJm\n(output,) 27.9551 Tj\n-250 TJm\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n205.369 231.419 Td\n/F124_0 9.9626 Tf\n(BZ2_bzDecompressEnd) 113.5736 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n321.433 231.419 Td\n/F122_0 9.9626 Tf\n(can) 13.8281 Tj\n-250 TJm\n(safely) 23.7907 Tj\n-250 TJm\n(be) 9.4047 Tj\n-250 TJm\n(called.) 26.2813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 209.502 Td\n(If) 6.6351 Tj\n-250 TJm\n(case) 17.1456 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(an) 9.4047 Tj\n-250 TJm\n(error) 19.3573 Tj\n-250 TJm\n(return) 23.7907 Tj\n-250 TJm\n(v) 4.9813 Tj\n25 TJm\n(alue,) 19.0883 Tj\n-250 TJm\n(you) 14.9439 Tj\n-250 TJm\n(should) 26.5703 Tj\n-250 TJm\n(call) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n261.259 209.502 Td\n/F124_0 9.9626 Tf\n(BZ2_bzDecompressEnd) 113.5736 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n377.323 209.502 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-250 TJm\n(clean) 21.0211 Tj\n-250 TJm\n(up) 9.9626 Tj\n-250 TJm\n(and) 14.386 Tj\n-250 TJm\n(release) 27.6562 Tj\n-250 TJm\n(memory) 33.2053 Tj\n65 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 187.584 Td\n(Possible) 33.2153 Tj\n-250 TJm\n(return) 23.7907 Tj\n-250 TJm\n(v) 4.9813 Tj\n25 TJm\n(alues:) 23.2427 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 50.951 Td\n(17) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 18 21\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n419.067 749.245 Td\n/F122_0 9.9626 Tf\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n496.556 749.245 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 540.672] cm\n0 0 468 179.328 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 711.631 Td\n/F124_0 9.9626 Tf\n(BZ_PARAM_ERROR) 83.6858 Tj\n98.488 699.676 Td\n(if) 11.9551 Tj\n-426 TJm\n(strm) 23.9102 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(NULL) 23.9102 Tj\n-426 TJm\n(or) 11.9551 Tj\n-426 TJm\n(strm->s) 41.8429 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(NULL) 23.9102 Tj\n98.488 687.721 Td\n(or) 11.9551 Tj\n-426 TJm\n(strm->avail_out) 89.6634 Tj\n-426 TJm\n(<) 5.9776 Tj\n-426 TJm\n(1) 5.9776 Tj\n90 675.766 Td\n(BZ_DATA_ERROR) 77.7083 Tj\n98.488 663.811 Td\n(if) 11.9551 Tj\n-426 TJm\n(a) 5.9776 Tj\n-426 TJm\n(data) 23.9102 Tj\n-426 TJm\n(integrity) 53.798 Tj\n-426 TJm\n(error) 29.8878 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(detected) 47.8205 Tj\n-426 TJm\n(in) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(compressed) 59.7756 Tj\n-426 TJm\n(stream) 35.8654 Tj\n90 651.856 Td\n(BZ_DATA_ERROR_MAGIC) 113.5736 Tj\n98.488 639.9 Td\n(if) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(compressed) 59.7756 Tj\n-426 TJm\n(stream) 35.8654 Tj\n-426 TJm\n(doesn't) 41.8429 Tj\n-426 TJm\n(begin) 29.8878 Tj\n-426 TJm\n(with) 23.9102 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(right) 29.8878 Tj\n-426 TJm\n(magic) 29.8878 Tj\n-426 TJm\n(bytes) 29.8878 Tj\n90 627.945 Td\n(BZ_MEM_ERROR) 71.7307 Tj\n98.488 615.99 Td\n(if) 11.9551 Tj\n-426 TJm\n(there) 29.8878 Tj\n-426 TJm\n(wasn't) 35.8654 Tj\n-426 TJm\n(enough) 35.8654 Tj\n-426 TJm\n(memory) 35.8654 Tj\n-426 TJm\n(available) 53.798 Tj\n90 604.035 Td\n(BZ_STREAM_END) 77.7083 Tj\n98.488 592.08 Td\n(if) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(logical) 41.8429 Tj\n-426 TJm\n(end) 17.9327 Tj\n-426 TJm\n(of) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(data) 23.9102 Tj\n-426 TJm\n(stream) 35.8654 Tj\n-426 TJm\n(was) 17.9327 Tj\n-426 TJm\n(detected) 47.8205 Tj\n-426 TJm\n(and) 17.9327 Tj\n-426 TJm\n(all) 17.9327 Tj\n98.488 580.124 Td\n(output) 35.8654 Tj\n-426 TJm\n(in) 11.9551 Tj\n-426 TJm\n(has) 17.9327 Tj\n-426 TJm\n(been) 23.9102 Tj\n-426 TJm\n(consumed,) 53.798 Tj\n-426 TJm\n(eg) 11.9551 Tj\n-426 TJm\n(s-->avail_out) 77.7083 Tj\n-426 TJm\n(>) 5.9776 Tj\n-426 TJm\n(0) 5.9776 Tj\n90 568.169 Td\n(BZ_OK) 29.8878 Tj\n98.488 556.214 Td\n(otherwise) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 518.755 Td\n/F122_0 9.9626 Tf\n(Allo) 17.7135 Tj\n25 TJm\n(w) 7.193 Tj\n10 TJm\n(able) 16.5977 Tj\n-250 TJm\n(ne) 9.4047 Tj\n15 TJm\n(xt) 7.7509 Tj\n-250 TJm\n(actions:) 30.9936 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 457.883] cm\n0 0 468 59.776 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 509.29 Td\n/F124_0 9.9626 Tf\n(BZ2_bzDecompress) 95.641 Tj\n98.488 497.335 Td\n(if) 11.9551 Tj\n-426 TJm\n(BZ_OK) 29.8878 Tj\n-426 TJm\n(was) 17.9327 Tj\n-426 TJm\n(returned) 47.8205 Tj\n90 485.38 Td\n(BZ2_bzDecompressEnd) 113.5736 Tj\n98.488 473.425 Td\n(otherwise) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 427.262 Td\n/F116_0 17.2154 Tf\n(3.3.6.) 43.0729 Tj\n-278 TJm\n(BZ2_bzDecompressEnd) 197.0647 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 398.792] cm\n0 0 468 23.91 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 414.334 Td\n/F124_0 9.9626 Tf\n(int) 17.9327 Tj\n-426 TJm\n(BZ2_bzDecompressEnd) 113.5736 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(bz_stream) 53.798 Tj\n298.259 412.59 Td\n(*) 5.9776 Tj\n304.236 414.334 Td\n(strm) 23.9102 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 376.874 Td\n/F122_0 9.9626 Tf\n(Releases) 34.8591 Tj\n-250 TJm\n(all) 9.9626 Tj\n-250 TJm\n(memory) 33.2053 Tj\n-250 TJm\n(associated) 40.9463 Tj\n-250 TJm\n(with) 17.7135 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(decompression) 59.7656 Tj\n-250 TJm\n(stream.) 29.0509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 354.956 Td\n(Possible) 33.2153 Tj\n-250 TJm\n(return) 23.7907 Tj\n-250 TJm\n(v) 4.9813 Tj\n25 TJm\n(alues:) 23.2427 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 294.085] cm\n0 0 468 59.776 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 345.492 Td\n/F124_0 9.9626 Tf\n(BZ_PARAM_ERROR) 83.6858 Tj\n98.488 333.537 Td\n(if) 11.9551 Tj\n-426 TJm\n(strm) 23.9102 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(NULL) 23.9102 Tj\n-426 TJm\n(or) 11.9551 Tj\n-426 TJm\n(strm->s) 41.8429 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(NULL) 23.9102 Tj\n90 321.581 Td\n(BZ_OK) 29.8878 Tj\n98.488 309.626 Td\n(otherwise) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 272.167 Td\n/F122_0 9.9626 Tf\n(Allo) 17.7135 Tj\n25 TJm\n(w) 7.193 Tj\n10 TJm\n(able) 16.5977 Tj\n-250 TJm\n(ne) 9.4047 Tj\n15 TJm\n(xt) 7.7509 Tj\n-250 TJm\n(actions:) 30.9936 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 247.161] cm\n0 0 468 23.91 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n98.488 262.702 Td\n/F124_0 9.9626 Tf\n(None.) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 212.408 Td\n/F116_0 20.6585 Tf\n(3.4.) 34.4584 Tj\n-278 TJm\n(High-le) 70.0117 Tj\n15 TJm\n(vel) 28.7153 Tj\n-278 TJm\n(interface) 86.1046 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 190.49 Td\n/F122_0 9.9626 Tf\n(This) 17.7135 Tj\n-250 TJm\n(interf) 21.579 Tj\n10 TJm\n(ace) 13.2702 Tj\n-250 TJm\n(pro) 13.2801 Tj\n15 TJm\n(vides) 21.031 Tj\n-250 TJm\n(functions) 37.0808 Tj\n-250 TJm\n(for) 11.6164 Tj\n-250 TJm\n(reading) 29.8778 Tj\n-250 TJm\n(and) 14.386 Tj\n-250 TJm\n(writing) 28.782 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n300.292 190.49 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n332.67 190.49 Td\n/F122_0 9.9626 Tf\n(format) 26.5603 Tj\n-250 TJm\n(\\002les.) 19.0983 Tj\n-620 TJm\n(First,) 20.7621 Tj\n-250 TJm\n(some) 21.031 Tj\n-250 TJm\n(general) 29.3199 Tj\n-250 TJm\n(points.) 26.8492 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 158.609 Td\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-450 TJm\n(All) 12.7322 Tj\n-353 TJm\n(of) 8.2988 Tj\n-352 TJm\n(the) 12.1743 Tj\n-353 TJm\n(functions) 37.0808 Tj\n-352 TJm\n(tak) 12.1743 Tj\n10 TJm\n(e) 4.4234 Tj\n-353 TJm\n(an) 9.4047 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n199.726 158.609 Td\n/F124_0 9.9626 Tf\n(int) 17.9327 Tj\n217.658 156.866 Td\n(*) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n227.149 158.609 Td\n/F122_0 9.9626 Tf\n(\\002rst) 15.5018 Tj\n-353 TJm\n(ar) 7.7409 Tj\n18 TJm\n(gument,) 32.3785 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n289.871 158.609 Td\n/F124_0 9.9626 Tf\n(bzerror) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n331.715 158.609 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-1236 TJm\n(After) 21.0211 Tj\n-352 TJm\n(each) 18.2515 Tj\n-353 TJm\n(call,) 16.8766 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n413.457 158.609 Td\n/F124_0 9.9626 Tf\n(bzerror) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n458.813 158.609 Td\n/F122_0 9.9626 Tf\n(should) 26.5703 Tj\n-353 TJm\n(be) 9.4047 Tj\n-352 TJm\n(consulted) 38.1866 Tj\n81.963 146.654 Td\n(\\002rst) 15.5018 Tj\n-371 TJm\n(to) 7.7509 Tj\n-371 TJm\n(determine) 39.8404 Tj\n-372 TJm\n(the) 12.1743 Tj\n-371 TJm\n(outcome) 34.3112 Tj\n-371 TJm\n(of) 8.2988 Tj\n-371 TJm\n(the) 12.1743 Tj\n-372 TJm\n(call.) 16.8766 Tj\n-1347 TJm\n(If) 6.6351 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n278.539 146.654 Td\n/F124_0 9.9626 Tf\n(bzerror) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n324.081 146.654 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n334.424 146.654 Td\n/F124_0 9.9626 Tf\n(BZ_OK) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n364.312 146.654 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-371 TJm\n(the) 12.1743 Tj\n-372 TJm\n(call) 14.386 Tj\n-371 TJm\n(completed) 41.5042 Tj\n-371 TJm\n(successfully) 48.6972 Tj\n65 TJm\n(,) 2.4907 Tj\n-402 TJm\n(and) 14.386 Tj\n-371 TJm\n(only) 17.7135 Tj\n81.963 134.699 Td\n(then) 17.1556 Tj\n-292 TJm\n(should) 26.5703 Tj\n-293 TJm\n(the) 12.1743 Tj\n-292 TJm\n(return) 23.7907 Tj\n-292 TJm\n(v) 4.9813 Tj\n25 TJm\n(alue) 16.5977 Tj\n-293 TJm\n(of) 8.2988 Tj\n-292 TJm\n(the) 12.1743 Tj\n-292 TJm\n(function) 33.2053 Tj\n-293 TJm\n(\\(if) 9.4047 Tj\n-292 TJm\n(an) 9.4047 Tj\n15 TJm\n(y\\)) 8.2988 Tj\n-292 TJm\n(be) 9.4047 Tj\n-293 TJm\n(consulted.) 40.6773 Tj\n-874 TJm\n(If) 6.6351 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n363.994 134.699 Td\n/F124_0 9.9626 Tf\n(bzerror) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n408.749 134.699 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n418.307 134.699 Td\n/F124_0 9.9626 Tf\n(BZ_IO_ERROR) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n484.06 134.699 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-292 TJm\n(there) 19.9152 Tj\n-293 TJm\n(w) 7.193 Tj\n10 TJm\n(as) 8.2988 Tj\n-292 TJm\n(an) 9.4047 Tj\n81.963 122.744 Td\n(error) 19.3573 Tj\n-279 TJm\n(reading/writ) 48.6972 Tj\n1 TJm\n(ing) 12.7322 Tj\n-279 TJm\n(the) 12.1743 Tj\n-279 TJm\n(underlying) 43.1679 Tj\n-278 TJm\n(compressed) 47.0334 Tj\n-279 TJm\n(\\002le,) 15.2229 Tj\n-285 TJm\n(and) 14.386 Tj\n-279 TJm\n(you) 14.9439 Tj\n-279 TJm\n(should) 26.5703 Tj\n-278 TJm\n(then) 17.1556 Tj\n-279 TJm\n(consult) 28.782 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n412.785 122.744 Td\n/F124_0 9.9626 Tf\n(errno) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n445.448 122.744 Td\n/F122_0 9.9626 Tf\n(/) 2.7696 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n450.993 122.744 Td\n/F124_0 9.9626 Tf\n(perror) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n489.634 122.744 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-279 TJm\n(determine) 39.8404 Tj\n81.963 110.789 Td\n(the) 12.1743 Tj\n-376 TJm\n(cause) 22.1269 Tj\n-376 TJm\n(of) 8.2988 Tj\n-377 TJm\n(the) 12.1743 Tj\n-376 TJm\n(dif) 11.0684 Tj\n25 TJm\n(\\002culty) 25.4644 Tj\n65 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n203.58 110.789 Td\n/F124_0 9.9626 Tf\n(bzerror) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n249.171 110.789 Td\n/F122_0 9.9626 Tf\n(may) 17.1556 Tj\n-376 TJm\n(also) 16.0497 Tj\n-376 TJm\n(be) 9.4047 Tj\n-377 TJm\n(set) 11.0684 Tj\n-376 TJm\n(to) 7.7509 Tj\n-376 TJm\n(v) 4.9813 Tj\n25 TJm\n(arious) 24.3486 Tj\n-376 TJm\n(other) 20.4731 Tj\n-377 TJm\n(v) 4.9813 Tj\n25 TJm\n(alues;) 23.2427 Tj\n-439 TJm\n(precise) 28.2141 Tj\n-376 TJm\n(details) 26.0123 Tj\n-376 TJm\n(are) 12.1643 Tj\n-377 TJm\n(gi) 7.7509 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(en) 9.4047 Tj\n-376 TJm\n(on) 9.9626 Tj\n-376 TJm\n(a) 4.4234 Tj\n81.963 98.834 Td\n(per) 12.7222 Tj\n20 TJm\n(-function) 36.5229 Tj\n-250 TJm\n(basis) 19.9252 Tj\n-250 TJm\n(belo) 17.1556 Tj\n25 TJm\n(w) 7.193 Tj\n65 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 50.951 Td\n(18) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 19 22\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n419.067 749.245 Td\n/F122_0 9.9626 Tf\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n496.556 749.245 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n74.491 710.037 Td\n/F122_0 9.9626 Tf\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-450 TJm\n(If) 6.6351 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n91.793 710.037 Td\n/F124_0 9.9626 Tf\n(bzerror) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n136.332 710.037 Td\n/F122_0 9.9626 Tf\n(indicates) 35.417 Tj\n-271 TJm\n(an) 9.4047 Tj\n-270 TJm\n(error) 19.3573 Tj\n-271 TJm\n(\\(ie,) 13.0012 Tj\n-276 TJm\n(an) 9.4047 Tj\n15 TJm\n(ything) 25.4644 Tj\n-271 TJm\n(e) 4.4234 Tj\n15 TJm\n(xcept) 21.579 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n290.317 710.037 Td\n/F124_0 9.9626 Tf\n(BZ_OK) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n322.901 710.037 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n339.984 710.037 Td\n/F124_0 9.9626 Tf\n(BZ_STREAM_END) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n417.693 710.037 Td\n/F122_0 9.9626 Tf\n(\\),) 5.8082 Tj\n-271 TJm\n(you) 14.9439 Tj\n-270 TJm\n(should) 26.5703 Tj\n-271 TJm\n(immediately) 49.813 Tj\n-271 TJm\n(call) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n81.963 698.082 Td\n/F124_0 9.9626 Tf\n(BZ2_bzReadClose) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n173.971 698.082 Td\n/F122_0 9.9626 Tf\n(\\(or) 11.6164 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n187.932 698.082 Td\n/F124_0 9.9626 Tf\n(BZ2_bzWriteClose) 95.641 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n283.573 698.082 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-238 TJm\n(depending) 41.5042 Tj\n-236 TJm\n(on) 9.9626 Tj\n-235 TJm\n(whether) 32.0895 Tj\n-235 TJm\n(you) 14.9439 Tj\n-236 TJm\n(are) 12.1643 Tj\n-235 TJm\n(attempting) 42.62 Tj\n-235 TJm\n(to) 7.7509 Tj\n-236 TJm\n(read) 17.1456 Tj\n-235 TJm\n(or) 8.2988 Tj\n-235 TJm\n(to) 7.7509 Tj\n-236 TJm\n(write\\)) 23.7907 Tj\n-235 TJm\n(to) 7.7509 Tj\n81.963 686.127 Td\n(free) 15.4819 Tj\n-309 TJm\n(up) 9.9626 Tj\n-309 TJm\n(all) 9.9626 Tj\n-309 TJm\n(resources) 37.6188 Tj\n-310 TJm\n(associated) 40.9463 Tj\n-309 TJm\n(with) 17.7135 Tj\n-309 TJm\n(the) 12.1743 Tj\n-309 TJm\n(stream.) 29.0509 Tj\n-975 TJm\n(Once) 21.0211 Tj\n-309 TJm\n(an) 9.4047 Tj\n-310 TJm\n(error) 19.3573 Tj\n-309 TJm\n(has) 13.2801 Tj\n-309 TJm\n(been) 18.8094 Tj\n-309 TJm\n(indicated,) 39.0135 Tj\n-324 TJm\n(beha) 18.8094 Tj\n20 TJm\n(viour) 21.031 Tj\n-309 TJm\n(of) 8.2988 Tj\n-309 TJm\n(all) 9.9626 Tj\n-310 TJm\n(calls) 18.2614 Tj\n-309 TJm\n(e) 4.4234 Tj\n15 TJm\n(xcept) 21.579 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n81.963 674.172 Td\n/F124_0 9.9626 Tf\n(BZ2_bzReadClose) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n175.035 674.172 Td\n/F122_0 9.9626 Tf\n(\\() 3.3175 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n178.352 674.172 Td\n/F124_0 9.9626 Tf\n(BZ2_bzWriteClose) 95.641 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n273.994 674.172 Td\n/F122_0 9.9626 Tf\n(\\)) 3.3175 Tj\n-342 TJm\n(is) 6.6451 Tj\n-342 TJm\n(unde\\002ned.) 41.7831 Tj\n-1173 TJm\n(The) 15.4918 Tj\n-342 TJm\n(implication) 45.3896 Tj\n-342 TJm\n(is) 6.6451 Tj\n-342 TJm\n(that) 14.9439 Tj\n-342 TJm\n(\\(1\\)) 11.6164 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n455.366 674.172 Td\n/F124_0 9.9626 Tf\n(bzerror) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n500.617 674.172 Td\n/F122_0 9.9626 Tf\n(should) 26.5703 Tj\n-342 TJm\n(be) 9.4047 Tj\n81.963 662.217 Td\n(check) 23.2328 Tj\n10 TJm\n(ed) 9.4047 Tj\n-331 TJm\n(after) 18.2515 Tj\n-331 TJm\n(each) 18.2515 Tj\n-331 TJm\n(call,) 16.8766 Tj\n-351 TJm\n(and) 14.386 Tj\n-331 TJm\n(\\(2\\)) 11.6164 Tj\n-331 TJm\n(if) 6.0871 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n223.255 662.217 Td\n/F124_0 9.9626 Tf\n(bzerror) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n268.396 662.217 Td\n/F122_0 9.9626 Tf\n(indicates) 35.417 Tj\n-331 TJm\n(an) 9.4047 Tj\n-331 TJm\n(error) 19.3573 Tj\n40 TJm\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n344.762 662.217 Td\n/F124_0 9.9626 Tf\n(BZ2_bzReadClose) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n437.724 662.217 Td\n/F122_0 9.9626 Tf\n(\\() 3.3175 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n441.041 662.217 Td\n/F124_0 9.9626 Tf\n(BZ2_bzWriteClose) 95.641 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n536.682 662.217 Td\n/F122_0 9.9626 Tf\n(\\)) 3.3175 Tj\n81.963 650.261 Td\n(should) 26.5703 Tj\n-250 TJm\n(then) 17.1556 Tj\n-250 TJm\n(be) 9.4047 Tj\n-250 TJm\n(called) 23.7907 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(clean) 21.0211 Tj\n-250 TJm\n(up.) 12.4533 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 628.344 Td\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-450 TJm\n(The) 15.4918 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n100.186 628.344 Td\n/F124_0 9.9626 Tf\n(FILE) 23.9102 Tj\n124.097 626.6 Td\n(*) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n132.308 628.344 Td\n/F122_0 9.9626 Tf\n(ar) 7.7409 Tj\n18 TJm\n(guments) 33.7633 Tj\n-224 TJm\n(passed) 26.5603 Tj\n-224 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n214.645 628.344 Td\n/F124_0 9.9626 Tf\n(BZ2_bzReadOpen) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n300.565 628.344 Td\n/F122_0 9.9626 Tf\n(/) 2.7696 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n305.569 628.344 Td\n/F124_0 9.9626 Tf\n(BZ2_bzWriteOpen) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n397.466 628.344 Td\n/F122_0 9.9626 Tf\n(should) 26.5703 Tj\n-224 TJm\n(be) 9.4047 Tj\n-224 TJm\n(set) 11.0684 Tj\n-225 TJm\n(to) 7.7509 Tj\n-224 TJm\n(binary) 25.4544 Tj\n-224 TJm\n(mode.) 24.6275 Tj\n-603 TJm\n(Most) 20.4831 Tj\n81.963 616.389 Td\n(Unix) 19.9252 Tj\n-269 TJm\n(systems) 31.5516 Tj\n-270 TJm\n(will) 15.5018 Tj\n-269 TJm\n(do) 9.9626 Tj\n-269 TJm\n(this) 14.396 Tj\n-270 TJm\n(by) 9.9626 Tj\n-269 TJm\n(def) 12.7222 Tj\n10 TJm\n(ault,) 17.4346 Tj\n-274 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-270 TJm\n(ot) 7.7509 Tj\n1 TJm\n(her) 12.7222 Tj\n-270 TJm\n(platforms,) 40.6773 Tj\n-274 TJm\n(including) 37.6387 Tj\n-269 TJm\n(W) 9.4047 Tj\n40 TJm\n(indo) 17.7135 Tj\n25 TJm\n(ws) 11.0684 Tj\n-270 TJm\n(and) 14.386 Tj\n-269 TJm\n(Mac,) 20.1942 Tj\n-274 TJm\n(will) 15.5018 Tj\n-270 TJm\n(not.) 15.2229 Tj\n-736 TJm\n(If) 6.6351 Tj\n-269 TJm\n(you) 14.9439 Tj\n-269 TJm\n(omit) 18.2714 Tj\n-270 TJm\n(this,) 16.8866 Tj\n81.963 604.433 Td\n(you) 14.9439 Tj\n-250 TJm\n(may) 17.1556 Tj\n-250 TJm\n(encounter) 39.2825 Tj\n-250 TJm\n(problems) 37.0808 Tj\n-250 TJm\n(when) 21.579 Tj\n-250 TJm\n(mo) 12.7322 Tj\n15 TJm\n(ving) 17.7135 Tj\n-250 TJm\n(code) 18.8094 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(ne) 9.4047 Tj\n25 TJm\n(w) 7.193 Tj\n-250 TJm\n(platforms.) 40.6773 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 582.516 Td\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-450 TJm\n(Memory) 34.3112 Tj\n-369 TJm\n(allocation) 39.2925 Tj\n-370 TJm\n(requests) 32.6474 Tj\n-369 TJm\n(are) 12.1643 Tj\n-370 TJm\n(handled) 31.5416 Tj\n-369 TJm\n(by) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n264.468 582.516 Td\n/F124_0 9.9626 Tf\n(malloc) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n304.014 582.516 Td\n/F122_0 9.9626 Tf\n(/) 2.7696 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n310.465 582.516 Td\n/F124_0 9.9626 Tf\n(free) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n334.376 582.516 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-1337 TJm\n(At) 9.9626 Tj\n-370 TJm\n(present) 28.772 Tj\n-369 TJm\n(there) 19.9152 Tj\n-370 TJm\n(is) 6.6451 Tj\n-369 TJm\n(no) 9.9626 Tj\n-370 TJm\n(f) 3.3175 Tj\n10 TJm\n(acility) 24.9065 Tj\n-369 TJm\n(for) 11.6164 Tj\n-370 TJm\n(user) 16.5977 Tj\n20 TJm\n(-de\\002ned) 32.6474 Tj\n81.963 570.56 Td\n(memory) 33.2053 Tj\n-250 TJm\n(allocators) 38.7346 Tj\n-250 TJm\n(in) 7.7509 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(\\002le) 12.7322 Tj\n-250 TJm\n(I/O) 13.2801 Tj\n-250 TJm\n(functions) 37.0808 Tj\n-250 TJm\n(\\(could) 25.4544 Tj\n-250 TJm\n(easily) 23.2427 Tj\n-250 TJm\n(be) 9.4047 Tj\n-250 TJm\n(added,) 26.2813 Tj\n-250 TJm\n(though\\).) 33.4843 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 529.977 Td\n/F116_0 17.2154 Tf\n(3.4.1.) 43.0729 Tj\n-278 TJm\n(BZ2_bzReadOpen) 147.3122 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 453.686] cm\n0 0 468 71.731 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 517.048 Td\n/F124_0 9.9626 Tf\n(typedef) 41.8429 Tj\n-426 TJm\n(void) 23.9102 Tj\n-426 TJm\n(BZFILE;) 41.8429 Tj\n90 493.138 Td\n(BZFILE) 35.8654 Tj\n130.109 491.394 Td\n(*) 5.9776 Tj\n136.087 493.138 Td\n(BZ2_bzReadOpen\\() 89.6634 Tj\n-426 TJm\n(int) 17.9327 Tj\n252.171 491.394 Td\n(*) 5.9776 Tj\n258.149 493.138 Td\n(bzerror,) 47.8205 Tj\n-426 TJm\n(FILE) 23.9102 Tj\n338.368 491.394 Td\n(*) 5.9776 Tj\n344.346 493.138 Td\n(f,) 11.9551 Tj\n191.855 481.183 Td\n(int) 17.9327 Tj\n-426 TJm\n(verbosity,) 59.7756 Tj\n-426 TJm\n(int) 17.9327 Tj\n-426 TJm\n(small,) 35.8654 Tj\n191.855 469.228 Td\n(void) 23.9102 Tj\n220.01 467.484 Td\n(*) 5.9776 Tj\n225.987 469.228 Td\n(unused,) 41.8429 Tj\n-426 TJm\n(int) 17.9327 Tj\n-426 TJm\n(nUnused) 41.8429 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 431.768 Td\n/F122_0 9.9626 Tf\n(Prepare) 30.4258 Tj\n-290 TJm\n(to) 7.7509 Tj\n-289 TJm\n(read) 17.1456 Tj\n-290 TJm\n(compressed) 47.0334 Tj\n-290 TJm\n(data) 16.5977 Tj\n-289 TJm\n(from) 19.3673 Tj\n-290 TJm\n(\\002le) 12.7322 Tj\n-289 TJm\n(handle) 26.5603 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n272.697 431.768 Td\n/F124_0 9.9626 Tf\n(f) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n278.675 431.768 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n285.439 431.768 Td\n/F124_0 9.9626 Tf\n(f) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n294.302 431.768 Td\n/F122_0 9.9626 Tf\n(should) 26.5703 Tj\n-290 TJm\n(refer) 18.7994 Tj\n-289 TJm\n(to) 7.7509 Tj\n-290 TJm\n(a) 4.4234 Tj\n-290 TJm\n(\\002le) 12.7322 Tj\n-289 TJm\n(which) 24.3486 Tj\n-290 TJm\n(has) 13.2801 Tj\n-290 TJm\n(been) 18.8094 Tj\n-289 TJm\n(opened) 28.772 Tj\n-290 TJm\n(for) 11.6164 Tj\n-289 TJm\n(reading,) 32.3685 Tj\n-300 TJm\n(and) 14.386 Tj\n72 419.813 Td\n(for) 11.6164 Tj\n-306 TJm\n(which) 24.3486 Tj\n-305 TJm\n(the) 12.1743 Tj\n-306 TJm\n(error) 19.3573 Tj\n-306 TJm\n(indicator) 35.417 Tj\n-305 TJm\n(\\() 3.3175 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n193.457 419.813 Td\n/F124_0 9.9626 Tf\n(ferror\\(f\\)) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n247.255 419.813 Td\n/F122_0 9.9626 Tf\n(\\)is) 9.9626 Tj\n-306 TJm\n(not) 12.7322 Tj\n-305 TJm\n(set.) 13.5591 Tj\n-954 TJm\n(If) 6.6351 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n308.784 419.813 Td\n/F124_0 9.9626 Tf\n(small) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n341.717 419.813 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-306 TJm\n(1,) 7.472 Tj\n-319 TJm\n(the) 12.1743 Tj\n-306 TJm\n(library) 26.5603 Tj\n-306 TJm\n(wil) 12.7322 Tj\n1 TJm\n(l) 2.7696 Tj\n-306 TJm\n(try) 11.0684 Tj\n-306 TJm\n(to) 7.7509 Tj\n-305 TJm\n(decompress) 47.0334 Tj\n-306 TJm\n(using) 21.589 Tj\n-306 TJm\n(less) 14.9439 Tj\n72 407.858 Td\n(memory) 33.2053 Tj\n65 TJm\n(,) 2.4907 Tj\n-250 TJm\n(at) 7.193 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(e) 4.4234 Tj\n15 TJm\n(xpense) 27.6661 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(speed.) 25.1755 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 385.94 Td\n(F) 5.5392 Tj\n15 TJm\n(or) 8.2988 Tj\n-227 TJm\n(reasons) 29.8778 Tj\n-227 TJm\n(e) 4.4234 Tj\n15 TJm\n(xplained) 34.3112 Tj\n-228 TJm\n(belo) 17.1556 Tj\n25 TJm\n(w) 7.193 Tj\n65 TJm\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n189.193 385.94 Td\n/F124_0 9.9626 Tf\n(BZ2_bzRead) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n251.232 385.94 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-227 TJm\n(decompress) 47.0334 Tj\n-227 TJm\n(the) 12.1743 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n332.732 385.94 Td\n/F124_0 9.9626 Tf\n(nUnused) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n376.838 385.94 Td\n/F122_0 9.9626 Tf\n(bytes) 21.031 Tj\n-227 TJm\n(starting) 29.8878 Tj\n-227 TJm\n(at) 7.193 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n441.74 385.94 Td\n/F124_0 9.9626 Tf\n(unused) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n477.605 385.94 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-232 TJm\n(before) 25.4445 Tj\n-227 TJm\n(starting) 29.8878 Tj\n72 373.985 Td\n(to) 7.7509 Tj\n-280 TJm\n(read) 17.1456 Tj\n-279 TJm\n(from) 19.3673 Tj\n-280 TJm\n(the) 12.1743 Tj\n-279 TJm\n(\\002le) 12.7322 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n155.094 373.985 Td\n/F124_0 9.9626 Tf\n(f) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n161.072 373.985 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-797 TJm\n(At) 9.9626 Tj\n-280 TJm\n(most) 19.3773 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n206.414 373.985 Td\n/F124_0 9.9626 Tf\n(BZ_MAX_UNUSED) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n286.907 373.985 Td\n/F122_0 9.9626 Tf\n(bytes) 21.031 Tj\n-280 TJm\n(may) 17.1556 Tj\n-279 TJm\n(be) 9.4047 Tj\n-280 TJm\n(supplied) 33.7633 Tj\n-279 TJm\n(lik) 10.5205 Tj\n10 TJm\n(e) 4.4234 Tj\n-280 TJm\n(this.) 16.8866 Tj\n-797 TJm\n(If) 6.6351 Tj\n-279 TJm\n(this) 14.396 Tj\n-280 TJm\n(f) 3.3175 Tj\n10 TJm\n(acility) 24.9065 Tj\n-279 TJm\n(is) 6.6451 Tj\n-280 TJm\n(not) 12.7322 Tj\n-279 TJm\n(required,) 35.686 Tj\n72 362.03 Td\n(you) 14.9439 Tj\n-250 TJm\n(should) 26.5703 Tj\n-250 TJm\n(pass) 17.1556 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n138.141 362.03 Td\n/F124_0 9.9626 Tf\n(NULL) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n164.542 362.03 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n181.419 362.03 Td\n/F124_0 9.9626 Tf\n(0) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n189.887 362.03 Td\n/F122_0 9.9626 Tf\n(for) 11.6164 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n203.994 362.03 Td\n/F124_0 9.9626 Tf\n(unused) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n242.35 362.03 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n-250 TJm\n(n) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n264.208 362.03 Td\n/F124_0 9.9626 Tf\n(Unused) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n302.565 362.03 Td\n/F122_0 9.9626 Tf\n(respecti) 30.9837 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(ely) 12.1743 Tj\n65 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 340.112 Td\n(F) 5.5392 Tj\n15 TJm\n(or) 8.2988 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(meaning) 34.3112 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(parameters) 43.7059 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n196.631 340.112 Td\n/F124_0 9.9626 Tf\n(small) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n229.01 340.112 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n245.887 340.112 Td\n/F124_0 9.9626 Tf\n(verbosity) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n299.685 340.112 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-250 TJm\n(see) 12.7222 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n319.879 340.112 Td\n/F124_0 9.9626 Tf\n(BZ2_bzDecompressInit) 119.5512 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n439.431 340.112 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 318.194 Td\n(The) 15.4918 Tj\n-402 TJm\n(amount) 29.8878 Tj\n-402 TJm\n(of) 8.2988 Tj\n-402 TJm\n(memory) 33.2053 Tj\n-402 TJm\n(needed) 28.2141 Tj\n-402 TJm\n(to) 7.7509 Tj\n-402 TJm\n(decompress) 47.0334 Tj\n-402 TJm\n(a) 4.4234 Tj\n-401 TJm\n(\\002le) 12.7322 Tj\n-402 TJm\n(cannot) 26.5603 Tj\n-402 TJm\n(be) 9.4047 Tj\n-402 TJm\n(determined) 44.8217 Tj\n-402 TJm\n(until) 18.2714 Tj\n-402 TJm\n(the) 12.1743 Tj\n-402 TJm\n(\\002le') 16.0497 Tj\n55 TJm\n(s) 3.8755 Tj\n-402 TJm\n(header) 26.5503 Tj\n-402 TJm\n(has) 13.2801 Tj\n-402 TJm\n(been) 18.8094 Tj\n-402 TJm\n(read.) 19.6363 Tj\n72 306.239 Td\n(So) 10.5205 Tj\n-492 TJm\n(it) 5.5392 Tj\n-491 TJm\n(is) 6.6451 Tj\n-492 TJm\n(possible) 32.6574 Tj\n-492 TJm\n(that) 14.9439 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n166.797 306.239 Td\n/F124_0 9.9626 Tf\n(BZ2_bzReadOpen) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n255.381 306.239 Td\n/F122_0 9.9626 Tf\n(returns) 27.6661 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n287.946 306.239 Td\n/F124_0 9.9626 Tf\n(BZ_OK) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n322.729 306.239 Td\n/F122_0 9.9626 Tf\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-492 TJm\n(a) 4.4234 Tj\n-491 TJm\n(subsequent) 44.2738 Tj\n-492 TJm\n(call) 14.386 Tj\n-492 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n431.135 306.239 Td\n/F124_0 9.9626 Tf\n(BZ2_bzRead) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n495.81 306.239 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-492 TJm\n(return) 23.7907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 294.284 Td\n/F124_0 9.9626 Tf\n(BZ_MEM_ERROR) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n143.731 294.284 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 272.366 Td\n(Possible) 33.2153 Tj\n-250 TJm\n(assignments) 48.7072 Tj\n-250 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n169.144 272.366 Td\n/F124_0 9.9626 Tf\n(bzerror) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n210.987 272.366 Td\n/F122_0 9.9626 Tf\n(:) 2.7696 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 101.84] cm\n0 0 468 167.372 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 260.844 Td\n/F124_0 9.9626 Tf\n(BZ_CONFIG_ERROR) 89.6634 Tj\n98.488 248.889 Td\n(if) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(library) 41.8429 Tj\n-426 TJm\n(has) 17.9327 Tj\n-426 TJm\n(been) 23.9102 Tj\n-426 TJm\n(mis-compiled) 71.7307 Tj\n90 236.934 Td\n(BZ_PARAM_ERROR) 83.6858 Tj\n98.488 224.979 Td\n(if) 11.9551 Tj\n-426 TJm\n(f) 5.9776 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(NULL) 23.9102 Tj\n98.488 213.023 Td\n(or) 11.9551 Tj\n-426 TJm\n(small) 29.8878 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(neither) 41.8429 Tj\n-426 TJm\n(0) 5.9776 Tj\n-426 TJm\n(nor) 17.9327 Tj\n-426 TJm\n(1) 5.9776 Tj\n98.488 201.068 Td\n(or) 11.9551 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(unused) 35.8654 Tj\n-426 TJm\n(==) 11.9551 Tj\n-426 TJm\n(NULL) 23.9102 Tj\n-426 TJm\n(&&) 11.9551 Tj\n-426 TJm\n(nUnused) 41.8429 Tj\n-426 TJm\n(!=) 11.9551 Tj\n-426 TJm\n(0) 5.9776 Tj\n-426 TJm\n(\\)) 5.9776 Tj\n98.488 189.113 Td\n(or) 11.9551 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(unused) 35.8654 Tj\n-426 TJm\n(!=) 11.9551 Tj\n-426 TJm\n(NULL) 23.9102 Tj\n-426 TJm\n(&&) 11.9551 Tj\n-426 TJm\n(!\\(0) 17.9327 Tj\n-426 TJm\n(<=) 11.9551 Tj\n-426 TJm\n(nUnused) 41.8429 Tj\n-426 TJm\n(<=) 11.9551 Tj\n-426 TJm\n(BZ_MAX_UNUSED\\)) 83.6858 Tj\n-426 TJm\n(\\)) 5.9776 Tj\n90 177.158 Td\n(BZ_IO_ERROR) 65.7532 Tj\n98.488 165.203 Td\n(if) 11.9551 Tj\n-426 TJm\n(ferror\\(f\\)) 53.798 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(nonzero) 41.8429 Tj\n90 153.248 Td\n(BZ_MEM_ERROR) 71.7307 Tj\n98.488 141.292 Td\n(if) 11.9551 Tj\n-426 TJm\n(insufficient) 71.7307 Tj\n-426 TJm\n(memory) 35.8654 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(available) 53.798 Tj\n90 129.337 Td\n(BZ_OK) 29.8878 Tj\n98.488 117.382 Td\n(otherwise.) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 79.922 Td\n/F122_0 9.9626 Tf\n(Possible) 33.2153 Tj\n-250 TJm\n(return) 23.7907 Tj\n-250 TJm\n(v) 4.9813 Tj\n25 TJm\n(alues:) 23.2427 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 51.071 Td\n(19) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 20 23\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n419.067 749.245 Td\n/F122_0 9.9626 Tf\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n496.556 749.245 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 660.224] cm\n0 0 468 59.776 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 711.631 Td\n/F124_0 9.9626 Tf\n(Pointer) 41.8429 Tj\n-426 TJm\n(to) 11.9551 Tj\n-426 TJm\n(an) 11.9551 Tj\n-426 TJm\n(abstract) 47.8205 Tj\n-426 TJm\n(BZFILE) 35.8654 Tj\n98.488 699.676 Td\n(if) 11.9551 Tj\n-426 TJm\n(bzerror) 41.8429 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(BZ_OK) 29.8878 Tj\n90 687.721 Td\n(NULL) 23.9102 Tj\n98.488 675.766 Td\n(otherwise) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 638.306 Td\n/F122_0 9.9626 Tf\n(Allo) 17.7135 Tj\n25 TJm\n(w) 7.193 Tj\n10 TJm\n(able) 16.5977 Tj\n-250 TJm\n(ne) 9.4047 Tj\n15 TJm\n(xt) 7.7509 Tj\n-250 TJm\n(actions:) 30.9936 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 577.435] cm\n0 0 468 59.776 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 628.842 Td\n/F124_0 9.9626 Tf\n(BZ2_bzRead) 59.7756 Tj\n98.488 616.887 Td\n(if) 11.9551 Tj\n-426 TJm\n(bzerror) 41.8429 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(BZ_OK) 29.8878 Tj\n90 604.932 Td\n(BZ2_bzClose) 65.7532 Tj\n98.488 592.976 Td\n(otherwise) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 546.814 Td\n/F116_0 17.2154 Tf\n(3.4.2.) 43.0729 Tj\n-278 TJm\n(BZ2_bzRead) 103.3096 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 519.841] cm\n0 0 468 23.91 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 535.383 Td\n/F124_0 9.9626 Tf\n(int) 17.9327 Tj\n-426 TJm\n(BZ2_bzRead) 59.7756 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(int) 17.9327 Tj\n208.595 533.639 Td\n(*) 5.9776 Tj\n214.572 535.383 Td\n(bzerror,) 47.8205 Tj\n-426 TJm\n(BZFILE) 35.8654 Tj\n306.747 533.639 Td\n(*) 5.9776 Tj\n312.724 535.383 Td\n(b,) 11.9551 Tj\n-426 TJm\n(void) 23.9102 Tj\n357.078 533.639 Td\n(*) 5.9776 Tj\n363.055 535.383 Td\n(buf,) 23.9102 Tj\n-426 TJm\n(int) 17.9327 Tj\n-426 TJm\n(len) 17.9327 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 497.923 Td\n/F122_0 9.9626 Tf\n(Reads) 24.3486 Tj\n-285 TJm\n(up) 9.9626 Tj\n-284 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n122.569 497.923 Td\n/F124_0 9.9626 Tf\n(len) 17.9327 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n143.337 497.923 Td\n/F122_0 9.9626 Tf\n(\\(uncompressed\\)) 63.6311 Tj\n-285 TJm\n(bytes) 21.031 Tj\n-284 TJm\n(from) 19.3673 Tj\n-285 TJm\n(the) 12.1743 Tj\n-284 TJm\n(compressed) 47.0334 Tj\n-285 TJm\n(\\002le) 12.7322 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n336.319 497.923 Td\n/F124_0 9.9626 Tf\n(b) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n345.132 497.923 Td\n/F122_0 9.9626 Tf\n(into) 15.5018 Tj\n-285 TJm\n(the) 12.1743 Tj\n-284 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n405.205 497.923 Td\n/F124_0 9.9626 Tf\n(buf) 17.9327 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n423.137 497.923 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-828 TJm\n(If) 6.6351 Tj\n-284 TJm\n(the) 12.1743 Tj\n-285 TJm\n(read) 17.1456 Tj\n-285 TJm\n(w) 7.193 Tj\n10 TJm\n(as) 8.2988 Tj\n-284 TJm\n(successful,) 43.4369 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 485.968 Td\n/F124_0 9.9626 Tf\n(bzerror) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n117.36 485.968 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-353 TJm\n(set) 11.0684 Tj\n-353 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n153.374 485.968 Td\n/F124_0 9.9626 Tf\n(BZ_OK) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n186.778 485.968 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n-353 TJm\n(the) 12.1743 Tj\n-353 TJm\n(number) 30.4357 Tj\n-353 TJm\n(of) 8.2988 Tj\n-353 TJm\n(bytes) 21.031 Tj\n-353 TJm\n(read) 17.1456 Tj\n-353 TJm\n(is) 6.6451 Tj\n-353 TJm\n(returned.) 35.686 Tj\n-1238 TJm\n(If) 6.6351 Tj\n-353 TJm\n(the) 12.1743 Tj\n-353 TJm\n(logical) 27.1182 Tj\n-353 TJm\n(end-of-stream) 55.8802 Tj\n-353 TJm\n(w) 7.193 Tj\n10 TJm\n(as) 8.2988 Tj\n-353 TJm\n(detected,) 35.686 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 474.013 Td\n/F124_0 9.9626 Tf\n(bzerror) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n116.795 474.013 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-296 TJm\n(be) 9.4047 Tj\n-297 TJm\n(set) 11.0684 Tj\n-296 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n172.328 474.013 Td\n/F124_0 9.9626 Tf\n(BZ_STREAM_END) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n250.037 474.013 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-296 TJm\n(and) 14.386 Tj\n-297 TJm\n(the) 12.1743 Tj\n-296 TJm\n(number) 30.4357 Tj\n-296 TJm\n(of) 8.2988 Tj\n-297 TJm\n(bytes) 21.031 Tj\n-296 TJm\n(read) 17.1456 Tj\n-296 TJm\n(is) 6.6451 Tj\n-296 TJm\n(returned.) 35.686 Tj\n-898 TJm\n(All) 12.7322 Tj\n-297 TJm\n(other) 20.4731 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n470 474.013 Td\n/F124_0 9.9626 Tf\n(bzerror) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n514.795 474.013 Td\n/F122_0 9.9626 Tf\n(v) 4.9813 Tj\n25 TJm\n(alues) 20.4731 Tj\n72 462.058 Td\n(denote) 26.5603 Tj\n-250 TJm\n(an) 9.4047 Tj\n-250 TJm\n(error) 19.3573 Tj\n55 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 440.14 Td\n/F124_0 9.9626 Tf\n(BZ2_bzRead) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n134.224 440.14 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-246 TJm\n(supply) 26.5703 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n181.193 440.14 Td\n/F124_0 9.9626 Tf\n(len) 17.9327 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n201.575 440.14 Td\n/F122_0 9.9626 Tf\n(bytes,) 23.5217 Tj\n-247 TJm\n(unless) 24.9065 Tj\n-245 TJm\n(the) 12.1743 Tj\n-246 TJm\n(logical) 27.1182 Tj\n-246 TJm\n(stream) 26.5603 Tj\n-246 TJm\n(end) 14.386 Tj\n-245 TJm\n(is) 6.6451 Tj\n-246 TJm\n(detected) 33.1954 Tj\n-246 TJm\n(or) 8.2988 Tj\n-246 TJm\n(an) 9.4047 Tj\n-245 TJm\n(error) 19.3573 Tj\n-246 TJm\n(occurs.) 28.493 Tj\n-617 TJm\n(Because) 33.1954 Tj\n-246 TJm\n(of) 8.2988 Tj\n-246 TJm\n(this,) 16.8866 Tj\n-247 TJm\n(it) 5.5392 Tj\n72 428.185 Td\n(is) 6.6451 Tj\n-231 TJm\n(possible) 32.6574 Tj\n-231 TJm\n(to) 7.7509 Tj\n-231 TJm\n(detect) 23.7907 Tj\n-231 TJm\n(the) 12.1743 Tj\n-231 TJm\n(stream) 26.5603 Tj\n-231 TJm\n(end) 14.386 Tj\n-232 TJm\n(by) 9.9626 Tj\n-231 TJm\n(observing) 39.2925 Tj\n-231 TJm\n(when) 21.579 Tj\n-231 TJm\n(the) 12.1743 Tj\n-231 TJm\n(number) 30.4357 Tj\n-231 TJm\n(of) 8.2988 Tj\n-231 TJm\n(bytes) 21.031 Tj\n-231 TJm\n(returned) 33.1954 Tj\n-231 TJm\n(is) 6.6451 Tj\n-231 TJm\n(less) 14.9439 Tj\n-231 TJm\n(than) 17.1556 Tj\n-232 TJm\n(the) 12.1743 Tj\n-231 TJm\n(number) 30.4357 Tj\n-231 TJm\n(requested.) 40.6673 Tj\n72 416.23 Td\n(Ne) 11.6164 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(ertheless,) 37.3498 Tj\n-309 TJm\n(this) 14.396 Tj\n-297 TJm\n(is) 6.6451 Tj\n-298 TJm\n(re) 7.7409 Tj\n15 TJm\n(g) 4.9813 Tj\n5 TJm\n(arded) 22.1269 Tj\n-297 TJm\n(as) 8.2988 Tj\n-297 TJm\n(inadvisable;) 48.1492 Tj\n-321 TJm\n(you) 14.9439 Tj\n-298 TJm\n(should) 26.5703 Tj\n-297 TJm\n(instead) 28.224 Tj\n-297 TJm\n(check) 23.2328 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n360.631 416.23 Td\n/F124_0 9.9626 Tf\n(bzerror) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n405.437 416.23 Td\n/F122_0 9.9626 Tf\n(after) 18.2515 Tj\n-297 TJm\n(e) 4.4234 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(ery) 12.7222 Tj\n-298 TJm\n(call) 14.386 Tj\n-297 TJm\n(and) 14.386 Tj\n-297 TJm\n(w) 7.193 Tj\n10 TJm\n(atch) 16.5977 Tj\n-298 TJm\n(out) 12.7322 Tj\n-297 TJm\n(for) 11.6164 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 404.275 Td\n/F124_0 9.9626 Tf\n(BZ_STREAM_END) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n149.709 404.275 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 382.357 Td\n(Internally) 38.7346 Tj\n65 TJm\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n117.541 382.357 Td\n/F124_0 9.9626 Tf\n(BZ2_bzRead) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n181.786 382.357 Td\n/F122_0 9.9626 Tf\n(copies) 25.4544 Tj\n-449 TJm\n(data) 16.5977 Tj\n-448 TJm\n(from) 19.3673 Tj\n-449 TJm\n(the) 12.1743 Tj\n-448 TJm\n(compressed) 47.0334 Tj\n-449 TJm\n(\\002le) 12.7322 Tj\n-449 TJm\n(in) 7.7509 Tj\n-448 TJm\n(chunks) 28.224 Tj\n-449 TJm\n(of) 8.2988 Tj\n-448 TJm\n(size) 15.4918 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n419.602 382.357 Td\n/F124_0 9.9626 Tf\n(BZ_MAX_UNUSED) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n501.778 382.357 Td\n/F122_0 9.9626 Tf\n(bytes) 21.031 Tj\n-449 TJm\n(be-) 12.7222 Tj\n72 370.402 Td\n(fore) 16.0398 Tj\n-414 TJm\n(decompressing) 59.7656 Tj\n-414 TJm\n(it.) 8.0299 Tj\n-1605 TJm\n(If) 6.6351 Tj\n-415 TJm\n(the) 12.1743 Tj\n-414 TJm\n(\\002le) 12.7322 Tj\n-414 TJm\n(contains) 33.2053 Tj\n-414 TJm\n(more) 20.4731 Tj\n-414 TJm\n(bytes) 21.031 Tj\n-415 TJm\n(than) 17.1556 Tj\n-414 TJm\n(strictly) 27.6761 Tj\n-414 TJm\n(needed) 28.2141 Tj\n-414 TJm\n(to) 7.7509 Tj\n-414 TJm\n(reach) 21.569 Tj\n-414 TJm\n(the) 12.1743 Tj\n-415 TJm\n(logical) 27.1182 Tj\n-414 TJm\n(end-of-stream,) 58.3709 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 358.446 Td\n/F124_0 9.9626 Tf\n(BZ2_bzRead) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n134.749 358.446 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-298 TJm\n(almost) 26.5703 Tj\n-299 TJm\n(certainly) 34.8591 Tj\n-298 TJm\n(read) 17.1456 Tj\n-299 TJm\n(some) 21.031 Tj\n-298 TJm\n(of) 8.2988 Tj\n-299 TJm\n(the) 12.1743 Tj\n-298 TJm\n(trailing) 28.782 Tj\n-299 TJm\n(data) 16.5977 Tj\n-298 TJm\n(before) 25.4445 Tj\n-298 TJm\n(signalling) 39.3025 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n413.162 358.446 Td\n/F124_0 9.9626 Tf\n(BZ_SEQUENCE_END) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n502.826 358.446 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-597 TJm\n(T) 6.0871 Tj\n80 TJm\n(o) 4.9813 Tj\n-298 TJm\n(col-) 15.4918 Tj\n72 346.491 Td\n(lect) 14.386 Tj\n-242 TJm\n(the) 12.1743 Tj\n-242 TJm\n(read) 17.1456 Tj\n-243 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-242 TJm\n(unused) 28.224 Tj\n-242 TJm\n(data) 16.5977 Tj\n-242 TJm\n(once) 18.8094 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n208.759 346.491 Td\n/F124_0 9.9626 Tf\n(BZ_SEQUENCE_END) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n300.835 346.491 Td\n/F122_0 9.9626 Tf\n(has) 13.2801 Tj\n-242 TJm\n(appeared,) 38.4457 Tj\n-244 TJm\n(call) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n374.201 346.491 Td\n/F124_0 9.9626 Tf\n(BZ2_bzReadGetUnused) 113.5736 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n490.188 346.491 Td\n/F122_0 9.9626 Tf\n(immediately) 49.813 Tj\n72 334.536 Td\n(before) 25.4445 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n99.935 334.536 Td\n/F124_0 9.9626 Tf\n(BZ2_bzReadClose) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n189.599 334.536 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 312.618 Td\n(Possible) 33.2153 Tj\n-250 TJm\n(assignments) 48.7072 Tj\n-250 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n169.144 312.618 Td\n/F124_0 9.9626 Tf\n(bzerror) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n210.987 312.618 Td\n/F122_0 9.9626 Tf\n(:) 2.7696 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 50.951 Td\n(20) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 21 24\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n419.067 749.245 Td\n/F122_0 9.9626 Tf\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n496.556 749.245 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 456.986] cm\n0 0 468 263.014 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 711.631 Td\n/F124_0 9.9626 Tf\n(BZ_PARAM_ERROR) 83.6858 Tj\n98.488 699.676 Td\n(if) 11.9551 Tj\n-426 TJm\n(b) 5.9776 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(NULL) 23.9102 Tj\n-426 TJm\n(or) 11.9551 Tj\n-426 TJm\n(buf) 17.9327 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(NULL) 23.9102 Tj\n-426 TJm\n(or) 11.9551 Tj\n-426 TJm\n(len) 17.9327 Tj\n-426 TJm\n(<) 5.9776 Tj\n-426 TJm\n(0) 5.9776 Tj\n90 687.721 Td\n(BZ_SEQUENCE_ERROR) 101.6185 Tj\n98.488 675.766 Td\n(if) 11.9551 Tj\n-426 TJm\n(b) 5.9776 Tj\n-426 TJm\n(was) 17.9327 Tj\n-426 TJm\n(opened) 35.8654 Tj\n-426 TJm\n(with) 23.9102 Tj\n-426 TJm\n(BZ2_bzWriteOpen) 89.6634 Tj\n90 663.811 Td\n(BZ_IO_ERROR) 65.7532 Tj\n98.488 651.856 Td\n(if) 11.9551 Tj\n-426 TJm\n(there) 29.8878 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(an) 11.9551 Tj\n-426 TJm\n(error) 29.8878 Tj\n-426 TJm\n(reading) 41.8429 Tj\n-426 TJm\n(from) 23.9102 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(compressed) 59.7756 Tj\n-426 TJm\n(file) 23.9102 Tj\n90 639.9 Td\n(BZ_UNEXPECTED_EOF) 101.6185 Tj\n98.488 627.945 Td\n(if) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(compressed) 59.7756 Tj\n-426 TJm\n(file) 23.9102 Tj\n-426 TJm\n(ended) 29.8878 Tj\n-426 TJm\n(before) 35.8654 Tj\n98.488 615.99 Td\n(the) 17.9327 Tj\n-426 TJm\n(logical) 41.8429 Tj\n-426 TJm\n(end-of-stream) 77.7083 Tj\n-426 TJm\n(was) 17.9327 Tj\n-426 TJm\n(detected) 47.8205 Tj\n90 604.035 Td\n(BZ_DATA_ERROR) 77.7083 Tj\n98.488 592.08 Td\n(if) 11.9551 Tj\n-426 TJm\n(a) 5.9776 Tj\n-426 TJm\n(data) 23.9102 Tj\n-426 TJm\n(integrity) 53.798 Tj\n-426 TJm\n(error) 29.8878 Tj\n-426 TJm\n(was) 17.9327 Tj\n-426 TJm\n(detected) 47.8205 Tj\n-426 TJm\n(in) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(compressed) 59.7756 Tj\n-426 TJm\n(stream) 35.8654 Tj\n90 580.124 Td\n(BZ_DATA_ERROR_MAGIC) 113.5736 Tj\n98.488 568.169 Td\n(if) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(stream) 35.8654 Tj\n-426 TJm\n(does) 23.9102 Tj\n-426 TJm\n(not) 17.9327 Tj\n-426 TJm\n(begin) 29.8878 Tj\n-426 TJm\n(with) 23.9102 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(requisite) 53.798 Tj\n-426 TJm\n(header) 35.8654 Tj\n-426 TJm\n(bytes) 29.8878 Tj\n98.488 556.214 Td\n(\\(ie,) 23.9102 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(not) 17.9327 Tj\n-426 TJm\n(a) 5.9776 Tj\n-426 TJm\n(bzip2) 29.8878 Tj\n-426 TJm\n(data) 23.9102 Tj\n-426 TJm\n(file\\).) 35.8654 Tj\n-852 TJm\n(This) 23.9102 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(really) 35.8654 Tj\n98.488 544.259 Td\n(a) 5.9776 Tj\n-426 TJm\n(special) 41.8429 Tj\n-426 TJm\n(case) 23.9102 Tj\n-426 TJm\n(of) 11.9551 Tj\n-426 TJm\n(BZ_DATA_ERROR.) 83.6858 Tj\n90 532.304 Td\n(BZ_MEM_ERROR) 71.7307 Tj\n98.488 520.349 Td\n(if) 11.9551 Tj\n-426 TJm\n(insufficient) 71.7307 Tj\n-426 TJm\n(memory) 35.8654 Tj\n-426 TJm\n(was) 17.9327 Tj\n-426 TJm\n(available) 53.798 Tj\n90 508.393 Td\n(BZ_STREAM_END) 77.7083 Tj\n98.488 496.438 Td\n(if) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(logical) 41.8429 Tj\n-426 TJm\n(end) 17.9327 Tj\n-426 TJm\n(of) 11.9551 Tj\n-426 TJm\n(stream) 35.8654 Tj\n-426 TJm\n(was) 17.9327 Tj\n-426 TJm\n(detected.) 53.798 Tj\n90 484.483 Td\n(BZ_OK) 29.8878 Tj\n98.488 472.528 Td\n(otherwise.) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 435.068 Td\n/F122_0 9.9626 Tf\n(Possible) 33.2153 Tj\n-250 TJm\n(return) 23.7907 Tj\n-250 TJm\n(v) 4.9813 Tj\n25 TJm\n(alues:) 23.2427 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 374.197] cm\n0 0 468 59.776 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 425.604 Td\n/F124_0 9.9626 Tf\n(number) 35.8654 Tj\n-426 TJm\n(of) 11.9551 Tj\n-426 TJm\n(bytes) 29.8878 Tj\n-426 TJm\n(read) 23.9102 Tj\n98.488 413.649 Td\n(if) 11.9551 Tj\n-426 TJm\n(bzerror) 41.8429 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(BZ_OK) 29.8878 Tj\n-426 TJm\n(or) 11.9551 Tj\n-426 TJm\n(BZ_STREAM_END) 77.7083 Tj\n90 401.694 Td\n(undefined) 53.798 Tj\n98.488 389.739 Td\n(otherwise) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 352.279 Td\n/F122_0 9.9626 Tf\n(Allo) 17.7135 Tj\n25 TJm\n(w) 7.193 Tj\n10 TJm\n(able) 16.5977 Tj\n-250 TJm\n(ne) 9.4047 Tj\n15 TJm\n(xt) 7.7509 Tj\n-250 TJm\n(actions:) 30.9936 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 267.497] cm\n0 0 468 83.686 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 342.815 Td\n/F124_0 9.9626 Tf\n(collect) 41.8429 Tj\n-426 TJm\n(data) 23.9102 Tj\n-426 TJm\n(from) 23.9102 Tj\n-426 TJm\n(buf,) 23.9102 Tj\n-426 TJm\n(then) 23.9102 Tj\n-426 TJm\n(BZ2_bzRead) 59.7756 Tj\n-426 TJm\n(or) 11.9551 Tj\n-426 TJm\n(BZ2_bzReadClose) 89.6634 Tj\n98.488 330.859 Td\n(if) 11.9551 Tj\n-426 TJm\n(bzerror) 41.8429 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(BZ_OK) 29.8878 Tj\n90 318.904 Td\n(collect) 41.8429 Tj\n-426 TJm\n(data) 23.9102 Tj\n-426 TJm\n(from) 23.9102 Tj\n-426 TJm\n(buf,) 23.9102 Tj\n-426 TJm\n(then) 23.9102 Tj\n-426 TJm\n(BZ2_bzReadClose) 89.6634 Tj\n-426 TJm\n(or) 11.9551 Tj\n-426 TJm\n(BZ2_bzReadGetUnused) 113.5736 Tj\n98.488 306.949 Td\n(if) 11.9551 Tj\n-426 TJm\n(bzerror) 41.8429 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(BZ_SEQUENCE_END) 89.6634 Tj\n90 294.994 Td\n(BZ2_bzReadClose) 89.6634 Tj\n98.488 283.039 Td\n(otherwise) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 236.876 Td\n/F116_0 17.2154 Tf\n(3.4.3.) 43.0729 Tj\n-278 TJm\n(BZ2_bzReadGetUn) 154.9558 Tj\n10 TJm\n(used) 40.1807 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 197.948] cm\n0 0 468 35.866 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 225.445 Td\n/F124_0 9.9626 Tf\n(void) 23.9102 Tj\n-426 TJm\n(BZ2_bzReadGetUnused\\() 119.5512 Tj\n-426 TJm\n(int) 17.9327 Tj\n259.883 223.702 Td\n(*) 5.9776 Tj\n270.104 225.445 Td\n(bzerror,) 47.8205 Tj\n-426 TJm\n(BZFILE) 35.8654 Tj\n362.278 223.702 Td\n(*) 5.9776 Tj\n368.256 225.445 Td\n(b,) 11.9551 Tj\n200.343 213.49 Td\n(void) 23.9102 Tj\n224.254 211.747 Td\n(**) 11.9551 Tj\n240.453 213.49 Td\n(unused,) 41.8429 Tj\n-426 TJm\n(int) 17.9327 Tj\n304.473 211.747 Td\n(*) 5.9776 Tj\n314.694 213.49 Td\n(nUnused) 41.8429 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 176.031 Td\n/F122_0 9.9626 Tf\n(Returns) 30.9936 Tj\n-435 TJm\n(data) 16.5977 Tj\n-435 TJm\n(which) 24.3486 Tj\n-435 TJm\n(w) 7.193 Tj\n10 TJm\n(as) 8.2988 Tj\n-435 TJm\n(read) 17.1456 Tj\n-435 TJm\n(from) 19.3673 Tj\n-435 TJm\n(the) 12.1743 Tj\n-435 TJm\n(compressed) 47.0334 Tj\n-435 TJm\n(\\002le) 12.7322 Tj\n-435 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-435 TJm\n(w) 7.193 Tj\n10 TJm\n(as) 8.2988 Tj\n-435 TJm\n(not) 12.7322 Tj\n-435 TJm\n(needed) 28.2141 Tj\n-435 TJm\n(to) 7.7509 Tj\n-435 TJm\n(get) 12.1743 Tj\n-435 TJm\n(to) 7.7509 Tj\n-435 TJm\n(the) 12.1743 Tj\n-435 TJm\n(logical) 27.1182 Tj\n-435 TJm\n(end-of-stream.) 58.3709 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 162.332 Td\n/F124_0 9.9626 Tf\n(*) 5.9776 Tj\n77.978 164.075 Td\n(unused) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n117.2 164.075 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-337 TJm\n(set) 11.0684 Tj\n-337 TJm\n(to) 7.7509 Tj\n-337 TJm\n(the) 12.1743 Tj\n-337 TJm\n(address) 29.8778 Tj\n-337 TJm\n(of) 8.2988 Tj\n-336 TJm\n(the) 12.1743 Tj\n-337 TJm\n(data,) 19.0883 Tj\n-359 TJm\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n269.089 162.332 Td\n/F124_0 9.9626 Tf\n(*) 5.9776 Tj\n275.067 164.075 Td\n(nUnused) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n320.267 164.075 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-337 TJm\n(the) 12.1743 Tj\n-337 TJm\n(number) 30.4357 Tj\n-337 TJm\n(of) 8.2988 Tj\n-337 TJm\n(bytes.) 23.5217 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n427.247 162.332 Td\n/F124_0 9.9626 Tf\n(*) 5.9776 Tj\n433.225 164.075 Td\n(nUnused) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n478.425 164.075 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-337 TJm\n(be) 9.4047 Tj\n-337 TJm\n(set) 11.0684 Tj\n-337 TJm\n(to) 7.7509 Tj\n-337 TJm\n(a) 4.4234 Tj\n72 152.12 Td\n(v) 4.9813 Tj\n25 TJm\n(alue) 16.5977 Tj\n-250 TJm\n(between) 33.1954 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n131.506 152.12 Td\n/F124_0 9.9626 Tf\n(0) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n139.975 152.12 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n156.851 152.12 Td\n/F124_0 9.9626 Tf\n(BZ_MAX_UNUSED) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n237.05 152.12 Td\n/F122_0 9.9626 Tf\n(inclusi) 26.5703 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(e.) 6.914 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 130.202 Td\n(This) 17.7135 Tj\n-882 TJm\n(function) 33.2053 Tj\n-883 TJm\n(may) 17.1556 Tj\n-882 TJm\n(only) 17.7135 Tj\n-883 TJm\n(be) 9.4047 Tj\n-882 TJm\n(called) 23.7907 Tj\n-883 TJm\n(once) 18.8094 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n271.332 130.202 Td\n/F124_0 9.9626 Tf\n(BZ2_bzRead) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n339.9 130.202 Td\n/F122_0 9.9626 Tf\n(has) 13.2801 Tj\n-882 TJm\n(signalled) 35.9749 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n406.737 130.202 Td\n/F124_0 9.9626 Tf\n(BZ_STREAM_END) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n493.231 130.202 Td\n/F122_0 9.9626 Tf\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-882 TJm\n(before) 25.4445 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 118.247 Td\n/F124_0 9.9626 Tf\n(BZ2_bzReadClose) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n161.664 118.247 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 96.329 Td\n(Possible) 33.2153 Tj\n-250 TJm\n(assignments) 48.7072 Tj\n-250 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n169.144 96.329 Td\n/F124_0 9.9626 Tf\n(bzerror) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n210.987 96.329 Td\n/F122_0 9.9626 Tf\n(:) 2.7696 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 50.852 Td\n(21) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 22 25\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n419.067 749.245 Td\n/F122_0 9.9626 Tf\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n496.556 749.245 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 612.403] cm\n0 0 468 107.597 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 711.631 Td\n/F124_0 9.9626 Tf\n(BZ_PARAM_ERROR) 83.6858 Tj\n98.488 699.676 Td\n(if) 11.9551 Tj\n-426 TJm\n(b) 5.9776 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(NULL) 23.9102 Tj\n98.488 687.721 Td\n(or) 11.9551 Tj\n-426 TJm\n(unused) 35.8654 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(NULL) 23.9102 Tj\n-426 TJm\n(or) 11.9551 Tj\n-426 TJm\n(nUnused) 41.8429 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(NULL) 23.9102 Tj\n90 675.766 Td\n(BZ_SEQUENCE_ERROR) 101.6185 Tj\n98.488 663.811 Td\n(if) 11.9551 Tj\n-426 TJm\n(BZ_STREAM_END) 77.7083 Tj\n-426 TJm\n(has) 17.9327 Tj\n-426 TJm\n(not) 17.9327 Tj\n-426 TJm\n(been) 23.9102 Tj\n-426 TJm\n(signalled) 53.798 Tj\n98.488 651.856 Td\n(or) 11.9551 Tj\n-426 TJm\n(if) 11.9551 Tj\n-426 TJm\n(b) 5.9776 Tj\n-426 TJm\n(was) 17.9327 Tj\n-426 TJm\n(opened) 35.8654 Tj\n-426 TJm\n(with) 23.9102 Tj\n-426 TJm\n(BZ2_bzWriteOpen) 89.6634 Tj\n90 639.9 Td\n(BZ_OK) 29.8878 Tj\n98.488 627.945 Td\n(otherwise) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 590.486 Td\n/F122_0 9.9626 Tf\n(Allo) 17.7135 Tj\n25 TJm\n(w) 7.193 Tj\n10 TJm\n(able) 16.5977 Tj\n-250 TJm\n(ne) 9.4047 Tj\n15 TJm\n(xt) 7.7509 Tj\n-250 TJm\n(actions:) 30.9936 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 565.48] cm\n0 0 468 23.91 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 581.021 Td\n/F124_0 9.9626 Tf\n(BZ2_bzReadClose) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 534.858 Td\n/F116_0 17.2154 Tf\n(3.4.4.) 43.0729 Tj\n-278 TJm\n(BZ2_bzReadClose) 150.1871 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 507.886] cm\n0 0 468 23.91 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 523.428 Td\n/F124_0 9.9626 Tf\n(void) 23.9102 Tj\n-426 TJm\n(BZ2_bzReadClose) 89.6634 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(int) 17.9327 Tj\n244.46 521.684 Td\n(*) 5.9776 Tj\n250.438 523.428 Td\n(bzerror,) 47.8205 Tj\n-426 TJm\n(BZFILE) 35.8654 Tj\n342.612 521.684 Td\n(*) 5.9776 Tj\n348.59 523.428 Td\n(b) 5.9776 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 485.968 Td\n/F122_0 9.9626 Tf\n(Releases) 34.8591 Tj\n-430 TJm\n(all) 9.9626 Tj\n-429 TJm\n(memory) 33.2053 Tj\n-430 TJm\n(pertaining) 40.3983 Tj\n-429 TJm\n(to) 7.7509 Tj\n-430 TJm\n(the) 12.1743 Tj\n-429 TJm\n(compressed) 47.0334 Tj\n-430 TJm\n(\\002le) 12.7322 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n304.352 485.968 Td\n/F124_0 9.9626 Tf\n(b) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n310.33 485.968 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n321.276 485.968 Td\n/F124_0 9.9626 Tf\n(BZ2_bzReadClose) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n415.22 485.968 Td\n/F122_0 9.9626 Tf\n(does) 18.2614 Tj\n-430 TJm\n(not) 12.7322 Tj\n-429 TJm\n(call) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n473.438 485.968 Td\n/F124_0 9.9626 Tf\n(fclose) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n513.583 485.968 Td\n/F122_0 9.9626 Tf\n(on) 9.9626 Tj\n-430 TJm\n(the) 12.1743 Tj\n72 474.013 Td\n(underlying) 43.1679 Tj\n-264 TJm\n(\\002le) 12.7322 Tj\n-264 TJm\n(handle,) 29.0509 Tj\n-267 TJm\n(so) 8.8568 Tj\n-264 TJm\n(you) 14.9439 Tj\n-264 TJm\n(should) 26.5703 Tj\n-264 TJm\n(do) 9.9626 Tj\n-264 TJm\n(that) 14.9439 Tj\n-264 TJm\n(yourself) 32.6474 Tj\n-264 TJm\n(if) 6.0871 Tj\n-263 TJm\n(appropriate.) 47.8603 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n348.653 474.013 Td\n/F124_0 9.9626 Tf\n(BZ2_bzReadClose) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n440.946 474.013 Td\n/F122_0 9.9626 Tf\n(should) 26.5703 Tj\n-264 TJm\n(be) 9.4047 Tj\n-264 TJm\n(called) 23.7907 Tj\n-264 TJm\n(to) 7.7509 Tj\n-264 TJm\n(clean) 21.0211 Tj\n72 462.058 Td\n(up) 9.9626 Tj\n-250 TJm\n(after) 18.2515 Tj\n-250 TJm\n(all) 9.9626 Tj\n-250 TJm\n(error) 19.3573 Tj\n-250 TJm\n(situations.) 40.6873 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 440.14 Td\n(Possible) 33.2153 Tj\n-250 TJm\n(assignments) 48.7072 Tj\n-250 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n169.144 440.14 Td\n/F124_0 9.9626 Tf\n(bzerror) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n210.987 440.14 Td\n/F122_0 9.9626 Tf\n(:) 2.7696 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 377.211] cm\n0 0 468 59.776 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 428.618 Td\n/F124_0 9.9626 Tf\n(BZ_SEQUENCE_ERROR) 101.6185 Tj\n98.488 416.663 Td\n(if) 11.9551 Tj\n-426 TJm\n(b) 5.9776 Tj\n-426 TJm\n(was) 17.9327 Tj\n-426 TJm\n(opened) 35.8654 Tj\n-426 TJm\n(with) 23.9102 Tj\n-426 TJm\n(BZ2_bzOpenWrite) 89.6634 Tj\n90 404.708 Td\n(BZ_OK) 29.8878 Tj\n98.488 392.753 Td\n(otherwise) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 355.293 Td\n/F122_0 9.9626 Tf\n(Allo) 17.7135 Tj\n25 TJm\n(w) 7.193 Tj\n10 TJm\n(able) 16.5977 Tj\n-250 TJm\n(ne) 9.4047 Tj\n15 TJm\n(xt) 7.7509 Tj\n-250 TJm\n(actions:) 30.9936 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 330.287] cm\n0 0 468 23.91 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 345.829 Td\n/F124_0 9.9626 Tf\n(none) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 299.666 Td\n/F116_0 17.2154 Tf\n(3.4.5.) 43.0729 Tj\n-278 TJm\n(BZ2_bzWriteOpen) 148.259 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 247.286] cm\n0 0 468 47.821 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 286.738 Td\n/F124_0 9.9626 Tf\n(BZFILE) 35.8654 Tj\n130.109 284.994 Td\n(*) 5.9776 Tj\n136.087 286.738 Td\n(BZ2_bzWriteOpen\\() 95.641 Tj\n-426 TJm\n(int) 17.9327 Tj\n258.149 284.994 Td\n(*) 5.9776 Tj\n264.127 286.738 Td\n(bzerror,) 47.8205 Tj\n-426 TJm\n(FILE) 23.9102 Tj\n344.346 284.994 Td\n(*) 5.9776 Tj\n350.323 286.738 Td\n(f,) 11.9551 Tj\n196.099 274.783 Td\n(int) 17.9327 Tj\n-426 TJm\n(blockSize100k,) 83.6858 Tj\n-426 TJm\n(int) 17.9327 Tj\n-426 TJm\n(verbosity,) 59.7756 Tj\n196.099 262.827 Td\n(int) 17.9327 Tj\n-426 TJm\n(workFactor) 59.7756 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 225.368 Td\n/F122_0 9.9626 Tf\n(Prepare) 30.4258 Tj\n-268 TJm\n(to) 7.7509 Tj\n-269 TJm\n(write) 20.4731 Tj\n-268 TJm\n(compressed) 47.0334 Tj\n-269 TJm\n(data) 16.5977 Tj\n-268 TJm\n(to) 7.7509 Tj\n-269 TJm\n(\\002le) 12.7322 Tj\n-268 TJm\n(handle) 26.5603 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n262.72 225.368 Td\n/F124_0 9.9626 Tf\n(f) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n268.698 225.368 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n274.829 225.368 Td\n/F124_0 9.9626 Tf\n(f) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n283.481 225.368 Td\n/F122_0 9.9626 Tf\n(should) 26.5703 Tj\n-268 TJm\n(refer) 18.7994 Tj\n-269 TJm\n(to) 7.7509 Tj\n-268 TJm\n(a) 4.4234 Tj\n-269 TJm\n(\\002le) 12.7322 Tj\n-268 TJm\n(which) 24.3486 Tj\n-269 TJm\n(has) 13.2801 Tj\n-268 TJm\n(been) 18.8094 Tj\n-269 TJm\n(opened) 28.772 Tj\n-268 TJm\n(for) 11.6164 Tj\n-269 TJm\n(writing,) 31.2726 Tj\n-273 TJm\n(and) 14.386 Tj\n-268 TJm\n(for) 11.6164 Tj\n72 213.413 Td\n(which) 24.3486 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(error) 19.3573 Tj\n-250 TJm\n(indicator) 35.417 Tj\n-250 TJm\n(\\() 3.3175 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n176.577 213.413 Td\n/F124_0 9.9626 Tf\n(ferror\\(f\\)) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n230.375 213.413 Td\n/F122_0 9.9626 Tf\n(\\)is) 9.9626 Tj\n-250 TJm\n(not) 12.7322 Tj\n-250 TJm\n(set.) 13.5591 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 191.495 Td\n(F) 5.5392 Tj\n15 TJm\n(or) 8.2988 Tj\n-223 TJm\n(the) 12.1743 Tj\n-224 TJm\n(meaning) 34.3112 Tj\n-223 TJm\n(of) 8.2988 Tj\n-224 TJm\n(parameters) 43.7059 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n195.306 191.495 Td\n/F124_0 9.9626 Tf\n(blockSize100k) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n273.015 191.495 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n277.784 191.495 Td\n/F124_0 9.9626 Tf\n(verbosity) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n333.808 191.495 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n350.42 191.495 Td\n/F124_0 9.9626 Tf\n(workFactor) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n410.196 191.495 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-229 TJm\n(see) 12.7222 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n429.913 191.495 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompressInit) 107.5961 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n537.509 191.495 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 169.577 Td\n(All) 12.7322 Tj\n-382 TJm\n(required) 33.1954 Tj\n-382 TJm\n(memory) 33.2053 Tj\n-382 TJm\n(is) 6.6451 Tj\n-382 TJm\n(allocated) 35.965 Tj\n-383 TJm\n(at) 7.193 Tj\n-382 TJm\n(this) 14.396 Tj\n-382 TJm\n(stage,) 22.9638 Tj\n-415 TJm\n(so) 8.8568 Tj\n-382 TJm\n(if) 6.0871 Tj\n-382 TJm\n(the) 12.1743 Tj\n-382 TJm\n(call) 14.386 Tj\n-382 TJm\n(completes) 40.3983 Tj\n-382 TJm\n(successfully) 48.6972 Tj\n65 TJm\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n424.691 169.577 Td\n/F124_0 9.9626 Tf\n(BZ_MEM_ERROR) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n500.228 169.577 Td\n/F122_0 9.9626 Tf\n(cannot) 26.5603 Tj\n-382 TJm\n(be) 9.4047 Tj\n72 157.622 Td\n(signalled) 35.9749 Tj\n-250 TJm\n(by) 9.9626 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(subsequent) 44.2738 Tj\n-250 TJm\n(call) 14.386 Tj\n-250 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n203.715 157.622 Td\n/F124_0 9.9626 Tf\n(BZ2_bzWrite) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n269.468 157.622 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 135.704 Td\n(Possible) 33.2153 Tj\n-250 TJm\n(assignments) 48.7072 Tj\n-250 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n169.144 135.704 Td\n/F124_0 9.9626 Tf\n(bzerror) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n210.987 135.704 Td\n/F122_0 9.9626 Tf\n(:) 2.7696 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 50.852 Td\n(22) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 23 26\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n419.067 749.245 Td\n/F122_0 9.9626 Tf\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n496.556 749.245 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 576.538] cm\n0 0 468 143.462 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 711.631 Td\n/F124_0 9.9626 Tf\n(BZ_CONFIG_ERROR) 89.6634 Tj\n98.488 699.676 Td\n(if) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(library) 41.8429 Tj\n-426 TJm\n(has) 17.9327 Tj\n-426 TJm\n(been) 23.9102 Tj\n-426 TJm\n(mis-compiled) 71.7307 Tj\n90 687.721 Td\n(BZ_PARAM_ERROR) 83.6858 Tj\n98.488 675.766 Td\n(if) 11.9551 Tj\n-426 TJm\n(f) 5.9776 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(NULL) 23.9102 Tj\n98.488 663.811 Td\n(or) 11.9551 Tj\n-426 TJm\n(blockSize100k) 77.7083 Tj\n-426 TJm\n(<) 5.9776 Tj\n-426 TJm\n(1) 5.9776 Tj\n-426 TJm\n(or) 11.9551 Tj\n-426 TJm\n(blockSize100k) 77.7083 Tj\n-426 TJm\n(>) 5.9776 Tj\n-426 TJm\n(9) 5.9776 Tj\n90 651.856 Td\n(BZ_IO_ERROR) 65.7532 Tj\n98.488 639.9 Td\n(if) 11.9551 Tj\n-426 TJm\n(ferror\\(f\\)) 53.798 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(nonzero) 41.8429 Tj\n90 627.945 Td\n(BZ_MEM_ERROR) 71.7307 Tj\n98.488 615.99 Td\n(if) 11.9551 Tj\n-426 TJm\n(insufficient) 71.7307 Tj\n-426 TJm\n(memory) 35.8654 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(available) 53.798 Tj\n90 604.035 Td\n(BZ_OK) 29.8878 Tj\n98.488 592.08 Td\n(otherwise) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 554.62 Td\n/F122_0 9.9626 Tf\n(Possible) 33.2153 Tj\n-250 TJm\n(return) 23.7907 Tj\n-250 TJm\n(v) 4.9813 Tj\n25 TJm\n(alues:) 23.2427 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 493.749] cm\n0 0 468 59.776 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 545.156 Td\n/F124_0 9.9626 Tf\n(Pointer) 41.8429 Tj\n-426 TJm\n(to) 11.9551 Tj\n-426 TJm\n(an) 11.9551 Tj\n-426 TJm\n(abstract) 47.8205 Tj\n-426 TJm\n(BZFILE) 35.8654 Tj\n98.488 533.201 Td\n(if) 11.9551 Tj\n-426 TJm\n(bzerror) 41.8429 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(BZ_OK) 29.8878 Tj\n90 521.245 Td\n(NULL) 23.9102 Tj\n98.488 509.29 Td\n(otherwise) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 471.831 Td\n/F122_0 9.9626 Tf\n(Allo) 17.7135 Tj\n25 TJm\n(w) 7.193 Tj\n10 TJm\n(able) 16.5977 Tj\n-250 TJm\n(ne) 9.4047 Tj\n15 TJm\n(xt) 7.7509 Tj\n-250 TJm\n(actions:) 30.9936 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 387.049] cm\n0 0 468 83.686 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 462.366 Td\n/F124_0 9.9626 Tf\n(BZ2_bzWrite) 65.7532 Tj\n98.488 450.411 Td\n(if) 11.9551 Tj\n-426 TJm\n(bzerror) 41.8429 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(BZ_OK) 29.8878 Tj\n98.488 438.456 Td\n(\\(you) 23.9102 Tj\n-426 TJm\n(could) 29.8878 Tj\n-426 TJm\n(go) 11.9551 Tj\n-426 TJm\n(directly) 47.8205 Tj\n-426 TJm\n(to) 11.9551 Tj\n-426 TJm\n(BZ2_bzWriteClose,) 101.6185 Tj\n-426 TJm\n(but) 17.9327 Tj\n-426 TJm\n(this) 23.9102 Tj\n-426 TJm\n(would) 29.8878 Tj\n-426 TJm\n(be) 11.9551 Tj\n-426 TJm\n(pretty) 35.8654 Tj\n485.506 434.212 Td\n/F548_0 9.9626 Tf\n( ) 9.9626 Tj\n493.808 434.212 Td\n/F230_0 9.9626 Tf\n(-) 2.7676 Tj\n90 426.501 Td\n/F124_0 9.9626 Tf\n(pointless\\)) 59.7756 Tj\n90 414.546 Td\n(BZ2_bzWriteClose) 95.641 Tj\n98.488 402.59 Td\n(otherwise) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 356.428 Td\n/F116_0 17.2154 Tf\n(3.4.6.) 43.0729 Tj\n-278 TJm\n(BZ2_bzWrite) 104.2565 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 329.455] cm\n0 0 468 23.91 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 344.997 Td\n/F124_0 9.9626 Tf\n(void) 23.9102 Tj\n-426 TJm\n(BZ2_bzWrite) 65.7532 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(int) 17.9327 Tj\n220.55 343.254 Td\n(*) 5.9776 Tj\n226.528 344.997 Td\n(bzerror,) 47.8205 Tj\n-426 TJm\n(BZFILE) 35.8654 Tj\n318.702 343.254 Td\n(*) 5.9776 Tj\n324.679 344.997 Td\n(b,) 11.9551 Tj\n-426 TJm\n(void) 23.9102 Tj\n369.033 343.254 Td\n(*) 5.9776 Tj\n375.01 344.997 Td\n(buf,) 23.9102 Tj\n-426 TJm\n(int) 17.9327 Tj\n-426 TJm\n(len) 17.9327 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 307.537 Td\n/F122_0 9.9626 Tf\n(Absorbs) 33.2053 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n107.696 307.537 Td\n/F124_0 9.9626 Tf\n(len) 17.9327 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n128.119 307.537 Td\n/F122_0 9.9626 Tf\n(bytes) 21.031 Tj\n-250 TJm\n(from) 19.3673 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n214.544 307.537 Td\n/F124_0 9.9626 Tf\n(buf) 17.9327 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n232.477 307.537 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-250 TJm\n(e) 4.4234 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(entually) 32.0995 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(be) 9.4047 Tj\n-250 TJm\n(compressed) 47.0334 Tj\n-250 TJm\n(and) 14.386 Tj\n-250 TJm\n(written) 28.224 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(\\002le.) 15.2229 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 285.62 Td\n(Possible) 33.2153 Tj\n-250 TJm\n(assignments) 48.7072 Tj\n-250 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n169.144 285.62 Td\n/F124_0 9.9626 Tf\n(bzerror) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n210.987 285.62 Td\n/F122_0 9.9626 Tf\n(:) 2.7696 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 174.87] cm\n0 0 468 107.597 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 274.098 Td\n/F124_0 9.9626 Tf\n(BZ_PARAM_ERROR) 83.6858 Tj\n98.488 262.143 Td\n(if) 11.9551 Tj\n-426 TJm\n(b) 5.9776 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(NULL) 23.9102 Tj\n-426 TJm\n(or) 11.9551 Tj\n-426 TJm\n(buf) 17.9327 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(NULL) 23.9102 Tj\n-426 TJm\n(or) 11.9551 Tj\n-426 TJm\n(len) 17.9327 Tj\n-426 TJm\n(<) 5.9776 Tj\n-426 TJm\n(0) 5.9776 Tj\n90 250.188 Td\n(BZ_SEQUENCE_ERROR) 101.6185 Tj\n98.488 238.232 Td\n(if) 11.9551 Tj\n-426 TJm\n(b) 5.9776 Tj\n-426 TJm\n(was) 17.9327 Tj\n-426 TJm\n(opened) 35.8654 Tj\n-426 TJm\n(with) 23.9102 Tj\n-426 TJm\n(BZ2_bzReadOpen) 83.6858 Tj\n90 226.277 Td\n(BZ_IO_ERROR) 65.7532 Tj\n98.488 214.322 Td\n(if) 11.9551 Tj\n-426 TJm\n(there) 29.8878 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(an) 11.9551 Tj\n-426 TJm\n(error) 29.8878 Tj\n-426 TJm\n(writing) 41.8429 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(compressed) 59.7756 Tj\n-426 TJm\n(file.) 29.8878 Tj\n90 202.367 Td\n(BZ_OK) 29.8878 Tj\n98.488 190.412 Td\n(otherwise) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 144.249 Td\n/F116_0 17.2154 Tf\n(3.4.7.) 43.0729 Tj\n-278 TJm\n(BZ2_bzWriteClose) 151.134 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 50.951 Td\n/F122_0 9.9626 Tf\n(23) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 24 27\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n419.067 749.245 Td\n/F122_0 9.9626 Tf\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n496.556 749.245 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 576.538] cm\n0 0 468 143.462 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 711.631 Td\n/F124_0 9.9626 Tf\n(void) 23.9102 Tj\n-426 TJm\n(BZ2_bzWriteClose\\() 101.6185 Tj\n-426 TJm\n(int) 17.9327 Tj\n246.194 709.888 Td\n(*) 5.9776 Tj\n252.172 711.631 Td\n(bzerror,) 47.8205 Tj\n-426 TJm\n(BZFILE) 35.8654 Tj\n340.102 709.888 Td\n(*) 5.9776 Tj\n350.323 711.631 Td\n(f,) 11.9551 Tj\n187.611 699.676 Td\n(int) 17.9327 Tj\n-426 TJm\n(abandon,) 47.8205 Tj\n187.611 687.721 Td\n(unsigned) 47.8205 Tj\n-426 TJm\n(int) 17.9327 Tj\n257.609 685.978 Td\n(*) 5.9776 Tj\n267.83 687.721 Td\n(nbytes_in,) 59.7756 Tj\n187.611 675.766 Td\n(unsigned) 47.8205 Tj\n-426 TJm\n(int) 17.9327 Tj\n257.609 674.022 Td\n(*) 5.9776 Tj\n267.83 675.766 Td\n(nbytes_out) 59.7756 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n90 651.856 Td\n(void) 23.9102 Tj\n-426 TJm\n(BZ2_bzWriteClose64\\() 113.5736 Tj\n-426 TJm\n(int) 17.9327 Tj\n258.149 650.112 Td\n(*) 5.9776 Tj\n264.127 651.856 Td\n(bzerror,) 47.8205 Tj\n-426 TJm\n(BZFILE) 35.8654 Tj\n352.057 650.112 Td\n(*) 5.9776 Tj\n362.278 651.856 Td\n(f,) 11.9551 Tj\n196.099 639.9 Td\n(int) 17.9327 Tj\n-426 TJm\n(abandon,) 47.8205 Tj\n196.099 627.945 Td\n(unsigned) 47.8205 Tj\n-426 TJm\n(int) 17.9327 Tj\n266.097 626.202 Td\n(*) 5.9776 Tj\n276.318 627.945 Td\n(nbytes_in_lo32,) 89.6634 Tj\n196.099 615.99 Td\n(unsigned) 47.8205 Tj\n-426 TJm\n(int) 17.9327 Tj\n266.097 614.247 Td\n(*) 5.9776 Tj\n276.318 615.99 Td\n(nbytes_in_hi32,) 89.6634 Tj\n196.099 604.035 Td\n(unsigned) 47.8205 Tj\n-426 TJm\n(int) 17.9327 Tj\n266.097 602.291 Td\n(*) 5.9776 Tj\n276.318 604.035 Td\n(nbytes_out_lo32,) 95.641 Tj\n196.099 592.08 Td\n(unsigned) 47.8205 Tj\n-426 TJm\n(int) 17.9327 Tj\n266.097 590.336 Td\n(*) 5.9776 Tj\n276.318 592.08 Td\n(nbytes_out_hi32) 89.6634 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 554.62 Td\n/F122_0 9.9626 Tf\n(Compresses) 48.1492 Tj\n-403 TJm\n(and) 14.386 Tj\n-402 TJm\n(\\003ushes) 27.6761 Tj\n-403 TJm\n(to) 7.7509 Tj\n-403 TJm\n(the) 12.1743 Tj\n-402 TJm\n(compressed) 47.0334 Tj\n-403 TJm\n(\\002le) 12.7322 Tj\n-402 TJm\n(all) 9.9626 Tj\n-403 TJm\n(data) 16.5977 Tj\n-403 TJm\n(so) 8.8568 Tj\n-402 TJm\n(f) 3.3175 Tj\n10 TJm\n(ar) 7.7409 Tj\n-403 TJm\n(supplied) 33.7633 Tj\n-403 TJm\n(by) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n384.152 554.62 Td\n/F124_0 9.9626 Tf\n(BZ2_bzWrite) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n449.906 554.62 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-768 TJm\n(The) 15.4918 Tj\n-403 TJm\n(logical) 27.1182 Tj\n-402 TJm\n(end-of-) 29.3199 Tj\n72 542.665 Td\n(stream) 26.5603 Tj\n-352 TJm\n(mark) 20.4731 Tj\n10 TJm\n(ers) 11.6164 Tj\n-352 TJm\n(are) 12.1643 Tj\n-353 TJm\n(also) 16.0497 Tj\n-352 TJm\n(written,) 30.7147 Tj\n-378 TJm\n(so) 8.8568 Tj\n-352 TJm\n(subsequent) 44.2738 Tj\n-352 TJm\n(calls) 18.2614 Tj\n-352 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n300.456 542.665 Td\n/F124_0 9.9626 Tf\n(BZ2_bzWrite) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n369.718 542.665 Td\n/F122_0 9.9626 Tf\n(are) 12.1643 Tj\n-352 TJm\n(ille) 12.7322 Tj\n15 TJm\n(g) 4.9813 Tj\n5 TJm\n(al.) 9.6836 Tj\n-1234 TJm\n(All) 12.7322 Tj\n-352 TJm\n(memory) 33.2053 Tj\n-352 TJm\n(associated) 40.9463 Tj\n-352 TJm\n(with) 17.7135 Tj\n72 530.71 Td\n(the) 12.1743 Tj\n-250 TJm\n(compressed) 47.0334 Tj\n-250 TJm\n(\\002le) 12.7322 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n151.411 530.71 Td\n/F124_0 9.9626 Tf\n(b) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n159.88 530.71 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-250 TJm\n(released.) 35.1281 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n207.231 530.71 Td\n/F124_0 9.9626 Tf\n(fflush) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n245.587 530.71 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-250 TJm\n(called) 23.7907 Tj\n-250 TJm\n(on) 9.9626 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(compressed) 47.0334 Tj\n-250 TJm\n(\\002le,) 15.2229 Tj\n-250 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-250 TJm\n(it) 5.5392 Tj\n-250 TJm\n(is) 6.6451 Tj\n-250 TJm\n(not) 12.7322 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n422.771 530.71 Td\n/F124_0 9.9626 Tf\n(fclose) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n458.636 530.71 Td\n/F122_0 9.9626 Tf\n(') 3.3175 Tj\n50 TJm\n(d.) 7.472 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 508.792 Td\n(If) 6.6351 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n81.574 508.792 Td\n/F124_0 9.9626 Tf\n(BZ2_bzWriteClose) 95.641 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n180.155 508.792 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-295 TJm\n(called) 23.7907 Tj\n-295 TJm\n(to) 7.7509 Tj\n-295 TJm\n(clean) 21.0211 Tj\n-295 TJm\n(up) 9.9626 Tj\n-295 TJm\n(after) 18.2515 Tj\n-295 TJm\n(an) 9.4047 Tj\n-295 TJm\n(error) 19.3573 Tj\n40 TJm\n(,) 2.4907 Tj\n-306 TJm\n(the) 12.1743 Tj\n-295 TJm\n(only) 17.7135 Tj\n-295 TJm\n(action) 24.3486 Tj\n-295 TJm\n(is) 6.6451 Tj\n-295 TJm\n(to) 7.7509 Tj\n-295 TJm\n(release) 27.6562 Tj\n-295 TJm\n(the) 12.1743 Tj\n-295 TJm\n(memory) 33.2053 Tj\n65 TJm\n(.) 2.4907 Tj\n-891 TJm\n(The) 15.4918 Tj\n-295 TJm\n(library) 26.5603 Tj\n72 496.837 Td\n(records) 29.3199 Tj\n-289 TJm\n(the) 12.1743 Tj\n-289 TJm\n(error) 19.3573 Tj\n-289 TJm\n(codes) 22.6848 Tj\n-289 TJm\n(issued) 24.9065 Tj\n-289 TJm\n(by) 9.9626 Tj\n-289 TJm\n(pre) 12.7222 Tj\n25 TJm\n(vious) 21.589 Tj\n-289 TJm\n(calls,) 20.7521 Tj\n-299 TJm\n(so) 8.8568 Tj\n-289 TJm\n(this) 14.396 Tj\n-289 TJm\n(situation) 34.3212 Tj\n-289 TJm\n(will) 15.5018 Tj\n-289 TJm\n(be) 9.4047 Tj\n-289 TJm\n(detected) 33.1954 Tj\n-289 TJm\n(automatically) 54.2364 Tj\n65 TJm\n(.) 2.4907 Tj\n-427 TJm\n(There) 23.2328 Tj\n-289 TJm\n(is) 6.6451 Tj\n-289 TJm\n(no) 9.9626 Tj\n-289 TJm\n(attempt) 29.8878 Tj\n72 484.882 Td\n(to) 7.7509 Tj\n-263 TJm\n(complete) 36.5229 Tj\n-262 TJm\n(the) 12.1743 Tj\n-263 TJm\n(compression) 50.3609 Tj\n-263 TJm\n(operation,) 40.1194 Tj\n-265 TJm\n(nor) 13.2801 Tj\n-263 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n258.308 484.882 Td\n/F124_0 9.9626 Tf\n(fflush) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n296.79 484.882 Td\n/F122_0 9.9626 Tf\n(the) 12.1743 Tj\n-263 TJm\n(compressed) 47.0334 Tj\n-262 TJm\n(\\002le.) 15.2229 Tj\n-696 TJm\n(Y) 7.193 Tj\n110 TJm\n(ou) 9.9626 Tj\n-263 TJm\n(can) 13.8281 Tj\n-263 TJm\n(force) 20.4632 Tj\n-262 TJm\n(this) 14.396 Tj\n-263 TJm\n(beha) 18.8094 Tj\n20 TJm\n(viour) 21.031 Tj\n-263 TJm\n(to) 7.7509 Tj\n-262 TJm\n(happen) 28.772 Tj\n72 472.926 Td\n(e) 4.4234 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(en) 9.4047 Tj\n-250 TJm\n(in) 7.7509 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(case) 17.1456 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(no) 9.9626 Tj\n-250 TJm\n(error) 19.3573 Tj\n40 TJm\n(,) 2.4907 Tj\n-250 TJm\n(by) 9.9626 Tj\n-250 TJm\n(passing) 29.8878 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(nonzero) 32.0895 Tj\n-250 TJm\n(v) 4.9813 Tj\n25 TJm\n(alue) 16.5977 Tj\n-250 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n305.015 472.926 Td\n/F124_0 9.9626 Tf\n(abandon) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n346.858 472.926 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 451.009 Td\n(If) 6.6351 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n80.597 451.009 Td\n/F124_0 9.9626 Tf\n(nbytes_in) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n136.358 451.009 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-197 TJm\n(non-null,) 36.2539 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n183.287 449.265 Td\n/F124_0 9.9626 Tf\n(*) 5.9776 Tj\n189.265 451.009 Td\n(nbytes_in) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n245.025 451.009 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-197 TJm\n(be) 9.4047 Tj\n-197 TJm\n(set) 11.0684 Tj\n-197 TJm\n(to) 7.7509 Tj\n-197 TJm\n(be) 9.4047 Tj\n-197 TJm\n(the) 12.1743 Tj\n-197 TJm\n(total) 17.7135 Tj\n-197 TJm\n(v) 4.9813 Tj\n20 TJm\n(olume) 24.9065 Tj\n-197 TJm\n(of) 8.2988 Tj\n-197 TJm\n(uncompressed) 56.996 Tj\n-197 TJm\n(data) 16.5977 Tj\n-197 TJm\n(handled.) 34.0322 Tj\n-584 TJm\n(Similarly) 37.0908 Tj\n65 TJm\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 439.053 Td\n/F124_0 9.9626 Tf\n(nbytes_out) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n134.716 439.053 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-295 TJm\n(be) 9.4047 Tj\n-295 TJm\n(set) 11.0684 Tj\n-295 TJm\n(to) 7.7509 Tj\n-295 TJm\n(the) 12.1743 Tj\n-295 TJm\n(total) 17.7135 Tj\n-295 TJm\n(v) 4.9813 Tj\n20 TJm\n(olume) 24.9065 Tj\n-295 TJm\n(of) 8.2988 Tj\n-296 TJm\n(compressed) 47.0334 Tj\n-295 TJm\n(data) 16.5977 Tj\n-295 TJm\n(written.) 30.7147 Tj\n-890 TJm\n(F) 5.5392 Tj\n15 TJm\n(or) 8.2988 Tj\n-295 TJm\n(compatibility) 53.1405 Tj\n-295 TJm\n(with) 17.7135 Tj\n-295 TJm\n(older) 20.4731 Tj\n-295 TJm\n(v) 4.9813 Tj\n15 TJm\n(ersions) 28.224 Tj\n-296 TJm\n(of) 8.2988 Tj\n72 427.098 Td\n(the) 12.1743 Tj\n-283 TJm\n(library) 26.5603 Tj\n65 TJm\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n118.294 427.098 Td\n/F124_0 9.9626 Tf\n(BZ2_bzWriteClose) 95.641 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n216.753 427.098 Td\n/F122_0 9.9626 Tf\n(only) 17.7135 Tj\n-283 TJm\n(yields) 23.8007 Tj\n-283 TJm\n(the) 12.1743 Tj\n-282 TJm\n(lo) 7.7509 Tj\n25 TJm\n(wer) 14.9339 Tj\n-283 TJm\n(32) 9.9626 Tj\n-283 TJm\n(bits) 14.396 Tj\n-283 TJm\n(of) 8.2988 Tj\n-283 TJm\n(these) 20.4731 Tj\n-282 TJm\n(counts.) 28.503 Tj\n-817 TJm\n(Use) 15.4918 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n423.499 427.098 Td\n/F124_0 9.9626 Tf\n(BZ2_bzWriteClose64) 107.5961 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n533.913 427.098 Td\n/F122_0 9.9626 Tf\n(if) 6.0871 Tj\n72 415.143 Td\n(you) 14.9439 Tj\n-250 TJm\n(w) 7.193 Tj\n10 TJm\n(ant) 12.1743 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(full) 13.8381 Tj\n-250 TJm\n(64) 9.9626 Tj\n-250 TJm\n(bit) 10.5205 Tj\n-250 TJm\n(counts.) 28.503 Tj\n-620 TJm\n(These) 23.7907 Tj\n-250 TJm\n(tw) 9.9626 Tj\n10 TJm\n(o) 4.9813 Tj\n-250 TJm\n(functions) 37.0808 Tj\n-250 TJm\n(are) 12.1643 Tj\n-250 TJm\n(otherwise) 38.7346 Tj\n-250 TJm\n(absolutely) 40.9562 Tj\n-250 TJm\n(identical.) 36.8018 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 393.225 Td\n(Possible) 33.2153 Tj\n-250 TJm\n(assignments) 48.7072 Tj\n-250 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n169.144 393.225 Td\n/F124_0 9.9626 Tf\n(bzerror) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n210.987 393.225 Td\n/F122_0 9.9626 Tf\n(:) 2.7696 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 306.386] cm\n0 0 468 83.686 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 381.704 Td\n/F124_0 9.9626 Tf\n(BZ_SEQUENCE_ERROR) 101.6185 Tj\n98.488 369.749 Td\n(if) 11.9551 Tj\n-426 TJm\n(b) 5.9776 Tj\n-426 TJm\n(was) 17.9327 Tj\n-426 TJm\n(opened) 35.8654 Tj\n-426 TJm\n(with) 23.9102 Tj\n-426 TJm\n(BZ2_bzReadOpen) 83.6858 Tj\n90 357.793 Td\n(BZ_IO_ERROR) 65.7532 Tj\n98.488 345.838 Td\n(if) 11.9551 Tj\n-426 TJm\n(there) 29.8878 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(an) 11.9551 Tj\n-426 TJm\n(error) 29.8878 Tj\n-426 TJm\n(writing) 41.8429 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(compressed) 59.7756 Tj\n-426 TJm\n(file) 23.9102 Tj\n90 333.883 Td\n(BZ_OK) 29.8878 Tj\n98.488 321.928 Td\n(otherwise) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 275.765 Td\n/F116_0 17.2154 Tf\n(3.4.8.) 43.0729 Tj\n-278 TJm\n(Handling) 73.6475 Tj\n-278 TJm\n(embed) 55.4852 Tj\n10 TJm\n(ded) 30.609 Tj\n-278 TJm\n(compressed) 101.4159 Tj\n-278 TJm\n(data) 35.3949 Tj\n-278 TJm\n(streams) 66.0211 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 253.847 Td\n/F122_0 9.9626 Tf\n(The) 15.4918 Tj\n-203 TJm\n(high-le) 28.224 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(el) 7.193 Tj\n-203 TJm\n(library) 26.5603 Tj\n-203 TJm\n(f) 3.3175 Tj\n10 TJm\n(acilitates) 35.417 Tj\n-203 TJm\n(use) 13.2801 Tj\n-203 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n226.404 253.847 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n258.316 253.847 Td\n/F122_0 9.9626 Tf\n(data) 16.5977 Tj\n-203 TJm\n(streams) 30.4357 Tj\n-203 TJm\n(which) 24.3486 Tj\n-203 TJm\n(form) 19.3673 Tj\n-203 TJm\n(some) 21.031 Tj\n-203 TJm\n(part) 15.4918 Tj\n-203 TJm\n(of) 8.2988 Tj\n-203 TJm\n(a) 4.4234 Tj\n-204 TJm\n(surrounding,) 50.6399 Tj\n-212 TJm\n(lar) 10.5105 Tj\n18 TJm\n(ger) 12.7222 Tj\n-203 TJm\n(data) 16.5977 Tj\n-203 TJm\n(stream.) 29.0509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 221.967 Td\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-450 TJm\n(F) 5.5392 Tj\n15 TJm\n(or) 8.2988 Tj\n-264 TJm\n(writing,) 31.2726 Tj\n-267 TJm\n(the) 12.1743 Tj\n-264 TJm\n(library) 26.5603 Tj\n-264 TJm\n(tak) 12.1743 Tj\n10 TJm\n(es) 8.2988 Tj\n-264 TJm\n(an) 9.4047 Tj\n-264 TJm\n(open) 19.3673 Tj\n-264 TJm\n(\\002le) 12.7322 Tj\n-264 TJm\n(handle,) 29.0509 Tj\n-267 TJm\n(writes) 24.3486 Tj\n-264 TJm\n(compressed) 47.0334 Tj\n-264 TJm\n(data) 16.5977 Tj\n-264 TJm\n(to) 7.7509 Tj\n-264 TJm\n(it,) 8.0299 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n397.758 221.967 Td\n/F124_0 9.9626 Tf\n(fflush) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n433.624 221.967 Td\n/F122_0 9.9626 Tf\n(es) 8.2988 Tj\n-264 TJm\n(it) 5.5392 Tj\n-264 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-264 TJm\n(does) 18.2614 Tj\n-264 TJm\n(not) 12.7322 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n504.135 221.967 Td\n/F124_0 9.9626 Tf\n(fclose) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n81.963 210.012 Td\n/F122_0 9.9626 Tf\n(it.) 8.0299 Tj\n-675 TJm\n(The) 15.4918 Tj\n-259 TJm\n(calling) 27.1182 Tj\n-260 TJm\n(a) 4.4234 Tj\n1 TJm\n(pp) 9.9626 Tj\n-1 TJm\n(l) 2.7696 Tj\n1 TJm\n(ication) 27.1182 Tj\n-260 TJm\n(can) 13.8281 Tj\n-259 TJm\n(write) 20.4731 Tj\n-259 TJm\n(its) 9.4147 Tj\n-259 TJm\n(o) 4.9813 Tj\n25 TJm\n(wn) 12.1743 Tj\n-259 TJm\n(data) 16.5977 Tj\n-260 TJm\n(before) 25.4445 Tj\n-259 TJm\n(and) 14.386 Tj\n-259 TJm\n(after) 18.2515 Tj\n-259 TJm\n(the) 12.1743 Tj\n-259 TJm\n(compressed) 47.0334 Tj\n-260 TJm\n(dat) 12.1743 Tj\n1 TJm\n(a) 4.4234 Tj\n-260 TJm\n(stream,) 29.0509 Tj\n-261 TJm\n(using) 21.589 Tj\n-259 TJm\n(that) 14.9439 Tj\n-260 TJm\n(sam) 16.0497 Tj\n1 TJm\n(e) 4.4234 Tj\n-260 TJm\n(\\002le) 12.7322 Tj\n81.963 198.056 Td\n(handle.) 29.0509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 176.139 Td\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-450 TJm\n(Reading) 33.2053 Tj\n-258 TJm\n(is) 6.6451 Tj\n-259 TJm\n(more) 20.4731 Tj\n-258 TJm\n(comple) 29.3299 Tj\n15 TJm\n(x,) 7.472 Tj\n-261 TJm\n(and) 14.386 Tj\n-258 TJm\n(the) 12.1743 Tj\n-258 TJm\n(f) 3.3175 Tj\n10 TJm\n(acilities) 30.9936 Tj\n-259 TJm\n(are) 12.1643 Tj\n-258 TJm\n(not) 12.7322 Tj\n-258 TJm\n(as) 8.2988 Tj\n-259 TJm\n(general) 29.3199 Tj\n-258 TJm\n(as) 8.2988 Tj\n-259 TJm\n(the) 12.1743 Tj\n15 TJm\n(y) 4.9813 Tj\n-258 TJm\n(could) 22.1369 Tj\n-258 TJm\n(be) 9.4047 Tj\n-259 TJm\n(since) 20.4731 Tj\n-258 TJm\n(generality) 39.8404 Tj\n-259 TJm\n(is) 6.6451 Tj\n-258 TJm\n(hard) 17.7035 Tj\n-258 TJm\n(to) 7.7509 Tj\n-259 TJm\n(reconcile) 36.5129 Tj\n81.963 164.183 Td\n(with) 17.7135 Tj\n-432 TJm\n(ef) 7.7409 Tj\n25 TJm\n(\\002cienc) 26.5603 Tj\n15 TJm\n(y) 4.9813 Tj\n65 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n161.767 164.183 Td\n/F124_0 9.9626 Tf\n(BZ2_bzRead) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n225.847 164.183 Td\n/F122_0 9.9626 Tf\n(reads) 21.0211 Tj\n-432 TJm\n(from) 19.3673 Tj\n-432 TJm\n(the) 12.1743 Tj\n-432 TJm\n(compressed) 47.0334 Tj\n-432 TJm\n(\\002le) 12.7322 Tj\n-432 TJm\n(in) 7.7509 Tj\n-432 TJm\n(blocks) 26.0123 Tj\n-432 TJm\n(of) 8.2988 Tj\n-432 TJm\n(size) 15.4918 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n434.467 164.183 Td\n/F124_0 9.9626 Tf\n(BZ_MAX_UNUSED) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n516.479 164.183 Td\n/F122_0 9.9626 Tf\n(bytes,) 23.5217 Tj\n81.963 152.228 Td\n(and) 14.386 Tj\n-436 TJm\n(in) 7.7509 Tj\n-435 TJm\n(doing) 22.6948 Tj\n-436 TJm\n(so) 8.8568 Tj\n-436 TJm\n(probably) 35.417 Tj\n-436 TJm\n(will) 15.5018 Tj\n-435 TJm\n(o) 4.9813 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(ershoot) 29.3299 Tj\n-436 TJm\n(the) 12.1743 Tj\n-436 TJm\n(logical) 27.1182 Tj\n-435 TJm\n(end) 14.386 Tj\n-436 TJm\n(of) 8.2988 Tj\n-436 TJm\n(compressed) 47.0334 Tj\n-436 TJm\n(s) 3.8755 Tj\n1 TJm\n(tream.) 25.1755 Tj\n-1735 TJm\n(T) 6.0871 Tj\n80 TJm\n(o) 4.9813 Tj\n-436 TJm\n(reco) 17.1456 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(er) 7.7409 Tj\n-435 TJm\n(this) 14.396 Tj\n-436 TJm\n(data) 16.5977 Tj\n-436 TJm\n(once) 18.8094 Tj\n81.963 140.273 Td\n(decompression) 59.7656 Tj\n-290 TJm\n(has) 13.2801 Tj\n-289 TJm\n(ended,) 26.2813 Tj\n-300 TJm\n(call) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n207.321 140.273 Td\n/F124_0 9.9626 Tf\n(BZ2_bzReadGetUnused) 113.5736 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n323.782 140.273 Td\n/F122_0 9.9626 Tf\n(after) 18.2515 Tj\n-290 TJm\n(the) 12.1743 Tj\n-289 TJm\n(last) 13.8381 Tj\n-290 TJm\n(call) 14.386 Tj\n-290 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n405.164 140.273 Td\n/F124_0 9.9626 Tf\n(BZ2_bzRead) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n467.826 140.273 Td\n/F122_0 9.9626 Tf\n(\\(the) 15.4918 Tj\n-290 TJm\n(one) 14.386 Tj\n-290 TJm\n(returning) 36.5229 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n81.963 128.318 Td\n/F124_0 9.9626 Tf\n(BZ_STREAM_END) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n159.671 128.318 Td\n/F122_0 9.9626 Tf\n(\\)) 3.3175 Tj\n-250 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-250 TJm\n(before) 25.4445 Tj\n-250 TJm\n(calling) 27.1182 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n238.047 128.318 Td\n/F124_0 9.9626 Tf\n(BZ2_bzReadClose) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n327.71 128.318 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 50.852 Td\n(24) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 25 28\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n419.067 749.245 Td\n/F122_0 9.9626 Tf\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n496.556 749.245 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n72 710.037 Td\n/F122_0 9.9626 Tf\n(This) 17.7135 Tj\n-271 TJm\n(mechanism) 45.3796 Tj\n-272 TJm\n(mak) 17.1556 Tj\n10 TJm\n(es) 8.2988 Tj\n-271 TJm\n(it) 5.5392 Tj\n-271 TJm\n(easy) 17.7035 Tj\n-271 TJm\n(to) 7.7509 Tj\n-272 TJm\n(decompress) 47.0334 Tj\n-271 TJm\n(multiple) 33.2153 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n293.313 710.037 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n325.903 710.037 Td\n/F122_0 9.9626 Tf\n(streams) 30.4357 Tj\n-271 TJm\n(placed) 26.0024 Tj\n-272 TJm\n(end-to-end.) 45.6486 Tj\n-374 TJm\n(As) 11.0684 Tj\n-271 TJm\n(the) 12.1743 Tj\n-271 TJm\n(end) 14.386 Tj\n-271 TJm\n(of) 8.2988 Tj\n-272 TJm\n(one) 14.386 Tj\n-271 TJm\n(stream,) 29.0509 Tj\n72 698.082 Td\n(when) 21.579 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n96.195 698.082 Td\n/F124_0 9.9626 Tf\n(BZ2_bzRead) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n158.586 698.082 Td\n/F122_0 9.9626 Tf\n(returns) 27.6661 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n188.868 698.082 Td\n/F124_0 9.9626 Tf\n(BZ_STREAM_END) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n266.577 698.082 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-263 TJm\n(call) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n288.685 698.082 Td\n/F124_0 9.9626 Tf\n(BZ2_bzReadGetUnused) 113.5736 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n404.875 698.082 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-263 TJm\n(coll) 14.9439 Tj\n1 TJm\n(ect) 11.6164 Tj\n-263 TJm\n(the) 12.1743 Tj\n-263 TJm\n(unused) 28.224 Tj\n-262 TJm\n(data) 16.5977 Tj\n-263 TJm\n(\\(cop) 17.7035 Tj\n10 TJm\n(y) 4.9813 Tj\n-262 TJm\n(it) 5.5392 Tj\n72 686.127 Td\n(into) 15.5018 Tj\n-265 TJm\n(your) 18.2614 Tj\n-265 TJm\n(o) 4.9813 Tj\n25 TJm\n(wn) 12.1743 Tj\n-265 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n-265 TJm\n(some) 21.031 Tj\n25 TJm\n(where\\).) 30.1468 Tj\n-711 TJm\n(That) 18.2614 Tj\n-265 TJm\n(data) 16.5977 Tj\n-265 TJm\n(forms) 23.2427 Tj\n-265 TJm\n(the) 12.1743 Tj\n-265 TJm\n(start) 17.1556 Tj\n-265 TJm\n(of) 8.2988 Tj\n-265 TJm\n(the) 12.1743 Tj\n-265 TJm\n(ne) 9.4047 Tj\n15 TJm\n(xt) 7.7509 Tj\n-265 TJm\n(compressed) 47.0334 Tj\n-265 TJm\n(stream.) 29.0509 Tj\n-711 TJm\n(T) 6.0871 Tj\n80 TJm\n(o) 4.9813 Tj\n-265 TJm\n(start) 17.1556 Tj\n-265 TJm\n(uncompressing) 60.3235 Tj\n72 674.172 Td\n(that) 14.9439 Tj\n-246 TJm\n(ne) 9.4047 Tj\n15 TJm\n(xt) 7.7509 Tj\n-246 TJm\n(stream,) 29.0509 Tj\n-247 TJm\n(call) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n157.205 674.172 Td\n/F124_0 9.9626 Tf\n(BZ2_bzReadOpen) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n243.344 674.172 Td\n/F122_0 9.9626 Tf\n(ag) 9.4047 Tj\n5 TJm\n(ain,) 14.6649 Tj\n-247 TJm\n(feeding) 29.8778 Tj\n-246 TJm\n(in) 7.7509 Tj\n-246 TJm\n(the) 12.1743 Tj\n-247 TJm\n(unused) 28.224 Tj\n-246 TJm\n(data) 16.5977 Tj\n-246 TJm\n(via) 12.1743 Tj\n-246 TJm\n(the) 12.1743 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n405.967 674.172 Td\n/F124_0 9.9626 Tf\n(unused) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n444.286 674.172 Td\n/F122_0 9.9626 Tf\n(/) 2.7696 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n449.508 674.172 Td\n/F124_0 9.9626 Tf\n(nUnused) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n493.804 674.172 Td\n/F122_0 9.9626 Tf\n(parameters.) 46.1966 Tj\n72 662.217 Td\n(K) 7.193 Tj\n25 TJm\n(eep) 13.8281 Tj\n-263 TJm\n(doing) 22.6948 Tj\n-263 TJm\n(this) 14.396 Tj\n-264 TJm\n(until) 18.2714 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n158.622 662.217 Td\n/F124_0 9.9626 Tf\n(BZ_STREAM_END) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n238.952 662.217 Td\n/F122_0 9.9626 Tf\n(return) 23.7907 Tj\n-263 TJm\n(coincides) 37.6287 Tj\n-263 TJm\n(with) 17.7135 Tj\n-264 TJm\n(the) 12.1743 Tj\n-263 TJm\n(ph) 9.9626 Tj\n5 TJm\n(ysical) 23.2427 Tj\n-263 TJm\n(end) 14.386 Tj\n-263 TJm\n(of) 8.2988 Tj\n-263 TJm\n(\\002le) 12.7322 Tj\n-263 TJm\n(\\() 3.3175 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n423.124 662.217 Td\n/F124_0 9.9626 Tf\n(feof\\(f\\)) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n464.968 662.217 Td\n/F122_0 9.9626 Tf\n(\\).) 5.8082 Tj\n-699 TJm\n(In) 8.2988 Tj\n-263 TJm\n(this) 14.396 Tj\n-263 TJm\n(situation) 34.3212 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 650.261 Td\n/F124_0 9.9626 Tf\n(BZ2_bzReadGetUnused) 113.5736 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n188.065 650.261 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(course) 26.0024 Tj\n-250 TJm\n(return) 23.7907 Tj\n-250 TJm\n(no) 9.9626 Tj\n-250 TJm\n(data.) 19.0883 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 628.344 Td\n(This) 17.7135 Tj\n-240 TJm\n(should) 26.5703 Tj\n-241 TJm\n(gi) 7.7509 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-240 TJm\n(some) 21.031 Tj\n-241 TJm\n(feel) 14.9339 Tj\n-240 TJm\n(for) 11.6164 Tj\n-241 TJm\n(ho) 9.9626 Tj\n25 TJm\n(w) 7.193 Tj\n-240 TJm\n(the) 12.1743 Tj\n-240 TJm\n(high-le) 28.224 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(el) 7.193 Tj\n-241 TJm\n(interf) 21.579 Tj\n10 TJm\n(ace) 13.2702 Tj\n-240 TJm\n(can) 13.8281 Tj\n-241 TJm\n(be) 9.4047 Tj\n-240 TJm\n(used.) 20.7521 Tj\n-614 TJm\n(If) 6.6351 Tj\n-240 TJm\n(you) 14.9439 Tj\n-241 TJm\n(require) 28.2141 Tj\n-240 TJm\n(e) 4.4234 Tj\n15 TJm\n(xtra) 15.4918 Tj\n-241 TJm\n(\\003e) 9.9626 Tj\n15 TJm\n(xibi) 15.5018 Tj\n1 TJm\n(lity) 13.2901 Tj\n65 TJm\n(,) 2.4907 Tj\n-243 TJm\n(you') 18.2614 Tj\n10 TJm\n(ll) 5.5392 Tj\n-240 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-241 TJm\n(to) 7.7509 Tj\n72 616.389 Td\n(bite) 14.9439 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(b) 4.9813 Tj\n20 TJm\n(ullet) 17.7135 Tj\n-250 TJm\n(and) 14.386 Tj\n-250 TJm\n(get) 12.1743 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(grips) 19.9252 Tj\n-250 TJm\n(with) 17.7135 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(lo) 7.7509 Tj\n25 TJm\n(w-le) 17.7035 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(el) 7.193 Tj\n-250 TJm\n(interf) 21.579 Tj\n10 TJm\n(ace.) 15.7608 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 585.767 Td\n/F116_0 17.2154 Tf\n(3.4.9.) 43.0729 Tj\n-278 TJm\n(Standar) 64.0929 Tj\n20 TJm\n(d) 10.5186 Tj\n-278 TJm\n(\\002le-reading/writing) 154.009 Tj\n-278 TJm\n(code) 40.1807 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 563.85 Td\n/F122_0 9.9626 Tf\n(Here') 22.6749 Tj\n55 TJm\n(s) 3.8755 Tj\n-250 TJm\n(ho) 9.9626 Tj\n25 TJm\n(w) 7.193 Tj\n-250 TJm\n(you') 18.2614 Tj\n50 TJm\n(d) 4.9813 Tj\n-250 TJm\n(write) 20.4731 Tj\n-250 TJm\n(data) 16.5977 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(compressed) 47.0334 Tj\n-250 TJm\n(\\002le:) 15.5018 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 190.086] cm\n0 0 468 370.61 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 552.328 Td\n/F124_0 9.9626 Tf\n(FILE) 23.9102 Tj\n113.91 550.584 Td\n(*) 5.9776 Tj\n132.62 552.328 Td\n(f;) 11.9551 Tj\n90 540.373 Td\n(BZFILE) 35.8654 Tj\n125.866 538.629 Td\n(*) 5.9776 Tj\n136.087 540.373 Td\n(b;) 11.9551 Tj\n90 528.418 Td\n(int) 17.9327 Tj\n-2130 TJm\n(nBuf;) 29.8878 Tj\n90 516.462 Td\n(char) 23.9102 Tj\n-1704 TJm\n(buf[) 23.9102 Tj\n-426 TJm\n(/) 5.9776 Tj\n165.018 514.719 Td\n(*) 5.9776 Tj\n175.24 516.462 Td\n(whatever) 47.8205 Tj\n-426 TJm\n(size) 23.9102 Tj\n-426 TJm\n(you) 17.9327 Tj\n-426 TJm\n(like) 23.9102 Tj\n305.79 514.719 Td\n(*) 5.9776 Tj\n311.767 516.462 Td\n(/) 5.9776 Tj\n-426 TJm\n(];) 11.9551 Tj\n90 504.507 Td\n(int) 17.9327 Tj\n-2130 TJm\n(bzerror;) 47.8205 Tj\n90 492.552 Td\n(int) 17.9327 Tj\n-2130 TJm\n(nWritten;) 53.798 Tj\n90 468.642 Td\n(f) 5.9776 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(fopen) 29.8878 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(\"myfile.bz2\",) 77.7083 Tj\n-426 TJm\n(\"w\") 17.9327 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n90 456.687 Td\n(if) 11.9551 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(!f) 11.9551 Tj\n-426 TJm\n(\\)) 5.9776 Tj\n-426 TJm\n({) 5.9776 Tj\n94.244 444.731 Td\n(/) 5.9776 Tj\n100.222 442.988 Td\n(*) 5.9776 Tj\n110.443 444.731 Td\n(handle) 35.8654 Tj\n-426 TJm\n(error) 29.8878 Tj\n184.684 442.988 Td\n(*) 5.9776 Tj\n190.662 444.731 Td\n(/) 5.9776 Tj\n90 432.776 Td\n(}) 5.9776 Tj\n90 420.821 Td\n(b) 5.9776 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(BZ2_bzWriteOpen\\() 95.641 Tj\n-426 TJm\n(&bzerror,) 53.798 Tj\n-426 TJm\n(f,) 11.9551 Tj\n-426 TJm\n(9) 5.9776 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n90 408.866 Td\n(if) 11.9551 Tj\n-426 TJm\n(\\(bzerror) 47.8205 Tj\n-426 TJm\n(!=) 11.9551 Tj\n-426 TJm\n(BZ_OK\\)) 35.8654 Tj\n-426 TJm\n({) 5.9776 Tj\n94.244 396.911 Td\n(BZ2_bzWriteClose) 95.641 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(b) 5.9776 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n94.244 384.955 Td\n(/) 5.9776 Tj\n100.222 383.212 Td\n(*) 5.9776 Tj\n110.443 384.955 Td\n(handle) 35.8654 Tj\n-426 TJm\n(error) 29.8878 Tj\n184.684 383.212 Td\n(*) 5.9776 Tj\n190.662 384.955 Td\n(/) 5.9776 Tj\n90 373 Td\n(}) 5.9776 Tj\n90 349.09 Td\n(while) 29.8878 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(/) 5.9776 Tj\n140.331 347.346 Td\n(*) 5.9776 Tj\n150.553 349.09 Td\n(condition) 53.798 Tj\n208.595 347.346 Td\n(*) 5.9776 Tj\n214.572 349.09 Td\n(/) 5.9776 Tj\n-426 TJm\n(\\)) 5.9776 Tj\n-426 TJm\n({) 5.9776 Tj\n94.244 337.135 Td\n(/) 5.9776 Tj\n100.222 335.391 Td\n(*) 5.9776 Tj\n110.443 337.135 Td\n(get) 17.9327 Tj\n-426 TJm\n(data) 23.9102 Tj\n-426 TJm\n(to) 11.9551 Tj\n-426 TJm\n(write) 29.8878 Tj\n-426 TJm\n(into) 23.9102 Tj\n-426 TJm\n(buf,) 23.9102 Tj\n-426 TJm\n(and) 17.9327 Tj\n-426 TJm\n(set) 17.9327 Tj\n-426 TJm\n(nBuf) 23.9102 Tj\n-426 TJm\n(appropriately) 77.7083 Tj\n421.874 335.391 Td\n(*) 5.9776 Tj\n427.852 337.135 Td\n(/) 5.9776 Tj\n94.244 325.18 Td\n(nWritten) 47.8205 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(BZ2_bzWrite) 65.7532 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(&bzerror,) 53.798 Tj\n-426 TJm\n(b,) 11.9551 Tj\n-426 TJm\n(buf,) 23.9102 Tj\n-426 TJm\n(nBuf) 23.9102 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n94.244 313.224 Td\n(if) 11.9551 Tj\n-426 TJm\n(\\(bzerror) 47.8205 Tj\n-426 TJm\n(==) 11.9551 Tj\n-426 TJm\n(BZ_IO_ERROR\\)) 71.7307 Tj\n-426 TJm\n({) 5.9776 Tj\n102.732 301.269 Td\n(BZ2_bzWriteClose) 95.641 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(&bzerror,) 53.798 Tj\n-426 TJm\n(b) 5.9776 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n102.732 289.314 Td\n(/) 5.9776 Tj\n108.71 287.571 Td\n(*) 5.9776 Tj\n118.931 289.314 Td\n(handle) 35.8654 Tj\n-426 TJm\n(error) 29.8878 Tj\n193.172 287.571 Td\n(*) 5.9776 Tj\n199.15 289.314 Td\n(/) 5.9776 Tj\n94.244 277.359 Td\n(}) 5.9776 Tj\n90 265.404 Td\n(}) 5.9776 Tj\n90 241.493 Td\n(BZ2_bzWriteClose\\() 101.6185 Tj\n-426 TJm\n(&bzerror,) 53.798 Tj\n-426 TJm\n(b) 5.9776 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n90 229.538 Td\n(if) 11.9551 Tj\n-426 TJm\n(\\(bzerror) 47.8205 Tj\n-426 TJm\n(==) 11.9551 Tj\n-426 TJm\n(BZ_IO_ERROR\\)) 71.7307 Tj\n-426 TJm\n({) 5.9776 Tj\n94.244 217.583 Td\n(/) 5.9776 Tj\n100.222 215.84 Td\n(*) 5.9776 Tj\n110.443 217.583 Td\n(handle) 35.8654 Tj\n-426 TJm\n(error) 29.8878 Tj\n184.684 215.84 Td\n(*) 5.9776 Tj\n190.662 217.583 Td\n(/) 5.9776 Tj\n90 205.628 Td\n(}) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 168.168 Td\n/F122_0 9.9626 Tf\n(And) 17.1556 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(read) 17.1456 Tj\n-250 TJm\n(from) 19.3673 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(compressed) 47.0334 Tj\n-250 TJm\n(\\002le:) 15.5018 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 50.951 Td\n(25) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 26 29\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n419.067 749.245 Td\n/F122_0 9.9626 Tf\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n496.556 749.245 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 349.39] cm\n0 0 468 370.61 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 711.631 Td\n/F124_0 9.9626 Tf\n(FILE) 23.9102 Tj\n113.91 709.888 Td\n(*) 5.9776 Tj\n132.62 711.631 Td\n(f;) 11.9551 Tj\n90 699.676 Td\n(BZFILE) 35.8654 Tj\n125.866 697.933 Td\n(*) 5.9776 Tj\n136.087 699.676 Td\n(b;) 11.9551 Tj\n90 687.721 Td\n(int) 17.9327 Tj\n-2130 TJm\n(nBuf;) 29.8878 Tj\n90 675.766 Td\n(char) 23.9102 Tj\n-1704 TJm\n(buf[) 23.9102 Tj\n-426 TJm\n(/) 5.9776 Tj\n165.018 674.022 Td\n(*) 5.9776 Tj\n175.24 675.766 Td\n(whatever) 47.8205 Tj\n-426 TJm\n(size) 23.9102 Tj\n-426 TJm\n(you) 17.9327 Tj\n-426 TJm\n(like) 23.9102 Tj\n305.79 674.022 Td\n(*) 5.9776 Tj\n311.767 675.766 Td\n(/) 5.9776 Tj\n-426 TJm\n(];) 11.9551 Tj\n90 663.811 Td\n(int) 17.9327 Tj\n-2130 TJm\n(bzerror;) 47.8205 Tj\n90 651.856 Td\n(int) 17.9327 Tj\n-2130 TJm\n(nWritten;) 53.798 Tj\n90 627.945 Td\n(f) 5.9776 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(fopen) 29.8878 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(\"myfile.bz2\",) 77.7083 Tj\n-426 TJm\n(\"r\") 17.9327 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n90 615.99 Td\n(if) 11.9551 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(!f) 11.9551 Tj\n-426 TJm\n(\\)) 5.9776 Tj\n-426 TJm\n({) 5.9776 Tj\n98.488 604.035 Td\n(/) 5.9776 Tj\n104.466 602.291 Td\n(*) 5.9776 Tj\n114.687 604.035 Td\n(handle) 35.8654 Tj\n-426 TJm\n(error) 29.8878 Tj\n188.928 602.291 Td\n(*) 5.9776 Tj\n194.906 604.035 Td\n(/) 5.9776 Tj\n90 592.08 Td\n(}) 5.9776 Tj\n90 580.125 Td\n(b) 5.9776 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(BZ2_bzReadOpen) 83.6858 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(&bzerror,) 53.798 Tj\n-426 TJm\n(f,) 11.9551 Tj\n-426 TJm\n(0,) 11.9551 Tj\n-426 TJm\n(NULL,) 29.8878 Tj\n-426 TJm\n(0) 5.9776 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n90 568.169 Td\n(if) 11.9551 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(bzerror) 41.8429 Tj\n-426 TJm\n(!=) 11.9551 Tj\n-426 TJm\n(BZ_OK) 29.8878 Tj\n-426 TJm\n(\\)) 5.9776 Tj\n-426 TJm\n({) 5.9776 Tj\n98.488 556.214 Td\n(BZ2_bzReadClose) 89.6634 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(&bzerror,) 53.798 Tj\n-426 TJm\n(b) 5.9776 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n98.488 544.259 Td\n(/) 5.9776 Tj\n104.466 542.516 Td\n(*) 5.9776 Tj\n114.687 544.259 Td\n(handle) 35.8654 Tj\n-426 TJm\n(error) 29.8878 Tj\n188.928 542.516 Td\n(*) 5.9776 Tj\n194.906 544.259 Td\n(/) 5.9776 Tj\n90 532.304 Td\n(}) 5.9776 Tj\n90 508.393 Td\n(bzerror) 41.8429 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(BZ_OK;) 35.8654 Tj\n90 496.438 Td\n(while) 29.8878 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(bzerror) 41.8429 Tj\n-426 TJm\n(==) 11.9551 Tj\n-426 TJm\n(BZ_OK) 29.8878 Tj\n-426 TJm\n(&&) 11.9551 Tj\n-426 TJm\n(/) 5.9776 Tj\n252.948 494.695 Td\n(*) 5.9776 Tj\n263.17 496.438 Td\n(arbitrary) 53.798 Tj\n-426 TJm\n(other) 29.8878 Tj\n-426 TJm\n(conditions) 59.7756 Tj\n419.364 494.695 Td\n(*) 5.9776 Tj\n425.341 496.438 Td\n(/\\)) 11.9551 Tj\n-426 TJm\n({) 5.9776 Tj\n98.488 484.483 Td\n(nBuf) 23.9102 Tj\n-426 TJm\n(=) 5.9776 Tj\n-426 TJm\n(BZ2_bzRead) 59.7756 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(&bzerror,) 53.798 Tj\n-426 TJm\n(b,) 11.9551 Tj\n-426 TJm\n(buf,) 23.9102 Tj\n-426 TJm\n(/) 5.9776 Tj\n319.478 482.74 Td\n(*) 5.9776 Tj\n329.7 484.483 Td\n(size) 23.9102 Tj\n-426 TJm\n(of) 11.9551 Tj\n-426 TJm\n(buf) 17.9327 Tj\n396.23 482.74 Td\n(*) 5.9776 Tj\n402.208 484.483 Td\n(/) 5.9776 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n98.488 472.528 Td\n(if) 11.9551 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(bzerror) 41.8429 Tj\n-426 TJm\n(==) 11.9551 Tj\n-426 TJm\n(BZ_OK) 29.8878 Tj\n-426 TJm\n(\\)) 5.9776 Tj\n-426 TJm\n({) 5.9776 Tj\n106.976 460.573 Td\n(/) 5.9776 Tj\n112.953 458.829 Td\n(*) 5.9776 Tj\n123.175 460.573 Td\n(do) 11.9551 Tj\n-426 TJm\n(something) 53.798 Tj\n-426 TJm\n(with) 23.9102 Tj\n-426 TJm\n(buf[0) 29.8878 Tj\n-426 TJm\n(..) 11.9551 Tj\n-426 TJm\n(nBuf-1]) 41.8429 Tj\n321.989 458.829 Td\n(*) 5.9776 Tj\n327.966 460.573 Td\n(/) 5.9776 Tj\n98.488 448.618 Td\n(}) 5.9776 Tj\n90 436.662 Td\n(}) 5.9776 Tj\n90 424.707 Td\n(if) 11.9551 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(bzerror) 41.8429 Tj\n-426 TJm\n(!=) 11.9551 Tj\n-426 TJm\n(BZ_STREAM_END) 77.7083 Tj\n-426 TJm\n(\\)) 5.9776 Tj\n-426 TJm\n({) 5.9776 Tj\n102.732 412.752 Td\n(BZ2_bzReadClose) 89.6634 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(&bzerror,) 53.798 Tj\n-426 TJm\n(b) 5.9776 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n102.732 400.797 Td\n(/) 5.9776 Tj\n108.71 399.053 Td\n(*) 5.9776 Tj\n118.931 400.797 Td\n(handle) 35.8654 Tj\n-426 TJm\n(error) 29.8878 Tj\n193.172 399.053 Td\n(*) 5.9776 Tj\n199.15 400.797 Td\n(/) 5.9776 Tj\n90 388.842 Td\n(}) 5.9776 Tj\n-426 TJm\n(else) 23.9102 Tj\n-426 TJm\n({) 5.9776 Tj\n102.732 376.887 Td\n(BZ2_bzReadClose) 89.6634 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(&bzerror,) 53.798 Tj\n-426 TJm\n(b) 5.9776 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n90 364.931 Td\n(}) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 314.637 Td\n/F116_0 20.6585 Tf\n(3.5.) 34.4584 Tj\n-278 TJm\n(Utility) 57.3893 Tj\n-278 TJm\n(functions) 92.9633 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 284.016 Td\n/F116_0 17.2154 Tf\n(3.5.1.) 43.0729 Tj\n-278 TJm\n(BZ2_bzBuffT) 106.1502 Tj\n80 TJm\n(oBuffCompress) 129.1155 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 183.815] cm\n0 0 468 95.641 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 271.087 Td\n/F124_0 9.9626 Tf\n(int) 17.9327 Tj\n-426 TJm\n(BZ2_bzBuffToBuffCompress\\() 149.439 Tj\n-426 TJm\n(char) 23.9102 Tj\n289.771 269.344 Td\n(*) 5.9776 Tj\n333.944 271.087 Td\n(dest,) 29.8878 Tj\n217.319 259.132 Td\n(unsigned) 47.8205 Tj\n-426 TJm\n(int) 17.9327 Tj\n287.317 257.389 Td\n(*) 5.9776 Tj\n297.538 259.132 Td\n(destLen,) 47.8205 Tj\n217.319 247.177 Td\n(char) 23.9102 Tj\n241.23 245.434 Td\n(*) 5.9776 Tj\n285.403 247.177 Td\n(source,) 41.8429 Tj\n217.319 235.222 Td\n(unsigned) 47.8205 Tj\n-426 TJm\n(int) 17.9327 Tj\n-852 TJm\n(sourceLen,) 59.7756 Tj\n217.319 223.267 Td\n(int) 17.9327 Tj\n-4686 TJm\n(blockSize100k,) 83.6858 Tj\n217.319 211.312 Td\n(int) 17.9327 Tj\n-4686 TJm\n(verbosity,) 59.7756 Tj\n217.319 199.356 Td\n(int) 17.9327 Tj\n-4686 TJm\n(workFactor) 59.7756 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 161.897 Td\n/F122_0 9.9626 Tf\n(Attempts) 36.5329 Tj\n-442 TJm\n(to) 7.7509 Tj\n-442 TJm\n(compress) 37.6287 Tj\n-443 TJm\n(the) 12.1743 Tj\n-442 TJm\n(data) 16.5977 Tj\n-442 TJm\n(in) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n216.87 161.897 Td\n/F124_0 9.9626 Tf\n(source[0) 47.8205 Tj\n-600 TJm\n(..) 11.9551 Tj\n-1200 TJm\n(sourceLen-1]) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n370.715 161.897 Td\n/F122_0 9.9626 Tf\n(into) 15.5018 Tj\n-442 TJm\n(the) 12.1743 Tj\n-443 TJm\n(dest) 16.0497 Tj\n1 TJm\n(ination) 27.6761 Tj\n-443 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n40 TJm\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n486.202 161.897 Td\n/F124_0 9.9626 Tf\n(dest[0) 35.8654 Tj\n-600 TJm\n(..) 11.9551 Tj\n72 148.198 Td\n(*) 5.9776 Tj\n77.978 149.942 Td\n(destLen-1]) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n137.753 149.942 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-1393 TJm\n(If) 6.6351 Tj\n-379 TJm\n(the) 12.1743 Tj\n-379 TJm\n(destination) 43.7259 Tj\n-379 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n-378 TJm\n(is) 6.6451 Tj\n-379 TJm\n(big) 12.7322 Tj\n-379 TJm\n(enough,) 31.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n318.487 148.198 Td\n/F124_0 9.9626 Tf\n(*) 5.9776 Tj\n324.464 149.942 Td\n(destLen) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n370.082 149.942 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-379 TJm\n(set) 11.0684 Tj\n-379 TJm\n(to) 7.7509 Tj\n-378 TJm\n(the) 12.1743 Tj\n-379 TJm\n(size) 15.4918 Tj\n-379 TJm\n(of) 8.2988 Tj\n-379 TJm\n(the) 12.1743 Tj\n-379 TJm\n(compressed) 47.0334 Tj\n-379 TJm\n(data,) 19.0883 Tj\n72 137.986 Td\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n89.527 137.986 Td\n/F124_0 9.9626 Tf\n(BZ_OK) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n122.556 137.986 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-315 TJm\n(returned.) 35.686 Tj\n-1012 TJm\n(If) 6.6351 Tj\n-315 TJm\n(the) 12.1743 Tj\n-316 TJm\n(compressed) 47.0334 Tj\n-315 TJm\n(data) 16.5977 Tj\n-315 TJm\n(w) 7.193 Tj\n10 TJm\n(on') 13.2801 Tj\n18 TJm\n(t) 2.7696 Tj\n-316 TJm\n(\\002t,) 10.7995 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n313.323 136.243 Td\n/F124_0 9.9626 Tf\n(*) 5.9776 Tj\n319.3 137.986 Td\n(destLen) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n364.285 137.986 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-315 TJm\n(unchanged,) 45.6486 Tj\n-332 TJm\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n440.551 137.986 Td\n/F124_0 9.9626 Tf\n(BZ_OUTBUFF_FULL) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n533.355 137.986 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n72 126.031 Td\n(returned.) 35.686 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 104.113 Td\n(Compression) 52.5826 Tj\n-297 TJm\n(in) 7.7509 Tj\n-297 TJm\n(this) 14.396 Tj\n-297 TJm\n(manner) 29.8778 Tj\n-297 TJm\n(is) 6.6451 Tj\n-297 TJm\n(a) 4.4234 Tj\n-297 TJm\n(one-shot) 34.3112 Tj\n-297 TJm\n(e) 4.4234 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(ent,) 14.6649 Tj\n-309 TJm\n(done) 19.3673 Tj\n-297 TJm\n(with) 17.7135 Tj\n-297 TJm\n(a) 4.4234 Tj\n-297 TJm\n(single) 23.8007 Tj\n-297 TJm\n(call) 14.386 Tj\n-297 TJm\n(to) 7.7509 Tj\n-297 TJm\n(this) 14.396 Tj\n-297 TJm\n(function.) 35.696 Tj\n-903 TJm\n(The) 15.4918 Tj\n-297 TJm\n(resulting) 34.8691 Tj\n-297 TJm\n(compressed) 47.0334 Tj\n72 92.158 Td\n(data) 16.5977 Tj\n-296 TJm\n(is) 6.6451 Tj\n-296 TJm\n(a) 4.4234 Tj\n-296 TJm\n(complete) 36.5229 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n147.988 92.158 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n180.825 92.158 Td\n/F122_0 9.9626 Tf\n(format) 26.5603 Tj\n-296 TJm\n(data) 16.5977 Tj\n-296 TJm\n(stream.) 29.0509 Tj\n-897 TJm\n(There) 23.2328 Tj\n-296 TJm\n(is) 6.6451 Tj\n-296 TJm\n(no) 9.9626 Tj\n-296 TJm\n(mechanism) 45.3796 Tj\n-296 TJm\n(for) 11.6164 Tj\n-296 TJm\n(making) 29.8878 Tj\n-296 TJm\n(additional) 39.8504 Tj\n-296 TJm\n(calls) 18.2614 Tj\n-296 TJm\n(to) 7.7509 Tj\n-296 TJm\n(pro) 13.2801 Tj\n15 TJm\n(vide) 17.1556 Tj\n-296 TJm\n(e) 4.4234 Tj\n15 TJm\n(xtra) 15.4918 Tj\n72 80.203 Td\n(input) 20.4831 Tj\n-250 TJm\n(data.) 19.0883 Tj\n-620 TJm\n(If) 6.6351 Tj\n-250 TJm\n(you) 14.9439 Tj\n-250 TJm\n(w) 7.193 Tj\n10 TJm\n(ant) 12.1743 Tj\n-250 TJm\n(that) 14.9439 Tj\n-250 TJm\n(kind) 17.7135 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(mechanism,) 47.8703 Tj\n-250 TJm\n(use) 13.2801 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(lo) 7.7509 Tj\n25 TJm\n(w-le) 17.7035 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(el) 7.193 Tj\n-250 TJm\n(interf) 21.579 Tj\n10 TJm\n(ace.) 15.7608 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 50.951 Td\n(26) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 27 30\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n419.067 749.245 Td\n/F122_0 9.9626 Tf\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n496.556 749.245 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n72 710.037 Td\n/F122_0 9.9626 Tf\n(F) 5.5392 Tj\n15 TJm\n(or) 8.2988 Tj\n-223 TJm\n(the) 12.1743 Tj\n-224 TJm\n(meaning) 34.3112 Tj\n-223 TJm\n(of) 8.2988 Tj\n-224 TJm\n(parameters) 43.7059 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n195.306 710.037 Td\n/F124_0 9.9626 Tf\n(blockSize100k) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n273.015 710.037 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n277.784 710.037 Td\n/F124_0 9.9626 Tf\n(verbosity) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n333.808 710.037 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n350.42 710.037 Td\n/F124_0 9.9626 Tf\n(workFactor) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n410.196 710.037 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-229 TJm\n(see) 12.7222 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n429.913 710.037 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompressInit) 107.5961 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n537.509 710.037 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 688.12 Td\n(T) 6.0871 Tj\n80 TJm\n(o) 4.9813 Tj\n-410 TJm\n(guarantee) 38.7246 Tj\n-410 TJm\n(that) 14.9439 Tj\n-410 TJm\n(the) 12.1743 Tj\n-410 TJm\n(compressed) 47.0334 Tj\n-410 TJm\n(data) 16.5977 Tj\n-410 TJm\n(will) 15.5018 Tj\n-410 TJm\n(\\002t) 8.3088 Tj\n-410 TJm\n(in) 7.7509 Tj\n-410 TJm\n(its) 9.4147 Tj\n-410 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n40 TJm\n(,) 2.4907 Tj\n-450 TJm\n(allocate) 30.9837 Tj\n-410 TJm\n(an) 9.4047 Tj\n-410 TJm\n(output) 25.4644 Tj\n-410 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n-411 TJm\n(of) 8.2988 Tj\n-410 TJm\n(size) 15.4918 Tj\n-410 TJm\n(1%) 13.2801 Tj\n-410 TJm\n(lar) 10.5105 Tj\n18 TJm\n(ger) 12.7222 Tj\n-410 TJm\n(than) 17.1556 Tj\n-410 TJm\n(the) 12.1743 Tj\n72 676.164 Td\n(uncompressed) 56.996 Tj\n-250 TJm\n(data,) 19.0883 Tj\n-250 TJm\n(plus) 16.6077 Tj\n-250 TJm\n(six) 11.6264 Tj\n-250 TJm\n(hundred) 32.6474 Tj\n-250 TJm\n(e) 4.4234 Tj\n15 TJm\n(xtra) 15.4918 Tj\n-250 TJm\n(bytes.) 23.5217 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 654.247 Td\n/F124_0 9.9626 Tf\n(BZ2_bzBuffToBuffDecompress) 155.4166 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n230.553 654.247 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-315 TJm\n(not) 12.7322 Tj\n-315 TJm\n(write) 20.4731 Tj\n-314 TJm\n(data) 16.5977 Tj\n-315 TJm\n(at) 7.193 Tj\n-315 TJm\n(or) 8.2988 Tj\n-315 TJm\n(be) 9.4047 Tj\n15 TJm\n(yond) 19.9252 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n362.484 654.247 Td\n/F124_0 9.9626 Tf\n(dest[) 29.8878 Tj\n392.372 652.503 Td\n(*) 5.9776 Tj\n398.349 654.247 Td\n(destLen]) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n446.17 654.247 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-331 TJm\n(e) 4.4234 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(en) 9.4047 Tj\n-315 TJm\n(in) 7.7509 Tj\n-315 TJm\n(case) 17.1456 Tj\n-314 TJm\n(of) 8.2988 Tj\n-315 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n72 642.291 Td\n(o) 4.9813 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(er\\003o) 18.2614 Tj\n25 TJm\n(w) 7.193 Tj\n65 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 620.374 Td\n(Possible) 33.2153 Tj\n-250 TJm\n(return) 23.7907 Tj\n-250 TJm\n(v) 4.9813 Tj\n25 TJm\n(alues:) 23.2427 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 451.905] cm\n0 0 468 167.372 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 610.909 Td\n/F124_0 9.9626 Tf\n(BZ_CONFIG_ERROR) 89.6634 Tj\n98.488 598.954 Td\n(if) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(library) 41.8429 Tj\n-426 TJm\n(has) 17.9327 Tj\n-426 TJm\n(been) 23.9102 Tj\n-426 TJm\n(mis-compiled) 71.7307 Tj\n90 586.999 Td\n(BZ_PARAM_ERROR) 83.6858 Tj\n98.488 575.044 Td\n(if) 11.9551 Tj\n-426 TJm\n(dest) 23.9102 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(NULL) 23.9102 Tj\n-426 TJm\n(or) 11.9551 Tj\n-426 TJm\n(destLen) 41.8429 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(NULL) 23.9102 Tj\n98.488 563.089 Td\n(or) 11.9551 Tj\n-426 TJm\n(blockSize100k) 77.7083 Tj\n-426 TJm\n(<) 5.9776 Tj\n-426 TJm\n(1) 5.9776 Tj\n-426 TJm\n(or) 11.9551 Tj\n-426 TJm\n(blockSize100k) 77.7083 Tj\n-426 TJm\n(>) 5.9776 Tj\n-426 TJm\n(9) 5.9776 Tj\n98.488 551.133 Td\n(or) 11.9551 Tj\n-426 TJm\n(verbosity) 53.798 Tj\n-426 TJm\n(<) 5.9776 Tj\n-426 TJm\n(0) 5.9776 Tj\n-426 TJm\n(or) 11.9551 Tj\n-426 TJm\n(verbosity) 53.798 Tj\n-426 TJm\n(>) 5.9776 Tj\n-426 TJm\n(4) 5.9776 Tj\n98.488 539.178 Td\n(or) 11.9551 Tj\n-426 TJm\n(workFactor) 59.7756 Tj\n-426 TJm\n(<) 5.9776 Tj\n-426 TJm\n(0) 5.9776 Tj\n-426 TJm\n(or) 11.9551 Tj\n-426 TJm\n(workFactor) 59.7756 Tj\n-426 TJm\n(>) 5.9776 Tj\n-426 TJm\n(250) 17.9327 Tj\n90 527.223 Td\n(BZ_MEM_ERROR) 71.7307 Tj\n98.488 515.268 Td\n(if) 11.9551 Tj\n-426 TJm\n(insufficient) 71.7307 Tj\n-426 TJm\n(memory) 35.8654 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(available) 53.798 Tj\n90 503.313 Td\n(BZ_OUTBUFF_FULL) 89.6634 Tj\n98.488 491.357 Td\n(if) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(size) 23.9102 Tj\n-426 TJm\n(of) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(compressed) 59.7756 Tj\n-426 TJm\n(data) 23.9102 Tj\n-426 TJm\n(exceeds) 41.8429 Tj\n341.655 489.614 Td\n(*) 5.9776 Tj\n347.633 491.357 Td\n(destLen) 41.8429 Tj\n90 479.402 Td\n(BZ_OK) 29.8878 Tj\n98.488 467.447 Td\n(otherwise) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 421.284 Td\n/F116_0 17.2154 Tf\n(3.5.2.) 43.0729 Tj\n-278 TJm\n(BZ2_bzBuffT) 106.1502 Tj\n80 TJm\n(oBuffDecompress) 148.259 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 333.038] cm\n0 0 468 83.686 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 408.356 Td\n/F124_0 9.9626 Tf\n(int) 17.9327 Tj\n-426 TJm\n(BZ2_bzBuffToBuffDecompress\\() 161.3941 Tj\n-426 TJm\n(char) 23.9102 Tj\n301.726 406.612 Td\n(*) 5.9776 Tj\n345.899 408.356 Td\n(dest,) 29.8878 Tj\n225.807 396.401 Td\n(unsigned) 47.8205 Tj\n-426 TJm\n(int) 17.9327 Tj\n295.805 394.657 Td\n(*) 5.9776 Tj\n306.026 396.401 Td\n(destLen,) 47.8205 Tj\n225.807 384.446 Td\n(char) 23.9102 Tj\n249.717 382.702 Td\n(*) 5.9776 Tj\n293.891 384.446 Td\n(source,) 41.8429 Tj\n225.807 372.49 Td\n(unsigned) 47.8205 Tj\n-426 TJm\n(int) 17.9327 Tj\n-852 TJm\n(sourceLen,) 59.7756 Tj\n225.807 360.535 Td\n(int) 17.9327 Tj\n-4686 TJm\n(small,) 35.8654 Tj\n225.807 348.58 Td\n(int) 17.9327 Tj\n-4686 TJm\n(verbosity) 53.798 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 311.12 Td\n/F122_0 9.9626 Tf\n(Attempts) 36.5329 Tj\n-358 TJm\n(to) 7.7509 Tj\n-359 TJm\n(decompress) 47.0334 Tj\n-358 TJm\n(the) 12.1743 Tj\n-358 TJm\n(data) 16.5977 Tj\n-359 TJm\n(in) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n221.259 311.12 Td\n/F124_0 9.9626 Tf\n(source[0) 47.8205 Tj\n-600 TJm\n(..) 11.9551 Tj\n-1200 TJm\n(sourceLen-1]) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n374.268 311.12 Td\n/F122_0 9.9626 Tf\n(into) 15.5018 Tj\n-358 TJm\n(the) 12.1743 Tj\n-359 TJm\n(destination) 43.7259 Tj\n-358 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n40 TJm\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n486.202 311.12 Td\n/F124_0 9.9626 Tf\n(dest[0) 35.8654 Tj\n-600 TJm\n(..) 11.9551 Tj\n72 297.422 Td\n(*) 5.9776 Tj\n77.978 299.165 Td\n(destLen-1]) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n137.753 299.165 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-1123 TJm\n(If) 6.6351 Tj\n-334 TJm\n(the) 12.1743 Tj\n-334 TJm\n(destination) 43.7259 Tj\n-334 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n-334 TJm\n(is) 6.6451 Tj\n-334 TJm\n(big) 12.7322 Tj\n-334 TJm\n(enough,) 31.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n312.554 297.422 Td\n/F124_0 9.9626 Tf\n(*) 5.9776 Tj\n318.531 299.165 Td\n(destLen) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n363.701 299.165 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-334 TJm\n(set) 11.0684 Tj\n-334 TJm\n(to) 7.7509 Tj\n-334 TJm\n(the) 12.1743 Tj\n-334 TJm\n(size) 15.4918 Tj\n-333 TJm\n(of) 8.2988 Tj\n-334 TJm\n(the) 12.1743 Tj\n-334 TJm\n(uncompressed) 56.996 Tj\n-334 TJm\n(data,) 19.0883 Tj\n72 287.21 Td\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n89.527 287.21 Td\n/F124_0 9.9626 Tf\n(BZ_OK) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n122.556 287.21 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-315 TJm\n(returned.) 35.686 Tj\n-1012 TJm\n(If) 6.6351 Tj\n-315 TJm\n(the) 12.1743 Tj\n-316 TJm\n(compressed) 47.0334 Tj\n-315 TJm\n(data) 16.5977 Tj\n-315 TJm\n(w) 7.193 Tj\n10 TJm\n(on') 13.2801 Tj\n18 TJm\n(t) 2.7696 Tj\n-316 TJm\n(\\002t,) 10.7995 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n313.323 285.467 Td\n/F124_0 9.9626 Tf\n(*) 5.9776 Tj\n319.3 287.21 Td\n(destLen) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n364.285 287.21 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-315 TJm\n(unchanged,) 45.6486 Tj\n-332 TJm\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n440.551 287.21 Td\n/F124_0 9.9626 Tf\n(BZ_OUTBUFF_FULL) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n533.355 287.21 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n72 275.255 Td\n(returned.) 35.686 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 253.337 Td\n/F124_0 9.9626 Tf\n(source) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n110.981 253.337 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-313 TJm\n(assumed) 34.3112 Tj\n-312 TJm\n(to) 7.7509 Tj\n-313 TJm\n(hold) 17.7135 Tj\n-313 TJm\n(a) 4.4234 Tj\n-313 TJm\n(complete) 36.5229 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n237.04 253.337 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n270.044 253.337 Td\n/F122_0 9.9626 Tf\n(format) 26.5603 Tj\n-313 TJm\n(data) 16.5977 Tj\n-312 TJm\n(stream.) 29.0509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n353.446 253.337 Td\n/F124_0 9.9626 Tf\n(BZ2_bzBuffToBuffDecompress) 155.4166 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n511.978 253.337 Td\n/F122_0 9.9626 Tf\n(tries) 17.1556 Tj\n-313 TJm\n(to) 7.7509 Tj\n72 241.382 Td\n(decompress) 47.0334 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(entirety) 30.4357 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(stream) 26.5603 Tj\n-250 TJm\n(into) 15.5018 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(output) 25.4644 Tj\n-250 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n55 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 219.464 Td\n(F) 5.5392 Tj\n15 TJm\n(or) 8.2988 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(meaning) 34.3112 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(parameters) 43.7059 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n196.631 219.464 Td\n/F124_0 9.9626 Tf\n(small) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n229.01 219.464 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n245.887 219.464 Td\n/F124_0 9.9626 Tf\n(verbosity) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n299.685 219.464 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-250 TJm\n(see) 12.7222 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n319.879 219.464 Td\n/F124_0 9.9626 Tf\n(BZ2_bzDecompressInit) 119.5512 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n439.431 219.464 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 197.546 Td\n(Because) 33.1954 Tj\n-250 TJm\n(the) 12.1743 Tj\n-249 TJm\n(compression) 50.3609 Tj\n-250 TJm\n(ratio) 18.2614 Tj\n-249 TJm\n(of) 8.2988 Tj\n-250 TJm\n(the) 12.1743 Tj\n-249 TJm\n(compressed) 47.0334 Tj\n-250 TJm\n(data) 16.5977 Tj\n-249 TJm\n(cannot) 26.5603 Tj\n-250 TJm\n(be) 9.4047 Tj\n-250 TJm\n(kno) 14.9439 Tj\n25 TJm\n(wn) 12.1743 Tj\n-249 TJm\n(in) 7.7509 Tj\n-250 TJm\n(adv) 14.386 Tj\n25 TJm\n(ance,) 20.7421 Tj\n-249 TJm\n(there) 19.9152 Tj\n-250 TJm\n(is) 6.6451 Tj\n-249 TJm\n(no) 9.9626 Tj\n-250 TJm\n(easy) 17.7035 Tj\n-250 TJm\n(w) 7.193 Tj\n10 TJm\n(ay) 9.4047 Tj\n-249 TJm\n(to) 7.7509 Tj\n-250 TJm\n(guarantee) 38.7246 Tj\n72 185.591 Td\n(that) 14.9439 Tj\n-286 TJm\n(the) 12.1743 Tj\n-287 TJm\n(output) 25.4644 Tj\n-286 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n-287 TJm\n(will) 15.5018 Tj\n-286 TJm\n(be) 9.4047 Tj\n-286 TJm\n(big) 12.7322 Tj\n-287 TJm\n(enough.) 31.8205 Tj\n-838 TJm\n(Y) 7.193 Tj\n110 TJm\n(ou) 9.9626 Tj\n-287 TJm\n(may) 17.1556 Tj\n-286 TJm\n(of) 8.2988 Tj\n-287 TJm\n(course) 26.0024 Tj\n-286 TJm\n(mak) 17.1556 Tj\n10 TJm\n(e) 4.4234 Tj\n-286 TJm\n(arrangements) 53.6685 Tj\n-287 TJm\n(in) 7.7509 Tj\n-286 TJm\n(your) 18.2614 Tj\n-287 TJm\n(code) 18.8094 Tj\n-286 TJm\n(to) 7.7509 Tj\n-286 TJm\n(record) 25.4445 Tj\n-287 TJm\n(the) 12.1743 Tj\n-286 TJm\n(size) 15.4918 Tj\n-287 TJm\n(of) 8.2988 Tj\n72 173.636 Td\n(the) 12.1743 Tj\n-250 TJm\n(uncompressed) 56.996 Tj\n-250 TJm\n(data,) 19.0883 Tj\n-250 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-250 TJm\n(such) 18.2614 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(mechanism) 45.3796 Tj\n-250 TJm\n(is) 6.6451 Tj\n-250 TJm\n(be) 9.4047 Tj\n15 TJm\n(yond) 19.9252 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(scope) 22.6848 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(this) 14.396 Tj\n-250 TJm\n(library) 26.5603 Tj\n65 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 151.718 Td\n/F124_0 9.9626 Tf\n(BZ2_bzBuffToBuffDecompress) 155.4166 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n230.553 151.718 Td\n/F122_0 9.9626 Tf\n(will) 15.5018 Tj\n-315 TJm\n(not) 12.7322 Tj\n-315 TJm\n(write) 20.4731 Tj\n-314 TJm\n(data) 16.5977 Tj\n-315 TJm\n(at) 7.193 Tj\n-315 TJm\n(or) 8.2988 Tj\n-315 TJm\n(be) 9.4047 Tj\n15 TJm\n(yond) 19.9252 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n362.484 151.718 Td\n/F124_0 9.9626 Tf\n(dest[) 29.8878 Tj\n392.372 149.975 Td\n(*) 5.9776 Tj\n398.349 151.718 Td\n(destLen]) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n446.17 151.718 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-331 TJm\n(e) 4.4234 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(en) 9.4047 Tj\n-315 TJm\n(in) 7.7509 Tj\n-315 TJm\n(case) 17.1456 Tj\n-314 TJm\n(of) 8.2988 Tj\n-315 TJm\n(b) 4.9813 Tj\n20 TJm\n(uf) 8.2988 Tj\n25 TJm\n(fer) 11.0585 Tj\n72 139.763 Td\n(o) 4.9813 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(er\\003o) 18.2614 Tj\n25 TJm\n(w) 7.193 Tj\n65 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 117.845 Td\n(Possible) 33.2153 Tj\n-250 TJm\n(return) 23.7907 Tj\n-250 TJm\n(v) 4.9813 Tj\n25 TJm\n(alues:) 23.2427 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 50.951 Td\n(27) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 28 31\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n420.96 749.245 Td\n/F122_0 9.9626 Tf\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n498.449 749.245 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 75.786 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 492.852] cm\n0 0 468 227.148 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 711.631 Td\n/F124_0 9.9626 Tf\n(BZ_CONFIG_ERROR) 89.6634 Tj\n98.488 699.676 Td\n(if) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(library) 41.8429 Tj\n-426 TJm\n(has) 17.9327 Tj\n-426 TJm\n(been) 23.9102 Tj\n-426 TJm\n(mis-compiled) 71.7307 Tj\n90 687.721 Td\n(BZ_PARAM_ERROR) 83.6858 Tj\n98.488 675.766 Td\n(if) 11.9551 Tj\n-426 TJm\n(dest) 23.9102 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(NULL) 23.9102 Tj\n-426 TJm\n(or) 11.9551 Tj\n-426 TJm\n(destLen) 41.8429 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(NULL) 23.9102 Tj\n98.488 663.811 Td\n(or) 11.9551 Tj\n-426 TJm\n(small) 29.8878 Tj\n-426 TJm\n(!=) 11.9551 Tj\n-426 TJm\n(0) 5.9776 Tj\n-426 TJm\n(&&) 11.9551 Tj\n-426 TJm\n(small) 29.8878 Tj\n-426 TJm\n(!=) 11.9551 Tj\n-426 TJm\n(1) 5.9776 Tj\n98.488 651.856 Td\n(or) 11.9551 Tj\n-426 TJm\n(verbosity) 53.798 Tj\n-426 TJm\n(<) 5.9776 Tj\n-426 TJm\n(0) 5.9776 Tj\n-426 TJm\n(or) 11.9551 Tj\n-426 TJm\n(verbosity) 53.798 Tj\n-426 TJm\n(>) 5.9776 Tj\n-426 TJm\n(4) 5.9776 Tj\n90 639.9 Td\n(BZ_MEM_ERROR) 71.7307 Tj\n98.488 627.945 Td\n(if) 11.9551 Tj\n-426 TJm\n(insufficient) 71.7307 Tj\n-426 TJm\n(memory) 35.8654 Tj\n-426 TJm\n(is) 11.9551 Tj\n-426 TJm\n(available) 53.798 Tj\n90 615.99 Td\n(BZ_OUTBUFF_FULL) 89.6634 Tj\n98.488 604.035 Td\n(if) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(size) 23.9102 Tj\n-426 TJm\n(of) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(compressed) 59.7756 Tj\n-426 TJm\n(data) 23.9102 Tj\n-426 TJm\n(exceeds) 41.8429 Tj\n341.655 602.291 Td\n(*) 5.9776 Tj\n347.633 604.035 Td\n(destLen) 41.8429 Tj\n90 592.08 Td\n(BZ_DATA_ERROR) 77.7083 Tj\n98.488 580.124 Td\n(if) 11.9551 Tj\n-426 TJm\n(a) 5.9776 Tj\n-426 TJm\n(data) 23.9102 Tj\n-426 TJm\n(integrity) 53.798 Tj\n-426 TJm\n(error) 29.8878 Tj\n-426 TJm\n(was) 17.9327 Tj\n-426 TJm\n(detected) 47.8205 Tj\n-426 TJm\n(in) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(compressed) 59.7756 Tj\n-426 TJm\n(data) 23.9102 Tj\n90 568.169 Td\n(BZ_DATA_ERROR_MAGIC) 113.5736 Tj\n98.488 556.214 Td\n(if) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(compressed) 59.7756 Tj\n-426 TJm\n(data) 23.9102 Tj\n-426 TJm\n(doesn't) 41.8429 Tj\n-426 TJm\n(begin) 29.8878 Tj\n-426 TJm\n(with) 23.9102 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(right) 29.8878 Tj\n-426 TJm\n(magic) 29.8878 Tj\n-426 TJm\n(bytes) 29.8878 Tj\n90 544.259 Td\n(BZ_UNEXPECTED_EOF) 101.6185 Tj\n98.488 532.304 Td\n(if) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(compressed) 59.7756 Tj\n-426 TJm\n(data) 23.9102 Tj\n-426 TJm\n(ends) 23.9102 Tj\n-426 TJm\n(unexpectedly) 71.7307 Tj\n90 520.349 Td\n(BZ_OK) 29.8878 Tj\n98.488 508.393 Td\n(otherwise) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 458.099 Td\n/F116_0 20.6585 Tf\n(3.6.) 34.4584 Tj\n-278 TJm\n(zlib) 34.4377 Tj\n-278 TJm\n(compatibility) 127.4216 Tj\n-278 TJm\n(functions) 92.9633 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 436.181 Td\n/F122_0 9.9626 Tf\n(Y) 7.193 Tj\n110 TJm\n(oshioka) 30.9936 Tj\n-604 TJm\n(Tsuneo) 29.3299 Tj\n-604 TJm\n(has) 13.2801 Tj\n-604 TJm\n(contrib) 28.224 Tj\n20 TJm\n(uted) 17.1556 Tj\n-604 TJm\n(some) 21.031 Tj\n-604 TJm\n(functions) 37.0808 Tj\n-604 TJm\n(to) 7.7509 Tj\n-604 TJm\n(gi) 7.7509 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-604 TJm\n(better) 22.6848 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n356.347 436.181 Td\n/F124_0 9.9626 Tf\n(zlib) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n386.275 436.181 Td\n/F122_0 9.9626 Tf\n(compatibility) 53.1405 Tj\n65 TJm\n(.) 2.4907 Tj\n-1372 TJm\n(These) 23.7907 Tj\n-604 TJm\n(functions) 37.0808 Tj\n-604 TJm\n(are) 12.1643 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 424.226 Td\n/F124_0 9.9626 Tf\n(BZ2_bzopen) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n131.776 424.226 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n144.283 424.226 Td\n/F124_0 9.9626 Tf\n(BZ2_bzread) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n204.059 424.226 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n216.567 424.226 Td\n/F124_0 9.9626 Tf\n(BZ2_bzwrite) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n282.32 424.226 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n294.827 424.226 Td\n/F124_0 9.9626 Tf\n(BZ2_bzflush) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n360.581 424.226 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n373.088 424.226 Td\n/F124_0 9.9626 Tf\n(BZ2_bzclose) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n438.842 424.226 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n451.349 424.226 Td\n/F124_0 9.9626 Tf\n(BZ2_bzerror) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n525.614 424.226 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 412.271 Td\n/F124_0 9.9626 Tf\n(BZ2_bzlibVersion) 95.641 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n167.641 412.271 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-1420 TJm\n(These) 23.7907 Tj\n-383 TJm\n(functions) 37.0808 Tj\n-383 TJm\n(are) 12.1643 Tj\n-383 TJm\n(not) 12.7322 Tj\n-383 TJm\n(\\(yet\\)) 18.8094 Tj\n-384 TJm\n(of) 8.2988 Tj\n25 TJm\n(\\002cially) 27.6761 Tj\n-383 TJm\n(part) 15.4918 Tj\n-383 TJm\n(of) 8.2988 Tj\n-383 TJm\n(the) 12.1743 Tj\n-384 TJm\n(library) 26.5603 Tj\n65 TJm\n(.) 2.4907 Tj\n-1419 TJm\n(If) 6.6351 Tj\n-383 TJm\n(the) 12.1743 Tj\n15 TJm\n(y) 4.9813 Tj\n-384 TJm\n(break,) 24.6176 Tj\n-416 TJm\n(you) 14.9439 Tj\n-383 TJm\n(get) 12.1743 Tj\n-384 TJm\n(to) 7.7509 Tj\n72 400.316 Td\n(k) 4.9813 Tj\n10 TJm\n(eep) 13.8281 Tj\n-250 TJm\n(all) 9.9626 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(pieces.) 27.3872 Tj\n-620 TJm\n(Ne) 11.6164 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(ertheless,) 37.3498 Tj\n-250 TJm\n(I) 3.3175 Tj\n-250 TJm\n(think) 20.4831 Tj\n-250 TJm\n(the) 12.1743 Tj\n15 TJm\n(y) 4.9813 Tj\n-250 TJm\n(w) 7.193 Tj\n10 TJm\n(ork) 13.2801 Tj\n-250 TJm\n(ok.) 12.4533 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 349.342] cm\n0 0 468 47.821 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 388.794 Td\n/F124_0 9.9626 Tf\n(typedef) 41.8429 Tj\n-426 TJm\n(void) 23.9102 Tj\n-426 TJm\n(BZFILE;) 41.8429 Tj\n90 364.884 Td\n(const) 29.8878 Tj\n-426 TJm\n(char) 23.9102 Tj\n152.286 363.14 Td\n(*) 5.9776 Tj\n162.508 364.884 Td\n(BZ2_bzlibVersion) 95.641 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(void) 23.9102 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 327.424 Td\n/F122_0 9.9626 Tf\n(Returns) 30.9936 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(string) 22.6948 Tj\n-250 TJm\n(indicating) 39.8504 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(library) 26.5603 Tj\n-250 TJm\n(v) 4.9813 Tj\n15 TJm\n(ersion.) 26.8392 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 288.405] cm\n0 0 468 35.866 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 315.902 Td\n/F124_0 9.9626 Tf\n(BZFILE) 35.8654 Tj\n130.109 314.159 Td\n(*) 5.9776 Tj\n140.331 315.902 Td\n(BZ2_bzopen) 59.7756 Tj\n-852 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(const) 29.8878 Tj\n-426 TJm\n(char) 23.9102 Tj\n281.103 314.159 Td\n(*) 5.9776 Tj\n287.08 315.902 Td\n(path,) 29.8878 Tj\n-426 TJm\n(const) 29.8878 Tj\n-426 TJm\n(char) 23.9102 Tj\n383.498 314.159 Td\n(*) 5.9776 Tj\n389.476 315.902 Td\n(mode) 23.9102 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n90 303.947 Td\n(BZFILE) 35.8654 Tj\n130.109 302.204 Td\n(*) 5.9776 Tj\n140.331 303.947 Td\n(BZ2_bzdopen) 65.7532 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(int) 17.9327 Tj\n-3408 TJm\n(fd,) 17.9327 Tj\n-1704 TJm\n(const) 29.8878 Tj\n-426 TJm\n(char) 23.9102 Tj\n369.629 302.204 Td\n(*) 5.9776 Tj\n375.607 303.947 Td\n(mode) 23.9102 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 266.488 Td\n/F122_0 9.9626 Tf\n(Opens) 25.4544 Tj\n-243 TJm\n(a) 4.4234 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n106.713 266.488 Td\n/F124_0 9.9626 Tf\n(.bz2) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n133.041 266.488 Td\n/F122_0 9.9626 Tf\n(\\002le) 12.7322 Tj\n-243 TJm\n(for) 11.6164 Tj\n-242 TJm\n(reading) 29.8778 Tj\n-243 TJm\n(or) 8.2988 Tj\n-243 TJm\n(writing,) 31.2726 Tj\n-244 TJm\n(using) 21.589 Tj\n-243 TJm\n(either) 22.6848 Tj\n-242 TJm\n(its) 9.4147 Tj\n-243 TJm\n(name) 21.579 Tj\n-243 TJm\n(or) 8.2988 Tj\n-242 TJm\n(a) 4.4234 Tj\n-243 TJm\n(pre-e) 20.4632 Tj\n15 TJm\n(xisting) 27.1282 Tj\n-243 TJm\n(\\002le) 12.7322 Tj\n-242 TJm\n(descriptor) 39.8404 Tj\n55 TJm\n(.) 2.4907 Tj\n-615 TJm\n(Analogous) 43.1679 Tj\n-243 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n510.112 266.488 Td\n/F124_0 9.9626 Tf\n(fopen) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 254.532 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n88.877 254.532 Td\n/F124_0 9.9626 Tf\n(fdopen) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n124.742 254.532 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 216.137] cm\n0 0 468 35.866 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 243.633 Td\n/F124_0 9.9626 Tf\n(int) 17.9327 Tj\n-426 TJm\n(BZ2_bzread) 59.7756 Tj\n-852 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(BZFILE) 35.8654 Tj\n226.528 241.89 Td\n(*) 5.9776 Tj\n236.749 243.633 Td\n(b,) 11.9551 Tj\n-426 TJm\n(void) 23.9102 Tj\n276.859 241.89 Td\n(*) 5.9776 Tj\n287.08 243.633 Td\n(buf,) 23.9102 Tj\n-426 TJm\n(int) 17.9327 Tj\n-426 TJm\n(len) 17.9327 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n90 231.678 Td\n(int) 17.9327 Tj\n-426 TJm\n(BZ2_bzwrite) 65.7532 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(BZFILE) 35.8654 Tj\n228.261 229.935 Td\n(*) 5.9776 Tj\n238.483 231.678 Td\n(b,) 11.9551 Tj\n-426 TJm\n(void) 23.9102 Tj\n278.592 229.935 Td\n(*) 5.9776 Tj\n288.814 231.678 Td\n(buf,) 23.9102 Tj\n-426 TJm\n(int) 17.9327 Tj\n-426 TJm\n(len) 17.9327 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 194.219 Td\n/F122_0 9.9626 Tf\n(Reads/writes) 51.4668 Tj\n-250 TJm\n(data) 16.5977 Tj\n-250 TJm\n(from/to) 29.8878 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(pre) 12.7222 Tj\n25 TJm\n(viously) 29.3399 Tj\n-250 TJm\n(opened) 28.772 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n259.903 194.219 Td\n/F124_0 9.9626 Tf\n(BZFILE) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n295.769 194.219 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-500 TJm\n(Analogous) 43.1679 Tj\n-250 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n359.141 194.219 Td\n/F124_0 9.9626 Tf\n(fread) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n391.519 194.219 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n408.396 194.219 Td\n/F124_0 9.9626 Tf\n(fwrite) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n444.261 194.219 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 155.2] cm\n0 0 468 35.866 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 182.697 Td\n/F124_0 9.9626 Tf\n(int) 17.9327 Tj\n-852 TJm\n(BZ2_bzflush) 65.7532 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(BZFILE) 35.8654 Tj\n232.505 180.954 Td\n(*) 5.9776 Tj\n242.727 182.697 Td\n(b) 5.9776 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n90 170.742 Td\n(void) 23.9102 Tj\n-426 TJm\n(BZ2_bzclose) 65.7532 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(BZFILE) 35.8654 Tj\n234.239 168.998 Td\n(*) 5.9776 Tj\n244.46 170.742 Td\n(b) 5.9776 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 133.282 Td\n/F122_0 9.9626 Tf\n(Flushes/closes) 57.5639 Tj\n-250 TJm\n(a) 4.4234 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n138.968 133.282 Td\n/F124_0 9.9626 Tf\n(BZFILE) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n174.833 133.282 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n179.815 133.282 Td\n/F124_0 9.9626 Tf\n(BZ2_bzflush) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n248.059 133.282 Td\n/F122_0 9.9626 Tf\n(doesn') 26.5603 Tj\n18 TJm\n(t) 2.7696 Tj\n-250 TJm\n(actually) 31.5416 Tj\n-250 TJm\n(do) 9.9626 Tj\n-250 TJm\n(an) 9.4047 Tj\n15 TJm\n(ything.) 27.9551 Tj\n-620 TJm\n(Analogous) 43.1679 Tj\n-250 TJm\n(to) 7.7509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n425.472 133.282 Td\n/F124_0 9.9626 Tf\n(fflush) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n463.828 133.282 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n480.705 133.282 Td\n/F124_0 9.9626 Tf\n(fclose) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n516.57 133.282 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 106.219] cm\n0 0 468 23.91 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 121.761 Td\n/F124_0 9.9626 Tf\n(const) 29.8878 Tj\n-426 TJm\n(char) 23.9102 Tj\n152.286 120.017 Td\n(*) 5.9776 Tj\n162.508 121.761 Td\n(BZ2_bzerror) 65.7532 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(BZFILE) 35.8654 Tj\n282.836 120.017 Td\n(*) 5.9776 Tj\n288.814 121.761 Td\n(b,) 11.9551 Tj\n-426 TJm\n(int) 17.9327 Tj\n327.19 120.017 Td\n(*) 5.9776 Tj\n333.167 121.761 Td\n(errnum) 35.8654 Tj\n-426 TJm\n(\\)) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 84.301 Td\n/F122_0 9.9626 Tf\n(Returns) 30.9936 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(string) 22.6948 Tj\n-250 TJm\n(describing) 41.5042 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(more) 20.4731 Tj\n-250 TJm\n(recent) 24.3386 Tj\n-250 TJm\n(error) 19.3573 Tj\n-250 TJm\n(status) 22.6948 Tj\n-250 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n303.858 84.301 Td\n/F124_0 9.9626 Tf\n(b) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n309.835 84.301 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-250 TJm\n(and) 14.386 Tj\n-250 TJm\n(also) 16.0497 Tj\n-250 TJm\n(sets) 14.9439 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n367.668 82.558 Td\n/F124_0 9.9626 Tf\n(*) 5.9776 Tj\n373.645 84.301 Td\n(errnum) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n412.002 84.301 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-250 TJm\n(its) 9.4147 Tj\n-250 TJm\n(numerical) 39.8404 Tj\n-250 TJm\n(v) 4.9813 Tj\n25 TJm\n(alue.) 19.0883 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n536.307 50.951 Td\n(28) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 29 32\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n419.067 749.245 Td\n/F122_0 9.9626 Tf\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n496.556 749.245 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n72 704.93 Td\n/F116_0 20.6585 Tf\n(3.7.) 34.4584 Tj\n-278 TJm\n(Using) 57.3893 Tj\n-278 TJm\n(the) 30.9878 Tj\n-278 TJm\n(librar) 51.6669 Tj\n-10 TJm\n(y) 11.4861 Tj\n-278 TJm\n(in) 18.3654 Tj\n-278 TJm\n(a) 11.4861 Tj\n-278 TJm\n(stdio-free) 94.1201 Tj\n72 680.139 Td\n(en) 24.1085 Tj\n40 TJm\n(vir) 25.2653 Tj\n20 TJm\n(onment) 74.5978 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 649.583 Td\n/F116_0 17.2154 Tf\n(3.7.1.) 43.0729 Tj\n-278 TJm\n(Getting) 60.2539 Tj\n-278 TJm\n(rid) 22.0013 Tj\n-278 TJm\n(of) 16.2513 Tj\n-278 TJm\n(stdio) 41.1276 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 627.73 Td\n/F122_0 9.9626 Tf\n(In) 8.2988 Tj\n-319 TJm\n(a) 4.4234 Tj\n-319 TJm\n(deeply) 26.5603 Tj\n-319 TJm\n(embedded) 40.9463 Tj\n-319 TJm\n(application,) 46.7644 Tj\n-336 TJm\n(you) 14.9439 Tj\n-319 TJm\n(might) 23.2527 Tj\n-319 TJm\n(w) 7.193 Tj\n10 TJm\n(ant) 12.1743 Tj\n-319 TJm\n(to) 7.7509 Tj\n-319 TJm\n(use) 13.2801 Tj\n-319 TJm\n(just) 14.396 Tj\n-319 TJm\n(the) 12.1743 Tj\n-319 TJm\n(memory-to-memory) 80.7967 Tj\n-319 TJm\n(functions.) 39.5714 Tj\n-1035 TJm\n(Y) 7.193 Tj\n110 TJm\n(ou) 9.9626 Tj\n-319 TJm\n(can) 13.8281 Tj\n-319 TJm\n(do) 9.9626 Tj\n-319 TJm\n(this) 14.396 Tj\n72 615.775 Td\n(con) 14.386 Tj\n40 TJm\n(v) 4.9813 Tj\n15 TJm\n(eniently) 32.0995 Tj\n-327 TJm\n(by) 9.9626 Tj\n-327 TJm\n(compiling) 40.4083 Tj\n-327 TJm\n(the) 12.1743 Tj\n-327 TJm\n(library) 26.5603 Tj\n-327 TJm\n(with) 17.7135 Tj\n-328 TJm\n(preproces) 38.7246 Tj\n1 TJm\n(sor) 12.1743 Tj\n-328 TJm\n(symbol) 29.3399 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n336.045 615.775 Td\n/F124_0 9.9626 Tf\n(BZ_NO_STDIO) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n405.057 615.775 Td\n/F122_0 9.9626 Tf\n(de\\002ned.) 31.8205 Tj\n-1083 TJm\n(Doing) 24.9065 Tj\n-327 TJm\n(this) 14.396 Tj\n-327 TJm\n(gi) 7.7509 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(es) 8.2988 Tj\n-327 TJm\n(you) 14.9439 Tj\n-327 TJm\n(a) 4.4234 Tj\n72 603.819 Td\n(library) 26.5603 Tj\n-250 TJm\n(containing) 42.0621 Tj\n-250 TJm\n(only) 17.7135 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(follo) 18.8194 Tj\n25 TJm\n(wing) 19.9252 Tj\n-250 TJm\n(eight) 19.9252 Tj\n-250 TJm\n(functions:) 39.8504 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 581.966 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompressInit) 107.5961 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n179.597 581.966 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n199.079 581.966 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompress) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n282.765 581.966 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n302.247 581.966 Td\n/F124_0 9.9626 Tf\n(BZ2_bzCompressEnd) 101.6185 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-1414 TJm\n(BZ2_bzDe) 47.8205 Tj\n-1 TJm\n(compressInit) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n537.509 581.966 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 570.011 Td\n/F124_0 9.9626 Tf\n(BZ2_bzDecompress) 95.641 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n167.641 570.011 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n172.144 570.011 Td\n/F124_0 9.9626 Tf\n(BZ2_bzDecompressEnd) 113.5736 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-190 TJm\n(BZ2_bzBuffToBuffCompress) 143.4614 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n431.073 570.011 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n435.577 570.011 Td\n/F124_0 9.9626 Tf\n(BZ2_bzBuffToBuffDecompress) 155.4166 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 548.158 Td\n/F122_0 9.9626 Tf\n(When) 23.7907 Tj\n-250 TJm\n(compiled) 37.0808 Tj\n-250 TJm\n(lik) 10.5205 Tj\n10 TJm\n(e) 4.4234 Tj\n-250 TJm\n(this,) 16.8866 Tj\n-250 TJm\n(all) 9.9626 Tj\n-250 TJm\n(functions) 37.0808 Tj\n-250 TJm\n(will) 15.5018 Tj\n-250 TJm\n(ignore) 25.4544 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n272.526 548.158 Td\n/F124_0 9.9626 Tf\n(verbosity) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n328.815 548.158 Td\n/F122_0 9.9626 Tf\n(settings.) 32.9364 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 517.601 Td\n/F116_0 17.2154 Tf\n(3.7.2.) 43.0729 Tj\n-278 TJm\n(Critical) 58.3602 Tj\n-278 TJm\n(err) 22.9653 Tj\n20 TJm\n(or) 17.2154 Tj\n-278 TJm\n(handling) 71.7366 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 495.748 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n124.529 495.748 Td\n/F122_0 9.9626 Tf\n(contains) 33.2053 Tj\n-473 TJm\n(a) 4.4234 Tj\n-472 TJm\n(number) 30.4357 Tj\n-473 TJm\n(of) 8.2988 Tj\n-472 TJm\n(internal) 30.4357 Tj\n-473 TJm\n(assertion) 35.417 Tj\n-472 TJm\n(checks) 27.1082 Tj\n-473 TJm\n(which) 24.3486 Tj\n-472 TJm\n(should,) 29.0609 Tj\n-529 TJm\n(needless) 33.7533 Tj\n-472 TJm\n(to) 7.7509 Tj\n-473 TJm\n(say) 13.2801 Tj\n65 TJm\n(,) 2.4907 Tj\n-528 TJm\n(ne) 9.4047 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(er) 7.7409 Tj\n-473 TJm\n(be) 9.4047 Tj\n-472 TJm\n(acti) 14.386 Tj\n25 TJm\n(v) 4.9813 Tj\n25 TJm\n(ated.) 19.0883 Tj\n72 483.793 Td\n(Ne) 11.6164 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(ertheless,) 37.3498 Tj\n-533 TJm\n(if) 6.0871 Tj\n-476 TJm\n(an) 9.4047 Tj\n-476 TJm\n(assertion) 35.417 Tj\n-476 TJm\n(should) 26.5703 Tj\n-476 TJm\n(f) 3.3175 Tj\n10 TJm\n(ail,) 12.4533 Tj\n-532 TJm\n(beha) 18.8094 Tj\n20 TJm\n(viour) 21.031 Tj\n-476 TJm\n(depends) 32.6474 Tj\n-476 TJm\n(on) 9.9626 Tj\n-476 TJm\n(whether) 32.0895 Tj\n-476 TJm\n(or) 8.2988 Tj\n-477 TJm\n(not) 12.7322 Tj\n-476 TJm\n(the) 12.1743 Tj\n-476 TJm\n(library) 26.5603 Tj\n-476 TJm\n(w) 7.193 Tj\n10 TJm\n(as) 8.2988 Tj\n-476 TJm\n(compiled) 37.0808 Tj\n-476 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 471.838 Td\n/F124_0 9.9626 Tf\n(BZ_NO_STDIO) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n140.244 471.838 Td\n/F122_0 9.9626 Tf\n(set.) 13.5591 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 449.985 Td\n(F) 5.5392 Tj\n15 TJm\n(or) 8.2988 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(normal) 28.224 Tj\n-250 TJm\n(compile,) 34.5901 Tj\n-250 TJm\n(an) 9.4047 Tj\n-250 TJm\n(assertion) 35.417 Tj\n-250 TJm\n(f) 3.3175 Tj\n10 TJm\n(ailure) 22.6848 Tj\n-250 TJm\n(yields) 23.8007 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(message:) 36.5229 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 428.131 Td\n(bzip2/libbzip2:) 60.3335 Tj\n-310 TJm\n(internal) 30.4357 Tj\n-250 TJm\n(error) 19.3573 Tj\n-250 TJm\n(number) 30.4357 Tj\n-250 TJm\n(N.) 9.6836 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 406.278 Td\n(This) 17.7135 Tj\n-344 TJm\n(is) 6.6451 Tj\n-344 TJm\n(a) 4.4234 Tj\n-344 TJm\n(b) 4.9813 Tj\n20 TJm\n(ug) 9.9626 Tj\n-343 TJm\n(in) 7.7509 Tj\n-344 TJm\n(bzip2/libbzip2,) 60.0546 Tj\n-368 TJm\n(1.0.6) 19.9252 Tj\n-343 TJm\n(of) 8.2988 Tj\n-344 TJm\n(6) 4.9813 Tj\n-344 TJm\n(September) 42.61 Tj\n-344 TJm\n(2010.) 22.4159 Tj\n-592 TJm\n(Please) 25.4544 Tj\n-344 TJm\n(report) 23.7907 Tj\n-343 TJm\n(it) 5.5392 Tj\n-344 TJm\n(to) 7.7509 Tj\n-344 TJm\n(me) 12.1743 Tj\n-344 TJm\n(at:) 9.9626 Tj\n-498 TJm\n(jse) 11.0684 Tj\n25 TJm\n(w) 7.193 Tj\n10 TJm\n(ard@bzip.or) 49.8429 Tj\n18 TJm\n(g.) 7.472 Tj\n-1183 TJm\n(If) 6.6351 Tj\n-344 TJm\n(this) 14.396 Tj\n72 394.323 Td\n(happened) 38.1767 Tj\n-297 TJm\n(when) 21.579 Tj\n-298 TJm\n(you) 14.9439 Tj\n-297 TJm\n(were) 19.3573 Tj\n-297 TJm\n(using) 21.589 Tj\n-297 TJm\n(some) 21.031 Tj\n-298 TJm\n(program) 33.7533 Tj\n-297 TJm\n(which) 24.3486 Tj\n-297 TJm\n(uses) 17.1556 Tj\n-297 TJm\n(libbzip2) 32.6574 Tj\n-298 TJm\n(as) 8.2988 Tj\n-297 TJm\n(a) 4.4234 Tj\n-297 TJm\n(component,) 46.7644 Tj\n-309 TJm\n(you) 14.9439 Tj\n-298 TJm\n(should) 26.5703 Tj\n-297 TJm\n(also) 16.0497 Tj\n-297 TJm\n(report) 23.7907 Tj\n-297 TJm\n(this) 14.396 Tj\n-298 TJm\n(b) 4.9813 Tj\n20 TJm\n(ug) 9.9626 Tj\n72 382.368 Td\n(to) 7.7509 Tj\n-264 TJm\n(the) 12.1743 Tj\n-264 TJm\n(author\\(s\\)) 35.965 Tj\n-264 TJm\n(of) 8.2988 Tj\n-264 TJm\n(that) 14.9439 Tj\n-264 TJm\n(program.) 36.2439 Tj\n-703 TJm\n(Please) 25.4544 Tj\n-264 TJm\n(mak) 17.1556 Tj\n10 TJm\n(e) 4.4234 Tj\n-264 TJm\n(an) 9.4047 Tj\n-264 TJm\n(ef) 7.7409 Tj\n25 TJm\n(fort) 14.386 Tj\n-264 TJm\n(to) 7.7509 Tj\n-264 TJm\n(report) 23.7907 Tj\n-263 TJm\n(this) 14.396 Tj\n-264 TJm\n(b) 4.9813 Tj\n20 TJm\n(ug;) 12.7322 Tj\n-271 TJm\n(timely) 25.4644 Tj\n-264 TJm\n(and) 14.386 Tj\n-264 TJm\n(accurate) 33.1854 Tj\n-264 TJm\n(b) 4.9813 Tj\n20 TJm\n(ug) 9.9626 Tj\n-264 TJm\n(reports) 27.6661 Tj\n-264 TJm\n(e) 4.4234 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(entually) 32.0995 Tj\n72 370.413 Td\n(lead) 16.5977 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(higher) 25.4544 Tj\n-250 TJm\n(quality) 27.6761 Tj\n-250 TJm\n(softw) 22.1369 Tj\n10 TJm\n(are.) 14.655 Tj\n-620 TJm\n(Thanks.) 31.8205 Tj\n-620 TJm\n(Julian) 23.8007 Tj\n-250 TJm\n(Se) 9.9626 Tj\n25 TJm\n(w) 7.193 Tj\n10 TJm\n(ard,) 15.2129 Tj\n-250 TJm\n(6) 4.9813 Tj\n-250 TJm\n(September) 42.61 Tj\n-250 TJm\n(2010.) 22.4159 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 338.758 Td\n(where) 24.3386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n98.831 338.758 Td\n/F124_0 9.9626 Tf\n(N) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n107.301 338.758 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-250 TJm\n(some) 21.031 Tj\n-250 TJm\n(error) 19.3573 Tj\n-251 TJm\n(code) 18.8094 Tj\n-250 TJm\n(number) 30.4357 Tj\n55 TJm\n(.) 2.4907 Tj\n-621 TJm\n(If) 6.6351 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n230.81 338.758 Td\n/F124_0 9.9626 Tf\n(N) 5.9776 Tj\n-600 TJm\n(==) 11.9551 Tj\n-600 TJm\n(1007) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n284.608 338.758 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-250 TJm\n(it) 5.5392 Tj\n-250 TJm\n(also) 16.0497 Tj\n-251 TJm\n(prints) 22.6948 Tj\n-250 TJm\n(some) 21.031 Tj\n-250 TJm\n(e) 4.4234 Tj\n15 TJm\n(xtra) 15.4918 Tj\n-250 TJm\n(te) 7.193 Tj\n15 TJm\n(xt) 7.7509 Tj\n-250 TJm\n(advising) 33.7633 Tj\n-251 TJm\n(the) 12.1743 Tj\n-250 TJm\n(reader) 24.8866 Tj\n-250 TJm\n(that) 14.9439 Tj\n-250 TJm\n(unreliable) 39.8404 Tj\n72 326.803 Td\n(memory) 33.2053 Tj\n-425 TJm\n(is) 6.6451 Tj\n-424 TJm\n(often) 20.4731 Tj\n-425 TJm\n(associated) 40.9463 Tj\n-425 TJm\n(with) 17.7135 Tj\n-424 TJm\n(internal) 30.4357 Tj\n-425 TJm\n(error) 19.3573 Tj\n-424 TJm\n(1007.) 22.4159 Tj\n-834 TJm\n(\\(This) 21.031 Tj\n-425 TJm\n(is) 6.6451 Tj\n-425 TJm\n(a) 4.4234 Tj\n-424 TJm\n(frequently-observ) 70.8241 Tj\n15 TJm\n(ed-phenomenon) 64.189 Tj\n-425 TJm\n(with) 17.7135 Tj\n-425 TJm\n(v) 4.9813 Tj\n15 TJm\n(ersions) 28.224 Tj\n72 314.848 Td\n(1.0.0/1.0.1\\).) 48.4282 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 292.995 Td\n/F124_0 9.9626 Tf\n(exit\\(3\\)) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n116.334 292.995 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-250 TJm\n(then) 17.1556 Tj\n-250 TJm\n(called.) 26.2813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 271.142 Td\n(F) 5.5392 Tj\n15 TJm\n(or) 8.2988 Tj\n-250 TJm\n(a) 4.4234 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n95.093 271.142 Td\n/F124_0 9.9626 Tf\n(stdio) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n124.981 271.142 Td\n/F122_0 9.9626 Tf\n(-free) 18.7994 Tj\n-250 TJm\n(library) 26.5603 Tj\n65 TJm\n(,) 2.4907 Tj\n-250 TJm\n(assertion) 35.417 Tj\n-250 TJm\n(f) 3.3175 Tj\n10 TJm\n(ailures) 26.5603 Tj\n-250 TJm\n(result) 22.1369 Tj\n-250 TJm\n(in) 7.7509 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(call) 14.386 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(function) 33.2053 Tj\n-250 TJm\n(declared) 33.7433 Tj\n-250 TJm\n(as:) 11.0684 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 244.078] cm\n0 0 468 23.91 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 259.62 Td\n/F124_0 9.9626 Tf\n(extern) 35.8654 Tj\n-426 TJm\n(void) 23.9102 Tj\n-426 TJm\n(bz_internal_error) 101.6185 Tj\n-426 TJm\n(\\() 5.9776 Tj\n-426 TJm\n(int) 17.9327 Tj\n-426 TJm\n(errcode) 41.8429 Tj\n-426 TJm\n(\\);) 11.9551 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 222.225 Td\n/F122_0 9.9626 Tf\n(The) 15.4918 Tj\n-250 TJm\n(rele) 14.9339 Tj\n25 TJm\n(v) 4.9813 Tj\n25 TJm\n(ant) 12.1743 Tj\n-250 TJm\n(code) 18.8094 Tj\n-250 TJm\n(is) 6.6451 Tj\n-250 TJm\n(passed) 26.5603 Tj\n-250 TJm\n(as) 8.2988 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(parameter) 39.8305 Tj\n55 TJm\n(.) 2.4907 Tj\n-620 TJm\n(Y) 7.193 Tj\n110 TJm\n(ou) 9.9626 Tj\n-250 TJm\n(should) 26.5703 Tj\n-250 TJm\n(supply) 26.5703 Tj\n-250 TJm\n(such) 18.2614 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(function.) 35.696 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 200.372 Td\n(In) 8.2988 Tj\n-294 TJm\n(either) 22.6848 Tj\n-294 TJm\n(case,) 19.6363 Tj\n-306 TJm\n(once) 18.8094 Tj\n-294 TJm\n(an) 9.4047 Tj\n-294 TJm\n(assertion) 35.417 Tj\n-294 TJm\n(f) 3.3175 Tj\n10 TJm\n(ailure) 22.6848 Tj\n-294 TJm\n(has) 13.2801 Tj\n-295 TJm\n(occurred,) 37.3398 Tj\n-305 TJm\n(an) 9.4047 Tj\n15 TJm\n(y) 4.9813 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n306.541 200.372 Td\n/F124_0 9.9626 Tf\n(bz_stream) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n363.271 200.372 Td\n/F122_0 9.9626 Tf\n(records) 29.3199 Tj\n-294 TJm\n(in) 7.7509 Tj\n40 TJm\n(v) 4.9813 Tj\n20 TJm\n(olv) 12.7322 Tj\n15 TJm\n(ed) 9.4047 Tj\n-294 TJm\n(can) 13.8281 Tj\n-295 TJm\n(be) 9.4047 Tj\n-294 TJm\n(re) 7.7409 Tj\n15 TJm\n(g) 4.9813 Tj\n5 TJm\n(arded) 22.1269 Tj\n-294 TJm\n(as) 8.2988 Tj\n-294 TJm\n(in) 7.7509 Tj\n40 TJm\n(v) 4.9813 Tj\n25 TJm\n(alid.) 17.4346 Tj\n72 188.417 Td\n(Y) 7.193 Tj\n110 TJm\n(ou) 9.9626 Tj\n-250 TJm\n(should) 26.5703 Tj\n-250 TJm\n(not) 12.7322 Tj\n-250 TJm\n(attempt) 29.8878 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(resume) 28.772 Tj\n-250 TJm\n(normal) 28.224 Tj\n-250 TJm\n(operation) 37.6287 Tj\n-250 TJm\n(with) 17.7135 Tj\n-250 TJm\n(them.) 22.4159 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 166.564 Td\n(Y) 7.193 Tj\n110 TJm\n(ou) 9.9626 Tj\n-299 TJm\n(may) 17.1556 Tj\n65 TJm\n(,) 2.4907 Tj\n-310 TJm\n(of) 8.2988 Tj\n-299 TJm\n(course,) 28.493 Tj\n-311 TJm\n(change) 28.2141 Tj\n-298 TJm\n(critical) 27.6661 Tj\n-299 TJm\n(error) 19.3573 Tj\n-298 TJm\n(handling) 34.8691 Tj\n-299 TJm\n(to) 7.7509 Tj\n-298 TJm\n(suit) 14.396 Tj\n-299 TJm\n(your) 18.2614 Tj\n-298 TJm\n(needs.) 25.1755 Tj\n-912 TJm\n(As) 11.0684 Tj\n-298 TJm\n(I) 3.3175 Tj\n-299 TJm\n(said) 16.0497 Tj\n-298 TJm\n(abo) 14.386 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(e,) 6.914 Tj\n-311 TJm\n(critical) 27.6661 Tj\n-299 TJm\n(errors) 23.2328 Tj\n-298 TJm\n(indicate) 31.5416 Tj\n-299 TJm\n(b) 4.9813 Tj\n20 TJm\n(ugs) 13.8381 Tj\n72 154.609 Td\n(in) 7.7509 Tj\n-263 TJm\n(the) 12.1743 Tj\n-263 TJm\n(library) 26.5603 Tj\n-263 TJm\n(and) 14.386 Tj\n-263 TJm\n(should) 26.5703 Tj\n-263 TJm\n(not) 12.7322 Tj\n-263 TJm\n(occur) 22.1269 Tj\n55 TJm\n(.) 2.4907 Tj\n-697 TJm\n(All) 12.7322 Tj\n-263 TJm\n(\"normal\") 36.3535 Tj\n-263 TJm\n(error) 19.3573 Tj\n-263 TJm\n(situations) 38.1966 Tj\n-263 TJm\n(are) 12.1643 Tj\n-263 TJm\n(indicated) 36.5229 Tj\n-263 TJm\n(via) 12.1743 Tj\n-263 TJm\n(error) 19.3573 Tj\n-263 TJm\n(return) 23.7907 Tj\n-263 TJm\n(codes) 22.6848 Tj\n-263 TJm\n(from) 19.3673 Tj\n-263 TJm\n(functions,) 39.5714 Tj\n72 142.653 Td\n(and) 14.386 Tj\n-250 TJm\n(can) 13.8281 Tj\n-250 TJm\n(be) 9.4047 Tj\n-250 TJm\n(reco) 17.1456 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(ered) 17.1456 Tj\n-250 TJm\n(from.) 21.8579 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 107.965 Td\n/F116_0 20.6585 Tf\n(3.8.) 34.4584 Tj\n-278 TJm\n(Making) 71.1685 Tj\n-278 TJm\n(a) 11.4861 Tj\n-278 TJm\n(Windo) 63.1117 Tj\n15 TJm\n(ws) 27.5584 Tj\n-278 TJm\n(DLL) 40.1601 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 86.112 Td\n/F122_0 9.9626 Tf\n(Ev) 11.0684 Tj\n15 TJm\n(erything) 33.2053 Tj\n-328 TJm\n(related) 27.1082 Tj\n-327 TJm\n(to) 7.7509 Tj\n-328 TJm\n(W) 9.4047 Tj\n40 TJm\n(indo) 17.7135 Tj\n25 TJm\n(ws) 11.0684 Tj\n-328 TJm\n(has) 13.2801 Tj\n-327 TJm\n(been) 18.8094 Tj\n-328 TJm\n(contrib) 28.224 Tj\n20 TJm\n(uted) 17.1556 Tj\n-328 TJm\n(by) 9.9626 Tj\n-327 TJm\n(Y) 7.193 Tj\n110 TJm\n(oshioka) 30.9936 Tj\n-328 TJm\n(Tsuneo) 29.3299 Tj\n-328 TJm\n(\\() 3.3175 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n378.139 86.112 Td\n/F124_0 9.9626 Tf\n(tsuneo@rr.iij4u.or.jp) 125.5288 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n503.668 86.112 Td\n/F122_0 9.9626 Tf\n(\\),) 5.8082 Tj\n-347 TJm\n(so) 8.8568 Tj\n-328 TJm\n(you) 14.9439 Tj\n72 74.157 Td\n(should) 26.5703 Tj\n-250 TJm\n(send) 18.2614 Tj\n-250 TJm\n(your) 18.2614 Tj\n-250 TJm\n(queries) 28.772 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(him) 15.5018 Tj\n-250 TJm\n(\\(b) 8.2988 Tj\n20 TJm\n(ut) 7.7509 Tj\n-250 TJm\n(perhaps) 30.9837 Tj\n-250 TJm\n(Cc:) 13.8381 Tj\n-310 TJm\n(me,) 14.6649 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n287.958 74.157 Td\n/F124_0 9.9626 Tf\n(jseward@bzip.org) 95.641 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n383.6 74.157 Td\n/F122_0 9.9626 Tf\n(\\).) 5.8082 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 51.071 Td\n(29) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 30 33\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n419.067 749.245 Td\n/F122_0 9.9626 Tf\n(Programming) 54.7943 Tj\n-250 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n496.556 749.245 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n72 710.037 Td\n/F122_0 9.9626 Tf\n(My) 13.8381 Tj\n-367 TJm\n(v) 4.9813 Tj\n25 TJm\n(ague) 18.8094 Tj\n-367 TJm\n(understanding) 56.4481 Tj\n-367 TJm\n(of) 8.2988 Tj\n-367 TJm\n(what) 19.3673 Tj\n-368 TJm\n(to) 7.7509 Tj\n-367 TJm\n(do) 9.9626 Tj\n-367 TJm\n(is:) 9.4147 Tj\n-544 TJm\n(using) 21.589 Tj\n-367 TJm\n(V) 7.193 Tj\n60 TJm\n(isual) 18.8194 Tj\n-367 TJm\n(C++) 17.8829 Tj\n-367 TJm\n(5.0,) 14.9439 Tj\n-397 TJm\n(open) 19.3673 Tj\n-367 TJm\n(the) 12.1743 Tj\n-367 TJm\n(project) 27.6661 Tj\n-367 TJm\n(\\002le) 12.7322 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n432.966 710.037 Td\n/F124_0 9.9626 Tf\n(libbz2.dsp) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n492.742 710.037 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-396 TJm\n(and) 14.386 Tj\n-368 TJm\n(b) 4.9813 Tj\n20 TJm\n(uild.) 17.9925 Tj\n72 698.082 Td\n(That') 21.579 Tj\n55 TJm\n(s) 3.8755 Tj\n-250 TJm\n(all.) 12.4533 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 676.164 Td\n(If) 6.6351 Tj\n-284 TJm\n(you) 14.9439 Tj\n-284 TJm\n(can') 17.1456 Tj\n18 TJm\n(t) 2.7696 Tj\n-285 TJm\n(open) 19.3673 Tj\n-284 TJm\n(the) 12.1743 Tj\n-284 TJm\n(project) 27.6661 Tj\n-284 TJm\n(\\002le) 12.7322 Tj\n-284 TJm\n(for) 11.6164 Tj\n-285 TJm\n(some) 21.031 Tj\n-284 TJm\n(reason,) 28.493 Tj\n-293 TJm\n(mak) 17.1556 Tj\n10 TJm\n(e) 4.4234 Tj\n-284 TJm\n(a) 4.4234 Tj\n-284 TJm\n(ne) 9.4047 Tj\n25 TJm\n(w) 7.193 Tj\n-284 TJm\n(one,) 16.8766 Tj\n-293 TJm\n(naming) 29.8878 Tj\n-284 TJm\n(these) 20.4731 Tj\n-284 TJm\n(\\002les:) 19.3773 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n424.505 676.164 Td\n/F124_0 9.9626 Tf\n(blocksort.c) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n490.259 676.164 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n495.666 676.164 Td\n/F124_0 9.9626 Tf\n(bzlib.c) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n537.509 676.164 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 664.209 Td\n/F124_0 9.9626 Tf\n(compress.c) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n131.776 664.209 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n136.436 664.209 Td\n/F124_0 9.9626 Tf\n(crctable.c) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n196.211 664.209 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n200.871 664.209 Td\n/F124_0 9.9626 Tf\n(decompress.c) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n272.602 664.209 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n277.262 664.209 Td\n/F124_0 9.9626 Tf\n(huffman.c) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n331.06 664.209 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n335.72 664.209 Td\n/F124_0 9.9626 Tf\n(randtable.c) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n403.562 664.209 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n420.037 664.209 Td\n/F124_0 9.9626 Tf\n(libbz2.def) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n479.812 664.209 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-593 TJm\n(Y) 7.193 Tj\n110 TJm\n(ou) 9.9626 Tj\n-210 TJm\n(will) 15.5018 Tj\n-209 TJm\n(also) 16.0497 Tj\n72 652.254 Td\n(need) 18.8094 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(name) 21.579 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(header) 26.5503 Tj\n-250 TJm\n(\\002les) 16.6077 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n190.415 652.254 Td\n/F124_0 9.9626 Tf\n(bzlib.h) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n234.749 652.254 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n251.625 652.254 Td\n/F124_0 9.9626 Tf\n(bzlib_private.h) 89.6634 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n341.289 652.254 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 630.336 Td\n(If) 6.6351 Tj\n-250 TJm\n(you) 14.9439 Tj\n-250 TJm\n(don') 18.2614 Tj\n18 TJm\n(t) 2.7696 Tj\n-250 TJm\n(use) 13.2801 Tj\n-250 TJm\n(VC++,) 27.5665 Tj\n-250 TJm\n(you) 14.9439 Tj\n-250 TJm\n(may) 17.1556 Tj\n-250 TJm\n(need) 18.8094 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(de\\002ne) 24.3486 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(proprocessor) 51.4568 Tj\n-250 TJm\n(symbol) 29.3399 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n363.634 630.336 Td\n/F124_0 9.9626 Tf\n(_WIN32) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n399.5 630.336 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 608.418 Td\n(Finally) 28.234 Tj\n65 TJm\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n104.568 608.418 Td\n/F124_0 9.9626 Tf\n(dlltest.c) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n160.856 608.418 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(sample) 28.224 Tj\n-250 TJm\n(program) 33.7533 Tj\n-250 TJm\n(using) 21.589 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(DLL.) 21.8579 Tj\n-500 TJm\n(It) 6.0871 Tj\n-250 TJm\n(has) 13.2801 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(project) 27.6661 Tj\n-250 TJm\n(\\002le,) 15.2229 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n388.58 608.418 Td\n/F124_0 9.9626 Tf\n(dlltest.dsp) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n454.334 608.418 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 586.501 Td\n(If) 6.6351 Tj\n-250 TJm\n(you) 14.9439 Tj\n-250 TJm\n(just) 14.396 Tj\n-250 TJm\n(w) 7.193 Tj\n10 TJm\n(ant) 12.1743 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(mak) 17.1556 Tj\n10 TJm\n(e\\002le) 17.1556 Tj\n-250 TJm\n(for) 11.6164 Tj\n-250 TJm\n(V) 7.193 Tj\n60 TJm\n(isual) 18.8194 Tj\n-250 TJm\n(C,) 9.1357 Tj\n-250 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(look) 17.7135 Tj\n-250 TJm\n(at) 7.193 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n292.212 586.501 Td\n/F124_0 9.9626 Tf\n(makefile.msc) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n363.943 586.501 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 564.583 Td\n(Be) 11.0684 Tj\n-291 TJm\n(a) 4.4234 Tj\n15 TJm\n(w) 7.193 Tj\n10 TJm\n(are) 12.1643 Tj\n-291 TJm\n(that) 14.9439 Tj\n-291 TJm\n(if) 6.0871 Tj\n-291 TJm\n(you) 14.9439 Tj\n-291 TJm\n(compile) 32.0995 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n192.07 564.583 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n224.857 564.583 Td\n/F122_0 9.9626 Tf\n(itself) 19.9252 Tj\n-291 TJm\n(on) 9.9626 Tj\n-291 TJm\n(W) 9.4047 Tj\n40 TJm\n(in32,) 20.2042 Tj\n-301 TJm\n(you) 14.9439 Tj\n-291 TJm\n(must) 19.3773 Tj\n-291 TJm\n(set) 11.0684 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n346.842 564.583 Td\n/F124_0 9.9626 Tf\n(BZ_UNIX) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n391.584 564.583 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-291 TJm\n(0) 4.9813 Tj\n-291 TJm\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n427.4 564.583 Td\n/F124_0 9.9626 Tf\n(BZ_LCCWIN32) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n496.052 564.583 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-291 TJm\n(1,) 7.472 Tj\n-301 TJm\n(in) 7.7509 Tj\n-291 TJm\n(the) 12.1743 Tj\n72 552.628 Td\n(\\002le) 12.7322 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n87.223 552.628 Td\n/F124_0 9.9626 Tf\n(bzip2.c) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n129.066 552.628 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-250 TJm\n(before) 25.4445 Tj\n-250 TJm\n(compiling.) 42.899 Tj\n-310 TJm\n(Otherwise) 40.9463 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(resulting) 34.8691 Tj\n-250 TJm\n(binary) 25.4544 Tj\n-250 TJm\n(w) 7.193 Tj\n10 TJm\n(on') 13.2801 Tj\n18 TJm\n(t) 2.7696 Tj\n-250 TJm\n(w) 7.193 Tj\n10 TJm\n(ork) 13.2801 Tj\n-250 TJm\n(correctly) 35.4071 Tj\n65 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 530.71 Td\n(I) 3.3175 Tj\n-250 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(en') 12.7222 Tj\n18 TJm\n(t) 2.7696 Tj\n-250 TJm\n(tried) 18.2614 Tj\n-250 TJm\n(an) 9.4047 Tj\n15 TJm\n(y) 4.9813 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(this) 14.396 Tj\n-250 TJm\n(stuf) 14.9439 Tj\n25 TJm\n(f) 3.3175 Tj\n-250 TJm\n(myself,) 29.6088 Tj\n-250 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-250 TJm\n(it) 5.5392 Tj\n-250 TJm\n(all) 9.9626 Tj\n-250 TJm\n(looks) 21.589 Tj\n-250 TJm\n(plausible.) 38.4656 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 50.951 Td\n(30) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 31 34\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n72 701.916 Td\n/F116_0 24.7902 Tf\n(4.) 20.675 Tj\n-278 TJm\n(Miscellanea) 139.1722 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 656.35 Td\n/F116_0 17.2154 Tf\n(T) 10.5186 Tj\n80 TJm\n(ab) 20.0904 Tj\n10 TJm\n(le) 14.3576 Tj\n-278 TJm\n(of) 16.2513 Tj\n-278 TJm\n(Contents) 74.5943 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 635.788 Td\n/F122_0 9.9626 Tf\n(4.1.) 14.9439 Tj\n-310 TJm\n(Limitations) 45.9475 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(compressed) 47.0334 Tj\n-250 TJm\n(\\002le) 12.7322 Tj\n-250 TJm\n(format) 26.5603 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n269.154 635.788 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 635.788 Td\n/F122_0 9.9626 Tf\n(31) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 623.832 Td\n(4.2.) 14.9439 Tj\n-310 TJm\n(Portability) 42.0721 Tj\n-250 TJm\n(issues) 23.8007 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n172.03 623.832 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 623.832 Td\n/F122_0 9.9626 Tf\n(32) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 611.877 Td\n(4.3.) 14.9439 Tj\n-310 TJm\n(Reporting) 39.8504 Tj\n-250 TJm\n(b) 4.9813 Tj\n20 TJm\n(ugs) 13.8381 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n166.115 611.877 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 611.877 Td\n/F122_0 9.9626 Tf\n(32) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 599.922 Td\n(4.4.) 14.9439 Tj\n-310 TJm\n(Did) 14.9439 Tj\n-250 TJm\n(you) 14.9439 Tj\n-250 TJm\n(get) 12.1743 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(right) 18.8194 Tj\n-250 TJm\n(package?) 37.0609 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n229.109 599.922 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 599.922 Td\n/F122_0 9.9626 Tf\n(33) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 587.967 Td\n(4.5.) 14.9439 Tj\n-310 TJm\n(Further) 29.3299 Tj\n-250 TJm\n(Reading) 33.2053 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n170.361 587.967 Td\n/F230_0 9.9626 Tf\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-166 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n-167 TJm\n(:) 2.7676 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n506.127 587.967 Td\n/F122_0 9.9626 Tf\n(34) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 556.086 Td\n(These) 23.7907 Tj\n-250 TJm\n(are) 12.1643 Tj\n-250 TJm\n(just) 14.396 Tj\n-250 TJm\n(some) 21.031 Tj\n-250 TJm\n(random) 30.4357 Tj\n-250 TJm\n(thoughts) 34.3212 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(mine.) 22.4159 Tj\n-620 TJm\n(Y) 7.193 Tj\n110 TJm\n(our) 13.2801 Tj\n-250 TJm\n(mileage) 31.5416 Tj\n-250 TJm\n(may) 17.1556 Tj\n-250 TJm\n(v) 4.9813 Tj\n25 TJm\n(ary) 12.7222 Tj\n65 TJm\n(.) 2.4907 Tj\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 521.334 Td\n/F116_0 20.6585 Tf\n(4.1.) 34.4584 Tj\n-278 TJm\n(Limitations) 110.1924 Tj\n-278 TJm\n(of) 19.5016 Tj\n-278 TJm\n(the) 30.9878 Tj\n-278 TJm\n(compressed) 121.6992 Tj\n-278 TJm\n(\\002le) 29.8515 Tj\n-278 TJm\n(f) 6.8793 Tj\n20 TJm\n(ormat) 57.3893 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 499.416 Td\n/F124_0 9.9626 Tf\n(bzip2-1.0.X) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n137.753 499.416 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n143.405 499.416 Td\n/F124_0 9.9626 Tf\n(0.9.5) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n176.453 499.416 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n194 499.416 Td\n/F124_0 9.9626 Tf\n(0.9.0) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n227.048 499.416 Td\n/F122_0 9.9626 Tf\n(use) 13.2801 Tj\n-317 TJm\n(e) 4.4234 Tj\n15 TJm\n(xactly) 24.3486 Tj\n-318 TJm\n(the) 12.1743 Tj\n-317 TJm\n(same) 20.4731 Tj\n-317 TJm\n(\\002le) 12.7322 Tj\n-317 TJm\n(format) 26.5603 Tj\n-317 TJm\n(as) 8.2988 Tj\n-318 TJm\n(the) 12.1743 Tj\n-317 TJm\n(original) 30.9936 Tj\n-317 TJm\n(v) 4.9813 Tj\n15 TJm\n(ersion,) 26.8392 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n455.801 499.416 Td\n/F124_0 9.9626 Tf\n(bzip2-0.1) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n509.599 499.416 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-1024 TJm\n(This) 17.7135 Tj\n72 487.461 Td\n(decision) 33.2053 Tj\n-222 TJm\n(w) 7.193 Tj\n10 TJm\n(as) 8.2988 Tj\n-222 TJm\n(made) 21.579 Tj\n-222 TJm\n(in) 7.7509 Tj\n-221 TJm\n(the) 12.1743 Tj\n-222 TJm\n(interests) 33.2053 Tj\n-222 TJm\n(of) 8.2988 Tj\n-222 TJm\n(stability) 32.1095 Tj\n65 TJm\n(.) 2.4907 Tj\n-601 TJm\n(Creating) 34.3112 Tj\n-222 TJm\n(yet) 12.1743 Tj\n-222 TJm\n(another) 29.8778 Tj\n-222 TJm\n(incompatible) 52.0247 Tj\n-221 TJm\n(compressed) 47.0334 Tj\n-222 TJm\n(\\002le) 12.7322 Tj\n-222 TJm\n(format) 26.5603 Tj\n-222 TJm\n(w) 7.193 Tj\n10 TJm\n(ould) 17.7135 Tj\n-222 TJm\n(create) 23.7807 Tj\n72 475.505 Td\n(further) 27.1082 Tj\n-250 TJm\n(confusion) 39.2925 Tj\n-250 TJm\n(and) 14.386 Tj\n-250 TJm\n(disruption) 40.4083 Tj\n-250 TJm\n(for) 11.6164 Tj\n-250 TJm\n(users.) 22.9638 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 453.588 Td\n(Ne) 11.6164 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(ertheless,) 37.3498 Tj\n-234 TJm\n(this) 14.396 Tj\n-229 TJm\n(is) 6.6451 Tj\n-230 TJm\n(not) 12.7322 Tj\n-229 TJm\n(a) 4.4234 Tj\n-230 TJm\n(painless) 32.0995 Tj\n-229 TJm\n(decision.) 35.696 Tj\n-606 TJm\n(De) 11.6164 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(elopment) 37.0808 Tj\n-230 TJm\n(w) 7.193 Tj\n10 TJm\n(ork) 13.2801 Tj\n-230 TJm\n(sinc) 16.0497 Tj\n1 TJm\n(e) 4.4234 Tj\n-230 TJm\n(the) 12.1743 Tj\n-230 TJm\n(release) 27.6562 Tj\n-229 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n407.317 453.588 Td\n/F124_0 9.9626 Tf\n(bzip2-0.1) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n463.402 453.588 Td\n/F122_0 9.9626 Tf\n(in) 7.7509 Tj\n-230 TJm\n(August) 28.782 Tj\n-229 TJm\n(1997) 19.9252 Tj\n-230 TJm\n(has) 13.2801 Tj\n72 441.632 Td\n(sho) 13.8381 Tj\n25 TJm\n(wn) 12.1743 Tj\n-226 TJm\n(comple) 29.3299 Tj\n15 TJm\n(xities) 21.589 Tj\n-226 TJm\n(in) 7.7509 Tj\n-225 TJm\n(the) 12.1743 Tj\n-226 TJm\n(\\002le) 12.7322 Tj\n-226 TJm\n(format) 26.5603 Tj\n-226 TJm\n(which) 24.3486 Tj\n-226 TJm\n(slo) 11.6264 Tj\n25 TJm\n(w) 7.193 Tj\n-225 TJm\n(do) 9.9626 Tj\n25 TJm\n(wn) 12.1743 Tj\n-226 TJm\n(decompression) 59.7656 Tj\n-226 TJm\n(and,) 16.8766 Tj\n-231 TJm\n(in) 7.7509 Tj\n-226 TJm\n(retrospect,) 41.7732 Tj\n-230 TJm\n(are) 12.1643 Tj\n-226 TJm\n(unnecessary) 48.6872 Tj\n65 TJm\n(.) 2.4907 Tj\n-604 TJm\n(These) 23.7907 Tj\n-226 TJm\n(are:) 14.9339 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 409.752 Td\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-450 TJm\n(The) 15.4918 Tj\n-287 TJm\n(run-length) 41.5042 Tj\n-287 TJm\n(encoder) 31.5316 Tj\n40 TJm\n(,) 2.4907 Tj\n-297 TJm\n(which) 24.3486 Tj\n-287 TJm\n(is) 6.6451 Tj\n-288 TJm\n(the) 12.1743 Tj\n-287 TJm\n(\\002rst) 15.5018 Tj\n-287 TJm\n(of) 8.2988 Tj\n-287 TJm\n(the) 12.1743 Tj\n-288 TJm\n(compression) 50.3609 Tj\n-287 TJm\n(transformations,) 65.0259 Tj\n-296 TJm\n(is) 6.6451 Tj\n-288 TJm\n(entirely) 30.4357 Tj\n-287 TJm\n(irrele) 21.0211 Tj\n25 TJm\n(v) 4.9813 Tj\n25 TJm\n(ant.) 14.6649 Tj\n-843 TJm\n(The) 15.4918 Tj\n-288 TJm\n(original) 30.9936 Tj\n81.963 397.797 Td\n(purpose) 31.5416 Tj\n-322 TJm\n(w) 7.193 Tj\n10 TJm\n(as) 8.2988 Tj\n-322 TJm\n(to) 7.7509 Tj\n-322 TJm\n(protect) 27.6661 Tj\n-321 TJm\n(the) 12.1743 Tj\n-322 TJm\n(sorting) 27.6761 Tj\n-322 TJm\n(algorithm) 38.7446 Tj\n-322 TJm\n(from) 19.3673 Tj\n-322 TJm\n(the) 12.1743 Tj\n-322 TJm\n(v) 4.9813 Tj\n15 TJm\n(ery) 12.7222 Tj\n-322 TJm\n(w) 7.193 Tj\n10 TJm\n(orst) 14.9439 Tj\n-321 TJm\n(case) 17.1456 Tj\n-322 TJm\n(input:) 23.2527 Tj\n-454 TJm\n(a) 4.4234 Tj\n-322 TJm\n(string) 22.6948 Tj\n-322 TJm\n(of) 8.2988 Tj\n-322 TJm\n(repeated) 33.7433 Tj\n-321 TJm\n(symbols.) 35.706 Tj\n-1052 TJm\n(But) 14.396 Tj\n81.963 385.842 Td\n(algorithm) 38.7446 Tj\n-229 TJm\n(steps) 19.9252 Tj\n-230 TJm\n(Q6a) 16.5977 Tj\n-229 TJm\n(and) 14.386 Tj\n-230 TJm\n(Q6b) 17.1556 Tj\n-229 TJm\n(in) 7.7509 Tj\n-230 TJm\n(t) 2.7696 Tj\n1 TJm\n(he) 9.4047 Tj\n-230 TJm\n(original) 30.9936 Tj\n-229 TJm\n(Burro) 23.2427 Tj\n25 TJm\n(ws-Wheeler) 48.1293 Tj\n-230 TJm\n(technical) 35.965 Tj\n-229 TJm\n(report) 23.7907 Tj\n-230 TJm\n(\\(SRC-124\\)) 43.7259 Tj\n-229 TJm\n(sho) 13.8381 Tj\n25 TJm\n(w) 7.193 Tj\n-229 TJm\n(ho) 9.9626 Tj\n25 TJm\n(w) 7.193 Tj\n-230 TJm\n(repeats) 28.2141 Tj\n-229 TJm\n(can) 13.8281 Tj\n-230 TJm\n(be) 9.4047 Tj\n81.963 373.886 Td\n(handled) 31.5416 Tj\n-250 TJm\n(without) 30.4457 Tj\n-250 TJm\n(dif) 11.0684 Tj\n25 TJm\n(\\002culty) 25.4644 Tj\n-250 TJm\n(in) 7.7509 Tj\n-250 TJm\n(block) 22.1369 Tj\n-250 TJm\n(sorting.) 30.1668 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 351.969 Td\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-450 TJm\n(The) 15.4918 Tj\n-315 TJm\n(randomisation) 57.006 Tj\n-314 TJm\n(mechanism) 45.3796 Tj\n-315 TJm\n(doesn') 26.5603 Tj\n18 TJm\n(t) 2.7696 Tj\n-314 TJm\n(really) 22.6848 Tj\n-315 TJm\n(need) 18.8094 Tj\n-315 TJm\n(to) 7.7509 Tj\n-314 TJm\n(be) 9.4047 Tj\n-315 TJm\n(there.) 22.4059 Tj\n-1007 TJm\n(Udi) 14.9439 Tj\n-315 TJm\n(Manber) 30.9837 Tj\n-315 TJm\n(and) 14.386 Tj\n-314 TJm\n(Gene) 21.0211 Tj\n-315 TJm\n(Myers) 25.4544 Tj\n-314 TJm\n(published) 38.7446 Tj\n-315 TJm\n(a) 4.4234 Tj\n-315 TJm\n(suf) 12.1743 Tj\n25 TJm\n(\\002x) 10.5205 Tj\n81.963 340.013 Td\n(array) 20.4632 Tj\n-266 TJm\n(construction) 49.2551 Tj\n-266 TJm\n(algorithm) 38.7446 Tj\n-266 TJm\n(a) 4.4234 Tj\n-266 TJm\n(fe) 7.7409 Tj\n25 TJm\n(w) 7.193 Tj\n-266 TJm\n(years) 21.0211 Tj\n-266 TJm\n(back,) 21.3 Tj\n-269 TJm\n(which) 24.3486 Tj\n-266 TJm\n(can) 13.8281 Tj\n-266 TJm\n(be) 9.4047 Tj\n-266 TJm\n(emplo) 24.9065 Tj\n10 TJm\n(yed) 14.386 Tj\n-266 TJm\n(to) 7.7509 Tj\n-266 TJm\n(sort) 14.9439 Tj\n-266 TJm\n(an) 9.4047 Tj\n15 TJm\n(y) 4.9813 Tj\n-266 TJm\n(block,) 24.6275 Tj\n-270 TJm\n(no) 9.9626 Tj\n-266 TJm\n(matter) 25.4544 Tj\n-266 TJm\n(ho) 9.9626 Tj\n25 TJm\n(w) 7.193 Tj\n-266 TJm\n(repetiti) 28.224 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(e,) 6.914 Tj\n81.963 328.058 Td\n(in) 7.7509 Tj\n-257 TJm\n(O\\(N) 17.7035 Tj\n-257 TJm\n(log) 12.7322 Tj\n-257 TJm\n(N\\)) 10.5105 Tj\n-258 TJm\n(time.) 20.2042 Tj\n-663 TJm\n(Subsequent) 45.9375 Tj\n-257 TJm\n(w) 7.193 Tj\n10 TJm\n(ork) 13.2801 Tj\n-257 TJm\n(by) 9.9626 Tj\n-257 TJm\n(K) 7.193 Tj\n15 TJm\n(unihik) 25.4644 Tj\n10 TJm\n(o) 4.9813 Tj\n-257 TJm\n(Sadakane) 38.1767 Tj\n-258 TJm\n(has) 13.2801 Tj\n-257 TJm\n(produced) 37.0708 Tj\n-257 TJm\n(a) 4.4234 Tj\n-257 TJm\n(deri) 15.4918 Tj\n25 TJm\n(v) 4.9813 Tj\n25 TJm\n(ati) 9.9626 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-257 TJm\n(O\\(N) 17.7035 Tj\n-257 TJm\n(\\(log) 16.0497 Tj\n-258 TJm\n(N\\)^2\\)) 23.4818 Tj\n-257 TJm\n(algorithm) 38.7446 Tj\n81.963 316.103 Td\n(which) 24.3486 Tj\n-250 TJm\n(usually) 28.782 Tj\n-250 TJm\n(outperforms) 48.6972 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(Manber) 30.9837 Tj\n20 TJm\n(-Myers) 28.772 Tj\n-250 TJm\n(algorithm.) 41.2352 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n81.963 294.185 Td\n(I) 3.3175 Tj\n-274 TJm\n(could) 22.1369 Tj\n-274 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-274 TJm\n(changed) 33.1954 Tj\n-274 TJm\n(to) 7.7509 Tj\n-274 TJm\n(Sadakane') 41.4942 Tj\n55 TJm\n(s) 3.8755 Tj\n-274 TJm\n(algorithm,) 41.2352 Tj\n-280 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-274 TJm\n(I) 3.3175 Tj\n-274 TJm\n(\\002nd) 15.5018 Tj\n-274 TJm\n(it) 5.5392 Tj\n-274 TJm\n(to) 7.7509 Tj\n-274 TJm\n(be) 9.4047 Tj\n-274 TJm\n(slo) 11.6264 Tj\n25 TJm\n(wer) 14.9339 Tj\n-274 TJm\n(than) 17.1556 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n391.407 294.185 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n421.295 294.185 Td\n/F122_0 9.9626 Tf\n(') 3.3175 Tj\n55 TJm\n(s) 3.8755 Tj\n-274 TJm\n(e) 4.4234 Tj\n15 TJm\n(xisting) 27.1282 Tj\n-274 TJm\n(algorithm) 38.7446 Tj\n-274 TJm\n(for) 11.6164 Tj\n-274 TJm\n(most) 19.3773 Tj\n81.963 282.23 Td\n(inputs,) 26.8492 Tj\n-399 TJm\n(and) 14.386 Tj\n-369 TJm\n(the) 12.1743 Tj\n-369 TJm\n(randomisation) 57.006 Tj\n-370 TJm\n(me) 12.1743 Tj\n1 TJm\n(chanism) 33.2053 Tj\n-370 TJm\n(protects) 31.5416 Tj\n-369 TJm\n(adequately) 43.158 Tj\n-369 TJm\n(ag) 9.4047 Tj\n5 TJm\n(ainst) 18.8194 Tj\n-369 TJm\n(bad) 14.386 Tj\n-369 TJm\n(cases.) 23.5117 Tj\n-1336 TJm\n(I) 3.3175 Tj\n-369 TJm\n(didn') 21.031 Tj\n18 TJm\n(t) 2.7696 Tj\n-369 TJm\n(think) 20.4831 Tj\n-369 TJm\n(it) 5.5392 Tj\n-369 TJm\n(w) 7.193 Tj\n10 TJm\n(as) 8.2988 Tj\n-369 TJm\n(a) 4.4234 Tj\n-370 TJm\n(good) 19.9252 Tj\n81.963 270.275 Td\n(tradeof) 28.2141 Tj\n25 TJm\n(f) 3.3175 Tj\n-282 TJm\n(to) 7.7509 Tj\n-283 TJm\n(mak) 17.1556 Tj\n10 TJm\n(e.) 6.914 Tj\n-815 TJm\n(P) 5.5392 Tj\n15 TJm\n(artly) 18.2614 Tj\n-282 TJm\n(this) 14.396 Tj\n-282 TJm\n(is) 6.6451 Tj\n-283 TJm\n(due) 14.386 Tj\n-282 TJm\n(to) 7.7509 Tj\n-283 TJm\n(the) 12.1743 Tj\n-282 TJm\n(f) 3.3175 Tj\n10 TJm\n(act) 11.6164 Tj\n-283 TJm\n(that) 14.9439 Tj\n-282 TJm\n(I) 3.3175 Tj\n-283 TJm\n(w) 7.193 Tj\n10 TJm\n(as) 8.2988 Tj\n-282 TJm\n(not) 12.7322 Tj\n-282 TJm\n(\\003ooded) 29.8878 Tj\n-283 TJm\n(with) 17.7135 Tj\n-282 TJm\n(email) 22.1369 Tj\n-283 TJm\n(complaints) 43.7259 Tj\n-282 TJm\n(about) 22.1369 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n479.557 270.275 Td\n/F124_0 9.9626 Tf\n(bzip2-0.1) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n533.355 270.275 Td\n/F122_0 9.9626 Tf\n(') 3.3175 Tj\n55 TJm\n(s) 3.8755 Tj\n81.963 258.32 Td\n(performance) 50.341 Tj\n-250 TJm\n(on) 9.9626 Tj\n-250 TJm\n(repetiti) 28.224 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-250 TJm\n(data,) 19.0883 Tj\n-250 TJm\n(so) 8.8568 Tj\n-250 TJm\n(perhaps) 30.9837 Tj\n-250 TJm\n(it) 5.5392 Tj\n-250 TJm\n(isn') 14.9439 Tj\n18 TJm\n(t) 2.7696 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(problem) 33.2053 Tj\n-250 TJm\n(for) 11.6164 Tj\n-250 TJm\n(real) 14.9339 Tj\n-250 TJm\n(inputs.) 26.8492 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n81.963 236.402 Td\n(Probably) 35.9749 Tj\n-314 TJm\n(the) 12.1743 Tj\n-315 TJm\n(best) 16.0497 Tj\n-314 TJm\n(long-term) 39.2925 Tj\n-314 TJm\n(solution,) 34.6001 Tj\n-331 TJm\n(and) 14.386 Tj\n-314 TJm\n(the) 12.1743 Tj\n-314 TJm\n(one) 14.386 Tj\n-315 TJm\n(I) 3.3175 Tj\n-314 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-314 TJm\n(incorporated) 50.351 Tj\n-315 TJm\n(into) 15.5018 Tj\n-314 TJm\n(0.9.5) 19.9252 Tj\n-314 TJm\n(and) 14.386 Tj\n-315 TJm\n(abo) 14.386 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(e,) 6.914 Tj\n-330 TJm\n(is) 6.6451 Tj\n-315 TJm\n(to) 7.7509 Tj\n-314 TJm\n(use) 13.2801 Tj\n-314 TJm\n(the) 12.1743 Tj\n-315 TJm\n(e) 4.4234 Tj\n15 TJm\n(xisting) 27.1282 Tj\n81.963 224.447 Td\n(sorting) 27.6761 Tj\n-206 TJm\n(algorithm) 38.7446 Tj\n-206 TJm\n(initially) 31.0036 Tj\n65 TJm\n(,) 2.4907 Tj\n-215 TJm\n(and) 14.386 Tj\n-207 TJm\n(f) 3.3175 Tj\n10 TJm\n(all) 9.9626 Tj\n-206 TJm\n(back) 18.8094 Tj\n-206 TJm\n(to) 7.7509 Tj\n-206 TJm\n(a) 4.4234 Tj\n-207 TJm\n(O\\(N) 17.7035 Tj\n-206 TJm\n(\\(log) 16.0497 Tj\n-206 TJm\n(N\\)^2\\)) 23.4818 Tj\n-206 TJm\n(algorithm) 38.7446 Tj\n-206 TJm\n(if) 6.0871 Tj\n-207 TJm\n(the) 12.1743 Tj\n-206 TJm\n(standard) 33.7533 Tj\n-206 TJm\n(algorithm) 38.7446 Tj\n-206 TJm\n(gets) 16.0497 Tj\n-206 TJm\n(into) 15.5018 Tj\n-207 TJm\n(dif) 11.0684 Tj\n25 TJm\n(\\002culties.) 34.0422 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 202.529 Td\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-450 TJm\n(The) 15.4918 Tj\n-321 TJm\n(compressed) 47.0334 Tj\n-322 TJm\n(\\002le) 12.7322 Tj\n-321 TJm\n(format) 26.5603 Tj\n-321 TJm\n(w) 7.193 Tj\n10 TJm\n(as) 8.2988 Tj\n-322 TJm\n(ne) 9.4047 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(er) 7.7409 Tj\n-321 TJm\n(designed) 35.417 Tj\n-321 TJm\n(to) 7.7509 Tj\n-322 TJm\n(be) 9.4047 Tj\n-321 TJm\n(handled) 31.5416 Tj\n-321 TJm\n(by) 9.9626 Tj\n-322 TJm\n(a) 4.4234 Tj\n-321 TJm\n(library) 26.5603 Tj\n65 TJm\n(,) 2.4907 Tj\n-339 TJm\n(and) 14.386 Tj\n-322 TJm\n(I) 3.3175 Tj\n-321 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-321 TJm\n(had) 14.386 Tj\n-322 TJm\n(to) 7.7509 Tj\n-321 TJm\n(jump) 20.4831 Tj\n-321 TJm\n(though) 27.6761 Tj\n-322 TJm\n(some) 21.031 Tj\n81.963 190.574 Td\n(hoops) 23.8007 Tj\n-299 TJm\n(t) 2.7696 Tj\n1 TJm\n(o) 4.9813 Tj\n-299 TJm\n(produce) 32.0895 Tj\n-299 TJm\n(an) 9.4047 Tj\n-298 TJm\n(ef) 7.7409 Tj\n25 TJm\n(\\002cient) 24.9065 Tj\n-299 TJm\n(implementation) 62.5452 Tj\n-298 TJm\n(of) 8.2988 Tj\n-299 TJm\n(decompression.) 62.2563 Tj\n-911 TJm\n(It') 9.4047 Tj\n55 TJm\n(s) 3.8755 Tj\n-298 TJm\n(a) 4.4234 Tj\n-299 TJm\n(bit) 10.5205 Tj\n-298 TJm\n(hairy) 20.4731 Tj\n65 TJm\n(.) 2.4907 Tj\n-912 TJm\n(T) 6.0871 Tj\n35 TJm\n(ry) 8.2988 Tj\n-298 TJm\n(passing) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n468.269 190.574 Td\n/F124_0 9.9626 Tf\n(decompress.c) 71.7307 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n81.963 178.619 Td\n/F122_0 9.9626 Tf\n(through) 30.9936 Tj\n-289 TJm\n(the) 12.1743 Tj\n-289 TJm\n(C) 6.6451 Tj\n-289 TJm\n(preprocessor) 50.8989 Tj\n-289 TJm\n(and) 14.386 Tj\n-289 TJm\n(you') 18.2614 Tj\n10 TJm\n(ll) 5.5392 Tj\n-289 TJm\n(see) 12.7222 Tj\n-289 TJm\n(what) 19.3673 Tj\n-289 TJm\n(I) 3.3175 Tj\n-289 TJm\n(mean.) 24.0696 Tj\n-854 TJm\n(Much) 23.2427 Tj\n-289 TJm\n(of) 8.2988 Tj\n-289 TJm\n(this) 14.396 Tj\n-289 TJm\n(comple) 29.3299 Tj\n15 TJm\n(xity) 15.5018 Tj\n-289 TJm\n(could) 22.1369 Tj\n-289 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-289 TJm\n(been) 18.8094 Tj\n-289 TJm\n(a) 4.4234 Tj\n20 TJm\n(v) 4.9813 Tj\n20 TJm\n(oided) 22.1369 Tj\n-289 TJm\n(if) 6.0871 Tj\n-289 TJm\n(the) 12.1743 Tj\n81.963 166.663 Td\n(compressed) 47.0334 Tj\n-250 TJm\n(size) 15.4918 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(each) 18.2515 Tj\n-250 TJm\n(block) 22.1369 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(data) 16.5977 Tj\n-250 TJm\n(w) 7.193 Tj\n10 TJm\n(as) 8.2988 Tj\n-250 TJm\n(recorded) 34.8492 Tj\n-250 TJm\n(in) 7.7509 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(data) 16.5977 Tj\n-250 TJm\n(stream.) 29.0509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 144.746 Td\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-450 TJm\n(An) 12.1743 Tj\n-250 TJm\n(Adler) 22.6848 Tj\n20 TJm\n(-32) 13.2801 Tj\n-250 TJm\n(checksum,) 42.3311 Tj\n-250 TJm\n(rather) 23.2328 Tj\n-250 TJm\n(than) 17.1556 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(CRC32) 29.8978 Tj\n-250 TJm\n(checksum,) 42.3311 Tj\n-250 TJm\n(w) 7.193 Tj\n10 TJm\n(ould) 17.7135 Tj\n-250 TJm\n(be) 9.4047 Tj\n-250 TJm\n(f) 3.3175 Tj\n10 TJm\n(aster) 18.8094 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(compute.) 36.8018 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 122.828 Td\n(It) 6.0871 Tj\n-349 TJm\n(w) 7.193 Tj\n10 TJm\n(ould) 17.7135 Tj\n-349 TJm\n(be) 9.4047 Tj\n-349 TJm\n(f) 3.3175 Tj\n10 TJm\n(air) 10.5105 Tj\n-348 TJm\n(to) 7.7509 Tj\n-349 TJm\n(say) 13.2801 Tj\n-349 TJm\n(that) 14.9439 Tj\n-349 TJm\n(the) 12.1743 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n201.979 122.828 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n235.342 122.828 Td\n/F122_0 9.9626 Tf\n(format) 26.5603 Tj\n-349 TJm\n(w) 7.193 Tj\n10 TJm\n(as) 8.2988 Tj\n-349 TJm\n(frozen) 25.4445 Tj\n-348 TJm\n(before) 25.4445 Tj\n-349 TJm\n(I) 3.3175 Tj\n-349 TJm\n(properly) 33.7533 Tj\n-349 TJm\n(and) 14.386 Tj\n-349 TJm\n(fully) 18.8194 Tj\n-349 TJm\n(understood) 44.2738 Tj\n-348 TJm\n(the) 12.1743 Tj\n-349 TJm\n(performance) 50.341 Tj\n72 110.873 Td\n(consequences) 54.7744 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(doing) 22.6948 Tj\n-250 TJm\n(so.) 11.3474 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 88.955 Td\n(Impro) 24.3486 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(ements) 28.224 Tj\n-250 TJm\n(which) 24.3486 Tj\n-250 TJm\n(I) 3.3175 Tj\n-250 TJm\n(w) 7.193 Tj\n10 TJm\n(as) 8.2988 Tj\n-250 TJm\n(able) 16.5977 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(incorporate) 45.3697 Tj\n-250 TJm\n(into) 15.5018 Tj\n-250 TJm\n(0.9.0,) 22.4159 Tj\n-250 TJm\n(despite) 28.224 Tj\n-250 TJm\n(using) 21.589 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(same) 20.4731 Tj\n-250 TJm\n(\\002le) 12.7322 Tj\n-250 TJm\n(format,) 29.0509 Tj\n-250 TJm\n(are:) 14.9339 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 50.951 Td\n(31) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 32 35\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n498.728 749.245 Td\n/F122_0 9.9626 Tf\n(Miscellanea) 48.1393 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n74.491 710.037 Td\n/F122_0 9.9626 Tf\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-450 TJm\n(Single) 25.4644 Tj\n-234 TJm\n(array) 20.4632 Tj\n-234 TJm\n(implementation) 62.5452 Tj\n-235 TJm\n(of) 8.2988 Tj\n-234 TJm\n(the) 12.1743 Tj\n-234 TJm\n(in) 7.7509 Tj\n40 TJm\n(v) 4.9813 Tj\n15 TJm\n(erse) 16.0398 Tj\n-234 TJm\n(BWT) 22.1369 Tj\n74 TJm\n(.) 2.4907 Tj\n-469 TJm\n(This) 17.7135 Tj\n-234 TJm\n(signi\\002cantly) 49.2651 Tj\n-235 TJm\n(speeds) 26.5603 Tj\n-234 TJm\n(up) 9.9626 Tj\n-234 TJm\n(decompression,) 62.2563 Tj\n-237 TJm\n(presumably) 46.4855 Tj\n-235 TJm\n(because) 31.5316 Tj\n81.963 698.082 Td\n(it) 5.5392 Tj\n-250 TJm\n(reduces) 30.4258 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(number) 30.4357 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(cache) 22.6749 Tj\n-250 TJm\n(misses.) 29.0609 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 676.164 Td\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-450 TJm\n(F) 5.5392 Tj\n15 TJm\n(aster) 18.8094 Tj\n-338 TJm\n(in) 7.7509 Tj\n40 TJm\n(v) 4.9813 Tj\n15 TJm\n(erse) 16.0398 Tj\n-338 TJm\n(MTF) 20.4831 Tj\n-338 TJm\n(transform) 38.7346 Tj\n-338 TJm\n(for) 11.6164 Tj\n-339 TJm\n(lar) 10.5105 Tj\n18 TJm\n(ge) 9.4047 Tj\n-338 TJm\n(MTF) 20.4831 Tj\n-338 TJm\n(v) 4.9813 Tj\n25 TJm\n(alues.) 22.9638 Tj\n-574 TJm\n(The) 15.4918 Tj\n-338 TJm\n(ne) 9.4047 Tj\n25 TJm\n(w) 7.193 Tj\n-339 TJm\n(implementation) 62.5452 Tj\n-338 TJm\n(is) 6.6451 Tj\n-338 TJm\n(based) 22.6848 Tj\n-338 TJm\n(on) 9.9626 Tj\n-338 TJm\n(the) 12.1743 Tj\n-338 TJm\n(notion) 25.4644 Tj\n-339 TJm\n(of) 8.2988 Tj\n-338 TJm\n(sliding) 27.1282 Tj\n81.963 664.209 Td\n(blocks) 26.0123 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(v) 4.9813 Tj\n25 TJm\n(alues.) 22.9638 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 642.291 Td\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n82.461 642.291 Td\n/F124_0 9.9626 Tf\n(bzip2-0.9.0) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n151.137 642.291 Td\n/F122_0 9.9626 Tf\n(no) 9.9626 Tj\n25 TJm\n(w) 7.193 Tj\n-293 TJm\n(reads) 21.0211 Tj\n-294 TJm\n(and) 14.386 Tj\n-293 TJm\n(writes) 24.3486 Tj\n-293 TJm\n(\\002les) 16.6077 Tj\n-294 TJm\n(with) 17.7135 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n279.657 642.291 Td\n/F124_0 9.9626 Tf\n(fread) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n312.467 642.291 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n329.776 642.291 Td\n/F124_0 9.9626 Tf\n(fwrite) 35.8654 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n365.642 642.291 Td\n/F122_0 9.9626 Tf\n(;) 2.7696 Tj\n-315 TJm\n(v) 4.9813 Tj\n15 TJm\n(ersion) 24.3486 Tj\n-293 TJm\n(0.1) 12.4533 Tj\n-294 TJm\n(used) 18.2614 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n440.214 642.291 Td\n/F124_0 9.9626 Tf\n(putc) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n467.047 642.291 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n484.356 642.291 Td\n/F124_0 9.9626 Tf\n(getc) 23.9102 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n508.266 642.291 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-880 TJm\n(Duh!) 20.4731 Tj\n81.963 630.336 Td\n(W) 9.4047 Tj\n80 TJm\n(ell,) 12.4533 Tj\n-250 TJm\n(you) 14.9439 Tj\n-250 TJm\n(li) 5.5392 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-250 TJm\n(and) 14.386 Tj\n-250 TJm\n(learn.) 22.4059 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 608.418 Td\n(Further) 29.3299 Tj\n-304 TJm\n(ahead,) 25.7234 Tj\n-318 TJm\n(it) 5.5392 Tj\n-305 TJm\n(w) 7.193 Tj\n10 TJm\n(ould) 17.7135 Tj\n-304 TJm\n(be) 9.4047 Tj\n-305 TJm\n(nice) 16.5977 Tj\n-304 TJm\n(to) 7.7509 Tj\n-305 TJm\n(be) 9.4047 Tj\n-304 TJm\n(able) 16.5977 Tj\n-304 TJm\n(to) 7.7509 Tj\n-305 TJm\n(do) 9.9626 Tj\n-304 TJm\n(random) 30.4357 Tj\n-305 TJm\n(access) 25.4445 Tj\n-304 TJm\n(into) 15.5018 Tj\n-305 TJm\n(\\002les.) 19.0983 Tj\n-946 TJm\n(This) 17.7135 Tj\n-305 TJm\n(will) 15.5018 Tj\n-304 TJm\n(require) 28.2141 Tj\n-304 TJm\n(some) 21.031 Tj\n-305 TJm\n(careful) 27.6562 Tj\n-304 TJm\n(design) 26.0123 Tj\n-305 TJm\n(of) 8.2988 Tj\n72 596.463 Td\n(compressed) 47.0334 Tj\n-250 TJm\n(\\002le) 12.7322 Tj\n-250 TJm\n(formats.) 32.9264 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 561.71 Td\n/F116_0 20.6585 Tf\n(4.2.) 34.4584 Tj\n-278 TJm\n(P) 13.7792 Tj\n40 TJm\n(or) 20.6585 Tj\n-20 TJm\n(tability) 66.5823 Tj\n-278 TJm\n(issues) 64.3099 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 539.792 Td\n/F122_0 9.9626 Tf\n(After) 21.0211 Tj\n-250 TJm\n(some) 21.031 Tj\n-250 TJm\n(consideration,) 56.1691 Tj\n-250 TJm\n(I) 3.3175 Tj\n-250 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-250 TJm\n(decided) 30.9837 Tj\n-250 TJm\n(not) 12.7322 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(use) 13.2801 Tj\n-250 TJm\n(GNU) 21.579 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n303.231 539.792 Td\n/F124_0 9.9626 Tf\n(autoconf) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n353.542 539.792 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-250 TJm\n(con\\002gure) 37.6287 Tj\n-250 TJm\n(0.9.5) 19.9252 Tj\n-250 TJm\n(or) 8.2988 Tj\n-250 TJm\n(1.0.) 14.9439 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 517.875 Td\n/F124_0 9.9626 Tf\n(autoconf) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n119.821 517.875 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-502 TJm\n(admirable) 39.8404 Tj\n-452 TJm\n(and) 14.386 Tj\n-452 TJm\n(w) 7.193 Tj\n10 TJm\n(onderful) 33.7533 Tj\n-452 TJm\n(though) 27.6761 Tj\n-452 TJm\n(it) 5.5392 Tj\n-452 TJm\n(is,) 9.1357 Tj\n-502 TJm\n(mainly) 27.6761 Tj\n-452 TJm\n(assists) 25.4644 Tj\n-452 TJm\n(with) 17.7135 Tj\n-452 TJm\n(portability) 41.5142 Tj\n-452 TJm\n(problems) 37.0808 Tj\n-452 TJm\n(between) 33.1954 Tj\n-452 TJm\n(Unix-lik) 33.7633 Tj\n10 TJm\n(e) 4.4234 Tj\n72 505.92 Td\n(platforms.) 40.6773 Tj\n-1398 TJm\n(But) 14.396 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n144.784 505.92 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n178.455 505.92 Td\n/F122_0 9.9626 Tf\n(doesn') 26.5603 Tj\n18 TJm\n(t) 2.7696 Tj\n-380 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-379 TJm\n(much) 22.1369 Tj\n-380 TJm\n(in) 7.7509 Tj\n-380 TJm\n(the) 12.1743 Tj\n-379 TJm\n(w) 7.193 Tj\n10 TJm\n(ay) 9.4047 Tj\n-380 TJm\n(of) 8.2988 Tj\n-380 TJm\n(portability) 41.5142 Tj\n-379 TJm\n(problems) 37.0808 Tj\n-380 TJm\n(on) 9.9626 Tj\n-380 TJm\n(Unix;) 22.6948 Tj\n-444 TJm\n(most) 19.3773 Tj\n-380 TJm\n(of) 8.2988 Tj\n-380 TJm\n(the) 12.1743 Tj\n-379 TJm\n(dif) 11.0684 Tj\n25 TJm\n(\\002culties) 31.5516 Tj\n72 493.964 Td\n(appear) 26.5503 Tj\n-297 TJm\n(when) 21.579 Tj\n-296 TJm\n(p) 4.9813 Tj\n-1 TJm\n(or) 8.2988 Tj\n1 TJm\n(ting) 15.5018 Tj\n-297 TJm\n(to) 7.7509 Tj\n-297 TJm\n(the) 12.1743 Tj\n-297 TJm\n(Mac,) 20.1942 Tj\n-308 TJm\n(or) 8.2988 Tj\n-297 TJm\n(to) 7.7509 Tj\n-297 TJm\n(Microsoft') 42.61 Tj\n55 TJm\n(s) 3.8755 Tj\n-296 TJm\n(operating) 37.6287 Tj\n-297 TJm\n(systems.) 34.0422 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n361.339 493.964 Td\n/F124_0 9.9626 Tf\n(autoconf) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n412.116 493.964 Td\n/F122_0 9.9626 Tf\n(doesn') 26.5603 Tj\n18 TJm\n(t) 2.7696 Tj\n-297 TJm\n(help) 17.1556 Tj\n-297 TJm\n(in) 7.7509 Tj\n-296 TJm\n(those) 21.031 Tj\n-297 TJm\n(cases,) 23.5117 Tj\n-308 TJm\n(and) 14.386 Tj\n72 482.009 Td\n(brings) 24.9065 Tj\n-250 TJm\n(in) 7.7509 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(whole) 24.3486 Tj\n-250 TJm\n(load) 17.1556 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(ne) 9.4047 Tj\n25 TJm\n(w) 7.193 Tj\n-250 TJm\n(comple) 29.3299 Tj\n15 TJm\n(xity) 15.5018 Tj\n65 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 460.091 Td\n(Most) 20.4831 Tj\n-392 TJm\n(people) 26.5603 Tj\n-392 TJm\n(should) 26.5703 Tj\n-393 TJm\n(be) 9.4047 Tj\n-392 TJm\n(able) 16.5977 Tj\n-392 TJm\n(to) 7.7509 Tj\n-392 TJm\n(compile) 32.0995 Tj\n-393 TJm\n(the) 12.1743 Tj\n-392 TJm\n(library) 26.5603 Tj\n-392 TJm\n(and) 14.386 Tj\n-392 TJm\n(program) 33.7533 Tj\n-393 TJm\n(under) 22.6848 Tj\n-392 TJm\n(Unix) 19.9252 Tj\n-392 TJm\n(straight) 29.8878 Tj\n-392 TJm\n(out-of-the-box,) 60.5925 Tj\n-428 TJm\n(so) 8.8568 Tj\n-392 TJm\n(to) 7.7509 Tj\n-393 TJm\n(speak,) 25.1755 Tj\n72 448.136 Td\n(especially) 39.8404 Tj\n-250 TJm\n(if) 6.0871 Tj\n-250 TJm\n(you) 14.9439 Tj\n-250 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(v) 4.9813 Tj\n15 TJm\n(ersion) 24.3486 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(GNU) 21.579 Tj\n-250 TJm\n(C) 6.6451 Tj\n-250 TJm\n(a) 4.4234 Tj\n20 TJm\n(v) 4.9813 Tj\n25 TJm\n(ailable.) 29.0509 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 426.218 Td\n(There) 23.2328 Tj\n-259 TJm\n(are) 12.1643 Tj\n-258 TJm\n(a) 4.4234 Tj\n-259 TJm\n(couple) 26.5603 Tj\n-258 TJm\n(of) 8.2988 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n159.561 426.218 Td\n/F124_0 9.9626 Tf\n(__inline__) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n221.913 426.218 Td\n/F122_0 9.9626 Tf\n(directi) 25.4544 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(es) 8.2988 Tj\n-259 TJm\n(in) 7.7509 Tj\n-258 TJm\n(the) 12.1743 Tj\n-259 TJm\n(code.) 21.3 Tj\n-671 TJm\n(GNU) 21.579 Tj\n-259 TJm\n(C) 6.6451 Tj\n-258 TJm\n(\\() 3.3175 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n352.587 426.218 Td\n/F124_0 9.9626 Tf\n(gcc) 17.9327 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n370.52 426.218 Td\n/F122_0 9.9626 Tf\n(\\)) 3.3175 Tj\n-259 TJm\n(should) 26.5703 Tj\n-258 TJm\n(be) 9.4047 Tj\n-259 TJm\n(able) 16.5977 Tj\n-258 TJm\n(to) 7.7509 Tj\n-259 TJm\n(handle) 26.5603 Tj\n-258 TJm\n(them.) 22.4159 Tj\n-672 TJm\n(If) 6.6351 Tj\n-259 TJm\n(you') 18.2614 Tj\n50 TJm\n(re) 7.7409 Tj\n72 414.263 Td\n(not) 12.7322 Tj\n-279 TJm\n(using) 21.589 Tj\n-279 TJm\n(GNU) 21.579 Tj\n-279 TJm\n(C,) 9.1357 Tj\n-279 TJm\n(your) 18.2614 Tj\n-279 TJm\n(C) 6.6451 Tj\n-279 TJm\n(compiler) 35.417 Tj\n-279 TJm\n(shouldn') 34.8691 Tj\n18 TJm\n(t) 2.7696 Tj\n-279 TJm\n(see) 12.7222 Tj\n-279 TJm\n(them) 19.9252 Tj\n-279 TJm\n(at) 7.193 Tj\n-279 TJm\n(all.) 12.4533 Tj\n-794 TJm\n(If) 6.6351 Tj\n-279 TJm\n(your) 18.2614 Tj\n-279 TJm\n(compiler) 35.417 Tj\n-279 TJm\n(does,) 20.7521 Tj\n-286 TJm\n(for) 11.6164 Tj\n-279 TJm\n(some) 21.031 Tj\n-279 TJm\n(reason,) 28.493 Tj\n-287 TJm\n(see) 12.7222 Tj\n-279 TJm\n(them) 19.9252 Tj\n-279 TJm\n(and) 14.386 Tj\n72 402.308 Td\n(doesn') 26.5603 Tj\n18 TJm\n(t) 2.7696 Tj\n-283 TJm\n(lik) 10.5205 Tj\n10 TJm\n(e) 4.4234 Tj\n-283 TJm\n(them,) 22.4159 Tj\n-291 TJm\n(just) 14.396 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n164.167 402.308 Td\n/F124_0 9.9626 Tf\n(#define) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-283 TJm\n(__inline__) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n271.425 402.308 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-283 TJm\n(be) 9.4047 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n294.22 402.308 Td\n/F124_0 9.9626 Tf\n(/) 5.9776 Tj\n300.197 400.565 Td\n(*) 5.9776 Tj\n-600 TJm\n(*) 5.9776 Tj\n318.13 402.308 Td\n(/) 5.9776 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n324.108 402.308 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-818 TJm\n(One) 16.5977 Tj\n-283 TJm\n(easy) 17.7035 Tj\n-283 TJm\n(w) 7.193 Tj\n10 TJm\n(ay) 9.4047 Tj\n-283 TJm\n(to) 7.7509 Tj\n-283 TJm\n(do) 9.9626 Tj\n-283 TJm\n(this) 14.396 Tj\n-283 TJm\n(is) 6.6451 Tj\n-283 TJm\n(to) 7.7509 Tj\n-283 TJm\n(compile) 32.0995 Tj\n-283 TJm\n(with) 17.7135 Tj\n-283 TJm\n(the) 12.1743 Tj\n-283 TJm\n(\\003ag) 14.9439 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 390.353 Td\n/F124_0 9.9626 Tf\n(-D__inline__=) 77.7083 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n149.709 390.353 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-250 TJm\n(which) 24.3486 Tj\n-250 TJm\n(should) 26.5703 Tj\n-250 TJm\n(be) 9.4047 Tj\n-250 TJm\n(understood) 44.2738 Tj\n-250 TJm\n(by) 9.9626 Tj\n-250 TJm\n(most) 19.3773 Tj\n-250 TJm\n(Unix) 19.9252 Tj\n-250 TJm\n(compilers.) 41.7831 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 368.435 Td\n(If) 6.6351 Tj\n-321 TJm\n(you) 14.9439 Tj\n-321 TJm\n(still) 14.9539 Tj\n-322 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-321 TJm\n(dif) 11.0684 Tj\n25 TJm\n(\\002culties,) 34.0422 Tj\n-339 TJm\n(try) 11.0684 Tj\n-321 TJm\n(compiling) 40.4083 Tj\n-321 TJm\n(with) 17.7135 Tj\n-322 TJm\n(t) 2.7696 Tj\n1 TJm\n(he) 9.4047 Tj\n-322 TJm\n(macro) 24.8965 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n310.295 368.435 Td\n/F124_0 9.9626 Tf\n(BZ_STRICT_ANSI) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n397.181 368.435 Td\n/F122_0 9.9626 Tf\n(de\\002ned.) 31.8205 Tj\n-524 TJm\n(This) 17.7135 Tj\n-321 TJm\n(should) 26.5703 Tj\n-321 TJm\n(enable) 26.0024 Tj\n-321 TJm\n(you) 14.9439 Tj\n-322 TJm\n(to) 7.7509 Tj\n72 356.48 Td\n(b) 4.9813 Tj\n20 TJm\n(uild) 15.5018 Tj\n-321 TJm\n(the) 12.1743 Tj\n-321 TJm\n(library) 26.5603 Tj\n-322 TJm\n(in) 7.7509 Tj\n-321 TJm\n(a) 4.4234 Tj\n-321 TJm\n(strictly) 27.6761 Tj\n-321 TJm\n(ANSI) 23.2427 Tj\n-321 TJm\n(compliant) 39.8504 Tj\n-322 TJm\n(en) 9.4047 Tj\n40 TJm\n(vironment.) 43.4469 Tj\n-1047 TJm\n(Building) 34.8791 Tj\n-321 TJm\n(the) 12.1743 Tj\n-321 TJm\n(program) 33.7533 Tj\n-322 TJm\n(itself) 19.9252 Tj\n-321 TJm\n(lik) 10.5205 Tj\n10 TJm\n(e) 4.4234 Tj\n-321 TJm\n(this) 14.396 Tj\n-321 TJm\n(is) 6.6451 Tj\n-321 TJm\n(dangerous) 40.9463 Tj\n-322 TJm\n(and) 14.386 Tj\n72 344.525 Td\n(not) 12.7322 Tj\n-260 TJm\n(supported,) 41.7831 Tj\n-263 TJm\n(since) 20.4731 Tj\n-260 TJm\n(you) 14.9439 Tj\n-260 TJm\n(remo) 20.4731 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n204.498 344.525 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n234.386 344.525 Td\n/F122_0 9.9626 Tf\n(') 3.3175 Tj\n55 TJm\n(s) 3.8755 Tj\n-260 TJm\n(checks) 27.1082 Tj\n-260 TJm\n(ag) 9.4047 Tj\n5 TJm\n(ainst) 18.8194 Tj\n-260 TJm\n(compressing) 50.3609 Tj\n-261 TJm\n(directories,) 44.5428 Tj\n-262 TJm\n(symbolic) 36.5329 Tj\n-261 TJm\n(li) 5.5392 Tj\n1 TJm\n(nks,) 16.3287 Tj\n-263 TJm\n(de) 9.4047 Tj\n25 TJm\n(vices,) 22.9638 Tj\n-263 TJm\n(and) 14.386 Tj\n-260 TJm\n(other) 20.4731 Tj\n72 332.57 Td\n(not-really-a-\\002le) 62.5253 Tj\n-250 TJm\n(entities.) 31.2726 Tj\n-620 TJm\n(This) 17.7135 Tj\n-250 TJm\n(could) 22.1369 Tj\n-250 TJm\n(cause) 22.1269 Tj\n-250 TJm\n(\\002lesystem) 40.4083 Tj\n-250 TJm\n(corruption!) 44.8217 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 310.652 Td\n(One) 16.5977 Tj\n-392 TJm\n(other) 20.4731 Tj\n-391 TJm\n(thing:) 23.2527 Tj\n-594 TJm\n(if) 6.0871 Tj\n-391 TJm\n(you) 14.9439 Tj\n-392 TJm\n(create) 23.7807 Tj\n-391 TJm\n(a) 4.4234 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n210.879 310.652 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n244.669 310.652 Td\n/F122_0 9.9626 Tf\n(binary) 25.4544 Tj\n-392 TJm\n(for) 11.6164 Tj\n-391 TJm\n(public) 24.9065 Tj\n-392 TJm\n(distrib) 25.4644 Tj\n20 TJm\n(ution,) 22.9738 Tj\n-427 TJm\n(please) 24.8965 Tj\n-392 TJm\n(consider) 33.7533 Tj\n-391 TJm\n(linking) 28.234 Tj\n-392 TJm\n(it) 5.5392 Tj\n-391 TJm\n(statically) 35.9749 Tj\n-392 TJm\n(\\() 3.3175 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n522.067 310.652 Td\n/F124_0 9.9626 Tf\n(gcc) 17.9327 Tj\n72 298.697 Td\n(-static) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n113.843 298.697 Td\n/F122_0 9.9626 Tf\n(\\).) 5.8082 Tj\n-620 TJm\n(This) 17.7135 Tj\n-250 TJm\n(a) 4.4234 Tj\n20 TJm\n(v) 4.9813 Tj\n20 TJm\n(oids) 16.6077 Tj\n-250 TJm\n(all) 9.9626 Tj\n-250 TJm\n(sorts) 18.8194 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(library-v) 34.8591 Tj\n15 TJm\n(ersion) 24.3486 Tj\n-250 TJm\n(issues) 23.8007 Tj\n-250 TJm\n(that) 14.9439 Tj\n-250 TJm\n(others) 24.3486 Tj\n-250 TJm\n(may) 17.1556 Tj\n-250 TJm\n(encounter) 39.2825 Tj\n-250 TJm\n(later) 17.7035 Tj\n-250 TJm\n(on.) 12.4533 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 276.779 Td\n(If) 6.6351 Tj\n-296 TJm\n(you) 14.9439 Tj\n-296 TJm\n(b) 4.9813 Tj\n20 TJm\n(uild) 15.5018 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n122.708 276.779 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n155.545 276.779 Td\n/F122_0 9.9626 Tf\n(on) 9.9626 Tj\n-296 TJm\n(W) 9.4047 Tj\n40 TJm\n(in32,) 20.2042 Tj\n-307 TJm\n(you) 14.9439 Tj\n-296 TJm\n(must) 19.3773 Tj\n-296 TJm\n(set) 11.0684 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n254.965 276.779 Td\n/F124_0 9.9626 Tf\n(BZ_UNIX) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n299.756 276.779 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-296 TJm\n(0) 4.9813 Tj\n-296 TJm\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n335.72 276.779 Td\n/F124_0 9.9626 Tf\n(BZ_LCCWIN32) 65.7532 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n404.422 276.779 Td\n/F122_0 9.9626 Tf\n(to) 7.7509 Tj\n-296 TJm\n(1,) 7.472 Tj\n-307 TJm\n(in) 7.7509 Tj\n-296 TJm\n(the) 12.1743 Tj\n-296 TJm\n(\\002le) 12.7322 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n467.159 276.779 Td\n/F124_0 9.9626 Tf\n(bzip2.c) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n509.002 276.779 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-307 TJm\n(before) 25.4445 Tj\n72 264.824 Td\n(compiling.) 42.899 Tj\n-310 TJm\n(Otherwise) 40.9463 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(resulting) 34.8691 Tj\n-250 TJm\n(binary) 25.4544 Tj\n-250 TJm\n(w) 7.193 Tj\n10 TJm\n(on') 13.2801 Tj\n18 TJm\n(t) 2.7696 Tj\n-250 TJm\n(w) 7.193 Tj\n10 TJm\n(ork) 13.2801 Tj\n-250 TJm\n(correctly) 35.4071 Tj\n65 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 230.071 Td\n/F116_0 20.6585 Tf\n(4.3.) 34.4584 Tj\n-278 TJm\n(Repor) 59.6824 Tj\n-20 TJm\n(ting) 37.867 Tj\n-278 TJm\n(b) 12.6223 Tj\n20 TJm\n(ugs) 36.7308 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 208.153 Td\n/F122_0 9.9626 Tf\n(I) 3.3175 Tj\n-228 TJm\n(tried) 18.2614 Tj\n-228 TJm\n(pretty) 23.2427 Tj\n-228 TJm\n(hard) 17.7035 Tj\n-228 TJm\n(to) 7.7509 Tj\n-228 TJm\n(mak) 17.1556 Tj\n10 TJm\n(e) 4.4234 Tj\n-228 TJm\n(sure) 16.5977 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n196.25 208.153 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n228.409 208.153 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-228 TJm\n(b) 4.9813 Tj\n20 TJm\n(ug) 9.9626 Tj\n-228 TJm\n(free,) 17.9725 Tj\n-232 TJm\n(both) 17.7135 Tj\n-228 TJm\n(by) 9.9626 Tj\n-228 TJm\n(design) 26.0123 Tj\n-228 TJm\n(and) 14.386 Tj\n-228 TJm\n(by) 9.9626 Tj\n-228 TJm\n(testing.) 29.0609 Tj\n-605 TJm\n(Hopefully) 40.3983 Tj\n-228 TJm\n(you') 18.2614 Tj\n10 TJm\n(ll) 5.5392 Tj\n-228 TJm\n(ne) 9.4047 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(er) 7.7409 Tj\n-228 TJm\n(need) 18.8094 Tj\n-228 TJm\n(to) 7.7509 Tj\n-228 TJm\n(read) 17.1456 Tj\n72 196.198 Td\n(this) 14.396 Tj\n-250 TJm\n(section) 28.224 Tj\n-250 TJm\n(for) 11.6164 Tj\n-250 TJm\n(real.) 17.4246 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 174.28 Td\n(Ne) 11.6164 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(ertheless,) 37.3498 Tj\n-313 TJm\n(if) 6.0871 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n137.751 174.28 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n170.634 174.28 Td\n/F122_0 9.9626 Tf\n(dies) 16.0497 Tj\n-301 TJm\n(with) 17.7135 Tj\n-300 TJm\n(a) 4.4234 Tj\n-301 TJm\n(se) 8.2988 Tj\n15 TJm\n(gmentation) 44.8317 Tj\n-300 TJm\n(f) 3.3175 Tj\n10 TJm\n(ault,) 17.4346 Tj\n-314 TJm\n(a) 4.4234 Tj\n-300 TJm\n(b) 4.9813 Tj\n20 TJm\n(us) 8.8568 Tj\n-301 TJm\n(error) 19.3573 Tj\n-300 TJm\n(or) 8.2988 Tj\n-301 TJm\n(an) 9.4047 Tj\n-301 TJm\n(internal) 30.4357 Tj\n-300 TJm\n(assertion) 35.417 Tj\n-301 TJm\n(f) 3.3175 Tj\n10 TJm\n(ailure,) 25.1755 Tj\n-313 TJm\n(it) 5.5392 Tj\n-301 TJm\n(wil) 12.7322 Tj\n1 TJm\n(l) 2.7696 Tj\n-301 TJm\n(ask) 13.2801 Tj\n-301 TJm\n(you) 14.9439 Tj\n-300 TJm\n(to) 7.7509 Tj\n72 162.325 Td\n(email) 22.1369 Tj\n-242 TJm\n(me) 12.1743 Tj\n-243 TJm\n(a) 4.4234 Tj\n-242 TJm\n(b) 4.9813 Tj\n20 TJm\n(ug) 9.9626 Tj\n-243 TJm\n(report.) 26.2813 Tj\n-615 TJm\n(Experience) 44.8118 Tj\n-242 TJm\n(from) 19.3673 Tj\n-243 TJm\n(years) 21.0211 Tj\n-242 TJm\n(of) 8.2988 Tj\n-242 TJm\n(feedback) 35.955 Tj\n-243 TJm\n(of) 8.2988 Tj\n-242 TJm\n(bzip2) 22.1369 Tj\n-243 TJm\n(users) 20.4731 Tj\n-242 TJm\n(indicates) 35.417 Tj\n-243 TJm\n(that) 14.9439 Tj\n-242 TJm\n(almost) 26.5703 Tj\n-242 TJm\n(all) 9.9626 Tj\n-243 TJm\n(these) 20.4731 Tj\n-242 TJm\n(problems) 37.0808 Tj\n-243 TJm\n(can) 13.8281 Tj\n72 150.37 Td\n(be) 9.4047 Tj\n-250 TJm\n(traced) 24.3386 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(either) 22.6848 Tj\n-250 TJm\n(compiler) 35.417 Tj\n-250 TJm\n(b) 4.9813 Tj\n20 TJm\n(ugs) 13.8381 Tj\n-250 TJm\n(or) 8.2988 Tj\n-250 TJm\n(hardw) 24.8965 Tj\n10 TJm\n(are) 12.1643 Tj\n-250 TJm\n(problems.) 39.5714 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 50.951 Td\n(32) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 33 36\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n498.728 749.245 Td\n/F122_0 9.9626 Tf\n(Miscellanea) 48.1393 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n74.491 710.037 Td\n/F122_0 9.9626 Tf\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-450 TJm\n(Recompile) 43.1679 Tj\n-322 TJm\n(the) 12.1743 Tj\n-322 TJm\n(program) 33.7533 Tj\n-322 TJm\n(with) 17.7135 Tj\n-322 TJm\n(no) 9.9626 Tj\n-322 TJm\n(optimisat) 37.0908 Tj\n1 TJm\n(ion,) 15.2229 Tj\n-340 TJm\n(and) 14.386 Tj\n-322 TJm\n(see) 12.7222 Tj\n-322 TJm\n(if) 6.0871 Tj\n-322 TJm\n(it) 5.5392 Tj\n-322 TJm\n(w) 7.193 Tj\n10 TJm\n(orks.) 19.6462 Tj\n-1052 TJm\n(And/or) 28.224 Tj\n-322 TJm\n(try) 11.0684 Tj\n-322 TJm\n(a) 4.4234 Tj\n-321 TJm\n(dif) 11.0684 Tj\n25 TJm\n(ferent) 23.2328 Tj\n-322 TJm\n(compiler) 35.417 Tj\n55 TJm\n(.) 2.4907 Tj\n-1052 TJm\n(I) 3.3175 Tj\n-322 TJm\n(heard) 22.1269 Tj\n-322 TJm\n(all) 9.9626 Tj\n81.963 698.082 Td\n(sorts) 18.8194 Tj\n-309 TJm\n(of) 8.2988 Tj\n-310 TJm\n(stories) 26.0123 Tj\n-310 TJm\n(about) 22.1369 Tj\n-309 TJm\n(v) 4.9813 Tj\n25 TJm\n(arious) 24.3486 Tj\n-310 TJm\n(\\003a) 9.9626 Tj\n20 TJm\n(v) 4.9813 Tj\n20 TJm\n(ours) 17.1556 Tj\n-309 TJm\n(of) 8.2988 Tj\n-310 TJm\n(GNU) 21.579 Tj\n-309 TJm\n(C) 6.6451 Tj\n-310 TJm\n(\\(and) 17.7035 Tj\n-309 TJm\n(other) 20.4731 Tj\n-310 TJm\n(compilers\\)) 42.61 Tj\n-309 TJm\n(generating) 42.0521 Tj\n-310 TJm\n(bad) 14.386 Tj\n-310 TJm\n(code) 18.8094 Tj\n-309 TJm\n(for) 11.6164 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n471.527 698.082 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n501.415 698.082 Td\n/F122_0 9.9626 Tf\n(,) 2.4907 Tj\n-324 TJm\n(and) 14.386 Tj\n-310 TJm\n(I') 6.6351 Tj\n50 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n81.963 686.127 Td\n(run) 13.2801 Tj\n-250 TJm\n(across) 24.8965 Tj\n-250 TJm\n(tw) 9.9626 Tj\n10 TJm\n(o) 4.9813 Tj\n-250 TJm\n(such) 18.2614 Tj\n-250 TJm\n(e) 4.4234 Tj\n15 TJm\n(xamples) 33.2053 Tj\n-250 TJm\n(myself.) 29.6088 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n81.963 664.209 Td\n(2.7.X) 22.1369 Tj\n-299 TJm\n(v) 4.9813 Tj\n15 TJm\n(ersions) 28.224 Tj\n-300 TJm\n(of) 8.2988 Tj\n-299 TJm\n(GNU) 21.579 Tj\n-299 TJm\n(C) 6.6451 Tj\n-300 TJm\n(are) 12.1643 Tj\n-299 TJm\n(kno) 14.9439 Tj\n25 TJm\n(wn) 12.1743 Tj\n-300 TJm\n(to) 7.7509 Tj\n-299 TJm\n(generate) 33.7433 Tj\n-299 TJm\n(bad) 14.386 Tj\n-300 TJm\n(code) 18.8094 Tj\n-299 TJm\n(from) 19.3673 Tj\n-299 TJm\n(time) 17.7135 Tj\n-300 TJm\n(to) 7.7509 Tj\n-299 TJm\n(time,) 20.2042 Tj\n-312 TJm\n(at) 7.193 Tj\n-299 TJm\n(high) 17.7135 Tj\n-300 TJm\n(optimisation) 49.823 Tj\n-299 TJm\n(le) 7.193 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(els.) 13.5591 Tj\n-916 TJm\n(If) 6.6351 Tj\n-300 TJm\n(you) 14.9439 Tj\n81.963 652.254 Td\n(get) 12.1743 Tj\n-328 TJm\n(problems,) 39.5714 Tj\n-348 TJm\n(try) 11.0684 Tj\n-328 TJm\n(using) 21.589 Tj\n-329 TJm\n(the) 12.1743 Tj\n-328 TJm\n(\\003ags) 18.8194 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n217.176 652.254 Td\n/F124_0 9.9626 Tf\n(-O2) 17.9327 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-328 TJm\n(-fomit-frame-pointer) 119.5512 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-329 TJm\n(-fno-strength-reduce) 119.5512 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n480.753 652.254 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-1090 TJm\n(Y) 7.193 Tj\n110 TJm\n(ou) 9.9626 Tj\n-328 TJm\n(should) 26.5703 Tj\n81.963 640.299 Td\n(speci\\002cally) 45.3796 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n129.832 640.299 Td\n/F621_0 9.9626 Tf\n(not) 12.7322 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n145.055 640.299 Td\n/F122_0 9.9626 Tf\n(use) 13.2801 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n160.826 640.299 Td\n/F124_0 9.9626 Tf\n(-funroll-loops) 83.6858 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n244.512 640.299 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n81.963 618.381 Td\n(Y) 7.193 Tj\n110 TJm\n(ou) 9.9626 Tj\n-240 TJm\n(may) 17.1556 Tj\n-240 TJm\n(notice) 24.3486 Tj\n-241 TJm\n(that) 14.9439 Tj\n-240 TJm\n(the) 12.1743 Tj\n-240 TJm\n(Mak) 18.2614 Tj\n10 TJm\n(e\\002le) 17.1556 Tj\n-240 TJm\n(runs) 17.1556 Tj\n-240 TJm\n(six) 11.6264 Tj\n-241 TJm\n(tests) 17.7135 Tj\n-240 TJm\n(as) 8.2988 Tj\n-240 TJm\n(part) 15.4918 Tj\n-240 TJm\n(of) 8.2988 Tj\n-240 TJm\n(the) 12.1743 Tj\n-241 TJm\n(b) 4.9813 Tj\n20 TJm\n(uild) 15.5018 Tj\n-240 TJm\n(process.) 32.3685 Tj\n-613 TJm\n(If) 6.6351 Tj\n-240 TJm\n(the) 12.1743 Tj\n-241 TJm\n(program) 33.7533 Tj\n-240 TJm\n(passes) 25.4544 Tj\n-240 TJm\n(all) 9.9626 Tj\n-240 TJm\n(of) 8.2988 Tj\n-240 TJm\n(these,) 22.9638 Tj\n-242 TJm\n(it') 8.8568 Tj\n55 TJm\n(s) 3.8755 Tj\n-241 TJm\n(a) 4.4234 Tj\n81.963 606.426 Td\n(pretty) 23.2427 Tj\n-250 TJm\n(good) 19.9252 Tj\n-250 TJm\n(\\(b) 8.2988 Tj\n20 TJm\n(ut) 7.7509 Tj\n-250 TJm\n(not) 12.7322 Tj\n-250 TJm\n(100%\\)) 26.5603 Tj\n-250 TJm\n(indication) 39.8504 Tj\n-250 TJm\n(that) 14.9439 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(compiler) 35.417 Tj\n-250 TJm\n(has) 13.2801 Tj\n-250 TJm\n(done) 19.3673 Tj\n-250 TJm\n(its) 9.4147 Tj\n-250 TJm\n(job) 12.7322 Tj\n-250 TJm\n(correctly) 35.4071 Tj\n65 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 584.508 Td\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-450 TJm\n(If) 6.6351 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n91.723 584.508 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n124.239 584.508 Td\n/F122_0 9.9626 Tf\n(crashes) 29.3199 Tj\n-264 TJm\n(randomly) 38.1866 Tj\n65 TJm\n(,) 2.4907 Tj\n-267 TJm\n(and) 14.386 Tj\n-264 TJm\n(the) 12.1743 Tj\n-263 TJm\n(crashes) 29.3199 Tj\n-264 TJm\n(are) 12.1643 Tj\n-264 TJm\n(not) 12.7322 Tj\n-263 TJm\n(repeatable,) 43.427 Tj\n-268 TJm\n(you) 14.9439 Tj\n-263 TJm\n(may) 17.1556 Tj\n-264 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-264 TJm\n(a) 4.4234 Tj\n-264 TJm\n(\\003ak) 14.9439 Tj\n15 TJm\n(y) 4.9813 Tj\n-263 TJm\n(memory) 33.2053 Tj\n-264 TJm\n(subsystem.) 44.0048 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n510.112 584.508 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n81.963 572.553 Td\n/F122_0 9.9626 Tf\n(really) 22.6848 Tj\n-274 TJm\n(hammers) 36.5229 Tj\n-274 TJm\n(your) 18.2614 Tj\n-274 TJm\n(memory) 33.2053 Tj\n-274 TJm\n(hierarch) 32.6375 Tj\n5 TJm\n(y) 4.9813 Tj\n65 TJm\n(,) 2.4907 Tj\n-280 TJm\n(and) 14.386 Tj\n-274 TJm\n(if) 6.0871 Tj\n-274 TJm\n(it') 8.8568 Tj\n55 TJm\n(s) 3.8755 Tj\n-274 TJm\n(a) 4.4234 Tj\n-274 TJm\n(bit) 10.5205 Tj\n-274 TJm\n(mar) 15.4918 Tj\n18 TJm\n(ginal,) 22.4159 Tj\n-280 TJm\n(you) 14.9439 Tj\n-274 TJm\n(may) 17.1556 Tj\n-274 TJm\n(get) 12.1743 Tj\n-274 TJm\n(these) 20.4731 Tj\n-274 TJm\n(problems.) 39.5714 Tj\n-764 TJm\n(Ditto) 20.4831 Tj\n-274 TJm\n(if) 6.0871 Tj\n-274 TJm\n(your) 18.2614 Tj\n-274 TJm\n(disk) 16.6077 Tj\n81.963 560.598 Td\n(or) 8.2988 Tj\n-250 TJm\n(I/O) 13.2801 Tj\n-250 TJm\n(subsystem) 41.5142 Tj\n-250 TJm\n(is) 6.6451 Tj\n-250 TJm\n(slo) 11.6264 Tj\n25 TJm\n(wly) 14.9439 Tj\n-250 TJm\n(f) 3.3175 Tj\n10 TJm\n(ailing.) 25.1855 Tj\n-620 TJm\n(Y) 7.193 Tj\n111 TJm\n(up,) 12.4533 Tj\n-250 TJm\n(this) 14.396 Tj\n-250 TJm\n(really) 22.6848 Tj\n-250 TJm\n(does) 18.2614 Tj\n-250 TJm\n(happen.) 31.2626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n81.963 538.68 Td\n(T) 6.0871 Tj\n35 TJm\n(ry) 8.2988 Tj\n-250 TJm\n(using) 21.589 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(dif) 11.0684 Tj\n25 TJm\n(ferent) 23.2328 Tj\n-250 TJm\n(machine) 33.7533 Tj\n-250 TJm\n(of) 8.2988 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(same) 20.4731 Tj\n-250 TJm\n(type,) 19.6462 Tj\n-250 TJm\n(and) 14.386 Tj\n-250 TJm\n(see) 12.7222 Tj\n-250 TJm\n(if) 6.0871 Tj\n-250 TJm\n(you) 14.9439 Tj\n-250 TJm\n(can) 13.8281 Tj\n-250 TJm\n(repeat) 24.3386 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(problem.) 35.696 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n74.491 516.762 Td\n(\\225) 3.4869 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n-450 TJm\n(This) 17.7135 Tj\n-252 TJm\n(isn') 14.9439 Tj\n18 TJm\n(t) 2.7696 Tj\n-251 TJm\n(really) 22.6848 Tj\n-252 TJm\n(a) 4.4234 Tj\n-252 TJm\n(b) 4.9813 Tj\n20 TJm\n(ug,) 12.4533 Tj\n-252 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-251 TJm\n(...) 7.472 Tj\n-315 TJm\n(If) 6.6351 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n209.383 516.762 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n241.778 516.762 Td\n/F122_0 9.9626 Tf\n(tells) 16.6077 Tj\n-252 TJm\n(you) 14.9439 Tj\n-251 TJm\n(your) 18.2614 Tj\n-252 TJm\n(\\002le) 12.7322 Tj\n-252 TJm\n(is) 6.6451 Tj\n-251 TJm\n(corrupted) 38.1767 Tj\n-252 TJm\n(on) 9.9626 Tj\n-252 TJm\n(decompression,) 62.2563 Tj\n-252 TJm\n(and) 14.386 Tj\n-251 TJm\n(you) 14.9439 Tj\n-252 TJm\n(obtained) 34.3112 Tj\n-252 TJm\n(the) 12.1743 Tj\n-251 TJm\n(\\002le) 12.7322 Tj\n81.963 504.807 Td\n(via) 12.1743 Tj\n-281 TJm\n(FTP) 17.1656 Tj\n111 TJm\n(,) 2.4907 Tj\n-282 TJm\n(there) 19.9152 Tj\n-282 TJm\n(is) 6.6451 Tj\n-281 TJm\n(a) 4.4234 Tj\n-282 TJm\n(possibility) 41.5241 Tj\n-281 TJm\n(that) 14.9439 Tj\n-282 TJm\n(you) 14.9439 Tj\n-281 TJm\n(for) 11.6164 Tj\n18 TJm\n(got) 12.7322 Tj\n-282 TJm\n(to) 7.7509 Tj\n-281 TJm\n(tell) 12.7322 Tj\n-282 TJm\n(FTP) 17.1656 Tj\n-281 TJm\n(to) 7.7509 Tj\n-282 TJm\n(do) 9.9626 Tj\n-281 TJm\n(a) 4.4234 Tj\n-282 TJm\n(binary) 25.4544 Tj\n-281 TJm\n(mode) 22.1369 Tj\n-282 TJm\n(transfer) 30.4258 Tj\n55 TJm\n(.) 2.4907 Tj\n-809 TJm\n(That) 18.2614 Tj\n-282 TJm\n(absolutely) 40.9562 Tj\n-281 TJm\n(will) 15.5018 Tj\n-282 TJm\n(cause) 22.1269 Tj\n81.963 492.852 Td\n(the) 12.1743 Tj\n-250 TJm\n(\\002le) 12.7322 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(be) 9.4047 Tj\n-250 TJm\n(non-decompressible.) 82.7294 Tj\n-620 TJm\n(Y) 7.193 Tj\n110 TJm\n(ou') 13.2801 Tj\n10 TJm\n(ll) 5.5392 Tj\n-250 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(transfer) 30.4258 Tj\n-250 TJm\n(it) 5.5392 Tj\n-250 TJm\n(ag) 9.4047 Tj\n5 TJm\n(ain.) 14.6649 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 470.934 Td\n(If) 6.6351 Tj\n-235 TJm\n(you') 18.2614 Tj\n50 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-236 TJm\n(inc) 12.1743 Tj\n1 TJm\n(o) 4.9813 Tj\n-1 TJm\n(r) 3.3175 Tj\n1 TJm\n(po) 9.9626 Tj\n-1 TJm\n(r) 3.3175 Tj\n1 TJm\n(ated) 16.5977 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n163.036 470.934 Td\n/F124_0 9.9626 Tf\n(libbzip2) 47.8205 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n213.2 470.934 Td\n/F122_0 9.9626 Tf\n(into) 15.5018 Tj\n-235 TJm\n(your) 18.2614 Tj\n-236 TJm\n(o) 4.9813 Tj\n25 TJm\n(wn) 12.1743 Tj\n-235 TJm\n(program) 33.7533 Tj\n-235 TJm\n(and) 14.386 Tj\n-235 TJm\n(are) 12.1643 Tj\n-236 TJm\n(gett) 14.9439 Tj\n1 TJm\n(ing) 12.7322 Tj\n-236 TJm\n(problems,) 39.5714 Tj\n-238 TJm\n(please,) 27.3872 Tj\n-238 TJm\n(please,) 27.3872 Tj\n-238 TJm\n(please,) 27.3872 Tj\n-238 TJm\n(check) 23.2328 Tj\n-236 TJm\n(that) 14.9439 Tj\n72 458.979 Td\n(the) 12.1743 Tj\n-242 TJm\n(parameters) 43.7059 Tj\n-243 TJm\n(you) 14.9439 Tj\n-242 TJm\n(are) 12.1643 Tj\n-242 TJm\n(passing) 29.8878 Tj\n-243 TJm\n(in) 7.7509 Tj\n-242 TJm\n(calls) 18.2614 Tj\n-242 TJm\n(to) 7.7509 Tj\n-243 TJm\n(the) 12.1743 Tj\n-242 TJm\n(library) 26.5603 Tj\n65 TJm\n(,) 2.4907 Tj\n-244 TJm\n(are) 12.1643 Tj\n-242 TJm\n(correct,) 30.1468 Tj\n-244 TJm\n(and) 14.386 Tj\n-243 TJm\n(in) 7.7509 Tj\n-242 TJm\n(accordance) 44.8018 Tj\n-242 TJm\n(with) 17.7135 Tj\n-243 TJm\n(what) 19.3673 Tj\n-242 TJm\n(the) 12.1743 Tj\n-242 TJm\n(documentation) 59.2177 Tj\n-243 TJm\n(says) 17.1556 Tj\n72 447.024 Td\n(is) 6.6451 Tj\n-250 TJm\n(allo) 14.9439 Tj\n25 TJm\n(w) 7.193 Tj\n10 TJm\n(able.) 19.0883 Tj\n-310 TJm\n(I) 3.3175 Tj\n-250 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-250 TJm\n(tried) 18.2614 Tj\n-250 TJm\n(to) 7.7509 Tj\n-250 TJm\n(mak) 17.1556 Tj\n10 TJm\n(e) 4.4234 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(library) 26.5603 Tj\n-250 TJm\n(rob) 13.2801 Tj\n20 TJm\n(ust) 11.6264 Tj\n-250 TJm\n(ag) 9.4047 Tj\n5 TJm\n(ainst) 18.8194 Tj\n-250 TJm\n(such) 18.2614 Tj\n-250 TJm\n(problems,) 39.5714 Tj\n-250 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-250 TJm\n(I'm) 14.386 Tj\n-250 TJm\n(sure) 16.5977 Tj\n-250 TJm\n(I) 3.3175 Tj\n-250 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(en') 12.7222 Tj\n18 TJm\n(t) 2.7696 Tj\n-250 TJm\n(succeeded.) 43.427 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 425.106 Td\n(Finally) 28.234 Tj\n65 TJm\n(,) 2.4907 Tj\n-324 TJm\n(if) 6.0871 Tj\n-310 TJm\n(the) 12.1743 Tj\n-309 TJm\n(abo) 14.386 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-309 TJm\n(comments) 40.9562 Tj\n-310 TJm\n(don') 18.2614 Tj\n18 TJm\n(t) 2.7696 Tj\n-309 TJm\n(help,) 19.6462 Tj\n-324 TJm\n(you') 18.2614 Tj\n10 TJm\n(ll) 5.5392 Tj\n-310 TJm\n(ha) 9.4047 Tj\n20 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-309 TJm\n(to) 7.7509 Tj\n-309 TJm\n(send) 18.2614 Tj\n-310 TJm\n(me) 12.1743 Tj\n-309 TJm\n(a) 4.4234 Tj\n-309 TJm\n(b) 4.9813 Tj\n20 TJm\n(ug) 9.9626 Tj\n-310 TJm\n(report.) 26.2813 Tj\n-976 TJm\n(No) 12.1743 Tj\n25 TJm\n(w) 7.193 Tj\n65 TJm\n(,) 2.4907 Tj\n-324 TJm\n(it') 8.8568 Tj\n55 TJm\n(s) 3.8755 Tj\n-310 TJm\n(just) 14.396 Tj\n-309 TJm\n(amazing) 33.7533 Tj\n-309 TJm\n(ho) 9.9626 Tj\n25 TJm\n(w) 7.193 Tj\n-310 TJm\n(man) 17.1556 Tj\n15 TJm\n(y) 4.9813 Tj\n72 413.151 Td\n(people) 26.5603 Tj\n-250 TJm\n(will) 15.5018 Tj\n-250 TJm\n(send) 18.2614 Tj\n-250 TJm\n(me) 12.1743 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(b) 4.9813 Tj\n20 TJm\n(ug) 9.9626 Tj\n-250 TJm\n(report) 23.7907 Tj\n-250 TJm\n(saying) 26.0123 Tj\n-250 TJm\n(something) 41.5142 Tj\n-250 TJm\n(lik) 10.5205 Tj\n10 TJm\n(e:) 7.193 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 386.087] cm\n0 0 468 23.91 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 401.629 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n-426 TJm\n(crashed) 41.8429 Tj\n-426 TJm\n(with) 23.9102 Tj\n-426 TJm\n(segmentation) 71.7307 Tj\n-426 TJm\n(fault) 29.8878 Tj\n-426 TJm\n(on) 11.9551 Tj\n-426 TJm\n(my) 11.9551 Tj\n-426 TJm\n(machine) 41.8429 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 364.169 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n-241 TJm\n(absolutely) 40.9562 Tj\n-241 TJm\n(nothing) 30.4457 Tj\n-241 TJm\n(el) 7.193 Tj\n1 TJm\n(se.) 10.7895 Tj\n-614 TJm\n(Needless) 35.965 Tj\n-241 TJm\n(to) 7.7509 Tj\n-241 TJm\n(say) 13.2801 Tj\n65 TJm\n(,) 2.4907 Tj\n-243 TJm\n(a) 4.4234 Tj\n-241 TJm\n(such) 18.2614 Tj\n-240 TJm\n(a) 4.4234 Tj\n-241 TJm\n(report) 23.7907 Tj\n-241 TJm\n(is) 6.6451 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n324.681 364.169 Td\n/F621_0 9.9626 Tf\n(totally) 25.4644 Tj\n55 TJm\n(,) 2.4907 Tj\n-243 TJm\n(utterly) 26.0123 Tj\n55 TJm\n(,) 2.4907 Tj\n-242 TJm\n(completely) 43.158 Tj\n-241 TJm\n(and) 14.9439 Tj\n-241 TJm\n(compr) 25.4544 Tj\n37 TJm\n(ehensively) 41.4942 Tj\n-241 TJm\n(100%) 23.2427 Tj\n72 352.214 Td\n(useless;) 31.5416 Tj\n-257 TJm\n(a) 4.9813 Tj\n-255 TJm\n(waste) 22.6948 Tj\n-255 TJm\n(of) 7.7509 Tj\n-255 TJm\n(your) 18.2614 Tj\n-255 TJm\n(time) 17.1556 Tj\n10 TJm\n(,) 2.4907 Tj\n-256 TJm\n(my) 11.6164 Tj\n-255 TJm\n(time) 17.1556 Tj\n10 TJm\n(,) 2.4907 Tj\n-256 TJm\n(and) 14.9439 Tj\n-255 TJm\n(net) 12.1743 Tj\n-255 TJm\n(bandwidth) 42.0721 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n302.574 352.214 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-650 TJm\n(W) 9.4047 Tj\n40 TJm\n(ith) 10.5205 Tj\n-254 TJm\n(no) 9.9626 Tj\n-255 TJm\n(details) 26.0123 Tj\n-255 TJm\n(at) 7.193 Tj\n-255 TJm\n(all,) 12.4533 Tj\n-256 TJm\n(there') 23.2328 Tj\n55 TJm\n(s) 3.8755 Tj\n-255 TJm\n(no) 9.9626 Tj\n-255 TJm\n(w) 7.193 Tj\n10 TJm\n(ay) 9.4047 Tj\n-255 TJm\n(I) 3.3175 Tj\n-255 TJm\n(can) 13.8281 Tj\n-255 TJm\n(possibly) 33.2153 Tj\n-255 TJm\n(be) 9.4047 Tj\n15 TJm\n(gin) 12.7322 Tj\n72 340.259 Td\n(to) 7.7509 Tj\n-250 TJm\n(\\002gure) 23.2427 Tj\n-250 TJm\n(out) 12.7322 Tj\n-250 TJm\n(what) 19.3673 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(problem) 33.2053 Tj\n-250 TJm\n(is.) 9.1357 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 318.341 Td\n(The) 15.4918 Tj\n-309 TJm\n(rules) 19.3673 Tj\n-309 TJm\n(of) 8.2988 Tj\n-309 TJm\n(the) 12.1743 Tj\n-310 TJm\n(g) 4.9813 Tj\n5 TJm\n(ame) 16.5977 Tj\n-309 TJm\n(are:) 14.9339 Tj\n-428 TJm\n(f) 3.3175 Tj\n10 TJm\n(acts,) 17.9825 Tj\n-324 TJm\n(f) 3.3175 Tj\n10 TJm\n(acts,) 17.9825 Tj\n-324 TJm\n(f) 3.3175 Tj\n10 TJm\n(acts.) 17.9825 Tj\n-975 TJm\n(Don') 20.4731 Tj\n18 TJm\n(t) 2.7696 Tj\n-309 TJm\n(omit) 18.2714 Tj\n-309 TJm\n(them) 19.9252 Tj\n-309 TJm\n(because) 31.5316 Tj\n-309 TJm\n(\"oh,) 16.518 Tj\n-324 TJm\n(the) 12.1743 Tj\n15 TJm\n(y) 4.9813 Tj\n-309 TJm\n(w) 7.193 Tj\n10 TJm\n(on') 13.2801 Tj\n18 TJm\n(t) 2.7696 Tj\n-309 TJm\n(be) 9.4047 Tj\n-310 TJm\n(rele) 14.9339 Tj\n25 TJm\n(v) 4.9813 Tj\n25 TJm\n(ant\".) 18.7297 Tj\n-974 TJm\n(At) 9.9626 Tj\n-310 TJm\n(the) 12.1743 Tj\n-309 TJm\n(bare) 17.1456 Tj\n72 306.386 Td\n(minimum:) 41.5241 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.949 0.949 0.9765] sc\n/DeviceRGB {} CS\n[0.949 0.949 0.9765] SC\nq\n[1 0 0 1 72 245.514] cm\n0 0 468 59.776 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 296.922 Td\n/F124_0 9.9626 Tf\n(Machine) 41.8429 Tj\n-426 TJm\n(type.) 29.8878 Tj\n-852 TJm\n(Operating) 53.798 Tj\n-426 TJm\n(system) 35.8654 Tj\n-426 TJm\n(version.) 47.8205 Tj\n90 284.967 Td\n(Exact) 29.8878 Tj\n-426 TJm\n(version) 41.8429 Tj\n-426 TJm\n(of) 11.9551 Tj\n-426 TJm\n(bzip2) 29.8878 Tj\n-426 TJm\n(\\(do) 17.9327 Tj\n-426 TJm\n(bzip2) 29.8878 Tj\n-426 TJm\n(-V\\).) 23.9102 Tj\n90 273.011 Td\n(Exact) 29.8878 Tj\n-426 TJm\n(version) 41.8429 Tj\n-426 TJm\n(of) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(compiler) 47.8205 Tj\n-426 TJm\n(used.) 29.8878 Tj\n90 261.056 Td\n(Flags) 29.8878 Tj\n-426 TJm\n(passed) 35.8654 Tj\n-426 TJm\n(to) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(compiler.) 53.798 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 223.597 Td\n/F122_0 9.9626 Tf\n(Ho) 12.1743 Tj\n25 TJm\n(we) 11.6164 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(er) 7.7409 Tj\n40 TJm\n(,) 2.4907 Tj\n-254 TJm\n(the) 12.1743 Tj\n-252 TJm\n(most) 19.3773 Tj\n-253 TJm\n(important) 38.7446 Tj\n-253 TJm\n(single) 23.8007 Tj\n-253 TJm\n(thing) 20.4831 Tj\n-253 TJm\n(t) 2.7696 Tj\n1 TJm\n(hat) 12.1743 Tj\n-253 TJm\n(will) 15.5018 Tj\n-253 TJm\n(help) 17.1556 Tj\n-253 TJm\n(me) 12.1743 Tj\n-253 TJm\n(is) 6.6451 Tj\n-252 TJm\n(the) 12.1743 Tj\n-253 TJm\n(\\002le) 12.7322 Tj\n-253 TJm\n(that) 14.9439 Tj\n-253 TJm\n(you) 14.9439 Tj\n-253 TJm\n(were) 19.3573 Tj\n-253 TJm\n(trying) 23.8007 Tj\n-252 TJm\n(to) 7.7509 Tj\n-253 TJm\n(compress) 37.6287 Tj\n-253 TJm\n(or) 8.2988 Tj\n-253 TJm\n(decompress) 47.0334 Tj\n72 211.641 Td\n(at) 7.193 Tj\n-304 TJm\n(the) 12.1743 Tj\n-305 TJm\n(time) 17.7135 Tj\n-304 TJm\n(the) 12.1743 Tj\n-304 TJm\n(problem) 33.2053 Tj\n-305 TJm\n(happened.) 40.6673 Tj\n-946 TJm\n(W) 9.4047 Tj\n40 TJm\n(ithout) 23.2527 Tj\n-304 TJm\n(that,) 17.4346 Tj\n-318 TJm\n(my) 12.7322 Tj\n-305 TJm\n(ability) 25.4644 Tj\n-304 TJm\n(to) 7.7509 Tj\n-304 TJm\n(do) 9.9626 Tj\n-305 TJm\n(an) 9.4047 Tj\n15 TJm\n(ything) 25.4644 Tj\n-304 TJm\n(more) 20.4731 Tj\n-304 TJm\n(than) 17.1556 Tj\n-305 TJm\n(speculate) 37.0708 Tj\n-304 TJm\n(about) 22.1369 Tj\n-304 TJm\n(the) 12.1743 Tj\n-305 TJm\n(cause,) 24.6176 Tj\n-318 TJm\n(is) 6.6451 Tj\n72 199.686 Td\n(limited.) 30.7247 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 164.933 Td\n/F116_0 20.6585 Tf\n(4.4.) 34.4584 Tj\n-278 TJm\n(Did) 33.2808 Tj\n-278 TJm\n(y) 11.4861 Tj\n25 TJm\n(ou) 25.2447 Tj\n-278 TJm\n(g) 12.6223 Tj\n-10 TJm\n(et) 18.3654 Tj\n-278 TJm\n(the) 30.9878 Tj\n-278 TJm\n(right) 45.9032 Tj\n-278 TJm\n(pac) 35.5946 Tj\n20 TJm\n(ka) 22.9723 Tj\n10 TJm\n(g) 12.6223 Tj\n-10 TJm\n(e?) 24.1085 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 143.016 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n104.603 143.016 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-272 TJm\n(a) 4.4234 Tj\n-273 TJm\n(resource) 33.7433 Tj\n-272 TJm\n(hog.) 17.4346 Tj\n-378 TJm\n(It) 6.0871 Tj\n-272 TJm\n(soaks) 22.1369 Tj\n-273 TJm\n(up) 9.9626 Tj\n-272 TJm\n(lar) 10.5105 Tj\n18 TJm\n(ge) 9.4047 Tj\n-273 TJm\n(amounts) 33.7633 Tj\n-272 TJm\n(of) 8.2988 Tj\n-273 TJm\n(CPU) 19.3773 Tj\n-272 TJm\n(c) 4.4234 Tj\n15 TJm\n(ycles) 20.4731 Tj\n-273 TJm\n(and) 14.386 Tj\n-272 TJm\n(memory) 33.2053 Tj\n65 TJm\n(.) 2.4907 Tj\n-755 TJm\n(Also,) 21.31 Tj\n-278 TJm\n(it) 5.5392 Tj\n-273 TJm\n(gi) 7.7509 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(es) 8.2988 Tj\n-272 TJm\n(v) 4.9813 Tj\n15 TJm\n(ery) 12.7222 Tj\n-273 TJm\n(lar) 10.5105 Tj\n18 TJm\n(ge) 9.4047 Tj\n-272 TJm\n(latencies.) 37.3498 Tj\n72 131.06 Td\n(In) 8.2988 Tj\n-251 TJm\n(the) 12.1743 Tj\n-251 TJm\n(w) 7.193 Tj\n10 TJm\n(orst) 14.9439 Tj\n-251 TJm\n(case,) 19.6363 Tj\n-251 TJm\n(you) 14.9439 Tj\n-251 TJm\n(can) 13.8281 Tj\n-251 TJm\n(feed) 17.1456 Tj\n-251 TJm\n(man) 17.1556 Tj\n15 TJm\n(y) 4.9813 Tj\n-251 TJm\n(me) 12.1743 Tj\n15 TJm\n(g) 4.9813 Tj\n4 TJm\n(abyt) 17.1556 Tj\n1 TJm\n(es) 8.2988 Tj\n-252 TJm\n(of) 8.2988 Tj\n-251 TJm\n(uncompressed) 56.996 Tj\n-251 TJm\n(data) 16.5977 Tj\n-251 TJm\n(into) 15.5018 Tj\n-251 TJm\n(the) 12.1743 Tj\n-251 TJm\n(library) 26.5603 Tj\n-251 TJm\n(before) 25.4445 Tj\n-251 TJm\n(getting) 27.6761 Tj\n-251 TJm\n(an) 9.4047 Tj\n15 TJm\n(y) 4.9813 Tj\n-251 TJm\n(compressed) 47.0334 Tj\n72 119.105 Td\n(output,) 27.9551 Tj\n-250 TJm\n(so) 8.8568 Tj\n-250 TJm\n(this) 14.396 Tj\n-250 TJm\n(probably) 35.417 Tj\n-250 TJm\n(rules) 19.3673 Tj\n-250 TJm\n(out) 12.7322 Tj\n-250 TJm\n(applications) 48.1492 Tj\n-250 TJm\n(requiring) 36.5229 Tj\n-250 TJm\n(interacti) 32.6474 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(e) 4.4234 Tj\n-250 TJm\n(beha) 18.8094 Tj\n20 TJm\n(viour) 21.031 Tj\n55 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 97.187 Td\n(These) 23.7907 Tj\n-304 TJm\n(aren') 20.4632 Tj\n18 TJm\n(t) 2.7696 Tj\n-304 TJm\n(f) 3.3175 Tj\n10 TJm\n(aults) 18.8194 Tj\n-304 TJm\n(of) 8.2988 Tj\n-304 TJm\n(my) 12.7322 Tj\n-304 TJm\n(implementation,) 65.0359 Tj\n-317 TJm\n(I) 3.3175 Tj\n-304 TJm\n(hope,) 21.8579 Tj\n-318 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-304 TJm\n(more) 20.4731 Tj\n-304 TJm\n(an) 9.4047 Tj\n-304 TJm\n(intrinsic) 32.6574 Tj\n-304 TJm\n(property) 33.7533 Tj\n-304 TJm\n(of) 8.2988 Tj\n-304 TJm\n(the) 12.1743 Tj\n-304 TJm\n(Burro) 23.2427 Tj\n25 TJm\n(ws-Wheeler) 48.1293 Tj\n-304 TJm\n(transform) 38.7346 Tj\n72 85.232 Td\n(\\(unfortunately\\).) 62.8042 Tj\n-620 TJm\n(Maybe) 27.6661 Tj\n-250 TJm\n(this) 14.396 Tj\n-250 TJm\n(isn') 14.9439 Tj\n18 TJm\n(t) 2.7696 Tj\n-250 TJm\n(what) 19.3673 Tj\n-250 TJm\n(you) 14.9439 Tj\n-250 TJm\n(w) 7.193 Tj\n10 TJm\n(ant.) 14.6649 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 50.951 Td\n(33) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 34 37\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n498.728 749.245 Td\n/F122_0 9.9626 Tf\n(Miscellanea) 48.1393 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n72 710.037 Td\n/F122_0 9.9626 Tf\n(If) 6.6351 Tj\n-275 TJm\n(you) 14.9439 Tj\n-274 TJm\n(w) 7.193 Tj\n10 TJm\n(ant) 12.1743 Tj\n-275 TJm\n(a) 4.4234 Tj\n-274 TJm\n(compressor) 45.9276 Tj\n-275 TJm\n(and/or) 25.4544 Tj\n-275 TJm\n(library) 26.5603 Tj\n-274 TJm\n(which) 24.3486 Tj\n-275 TJm\n(is) 6.6451 Tj\n-274 TJm\n(f) 3.3175 Tj\n10 TJm\n(aster) 18.8094 Tj\n40 TJm\n(,) 2.4907 Tj\n-281 TJm\n(uses) 17.1556 Tj\n-275 TJm\n(less) 14.9439 Tj\n-274 TJm\n(memory) 33.2053 Tj\n-275 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-275 TJm\n(gets) 16.0497 Tj\n-274 TJm\n(pretty) 23.2427 Tj\n-275 TJm\n(good) 19.9252 Tj\n-274 TJm\n(compression,) 52.8516 Tj\n-281 TJm\n(and) 14.386 Tj\n-275 TJm\n(has) 13.2801 Tj\n72 698.082 Td\n(minimal) 33.2153 Tj\n-288 TJm\n(latenc) 23.7907 Tj\n15 TJm\n(y) 4.9813 Tj\n65 TJm\n(,) 2.4907 Tj\n-297 TJm\n(consider) 33.7533 Tj\n-288 TJm\n(Jean-loup) 38.7346 Tj\n-288 TJm\n(Gailly') 28.224 Tj\n55 TJm\n(s) 3.8755 Tj\n-288 TJm\n(and) 14.386 Tj\n-288 TJm\n(Mark) 21.579 Tj\n-288 TJm\n(Adl) 14.9439 Tj\n1 TJm\n(er') 11.0585 Tj\n55 TJm\n(s) 3.8755 Tj\n-288 TJm\n(w) 7.193 Tj\n10 TJm\n(ork,) 15.7708 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n353.879 698.082 Td\n/F124_0 9.9626 Tf\n(zlib-1.2.1) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n416.523 698.082 Td\n/F122_0 9.9626 Tf\n(and) 14.386 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n433.777 698.082 Td\n/F124_0 9.9626 Tf\n(gzip-1.2.4) 59.7756 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n493.553 698.082 Td\n/F122_0 9.9626 Tf\n(.) 2.4907 Tj\n-847 TJm\n(Look) 21.031 Tj\n-288 TJm\n(for) 11.6164 Tj\n72 686.127 Td\n(them) 19.9252 Tj\n-250 TJm\n(at) 7.193 Tj\n-250 TJm\n(http://www) 45.3896 Tj\n65 TJm\n(.zlib) 17.4346 Tj\n40 TJm\n(.or) 10.7895 Tj\n18 TJm\n(g) 4.9813 Tj\n-250 TJm\n(and) 14.386 Tj\n-250 TJm\n(http://www) 45.3896 Tj\n65 TJm\n(.gzip.or) 30.4357 Tj\n18 TJm\n(g) 4.9813 Tj\n-250 TJm\n(respecti) 30.9837 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(ely) 12.1743 Tj\n65 TJm\n(.) 2.4907 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 664.209 Td\n(F) 5.5392 Tj\n15 TJm\n(or) 8.2988 Tj\n-582 TJm\n(something) 41.5142 Tj\n-583 TJm\n(f) 3.3175 Tj\n10 TJm\n(aster) 18.8094 Tj\n-582 TJm\n(and) 14.386 Tj\n-582 TJm\n(lighter) 26.0123 Tj\n-583 TJm\n(still,) 17.4445 Tj\n-665 TJm\n(you) 14.9439 Tj\n-582 TJm\n(might) 23.2527 Tj\n-583 TJm\n(try) 11.0684 Tj\n-582 TJm\n(Markus) 30.4357 Tj\n-582 TJm\n(F) 5.5392 Tj\n-582 TJm\n(X) 7.193 Tj\n-582 TJm\n(J) 3.8755 Tj\n-582 TJm\n(Oberhumer') 48.6872 Tj\n55 TJm\n(s) 3.8755 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n437.433 664.209 Td\n/F124_0 9.9626 Tf\n(LZO) 17.9327 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n461.164 664.209 Td\n/F122_0 9.9626 Tf\n(real-time) 35.965 Tj\n-582 TJm\n(compres-) 37.0708 Tj\n72 652.254 Td\n(sion/decompression) 79.1429 Tj\n-250 TJm\n(library) 26.5603 Tj\n65 TJm\n(,) 2.4907 Tj\n-250 TJm\n(at) 7.193 Tj\n-250 TJm\n(http://www) 45.3896 Tj\n65 TJm\n(.oberhumer) 45.6486 Tj\n55 TJm\n(.com/opensource.) 70.2762 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 617.501 Td\n/F116_0 20.6585 Tf\n(4.5.) 34.4584 Tj\n-278 TJm\n(Fur) 33.2808 Tj\n-20 TJm\n(ther) 39.0239 Tj\n-278 TJm\n(Reading) 81.4978 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 595.583 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n104.923 595.583 Td\n/F122_0 9.9626 Tf\n(is) 6.6451 Tj\n-305 TJm\n(not) 12.7322 Tj\n-304 TJm\n(research) 33.1854 Tj\n-305 TJm\n(w) 7.193 Tj\n10 TJm\n(ork,) 15.7708 Tj\n-318 TJm\n(in) 7.7509 Tj\n-305 TJm\n(the) 12.1743 Tj\n-304 TJm\n(sense) 21.579 Tj\n-305 TJm\n(that) 14.9439 Tj\n-304 TJm\n(it) 5.5392 Tj\n-305 TJm\n(doesn') 26.5603 Tj\n18 TJm\n(t) 2.7696 Tj\n-304 TJm\n(present) 28.772 Tj\n-305 TJm\n(an) 9.4047 Tj\n15 TJm\n(y) 4.9813 Tj\n-305 TJm\n(ne) 9.4047 Tj\n25 TJm\n(w) 7.193 Tj\n-304 TJm\n(ideas.) 22.9638 Tj\n-474 TJm\n(Rather) 26.5603 Tj\n40 TJm\n(,) 2.4907 Tj\n-318 TJm\n(it') 8.8568 Tj\n55 TJm\n(s) 3.8755 Tj\n-305 TJm\n(an) 9.4047 Tj\n-304 TJm\n(engineering) 47.0334 Tj\n-305 TJm\n(e) 4.4234 Tj\n15 TJm\n(x) 4.9813 Tj\n15 TJm\n(ercise) 23.2328 Tj\n72 583.628 Td\n(based) 22.6848 Tj\n-250 TJm\n(on) 9.9626 Tj\n-250 TJm\n(e) 4.4234 Tj\n15 TJm\n(xisting) 27.1282 Tj\n-250 TJm\n(ideas.) 22.9638 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 561.71 Td\n(F) 5.5392 Tj\n15 TJm\n(our) 13.2801 Tj\n-250 TJm\n(documents) 43.1679 Tj\n-250 TJm\n(describe) 33.1954 Tj\n-250 TJm\n(essentially) 42.0621 Tj\n-250 TJm\n(all) 9.9626 Tj\n-250 TJm\n(the) 12.1743 Tj\n-250 TJm\n(ideas) 20.4731 Tj\n-250 TJm\n(behind) 27.1182 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n298.747 561.71 Td\n/F124_0 9.9626 Tf\n(bzip2) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n328.635 561.71 Td\n/F122_0 9.9626 Tf\n(:) 2.7696 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.9294 0.9686 0.9568] sc\n/DeviceRGB {} CS\n[0.9294 0.9686 0.9568] SC\nq\n[1 0 0 1 72 259.678] cm\n0 0 468 298.879 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 550.189 Td\n/F124_0 9.9626 Tf\n(Michael) 41.8429 Tj\n-426 TJm\n(Burrows) 41.8429 Tj\n-426 TJm\n(and) 17.9327 Tj\n-426 TJm\n(D.) 11.9551 Tj\n-426 TJm\n(J.) 11.9551 Tj\n-426 TJm\n(Wheeler:) 47.8205 Tj\n98.488 538.234 Td\n(\"A) 11.9551 Tj\n-426 TJm\n(block-sorting) 77.7083 Tj\n-426 TJm\n(lossless) 47.8205 Tj\n-426 TJm\n(data) 23.9102 Tj\n-426 TJm\n(compression) 65.7532 Tj\n-426 TJm\n(algorithm\") 59.7756 Tj\n102.732 526.278 Td\n(10th) 23.9102 Tj\n-426 TJm\n(May) 17.9327 Tj\n-426 TJm\n(1994.) 29.8878 Tj\n102.732 514.323 Td\n(Digital) 41.8429 Tj\n-426 TJm\n(SRC) 17.9327 Tj\n-426 TJm\n(Research) 47.8205 Tj\n-426 TJm\n(Report) 35.8654 Tj\n-426 TJm\n(124.) 23.9102 Tj\n102.732 502.368 Td\n(ftp://ftp.digital.com/pub/DEC/SRC/research-reports/SRC-124.ps.g\\\nz) 382.5638 Tj\n102.732 490.413 Td\n(If) 11.9551 Tj\n-426 TJm\n(you) 17.9327 Tj\n-426 TJm\n(have) 23.9102 Tj\n-426 TJm\n(trouble) 41.8429 Tj\n-426 TJm\n(finding) 41.8429 Tj\n-426 TJm\n(it,) 17.9327 Tj\n-426 TJm\n(try) 17.9327 Tj\n-426 TJm\n(searching) 53.798 Tj\n-426 TJm\n(at) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n102.732 478.458 Td\n(New) 17.9327 Tj\n-426 TJm\n(Zealand) 41.8429 Tj\n-426 TJm\n(Digital) 41.8429 Tj\n-426 TJm\n(Library,) 47.8205 Tj\n-426 TJm\n(http://www.nzdl.org.) 119.5512 Tj\n90 454.547 Td\n(Daniel) 35.8654 Tj\n-426 TJm\n(S.) 11.9551 Tj\n-426 TJm\n(Hirschberg) 59.7756 Tj\n-426 TJm\n(and) 17.9327 Tj\n-426 TJm\n(Debra) 29.8878 Tj\n-426 TJm\n(A.) 11.9551 Tj\n-426 TJm\n(LeLewer) 41.8429 Tj\n98.488 442.592 Td\n(\"Efficient) 59.7756 Tj\n-426 TJm\n(Decoding) 47.8205 Tj\n-426 TJm\n(of) 11.9551 Tj\n-426 TJm\n(Prefix) 35.8654 Tj\n-426 TJm\n(Codes\") 35.8654 Tj\n102.732 430.637 Td\n(Communications) 83.6858 Tj\n-426 TJm\n(of) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(ACM,) 23.9102 Tj\n-426 TJm\n(April) 29.8878 Tj\n-426 TJm\n(1990,) 29.8878 Tj\n-426 TJm\n(Vol) 17.9327 Tj\n-426 TJm\n(33,) 17.9327 Tj\n-426 TJm\n(Number) 35.8654 Tj\n-426 TJm\n(4.) 11.9551 Tj\n102.732 418.682 Td\n(You) 17.9327 Tj\n-426 TJm\n(might) 29.8878 Tj\n-426 TJm\n(be) 11.9551 Tj\n-426 TJm\n(able) 23.9102 Tj\n-426 TJm\n(to) 11.9551 Tj\n-426 TJm\n(get) 17.9327 Tj\n-426 TJm\n(an) 11.9551 Tj\n-426 TJm\n(electronic) 59.7756 Tj\n-426 TJm\n(copy) 23.9102 Tj\n-426 TJm\n(of) 11.9551 Tj\n-426 TJm\n(this) 23.9102 Tj\n102.732 406.727 Td\n(from) 23.9102 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(ACM) 17.9327 Tj\n-426 TJm\n(Digital) 41.8429 Tj\n-426 TJm\n(Library.) 47.8205 Tj\n90 382.816 Td\n(David) 29.8878 Tj\n-426 TJm\n(J.) 11.9551 Tj\n-426 TJm\n(Wheeler) 41.8429 Tj\n102.732 370.861 Td\n(Program) 41.8429 Tj\n-426 TJm\n(bred3.c) 41.8429 Tj\n-426 TJm\n(and) 17.9327 Tj\n-426 TJm\n(accompanying) 71.7307 Tj\n-426 TJm\n(document) 47.8205 Tj\n-426 TJm\n(bred3.ps.) 53.798 Tj\n102.732 358.906 Td\n(This) 23.9102 Tj\n-426 TJm\n(contains) 47.8205 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(idea) 23.9102 Tj\n-426 TJm\n(behind) 35.8654 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(multi-table) 65.7532 Tj\n-426 TJm\n(Huffman) 41.8429 Tj\n-426 TJm\n(coding) 35.8654 Tj\n-426 TJm\n(scheme.) 41.8429 Tj\n102.732 346.951 Td\n(ftp://ftp.cl.cam.ac.uk/users/djw3/) 203.237 Tj\n90 323.04 Td\n(Jon) 17.9327 Tj\n-426 TJm\n(L.) 11.9551 Tj\n-426 TJm\n(Bentley) 41.8429 Tj\n-426 TJm\n(and) 17.9327 Tj\n-426 TJm\n(Robert) 35.8654 Tj\n-426 TJm\n(Sedgewick) 53.798 Tj\n98.488 311.085 Td\n(\"Fast) 29.8878 Tj\n-426 TJm\n(Algorithms) 59.7756 Tj\n-426 TJm\n(for) 17.9327 Tj\n-426 TJm\n(Sorting) 41.8429 Tj\n-426 TJm\n(and) 17.9327 Tj\n-426 TJm\n(Searching) 53.798 Tj\n-426 TJm\n(Strings\") 47.8205 Tj\n102.732 299.13 Td\n(Available) 53.798 Tj\n-426 TJm\n(from) 23.9102 Tj\n-426 TJm\n(Sedgewick's) 65.7532 Tj\n-426 TJm\n(web) 17.9327 Tj\n-426 TJm\n(page,) 29.8878 Tj\n102.732 287.175 Td\n(www.cs.princeton.edu/~rs) 143.4614 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 237.76 Td\n/F122_0 9.9626 Tf\n(The) 15.4918 Tj\n-239 TJm\n(follo) 18.8194 Tj\n25 TJm\n(wing) 19.9252 Tj\n-238 TJm\n(paper) 22.1269 Tj\n-239 TJm\n(gi) 7.7509 Tj\n25 TJm\n(v) 4.9813 Tj\n15 TJm\n(es) 8.2988 Tj\n-239 TJm\n(v) 4.9813 Tj\n25 TJm\n(aluable) 28.772 Tj\n-238 TJm\n(additional) 39.8504 Tj\n-239 TJm\n(insights) 31.0036 Tj\n-238 TJm\n(into) 15.5018 Tj\n-239 TJm\n(the) 12.1743 Tj\n-239 TJm\n(algorithm,) 41.2352 Tj\n-241 TJm\n(b) 4.9813 Tj\n20 TJm\n(ut) 7.7509 Tj\n-238 TJm\n(is) 6.6451 Tj\n-239 TJm\n(not) 12.7322 Tj\n-239 TJm\n(immedia) 34.8691 Tj\n1 TJm\n(tely) 14.9439 Tj\n-239 TJm\n(the) 12.1743 Tj\n-239 TJm\n(basis) 19.9252 Tj\n-238 TJm\n(of) 8.2988 Tj\n-239 TJm\n(an) 9.4047 Tj\n15 TJm\n(y) 4.9813 Tj\n-239 TJm\n(code) 18.8094 Tj\n72 225.805 Td\n(used) 18.2614 Tj\n-250 TJm\n(in) 7.7509 Tj\n-250 TJm\n(bzip2.) 24.6275 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.9294 0.9686 0.9568] sc\n/DeviceRGB {} CS\n[0.9294 0.9686 0.9568] SC\nq\n[1 0 0 1 72 150.921] cm\n0 0 468 71.731 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 214.283 Td\n/F124_0 9.9626 Tf\n(Peter) 29.8878 Tj\n-426 TJm\n(Fenwick:) 47.8205 Tj\n102.732 202.328 Td\n(Block) 29.8878 Tj\n-426 TJm\n(Sorting) 41.8429 Tj\n-426 TJm\n(Text) 23.9102 Tj\n-426 TJm\n(Compression) 65.7532 Tj\n102.732 190.373 Td\n(Proceedings) 65.7532 Tj\n-426 TJm\n(of) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(19th) 23.9102 Tj\n-426 TJm\n(Australasian) 71.7307 Tj\n-426 TJm\n(Computer) 47.8205 Tj\n-426 TJm\n(Science) 41.8429 Tj\n-426 TJm\n(Conference,) 65.7532 Tj\n111.22 178.418 Td\n(Melbourne,) 59.7756 Tj\n-426 TJm\n(Australia.) 59.7756 Tj\n-852 TJm\n(Jan) 17.9327 Tj\n-426 TJm\n(31) 11.9551 Tj\n-426 TJm\n(-) 5.9776 Tj\n-426 TJm\n(Feb) 17.9327 Tj\n-426 TJm\n(2,) 11.9551 Tj\n-426 TJm\n(1996.) 29.8878 Tj\n102.732 166.463 Td\n(ftp://ftp.cs.auckland.ac.nz/pub/peter-f/ACSC96paper.ps) 322.7882 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 129.003 Td\n/F122_0 9.9626 Tf\n(K) 7.193 Tj\n15 TJm\n(unihik) 25.4644 Tj\n10 TJm\n(o) 4.9813 Tj\n-250 TJm\n(Sadakane') 41.4942 Tj\n55 TJm\n(s) 3.8755 Tj\n-250 TJm\n(sorting) 27.6761 Tj\n-250 TJm\n(algorithm,) 41.2352 Tj\n-250 TJm\n(mentioned) 42.0621 Tj\n-250 TJm\n(abo) 14.386 Tj\n15 TJm\n(v) 4.9813 Tj\n15 TJm\n(e,) 6.914 Tj\n-250 TJm\n(is) 6.6451 Tj\n-250 TJm\n(a) 4.4234 Tj\n20 TJm\n(v) 4.9813 Tj\n25 TJm\n(ailable) 26.5603 Tj\n-250 TJm\n(from:) 22.1369 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.9294 0.9686 0.9568] sc\n/DeviceRGB {} CS\n[0.9294 0.9686 0.9568] SC\nq\n[1 0 0 1 72 89.985] cm\n0 0 468 35.866 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 117.482 Td\n/F124_0 9.9626 Tf\n(http://naomi.is.s.u-tokyo.ac.jp/~sada/papers/Sada98b.ps.gz) 346.6985 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 50.951 Td\n/F122_0 9.9626 Tf\n(34) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Page: 35 38\n%%BeginPageSetup\n%%PageOrientation: Portrait\npdfStartPage\n0 0 612 792 re W\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\nq\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n498.728 749.245 Td\n/F122_0 9.9626 Tf\n(Miscellanea) 48.1393 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\nq\n[1 0 0 1 73.893 741.803] cm\n[] 0 d\n0 J\n0.498 w\n0 0 m\n475.465 0 l\nS\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n72 710.037 Td\n/F122_0 9.9626 Tf\n(The) 15.4918 Tj\n-250 TJm\n(Manber) 30.9837 Tj\n20 TJm\n(-Myers) 28.772 Tj\n-250 TJm\n(suf) 12.1743 Tj\n25 TJm\n(\\002x) 10.5205 Tj\n-250 TJm\n(array) 20.4632 Tj\n-250 TJm\n(construction) 49.2551 Tj\n-250 TJm\n(algorithm) 38.7446 Tj\n-250 TJm\n(is) 6.6451 Tj\n-250 TJm\n(described) 38.1767 Tj\n-250 TJm\n(in) 7.7509 Tj\n-250 TJm\n(a) 4.4234 Tj\n-250 TJm\n(paper) 22.1269 Tj\n-250 TJm\n(a) 4.4234 Tj\n20 TJm\n(v) 4.9813 Tj\n25 TJm\n(ailable) 26.5603 Tj\n-250 TJm\n(from:) 22.1369 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.9294 0.9686 0.9568] sc\n/DeviceRGB {} CS\n[0.9294 0.9686 0.9568] SC\nq\n[1 0 0 1 72 671.019] cm\n0 0 468 35.866 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 698.516 Td\n/F124_0 9.9626 Tf\n(http://www.cs.arizona.edu/people/gene/PAPERS/suffix.ps) 322.7882 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n72 649.101 Td\n/F122_0 9.9626 Tf\n(Finally) 28.234 Tj\n65 TJm\n(,) 2.4907 Tj\n-227 TJm\n(the) 12.1743 Tj\n-221 TJm\n(follo) 18.8194 Tj\n25 TJm\n(wing) 19.9252 Tj\n-222 TJm\n(papers) 26.0024 Tj\n-221 TJm\n(document) 39.2925 Tj\n-221 TJm\n(some) 21.031 Tj\n-222 TJm\n(in) 7.7509 Tj\n40 TJm\n(v) 4.9813 Tj\n15 TJm\n(estig) 18.8194 Tj\n5 TJm\n(ations) 23.8007 Tj\n-221 TJm\n(I) 3.3175 Tj\n-221 TJm\n(made) 21.579 Tj\n-222 TJm\n(into) 15.5018 Tj\n-221 TJm\n(the) 12.1743 Tj\n-221 TJm\n(performance) 50.341 Tj\n-222 TJm\n(of) 8.2988 Tj\n-221 TJm\n(sorting) 27.6761 Tj\n-221 TJm\n(and) 14.386 Tj\n-222 TJm\n(decompression) 59.7656 Tj\n72 637.146 Td\n(algorithms:) 45.3896 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0.9294 0.9686 0.9568] sc\n/DeviceRGB {} CS\n[0.9294 0.9686 0.9568] SC\nq\n[1 0 0 1 72 502.486] cm\n0 0 468 131.507 re\nf\nQ\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n[1 0 0 1 0 0] Tm\n0 0 Td\n90 625.624 Td\n/F124_0 9.9626 Tf\n(Julian) 35.8654 Tj\n-426 TJm\n(Seward) 35.8654 Tj\n102.732 613.669 Td\n(On) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(Performance) 65.7532 Tj\n-426 TJm\n(of) 11.9551 Tj\n-426 TJm\n(BWT) 17.9327 Tj\n-426 TJm\n(Sorting) 41.8429 Tj\n-426 TJm\n(Algorithms) 59.7756 Tj\n102.732 601.714 Td\n(Proceedings) 65.7532 Tj\n-426 TJm\n(of) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(IEEE) 23.9102 Tj\n-426 TJm\n(Data) 23.9102 Tj\n-426 TJm\n(Compression) 65.7532 Tj\n-426 TJm\n(Conference) 59.7756 Tj\n-426 TJm\n(2000) 23.9102 Tj\n111.22 589.759 Td\n(Snowbird,) 53.798 Tj\n-426 TJm\n(Utah.) 29.8878 Tj\n-852 TJm\n(28-30) 29.8878 Tj\n-426 TJm\n(March) 29.8878 Tj\n-426 TJm\n(2000.) 29.8878 Tj\n90 565.848 Td\n(Julian) 35.8654 Tj\n-426 TJm\n(Seward) 35.8654 Tj\n102.732 553.893 Td\n(Space-time) 59.7756 Tj\n-426 TJm\n(Tradeoffs) 53.798 Tj\n-426 TJm\n(in) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(Inverse) 41.8429 Tj\n-426 TJm\n(B-W) 17.9327 Tj\n-426 TJm\n(Transform) 53.798 Tj\n102.732 541.938 Td\n(Proceedings) 65.7532 Tj\n-426 TJm\n(of) 11.9551 Tj\n-426 TJm\n(the) 17.9327 Tj\n-426 TJm\n(IEEE) 23.9102 Tj\n-426 TJm\n(Data) 23.9102 Tj\n-426 TJm\n(Compression) 65.7532 Tj\n-426 TJm\n(Conference) 59.7756 Tj\n-426 TJm\n(2001) 23.9102 Tj\n111.22 529.983 Td\n(Snowbird,) 53.798 Tj\n-426 TJm\n(Utah.) 29.8878 Tj\n-852 TJm\n(27-29) 29.8878 Tj\n-426 TJm\n(March) 29.8878 Tj\n-426 TJm\n(2001.) 29.8878 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n534.414 50.951 Td\n/F122_0 9.9626 Tf\n(35) 9.9626 Tj\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceRGB {} cs\n[0 0 0] sc\n/DeviceRGB {} CS\n[0 0 0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Trailer\nend\n%%DocumentSuppliedResources:\n%%+ font PYRIYB+NimbusSanL-Bold\n%%+ font XDVKOU+NimbusRomNo9L-Regu\n%%+ font QYKIKI+NimbusMonL-Regu\n%%+ font BITXNG+CMMI10\n%%+ font ZWXELK+NimbusMonL-Bold\n%%+ font FRBTTO+CMSY10\n%%+ font AMYDOG+NimbusRomNo9L-ReguItal\n%%EOF\n"
  },
  {
    "path": "external/bzip2/manual.xml",
    "content": "<?xml version=\"1.0\"?> <!-- -*- sgml -*- -->\n<!DOCTYPE book PUBLIC \"-//OASIS//DTD DocBook XML V4.2//EN\"\n  \"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd\"[\n\n<!-- various strings, dates etc. common to all docs -->\n<!ENTITY % common-ents SYSTEM \"entities.xml\"> %common-ents;\n]>\n\n<book lang=\"en\" id=\"userman\" xreflabel=\"bzip2 Manual\">\n\n <bookinfo>\n  <title>bzip2 and libbzip2, version 1.0.6</title>\n  <subtitle>A program and library for data compression</subtitle>\n  <copyright>\n   <year>&bz-lifespan;</year>\n   <holder>Julian Seward</holder>\n  </copyright>\n  <releaseinfo>Version &bz-version; of &bz-date;</releaseinfo>\n\n  <authorgroup>\n   <author>\n    <firstname>Julian</firstname>\n    <surname>Seward</surname>\n    <affiliation>\n     <orgname>&bz-url;</orgname>\n    </affiliation>\n   </author>\n  </authorgroup>\n\n  <legalnotice>\n\n  <para>This program, <computeroutput>bzip2</computeroutput>, the\n  associated library <computeroutput>libbzip2</computeroutput>, and\n  all documentation, are copyright &copy; &bz-lifespan; Julian Seward.\n  All rights reserved.</para>\n\n  <para>Redistribution and use in source and binary forms, with\n  or without modification, are permitted provided that the\n  following conditions are met:</para>\n\n  <itemizedlist mark='bullet'>\n\n   <listitem><para>Redistributions of source code must retain the\n   above copyright notice, this list of conditions and the\n   following disclaimer.</para></listitem>\n\n   <listitem><para>The origin of this software must not be\n   misrepresented; you must not claim that you wrote the original\n   software.  If you use this software in a product, an\n   acknowledgment in the product documentation would be\n   appreciated but is not required.</para></listitem>\n\n   <listitem><para>Altered source versions must be plainly marked\n   as such, and must not be misrepresented as being the original\n   software.</para></listitem>\n\n   <listitem><para>The name of the author may not be used to\n   endorse or promote products derived from this software without\n   specific prior written permission.</para></listitem>\n\n  </itemizedlist>\n\n  <para>THIS SOFTWARE IS PROVIDED BY THE AUTHOR \"AS IS\" AND ANY\n  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n  PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE\n  AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n  IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n  THE POSSIBILITY OF SUCH DAMAGE.</para>\n\n <para>PATENTS: To the best of my knowledge,\n <computeroutput>bzip2</computeroutput> and\n <computeroutput>libbzip2</computeroutput> do not use any patented\n algorithms.  However, I do not have the resources to carry\n out a patent search.  Therefore I cannot give any guarantee of\n the above statement.\n </para>\n\n</legalnotice>\n\n</bookinfo>\n\n\n\n<chapter id=\"intro\" xreflabel=\"Introduction\">\n<title>Introduction</title>\n\n<para><computeroutput>bzip2</computeroutput> compresses files\nusing the Burrows-Wheeler block-sorting text compression\nalgorithm, and Huffman coding.  Compression is generally\nconsiderably better than that achieved by more conventional\nLZ77/LZ78-based compressors, and approaches the performance of\nthe PPM family of statistical compressors.</para>\n\n<para><computeroutput>bzip2</computeroutput> is built on top of\n<computeroutput>libbzip2</computeroutput>, a flexible library for\nhandling compressed data in the\n<computeroutput>bzip2</computeroutput> format.  This manual\ndescribes both how to use the program and how to work with the\nlibrary interface.  Most of the manual is devoted to this\nlibrary, not the program, which is good news if your interest is\nonly in the program.</para>\n\n<itemizedlist mark='bullet'>\n\n <listitem><para><xref linkend=\"using\"/> describes how to use\n <computeroutput>bzip2</computeroutput>; this is the only part\n you need to read if you just want to know how to operate the\n program.</para></listitem>\n\n <listitem><para><xref linkend=\"libprog\"/> describes the\n programming interfaces in detail, and</para></listitem>\n\n <listitem><para><xref linkend=\"misc\"/> records some\n miscellaneous notes which I thought ought to be recorded\n somewhere.</para></listitem>\n\n</itemizedlist>\n\n</chapter>\n\n\n<chapter id=\"using\" xreflabel=\"How to use bzip2\">\n<title>How to use bzip2</title>\n\n<para>This chapter contains a copy of the\n<computeroutput>bzip2</computeroutput> man page, and nothing\nelse.</para>\n\n<sect1 id=\"name\" xreflabel=\"NAME\">\n<title>NAME</title>\n\n<itemizedlist mark='bullet'>\n\n <listitem><para><computeroutput>bzip2</computeroutput>,\n  <computeroutput>bunzip2</computeroutput> - a block-sorting file\n  compressor, v1.0.6</para></listitem>\n\n <listitem><para><computeroutput>bzcat</computeroutput> -\n   decompresses files to stdout</para></listitem>\n\n <listitem><para><computeroutput>bzip2recover</computeroutput> -\n   recovers data from damaged bzip2 files</para></listitem>\n\n</itemizedlist>\n\n</sect1>\n\n\n<sect1 id=\"synopsis\" xreflabel=\"SYNOPSIS\">\n<title>SYNOPSIS</title>\n\n<itemizedlist mark='bullet'>\n\n <listitem><para><computeroutput>bzip2</computeroutput> [\n  -cdfkqstvzVL123456789 ] [ filenames ...  ]</para></listitem>\n\n <listitem><para><computeroutput>bunzip2</computeroutput> [\n  -fkvsVL ] [ filenames ...  ]</para></listitem>\n\n <listitem><para><computeroutput>bzcat</computeroutput> [ -s ] [\n  filenames ...  ]</para></listitem>\n\n <listitem><para><computeroutput>bzip2recover</computeroutput>\n  filename</para></listitem>\n\n</itemizedlist>\n\n</sect1>\n\n\n<sect1 id=\"description\" xreflabel=\"DESCRIPTION\">\n<title>DESCRIPTION</title>\n\n<para><computeroutput>bzip2</computeroutput> compresses files\nusing the Burrows-Wheeler block sorting text compression\nalgorithm, and Huffman coding.  Compression is generally\nconsiderably better than that achieved by more conventional\nLZ77/LZ78-based compressors, and approaches the performance of\nthe PPM family of statistical compressors.</para>\n\n<para>The command-line options are deliberately very similar to\nthose of GNU <computeroutput>gzip</computeroutput>, but they are\nnot identical.</para>\n\n<para><computeroutput>bzip2</computeroutput> expects a list of\nfile names to accompany the command-line flags.  Each file is\nreplaced by a compressed version of itself, with the name\n<computeroutput>original_name.bz2</computeroutput>.  Each\ncompressed file has the same modification date, permissions, and,\nwhen possible, ownership as the corresponding original, so that\nthese properties can be correctly restored at decompression time.\nFile name handling is naive in the sense that there is no\nmechanism for preserving original file names, permissions,\nownerships or dates in filesystems which lack these concepts, or\nhave serious file name length restrictions, such as\nMS-DOS.</para>\n\n<para><computeroutput>bzip2</computeroutput> and\n<computeroutput>bunzip2</computeroutput> will by default not\noverwrite existing files.  If you want this to happen, specify\nthe <computeroutput>-f</computeroutput> flag.</para>\n\n<para>If no file names are specified,\n<computeroutput>bzip2</computeroutput> compresses from standard\ninput to standard output.  In this case,\n<computeroutput>bzip2</computeroutput> will decline to write\ncompressed output to a terminal, as this would be entirely\nincomprehensible and therefore pointless.</para>\n\n<para><computeroutput>bunzip2</computeroutput> (or\n<computeroutput>bzip2 -d</computeroutput>) decompresses all\nspecified files.  Files which were not created by\n<computeroutput>bzip2</computeroutput> will be detected and\nignored, and a warning issued.\n<computeroutput>bzip2</computeroutput> attempts to guess the\nfilename for the decompressed file from that of the compressed\nfile as follows:</para>\n\n<itemizedlist mark='bullet'>\n\n <listitem><para><computeroutput>filename.bz2 </computeroutput>\n  becomes\n  <computeroutput>filename</computeroutput></para></listitem>\n\n <listitem><para><computeroutput>filename.bz </computeroutput>\n  becomes\n  <computeroutput>filename</computeroutput></para></listitem>\n\n <listitem><para><computeroutput>filename.tbz2</computeroutput>\n  becomes\n  <computeroutput>filename.tar</computeroutput></para></listitem>\n\n <listitem><para><computeroutput>filename.tbz </computeroutput>\n  becomes\n  <computeroutput>filename.tar</computeroutput></para></listitem>\n\n <listitem><para><computeroutput>anyothername </computeroutput>\n  becomes\n  <computeroutput>anyothername.out</computeroutput></para></listitem>\n\n</itemizedlist>\n\n<para>If the file does not end in one of the recognised endings,\n<computeroutput>.bz2</computeroutput>,\n<computeroutput>.bz</computeroutput>,\n<computeroutput>.tbz2</computeroutput> or\n<computeroutput>.tbz</computeroutput>,\n<computeroutput>bzip2</computeroutput> complains that it cannot\nguess the name of the original file, and uses the original name\nwith <computeroutput>.out</computeroutput> appended.</para>\n\n<para>As with compression, supplying no filenames causes\ndecompression from standard input to standard output.</para>\n\n<para><computeroutput>bunzip2</computeroutput> will correctly\ndecompress a file which is the concatenation of two or more\ncompressed files.  The result is the concatenation of the\ncorresponding uncompressed files.  Integrity testing\n(<computeroutput>-t</computeroutput>) of concatenated compressed\nfiles is also supported.</para>\n\n<para>You can also compress or decompress files to the standard\noutput by giving the <computeroutput>-c</computeroutput> flag.\nMultiple files may be compressed and decompressed like this.  The\nresulting outputs are fed sequentially to stdout.  Compression of\nmultiple files in this manner generates a stream containing\nmultiple compressed file representations.  Such a stream can be\ndecompressed correctly only by\n<computeroutput>bzip2</computeroutput> version 0.9.0 or later.\nEarlier versions of <computeroutput>bzip2</computeroutput> will\nstop after decompressing the first file in the stream.</para>\n\n<para><computeroutput>bzcat</computeroutput> (or\n<computeroutput>bzip2 -dc</computeroutput>) decompresses all\nspecified files to the standard output.</para>\n\n<para><computeroutput>bzip2</computeroutput> will read arguments\nfrom the environment variables\n<computeroutput>BZIP2</computeroutput> and\n<computeroutput>BZIP</computeroutput>, in that order, and will\nprocess them before any arguments read from the command line.\nThis gives a convenient way to supply default arguments.</para>\n\n<para>Compression is always performed, even if the compressed\nfile is slightly larger than the original.  Files of less than\nabout one hundred bytes tend to get larger, since the compression\nmechanism has a constant overhead in the region of 50 bytes.\nRandom data (including the output of most file compressors) is\ncoded at about 8.05 bits per byte, giving an expansion of around\n0.5%.</para>\n\n<para>As a self-check for your protection,\n<computeroutput>bzip2</computeroutput> uses 32-bit CRCs to make\nsure that the decompressed version of a file is identical to the\noriginal.  This guards against corruption of the compressed data,\nand against undetected bugs in\n<computeroutput>bzip2</computeroutput> (hopefully very unlikely).\nThe chances of data corruption going undetected is microscopic,\nabout one chance in four billion for each file processed.  Be\naware, though, that the check occurs upon decompression, so it\ncan only tell you that something is wrong.  It can't help you\nrecover the original uncompressed data.  You can use\n<computeroutput>bzip2recover</computeroutput> to try to recover\ndata from damaged files.</para>\n\n<para>Return values: 0 for a normal exit, 1 for environmental\nproblems (file not found, invalid flags, I/O errors, etc.), 2\nto indicate a corrupt compressed file, 3 for an internal\nconsistency error (eg, bug) which caused\n<computeroutput>bzip2</computeroutput> to panic.</para>\n\n</sect1>\n\n\n<sect1 id=\"options\" xreflabel=\"OPTIONS\">\n<title>OPTIONS</title>\n\n<variablelist>\n\n <varlistentry>\n <term><computeroutput>-c --stdout</computeroutput></term>\n <listitem><para>Compress or decompress to standard\n  output.</para></listitem>\n </varlistentry>\n\n <varlistentry>\n <term><computeroutput>-d --decompress</computeroutput></term>\n <listitem><para>Force decompression.\n  <computeroutput>bzip2</computeroutput>,\n  <computeroutput>bunzip2</computeroutput> and\n  <computeroutput>bzcat</computeroutput> are really the same\n  program, and the decision about what actions to take is done on\n  the basis of which name is used.  This flag overrides that\n  mechanism, and forces bzip2 to decompress.</para></listitem>\n </varlistentry>\n\n <varlistentry>\n <term><computeroutput>-z --compress</computeroutput></term>\n <listitem><para>The complement to\n  <computeroutput>-d</computeroutput>: forces compression,\n  regardless of the invokation name.</para></listitem>\n </varlistentry>\n\n <varlistentry>\n <term><computeroutput>-t --test</computeroutput></term>\n <listitem><para>Check integrity of the specified file(s), but\n  don't decompress them.  This really performs a trial\n  decompression and throws away the result.</para></listitem>\n </varlistentry>\n\n <varlistentry>\n <term><computeroutput>-f --force</computeroutput></term>\n <listitem><para>Force overwrite of output files.  Normally,\n  <computeroutput>bzip2</computeroutput> will not overwrite\n  existing output files.  Also forces\n  <computeroutput>bzip2</computeroutput> to break hard links to\n  files, which it otherwise wouldn't do.</para>\n  <para><computeroutput>bzip2</computeroutput> normally declines\n  to decompress files which don't have the correct magic header\n  bytes. If forced (<computeroutput>-f</computeroutput>),\n  however, it will pass such files through unmodified. This is\n  how GNU <computeroutput>gzip</computeroutput> behaves.</para>\n </listitem>\n </varlistentry>\n\n <varlistentry>\n <term><computeroutput>-k --keep</computeroutput></term>\n <listitem><para>Keep (don't delete) input files during\n  compression or decompression.</para></listitem>\n </varlistentry>\n\n <varlistentry>\n <term><computeroutput>-s --small</computeroutput></term>\n <listitem><para>Reduce memory usage, for compression,\n  decompression and testing.  Files are decompressed and tested\n  using a modified algorithm which only requires 2.5 bytes per\n  block byte.  This means any file can be decompressed in 2300k\n  of memory, albeit at about half the normal speed.</para>\n  <para>During compression, <computeroutput>-s</computeroutput>\n  selects a block size of 200k, which limits memory use to around\n  the same figure, at the expense of your compression ratio.  In\n  short, if your machine is low on memory (8 megabytes or less),\n  use <computeroutput>-s</computeroutput> for everything.  See\n  <xref linkend=\"memory-management\"/> below.</para></listitem>\n </varlistentry>\n\n <varlistentry>\n <term><computeroutput>-q --quiet</computeroutput></term>\n <listitem><para>Suppress non-essential warning messages.\n  Messages pertaining to I/O errors and other critical events\n  will not be suppressed.</para></listitem>\n </varlistentry>\n\n <varlistentry>\n <term><computeroutput>-v --verbose</computeroutput></term>\n <listitem><para>Verbose mode -- show the compression ratio for\n  each file processed.  Further\n  <computeroutput>-v</computeroutput>'s increase the verbosity\n  level, spewing out lots of information which is primarily of\n  interest for diagnostic purposes.</para></listitem>\n </varlistentry>\n\n <varlistentry>\n <term><computeroutput>-L --license -V --version</computeroutput></term>\n <listitem><para>Display the software version, license terms and\n  conditions.</para></listitem>\n </varlistentry>\n\n <varlistentry>\n <term><computeroutput>-1</computeroutput> (or\n <computeroutput>--fast</computeroutput>) to\n <computeroutput>-9</computeroutput> (or\n <computeroutput>-best</computeroutput>)</term>\n <listitem><para>Set the block size to 100 k, 200 k ...  900 k\n  when compressing.  Has no effect when decompressing.  See <xref\n  linkend=\"memory-management\" /> below.  The\n  <computeroutput>--fast</computeroutput> and\n  <computeroutput>--best</computeroutput> aliases are primarily\n  for GNU <computeroutput>gzip</computeroutput> compatibility.\n  In particular, <computeroutput>--fast</computeroutput> doesn't\n  make things significantly faster.  And\n  <computeroutput>--best</computeroutput> merely selects the\n  default behaviour.</para></listitem>\n </varlistentry>\n\n <varlistentry>\n <term><computeroutput>--</computeroutput></term>\n <listitem><para>Treats all subsequent arguments as file names,\n  even if they start with a dash.  This is so you can handle\n  files with names beginning with a dash, for example:\n  <computeroutput>bzip2 --\n  -myfilename</computeroutput>.</para></listitem>\n </varlistentry>\n\n <varlistentry>\n <term><computeroutput>--repetitive-fast</computeroutput></term>\n <term><computeroutput>--repetitive-best</computeroutput></term>\n <listitem><para>These flags are redundant in versions 0.9.5 and\n  above.  They provided some coarse control over the behaviour of\n  the sorting algorithm in earlier versions, which was sometimes\n  useful.  0.9.5 and above have an improved algorithm which\n  renders these flags irrelevant.</para></listitem>\n </varlistentry>\n\n</variablelist>\n\n</sect1>\n\n\n<sect1 id=\"memory-management\" xreflabel=\"MEMORY MANAGEMENT\">\n<title>MEMORY MANAGEMENT</title>\n\n<para><computeroutput>bzip2</computeroutput> compresses large\nfiles in blocks.  The block size affects both the compression\nratio achieved, and the amount of memory needed for compression\nand decompression.  The flags <computeroutput>-1</computeroutput>\nthrough <computeroutput>-9</computeroutput> specify the block\nsize to be 100,000 bytes through 900,000 bytes (the default)\nrespectively.  At decompression time, the block size used for\ncompression is read from the header of the compressed file, and\n<computeroutput>bunzip2</computeroutput> then allocates itself\njust enough memory to decompress the file.  Since block sizes are\nstored in compressed files, it follows that the flags\n<computeroutput>-1</computeroutput> to\n<computeroutput>-9</computeroutput> are irrelevant to and so\nignored during decompression.</para>\n\n<para>Compression and decompression requirements, in bytes, can be\nestimated as:</para>\n<programlisting>\nCompression:   400k + ( 8 x block size )\n\nDecompression: 100k + ( 4 x block size ), or\n               100k + ( 2.5 x block size )\n</programlisting>\n\n<para>Larger block sizes give rapidly diminishing marginal\nreturns.  Most of the compression comes from the first two or\nthree hundred k of block size, a fact worth bearing in mind when\nusing <computeroutput>bzip2</computeroutput> on small machines.\nIt is also important to appreciate that the decompression memory\nrequirement is set at compression time by the choice of block\nsize.</para>\n\n<para>For files compressed with the default 900k block size,\n<computeroutput>bunzip2</computeroutput> will require about 3700\nkbytes to decompress.  To support decompression of any file on a\n4 megabyte machine, <computeroutput>bunzip2</computeroutput> has\nan option to decompress using approximately half this amount of\nmemory, about 2300 kbytes.  Decompression speed is also halved,\nso you should use this option only where necessary.  The relevant\nflag is <computeroutput>-s</computeroutput>.</para>\n\n<para>In general, try and use the largest block size memory\nconstraints allow, since that maximises the compression achieved.\nCompression and decompression speed are virtually unaffected by\nblock size.</para>\n\n<para>Another significant point applies to files which fit in a\nsingle block -- that means most files you'd encounter using a\nlarge block size.  The amount of real memory touched is\nproportional to the size of the file, since the file is smaller\nthan a block.  For example, compressing a file 20,000 bytes long\nwith the flag <computeroutput>-9</computeroutput> will cause the\ncompressor to allocate around 7600k of memory, but only touch\n400k + 20000 * 8 = 560 kbytes of it.  Similarly, the decompressor\nwill allocate 3700k but only touch 100k + 20000 * 4 = 180\nkbytes.</para>\n\n<para>Here is a table which summarises the maximum memory usage\nfor different block sizes.  Also recorded is the total compressed\nsize for 14 files of the Calgary Text Compression Corpus\ntotalling 3,141,622 bytes.  This column gives some feel for how\ncompression varies with block size.  These figures tend to\nunderstate the advantage of larger block sizes for larger files,\nsince the Corpus is dominated by smaller files.</para>\n\n<programlisting>\n        Compress   Decompress   Decompress   Corpus\nFlag     usage      usage       -s usage     Size\n\n -1      1200k       500k         350k      914704\n -2      2000k       900k         600k      877703\n -3      2800k      1300k         850k      860338\n -4      3600k      1700k        1100k      846899\n -5      4400k      2100k        1350k      845160\n -6      5200k      2500k        1600k      838626\n -7      6100k      2900k        1850k      834096\n -8      6800k      3300k        2100k      828642\n -9      7600k      3700k        2350k      828642\n</programlisting>\n\n</sect1>\n\n\n<sect1 id=\"recovering\" xreflabel=\"RECOVERING DATA FROM DAMAGED FILES\">\n<title>RECOVERING DATA FROM DAMAGED FILES</title>\n\n<para><computeroutput>bzip2</computeroutput> compresses files in\nblocks, usually 900kbytes long.  Each block is handled\nindependently.  If a media or transmission error causes a\nmulti-block <computeroutput>.bz2</computeroutput> file to become\ndamaged, it may be possible to recover data from the undamaged\nblocks in the file.</para>\n\n<para>The compressed representation of each block is delimited by\na 48-bit pattern, which makes it possible to find the block\nboundaries with reasonable certainty.  Each block also carries\nits own 32-bit CRC, so damaged blocks can be distinguished from\nundamaged ones.</para>\n\n<para><computeroutput>bzip2recover</computeroutput> is a simple\nprogram whose purpose is to search for blocks in\n<computeroutput>.bz2</computeroutput> files, and write each block\nout into its own <computeroutput>.bz2</computeroutput> file.  You\ncan then use <computeroutput>bzip2 -t</computeroutput> to test\nthe integrity of the resulting files, and decompress those which\nare undamaged.</para>\n\n<para><computeroutput>bzip2recover</computeroutput> takes a\nsingle argument, the name of the damaged file, and writes a\nnumber of files <computeroutput>rec0001file.bz2</computeroutput>,\n<computeroutput>rec0002file.bz2</computeroutput>, etc, containing\nthe extracted blocks.  The output filenames are designed so that\nthe use of wildcards in subsequent processing -- for example,\n<computeroutput>bzip2 -dc rec*file.bz2 &#62;\nrecovered_data</computeroutput> -- lists the files in the correct\norder.</para>\n\n<para><computeroutput>bzip2recover</computeroutput> should be of\nmost use dealing with large <computeroutput>.bz2</computeroutput>\nfiles, as these will contain many blocks.  It is clearly futile\nto use it on damaged single-block files, since a damaged block\ncannot be recovered.  If you wish to minimise any potential data\nloss through media or transmission errors, you might consider\ncompressing with a smaller block size.</para>\n\n</sect1>\n\n\n<sect1 id=\"performance\" xreflabel=\"PERFORMANCE NOTES\">\n<title>PERFORMANCE NOTES</title>\n\n<para>The sorting phase of compression gathers together similar\nstrings in the file.  Because of this, files containing very long\nruns of repeated symbols, like \"aabaabaabaab ...\"  (repeated\nseveral hundred times) may compress more slowly than normal.\nVersions 0.9.5 and above fare much better than previous versions\nin this respect.  The ratio between worst-case and average-case\ncompression time is in the region of 10:1.  For previous\nversions, this figure was more like 100:1.  You can use the\n<computeroutput>-vvvv</computeroutput> option to monitor progress\nin great detail, if you want.</para>\n\n<para>Decompression speed is unaffected by these\nphenomena.</para>\n\n<para><computeroutput>bzip2</computeroutput> usually allocates\nseveral megabytes of memory to operate in, and then charges all\nover it in a fairly random fashion.  This means that performance,\nboth for compressing and decompressing, is largely determined by\nthe speed at which your machine can service cache misses.\nBecause of this, small changes to the code to reduce the miss\nrate have been observed to give disproportionately large\nperformance improvements.  I imagine\n<computeroutput>bzip2</computeroutput> will perform best on\nmachines with very large caches.</para>\n\n</sect1>\n\n\n\n<sect1 id=\"caveats\" xreflabel=\"CAVEATS\">\n<title>CAVEATS</title>\n\n<para>I/O error messages are not as helpful as they could be.\n<computeroutput>bzip2</computeroutput> tries hard to detect I/O\nerrors and exit cleanly, but the details of what the problem is\nsometimes seem rather misleading.</para>\n\n<para>This manual page pertains to version &bz-version; of\n<computeroutput>bzip2</computeroutput>.  Compressed data created by\nthis version is entirely forwards and backwards compatible with the\nprevious public releases, versions 0.1pl2, 0.9.0 and 0.9.5, 1.0.0,\n1.0.1, 1.0.2 and 1.0.3, but with the following exception: 0.9.0 and\nabove can correctly decompress multiple concatenated compressed files.\n0.1pl2 cannot do this; it will stop after decompressing just the first\nfile in the stream.</para>\n\n<para><computeroutput>bzip2recover</computeroutput> versions\nprior to 1.0.2 used 32-bit integers to represent bit positions in\ncompressed files, so it could not handle compressed files more\nthan 512 megabytes long.  Versions 1.0.2 and above use 64-bit ints\non some platforms which support them (GNU supported targets, and\nWindows). To establish whether or not\n<computeroutput>bzip2recover</computeroutput> was built with such\na limitation, run it without arguments. In any event you can\nbuild yourself an unlimited version if you can recompile it with\n<computeroutput>MaybeUInt64</computeroutput> set to be an\nunsigned 64-bit integer.</para>\n\n</sect1>\n\n\n\n<sect1 id=\"author\" xreflabel=\"AUTHOR\">\n<title>AUTHOR</title>\n\n<para>Julian Seward,\n<computeroutput>&bz-email;</computeroutput></para>\n\n<para>The ideas embodied in\n<computeroutput>bzip2</computeroutput> are due to (at least) the\nfollowing people: Michael Burrows and David Wheeler (for the\nblock sorting transformation), David Wheeler (again, for the\nHuffman coder), Peter Fenwick (for the structured coding model in\nthe original <computeroutput>bzip</computeroutput>, and many\nrefinements), and Alistair Moffat, Radford Neal and Ian Witten\n(for the arithmetic coder in the original\n<computeroutput>bzip</computeroutput>).  I am much indebted for\ntheir help, support and advice.  See the manual in the source\ndistribution for pointers to sources of documentation.  Christian\nvon Roques encouraged me to look for faster sorting algorithms,\nso as to speed up compression.  Bela Lubkin encouraged me to\nimprove the worst-case compression performance.  \nDonna Robinson XMLised the documentation.\nMany people sent\npatches, helped with portability problems, lent machines, gave\nadvice and were generally helpful.</para>\n\n</sect1>\n\n</chapter>\n\n\n\n<chapter id=\"libprog\" xreflabel=\"Programming with libbzip2\">\n<title>\nProgramming with <computeroutput>libbzip2</computeroutput>\n</title>\n\n<para>This chapter describes the programming interface to\n<computeroutput>libbzip2</computeroutput>.</para>\n\n<para>For general background information, particularly about\nmemory use and performance aspects, you'd be well advised to read\n<xref linkend=\"using\"/> as well.</para>\n\n\n<sect1 id=\"top-level\" xreflabel=\"Top-level structure\">\n<title>Top-level structure</title>\n\n<para><computeroutput>libbzip2</computeroutput> is a flexible\nlibrary for compressing and decompressing data in the\n<computeroutput>bzip2</computeroutput> data format.  Although\npackaged as a single entity, it helps to regard the library as\nthree separate parts: the low level interface, and the high level\ninterface, and some utility functions.</para>\n\n<para>The structure of\n<computeroutput>libbzip2</computeroutput>'s interfaces is similar\nto that of Jean-loup Gailly's and Mark Adler's excellent\n<computeroutput>zlib</computeroutput> library.</para>\n\n<para>All externally visible symbols have names beginning\n<computeroutput>BZ2_</computeroutput>.  This is new in version\n1.0.  The intention is to minimise pollution of the namespaces of\nlibrary clients.</para>\n\n<para>To use any part of the library, you need to\n<computeroutput>#include &lt;bzlib.h&gt;</computeroutput>\ninto your sources.</para>\n\n\n\n<sect2 id=\"ll-summary\" xreflabel=\"Low-level summary\">\n<title>Low-level summary</title>\n\n<para>This interface provides services for compressing and\ndecompressing data in memory.  There's no provision for dealing\nwith files, streams or any other I/O mechanisms, just straight\nmemory-to-memory work.  In fact, this part of the library can be\ncompiled without inclusion of\n<computeroutput>stdio.h</computeroutput>, which may be helpful\nfor embedded applications.</para>\n\n<para>The low-level part of the library has no global variables\nand is therefore thread-safe.</para>\n\n<para>Six routines make up the low level interface:\n<computeroutput>BZ2_bzCompressInit</computeroutput>,\n<computeroutput>BZ2_bzCompress</computeroutput>, and\n<computeroutput>BZ2_bzCompressEnd</computeroutput> for\ncompression, and a corresponding trio\n<computeroutput>BZ2_bzDecompressInit</computeroutput>,\n<computeroutput>BZ2_bzDecompress</computeroutput> and\n<computeroutput>BZ2_bzDecompressEnd</computeroutput> for\ndecompression.  The <computeroutput>*Init</computeroutput>\nfunctions allocate memory for compression/decompression and do\nother initialisations, whilst the\n<computeroutput>*End</computeroutput> functions close down\noperations and release memory.</para>\n\n<para>The real work is done by\n<computeroutput>BZ2_bzCompress</computeroutput> and\n<computeroutput>BZ2_bzDecompress</computeroutput>.  These\ncompress and decompress data from a user-supplied input buffer to\na user-supplied output buffer.  These buffers can be any size;\narbitrary quantities of data are handled by making repeated calls\nto these functions.  This is a flexible mechanism allowing a\nconsumer-pull style of activity, or producer-push, or a mixture\nof both.</para>\n\n</sect2>\n\n\n<sect2 id=\"hl-summary\" xreflabel=\"High-level summary\">\n<title>High-level summary</title>\n\n<para>This interface provides some handy wrappers around the\nlow-level interface to facilitate reading and writing\n<computeroutput>bzip2</computeroutput> format files\n(<computeroutput>.bz2</computeroutput> files).  The routines\nprovide hooks to facilitate reading files in which the\n<computeroutput>bzip2</computeroutput> data stream is embedded\nwithin some larger-scale file structure, or where there are\nmultiple <computeroutput>bzip2</computeroutput> data streams\nconcatenated end-to-end.</para>\n\n<para>For reading files,\n<computeroutput>BZ2_bzReadOpen</computeroutput>,\n<computeroutput>BZ2_bzRead</computeroutput>,\n<computeroutput>BZ2_bzReadClose</computeroutput> and \n<computeroutput>BZ2_bzReadGetUnused</computeroutput> are\nsupplied.  For writing files,\n<computeroutput>BZ2_bzWriteOpen</computeroutput>,\n<computeroutput>BZ2_bzWrite</computeroutput> and\n<computeroutput>BZ2_bzWriteFinish</computeroutput> are\navailable.</para>\n\n<para>As with the low-level library, no global variables are used\nso the library is per se thread-safe.  However, if I/O errors\noccur whilst reading or writing the underlying compressed files,\nyou may have to consult <computeroutput>errno</computeroutput> to\ndetermine the cause of the error.  In that case, you'd need a C\nlibrary which correctly supports\n<computeroutput>errno</computeroutput> in a multithreaded\nenvironment.</para>\n\n<para>To make the library a little simpler and more portable,\n<computeroutput>BZ2_bzReadOpen</computeroutput> and\n<computeroutput>BZ2_bzWriteOpen</computeroutput> require you to\npass them file handles (<computeroutput>FILE*</computeroutput>s)\nwhich have previously been opened for reading or writing\nrespectively.  That avoids portability problems associated with\nfile operations and file attributes, whilst not being much of an\nimposition on the programmer.</para>\n\n</sect2>\n\n\n<sect2 id=\"util-fns-summary\" xreflabel=\"Utility functions summary\">\n<title>Utility functions summary</title>\n\n<para>For very simple needs,\n<computeroutput>BZ2_bzBuffToBuffCompress</computeroutput> and\n<computeroutput>BZ2_bzBuffToBuffDecompress</computeroutput> are\nprovided.  These compress data in memory from one buffer to\nanother buffer in a single function call.  You should assess\nwhether these functions fulfill your memory-to-memory\ncompression/decompression requirements before investing effort in\nunderstanding the more general but more complex low-level\ninterface.</para>\n\n<para>Yoshioka Tsuneo\n(<computeroutput>tsuneo@rr.iij4u.or.jp</computeroutput>) has\ncontributed some functions to give better\n<computeroutput>zlib</computeroutput> compatibility.  These\nfunctions are <computeroutput>BZ2_bzopen</computeroutput>,\n<computeroutput>BZ2_bzread</computeroutput>,\n<computeroutput>BZ2_bzwrite</computeroutput>,\n<computeroutput>BZ2_bzflush</computeroutput>,\n<computeroutput>BZ2_bzclose</computeroutput>,\n<computeroutput>BZ2_bzerror</computeroutput> and\n<computeroutput>BZ2_bzlibVersion</computeroutput>.  You may find\nthese functions more convenient for simple file reading and\nwriting, than those in the high-level interface.  These functions\nare not (yet) officially part of the library, and are minimally\ndocumented here.  If they break, you get to keep all the pieces.\nI hope to document them properly when time permits.</para>\n\n<para>Yoshioka also contributed modifications to allow the\nlibrary to be built as a Windows DLL.</para>\n\n</sect2>\n\n</sect1>\n\n\n<sect1 id=\"err-handling\" xreflabel=\"Error handling\">\n<title>Error handling</title>\n\n<para>The library is designed to recover cleanly in all\nsituations, including the worst-case situation of decompressing\nrandom data.  I'm not 100% sure that it can always do this, so\nyou might want to add a signal handler to catch segmentation\nviolations during decompression if you are feeling especially\nparanoid.  I would be interested in hearing more about the\nrobustness of the library to corrupted compressed data.</para>\n\n<para>Version 1.0.3 more robust in this respect than any\nprevious version.  Investigations with Valgrind (a tool for detecting\nproblems with memory management) indicate\nthat, at least for the few files I tested, all single-bit errors\nin the decompressed data are caught properly, with no\nsegmentation faults, no uses of uninitialised data, no out of\nrange reads or writes, and no infinite looping in the decompressor.\nSo it's certainly pretty robust, although\nI wouldn't claim it to be totally bombproof.</para>\n\n<para>The file <computeroutput>bzlib.h</computeroutput> contains\nall definitions needed to use the library.  In particular, you\nshould definitely not include\n<computeroutput>bzlib_private.h</computeroutput>.</para>\n\n<para>In <computeroutput>bzlib.h</computeroutput>, the various\nreturn values are defined.  The following list is not intended as\nan exhaustive description of the circumstances in which a given\nvalue may be returned -- those descriptions are given later.\nRather, it is intended to convey the rough meaning of each return\nvalue.  The first five actions are normal and not intended to\ndenote an error situation.</para>\n\n<variablelist>\n\n <varlistentry>\n  <term><computeroutput>BZ_OK</computeroutput></term>\n  <listitem><para>The requested action was completed\n   successfully.</para></listitem>\n </varlistentry>\n\n <varlistentry>\n  <term><computeroutput>BZ_RUN_OK, BZ_FLUSH_OK,\n    BZ_FINISH_OK</computeroutput></term>\n  <listitem><para>In \n   <computeroutput>BZ2_bzCompress</computeroutput>, the requested\n   flush/finish/nothing-special action was completed\n   successfully.</para></listitem>\n </varlistentry>\n\n <varlistentry>\n  <term><computeroutput>BZ_STREAM_END</computeroutput></term>\n  <listitem><para>Compression of data was completed, or the\n   logical stream end was detected during\n   decompression.</para></listitem>\n </varlistentry>\n\n</variablelist>\n\n<para>The following return values indicate an error of some\nkind.</para>\n\n<variablelist>\n\n <varlistentry>\n  <term><computeroutput>BZ_CONFIG_ERROR</computeroutput></term>\n  <listitem><para>Indicates that the library has been improperly\n   compiled on your platform -- a major configuration error.\n   Specifically, it means that\n   <computeroutput>sizeof(char)</computeroutput>,\n   <computeroutput>sizeof(short)</computeroutput> and\n   <computeroutput>sizeof(int)</computeroutput> are not 1, 2 and\n   4 respectively, as they should be.  Note that the library\n   should still work properly on 64-bit platforms which follow\n   the LP64 programming model -- that is, where\n   <computeroutput>sizeof(long)</computeroutput> and\n   <computeroutput>sizeof(void*)</computeroutput> are 8.  Under\n   LP64, <computeroutput>sizeof(int)</computeroutput> is still 4,\n   so <computeroutput>libbzip2</computeroutput>, which doesn't\n   use the <computeroutput>long</computeroutput> type, is\n   OK.</para></listitem>\n </varlistentry>\n\n <varlistentry>\n  <term><computeroutput>BZ_SEQUENCE_ERROR</computeroutput></term>\n  <listitem><para>When using the library, it is important to call\n   the functions in the correct sequence and with data structures\n   (buffers etc) in the correct states.\n   <computeroutput>libbzip2</computeroutput> checks as much as it\n   can to ensure this is happening, and returns\n   <computeroutput>BZ_SEQUENCE_ERROR</computeroutput> if not.\n   Code which complies precisely with the function semantics, as\n   detailed below, should never receive this value; such an event\n   denotes buggy code which you should\n   investigate.</para></listitem>\n </varlistentry>\n\n <varlistentry>\n  <term><computeroutput>BZ_PARAM_ERROR</computeroutput></term>\n  <listitem><para>Returned when a parameter to a function call is\n   out of range or otherwise manifestly incorrect.  As with\n   <computeroutput>BZ_SEQUENCE_ERROR</computeroutput>, this\n   denotes a bug in the client code.  The distinction between\n   <computeroutput>BZ_PARAM_ERROR</computeroutput> and\n   <computeroutput>BZ_SEQUENCE_ERROR</computeroutput> is a bit\n   hazy, but still worth making.</para></listitem>\n </varlistentry>\n\n <varlistentry>\n  <term><computeroutput>BZ_MEM_ERROR</computeroutput></term>\n  <listitem><para>Returned when a request to allocate memory\n   failed.  Note that the quantity of memory needed to decompress\n   a stream cannot be determined until the stream's header has\n   been read.  So\n   <computeroutput>BZ2_bzDecompress</computeroutput> and\n   <computeroutput>BZ2_bzRead</computeroutput> may return\n   <computeroutput>BZ_MEM_ERROR</computeroutput> even though some\n   of the compressed data has been read.  The same is not true\n   for compression; once\n   <computeroutput>BZ2_bzCompressInit</computeroutput> or\n   <computeroutput>BZ2_bzWriteOpen</computeroutput> have\n   successfully completed,\n   <computeroutput>BZ_MEM_ERROR</computeroutput> cannot\n   occur.</para></listitem>\n </varlistentry>\n\n <varlistentry>\n  <term><computeroutput>BZ_DATA_ERROR</computeroutput></term>\n  <listitem><para>Returned when a data integrity error is\n   detected during decompression.  Most importantly, this means\n   when stored and computed CRCs for the data do not match.  This\n   value is also returned upon detection of any other anomaly in\n   the compressed data.</para></listitem>\n </varlistentry>\n\n <varlistentry>\n  <term><computeroutput>BZ_DATA_ERROR_MAGIC</computeroutput></term>\n  <listitem><para>As a special case of\n   <computeroutput>BZ_DATA_ERROR</computeroutput>, it is\n   sometimes useful to know when the compressed stream does not\n   start with the correct magic bytes (<computeroutput>'B' 'Z'\n   'h'</computeroutput>).</para></listitem>\n </varlistentry>\n\n <varlistentry>\n  <term><computeroutput>BZ_IO_ERROR</computeroutput></term>\n  <listitem><para>Returned by\n   <computeroutput>BZ2_bzRead</computeroutput> and\n   <computeroutput>BZ2_bzWrite</computeroutput> when there is an\n   error reading or writing in the compressed file, and by\n   <computeroutput>BZ2_bzReadOpen</computeroutput> and\n   <computeroutput>BZ2_bzWriteOpen</computeroutput> for attempts\n   to use a file for which the error indicator (viz,\n   <computeroutput>ferror(f)</computeroutput>) is set.  On\n   receipt of <computeroutput>BZ_IO_ERROR</computeroutput>, the\n   caller should consult <computeroutput>errno</computeroutput>\n   and/or <computeroutput>perror</computeroutput> to acquire\n   operating-system specific information about the\n   problem.</para></listitem>\n </varlistentry>\n\n <varlistentry>\n  <term><computeroutput>BZ_UNEXPECTED_EOF</computeroutput></term>\n  <listitem><para>Returned by\n   <computeroutput>BZ2_bzRead</computeroutput> when the\n   compressed file finishes before the logical end of stream is\n   detected.</para></listitem>\n </varlistentry>\n\n <varlistentry>\n  <term><computeroutput>BZ_OUTBUFF_FULL</computeroutput></term>\n  <listitem><para>Returned by\n   <computeroutput>BZ2_bzBuffToBuffCompress</computeroutput> and\n   <computeroutput>BZ2_bzBuffToBuffDecompress</computeroutput> to\n   indicate that the output data will not fit into the output\n   buffer provided.</para></listitem>\n </varlistentry>\n\n</variablelist>\n\n</sect1>\n\n\n\n<sect1 id=\"low-level\" xreflabel=\">Low-level interface\">\n<title>Low-level interface</title>\n\n\n<sect2 id=\"bzcompress-init\" xreflabel=\"BZ2_bzCompressInit\">\n<title>BZ2_bzCompressInit</title>\n\n<programlisting>\ntypedef struct {\n  char *next_in;\n  unsigned int avail_in;\n  unsigned int total_in_lo32;\n  unsigned int total_in_hi32;\n\n  char *next_out;\n  unsigned int avail_out;\n  unsigned int total_out_lo32;\n  unsigned int total_out_hi32;\n\n  void *state;\n\n  void *(*bzalloc)(void *,int,int);\n  void (*bzfree)(void *,void *);\n  void *opaque;\n} bz_stream;\n\nint BZ2_bzCompressInit ( bz_stream *strm, \n                         int blockSize100k, \n                         int verbosity,\n                         int workFactor );\n</programlisting>\n\n<para>Prepares for compression.  The\n<computeroutput>bz_stream</computeroutput> structure holds all\ndata pertaining to the compression activity.  A\n<computeroutput>bz_stream</computeroutput> structure should be\nallocated and initialised prior to the call.  The fields of\n<computeroutput>bz_stream</computeroutput> comprise the entirety\nof the user-visible data.  <computeroutput>state</computeroutput>\nis a pointer to the private data structures required for\ncompression.</para>\n\n<para>Custom memory allocators are supported, via fields\n<computeroutput>bzalloc</computeroutput>,\n<computeroutput>bzfree</computeroutput>, and\n<computeroutput>opaque</computeroutput>.  The value\n<computeroutput>opaque</computeroutput> is passed to as the first\nargument to all calls to <computeroutput>bzalloc</computeroutput>\nand <computeroutput>bzfree</computeroutput>, but is otherwise\nignored by the library.  The call <computeroutput>bzalloc (\nopaque, n, m )</computeroutput> is expected to return a pointer\n<computeroutput>p</computeroutput> to <computeroutput>n *\nm</computeroutput> bytes of memory, and <computeroutput>bzfree (\nopaque, p )</computeroutput> should free that memory.</para>\n\n<para>If you don't want to use a custom memory allocator, set\n<computeroutput>bzalloc</computeroutput>,\n<computeroutput>bzfree</computeroutput> and\n<computeroutput>opaque</computeroutput> to\n<computeroutput>NULL</computeroutput>, and the library will then\nuse the standard <computeroutput>malloc</computeroutput> /\n<computeroutput>free</computeroutput> routines.</para>\n\n<para>Before calling\n<computeroutput>BZ2_bzCompressInit</computeroutput>, fields\n<computeroutput>bzalloc</computeroutput>,\n<computeroutput>bzfree</computeroutput> and\n<computeroutput>opaque</computeroutput> should be filled\nappropriately, as just described.  Upon return, the internal\nstate will have been allocated and initialised, and\n<computeroutput>total_in_lo32</computeroutput>,\n<computeroutput>total_in_hi32</computeroutput>,\n<computeroutput>total_out_lo32</computeroutput> and\n<computeroutput>total_out_hi32</computeroutput> will have been\nset to zero.  These four fields are used by the library to inform\nthe caller of the total amount of data passed into and out of the\nlibrary, respectively.  You should not try to change them.  As of\nversion 1.0, 64-bit counts are maintained, even on 32-bit\nplatforms, using the <computeroutput>_hi32</computeroutput>\nfields to store the upper 32 bits of the count.  So, for example,\nthe total amount of data in is <computeroutput>(total_in_hi32\n&#60;&#60; 32) + total_in_lo32</computeroutput>.</para>\n\n<para>Parameter <computeroutput>blockSize100k</computeroutput>\nspecifies the block size to be used for compression.  It should\nbe a value between 1 and 9 inclusive, and the actual block size\nused is 100000 x this figure.  9 gives the best compression but\ntakes most memory.</para>\n\n<para>Parameter <computeroutput>verbosity</computeroutput> should\nbe set to a number between 0 and 4 inclusive.  0 is silent, and\ngreater numbers give increasingly verbose monitoring/debugging\noutput.  If the library has been compiled with\n<computeroutput>-DBZ_NO_STDIO</computeroutput>, no such output\nwill appear for any verbosity setting.</para>\n\n<para>Parameter <computeroutput>workFactor</computeroutput>\ncontrols how the compression phase behaves when presented with\nworst case, highly repetitive, input data.  If compression runs\ninto difficulties caused by repetitive data, the library switches\nfrom the standard sorting algorithm to a fallback algorithm.  The\nfallback is slower than the standard algorithm by perhaps a\nfactor of three, but always behaves reasonably, no matter how bad\nthe input.</para>\n\n<para>Lower values of <computeroutput>workFactor</computeroutput>\nreduce the amount of effort the standard algorithm will expend\nbefore resorting to the fallback.  You should set this parameter\ncarefully; too low, and many inputs will be handled by the\nfallback algorithm and so compress rather slowly, too high, and\nyour average-to-worst case compression times can become very\nlarge.  The default value of 30 gives reasonable behaviour over a\nwide range of circumstances.</para>\n\n<para>Allowable values range from 0 to 250 inclusive.  0 is a\nspecial case, equivalent to using the default value of 30.</para>\n\n<para>Note that the compressed output generated is the same\nregardless of whether or not the fallback algorithm is\nused.</para>\n\n<para>Be aware also that this parameter may disappear entirely in\nfuture versions of the library.  In principle it should be\npossible to devise a good way to automatically choose which\nalgorithm to use.  Such a mechanism would render the parameter\nobsolete.</para>\n\n<para>Possible return values:</para>\n\n<programlisting>\nBZ_CONFIG_ERROR\n  if the library has been mis-compiled\nBZ_PARAM_ERROR\n  if strm is NULL \n  or blockSize < 1 or blockSize > 9\n  or verbosity < 0 or verbosity > 4\n  or workFactor < 0 or workFactor > 250\nBZ_MEM_ERROR \n  if not enough memory is available\nBZ_OK \n  otherwise\n</programlisting>\n\n<para>Allowable next actions:</para>\n\n<programlisting>\nBZ2_bzCompress\n  if BZ_OK is returned\n  no specific action needed in case of error\n</programlisting>\n\n</sect2>\n\n\n<sect2 id=\"bzCompress\" xreflabel=\"BZ2_bzCompress\">\n<title>BZ2_bzCompress</title>\n\n<programlisting>\nint BZ2_bzCompress ( bz_stream *strm, int action );\n</programlisting>\n\n<para>Provides more input and/or output buffer space for the\nlibrary.  The caller maintains input and output buffers, and\ncalls <computeroutput>BZ2_bzCompress</computeroutput> to transfer\ndata between them.</para>\n\n<para>Before each call to\n<computeroutput>BZ2_bzCompress</computeroutput>,\n<computeroutput>next_in</computeroutput> should point at the data\nto be compressed, and <computeroutput>avail_in</computeroutput>\nshould indicate how many bytes the library may read.\n<computeroutput>BZ2_bzCompress</computeroutput> updates\n<computeroutput>next_in</computeroutput>,\n<computeroutput>avail_in</computeroutput> and\n<computeroutput>total_in</computeroutput> to reflect the number\nof bytes it has read.</para>\n\n<para>Similarly, <computeroutput>next_out</computeroutput> should\npoint to a buffer in which the compressed data is to be placed,\nwith <computeroutput>avail_out</computeroutput> indicating how\nmuch output space is available.\n<computeroutput>BZ2_bzCompress</computeroutput> updates\n<computeroutput>next_out</computeroutput>,\n<computeroutput>avail_out</computeroutput> and\n<computeroutput>total_out</computeroutput> to reflect the number\nof bytes output.</para>\n\n<para>You may provide and remove as little or as much data as you\nlike on each call of\n<computeroutput>BZ2_bzCompress</computeroutput>.  In the limit,\nit is acceptable to supply and remove data one byte at a time,\nalthough this would be terribly inefficient.  You should always\nensure that at least one byte of output space is available at\neach call.</para>\n\n<para>A second purpose of\n<computeroutput>BZ2_bzCompress</computeroutput> is to request a\nchange of mode of the compressed stream.</para>\n\n<para>Conceptually, a compressed stream can be in one of four\nstates: IDLE, RUNNING, FLUSHING and FINISHING.  Before\ninitialisation\n(<computeroutput>BZ2_bzCompressInit</computeroutput>) and after\ntermination (<computeroutput>BZ2_bzCompressEnd</computeroutput>),\na stream is regarded as IDLE.</para>\n\n<para>Upon initialisation\n(<computeroutput>BZ2_bzCompressInit</computeroutput>), the stream\nis placed in the RUNNING state.  Subsequent calls to\n<computeroutput>BZ2_bzCompress</computeroutput> should pass\n<computeroutput>BZ_RUN</computeroutput> as the requested action;\nother actions are illegal and will result in\n<computeroutput>BZ_SEQUENCE_ERROR</computeroutput>.</para>\n\n<para>At some point, the calling program will have provided all\nthe input data it wants to.  It will then want to finish up -- in\neffect, asking the library to process any data it might have\nbuffered internally.  In this state,\n<computeroutput>BZ2_bzCompress</computeroutput> will no longer\nattempt to read data from\n<computeroutput>next_in</computeroutput>, but it will want to\nwrite data to <computeroutput>next_out</computeroutput>.  Because\nthe output buffer supplied by the user can be arbitrarily small,\nthe finishing-up operation cannot necessarily be done with a\nsingle call of\n<computeroutput>BZ2_bzCompress</computeroutput>.</para>\n\n<para>Instead, the calling program passes\n<computeroutput>BZ_FINISH</computeroutput> as an action to\n<computeroutput>BZ2_bzCompress</computeroutput>.  This changes\nthe stream's state to FINISHING.  Any remaining input (ie,\n<computeroutput>next_in[0 .. avail_in-1]</computeroutput>) is\ncompressed and transferred to the output buffer.  To do this,\n<computeroutput>BZ2_bzCompress</computeroutput> must be called\nrepeatedly until all the output has been consumed.  At that\npoint, <computeroutput>BZ2_bzCompress</computeroutput> returns\n<computeroutput>BZ_STREAM_END</computeroutput>, and the stream's\nstate is set back to IDLE.\n<computeroutput>BZ2_bzCompressEnd</computeroutput> should then be\ncalled.</para>\n\n<para>Just to make sure the calling program does not cheat, the\nlibrary makes a note of <computeroutput>avail_in</computeroutput>\nat the time of the first call to\n<computeroutput>BZ2_bzCompress</computeroutput> which has\n<computeroutput>BZ_FINISH</computeroutput> as an action (ie, at\nthe time the program has announced its intention to not supply\nany more input).  By comparing this value with that of\n<computeroutput>avail_in</computeroutput> over subsequent calls\nto <computeroutput>BZ2_bzCompress</computeroutput>, the library\ncan detect any attempts to slip in more data to compress.  Any\ncalls for which this is detected will return\n<computeroutput>BZ_SEQUENCE_ERROR</computeroutput>.  This\nindicates a programming mistake which should be corrected.</para>\n\n<para>Instead of asking to finish, the calling program may ask\n<computeroutput>BZ2_bzCompress</computeroutput> to take all the\nremaining input, compress it and terminate the current\n(Burrows-Wheeler) compression block.  This could be useful for\nerror control purposes.  The mechanism is analogous to that for\nfinishing: call <computeroutput>BZ2_bzCompress</computeroutput>\nwith an action of <computeroutput>BZ_FLUSH</computeroutput>,\nremove output data, and persist with the\n<computeroutput>BZ_FLUSH</computeroutput> action until the value\n<computeroutput>BZ_RUN</computeroutput> is returned.  As with\nfinishing, <computeroutput>BZ2_bzCompress</computeroutput>\ndetects any attempt to provide more input data once the flush has\nbegun.</para>\n\n<para>Once the flush is complete, the stream returns to the\nnormal RUNNING state.</para>\n\n<para>This all sounds pretty complex, but isn't really.  Here's a\ntable which shows which actions are allowable in each state, what\naction will be taken, what the next state is, and what the\nnon-error return values are.  Note that you can't explicitly ask\nwhat state the stream is in, but nor do you need to -- it can be\ninferred from the values returned by\n<computeroutput>BZ2_bzCompress</computeroutput>.</para>\n\n<programlisting>\nIDLE/any\n  Illegal.  IDLE state only exists after BZ2_bzCompressEnd or\n  before BZ2_bzCompressInit.\n  Return value = BZ_SEQUENCE_ERROR\n\nRUNNING/BZ_RUN\n  Compress from next_in to next_out as much as possible.\n  Next state = RUNNING\n  Return value = BZ_RUN_OK\n\nRUNNING/BZ_FLUSH\n  Remember current value of next_in. Compress from next_in\n  to next_out as much as possible, but do not accept any more input.\n  Next state = FLUSHING\n  Return value = BZ_FLUSH_OK\n\nRUNNING/BZ_FINISH\n  Remember current value of next_in. Compress from next_in\n  to next_out as much as possible, but do not accept any more input.\n  Next state = FINISHING\n  Return value = BZ_FINISH_OK\n\nFLUSHING/BZ_FLUSH\n  Compress from next_in to next_out as much as possible, \n  but do not accept any more input.\n  If all the existing input has been used up and all compressed\n  output has been removed\n    Next state = RUNNING; Return value = BZ_RUN_OK\n  else\n    Next state = FLUSHING; Return value = BZ_FLUSH_OK\n\nFLUSHING/other     \n  Illegal.\n  Return value = BZ_SEQUENCE_ERROR\n\nFINISHING/BZ_FINISH\n  Compress from next_in to next_out as much as possible,\n  but to not accept any more input.  \n  If all the existing input has been used up and all compressed\n  output has been removed\n    Next state = IDLE; Return value = BZ_STREAM_END\n  else\n    Next state = FINISHING; Return value = BZ_FINISH_OK\n\nFINISHING/other\n  Illegal.\n  Return value = BZ_SEQUENCE_ERROR\n</programlisting>\n\n\n<para>That still looks complicated?  Well, fair enough.  The\nusual sequence of calls for compressing a load of data is:</para>\n\n<orderedlist>\n\n <listitem><para>Get started with\n  <computeroutput>BZ2_bzCompressInit</computeroutput>.</para></listitem>\n\n <listitem><para>Shovel data in and shlurp out its compressed form\n  using zero or more calls of\n  <computeroutput>BZ2_bzCompress</computeroutput> with action =\n  <computeroutput>BZ_RUN</computeroutput>.</para></listitem>\n\n <listitem><para>Finish up. Repeatedly call\n  <computeroutput>BZ2_bzCompress</computeroutput> with action =\n  <computeroutput>BZ_FINISH</computeroutput>, copying out the\n  compressed output, until\n  <computeroutput>BZ_STREAM_END</computeroutput> is\n  returned.</para></listitem> <listitem><para>Close up and go home.  Call\n  <computeroutput>BZ2_bzCompressEnd</computeroutput>.</para></listitem>\n\n</orderedlist>\n\n<para>If the data you want to compress fits into your input\nbuffer all at once, you can skip the calls of\n<computeroutput>BZ2_bzCompress ( ..., BZ_RUN )</computeroutput>\nand just do the <computeroutput>BZ2_bzCompress ( ..., BZ_FINISH\n)</computeroutput> calls.</para>\n\n<para>All required memory is allocated by\n<computeroutput>BZ2_bzCompressInit</computeroutput>.  The\ncompression library can accept any data at all (obviously).  So\nyou shouldn't get any error return values from the\n<computeroutput>BZ2_bzCompress</computeroutput> calls.  If you\ndo, they will be\n<computeroutput>BZ_SEQUENCE_ERROR</computeroutput>, and indicate\na bug in your programming.</para>\n\n<para>Trivial other possible return values:</para>\n\n<programlisting>\nBZ_PARAM_ERROR\n  if strm is NULL, or strm->s is NULL\n</programlisting>\n\n</sect2>\n\n\n<sect2 id=\"bzCompress-end\" xreflabel=\"BZ2_bzCompressEnd\">\n<title>BZ2_bzCompressEnd</title>\n\n<programlisting>\nint BZ2_bzCompressEnd ( bz_stream *strm );\n</programlisting>\n\n<para>Releases all memory associated with a compression\nstream.</para>\n\n<para>Possible return values:</para>\n\n<programlisting>\nBZ_PARAM_ERROR  if strm is NULL or strm->s is NULL\nBZ_OK           otherwise\n</programlisting>\n\n</sect2>\n\n\n<sect2 id=\"bzDecompress-init\" xreflabel=\"BZ2_bzDecompressInit\">\n<title>BZ2_bzDecompressInit</title>\n\n<programlisting>\nint BZ2_bzDecompressInit ( bz_stream *strm, int verbosity, int small );\n</programlisting>\n\n<para>Prepares for decompression.  As with\n<computeroutput>BZ2_bzCompressInit</computeroutput>, a\n<computeroutput>bz_stream</computeroutput> record should be\nallocated and initialised before the call.  Fields\n<computeroutput>bzalloc</computeroutput>,\n<computeroutput>bzfree</computeroutput> and\n<computeroutput>opaque</computeroutput> should be set if a custom\nmemory allocator is required, or made\n<computeroutput>NULL</computeroutput> for the normal\n<computeroutput>malloc</computeroutput> /\n<computeroutput>free</computeroutput> routines.  Upon return, the\ninternal state will have been initialised, and\n<computeroutput>total_in</computeroutput> and\n<computeroutput>total_out</computeroutput> will be zero.</para>\n\n<para>For the meaning of parameter\n<computeroutput>verbosity</computeroutput>, see\n<computeroutput>BZ2_bzCompressInit</computeroutput>.</para>\n\n<para>If <computeroutput>small</computeroutput> is nonzero, the\nlibrary will use an alternative decompression algorithm which\nuses less memory but at the cost of decompressing more slowly\n(roughly speaking, half the speed, but the maximum memory\nrequirement drops to around 2300k).  See <xref linkend=\"using\"/>\nfor more information on memory management.</para>\n\n<para>Note that the amount of memory needed to decompress a\nstream cannot be determined until the stream's header has been\nread, so even if\n<computeroutput>BZ2_bzDecompressInit</computeroutput> succeeds, a\nsubsequent <computeroutput>BZ2_bzDecompress</computeroutput>\ncould fail with\n<computeroutput>BZ_MEM_ERROR</computeroutput>.</para>\n\n<para>Possible return values:</para>\n\n<programlisting>\nBZ_CONFIG_ERROR\n  if the library has been mis-compiled\nBZ_PARAM_ERROR\n  if ( small != 0 && small != 1 )\n  or (verbosity <; 0 || verbosity > 4)\nBZ_MEM_ERROR\n  if insufficient memory is available\n</programlisting>\n\n<para>Allowable next actions:</para>\n\n<programlisting>\nBZ2_bzDecompress\n  if BZ_OK was returned\n  no specific action required in case of error\n</programlisting>\n\n</sect2>\n\n\n<sect2 id=\"bzDecompress\" xreflabel=\"BZ2_bzDecompress\">\n<title>BZ2_bzDecompress</title>\n\n<programlisting>\nint BZ2_bzDecompress ( bz_stream *strm );\n</programlisting>\n\n<para>Provides more input and/out output buffer space for the\nlibrary.  The caller maintains input and output buffers, and uses\n<computeroutput>BZ2_bzDecompress</computeroutput> to transfer\ndata between them.</para>\n\n<para>Before each call to\n<computeroutput>BZ2_bzDecompress</computeroutput>,\n<computeroutput>next_in</computeroutput> should point at the\ncompressed data, and <computeroutput>avail_in</computeroutput>\nshould indicate how many bytes the library may read.\n<computeroutput>BZ2_bzDecompress</computeroutput> updates\n<computeroutput>next_in</computeroutput>,\n<computeroutput>avail_in</computeroutput> and\n<computeroutput>total_in</computeroutput> to reflect the number\nof bytes it has read.</para>\n\n<para>Similarly, <computeroutput>next_out</computeroutput> should\npoint to a buffer in which the uncompressed output is to be\nplaced, with <computeroutput>avail_out</computeroutput>\nindicating how much output space is available.\n<computeroutput>BZ2_bzCompress</computeroutput> updates\n<computeroutput>next_out</computeroutput>,\n<computeroutput>avail_out</computeroutput> and\n<computeroutput>total_out</computeroutput> to reflect the number\nof bytes output.</para>\n\n<para>You may provide and remove as little or as much data as you\nlike on each call of\n<computeroutput>BZ2_bzDecompress</computeroutput>.  In the limit,\nit is acceptable to supply and remove data one byte at a time,\nalthough this would be terribly inefficient.  You should always\nensure that at least one byte of output space is available at\neach call.</para>\n\n<para>Use of <computeroutput>BZ2_bzDecompress</computeroutput> is\nsimpler than\n<computeroutput>BZ2_bzCompress</computeroutput>.</para>\n\n<para>You should provide input and remove output as described\nabove, and repeatedly call\n<computeroutput>BZ2_bzDecompress</computeroutput> until\n<computeroutput>BZ_STREAM_END</computeroutput> is returned.\nAppearance of <computeroutput>BZ_STREAM_END</computeroutput>\ndenotes that <computeroutput>BZ2_bzDecompress</computeroutput>\nhas detected the logical end of the compressed stream.\n<computeroutput>BZ2_bzDecompress</computeroutput> will not\nproduce <computeroutput>BZ_STREAM_END</computeroutput> until all\noutput data has been placed into the output buffer, so once\n<computeroutput>BZ_STREAM_END</computeroutput> appears, you are\nguaranteed to have available all the decompressed output, and\n<computeroutput>BZ2_bzDecompressEnd</computeroutput> can safely\nbe called.</para>\n\n<para>If case of an error return value, you should call\n<computeroutput>BZ2_bzDecompressEnd</computeroutput> to clean up\nand release memory.</para>\n\n<para>Possible return values:</para>\n\n<programlisting>\nBZ_PARAM_ERROR\n  if strm is NULL or strm->s is NULL\n  or strm->avail_out < 1\nBZ_DATA_ERROR\n  if a data integrity error is detected in the compressed stream\nBZ_DATA_ERROR_MAGIC\n  if the compressed stream doesn't begin with the right magic bytes\nBZ_MEM_ERROR\n  if there wasn't enough memory available\nBZ_STREAM_END\n  if the logical end of the data stream was detected and all\n  output in has been consumed, eg s-->avail_out > 0\nBZ_OK\n  otherwise\n</programlisting>\n\n<para>Allowable next actions:</para>\n\n<programlisting>\nBZ2_bzDecompress\n  if BZ_OK was returned\nBZ2_bzDecompressEnd\n  otherwise\n</programlisting>\n\n</sect2>\n\n\n<sect2 id=\"bzDecompress-end\" xreflabel=\"BZ2_bzDecompressEnd\">\n<title>BZ2_bzDecompressEnd</title>\n\n<programlisting>\nint BZ2_bzDecompressEnd ( bz_stream *strm );\n</programlisting>\n\n<para>Releases all memory associated with a decompression\nstream.</para>\n\n<para>Possible return values:</para>\n\n<programlisting>\nBZ_PARAM_ERROR\n  if strm is NULL or strm->s is NULL\nBZ_OK\n  otherwise\n</programlisting>\n\n<para>Allowable next actions:</para>\n\n<programlisting>\n  None.\n</programlisting>\n\n</sect2>\n\n</sect1>\n\n\n<sect1 id=\"hl-interface\" xreflabel=\"High-level interface\">\n<title>High-level interface</title>\n\n<para>This interface provides functions for reading and writing\n<computeroutput>bzip2</computeroutput> format files.  First, some\ngeneral points.</para>\n\n<itemizedlist mark='bullet'>\n\n <listitem><para>All of the functions take an\n  <computeroutput>int*</computeroutput> first argument,\n  <computeroutput>bzerror</computeroutput>.  After each call,\n  <computeroutput>bzerror</computeroutput> should be consulted\n  first to determine the outcome of the call.  If\n  <computeroutput>bzerror</computeroutput> is\n  <computeroutput>BZ_OK</computeroutput>, the call completed\n  successfully, and only then should the return value of the\n  function (if any) be consulted.  If\n  <computeroutput>bzerror</computeroutput> is\n  <computeroutput>BZ_IO_ERROR</computeroutput>, there was an\n  error reading/writing the underlying compressed file, and you\n  should then consult <computeroutput>errno</computeroutput> /\n  <computeroutput>perror</computeroutput> to determine the cause\n  of the difficulty.  <computeroutput>bzerror</computeroutput>\n  may also be set to various other values; precise details are\n  given on a per-function basis below.</para></listitem>\n\n <listitem><para>If <computeroutput>bzerror</computeroutput> indicates\n  an error (ie, anything except\n  <computeroutput>BZ_OK</computeroutput> and\n  <computeroutput>BZ_STREAM_END</computeroutput>), you should\n  immediately call\n  <computeroutput>BZ2_bzReadClose</computeroutput> (or\n  <computeroutput>BZ2_bzWriteClose</computeroutput>, depending on\n  whether you are attempting to read or to write) to free up all\n  resources associated with the stream.  Once an error has been\n  indicated, behaviour of all calls except\n  <computeroutput>BZ2_bzReadClose</computeroutput>\n  (<computeroutput>BZ2_bzWriteClose</computeroutput>) is\n  undefined.  The implication is that (1)\n  <computeroutput>bzerror</computeroutput> should be checked\n  after each call, and (2) if\n  <computeroutput>bzerror</computeroutput> indicates an error,\n  <computeroutput>BZ2_bzReadClose</computeroutput>\n  (<computeroutput>BZ2_bzWriteClose</computeroutput>) should then\n  be called to clean up.</para></listitem>\n\n <listitem><para>The <computeroutput>FILE*</computeroutput> arguments\n  passed to <computeroutput>BZ2_bzReadOpen</computeroutput> /\n  <computeroutput>BZ2_bzWriteOpen</computeroutput> should be set\n  to binary mode.  Most Unix systems will do this by default, but\n  other platforms, including Windows and Mac, will not.  If you\n  omit this, you may encounter problems when moving code to new\n  platforms.</para></listitem>\n\n <listitem><para>Memory allocation requests are handled by\n  <computeroutput>malloc</computeroutput> /\n  <computeroutput>free</computeroutput>.  At present there is no\n  facility for user-defined memory allocators in the file I/O\n  functions (could easily be added, though).</para></listitem>\n\n</itemizedlist>\n\n\n\n<sect2 id=\"bzreadopen\" xreflabel=\"BZ2_bzReadOpen\">\n<title>BZ2_bzReadOpen</title>\n\n<programlisting>\ntypedef void BZFILE;\n\nBZFILE *BZ2_bzReadOpen( int *bzerror, FILE *f, \n                        int verbosity, int small,\n                        void *unused, int nUnused );\n</programlisting>\n\n<para>Prepare to read compressed data from file handle\n<computeroutput>f</computeroutput>.\n<computeroutput>f</computeroutput> should refer to a file which\nhas been opened for reading, and for which the error indicator\n(<computeroutput>ferror(f)</computeroutput>)is not set.  If\n<computeroutput>small</computeroutput> is 1, the library will try\nto decompress using less memory, at the expense of speed.</para>\n\n<para>For reasons explained below,\n<computeroutput>BZ2_bzRead</computeroutput> will decompress the\n<computeroutput>nUnused</computeroutput> bytes starting at\n<computeroutput>unused</computeroutput>, before starting to read\nfrom the file <computeroutput>f</computeroutput>.  At most\n<computeroutput>BZ_MAX_UNUSED</computeroutput> bytes may be\nsupplied like this.  If this facility is not required, you should\npass <computeroutput>NULL</computeroutput> and\n<computeroutput>0</computeroutput> for\n<computeroutput>unused</computeroutput> and\nn<computeroutput>Unused</computeroutput> respectively.</para>\n\n<para>For the meaning of parameters\n<computeroutput>small</computeroutput> and\n<computeroutput>verbosity</computeroutput>, see\n<computeroutput>BZ2_bzDecompressInit</computeroutput>.</para>\n\n<para>The amount of memory needed to decompress a file cannot be\ndetermined until the file's header has been read.  So it is\npossible that <computeroutput>BZ2_bzReadOpen</computeroutput>\nreturns <computeroutput>BZ_OK</computeroutput> but a subsequent\ncall of <computeroutput>BZ2_bzRead</computeroutput> will return\n<computeroutput>BZ_MEM_ERROR</computeroutput>.</para>\n\n<para>Possible assignments to\n<computeroutput>bzerror</computeroutput>:</para>\n\n<programlisting>\nBZ_CONFIG_ERROR\n  if the library has been mis-compiled\nBZ_PARAM_ERROR\n  if f is NULL\n  or small is neither 0 nor 1\n  or ( unused == NULL && nUnused != 0 )\n  or ( unused != NULL && !(0 <= nUnused <= BZ_MAX_UNUSED) )\nBZ_IO_ERROR\n  if ferror(f) is nonzero\nBZ_MEM_ERROR\n  if insufficient memory is available\nBZ_OK\n  otherwise.\n</programlisting>\n\n<para>Possible return values:</para>\n\n<programlisting>\nPointer to an abstract BZFILE\n  if bzerror is BZ_OK\nNULL\n  otherwise\n</programlisting>\n\n<para>Allowable next actions:</para>\n\n<programlisting>\nBZ2_bzRead\n  if bzerror is BZ_OK\nBZ2_bzClose\n  otherwise\n</programlisting>\n\n</sect2>\n\n\n<sect2 id=\"bzread\" xreflabel=\"BZ2_bzRead\">\n<title>BZ2_bzRead</title>\n\n<programlisting>\nint BZ2_bzRead ( int *bzerror, BZFILE *b, void *buf, int len );\n</programlisting>\n\n<para>Reads up to <computeroutput>len</computeroutput>\n(uncompressed) bytes from the compressed file\n<computeroutput>b</computeroutput> into the buffer\n<computeroutput>buf</computeroutput>.  If the read was\nsuccessful, <computeroutput>bzerror</computeroutput> is set to\n<computeroutput>BZ_OK</computeroutput> and the number of bytes\nread is returned.  If the logical end-of-stream was detected,\n<computeroutput>bzerror</computeroutput> will be set to\n<computeroutput>BZ_STREAM_END</computeroutput>, and the number of\nbytes read is returned.  All other\n<computeroutput>bzerror</computeroutput> values denote an\nerror.</para>\n\n<para><computeroutput>BZ2_bzRead</computeroutput> will supply\n<computeroutput>len</computeroutput> bytes, unless the logical\nstream end is detected or an error occurs.  Because of this, it\nis possible to detect the stream end by observing when the number\nof bytes returned is less than the number requested.\nNevertheless, this is regarded as inadvisable; you should instead\ncheck <computeroutput>bzerror</computeroutput> after every call\nand watch out for\n<computeroutput>BZ_STREAM_END</computeroutput>.</para>\n\n<para>Internally, <computeroutput>BZ2_bzRead</computeroutput>\ncopies data from the compressed file in chunks of size\n<computeroutput>BZ_MAX_UNUSED</computeroutput> bytes before\ndecompressing it.  If the file contains more bytes than strictly\nneeded to reach the logical end-of-stream,\n<computeroutput>BZ2_bzRead</computeroutput> will almost certainly\nread some of the trailing data before signalling\n<computeroutput>BZ_SEQUENCE_END</computeroutput>.  To collect the\nread but unused data once\n<computeroutput>BZ_SEQUENCE_END</computeroutput> has appeared,\ncall <computeroutput>BZ2_bzReadGetUnused</computeroutput>\nimmediately before\n<computeroutput>BZ2_bzReadClose</computeroutput>.</para>\n\n<para>Possible assignments to\n<computeroutput>bzerror</computeroutput>:</para>\n\n<programlisting>\nBZ_PARAM_ERROR\n  if b is NULL or buf is NULL or len < 0\nBZ_SEQUENCE_ERROR\n  if b was opened with BZ2_bzWriteOpen\nBZ_IO_ERROR\n  if there is an error reading from the compressed file\nBZ_UNEXPECTED_EOF\n  if the compressed file ended before \n  the logical end-of-stream was detected\nBZ_DATA_ERROR\n  if a data integrity error was detected in the compressed stream\nBZ_DATA_ERROR_MAGIC\n  if the stream does not begin with the requisite header bytes \n  (ie, is not a bzip2 data file).  This is really \n  a special case of BZ_DATA_ERROR.\nBZ_MEM_ERROR\n  if insufficient memory was available\nBZ_STREAM_END\n  if the logical end of stream was detected.\nBZ_OK\n  otherwise.\n</programlisting>\n\n<para>Possible return values:</para>\n\n<programlisting>\nnumber of bytes read\n  if bzerror is BZ_OK or BZ_STREAM_END\nundefined\n  otherwise\n</programlisting>\n\n<para>Allowable next actions:</para>\n\n<programlisting>\ncollect data from buf, then BZ2_bzRead or BZ2_bzReadClose\n  if bzerror is BZ_OK\ncollect data from buf, then BZ2_bzReadClose or BZ2_bzReadGetUnused\n  if bzerror is BZ_SEQUENCE_END\nBZ2_bzReadClose\n  otherwise\n</programlisting>\n\n</sect2>\n\n\n<sect2 id=\"bzreadgetunused\" xreflabel=\"BZ2_bzReadGetUnused\">\n<title>BZ2_bzReadGetUnused</title>\n\n<programlisting>\nvoid BZ2_bzReadGetUnused( int* bzerror, BZFILE *b, \n                          void** unused, int* nUnused );\n</programlisting>\n\n<para>Returns data which was read from the compressed file but\nwas not needed to get to the logical end-of-stream.\n<computeroutput>*unused</computeroutput> is set to the address of\nthe data, and <computeroutput>*nUnused</computeroutput> to the\nnumber of bytes.  <computeroutput>*nUnused</computeroutput> will\nbe set to a value between <computeroutput>0</computeroutput> and\n<computeroutput>BZ_MAX_UNUSED</computeroutput> inclusive.</para>\n\n<para>This function may only be called once\n<computeroutput>BZ2_bzRead</computeroutput> has signalled\n<computeroutput>BZ_STREAM_END</computeroutput> but before\n<computeroutput>BZ2_bzReadClose</computeroutput>.</para>\n\n<para>Possible assignments to\n<computeroutput>bzerror</computeroutput>:</para>\n\n<programlisting>\nBZ_PARAM_ERROR\n  if b is NULL\n  or unused is NULL or nUnused is NULL\nBZ_SEQUENCE_ERROR\n  if BZ_STREAM_END has not been signalled\n  or if b was opened with BZ2_bzWriteOpen\nBZ_OK\n  otherwise\n</programlisting>\n\n<para>Allowable next actions:</para>\n\n<programlisting>\nBZ2_bzReadClose\n</programlisting>\n\n</sect2>\n\n\n<sect2 id=\"bzreadclose\" xreflabel=\"BZ2_bzReadClose\">\n<title>BZ2_bzReadClose</title>\n\n<programlisting>\nvoid BZ2_bzReadClose ( int *bzerror, BZFILE *b );\n</programlisting>\n\n<para>Releases all memory pertaining to the compressed file\n<computeroutput>b</computeroutput>.\n<computeroutput>BZ2_bzReadClose</computeroutput> does not call\n<computeroutput>fclose</computeroutput> on the underlying file\nhandle, so you should do that yourself if appropriate.\n<computeroutput>BZ2_bzReadClose</computeroutput> should be called\nto clean up after all error situations.</para>\n\n<para>Possible assignments to\n<computeroutput>bzerror</computeroutput>:</para>\n\n<programlisting>\nBZ_SEQUENCE_ERROR\n  if b was opened with BZ2_bzOpenWrite\nBZ_OK\n  otherwise\n</programlisting>\n\n<para>Allowable next actions:</para>\n\n<programlisting>\nnone\n</programlisting>\n\n</sect2>\n\n\n<sect2 id=\"bzwriteopen\" xreflabel=\"BZ2_bzWriteOpen\">\n<title>BZ2_bzWriteOpen</title>\n\n<programlisting>\nBZFILE *BZ2_bzWriteOpen( int *bzerror, FILE *f, \n                         int blockSize100k, int verbosity,\n                         int workFactor );\n</programlisting>\n\n<para>Prepare to write compressed data to file handle\n<computeroutput>f</computeroutput>.\n<computeroutput>f</computeroutput> should refer to a file which\nhas been opened for writing, and for which the error indicator\n(<computeroutput>ferror(f)</computeroutput>)is not set.</para>\n\n<para>For the meaning of parameters\n<computeroutput>blockSize100k</computeroutput>,\n<computeroutput>verbosity</computeroutput> and\n<computeroutput>workFactor</computeroutput>, see\n<computeroutput>BZ2_bzCompressInit</computeroutput>.</para>\n\n<para>All required memory is allocated at this stage, so if the\ncall completes successfully,\n<computeroutput>BZ_MEM_ERROR</computeroutput> cannot be signalled\nby a subsequent call to\n<computeroutput>BZ2_bzWrite</computeroutput>.</para>\n\n<para>Possible assignments to\n<computeroutput>bzerror</computeroutput>:</para>\n\n<programlisting>\nBZ_CONFIG_ERROR\n  if the library has been mis-compiled\nBZ_PARAM_ERROR\n  if f is NULL\n  or blockSize100k < 1 or blockSize100k > 9\nBZ_IO_ERROR\n  if ferror(f) is nonzero\nBZ_MEM_ERROR\n  if insufficient memory is available\nBZ_OK\n  otherwise\n</programlisting>\n\n<para>Possible return values:</para>\n\n<programlisting>\nPointer to an abstract BZFILE\n  if bzerror is BZ_OK\nNULL\n  otherwise\n</programlisting>\n\n<para>Allowable next actions:</para>\n\n<programlisting>\nBZ2_bzWrite\n  if bzerror is BZ_OK\n  (you could go directly to BZ2_bzWriteClose, but this would be pretty pointless)\nBZ2_bzWriteClose\n  otherwise\n</programlisting>\n\n</sect2>\n\n\n<sect2 id=\"bzwrite\" xreflabel=\"BZ2_bzWrite\">\n<title>BZ2_bzWrite</title>\n\n<programlisting>\nvoid BZ2_bzWrite ( int *bzerror, BZFILE *b, void *buf, int len );\n</programlisting>\n\n<para>Absorbs <computeroutput>len</computeroutput> bytes from the\nbuffer <computeroutput>buf</computeroutput>, eventually to be\ncompressed and written to the file.</para>\n\n<para>Possible assignments to\n<computeroutput>bzerror</computeroutput>:</para>\n\n<programlisting>\nBZ_PARAM_ERROR\n  if b is NULL or buf is NULL or len < 0\nBZ_SEQUENCE_ERROR\n  if b was opened with BZ2_bzReadOpen\nBZ_IO_ERROR\n  if there is an error writing the compressed file.\nBZ_OK\n  otherwise\n</programlisting>\n\n</sect2>\n\n\n<sect2 id=\"bzwriteclose\" xreflabel=\"BZ2_bzWriteClose\">\n<title>BZ2_bzWriteClose</title>\n\n<programlisting>\nvoid BZ2_bzWriteClose( int *bzerror, BZFILE* f,\n                       int abandon,\n                       unsigned int* nbytes_in,\n                       unsigned int* nbytes_out );\n\nvoid BZ2_bzWriteClose64( int *bzerror, BZFILE* f,\n                         int abandon,\n                         unsigned int* nbytes_in_lo32,\n                         unsigned int* nbytes_in_hi32,\n                         unsigned int* nbytes_out_lo32,\n                         unsigned int* nbytes_out_hi32 );\n</programlisting>\n\n<para>Compresses and flushes to the compressed file all data so\nfar supplied by <computeroutput>BZ2_bzWrite</computeroutput>.\nThe logical end-of-stream markers are also written, so subsequent\ncalls to <computeroutput>BZ2_bzWrite</computeroutput> are\nillegal.  All memory associated with the compressed file\n<computeroutput>b</computeroutput> is released.\n<computeroutput>fflush</computeroutput> is called on the\ncompressed file, but it is not\n<computeroutput>fclose</computeroutput>'d.</para>\n\n<para>If <computeroutput>BZ2_bzWriteClose</computeroutput> is\ncalled to clean up after an error, the only action is to release\nthe memory.  The library records the error codes issued by\nprevious calls, so this situation will be detected automatically.\nThere is no attempt to complete the compression operation, nor to\n<computeroutput>fflush</computeroutput> the compressed file.  You\ncan force this behaviour to happen even in the case of no error,\nby passing a nonzero value to\n<computeroutput>abandon</computeroutput>.</para>\n\n<para>If <computeroutput>nbytes_in</computeroutput> is non-null,\n<computeroutput>*nbytes_in</computeroutput> will be set to be the\ntotal volume of uncompressed data handled.  Similarly,\n<computeroutput>nbytes_out</computeroutput> will be set to the\ntotal volume of compressed data written.  For compatibility with\nolder versions of the library,\n<computeroutput>BZ2_bzWriteClose</computeroutput> only yields the\nlower 32 bits of these counts.  Use\n<computeroutput>BZ2_bzWriteClose64</computeroutput> if you want\nthe full 64 bit counts.  These two functions are otherwise\nabsolutely identical.</para>\n\n<para>Possible assignments to\n<computeroutput>bzerror</computeroutput>:</para>\n\n<programlisting>\nBZ_SEQUENCE_ERROR\n  if b was opened with BZ2_bzReadOpen\nBZ_IO_ERROR\n  if there is an error writing the compressed file\nBZ_OK\n  otherwise\n</programlisting>\n\n</sect2>\n\n\n<sect2 id=\"embed\" xreflabel=\"Handling embedded compressed data streams\">\n<title>Handling embedded compressed data streams</title>\n\n<para>The high-level library facilitates use of\n<computeroutput>bzip2</computeroutput> data streams which form\nsome part of a surrounding, larger data stream.</para>\n\n<itemizedlist mark='bullet'>\n\n <listitem><para>For writing, the library takes an open file handle,\n  writes compressed data to it,\n  <computeroutput>fflush</computeroutput>es it but does not\n  <computeroutput>fclose</computeroutput> it.  The calling\n  application can write its own data before and after the\n  compressed data stream, using that same file handle.</para></listitem>\n\n <listitem><para>Reading is more complex, and the facilities are not as\n  general as they could be since generality is hard to reconcile\n  with efficiency.  <computeroutput>BZ2_bzRead</computeroutput>\n  reads from the compressed file in blocks of size\n  <computeroutput>BZ_MAX_UNUSED</computeroutput> bytes, and in\n  doing so probably will overshoot the logical end of compressed\n  stream.  To recover this data once decompression has ended,\n  call <computeroutput>BZ2_bzReadGetUnused</computeroutput> after\n  the last call of <computeroutput>BZ2_bzRead</computeroutput>\n  (the one returning\n  <computeroutput>BZ_STREAM_END</computeroutput>) but before\n  calling\n  <computeroutput>BZ2_bzReadClose</computeroutput>.</para></listitem>\n\n</itemizedlist>\n\n<para>This mechanism makes it easy to decompress multiple\n<computeroutput>bzip2</computeroutput> streams placed end-to-end.\nAs the end of one stream, when\n<computeroutput>BZ2_bzRead</computeroutput> returns\n<computeroutput>BZ_STREAM_END</computeroutput>, call\n<computeroutput>BZ2_bzReadGetUnused</computeroutput> to collect\nthe unused data (copy it into your own buffer somewhere).  That\ndata forms the start of the next compressed stream.  To start\nuncompressing that next stream, call\n<computeroutput>BZ2_bzReadOpen</computeroutput> again, feeding in\nthe unused data via the <computeroutput>unused</computeroutput> /\n<computeroutput>nUnused</computeroutput> parameters.  Keep doing\nthis until <computeroutput>BZ_STREAM_END</computeroutput> return\ncoincides with the physical end of file\n(<computeroutput>feof(f)</computeroutput>).  In this situation\n<computeroutput>BZ2_bzReadGetUnused</computeroutput> will of\ncourse return no data.</para>\n\n<para>This should give some feel for how the high-level interface\ncan be used.  If you require extra flexibility, you'll have to\nbite the bullet and get to grips with the low-level\ninterface.</para>\n\n</sect2>\n\n\n<sect2 id=\"std-rdwr\" xreflabel=\"Standard file-reading/writing code\">\n<title>Standard file-reading/writing code</title>\n\n<para>Here's how you'd write data to a compressed file:</para>\n\n<programlisting>\nFILE*   f;\nBZFILE* b;\nint     nBuf;\nchar    buf[ /* whatever size you like */ ];\nint     bzerror;\nint     nWritten;\n\nf = fopen ( \"myfile.bz2\", \"w\" );\nif ( !f ) {\n /* handle error */\n}\nb = BZ2_bzWriteOpen( &bzerror, f, 9 );\nif (bzerror != BZ_OK) {\n BZ2_bzWriteClose ( b );\n /* handle error */\n}\n\nwhile ( /* condition */ ) {\n /* get data to write into buf, and set nBuf appropriately */\n nWritten = BZ2_bzWrite ( &bzerror, b, buf, nBuf );\n if (bzerror == BZ_IO_ERROR) { \n   BZ2_bzWriteClose ( &bzerror, b );\n   /* handle error */\n }\n}\n\nBZ2_bzWriteClose( &bzerror, b );\nif (bzerror == BZ_IO_ERROR) {\n /* handle error */\n}\n</programlisting>\n\n<para>And to read from a compressed file:</para>\n\n<programlisting>\nFILE*   f;\nBZFILE* b;\nint     nBuf;\nchar    buf[ /* whatever size you like */ ];\nint     bzerror;\nint     nWritten;\n\nf = fopen ( \"myfile.bz2\", \"r\" );\nif ( !f ) {\n  /* handle error */\n}\nb = BZ2_bzReadOpen ( &bzerror, f, 0, NULL, 0 );\nif ( bzerror != BZ_OK ) {\n  BZ2_bzReadClose ( &bzerror, b );\n  /* handle error */\n}\n\nbzerror = BZ_OK;\nwhile ( bzerror == BZ_OK && /* arbitrary other conditions */) {\n  nBuf = BZ2_bzRead ( &bzerror, b, buf, /* size of buf */ );\n  if ( bzerror == BZ_OK ) {\n    /* do something with buf[0 .. nBuf-1] */\n  }\n}\nif ( bzerror != BZ_STREAM_END ) {\n   BZ2_bzReadClose ( &bzerror, b );\n   /* handle error */\n} else {\n   BZ2_bzReadClose ( &bzerror, b );\n}\n</programlisting>\n\n</sect2>\n\n</sect1>\n\n\n<sect1 id=\"util-fns\" xreflabel=\"Utility functions\">\n<title>Utility functions</title>\n\n\n<sect2 id=\"bzbufftobuffcompress\" xreflabel=\"BZ2_bzBuffToBuffCompress\">\n<title>BZ2_bzBuffToBuffCompress</title>\n\n<programlisting>\nint BZ2_bzBuffToBuffCompress( char*         dest,\n                              unsigned int* destLen,\n                              char*         source,\n                              unsigned int  sourceLen,\n                              int           blockSize100k,\n                              int           verbosity,\n                              int           workFactor );\n</programlisting>\n\n<para>Attempts to compress the data in <computeroutput>source[0\n.. sourceLen-1]</computeroutput> into the destination buffer,\n<computeroutput>dest[0 .. *destLen-1]</computeroutput>.  If the\ndestination buffer is big enough,\n<computeroutput>*destLen</computeroutput> is set to the size of\nthe compressed data, and <computeroutput>BZ_OK</computeroutput>\nis returned.  If the compressed data won't fit,\n<computeroutput>*destLen</computeroutput> is unchanged, and\n<computeroutput>BZ_OUTBUFF_FULL</computeroutput> is\nreturned.</para>\n\n<para>Compression in this manner is a one-shot event, done with a\nsingle call to this function.  The resulting compressed data is a\ncomplete <computeroutput>bzip2</computeroutput> format data\nstream.  There is no mechanism for making additional calls to\nprovide extra input data.  If you want that kind of mechanism,\nuse the low-level interface.</para>\n\n<para>For the meaning of parameters\n<computeroutput>blockSize100k</computeroutput>,\n<computeroutput>verbosity</computeroutput> and\n<computeroutput>workFactor</computeroutput>, see\n<computeroutput>BZ2_bzCompressInit</computeroutput>.</para>\n\n<para>To guarantee that the compressed data will fit in its\nbuffer, allocate an output buffer of size 1% larger than the\nuncompressed data, plus six hundred extra bytes.</para>\n\n<para><computeroutput>BZ2_bzBuffToBuffDecompress</computeroutput>\nwill not write data at or beyond\n<computeroutput>dest[*destLen]</computeroutput>, even in case of\nbuffer overflow.</para>\n\n<para>Possible return values:</para>\n\n<programlisting>\nBZ_CONFIG_ERROR\n  if the library has been mis-compiled\nBZ_PARAM_ERROR\n  if dest is NULL or destLen is NULL\n  or blockSize100k < 1 or blockSize100k > 9\n  or verbosity < 0 or verbosity > 4\n  or workFactor < 0 or workFactor > 250\nBZ_MEM_ERROR\n  if insufficient memory is available \nBZ_OUTBUFF_FULL\n  if the size of the compressed data exceeds *destLen\nBZ_OK\n  otherwise\n</programlisting>\n\n</sect2>\n\n\n<sect2 id=\"bzbufftobuffdecompress\" xreflabel=\"BZ2_bzBuffToBuffDecompress\">\n<title>BZ2_bzBuffToBuffDecompress</title>\n\n<programlisting>\nint BZ2_bzBuffToBuffDecompress( char*         dest,\n                                unsigned int* destLen,\n                                char*         source,\n                                unsigned int  sourceLen,\n                                int           small,\n                                int           verbosity );\n</programlisting>\n\n<para>Attempts to decompress the data in <computeroutput>source[0\n.. sourceLen-1]</computeroutput> into the destination buffer,\n<computeroutput>dest[0 .. *destLen-1]</computeroutput>.  If the\ndestination buffer is big enough,\n<computeroutput>*destLen</computeroutput> is set to the size of\nthe uncompressed data, and <computeroutput>BZ_OK</computeroutput>\nis returned.  If the compressed data won't fit,\n<computeroutput>*destLen</computeroutput> is unchanged, and\n<computeroutput>BZ_OUTBUFF_FULL</computeroutput> is\nreturned.</para>\n\n<para><computeroutput>source</computeroutput> is assumed to hold\na complete <computeroutput>bzip2</computeroutput> format data\nstream.\n<computeroutput>BZ2_bzBuffToBuffDecompress</computeroutput> tries\nto decompress the entirety of the stream into the output\nbuffer.</para>\n\n<para>For the meaning of parameters\n<computeroutput>small</computeroutput> and\n<computeroutput>verbosity</computeroutput>, see\n<computeroutput>BZ2_bzDecompressInit</computeroutput>.</para>\n\n<para>Because the compression ratio of the compressed data cannot\nbe known in advance, there is no easy way to guarantee that the\noutput buffer will be big enough.  You may of course make\narrangements in your code to record the size of the uncompressed\ndata, but such a mechanism is beyond the scope of this\nlibrary.</para>\n\n<para><computeroutput>BZ2_bzBuffToBuffDecompress</computeroutput>\nwill not write data at or beyond\n<computeroutput>dest[*destLen]</computeroutput>, even in case of\nbuffer overflow.</para>\n\n<para>Possible return values:</para>\n\n<programlisting>\nBZ_CONFIG_ERROR\n  if the library has been mis-compiled\nBZ_PARAM_ERROR\n  if dest is NULL or destLen is NULL\n  or small != 0 && small != 1\n  or verbosity < 0 or verbosity > 4\nBZ_MEM_ERROR\n  if insufficient memory is available \nBZ_OUTBUFF_FULL\n  if the size of the compressed data exceeds *destLen\nBZ_DATA_ERROR\n  if a data integrity error was detected in the compressed data\nBZ_DATA_ERROR_MAGIC\n  if the compressed data doesn't begin with the right magic bytes\nBZ_UNEXPECTED_EOF\n  if the compressed data ends unexpectedly\nBZ_OK\n  otherwise\n</programlisting>\n\n</sect2>\n\n</sect1>\n\n\n<sect1 id=\"zlib-compat\" xreflabel=\"zlib compatibility functions\">\n<title>zlib compatibility functions</title>\n\n<para>Yoshioka Tsuneo has contributed some functions to give\nbetter <computeroutput>zlib</computeroutput> compatibility.\nThese functions are <computeroutput>BZ2_bzopen</computeroutput>,\n<computeroutput>BZ2_bzread</computeroutput>,\n<computeroutput>BZ2_bzwrite</computeroutput>,\n<computeroutput>BZ2_bzflush</computeroutput>,\n<computeroutput>BZ2_bzclose</computeroutput>,\n<computeroutput>BZ2_bzerror</computeroutput> and\n<computeroutput>BZ2_bzlibVersion</computeroutput>.  These\nfunctions are not (yet) officially part of the library.  If they\nbreak, you get to keep all the pieces.  Nevertheless, I think\nthey work ok.</para>\n\n<programlisting>\ntypedef void BZFILE;\n\nconst char * BZ2_bzlibVersion ( void );\n</programlisting>\n\n<para>Returns a string indicating the library version.</para>\n\n<programlisting>\nBZFILE * BZ2_bzopen  ( const char *path, const char *mode );\nBZFILE * BZ2_bzdopen ( int        fd,    const char *mode );\n</programlisting>\n\n<para>Opens a <computeroutput>.bz2</computeroutput> file for\nreading or writing, using either its name or a pre-existing file\ndescriptor.  Analogous to <computeroutput>fopen</computeroutput>\nand <computeroutput>fdopen</computeroutput>.</para>\n\n<programlisting>\nint BZ2_bzread  ( BZFILE* b, void* buf, int len );\nint BZ2_bzwrite ( BZFILE* b, void* buf, int len );\n</programlisting>\n\n<para>Reads/writes data from/to a previously opened\n<computeroutput>BZFILE</computeroutput>.  Analogous to\n<computeroutput>fread</computeroutput> and\n<computeroutput>fwrite</computeroutput>.</para>\n\n<programlisting>\nint  BZ2_bzflush ( BZFILE* b );\nvoid BZ2_bzclose ( BZFILE* b );\n</programlisting>\n\n<para>Flushes/closes a <computeroutput>BZFILE</computeroutput>.\n<computeroutput>BZ2_bzflush</computeroutput> doesn't actually do\nanything.  Analogous to <computeroutput>fflush</computeroutput>\nand <computeroutput>fclose</computeroutput>.</para>\n\n<programlisting>\nconst char * BZ2_bzerror ( BZFILE *b, int *errnum )\n</programlisting>\n\n<para>Returns a string describing the more recent error status of\n<computeroutput>b</computeroutput>, and also sets\n<computeroutput>*errnum</computeroutput> to its numerical\nvalue.</para>\n\n</sect1>\n\n\n<sect1 id=\"stdio-free\" \n       xreflabel=\"Using the library in a stdio-free environment\">\n<title>Using the library in a stdio-free environment</title>\n\n\n<sect2 id=\"stdio-bye\" xreflabel=\"Getting rid of stdio\">\n<title>Getting rid of stdio</title>\n\n<para>In a deeply embedded application, you might want to use\njust the memory-to-memory functions.  You can do this\nconveniently by compiling the library with preprocessor symbol\n<computeroutput>BZ_NO_STDIO</computeroutput> defined.  Doing this\ngives you a library containing only the following eight\nfunctions:</para>\n\n<para><computeroutput>BZ2_bzCompressInit</computeroutput>,\n<computeroutput>BZ2_bzCompress</computeroutput>,\n<computeroutput>BZ2_bzCompressEnd</computeroutput>\n<computeroutput>BZ2_bzDecompressInit</computeroutput>,\n<computeroutput>BZ2_bzDecompress</computeroutput>,\n<computeroutput>BZ2_bzDecompressEnd</computeroutput>\n<computeroutput>BZ2_bzBuffToBuffCompress</computeroutput>,\n<computeroutput>BZ2_bzBuffToBuffDecompress</computeroutput></para>\n\n<para>When compiled like this, all functions will ignore\n<computeroutput>verbosity</computeroutput> settings.</para>\n\n</sect2>\n\n\n<sect2 id=\"critical-error\" xreflabel=\"Critical error handling\">\n<title>Critical error handling</title>\n\n<para><computeroutput>libbzip2</computeroutput> contains a number\nof internal assertion checks which should, needless to say, never\nbe activated.  Nevertheless, if an assertion should fail,\nbehaviour depends on whether or not the library was compiled with\n<computeroutput>BZ_NO_STDIO</computeroutput> set.</para>\n\n<para>For a normal compile, an assertion failure yields the\nmessage:</para>\n\n<blockquote>\n<para>bzip2/libbzip2: internal error number N.</para>\n<para>This is a bug in bzip2/libbzip2, &bz-version; of &bz-date;.\nPlease report it to me at: &bz-email;.  If this happened\nwhen you were using some program which uses libbzip2 as a\ncomponent, you should also report this bug to the author(s)\nof that program.  Please make an effort to report this bug;\ntimely and accurate bug reports eventually lead to higher\nquality software.  Thanks.  Julian Seward, &bz-date;.\n</para></blockquote>\n\n<para>where <computeroutput>N</computeroutput> is some error code\nnumber.  If <computeroutput>N == 1007</computeroutput>, it also\nprints some extra text advising the reader that unreliable memory\nis often associated with internal error 1007. (This is a\nfrequently-observed-phenomenon with versions 1.0.0/1.0.1).</para>\n\n<para><computeroutput>exit(3)</computeroutput> is then\ncalled.</para>\n\n<para>For a <computeroutput>stdio</computeroutput>-free library,\nassertion failures result in a call to a function declared\nas:</para>\n\n<programlisting>\nextern void bz_internal_error ( int errcode );\n</programlisting>\n\n<para>The relevant code is passed as a parameter.  You should\nsupply such a function.</para>\n\n<para>In either case, once an assertion failure has occurred, any\n<computeroutput>bz_stream</computeroutput> records involved can\nbe regarded as invalid.  You should not attempt to resume normal\noperation with them.</para>\n\n<para>You may, of course, change critical error handling to suit\nyour needs.  As I said above, critical errors indicate bugs in\nthe library and should not occur.  All \"normal\" error situations\nare indicated via error return codes from functions, and can be\nrecovered from.</para>\n\n</sect2>\n\n</sect1>\n\n\n<sect1 id=\"win-dll\" xreflabel=\"Making a Windows DLL\">\n<title>Making a Windows DLL</title>\n\n<para>Everything related to Windows has been contributed by\nYoshioka Tsuneo\n(<computeroutput>tsuneo@rr.iij4u.or.jp</computeroutput>), so\nyou should send your queries to him (but perhaps Cc: me,\n<computeroutput>&bz-email;</computeroutput>).</para>\n\n<para>My vague understanding of what to do is: using Visual C++\n5.0, open the project file\n<computeroutput>libbz2.dsp</computeroutput>, and build.  That's\nall.</para>\n\n<para>If you can't open the project file for some reason, make a\nnew one, naming these files:\n<computeroutput>blocksort.c</computeroutput>,\n<computeroutput>bzlib.c</computeroutput>,\n<computeroutput>compress.c</computeroutput>,\n<computeroutput>crctable.c</computeroutput>,\n<computeroutput>decompress.c</computeroutput>,\n<computeroutput>huffman.c</computeroutput>,\n<computeroutput>randtable.c</computeroutput> and\n<computeroutput>libbz2.def</computeroutput>.  You will also need\nto name the header files <computeroutput>bzlib.h</computeroutput>\nand <computeroutput>bzlib_private.h</computeroutput>.</para>\n\n<para>If you don't use VC++, you may need to define the\nproprocessor symbol\n<computeroutput>_WIN32</computeroutput>.</para>\n\n<para>Finally, <computeroutput>dlltest.c</computeroutput> is a\nsample program using the DLL.  It has a project file,\n<computeroutput>dlltest.dsp</computeroutput>.</para>\n\n<para>If you just want a makefile for Visual C, have a look at\n<computeroutput>makefile.msc</computeroutput>.</para>\n\n<para>Be aware that if you compile\n<computeroutput>bzip2</computeroutput> itself on Win32, you must\nset <computeroutput>BZ_UNIX</computeroutput> to 0 and\n<computeroutput>BZ_LCCWIN32</computeroutput> to 1, in the file\n<computeroutput>bzip2.c</computeroutput>, before compiling.\nOtherwise the resulting binary won't work correctly.</para>\n\n<para>I haven't tried any of this stuff myself, but it all looks\nplausible.</para>\n\n</sect1>\n\n</chapter>\n\n\n\n<chapter id=\"misc\" xreflabel=\"Miscellanea\">\n<title>Miscellanea</title>\n\n<para>These are just some random thoughts of mine.  Your mileage\nmay vary.</para>\n\n\n<sect1 id=\"limits\" xreflabel=\"Limitations of the compressed file format\">\n<title>Limitations of the compressed file format</title>\n\n<para><computeroutput>bzip2-1.0.X</computeroutput>,\n<computeroutput>0.9.5</computeroutput> and\n<computeroutput>0.9.0</computeroutput> use exactly the same file\nformat as the original version,\n<computeroutput>bzip2-0.1</computeroutput>.  This decision was\nmade in the interests of stability.  Creating yet another\nincompatible compressed file format would create further\nconfusion and disruption for users.</para>\n\n<para>Nevertheless, this is not a painless decision.  Development\nwork since the release of\n<computeroutput>bzip2-0.1</computeroutput> in August 1997 has\nshown complexities in the file format which slow down\ndecompression and, in retrospect, are unnecessary.  These\nare:</para>\n\n<itemizedlist mark='bullet'>\n\n <listitem><para>The run-length encoder, which is the first of the\n   compression transformations, is entirely irrelevant.  The\n   original purpose was to protect the sorting algorithm from the\n   very worst case input: a string of repeated symbols.  But\n   algorithm steps Q6a and Q6b in the original Burrows-Wheeler\n   technical report (SRC-124) show how repeats can be handled\n   without difficulty in block sorting.</para></listitem>\n\n <listitem><para>The randomisation mechanism doesn't really need to be\n   there.  Udi Manber and Gene Myers published a suffix array\n   construction algorithm a few years back, which can be employed\n   to sort any block, no matter how repetitive, in O(N log N)\n   time.  Subsequent work by Kunihiko Sadakane has produced a\n   derivative O(N (log N)^2) algorithm which usually outperforms\n   the Manber-Myers algorithm.</para>\n\n   <para>I could have changed to Sadakane's algorithm, but I find\n   it to be slower than <computeroutput>bzip2</computeroutput>'s\n   existing algorithm for most inputs, and the randomisation\n   mechanism protects adequately against bad cases.  I didn't\n   think it was a good tradeoff to make.  Partly this is due to\n   the fact that I was not flooded with email complaints about\n   <computeroutput>bzip2-0.1</computeroutput>'s performance on\n   repetitive data, so perhaps it isn't a problem for real\n   inputs.</para>\n\n   <para>Probably the best long-term solution, and the one I have\n   incorporated into 0.9.5 and above, is to use the existing\n   sorting algorithm initially, and fall back to a O(N (log N)^2)\n   algorithm if the standard algorithm gets into\n   difficulties.</para></listitem>\n\n  <listitem><para>The compressed file format was never designed to be\n   handled by a library, and I have had to jump though some hoops\n   to produce an efficient implementation of decompression.  It's\n   a bit hairy.  Try passing\n   <computeroutput>decompress.c</computeroutput> through the C\n   preprocessor and you'll see what I mean.  Much of this\n   complexity could have been avoided if the compressed size of\n   each block of data was recorded in the data stream.</para></listitem>\n\n <listitem><para>An Adler-32 checksum, rather than a CRC32 checksum,\n   would be faster to compute.</para></listitem>\n\n</itemizedlist>\n\n<para>It would be fair to say that the\n<computeroutput>bzip2</computeroutput> format was frozen before I\nproperly and fully understood the performance consequences of\ndoing so.</para>\n\n<para>Improvements which I was able to incorporate into 0.9.0,\ndespite using the same file format, are:</para>\n\n<itemizedlist mark='bullet'>\n\n <listitem><para>Single array implementation of the inverse BWT.  This\n  significantly speeds up decompression, presumably because it\n  reduces the number of cache misses.</para></listitem>\n\n <listitem><para>Faster inverse MTF transform for large MTF values.\n  The new implementation is based on the notion of sliding blocks\n  of values.</para></listitem>\n\n <listitem><para><computeroutput>bzip2-0.9.0</computeroutput> now reads\n  and writes files with <computeroutput>fread</computeroutput>\n  and <computeroutput>fwrite</computeroutput>; version 0.1 used\n  <computeroutput>putc</computeroutput> and\n  <computeroutput>getc</computeroutput>.  Duh!  Well, you live\n  and learn.</para></listitem>\n\n</itemizedlist>\n\n<para>Further ahead, it would be nice to be able to do random\naccess into files.  This will require some careful design of\ncompressed file formats.</para>\n\n</sect1>\n\n\n<sect1 id=\"port-issues\" xreflabel=\"Portability issues\">\n<title>Portability issues</title>\n\n<para>After some consideration, I have decided not to use GNU\n<computeroutput>autoconf</computeroutput> to configure 0.9.5 or\n1.0.</para>\n\n<para><computeroutput>autoconf</computeroutput>, admirable and\nwonderful though it is, mainly assists with portability problems\nbetween Unix-like platforms.  But\n<computeroutput>bzip2</computeroutput> doesn't have much in the\nway of portability problems on Unix; most of the difficulties\nappear when porting to the Mac, or to Microsoft's operating\nsystems.  <computeroutput>autoconf</computeroutput> doesn't help\nin those cases, and brings in a whole load of new\ncomplexity.</para>\n\n<para>Most people should be able to compile the library and\nprogram under Unix straight out-of-the-box, so to speak,\nespecially if you have a version of GNU C available.</para>\n\n<para>There are a couple of\n<computeroutput>__inline__</computeroutput> directives in the\ncode.  GNU C (<computeroutput>gcc</computeroutput>) should be\nable to handle them.  If you're not using GNU C, your C compiler\nshouldn't see them at all.  If your compiler does, for some\nreason, see them and doesn't like them, just\n<computeroutput>#define</computeroutput>\n<computeroutput>__inline__</computeroutput> to be\n<computeroutput>/* */</computeroutput>.  One easy way to do this\nis to compile with the flag\n<computeroutput>-D__inline__=</computeroutput>, which should be\nunderstood by most Unix compilers.</para>\n\n<para>If you still have difficulties, try compiling with the\nmacro <computeroutput>BZ_STRICT_ANSI</computeroutput> defined.\nThis should enable you to build the library in a strictly ANSI\ncompliant environment.  Building the program itself like this is\ndangerous and not supported, since you remove\n<computeroutput>bzip2</computeroutput>'s checks against\ncompressing directories, symbolic links, devices, and other\nnot-really-a-file entities.  This could cause filesystem\ncorruption!</para>\n\n<para>One other thing: if you create a\n<computeroutput>bzip2</computeroutput> binary for public distribution,\nplease consider linking it statically (<computeroutput>gcc\n-static</computeroutput>).  This avoids all sorts of library-version\nissues that others may encounter later on.</para>\n\n<para>If you build <computeroutput>bzip2</computeroutput> on\nWin32, you must set <computeroutput>BZ_UNIX</computeroutput> to 0\nand <computeroutput>BZ_LCCWIN32</computeroutput> to 1, in the\nfile <computeroutput>bzip2.c</computeroutput>, before compiling.\nOtherwise the resulting binary won't work correctly.</para>\n\n</sect1>\n\n\n<sect1 id=\"bugs\" xreflabel=\"Reporting bugs\">\n<title>Reporting bugs</title>\n\n<para>I tried pretty hard to make sure\n<computeroutput>bzip2</computeroutput> is bug free, both by\ndesign and by testing.  Hopefully you'll never need to read this\nsection for real.</para>\n\n<para>Nevertheless, if <computeroutput>bzip2</computeroutput> dies\nwith a segmentation fault, a bus error or an internal assertion\nfailure, it will ask you to email me a bug report.  Experience from\nyears of feedback of bzip2 users indicates that almost all these\nproblems can be traced to either compiler bugs or hardware\nproblems.</para>\n\n<itemizedlist mark='bullet'>\n\n <listitem><para>Recompile the program with no optimisation, and\n  see if it works.  And/or try a different compiler.  I heard all\n  sorts of stories about various flavours of GNU C (and other\n  compilers) generating bad code for\n  <computeroutput>bzip2</computeroutput>, and I've run across two\n  such examples myself.</para>\n\n  <para>2.7.X versions of GNU C are known to generate bad code\n  from time to time, at high optimisation levels.  If you get\n  problems, try using the flags\n  <computeroutput>-O2</computeroutput>\n  <computeroutput>-fomit-frame-pointer</computeroutput>\n  <computeroutput>-fno-strength-reduce</computeroutput>.  You\n  should specifically <emphasis>not</emphasis> use\n  <computeroutput>-funroll-loops</computeroutput>.</para>\n\n  <para>You may notice that the Makefile runs six tests as part\n  of the build process.  If the program passes all of these, it's\n  a pretty good (but not 100%) indication that the compiler has\n  done its job correctly.</para></listitem>\n\n <listitem><para>If <computeroutput>bzip2</computeroutput>\n  crashes randomly, and the crashes are not repeatable, you may\n  have a flaky memory subsystem.\n  <computeroutput>bzip2</computeroutput> really hammers your\n  memory hierarchy, and if it's a bit marginal, you may get these\n  problems.  Ditto if your disk or I/O subsystem is slowly\n  failing.  Yup, this really does happen.</para>\n\n  <para>Try using a different machine of the same type, and see\n  if you can repeat the problem.</para></listitem>\n\n  <listitem><para>This isn't really a bug, but ... If\n  <computeroutput>bzip2</computeroutput> tells you your file is\n  corrupted on decompression, and you obtained the file via FTP,\n  there is a possibility that you forgot to tell FTP to do a\n  binary mode transfer.  That absolutely will cause the file to\n  be non-decompressible.  You'll have to transfer it\n  again.</para></listitem>\n\n</itemizedlist>\n\n<para>If you've incorporated\n<computeroutput>libbzip2</computeroutput> into your own program\nand are getting problems, please, please, please, check that the\nparameters you are passing in calls to the library, are correct,\nand in accordance with what the documentation says is allowable.\nI have tried to make the library robust against such problems,\nbut I'm sure I haven't succeeded.</para>\n\n<para>Finally, if the above comments don't help, you'll have to\nsend me a bug report.  Now, it's just amazing how many people\nwill send me a bug report saying something like:</para>\n\n<programlisting>\nbzip2 crashed with segmentation fault on my machine\n</programlisting>\n\n<para>and absolutely nothing else.  Needless to say, a such a\nreport is <emphasis>totally, utterly, completely and\ncomprehensively 100% useless; a waste of your time, my time, and\nnet bandwidth</emphasis>.  With no details at all, there's no way\nI can possibly begin to figure out what the problem is.</para>\n\n<para>The rules of the game are: facts, facts, facts.  Don't omit\nthem because \"oh, they won't be relevant\".  At the bare\nminimum:</para>\n\n<programlisting>\nMachine type.  Operating system version.  \nExact version of bzip2 (do bzip2 -V).  \nExact version of the compiler used.  \nFlags passed to the compiler.\n</programlisting>\n\n<para>However, the most important single thing that will help me\nis the file that you were trying to compress or decompress at the\ntime the problem happened.  Without that, my ability to do\nanything more than speculate about the cause, is limited.</para>\n\n</sect1>\n\n\n<sect1 id=\"package\" xreflabel=\"Did you get the right package?\">\n<title>Did you get the right package?</title>\n\n<para><computeroutput>bzip2</computeroutput> is a resource hog.\nIt soaks up large amounts of CPU cycles and memory.  Also, it\ngives very large latencies.  In the worst case, you can feed many\nmegabytes of uncompressed data into the library before getting\nany compressed output, so this probably rules out applications\nrequiring interactive behaviour.</para>\n\n<para>These aren't faults of my implementation, I hope, but more\nan intrinsic property of the Burrows-Wheeler transform\n(unfortunately).  Maybe this isn't what you want.</para>\n\n<para>If you want a compressor and/or library which is faster,\nuses less memory but gets pretty good compression, and has\nminimal latency, consider Jean-loup Gailly's and Mark Adler's\nwork, <computeroutput>zlib-1.2.1</computeroutput> and\n<computeroutput>gzip-1.2.4</computeroutput>.  Look for them at \n<ulink url=\"http://www.zlib.org\">http://www.zlib.org</ulink> and \n<ulink url=\"http://www.gzip.org\">http://www.gzip.org</ulink>\nrespectively.</para>\n\n<para>For something faster and lighter still, you might try Markus F\nX J Oberhumer's <computeroutput>LZO</computeroutput> real-time\ncompression/decompression library, at \n<ulink url=\"http://www.oberhumer.com/opensource\">http://www.oberhumer.com/opensource</ulink>.</para>\n\n</sect1>\n\n\n\n<sect1 id=\"reading\" xreflabel=\"Further Reading\">\n<title>Further Reading</title>\n\n<para><computeroutput>bzip2</computeroutput> is not research\nwork, in the sense that it doesn't present any new ideas.\nRather, it's an engineering exercise based on existing\nideas.</para>\n\n<para>Four documents describe essentially all the ideas behind\n<computeroutput>bzip2</computeroutput>:</para>\n\n<literallayout>Michael Burrows and D. J. Wheeler:\n  \"A block-sorting lossless data compression algorithm\"\n   10th May 1994. \n   Digital SRC Research Report 124.\n   ftp://ftp.digital.com/pub/DEC/SRC/research-reports/SRC-124.ps.gz\n   If you have trouble finding it, try searching at the\n   New Zealand Digital Library, http://www.nzdl.org.\n\nDaniel S. Hirschberg and Debra A. LeLewer\n  \"Efficient Decoding of Prefix Codes\"\n   Communications of the ACM, April 1990, Vol 33, Number 4.\n   You might be able to get an electronic copy of this\n   from the ACM Digital Library.\n\nDavid J. Wheeler\n   Program bred3.c and accompanying document bred3.ps.\n   This contains the idea behind the multi-table Huffman coding scheme.\n   ftp://ftp.cl.cam.ac.uk/users/djw3/\n\nJon L. Bentley and Robert Sedgewick\n  \"Fast Algorithms for Sorting and Searching Strings\"\n   Available from Sedgewick's web page,\n   www.cs.princeton.edu/~rs\n</literallayout>\n\n<para>The following paper gives valuable additional insights into\nthe algorithm, but is not immediately the basis of any code used\nin bzip2.</para>\n\n<literallayout>Peter Fenwick:\n   Block Sorting Text Compression\n   Proceedings of the 19th Australasian Computer Science Conference,\n     Melbourne, Australia.  Jan 31 - Feb 2, 1996.\n   ftp://ftp.cs.auckland.ac.nz/pub/peter-f/ACSC96paper.ps</literallayout>\n\n<para>Kunihiko Sadakane's sorting algorithm, mentioned above, is\navailable from:</para>\n\n<literallayout>http://naomi.is.s.u-tokyo.ac.jp/~sada/papers/Sada98b.ps.gz\n</literallayout>\n\n<para>The Manber-Myers suffix array construction algorithm is\ndescribed in a paper available from:</para>\n\n<literallayout>http://www.cs.arizona.edu/people/gene/PAPERS/suffix.ps\n</literallayout>\n\n<para>Finally, the following papers document some\ninvestigations I made into the performance of sorting\nand decompression algorithms:</para>\n\n<literallayout>Julian Seward\n   On the Performance of BWT Sorting Algorithms\n   Proceedings of the IEEE Data Compression Conference 2000\n     Snowbird, Utah.  28-30 March 2000.\n\nJulian Seward\n   Space-time Tradeoffs in the Inverse B-W Transform\n   Proceedings of the IEEE Data Compression Conference 2001\n     Snowbird, Utah.  27-29 March 2001.\n</literallayout>\n\n</sect1>\n\n</chapter>\n\n</book>\n"
  },
  {
    "path": "external/bzip2/mk251.c",
    "content": "\n/* Spew out a long sequence of the byte 251.  When fed to bzip2\n   versions 1.0.0 or 1.0.1, causes it to die with internal error\n   1007 in blocksort.c.  This assertion misses an extremely rare\n   case, which is fixed in this version (1.0.2) and above.\n*/\n\n/* ------------------------------------------------------------------\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   Please read the WARNING, DISCLAIMER and PATENTS sections in the \n   README file.\n\n   This program is released under the terms of the license contained\n   in the file LICENSE.\n   ------------------------------------------------------------------ */\n\n\n#include <stdio.h>\n\nint main ()\n{\n   int i;\n   for (i = 0; i < 48500000 ; i++)\n     putchar(251);\n   return 0;\n}\n"
  },
  {
    "path": "external/bzip2/randtable.c",
    "content": "\n/*-------------------------------------------------------------*/\n/*--- Table for randomising repetitive blocks               ---*/\n/*---                                           randtable.c ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   Please read the WARNING, DISCLAIMER and PATENTS sections in the \n   README file.\n\n   This program is released under the terms of the license contained\n   in the file LICENSE.\n   ------------------------------------------------------------------ */\n\n\n#include \"bzlib_private.h\"\n\n\n/*---------------------------------------------*/\nInt32 BZ2_rNums[512] = { \n   619, 720, 127, 481, 931, 816, 813, 233, 566, 247, \n   985, 724, 205, 454, 863, 491, 741, 242, 949, 214, \n   733, 859, 335, 708, 621, 574, 73, 654, 730, 472, \n   419, 436, 278, 496, 867, 210, 399, 680, 480, 51, \n   878, 465, 811, 169, 869, 675, 611, 697, 867, 561, \n   862, 687, 507, 283, 482, 129, 807, 591, 733, 623, \n   150, 238, 59, 379, 684, 877, 625, 169, 643, 105, \n   170, 607, 520, 932, 727, 476, 693, 425, 174, 647, \n   73, 122, 335, 530, 442, 853, 695, 249, 445, 515, \n   909, 545, 703, 919, 874, 474, 882, 500, 594, 612, \n   641, 801, 220, 162, 819, 984, 589, 513, 495, 799, \n   161, 604, 958, 533, 221, 400, 386, 867, 600, 782, \n   382, 596, 414, 171, 516, 375, 682, 485, 911, 276, \n   98, 553, 163, 354, 666, 933, 424, 341, 533, 870, \n   227, 730, 475, 186, 263, 647, 537, 686, 600, 224, \n   469, 68, 770, 919, 190, 373, 294, 822, 808, 206, \n   184, 943, 795, 384, 383, 461, 404, 758, 839, 887, \n   715, 67, 618, 276, 204, 918, 873, 777, 604, 560, \n   951, 160, 578, 722, 79, 804, 96, 409, 713, 940, \n   652, 934, 970, 447, 318, 353, 859, 672, 112, 785, \n   645, 863, 803, 350, 139, 93, 354, 99, 820, 908, \n   609, 772, 154, 274, 580, 184, 79, 626, 630, 742, \n   653, 282, 762, 623, 680, 81, 927, 626, 789, 125, \n   411, 521, 938, 300, 821, 78, 343, 175, 128, 250, \n   170, 774, 972, 275, 999, 639, 495, 78, 352, 126, \n   857, 956, 358, 619, 580, 124, 737, 594, 701, 612, \n   669, 112, 134, 694, 363, 992, 809, 743, 168, 974, \n   944, 375, 748, 52, 600, 747, 642, 182, 862, 81, \n   344, 805, 988, 739, 511, 655, 814, 334, 249, 515, \n   897, 955, 664, 981, 649, 113, 974, 459, 893, 228, \n   433, 837, 553, 268, 926, 240, 102, 654, 459, 51, \n   686, 754, 806, 760, 493, 403, 415, 394, 687, 700, \n   946, 670, 656, 610, 738, 392, 760, 799, 887, 653, \n   978, 321, 576, 617, 626, 502, 894, 679, 243, 440, \n   680, 879, 194, 572, 640, 724, 926, 56, 204, 700, \n   707, 151, 457, 449, 797, 195, 791, 558, 945, 679, \n   297, 59, 87, 824, 713, 663, 412, 693, 342, 606, \n   134, 108, 571, 364, 631, 212, 174, 643, 304, 329, \n   343, 97, 430, 751, 497, 314, 983, 374, 822, 928, \n   140, 206, 73, 263, 980, 736, 876, 478, 430, 305, \n   170, 514, 364, 692, 829, 82, 855, 953, 676, 246, \n   369, 970, 294, 750, 807, 827, 150, 790, 288, 923, \n   804, 378, 215, 828, 592, 281, 565, 555, 710, 82, \n   896, 831, 547, 261, 524, 462, 293, 465, 502, 56, \n   661, 821, 976, 991, 658, 869, 905, 758, 745, 193, \n   768, 550, 608, 933, 378, 286, 215, 979, 792, 961, \n   61, 688, 793, 644, 986, 403, 106, 366, 905, 644, \n   372, 567, 466, 434, 645, 210, 389, 550, 919, 135, \n   780, 773, 635, 389, 707, 100, 626, 958, 165, 504, \n   920, 176, 193, 713, 857, 265, 203, 50, 668, 108, \n   645, 990, 626, 197, 510, 357, 358, 850, 858, 364, \n   936, 638\n};\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                       randtable.c ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "external/bzip2/sample3.ref",
    "content": "This file is exceedingly boring.  If you find yourself\nreading it, please (1) take it from me that you can safely\nguess what the rest of the file says, and (2) seek professional\nhelp.\n\nps.  there are no further sarcastic remarks in this file.\n\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\nugh\n"
  },
  {
    "path": "external/bzip2/spewG.c",
    "content": "\n/* spew out a thoroughly gigantic file designed so that bzip2\n   can compress it reasonably rapidly.  This is to help test\n   support for large files (> 2GB) in a reasonable amount of time.\n   I suggest you use the undocumented --exponential option to\n   bzip2 when compressing the resulting file; this saves a bit of\n   time.  Note: *don't* bother with --exponential when compressing \n   Real Files; it'll just waste a lot of CPU time :-)\n   (but is otherwise harmless).\n*/\n\n/* ------------------------------------------------------------------\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   Please read the WARNING, DISCLAIMER and PATENTS sections in the \n   README file.\n\n   This program is released under the terms of the license contained\n   in the file LICENSE.\n\t ------------------------------------------------------------------ */\n\n\n#define _FILE_OFFSET_BITS 64\n\n#include <stdio.h>\n#include <stdlib.h>\n\n/* The number of megabytes of junk to spew out (roughly) */\n#define MEGABYTES 5000\n\n#define N_BUF 1000000\nchar buf[N_BUF];\n\nint main ( int argc, char** argv )\n{\n   int ii, kk, p;\n   srandom(1);\n   setbuffer ( stdout, buf, N_BUF );\n   for (kk = 0; kk < MEGABYTES * 515; kk+=3) {\n      p = 25+random()%50;\n      for (ii = 0; ii < p; ii++)\n         printf ( \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" );\n      for (ii = 0; ii < p-1; ii++)\n         printf ( \"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\" );\n      for (ii = 0; ii < p+1; ii++)\n         printf ( \"ccccccccccccccccccccccccccccccccccccc\" );\n   }\n   fflush(stdout);\n   return 0;\n}\n"
  },
  {
    "path": "external/bzip2/unzcrash.c",
    "content": "\n/* A test program written to test robustness to decompression of\n   corrupted data.  Usage is \n       unzcrash filename\n   and the program will read the specified file, compress it (in memory),\n   and then repeatedly decompress it, each time with a different bit of\n   the compressed data inverted, so as to test all possible one-bit errors.\n   This should not cause any invalid memory accesses.  If it does, \n   I want to know about it!\n\n   PS.  As you can see from the above description, the process is\n   incredibly slow.  A file of size eg 5KB will cause it to run for\n   many hours.\n*/\n\n/* ------------------------------------------------------------------\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   Please read the WARNING, DISCLAIMER and PATENTS sections in the \n   README file.\n\n   This program is released under the terms of the license contained\n   in the file LICENSE.\n   ------------------------------------------------------------------ */\n\n\n#include <stdio.h>\n#include <assert.h>\n#include \"bzlib.h\"\n\n#define M_BLOCK 1000000\n\ntypedef unsigned char uchar;\n\n#define M_BLOCK_OUT (M_BLOCK + 1000000)\nuchar inbuf[M_BLOCK];\nuchar outbuf[M_BLOCK_OUT];\nuchar zbuf[M_BLOCK + 600 + (M_BLOCK / 100)];\n\nint nIn, nOut, nZ;\n\nstatic char *bzerrorstrings[] = {\n       \"OK\"\n      ,\"SEQUENCE_ERROR\"\n      ,\"PARAM_ERROR\"\n      ,\"MEM_ERROR\"\n      ,\"DATA_ERROR\"\n      ,\"DATA_ERROR_MAGIC\"\n      ,\"IO_ERROR\"\n      ,\"UNEXPECTED_EOF\"\n      ,\"OUTBUFF_FULL\"\n      ,\"???\"   /* for future */\n      ,\"???\"   /* for future */\n      ,\"???\"   /* for future */\n      ,\"???\"   /* for future */\n      ,\"???\"   /* for future */\n      ,\"???\"   /* for future */\n};\n\nvoid flip_bit ( int bit )\n{\n   int byteno = bit / 8;\n   int bitno  = bit % 8;\n   uchar mask = 1 << bitno;\n   //fprintf ( stderr, \"(byte %d  bit %d  mask %d)\",\n   //          byteno, bitno, (int)mask );\n   zbuf[byteno] ^= mask;\n}\n\nint main ( int argc, char** argv )\n{\n   FILE* f;\n   int   r;\n   int   bit;\n   int   i;\n\n   if (argc != 2) {\n      fprintf ( stderr, \"usage: unzcrash filename\\n\" );\n      return 1;\n   }\n\n   f = fopen ( argv[1], \"r\" );\n   if (!f) {\n      fprintf ( stderr, \"unzcrash: can't open %s\\n\", argv[1] );\n      return 1;\n   }\n\n   nIn = fread ( inbuf, 1, M_BLOCK, f );\n   fprintf ( stderr, \"%d bytes read\\n\", nIn );\n\n   nZ = M_BLOCK;\n   r = BZ2_bzBuffToBuffCompress (\n         zbuf, &nZ, inbuf, nIn, 9, 0, 30 );\n\n   assert (r == BZ_OK);\n   fprintf ( stderr, \"%d after compression\\n\", nZ );\n\n   for (bit = 0; bit < nZ*8; bit++) {\n      fprintf ( stderr, \"bit %d  \", bit );\n      flip_bit ( bit );\n      nOut = M_BLOCK_OUT;\n      r = BZ2_bzBuffToBuffDecompress (\n            outbuf, &nOut, zbuf, nZ, 0, 0 );\n      fprintf ( stderr, \" %d  %s \", r, bzerrorstrings[-r] );\n\n      if (r != BZ_OK) {\n         fprintf ( stderr, \"\\n\" );\n      } else {\n         if (nOut != nIn) {\n           fprintf(stderr, \"nIn/nOut mismatch %d %d\\n\", nIn, nOut );\n           return 1;\n         } else {\n           for (i = 0; i < nOut; i++)\n             if (inbuf[i] != outbuf[i]) { \n                fprintf(stderr, \"mismatch at %d\\n\", i ); \n                return 1; \n           }\n           if (i == nOut) fprintf(stderr, \"really ok!\\n\" );\n         }\n      }\n\n      flip_bit ( bit );\n   }\n\n#if 0\n   assert (nOut == nIn);\n   for (i = 0; i < nOut; i++) {\n     if (inbuf[i] != outbuf[i]) {\n        fprintf ( stderr, \"difference at %d !\\n\", i );\n        return 1;\n     }\n   }\n#endif\n\n   fprintf ( stderr, \"all ok\\n\" );\n   return 0;\n}\n"
  },
  {
    "path": "external/bzip2/words0",
    "content": "\nIf compilation produces errors, or a large number of warnings,\nplease read README.COMPILATION.PROBLEMS -- you might be able to\nadjust the flags in this Makefile to improve matters.\n\nAlso in README.COMPILATION.PROBLEMS are some hints that may help\nif your build produces an executable which is unable to correctly\nhandle so-called 'large files' -- files of size 2GB or more.\n\n"
  },
  {
    "path": "external/bzip2/words1",
    "content": "\nDoing 6 tests (3 compress, 3 uncompress) ...\nIf there's a problem, things might stop at this point.\n \n"
  },
  {
    "path": "external/bzip2/words2",
    "content": "\nChecking test results.  If any of the four \"cmp\"s which follow\nreport any differences, something is wrong.  If you can't easily\nfigure out what, please let me know (jseward@bzip.org).\n\n"
  },
  {
    "path": "external/bzip2/words3",
    "content": "\nIf you got this far and the 'cmp's didn't complain, it looks\nlike you're in business.  \n\nTo install in /usr/local/bin, /usr/local/lib, /usr/local/man and \n/usr/local/include, type\n\n   make install\n\nTo install somewhere else, eg, /xxx/yyy/{bin,lib,man,include}, type \n\n   make install PREFIX=/xxx/yyy\n\nIf you are (justifiably) paranoid and want to see what 'make install'\nis going to do, you can first do\n\n   make -n install                      or\n   make -n install PREFIX=/xxx/yyy      respectively.\n\nThe -n instructs make to show the commands it would execute, but\nnot actually execute them.\n\nInstructions for use are in the preformatted manual page, in the file\nbzip2.txt.  For more detailed documentation, read the full manual.  \nIt is available in Postscript form (manual.ps), PDF form (manual.pdf),\nand HTML form (manual.html).\n\nYou can also do \"bzip2 --help\" to see some helpful information. \n\"bzip2 -L\" displays the software license.\n\n"
  },
  {
    "path": "external/bzip2/xmlproc.sh",
    "content": "#!/bin/bash\n# see the README file for usage etc.\n#\n# ------------------------------------------------------------------\n#  This file is part of bzip2/libbzip2, a program and library for\n#  lossless, block-sorting data compression.\n#\n#  bzip2/libbzip2 version 1.0.6 of 6 September 2010\n#  Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n#\n#  Please read the WARNING, DISCLAIMER and PATENTS sections in the \n#  README file.\n#\n#  This program is released under the terms of the license contained\n#  in the file LICENSE.\n# ----------------------------------------------------------------\n\n\nusage() {\n  echo '';\n  echo 'Usage: xmlproc.sh -[option] <filename.xml>';\n  echo 'Specify a target from:';\n  echo '-v      verify xml file conforms to dtd';\n  echo '-html   output in html format (single file)';\n  echo '-ps     output in postscript format';\n  echo '-pdf    output in pdf format';\n  exit;\n}\n\nif test $# -ne 2; then\n  usage\nfi\n# assign the variable for the output type\naction=$1; shift\n# assign the output filename\nxmlfile=$1; shift\n# and check user input it correct\nif !(test -f $xmlfile); then\n  echo \"No such file: $xmlfile\";\n  exit;\nfi\n# some other stuff we will use\nOUT=output\nxsl_fo=bz-fo.xsl\nxsl_html=bz-html.xsl\n\nbasename=$xmlfile\nbasename=${basename//'.xml'/''}\n\nfofile=\"${basename}.fo\"\nhtmlfile=\"${basename}.html\"\npdffile=\"${basename}.pdf\"\npsfile=\"${basename}.ps\"\nxmlfmtfile=\"${basename}.fmt\"\n\n# first process the xmlfile with CDATA tags\n./format.pl $xmlfile $xmlfmtfile\n# so the shell knows where the catalogs live\nexport XML_CATALOG_FILES=/etc/xml/catalog\n\n# post-processing tidy up\ncleanup() {\n  echo \"Cleaning up: $@\" \n  while [ $# != 0 ]\n  do\n    arg=$1; shift;\n    echo \"  deleting $arg\";\n    rm $arg\n  done\n}\n\ncase $action in\n  -v)\n   flags='--noout --xinclude --noblanks --postvalid'\n   dtd='--dtdvalid http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd'\n   xmllint $flags $dtd $xmlfmtfile 2> $OUT \n   egrep 'error' $OUT \n   rm $OUT\n  ;;\n\n  -html)\n   echo \"Creating $htmlfile ...\"\n   xsltproc --nonet --xinclude  -o $htmlfile $xsl_html $xmlfmtfile\n   cleanup $xmlfmtfile\n  ;;\n\n  -pdf)\n   echo \"Creating $pdffile ...\"\n   xsltproc --nonet --xinclude -o $fofile $xsl_fo $xmlfmtfile\n   pdfxmltex $fofile >$OUT </dev/null\n   pdfxmltex $fofile >$OUT </dev/null\n   pdfxmltex $fofile >$OUT </dev/null\n   cleanup $OUT $xmlfmtfile *.aux *.fo *.log *.out\n  ;;\n\n  -ps)\n   echo \"Creating $psfile ...\"\n   xsltproc --nonet --xinclude -o $fofile $xsl_fo $xmlfmtfile\n   pdfxmltex $fofile >$OUT </dev/null\n   pdfxmltex $fofile >$OUT </dev/null\n   pdfxmltex $fofile >$OUT </dev/null\n   pdftops $pdffile $psfile\n   cleanup $OUT $xmlfmtfile $pdffile *.aux *.fo *.log *.out\n#  passivetex is broken, so we can't go this route yet.\n#   xmltex $fofile >$OUT </dev/null\n#   xmltex $fofile >$OUT </dev/null\n#   xmltex $fofile >$OUT </dev/null\n#   dvips -R -q -o bzip-manual.ps *.dvi\n  ;;\n\n  *)\n  usage\n  ;;\nesac\n"
  },
  {
    "path": "external/minizip/CMakeLists.txt",
    "content": "project(minizip)\n\ncmake_minimum_required(VERSION 2.6)\n\nif (UNIX)\n\tfind_package(ZLIB REQUIRED)\nendif()\n\nset (SOURCES\n ioapi.c\n unzip.c\n zip.c\n)\n\nset (HEADERS\n ioapi.h\n unzip.h\n zip.h\n)\n\nif (APPLE OR ${CMAKE_SYSTEM_NAME} STREQUAL \"FreeBSD\")\n\t# Mac OS X does not have fopen64()\n\t# and several related functions as the standard fopen()\n\t# calls are 64bit\n\tadd_definitions(\"-DUSE_FILE32API\")\nendif()\n\nif(WIN32)\n    set(BZ2_DIR \"${CMAKE_CURRENT_SOURCE_DIR}/../bzip2\")\n    foreach(win_file blocksort.c bzlib.c compress.c crctable.c decompress.c huffman.c randtable.c)\n        list(APPEND SOURCES ${BZ2_DIR}/${win_file})\n    endforeach()\n\n    foreach(win_file bzlib.h bzlib_private.h)\n        list(APPEND HEADERS ${BZ2_DIR}/${win_file})\n    endforeach()\nendif()\n\nadd_definitions(\"-DHAVE_BZIP2\")\n\nadd_library(minizip\n ${SOURCES}\n ${HEADERS}\n)\n\nif (UNIX)\n\t# on Mac, link to libbz2 dynamically, on Linux\n\t# we link statically to libbz2 so that an updater binary\n\t# build on Debian (where the packaged libbz2 has a SONAME of \"libbz2.so.1.0\"\n\t# works on Fedora/openSUSE (where no libbz2.so.1.0 symlink exists)\n\t# \n\t# see http://stackoverflow.com/questions/1835489/linking-an-application-to-libbz2-so-1-rather-than-libbz2-so-1-0\n\t#\n\tfind_package(BZip2)\n\n\tset(BZ2_LIB_NAME bz2)\n\tif (NOT APPLE)\n\t\tset(BZ2_LIB_NAME bz2.a)\n\tendif()\n\n\ttarget_link_libraries(minizip z ${BZ2_LIB_NAME})\nelse()\n    target_include_directories(minizip PRIVATE ${BZ2_DIR})\n    target_link_libraries(minizip\n        \"${CMAKE_CURRENT_SOURCE_DIR}/../zlib/prebuilt/zlib_static.lib\"\n    )\nendif()\n\n\n"
  },
  {
    "path": "external/minizip/Makefile",
    "content": "CC=cc\nCFLAGS=-O -I../..\n\nUNZ_OBJS = miniunz.o unzip.o ioapi.o ../../libz.a\nZIP_OBJS = minizip.o zip.o   ioapi.o ../../libz.a\n\n.c.o:\n\t$(CC) -c $(CFLAGS) $*.c\n\nall: miniunz minizip\n\nminiunz:  $(UNZ_OBJS)\n\t$(CC) $(CFLAGS) -o $@ $(UNZ_OBJS)\n\nminizip:  $(ZIP_OBJS)\n\t$(CC) $(CFLAGS) -o $@ $(ZIP_OBJS)\n\ntest:\tminiunz minizip\n\t./minizip test readme.txt\n\t./miniunz -l test.zip\n\tmv readme.txt readme.old\n\t./miniunz test.zip\n\nclean:\n\t/bin/rm -f *.o *~ minizip miniunz\n"
  },
  {
    "path": "external/minizip/MiniZip64_Changes.txt",
    "content": "\nMiniZip 1.1 was derrived from MiniZip at version 1.01f\n\nChange in 1.0 (Okt 2009)\n - **TODO - Add history**\n\n"
  },
  {
    "path": "external/minizip/MiniZip64_info.txt",
    "content": "MiniZip - Copyright (c) 1998-2010 - by Gilles Vollant - version 1.1 64 bits from Mathias Svensson\n\nIntroduction\n---------------------\nMiniZip 1.1 is built from MiniZip 1.0 by Gilles Vollant ( http://www.winimage.com/zLibDll/minizip.html )\n\nWhen adding ZIP64 support into minizip it would result into risk of breaking compatibility with minizip 1.0.\nAll possible work was done for compatibility.\n\n\nBackground\n---------------------\nWhen adding ZIP64 support Mathias Svensson found that Even Rouault have added ZIP64 \nsupport for unzip.c into minizip for a open source project called gdal ( http://www.gdal.org/ )\n\nThat was used as a starting point. And after that ZIP64 support was added to zip.c\nsome refactoring and code cleanup was also done.\n\n\nChanged from MiniZip 1.0 to MiniZip 1.1\n---------------------------------------\n* Added ZIP64 support for unzip ( by Even Rouault )\n* Added ZIP64 support for zip ( by Mathias Svensson )\n* Reverted some changed that Even Rouault did.\n* Bunch of patches received from Gulles Vollant that he received for MiniZip from various users.\n* Added unzip patch for BZIP Compression method (patch create by Daniel Borca)\n* Added BZIP Compress method for zip\n* Did some refactoring and code cleanup\n\n\nCredits\n\n Gilles Vollant    - Original MiniZip author\n Even Rouault      - ZIP64 unzip Support\n Daniel Borca      - BZip Compression method support in unzip\n Mathias Svensson  - ZIP64 zip support\n Mathias Svensson  - BZip Compression method support in zip\n\n Resources\n\n ZipLayout   http://result42.com/projects/ZipFileLayout\n             Command line tool for Windows that shows the layout and information of the headers in a zip archive.\n             Used when debugging and validating the creation of zip files using MiniZip64\n\n\n ZIP App Note  http://www.pkware.com/documents/casestudies/APPNOTE.TXT\n               Zip File specification\n\n\nNotes.\n * To be able to use BZip compression method in zip64.c or unzip64.c the BZIP2 lib is needed and HAVE_BZIP2 need to be defined.\n\nLicense\n----------------------------------------------------------\n   Condition of use and distribution are the same than zlib :\n\n  This software is provided 'as-is', without any express or implied\n  warranty.  In no event will the authors be held liable for any damages\n  arising from the use of this software.\n\n  Permission is granted to anyone to use this software for any purpose,\n  including commercial applications, and to alter it and redistribute it\n  freely, subject to the following restrictions:\n\n  1. The origin of this software must not be misrepresented; you must not\n     claim that you wrote the original software. If you use this software\n     in a product, an acknowledgment in the product documentation would be\n     appreciated but is not required.\n  2. Altered source versions must be plainly marked as such, and must not be\n     misrepresented as being the original software.\n  3. This notice may not be removed or altered from any source distribution.\n\n----------------------------------------------------------\n\n"
  },
  {
    "path": "external/minizip/crypt.h",
    "content": "/* crypt.h -- base code for crypt/uncrypt ZIPfile\n\n\n   Version 1.01e, February 12th, 2005\n\n   Copyright (C) 1998-2005 Gilles Vollant\n\n   This code is a modified version of crypting code in Infozip distribution\n\n   The encryption/decryption parts of this source code (as opposed to the\n   non-echoing password parts) were originally written in Europe.  The\n   whole source package can be freely distributed, including from the USA.\n   (Prior to January 2000, re-export from the US was a violation of US law.)\n\n   This encryption code is a direct transcription of the algorithm from\n   Roger Schlafly, described by Phil Katz in the file appnote.txt.  This\n   file (appnote.txt) is distributed with the PKZIP program (even in the\n   version without encryption capabilities).\n\n   If you don't need crypting in your application, just define symbols\n   NOCRYPT and NOUNCRYPT.\n\n   This code support the \"Traditional PKWARE Encryption\".\n\n   The new AES encryption added on Zip format by Winzip (see the page\n   http://www.winzip.com/aes_info.htm ) and PKWare PKZip 5.x Strong\n   Encryption is not supported.\n*/\n\n#define CRC32(c, b) ((*(pcrc_32_tab+(((int)(c) ^ (b)) & 0xff))) ^ ((c) >> 8))\n\n/***********************************************************************\n * Return the next byte in the pseudo-random sequence\n */\nstatic int decrypt_byte(unsigned long* pkeys, const unsigned long* pcrc_32_tab)\n{\n    unsigned temp;  /* POTENTIAL BUG:  temp*(temp^1) may overflow in an\n                     * unpredictable manner on 16-bit systems; not a problem\n                     * with any known compiler so far, though */\n\n    temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2;\n    return (int)(((temp * (temp ^ 1)) >> 8) & 0xff);\n}\n\n/***********************************************************************\n * Update the encryption keys with the next byte of plain text\n */\nstatic int update_keys(unsigned long* pkeys,const unsigned long* pcrc_32_tab,int c)\n{\n    (*(pkeys+0)) = CRC32((*(pkeys+0)), c);\n    (*(pkeys+1)) += (*(pkeys+0)) & 0xff;\n    (*(pkeys+1)) = (*(pkeys+1)) * 134775813L + 1;\n    {\n      register int keyshift = (int)((*(pkeys+1)) >> 24);\n      (*(pkeys+2)) = CRC32((*(pkeys+2)), keyshift);\n    }\n    return c;\n}\n\n\n/***********************************************************************\n * Initialize the encryption keys and the random header according to\n * the given password.\n */\nstatic void init_keys(const char* passwd,unsigned long* pkeys,const unsigned long* pcrc_32_tab)\n{\n    *(pkeys+0) = 305419896L;\n    *(pkeys+1) = 591751049L;\n    *(pkeys+2) = 878082192L;\n    while (*passwd != '\\0') {\n        update_keys(pkeys,pcrc_32_tab,(int)*passwd);\n        passwd++;\n    }\n}\n\n#define zdecode(pkeys,pcrc_32_tab,c) \\\n    (update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab)))\n\n#define zencode(pkeys,pcrc_32_tab,c,t) \\\n    (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c))\n\n#ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED\n\n#define RAND_HEAD_LEN  12\n   /* \"last resort\" source for second part of crypt seed pattern */\n#  ifndef ZCR_SEED2\n#    define ZCR_SEED2 3141592654UL     /* use PI as default pattern */\n#  endif\n\nstatic int crypthead(const char* passwd,      /* password string */\n                     unsigned char* buf,      /* where to write header */\n                     int bufSize,\n                     unsigned long* pkeys,\n                     const unsigned long* pcrc_32_tab,\n                     unsigned long crcForCrypting)\n{\n    int n;                       /* index in random header */\n    int t;                       /* temporary */\n    int c;                       /* random byte */\n    unsigned char header[RAND_HEAD_LEN-2]; /* random header */\n    static unsigned calls = 0;   /* ensure different random header each time */\n\n    if (bufSize<RAND_HEAD_LEN)\n      return 0;\n\n    /* First generate RAND_HEAD_LEN-2 random bytes. We encrypt the\n     * output of rand() to get less predictability, since rand() is\n     * often poorly implemented.\n     */\n    if (++calls == 1)\n    {\n        srand((unsigned)(time(NULL) ^ ZCR_SEED2));\n    }\n    init_keys(passwd, pkeys, pcrc_32_tab);\n    for (n = 0; n < RAND_HEAD_LEN-2; n++)\n    {\n        c = (rand() >> 7) & 0xff;\n        header[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, c, t);\n    }\n    /* Encrypt random header (last two bytes is high word of crc) */\n    init_keys(passwd, pkeys, pcrc_32_tab);\n    for (n = 0; n < RAND_HEAD_LEN-2; n++)\n    {\n        buf[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, header[n], t);\n    }\n    buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 16) & 0xff, t);\n    buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 24) & 0xff, t);\n    return n;\n}\n\n#endif\n"
  },
  {
    "path": "external/minizip/ioapi.c",
    "content": "/* ioapi.h -- IO base function header for compress/uncompress .zip\n   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Modifications for Zip64 support\n         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )\n\n         For more info read MiniZip_info.txt\n\n*/\n\n#if (defined(_WIN32))\n        #define _CRT_SECURE_NO_WARNINGS\n#endif\n\n#include \"ioapi.h\"\n\nvoidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode)\n{\n    if (pfilefunc->zfile_func64.zopen64_file != NULL)\n        return (*(pfilefunc->zfile_func64.zopen64_file)) (pfilefunc->zfile_func64.opaque,filename,mode);\n    else\n    {\n        return (*(pfilefunc->zopen32_file))(pfilefunc->zfile_func64.opaque,(const char*)filename,mode);\n    }\n}\n\nlong call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin)\n{\n    if (pfilefunc->zfile_func64.zseek64_file != NULL)\n        return (*(pfilefunc->zfile_func64.zseek64_file)) (pfilefunc->zfile_func64.opaque,filestream,offset,origin);\n    else\n    {\n        uLong offsetTruncated = (uLong)offset;\n        if (offsetTruncated != offset)\n            return -1;\n        else\n            return (*(pfilefunc->zseek32_file))(pfilefunc->zfile_func64.opaque,filestream,offsetTruncated,origin);\n    }\n}\n\nZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream)\n{\n    if (pfilefunc->zfile_func64.zseek64_file != NULL)\n        return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream);\n    else\n    {\n        uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream);\n        if ((tell_uLong) == ((uLong)-1))\n            return (ZPOS64_T)-1;\n        else\n            return tell_uLong;\n    }\n}\n\nvoid fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32)\n{\n    p_filefunc64_32->zfile_func64.zopen64_file = NULL;\n    p_filefunc64_32->zopen32_file = p_filefunc32->zopen_file;\n    p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file;\n    p_filefunc64_32->zfile_func64.zread_file = p_filefunc32->zread_file;\n    p_filefunc64_32->zfile_func64.zwrite_file = p_filefunc32->zwrite_file;\n    p_filefunc64_32->zfile_func64.ztell64_file = NULL;\n    p_filefunc64_32->zfile_func64.zseek64_file = NULL;\n    p_filefunc64_32->zfile_func64.zclose_file = p_filefunc32->zclose_file;\n    p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file;\n    p_filefunc64_32->zfile_func64.opaque = p_filefunc32->opaque;\n    p_filefunc64_32->zseek32_file = p_filefunc32->zseek_file;\n    p_filefunc64_32->ztell32_file = p_filefunc32->ztell_file;\n}\n\n\n\nstatic voidpf  ZCALLBACK fopen_file_func OF((voidpf opaque, const char* filename, int mode));\nstatic uLong   ZCALLBACK fread_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size));\nstatic uLong   ZCALLBACK fwrite_file_func OF((voidpf opaque, voidpf stream, const void* buf,uLong size));\nstatic ZPOS64_T ZCALLBACK ftell64_file_func OF((voidpf opaque, voidpf stream));\nstatic long    ZCALLBACK fseek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));\nstatic int     ZCALLBACK fclose_file_func OF((voidpf opaque, voidpf stream));\nstatic int     ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream));\n\nstatic voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode)\n{\n    FILE* file = NULL;\n    const char* mode_fopen = NULL;\n    if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)\n        mode_fopen = \"rb\";\n    else\n    if (mode & ZLIB_FILEFUNC_MODE_EXISTING)\n        mode_fopen = \"r+b\";\n    else\n    if (mode & ZLIB_FILEFUNC_MODE_CREATE)\n        mode_fopen = \"wb\";\n\n    if ((filename!=NULL) && (mode_fopen != NULL))\n        file = fopen(filename, mode_fopen);\n    return file;\n}\n\nstatic voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, int mode)\n{\n    FILE* file = NULL;\n    const char* mode_fopen = NULL;\n    if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)\n        mode_fopen = \"rb\";\n    else\n    if (mode & ZLIB_FILEFUNC_MODE_EXISTING)\n        mode_fopen = \"r+b\";\n    else\n    if (mode & ZLIB_FILEFUNC_MODE_CREATE)\n        mode_fopen = \"wb\";\n\n    if ((filename!=NULL) && (mode_fopen != NULL))\n        file = fopen64((const char*)filename, mode_fopen);\n    return file;\n}\n\n\nstatic uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, void* buf, uLong size)\n{\n    uLong ret;\n    ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream);\n    return ret;\n}\n\nstatic uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, const void* buf, uLong size)\n{\n    uLong ret;\n    ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream);\n    return ret;\n}\n\nstatic long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream)\n{\n    long ret;\n    ret = ftell((FILE *)stream);\n    return ret;\n}\n\n\nstatic ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream)\n{\n    ZPOS64_T ret;\n    ret = ftello64((FILE *)stream);\n    return ret;\n}\n\nstatic long ZCALLBACK fseek_file_func (voidpf  opaque, voidpf stream, uLong offset, int origin)\n{\n    int fseek_origin=0;\n    long ret;\n    switch (origin)\n    {\n    case ZLIB_FILEFUNC_SEEK_CUR :\n        fseek_origin = SEEK_CUR;\n        break;\n    case ZLIB_FILEFUNC_SEEK_END :\n        fseek_origin = SEEK_END;\n        break;\n    case ZLIB_FILEFUNC_SEEK_SET :\n        fseek_origin = SEEK_SET;\n        break;\n    default: return -1;\n    }\n    ret = 0;\n    if (fseek((FILE *)stream, offset, fseek_origin) != 0)\n        ret = -1;\n    return ret;\n}\n\nstatic long ZCALLBACK fseek64_file_func (voidpf  opaque, voidpf stream, ZPOS64_T offset, int origin)\n{\n    int fseek_origin=0;\n    long ret;\n    switch (origin)\n    {\n    case ZLIB_FILEFUNC_SEEK_CUR :\n        fseek_origin = SEEK_CUR;\n        break;\n    case ZLIB_FILEFUNC_SEEK_END :\n        fseek_origin = SEEK_END;\n        break;\n    case ZLIB_FILEFUNC_SEEK_SET :\n        fseek_origin = SEEK_SET;\n        break;\n    default: return -1;\n    }\n    ret = 0;\n\n    if(fseeko64((FILE *)stream, offset, fseek_origin) != 0)\n                        ret = -1;\n\n    return ret;\n}\n\n\nstatic int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream)\n{\n    int ret;\n    ret = fclose((FILE *)stream);\n    return ret;\n}\n\nstatic int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream)\n{\n    int ret;\n    ret = ferror((FILE *)stream);\n    return ret;\n}\n\nvoid fill_fopen_filefunc (pzlib_filefunc_def)\n  zlib_filefunc_def* pzlib_filefunc_def;\n{\n    pzlib_filefunc_def->zopen_file = fopen_file_func;\n    pzlib_filefunc_def->zread_file = fread_file_func;\n    pzlib_filefunc_def->zwrite_file = fwrite_file_func;\n    pzlib_filefunc_def->ztell_file = ftell_file_func;\n    pzlib_filefunc_def->zseek_file = fseek_file_func;\n    pzlib_filefunc_def->zclose_file = fclose_file_func;\n    pzlib_filefunc_def->zerror_file = ferror_file_func;\n    pzlib_filefunc_def->opaque = NULL;\n}\n\nvoid fill_fopen64_filefunc (zlib_filefunc64_def*  pzlib_filefunc_def)\n{\n    pzlib_filefunc_def->zopen64_file = fopen64_file_func;\n    pzlib_filefunc_def->zread_file = fread_file_func;\n    pzlib_filefunc_def->zwrite_file = fwrite_file_func;\n    pzlib_filefunc_def->ztell64_file = ftell64_file_func;\n    pzlib_filefunc_def->zseek64_file = fseek64_file_func;\n    pzlib_filefunc_def->zclose_file = fclose_file_func;\n    pzlib_filefunc_def->zerror_file = ferror_file_func;\n    pzlib_filefunc_def->opaque = NULL;\n}\n"
  },
  {
    "path": "external/minizip/ioapi.h",
    "content": "/* ioapi.h -- IO base function header for compress/uncompress .zip\n   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Modifications for Zip64 support\n         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )\n\n         For more info read MiniZip_info.txt\n\n         Changes\n\n    Oct-2009 - Defined ZPOS64_T to fpos_t on windows and u_int64_t on linux. (might need to find a better why for this)\n    Oct-2009 - Change to fseeko64, ftello64 and fopen64 so large files would work on linux.\n               More if/def section may be needed to support other platforms\n    Oct-2009 - Defined fxxxx64 calls to normal fopen/ftell/fseek so they would compile on windows.\n                          (but you should use iowin32.c for windows instead)\n\n*/\n\n#ifndef _ZLIBIOAPI64_H\n#define _ZLIBIOAPI64_H\n\n#if (!defined(_WIN32)) && (!defined(WIN32))\n\n  // Linux needs this to support file operation on files larger then 4+GB\n  // But might need better if/def to select just the platforms that needs them.\n\n        #ifndef __USE_FILE_OFFSET64\n                #define __USE_FILE_OFFSET64\n        #endif\n        #ifndef __USE_LARGEFILE64\n                #define __USE_LARGEFILE64\n        #endif\n        #ifndef _LARGEFILE64_SOURCE\n                #define _LARGEFILE64_SOURCE\n        #endif\n        #ifndef _FILE_OFFSET_BIT\n                #define _FILE_OFFSET_BIT 64\n        #endif\n#endif\n\n#include <stdio.h>\n#include <stdlib.h>\n#include \"zlib.h\"\n\n#if defined(USE_FILE32API)\n#define fopen64 fopen\n#define ftello64 ftell\n#define fseeko64 fseek\n#else\n#ifdef _MSC_VER\n #define fopen64 fopen\n #if (_MSC_VER >= 1400) && (!(defined(NO_MSCVER_FILE64_FUNC)))\n  #define ftello64 _ftelli64\n  #define fseeko64 _fseeki64\n #else // old MSC\n  #define ftello64 ftell\n  #define fseeko64 fseek\n #endif\n#endif\n#endif\n\n/*\n#ifndef ZPOS64_T\n  #ifdef _WIN32\n                #define ZPOS64_T fpos_t\n  #else\n    #include <stdint.h>\n    #define ZPOS64_T uint64_t\n  #endif\n#endif\n*/\n\n#ifdef HAVE_MINIZIP64_CONF_H\n#include \"mz64conf.h\"\n#endif\n\n/* a type choosen by DEFINE */\n#ifdef HAVE_64BIT_INT_CUSTOM\ntypedef  64BIT_INT_CUSTOM_TYPE ZPOS64_T;\n#else\n#ifdef HAS_STDINT_H\n#include \"stdint.h\"\ntypedef uint64_t ZPOS64_T;\n#else\n\n\n#if defined(_MSC_VER) || defined(__BORLANDC__)\ntypedef unsigned __int64 ZPOS64_T;\n#else\ntypedef unsigned long long int ZPOS64_T;\n#endif\n#endif\n#endif\n\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n#define ZLIB_FILEFUNC_SEEK_CUR (1)\n#define ZLIB_FILEFUNC_SEEK_END (2)\n#define ZLIB_FILEFUNC_SEEK_SET (0)\n\n#define ZLIB_FILEFUNC_MODE_READ      (1)\n#define ZLIB_FILEFUNC_MODE_WRITE     (2)\n#define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3)\n\n#define ZLIB_FILEFUNC_MODE_EXISTING (4)\n#define ZLIB_FILEFUNC_MODE_CREATE   (8)\n\n\n#ifndef ZCALLBACK\n #if (defined(WIN32) || defined(_WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK)\n   #define ZCALLBACK CALLBACK\n #else\n   #define ZCALLBACK\n #endif\n#endif\n\n\n\n\ntypedef voidpf   (ZCALLBACK *open_file_func)      OF((voidpf opaque, const char* filename, int mode));\ntypedef uLong    (ZCALLBACK *read_file_func)      OF((voidpf opaque, voidpf stream, void* buf, uLong size));\ntypedef uLong    (ZCALLBACK *write_file_func)     OF((voidpf opaque, voidpf stream, const void* buf, uLong size));\ntypedef int      (ZCALLBACK *close_file_func)     OF((voidpf opaque, voidpf stream));\ntypedef int      (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream));\n\ntypedef long     (ZCALLBACK *tell_file_func)      OF((voidpf opaque, voidpf stream));\ntypedef long     (ZCALLBACK *seek_file_func)      OF((voidpf opaque, voidpf stream, uLong offset, int origin));\n\n\n/* here is the \"old\" 32 bits structure structure */\ntypedef struct zlib_filefunc_def_s\n{\n    open_file_func      zopen_file;\n    read_file_func      zread_file;\n    write_file_func     zwrite_file;\n    tell_file_func      ztell_file;\n    seek_file_func      zseek_file;\n    close_file_func     zclose_file;\n    testerror_file_func zerror_file;\n    voidpf              opaque;\n} zlib_filefunc_def;\n\ntypedef ZPOS64_T (ZCALLBACK *tell64_file_func)    OF((voidpf opaque, voidpf stream));\ntypedef long     (ZCALLBACK *seek64_file_func)    OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));\ntypedef voidpf   (ZCALLBACK *open64_file_func)    OF((voidpf opaque, const void* filename, int mode));\n\ntypedef struct zlib_filefunc64_def_s\n{\n    open64_file_func    zopen64_file;\n    read_file_func      zread_file;\n    write_file_func     zwrite_file;\n    tell64_file_func    ztell64_file;\n    seek64_file_func    zseek64_file;\n    close_file_func     zclose_file;\n    testerror_file_func zerror_file;\n    voidpf              opaque;\n} zlib_filefunc64_def;\n\nvoid fill_fopen64_filefunc OF((zlib_filefunc64_def* pzlib_filefunc_def));\nvoid fill_fopen_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));\n\n/* now internal definition, only for zip.c and unzip.h */\ntypedef struct zlib_filefunc64_32_def_s\n{\n    zlib_filefunc64_def zfile_func64;\n    open_file_func      zopen32_file;\n    tell_file_func      ztell32_file;\n    seek_file_func      zseek32_file;\n} zlib_filefunc64_32_def;\n\n\n#define ZREAD64(filefunc,filestream,buf,size)     ((*((filefunc).zfile_func64.zread_file))   ((filefunc).zfile_func64.opaque,filestream,buf,size))\n#define ZWRITE64(filefunc,filestream,buf,size)    ((*((filefunc).zfile_func64.zwrite_file))  ((filefunc).zfile_func64.opaque,filestream,buf,size))\n//#define ZTELL64(filefunc,filestream)            ((*((filefunc).ztell64_file)) ((filefunc).opaque,filestream))\n//#define ZSEEK64(filefunc,filestream,pos,mode)   ((*((filefunc).zseek64_file)) ((filefunc).opaque,filestream,pos,mode))\n#define ZCLOSE64(filefunc,filestream)             ((*((filefunc).zfile_func64.zclose_file))  ((filefunc).zfile_func64.opaque,filestream))\n#define ZERROR64(filefunc,filestream)             ((*((filefunc).zfile_func64.zerror_file))  ((filefunc).zfile_func64.opaque,filestream))\n\nvoidpf call_zopen64 OF((const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode));\nlong    call_zseek64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin));\nZPOS64_T call_ztell64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream));\n\nvoid    fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32);\n\n#define ZOPEN64(filefunc,filename,mode)         (call_zopen64((&(filefunc)),(filename),(mode)))\n#define ZTELL64(filefunc,filestream)            (call_ztell64((&(filefunc)),(filestream)))\n#define ZSEEK64(filefunc,filestream,pos,mode)   (call_zseek64((&(filefunc)),(filestream),(pos),(mode)))\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "external/minizip/iowin32.c",
    "content": "/* iowin32.c -- IO base function header for compress/uncompress .zip\n     Version 1.1, February 14h, 2010\n     part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Modifications for Zip64 support\n         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )\n\n     For more info read MiniZip_info.txt\n\n*/\n\n#include <stdlib.h>\n\n#include \"zlib.h\"\n#include \"ioapi.h\"\n#include \"iowin32.h\"\n\n#ifndef INVALID_HANDLE_VALUE\n#define INVALID_HANDLE_VALUE (0xFFFFFFFF)\n#endif\n\n#ifndef INVALID_SET_FILE_POINTER\n#define INVALID_SET_FILE_POINTER ((DWORD)-1)\n#endif\n\nvoidpf  ZCALLBACK win32_open_file_func  OF((voidpf opaque, const char* filename, int mode));\nuLong   ZCALLBACK win32_read_file_func  OF((voidpf opaque, voidpf stream, void* buf, uLong size));\nuLong   ZCALLBACK win32_write_file_func OF((voidpf opaque, voidpf stream, const void* buf, uLong size));\nZPOS64_T ZCALLBACK win32_tell64_file_func  OF((voidpf opaque, voidpf stream));\nlong    ZCALLBACK win32_seek64_file_func  OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));\nint     ZCALLBACK win32_close_file_func OF((voidpf opaque, voidpf stream));\nint     ZCALLBACK win32_error_file_func OF((voidpf opaque, voidpf stream));\n\ntypedef struct\n{\n    HANDLE hf;\n    int error;\n} WIN32FILE_IOWIN;\n\n\nstatic void win32_translate_open_mode(int mode,\n                                      DWORD* lpdwDesiredAccess,\n                                      DWORD* lpdwCreationDisposition,\n                                      DWORD* lpdwShareMode,\n                                      DWORD* lpdwFlagsAndAttributes)\n{\n    *lpdwDesiredAccess = *lpdwShareMode = *lpdwFlagsAndAttributes = *lpdwCreationDisposition = 0;\n\n    if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)\n    {\n        *lpdwDesiredAccess = GENERIC_READ;\n        *lpdwCreationDisposition = OPEN_EXISTING;\n        *lpdwShareMode = FILE_SHARE_READ;\n    }\n    else if (mode & ZLIB_FILEFUNC_MODE_EXISTING)\n    {\n        *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ;\n        *lpdwCreationDisposition = OPEN_EXISTING;\n    }\n    else if (mode & ZLIB_FILEFUNC_MODE_CREATE)\n    {\n        *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ;\n        *lpdwCreationDisposition = CREATE_ALWAYS;\n    }\n}\n\nstatic voidpf win32_build_iowin(HANDLE hFile)\n{\n    voidpf ret=NULL;\n\n    if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))\n    {\n        WIN32FILE_IOWIN w32fiow;\n        w32fiow.hf = hFile;\n        w32fiow.error = 0;\n        ret = malloc(sizeof(WIN32FILE_IOWIN));\n\n        if (ret==NULL)\n            CloseHandle(hFile);\n        else\n            *((WIN32FILE_IOWIN*)ret) = w32fiow;\n    }\n    return ret;\n}\n\nvoidpf ZCALLBACK win32_open64_file_func (voidpf opaque,const void* filename,int mode)\n{\n    const char* mode_fopen = NULL;\n    DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;\n    HANDLE hFile = NULL;\n\n    win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);\n\n    if ((filename!=NULL) && (dwDesiredAccess != 0))\n        hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);\n\n    return win32_build_iowin(hFile);\n}\n\n\nvoidpf ZCALLBACK win32_open64_file_funcA (voidpf opaque,const void* filename,int mode)\n{\n    const char* mode_fopen = NULL;\n    DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;\n    HANDLE hFile = NULL;\n\n    win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);\n\n    if ((filename!=NULL) && (dwDesiredAccess != 0))\n        hFile = CreateFileA((LPCSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);\n\n    return win32_build_iowin(hFile);\n}\n\n\nvoidpf ZCALLBACK win32_open64_file_funcW (voidpf opaque,const void* filename,int mode)\n{\n    const char* mode_fopen = NULL;\n    DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;\n    HANDLE hFile = NULL;\n\n    win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);\n\n    if ((filename!=NULL) && (dwDesiredAccess != 0))\n        hFile = CreateFileW((LPCWSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);\n\n    return win32_build_iowin(hFile);\n}\n\n\nvoidpf ZCALLBACK win32_open_file_func (voidpf opaque,const char* filename,int mode)\n{\n    const char* mode_fopen = NULL;\n    DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;\n    HANDLE hFile = NULL;\n\n    win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);\n\n    if ((filename!=NULL) && (dwDesiredAccess != 0))\n        hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);\n\n    return win32_build_iowin(hFile);\n}\n\n\nuLong ZCALLBACK win32_read_file_func (voidpf opaque, voidpf stream, void* buf,uLong size)\n{\n    uLong ret=0;\n    HANDLE hFile = NULL;\n    if (stream!=NULL)\n        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;\n\n    if (hFile != NULL)\n    {\n        if (!ReadFile(hFile, buf, size, &ret, NULL))\n        {\n            DWORD dwErr = GetLastError();\n            if (dwErr == ERROR_HANDLE_EOF)\n                dwErr = 0;\n            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;\n        }\n    }\n\n    return ret;\n}\n\n\nuLong ZCALLBACK win32_write_file_func (voidpf opaque,voidpf stream,const void* buf,uLong size)\n{\n    uLong ret=0;\n    HANDLE hFile = NULL;\n    if (stream!=NULL)\n        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;\n\n    if (hFile != NULL)\n    {\n        if (!WriteFile(hFile, buf, size, &ret, NULL))\n        {\n            DWORD dwErr = GetLastError();\n            if (dwErr == ERROR_HANDLE_EOF)\n                dwErr = 0;\n            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;\n        }\n    }\n\n    return ret;\n}\n\nlong ZCALLBACK win32_tell_file_func (voidpf opaque,voidpf stream)\n{\n    long ret=-1;\n    HANDLE hFile = NULL;\n    if (stream!=NULL)\n        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;\n    if (hFile != NULL)\n    {\n        DWORD dwSet = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);\n        if (dwSet == INVALID_SET_FILE_POINTER)\n        {\n            DWORD dwErr = GetLastError();\n            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;\n            ret = -1;\n        }\n        else\n            ret=(long)dwSet;\n    }\n    return ret;\n}\n\nZPOS64_T ZCALLBACK win32_tell64_file_func (voidpf opaque, voidpf stream)\n{\n    ZPOS64_T ret= (ZPOS64_T)-1;\n    HANDLE hFile = NULL;\n    if (stream!=NULL)\n        hFile = ((WIN32FILE_IOWIN*)stream)->hf;\n\n    if (hFile)\n    {\n        LARGE_INTEGER li;\n        li.QuadPart = 0;\n        li.u.LowPart = SetFilePointer(hFile, li.u.LowPart, &li.u.HighPart, FILE_CURRENT);\n        if ( (li.LowPart == 0xFFFFFFFF) && (GetLastError() != NO_ERROR))\n        {\n            DWORD dwErr = GetLastError();\n            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;\n            ret = (ZPOS64_T)-1;\n        }\n        else\n            ret=li.QuadPart;\n    }\n    return ret;\n}\n\n\nlong ZCALLBACK win32_seek_file_func (voidpf opaque,voidpf stream,uLong offset,int origin)\n{\n    DWORD dwMoveMethod=0xFFFFFFFF;\n    HANDLE hFile = NULL;\n\n    long ret=-1;\n    if (stream!=NULL)\n        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;\n    switch (origin)\n    {\n    case ZLIB_FILEFUNC_SEEK_CUR :\n        dwMoveMethod = FILE_CURRENT;\n        break;\n    case ZLIB_FILEFUNC_SEEK_END :\n        dwMoveMethod = FILE_END;\n        break;\n    case ZLIB_FILEFUNC_SEEK_SET :\n        dwMoveMethod = FILE_BEGIN;\n        break;\n    default: return -1;\n    }\n\n    if (hFile != NULL)\n    {\n        DWORD dwSet = SetFilePointer(hFile, offset, NULL, dwMoveMethod);\n        if (dwSet == INVALID_SET_FILE_POINTER)\n        {\n            DWORD dwErr = GetLastError();\n            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;\n            ret = -1;\n        }\n        else\n            ret=0;\n    }\n    return ret;\n}\n\nlong ZCALLBACK win32_seek64_file_func (voidpf opaque, voidpf stream,ZPOS64_T offset,int origin)\n{\n    DWORD dwMoveMethod=0xFFFFFFFF;\n    HANDLE hFile = NULL;\n    long ret=-1;\n\n    if (stream!=NULL)\n        hFile = ((WIN32FILE_IOWIN*)stream)->hf;\n\n    switch (origin)\n    {\n        case ZLIB_FILEFUNC_SEEK_CUR :\n            dwMoveMethod = FILE_CURRENT;\n            break;\n        case ZLIB_FILEFUNC_SEEK_END :\n            dwMoveMethod = FILE_END;\n            break;\n        case ZLIB_FILEFUNC_SEEK_SET :\n            dwMoveMethod = FILE_BEGIN;\n            break;\n        default: return -1;\n    }\n\n    if (hFile)\n    {\n        LARGE_INTEGER* li = (LARGE_INTEGER*)&offset;\n        DWORD dwSet = SetFilePointer(hFile, li->u.LowPart, &li->u.HighPart, dwMoveMethod);\n        if (dwSet == INVALID_SET_FILE_POINTER)\n        {\n            DWORD dwErr = GetLastError();\n            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;\n            ret = -1;\n        }\n        else\n            ret=0;\n    }\n    return ret;\n}\n\nint ZCALLBACK win32_close_file_func (voidpf opaque, voidpf stream)\n{\n    int ret=-1;\n\n    if (stream!=NULL)\n    {\n        HANDLE hFile;\n        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;\n        if (hFile != NULL)\n        {\n            CloseHandle(hFile);\n            ret=0;\n        }\n        free(stream);\n    }\n    return ret;\n}\n\nint ZCALLBACK win32_error_file_func (voidpf opaque,voidpf stream)\n{\n    int ret=-1;\n    if (stream!=NULL)\n    {\n        ret = ((WIN32FILE_IOWIN*)stream) -> error;\n    }\n    return ret;\n}\n\nvoid fill_win32_filefunc (zlib_filefunc_def* pzlib_filefunc_def)\n{\n    pzlib_filefunc_def->zopen_file = win32_open_file_func;\n    pzlib_filefunc_def->zread_file = win32_read_file_func;\n    pzlib_filefunc_def->zwrite_file = win32_write_file_func;\n    pzlib_filefunc_def->ztell_file = win32_tell_file_func;\n    pzlib_filefunc_def->zseek_file = win32_seek_file_func;\n    pzlib_filefunc_def->zclose_file = win32_close_file_func;\n    pzlib_filefunc_def->zerror_file = win32_error_file_func;\n    pzlib_filefunc_def->opaque = NULL;\n}\n\nvoid fill_win32_filefunc64(zlib_filefunc64_def* pzlib_filefunc_def)\n{\n    pzlib_filefunc_def->zopen64_file = win32_open64_file_func;\n    pzlib_filefunc_def->zread_file = win32_read_file_func;\n    pzlib_filefunc_def->zwrite_file = win32_write_file_func;\n    pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;\n    pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;\n    pzlib_filefunc_def->zclose_file = win32_close_file_func;\n    pzlib_filefunc_def->zerror_file = win32_error_file_func;\n    pzlib_filefunc_def->opaque = NULL;\n}\n\n\nvoid fill_win32_filefunc64A(zlib_filefunc64_def* pzlib_filefunc_def)\n{\n    pzlib_filefunc_def->zopen64_file = win32_open64_file_funcA;\n    pzlib_filefunc_def->zread_file = win32_read_file_func;\n    pzlib_filefunc_def->zwrite_file = win32_write_file_func;\n    pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;\n    pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;\n    pzlib_filefunc_def->zclose_file = win32_close_file_func;\n    pzlib_filefunc_def->zerror_file = win32_error_file_func;\n    pzlib_filefunc_def->opaque = NULL;\n}\n\n\nvoid fill_win32_filefunc64W(zlib_filefunc64_def* pzlib_filefunc_def)\n{\n    pzlib_filefunc_def->zopen64_file = win32_open64_file_funcW;\n    pzlib_filefunc_def->zread_file = win32_read_file_func;\n    pzlib_filefunc_def->zwrite_file = win32_write_file_func;\n    pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;\n    pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;\n    pzlib_filefunc_def->zclose_file = win32_close_file_func;\n    pzlib_filefunc_def->zerror_file = win32_error_file_func;\n    pzlib_filefunc_def->opaque = NULL;\n}\n"
  },
  {
    "path": "external/minizip/iowin32.h",
    "content": "/* iowin32.h -- IO base function header for compress/uncompress .zip\n     Version 1.1, February 14h, 2010\n     part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Modifications for Zip64 support\n         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )\n\n         For more info read MiniZip_info.txt\n\n*/\n\n#include <windows.h>\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nvoid fill_win32_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));\nvoid fill_win32_filefunc64 OF((zlib_filefunc64_def* pzlib_filefunc_def));\nvoid fill_win32_filefunc64A OF((zlib_filefunc64_def* pzlib_filefunc_def));\nvoid fill_win32_filefunc64W OF((zlib_filefunc64_def* pzlib_filefunc_def));\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "external/minizip/make_vms.com",
    "content": "$ if f$search(\"ioapi.h_orig\") .eqs. \"\" then copy ioapi.h ioapi.h_orig\n$ open/write zdef vmsdefs.h\n$ copy sys$input: zdef\n$ deck\n#define unix\n#define fill_zlib_filefunc64_32_def_from_filefunc32 fillzffunc64from\n#define Write_Zip64EndOfCentralDirectoryLocator Write_Zip64EoDLocator\n#define Write_Zip64EndOfCentralDirectoryRecord Write_Zip64EoDRecord\n#define Write_EndOfCentralDirectoryRecord Write_EoDRecord\n$ eod\n$ close zdef\n$ copy vmsdefs.h,ioapi.h_orig ioapi.h\n$ cc/include=[--]/prefix=all ioapi.c\n$ cc/include=[--]/prefix=all miniunz.c\n$ cc/include=[--]/prefix=all unzip.c\n$ cc/include=[--]/prefix=all minizip.c\n$ cc/include=[--]/prefix=all zip.c\n$ link miniunz,unzip,ioapi,[--]libz.olb/lib\n$ link minizip,zip,ioapi,[--]libz.olb/lib\n$ mcr []minizip test minizip_info.txt\n$ mcr []miniunz -l test.zip\n$ rename minizip_info.txt; minizip_info.txt_old\n$ mcr []miniunz test.zip\n$ delete test.zip;*\n$exit\n"
  },
  {
    "path": "external/minizip/miniunz.c",
    "content": "/*\n   miniunz.c\n   Version 1.1, February 14h, 2010\n   sample part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Modifications of Unzip for Zip64\n         Copyright (C) 2007-2008 Even Rouault\n\n         Modifications for Zip64 support on both zip and unzip\n         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )\n*/\n\n#ifndef _WIN32\n        #ifndef __USE_FILE_OFFSET64\n                #define __USE_FILE_OFFSET64\n        #endif\n        #ifndef __USE_LARGEFILE64\n                #define __USE_LARGEFILE64\n        #endif\n        #ifndef _LARGEFILE64_SOURCE\n                #define _LARGEFILE64_SOURCE\n        #endif\n        #ifndef _FILE_OFFSET_BIT\n                #define _FILE_OFFSET_BIT 64\n        #endif\n#endif\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <time.h>\n#include <errno.h>\n#include <fcntl.h>\n\n#ifdef unix\n# include <unistd.h>\n# include <utime.h>\n#else\n# include <direct.h>\n# include <io.h>\n#endif\n\n#include \"unzip.h\"\n\n#define CASESENSITIVITY (0)\n#define WRITEBUFFERSIZE (8192)\n#define MAXFILENAME (256)\n\n#ifdef _WIN32\n#define USEWIN32IOAPI\n#include \"iowin32.h\"\n#endif\n/*\n  mini unzip, demo of unzip package\n\n  usage :\n  Usage : miniunz [-exvlo] file.zip [file_to_extract] [-d extractdir]\n\n  list the file in the zipfile, and print the content of FILE_ID.ZIP or README.TXT\n    if it exists\n*/\n\n\n/* change_file_date : change the date/time of a file\n    filename : the filename of the file where date/time must be modified\n    dosdate : the new date at the MSDos format (4 bytes)\n    tmu_date : the SAME new date at the tm_unz format */\nvoid change_file_date(filename,dosdate,tmu_date)\n    const char *filename;\n    uLong dosdate;\n    tm_unz tmu_date;\n{\n#ifdef _WIN32\n  HANDLE hFile;\n  FILETIME ftm,ftLocal,ftCreate,ftLastAcc,ftLastWrite;\n\n  hFile = CreateFileA(filename,GENERIC_READ | GENERIC_WRITE,\n                      0,NULL,OPEN_EXISTING,0,NULL);\n  GetFileTime(hFile,&ftCreate,&ftLastAcc,&ftLastWrite);\n  DosDateTimeToFileTime((WORD)(dosdate>>16),(WORD)dosdate,&ftLocal);\n  LocalFileTimeToFileTime(&ftLocal,&ftm);\n  SetFileTime(hFile,&ftm,&ftLastAcc,&ftm);\n  CloseHandle(hFile);\n#else\n#ifdef unix\n  struct utimbuf ut;\n  struct tm newdate;\n  newdate.tm_sec = tmu_date.tm_sec;\n  newdate.tm_min=tmu_date.tm_min;\n  newdate.tm_hour=tmu_date.tm_hour;\n  newdate.tm_mday=tmu_date.tm_mday;\n  newdate.tm_mon=tmu_date.tm_mon;\n  if (tmu_date.tm_year > 1900)\n      newdate.tm_year=tmu_date.tm_year - 1900;\n  else\n      newdate.tm_year=tmu_date.tm_year ;\n  newdate.tm_isdst=-1;\n\n  ut.actime=ut.modtime=mktime(&newdate);\n  utime(filename,&ut);\n#endif\n#endif\n}\n\n\n/* mymkdir and change_file_date are not 100 % portable\n   As I don't know well Unix, I wait feedback for the unix portion */\n\nint mymkdir(dirname)\n    const char* dirname;\n{\n    int ret=0;\n#ifdef _WIN32\n    ret = _mkdir(dirname);\n#else\n#ifdef unix\n    ret = mkdir (dirname,0775);\n#endif\n#endif\n    return ret;\n}\n\nint makedir (newdir)\n    char *newdir;\n{\n  char *buffer ;\n  char *p;\n  int  len = (int)strlen(newdir);\n\n  if (len <= 0)\n    return 0;\n\n  buffer = (char*)malloc(len+1);\n        if (buffer==NULL)\n        {\n                printf(\"Error allocating memory\\n\");\n                return UNZ_INTERNALERROR;\n        }\n  strcpy(buffer,newdir);\n\n  if (buffer[len-1] == '/') {\n    buffer[len-1] = '\\0';\n  }\n  if (mymkdir(buffer) == 0)\n    {\n      free(buffer);\n      return 1;\n    }\n\n  p = buffer+1;\n  while (1)\n    {\n      char hold;\n\n      while(*p && *p != '\\\\' && *p != '/')\n        p++;\n      hold = *p;\n      *p = 0;\n      if ((mymkdir(buffer) == -1) && (errno == ENOENT))\n        {\n          printf(\"couldn't create directory %s\\n\",buffer);\n          free(buffer);\n          return 0;\n        }\n      if (hold == 0)\n        break;\n      *p++ = hold;\n    }\n  free(buffer);\n  return 1;\n}\n\nvoid do_banner()\n{\n    printf(\"MiniUnz 1.01b, demo of zLib + Unz package written by Gilles Vollant\\n\");\n    printf(\"more info at http://www.winimage.com/zLibDll/unzip.html\\n\\n\");\n}\n\nvoid do_help()\n{\n    printf(\"Usage : miniunz [-e] [-x] [-v] [-l] [-o] [-p password] file.zip [file_to_extr.] [-d extractdir]\\n\\n\" \\\n           \"  -e  Extract without pathname (junk paths)\\n\" \\\n           \"  -x  Extract with pathname\\n\" \\\n           \"  -v  list files\\n\" \\\n           \"  -l  list files\\n\" \\\n           \"  -d  directory to extract into\\n\" \\\n           \"  -o  overwrite files without prompting\\n\" \\\n           \"  -p  extract crypted file using password\\n\\n\");\n}\n\nvoid Display64BitsSize(ZPOS64_T n, int size_char)\n{\n  /* to avoid compatibility problem , we do here the conversion */\n  char number[21];\n  int offset=19;\n  int pos_string = 19;\n  number[20]=0;\n  for (;;) {\n      number[offset]=(char)((n%10)+'0');\n      if (number[offset] != '0')\n          pos_string=offset;\n      n/=10;\n      if (offset==0)\n          break;\n      offset--;\n  }\n  {\n      int size_display_string = 19-pos_string;\n      while (size_char > size_display_string)\n      {\n          size_char--;\n          printf(\" \");\n      }\n  }\n\n  printf(\"%s\",&number[pos_string]);\n}\n\nint do_list(uf)\n    unzFile uf;\n{\n    uLong i;\n    unz_global_info64 gi;\n    int err;\n\n    err = unzGetGlobalInfo64(uf,&gi);\n    if (err!=UNZ_OK)\n        printf(\"error %d with zipfile in unzGetGlobalInfo \\n\",err);\n    printf(\"  Length  Method     Size Ratio   Date    Time   CRC-32     Name\\n\");\n    printf(\"  ------  ------     ---- -----   ----    ----   ------     ----\\n\");\n    for (i=0;i<gi.number_entry;i++)\n    {\n        char filename_inzip[256];\n        unz_file_info64 file_info;\n        uLong ratio=0;\n        const char *string_method;\n        char charCrypt=' ';\n        err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);\n        if (err!=UNZ_OK)\n        {\n            printf(\"error %d with zipfile in unzGetCurrentFileInfo\\n\",err);\n            break;\n        }\n        if (file_info.uncompressed_size>0)\n            ratio = (uLong)((file_info.compressed_size*100)/file_info.uncompressed_size);\n\n        /* display a '*' if the file is crypted */\n        if ((file_info.flag & 1) != 0)\n            charCrypt='*';\n\n        if (file_info.compression_method==0)\n            string_method=\"Stored\";\n        else\n        if (file_info.compression_method==Z_DEFLATED)\n        {\n            uInt iLevel=(uInt)((file_info.flag & 0x6)/2);\n            if (iLevel==0)\n              string_method=\"Defl:N\";\n            else if (iLevel==1)\n              string_method=\"Defl:X\";\n            else if ((iLevel==2) || (iLevel==3))\n              string_method=\"Defl:F\"; /* 2:fast , 3 : extra fast*/\n        }\n        else\n        if (file_info.compression_method==Z_BZIP2ED)\n        {\n              string_method=\"BZip2 \";\n        }\n        else\n            string_method=\"Unkn. \";\n\n        Display64BitsSize(file_info.uncompressed_size,7);\n        printf(\"  %6s%c\",string_method,charCrypt);\n        Display64BitsSize(file_info.compressed_size,7);\n        printf(\" %3lu%%  %2.2lu-%2.2lu-%2.2lu  %2.2lu:%2.2lu  %8.8lx   %s\\n\",\n                ratio,\n                (uLong)file_info.tmu_date.tm_mon + 1,\n                (uLong)file_info.tmu_date.tm_mday,\n                (uLong)file_info.tmu_date.tm_year % 100,\n                (uLong)file_info.tmu_date.tm_hour,(uLong)file_info.tmu_date.tm_min,\n                (uLong)file_info.crc,filename_inzip);\n        if ((i+1)<gi.number_entry)\n        {\n            err = unzGoToNextFile(uf);\n            if (err!=UNZ_OK)\n            {\n                printf(\"error %d with zipfile in unzGoToNextFile\\n\",err);\n                break;\n            }\n        }\n    }\n\n    return 0;\n}\n\n\nint do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password)\n    unzFile uf;\n    const int* popt_extract_without_path;\n    int* popt_overwrite;\n    const char* password;\n{\n    char filename_inzip[256];\n    char* filename_withoutpath;\n    char* p;\n    int err=UNZ_OK;\n    FILE *fout=NULL;\n    void* buf;\n    uInt size_buf;\n\n    unz_file_info64 file_info;\n    uLong ratio=0;\n    err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);\n\n    if (err!=UNZ_OK)\n    {\n        printf(\"error %d with zipfile in unzGetCurrentFileInfo\\n\",err);\n        return err;\n    }\n\n    size_buf = WRITEBUFFERSIZE;\n    buf = (void*)malloc(size_buf);\n    if (buf==NULL)\n    {\n        printf(\"Error allocating memory\\n\");\n        return UNZ_INTERNALERROR;\n    }\n\n    p = filename_withoutpath = filename_inzip;\n    while ((*p) != '\\0')\n    {\n        if (((*p)=='/') || ((*p)=='\\\\'))\n            filename_withoutpath = p+1;\n        p++;\n    }\n\n    if ((*filename_withoutpath)=='\\0')\n    {\n        if ((*popt_extract_without_path)==0)\n        {\n            printf(\"creating directory: %s\\n\",filename_inzip);\n            mymkdir(filename_inzip);\n        }\n    }\n    else\n    {\n        const char* write_filename;\n        int skip=0;\n\n        if ((*popt_extract_without_path)==0)\n            write_filename = filename_inzip;\n        else\n            write_filename = filename_withoutpath;\n\n        err = unzOpenCurrentFilePassword(uf,password);\n        if (err!=UNZ_OK)\n        {\n            printf(\"error %d with zipfile in unzOpenCurrentFilePassword\\n\",err);\n        }\n\n        if (((*popt_overwrite)==0) && (err==UNZ_OK))\n        {\n            char rep=0;\n            FILE* ftestexist;\n            ftestexist = fopen64(write_filename,\"rb\");\n            if (ftestexist!=NULL)\n            {\n                fclose(ftestexist);\n                do\n                {\n                    char answer[128];\n                    int ret;\n\n                    printf(\"The file %s exists. Overwrite ? [y]es, [n]o, [A]ll: \",write_filename);\n                    ret = scanf(\"%1s\",answer);\n                    if (ret != 1)\n                    {\n                       exit(EXIT_FAILURE);\n                    }\n                    rep = answer[0] ;\n                    if ((rep>='a') && (rep<='z'))\n                        rep -= 0x20;\n                }\n                while ((rep!='Y') && (rep!='N') && (rep!='A'));\n            }\n\n            if (rep == 'N')\n                skip = 1;\n\n            if (rep == 'A')\n                *popt_overwrite=1;\n        }\n\n        if ((skip==0) && (err==UNZ_OK))\n        {\n            fout=fopen64(write_filename,\"wb\");\n\n            /* some zipfile don't contain directory alone before file */\n            if ((fout==NULL) && ((*popt_extract_without_path)==0) &&\n                                (filename_withoutpath!=(char*)filename_inzip))\n            {\n                char c=*(filename_withoutpath-1);\n                *(filename_withoutpath-1)='\\0';\n                makedir(write_filename);\n                *(filename_withoutpath-1)=c;\n                fout=fopen64(write_filename,\"wb\");\n            }\n\n            if (fout==NULL)\n            {\n                printf(\"error opening %s\\n\",write_filename);\n            }\n        }\n\n        if (fout!=NULL)\n        {\n            printf(\" extracting: %s\\n\",write_filename);\n\n            do\n            {\n                err = unzReadCurrentFile(uf,buf,size_buf);\n                if (err<0)\n                {\n                    printf(\"error %d with zipfile in unzReadCurrentFile\\n\",err);\n                    break;\n                }\n                if (err>0)\n                    if (fwrite(buf,err,1,fout)!=1)\n                    {\n                        printf(\"error in writing extracted file\\n\");\n                        err=UNZ_ERRNO;\n                        break;\n                    }\n            }\n            while (err>0);\n            if (fout)\n                    fclose(fout);\n\n            if (err==0)\n                change_file_date(write_filename,file_info.dosDate,\n                                 file_info.tmu_date);\n        }\n\n        if (err==UNZ_OK)\n        {\n            err = unzCloseCurrentFile (uf);\n            if (err!=UNZ_OK)\n            {\n                printf(\"error %d with zipfile in unzCloseCurrentFile\\n\",err);\n            }\n        }\n        else\n            unzCloseCurrentFile(uf); /* don't lose the error */\n    }\n\n    free(buf);\n    return err;\n}\n\n\nint do_extract(uf,opt_extract_without_path,opt_overwrite,password)\n    unzFile uf;\n    int opt_extract_without_path;\n    int opt_overwrite;\n    const char* password;\n{\n    uLong i;\n    unz_global_info64 gi;\n    int err;\n    FILE* fout=NULL;\n\n    err = unzGetGlobalInfo64(uf,&gi);\n    if (err!=UNZ_OK)\n        printf(\"error %d with zipfile in unzGetGlobalInfo \\n\",err);\n\n    for (i=0;i<gi.number_entry;i++)\n    {\n        if (do_extract_currentfile(uf,&opt_extract_without_path,\n                                      &opt_overwrite,\n                                      password) != UNZ_OK)\n            break;\n\n        if ((i+1)<gi.number_entry)\n        {\n            err = unzGoToNextFile(uf);\n            if (err!=UNZ_OK)\n            {\n                printf(\"error %d with zipfile in unzGoToNextFile\\n\",err);\n                break;\n            }\n        }\n    }\n\n    return 0;\n}\n\nint do_extract_onefile(uf,filename,opt_extract_without_path,opt_overwrite,password)\n    unzFile uf;\n    const char* filename;\n    int opt_extract_without_path;\n    int opt_overwrite;\n    const char* password;\n{\n    int err = UNZ_OK;\n    if (unzLocateFile(uf,filename,CASESENSITIVITY)!=UNZ_OK)\n    {\n        printf(\"file %s not found in the zipfile\\n\",filename);\n        return 2;\n    }\n\n    if (do_extract_currentfile(uf,&opt_extract_without_path,\n                                      &opt_overwrite,\n                                      password) == UNZ_OK)\n        return 0;\n    else\n        return 1;\n}\n\n\nint main(argc,argv)\n    int argc;\n    char *argv[];\n{\n    const char *zipfilename=NULL;\n    const char *filename_to_extract=NULL;\n    const char *password=NULL;\n    char filename_try[MAXFILENAME+16] = \"\";\n    int i;\n    int ret_value=0;\n    int opt_do_list=0;\n    int opt_do_extract=1;\n    int opt_do_extract_withoutpath=0;\n    int opt_overwrite=0;\n    int opt_extractdir=0;\n    const char *dirname=NULL;\n    unzFile uf=NULL;\n\n    do_banner();\n    if (argc==1)\n    {\n        do_help();\n        return 0;\n    }\n    else\n    {\n        for (i=1;i<argc;i++)\n        {\n            if ((*argv[i])=='-')\n            {\n                const char *p=argv[i]+1;\n\n                while ((*p)!='\\0')\n                {\n                    char c=*(p++);;\n                    if ((c=='l') || (c=='L'))\n                        opt_do_list = 1;\n                    if ((c=='v') || (c=='V'))\n                        opt_do_list = 1;\n                    if ((c=='x') || (c=='X'))\n                        opt_do_extract = 1;\n                    if ((c=='e') || (c=='E'))\n                        opt_do_extract = opt_do_extract_withoutpath = 1;\n                    if ((c=='o') || (c=='O'))\n                        opt_overwrite=1;\n                    if ((c=='d') || (c=='D'))\n                    {\n                        opt_extractdir=1;\n                        dirname=argv[i+1];\n                    }\n\n                    if (((c=='p') || (c=='P')) && (i+1<argc))\n                    {\n                        password=argv[i+1];\n                        i++;\n                    }\n                }\n            }\n            else\n            {\n                if (zipfilename == NULL)\n                    zipfilename = argv[i];\n                else if ((filename_to_extract==NULL) && (!opt_extractdir))\n                        filename_to_extract = argv[i] ;\n            }\n        }\n    }\n\n    if (zipfilename!=NULL)\n    {\n\n#        ifdef USEWIN32IOAPI\n        zlib_filefunc64_def ffunc;\n#        endif\n\n        strncpy(filename_try, zipfilename,MAXFILENAME-1);\n        /* strncpy doesnt append the trailing NULL, of the string is too long. */\n        filename_try[ MAXFILENAME ] = '\\0';\n\n#        ifdef USEWIN32IOAPI\n        fill_win32_filefunc64A(&ffunc);\n        uf = unzOpen2_64(zipfilename,&ffunc);\n#        else\n        uf = unzOpen64(zipfilename);\n#        endif\n        if (uf==NULL)\n        {\n            strcat(filename_try,\".zip\");\n#            ifdef USEWIN32IOAPI\n            uf = unzOpen2_64(filename_try,&ffunc);\n#            else\n            uf = unzOpen64(filename_try);\n#            endif\n        }\n    }\n\n    if (uf==NULL)\n    {\n        printf(\"Cannot open %s or %s.zip\\n\",zipfilename,zipfilename);\n        return 1;\n    }\n    printf(\"%s opened\\n\",filename_try);\n\n    if (opt_do_list==1)\n        ret_value = do_list(uf);\n    else if (opt_do_extract==1)\n    {\n#ifdef _WIN32\n        if (opt_extractdir && _chdir(dirname))\n#else\n        if (opt_extractdir && chdir(dirname))\n#endif\n        {\n          printf(\"Error changing into %s, aborting\\n\", dirname);\n          exit(-1);\n        }\n\n        if (filename_to_extract == NULL)\n            ret_value = do_extract(uf, opt_do_extract_withoutpath, opt_overwrite, password);\n        else\n            ret_value = do_extract_onefile(uf, filename_to_extract, opt_do_extract_withoutpath, opt_overwrite, password);\n    }\n\n    unzClose(uf);\n\n    return ret_value;\n}\n"
  },
  {
    "path": "external/minizip/minizip.c",
    "content": "/*\n   minizip.c\n   Version 1.1, February 14h, 2010\n   sample part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Modifications of Unzip for Zip64\n         Copyright (C) 2007-2008 Even Rouault\n\n         Modifications for Zip64 support on both zip and unzip\n         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )\n*/\n\n\n#ifndef _WIN32\n        #ifndef __USE_FILE_OFFSET64\n                #define __USE_FILE_OFFSET64\n        #endif\n        #ifndef __USE_LARGEFILE64\n                #define __USE_LARGEFILE64\n        #endif\n        #ifndef _LARGEFILE64_SOURCE\n                #define _LARGEFILE64_SOURCE\n        #endif\n        #ifndef _FILE_OFFSET_BIT\n                #define _FILE_OFFSET_BIT 64\n        #endif\n#endif\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <time.h>\n#include <errno.h>\n#include <fcntl.h>\n\n#ifdef unix\n# include <unistd.h>\n# include <utime.h>\n# include <sys/types.h>\n# include <sys/stat.h>\n#else\n# include <direct.h>\n# include <io.h>\n#endif\n\n#include \"zip.h\"\n\n#ifdef _WIN32\n        #define USEWIN32IOAPI\n        #include \"iowin32.h\"\n#endif\n\n\n\n#define WRITEBUFFERSIZE (16384)\n#define MAXFILENAME (256)\n\n#ifdef _WIN32\nuLong filetime(f, tmzip, dt)\n    char *f;                /* name of file to get info on */\n    tm_zip *tmzip;             /* return value: access, modific. and creation times */\n    uLong *dt;             /* dostime */\n{\n  int ret = 0;\n  {\n      FILETIME ftLocal;\n      HANDLE hFind;\n      WIN32_FIND_DATAA ff32;\n\n      hFind = FindFirstFileA(f,&ff32);\n      if (hFind != INVALID_HANDLE_VALUE)\n      {\n        FileTimeToLocalFileTime(&(ff32.ftLastWriteTime),&ftLocal);\n        FileTimeToDosDateTime(&ftLocal,((LPWORD)dt)+1,((LPWORD)dt)+0);\n        FindClose(hFind);\n        ret = 1;\n      }\n  }\n  return ret;\n}\n#else\n#ifdef unix\nuLong filetime(f, tmzip, dt)\n    char *f;               /* name of file to get info on */\n    tm_zip *tmzip;         /* return value: access, modific. and creation times */\n    uLong *dt;             /* dostime */\n{\n  int ret=0;\n  struct stat s;        /* results of stat() */\n  struct tm* filedate;\n  time_t tm_t=0;\n\n  if (strcmp(f,\"-\")!=0)\n  {\n    char name[MAXFILENAME+1];\n    int len = strlen(f);\n    if (len > MAXFILENAME)\n      len = MAXFILENAME;\n\n    strncpy(name, f,MAXFILENAME-1);\n    /* strncpy doesnt append the trailing NULL, of the string is too long. */\n    name[ MAXFILENAME ] = '\\0';\n\n    if (name[len - 1] == '/')\n      name[len - 1] = '\\0';\n    /* not all systems allow stat'ing a file with / appended */\n    if (stat(name,&s)==0)\n    {\n      tm_t = s.st_mtime;\n      ret = 1;\n    }\n  }\n  filedate = localtime(&tm_t);\n\n  tmzip->tm_sec  = filedate->tm_sec;\n  tmzip->tm_min  = filedate->tm_min;\n  tmzip->tm_hour = filedate->tm_hour;\n  tmzip->tm_mday = filedate->tm_mday;\n  tmzip->tm_mon  = filedate->tm_mon ;\n  tmzip->tm_year = filedate->tm_year;\n\n  return ret;\n}\n#else\nuLong filetime(f, tmzip, dt)\n    char *f;                /* name of file to get info on */\n    tm_zip *tmzip;             /* return value: access, modific. and creation times */\n    uLong *dt;             /* dostime */\n{\n    return 0;\n}\n#endif\n#endif\n\n\n\n\nint check_exist_file(filename)\n    const char* filename;\n{\n    FILE* ftestexist;\n    int ret = 1;\n    ftestexist = fopen64(filename,\"rb\");\n    if (ftestexist==NULL)\n        ret = 0;\n    else\n        fclose(ftestexist);\n    return ret;\n}\n\nvoid do_banner()\n{\n    printf(\"MiniZip 1.1, demo of zLib + MiniZip64 package, written by Gilles Vollant\\n\");\n    printf(\"more info on MiniZip at http://www.winimage.com/zLibDll/minizip.html\\n\\n\");\n}\n\nvoid do_help()\n{\n    printf(\"Usage : minizip [-o] [-a] [-0 to -9] [-p password] [-j] file.zip [files_to_add]\\n\\n\" \\\n           \"  -o  Overwrite existing file.zip\\n\" \\\n           \"  -a  Append to existing file.zip\\n\" \\\n           \"  -0  Store only\\n\" \\\n           \"  -1  Compress faster\\n\" \\\n           \"  -9  Compress better\\n\\n\" \\\n           \"  -j  exclude path. store only the file name.\\n\\n\");\n}\n\n/* calculate the CRC32 of a file,\n   because to encrypt a file, we need known the CRC32 of the file before */\nint getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigned long* result_crc)\n{\n   unsigned long calculate_crc=0;\n   int err=ZIP_OK;\n   FILE * fin = fopen64(filenameinzip,\"rb\");\n   unsigned long size_read = 0;\n   unsigned long total_read = 0;\n   if (fin==NULL)\n   {\n       err = ZIP_ERRNO;\n   }\n\n    if (err == ZIP_OK)\n        do\n        {\n            err = ZIP_OK;\n            size_read = (int)fread(buf,1,size_buf,fin);\n            if (size_read < size_buf)\n                if (feof(fin)==0)\n            {\n                printf(\"error in reading %s\\n\",filenameinzip);\n                err = ZIP_ERRNO;\n            }\n\n            if (size_read>0)\n                calculate_crc = crc32(calculate_crc,buf,size_read);\n            total_read += size_read;\n\n        } while ((err == ZIP_OK) && (size_read>0));\n\n    if (fin)\n        fclose(fin);\n\n    *result_crc=calculate_crc;\n    printf(\"file %s crc %lx\\n\", filenameinzip, calculate_crc);\n    return err;\n}\n\nint isLargeFile(const char* filename)\n{\n  int largeFile = 0;\n  ZPOS64_T pos = 0;\n  FILE* pFile = fopen64(filename, \"rb\");\n\n  if(pFile != NULL)\n  {\n    int n = fseeko64(pFile, 0, SEEK_END);\n\n    pos = ftello64(pFile);\n\n                printf(\"File : %s is %lld bytes\\n\", filename, pos);\n\n    if(pos >= 0xffffffff)\n     largeFile = 1;\n\n                fclose(pFile);\n  }\n\n return largeFile;\n}\n\nint main(argc,argv)\n    int argc;\n    char *argv[];\n{\n    int i;\n    int opt_overwrite=0;\n    int opt_compress_level=Z_DEFAULT_COMPRESSION;\n    int opt_exclude_path=0;\n    int zipfilenamearg = 0;\n    char filename_try[MAXFILENAME+16];\n    int zipok;\n    int err=0;\n    int size_buf=0;\n    void* buf=NULL;\n    const char* password=NULL;\n\n\n    do_banner();\n    if (argc==1)\n    {\n        do_help();\n        return 0;\n    }\n    else\n    {\n        for (i=1;i<argc;i++)\n        {\n            if ((*argv[i])=='-')\n            {\n                const char *p=argv[i]+1;\n\n                while ((*p)!='\\0')\n                {\n                    char c=*(p++);;\n                    if ((c=='o') || (c=='O'))\n                        opt_overwrite = 1;\n                    if ((c=='a') || (c=='A'))\n                        opt_overwrite = 2;\n                    if ((c>='0') && (c<='9'))\n                        opt_compress_level = c-'0';\n                    if ((c=='j') || (c=='J'))\n                        opt_exclude_path = 1;\n\n                    if (((c=='p') || (c=='P')) && (i+1<argc))\n                    {\n                        password=argv[i+1];\n                        i++;\n                    }\n                }\n            }\n            else\n            {\n                if (zipfilenamearg == 0)\n                {\n                    zipfilenamearg = i ;\n                }\n            }\n        }\n    }\n\n    size_buf = WRITEBUFFERSIZE;\n    buf = (void*)malloc(size_buf);\n    if (buf==NULL)\n    {\n        printf(\"Error allocating memory\\n\");\n        return ZIP_INTERNALERROR;\n    }\n\n    if (zipfilenamearg==0)\n    {\n        zipok=0;\n    }\n    else\n    {\n        int i,len;\n        int dot_found=0;\n\n        zipok = 1 ;\n        strncpy(filename_try, argv[zipfilenamearg],MAXFILENAME-1);\n        /* strncpy doesnt append the trailing NULL, of the string is too long. */\n        filename_try[ MAXFILENAME ] = '\\0';\n\n        len=(int)strlen(filename_try);\n        for (i=0;i<len;i++)\n            if (filename_try[i]=='.')\n                dot_found=1;\n\n        if (dot_found==0)\n            strcat(filename_try,\".zip\");\n\n        if (opt_overwrite==2)\n        {\n            /* if the file don't exist, we not append file */\n            if (check_exist_file(filename_try)==0)\n                opt_overwrite=1;\n        }\n        else\n        if (opt_overwrite==0)\n            if (check_exist_file(filename_try)!=0)\n            {\n                char rep=0;\n                do\n                {\n                    char answer[128];\n                    int ret;\n                    printf(\"The file %s exists. Overwrite ? [y]es, [n]o, [a]ppend : \",filename_try);\n                    ret = scanf(\"%1s\",answer);\n                    if (ret != 1)\n                    {\n                       exit(EXIT_FAILURE);\n                    }\n                    rep = answer[0] ;\n                    if ((rep>='a') && (rep<='z'))\n                        rep -= 0x20;\n                }\n                while ((rep!='Y') && (rep!='N') && (rep!='A'));\n                if (rep=='N')\n                    zipok = 0;\n                if (rep=='A')\n                    opt_overwrite = 2;\n            }\n    }\n\n    if (zipok==1)\n    {\n        zipFile zf;\n        int errclose;\n#        ifdef USEWIN32IOAPI\n        zlib_filefunc64_def ffunc;\n        fill_win32_filefunc64A(&ffunc);\n        zf = zipOpen2_64(filename_try,(opt_overwrite==2) ? 2 : 0,NULL,&ffunc);\n#        else\n        zf = zipOpen64(filename_try,(opt_overwrite==2) ? 2 : 0);\n#        endif\n\n        if (zf == NULL)\n        {\n            printf(\"error opening %s\\n\",filename_try);\n            err= ZIP_ERRNO;\n        }\n        else\n            printf(\"creating %s\\n\",filename_try);\n\n        for (i=zipfilenamearg+1;(i<argc) && (err==ZIP_OK);i++)\n        {\n            if (!((((*(argv[i]))=='-') || ((*(argv[i]))=='/')) &&\n                  ((argv[i][1]=='o') || (argv[i][1]=='O') ||\n                   (argv[i][1]=='a') || (argv[i][1]=='A') ||\n                   (argv[i][1]=='p') || (argv[i][1]=='P') ||\n                   ((argv[i][1]>='0') || (argv[i][1]<='9'))) &&\n                  (strlen(argv[i]) == 2)))\n            {\n                FILE * fin;\n                int size_read;\n                const char* filenameinzip = argv[i];\n                const char *savefilenameinzip;\n                zip_fileinfo zi;\n                unsigned long crcFile=0;\n                int zip64 = 0;\n\n                zi.tmz_date.tm_sec = zi.tmz_date.tm_min = zi.tmz_date.tm_hour =\n                zi.tmz_date.tm_mday = zi.tmz_date.tm_mon = zi.tmz_date.tm_year = 0;\n                zi.dosDate = 0;\n                zi.internal_fa = 0;\n                zi.external_fa = 0;\n                filetime(filenameinzip,&zi.tmz_date,&zi.dosDate);\n\n/*\n                err = zipOpenNewFileInZip(zf,filenameinzip,&zi,\n                                 NULL,0,NULL,0,NULL / * comment * /,\n                                 (opt_compress_level != 0) ? Z_DEFLATED : 0,\n                                 opt_compress_level);\n*/\n                if ((password != NULL) && (err==ZIP_OK))\n                    err = getFileCrc(filenameinzip,buf,size_buf,&crcFile);\n\n                zip64 = isLargeFile(filenameinzip);\n\n                                                         /* The path name saved, should not include a leading slash. */\n               /*if it did, windows/xp and dynazip couldn't read the zip file. */\n                 savefilenameinzip = filenameinzip;\n                 while( savefilenameinzip[0] == '\\\\' || savefilenameinzip[0] == '/' )\n                 {\n                     savefilenameinzip++;\n                 }\n\n                 /*should the zip file contain any path at all?*/\n                 if( opt_exclude_path )\n                 {\n                     const char *tmpptr;\n                     const char *lastslash = 0;\n                     for( tmpptr = savefilenameinzip; *tmpptr; tmpptr++)\n                     {\n                         if( *tmpptr == '\\\\' || *tmpptr == '/')\n                         {\n                             lastslash = tmpptr;\n                         }\n                     }\n                     if( lastslash != NULL )\n                     {\n                         savefilenameinzip = lastslash+1; // base filename follows last slash.\n                     }\n                 }\n\n                 /**/\n                err = zipOpenNewFileInZip3_64(zf,savefilenameinzip,&zi,\n                                 NULL,0,NULL,0,NULL /* comment*/,\n                                 (opt_compress_level != 0) ? Z_DEFLATED : 0,\n                                 opt_compress_level,0,\n                                 /* -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, */\n                                 -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,\n                                 password,crcFile, zip64);\n\n                if (err != ZIP_OK)\n                    printf(\"error in opening %s in zipfile\\n\",filenameinzip);\n                else\n                {\n                    fin = fopen64(filenameinzip,\"rb\");\n                    if (fin==NULL)\n                    {\n                        err=ZIP_ERRNO;\n                        printf(\"error in opening %s for reading\\n\",filenameinzip);\n                    }\n                }\n\n                if (err == ZIP_OK)\n                    do\n                    {\n                        err = ZIP_OK;\n                        size_read = (int)fread(buf,1,size_buf,fin);\n                        if (size_read < size_buf)\n                            if (feof(fin)==0)\n                        {\n                            printf(\"error in reading %s\\n\",filenameinzip);\n                            err = ZIP_ERRNO;\n                        }\n\n                        if (size_read>0)\n                        {\n                            err = zipWriteInFileInZip (zf,buf,size_read);\n                            if (err<0)\n                            {\n                                printf(\"error in writing %s in the zipfile\\n\",\n                                                 filenameinzip);\n                            }\n\n                        }\n                    } while ((err == ZIP_OK) && (size_read>0));\n\n                if (fin)\n                    fclose(fin);\n\n                if (err<0)\n                    err=ZIP_ERRNO;\n                else\n                {\n                    err = zipCloseFileInZip(zf);\n                    if (err!=ZIP_OK)\n                        printf(\"error in closing %s in the zipfile\\n\",\n                                    filenameinzip);\n                }\n            }\n        }\n        errclose = zipClose(zf,NULL);\n        if (errclose != ZIP_OK)\n            printf(\"error in closing %s\\n\",filename_try);\n    }\n    else\n    {\n       do_help();\n    }\n\n    free(buf);\n    return 0;\n}\n"
  },
  {
    "path": "external/minizip/mztools.c",
    "content": "/*\n  Additional tools for Minizip\n  Code: Xavier Roche '2004\n  License: Same as ZLIB (www.gzip.org)\n*/\n\n/* Code */\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include \"zlib.h\"\n#include \"unzip.h\"\n\n#define READ_8(adr)  ((unsigned char)*(adr))\n#define READ_16(adr) ( READ_8(adr) | (READ_8(adr+1) << 8) )\n#define READ_32(adr) ( READ_16(adr) | (READ_16((adr)+2) << 16) )\n\n#define WRITE_8(buff, n) do { \\\n  *((unsigned char*)(buff)) = (unsigned char) ((n) & 0xff); \\\n} while(0)\n#define WRITE_16(buff, n) do { \\\n  WRITE_8((unsigned char*)(buff), n); \\\n  WRITE_8(((unsigned char*)(buff)) + 1, (n) >> 8); \\\n} while(0)\n#define WRITE_32(buff, n) do { \\\n  WRITE_16((unsigned char*)(buff), (n) & 0xffff); \\\n  WRITE_16((unsigned char*)(buff) + 2, (n) >> 16); \\\n} while(0)\n\nextern int ZEXPORT unzRepair(file, fileOut, fileOutTmp, nRecovered, bytesRecovered)\nconst char* file;\nconst char* fileOut;\nconst char* fileOutTmp;\nuLong* nRecovered;\nuLong* bytesRecovered;\n{\n  int err = Z_OK;\n  FILE* fpZip = fopen(file, \"rb\");\n  FILE* fpOut = fopen(fileOut, \"wb\");\n  FILE* fpOutCD = fopen(fileOutTmp, \"wb\");\n  if (fpZip != NULL &&  fpOut != NULL) {\n    int entries = 0;\n    uLong totalBytes = 0;\n    char header[30];\n    char filename[256];\n    char extra[1024];\n    int offset = 0;\n    int offsetCD = 0;\n    while ( fread(header, 1, 30, fpZip) == 30 ) {\n      int currentOffset = offset;\n\n      /* File entry */\n      if (READ_32(header) == 0x04034b50) {\n        unsigned int version = READ_16(header + 4);\n        unsigned int gpflag = READ_16(header + 6);\n        unsigned int method = READ_16(header + 8);\n        unsigned int filetime = READ_16(header + 10);\n        unsigned int filedate = READ_16(header + 12);\n        unsigned int crc = READ_32(header + 14); /* crc */\n        unsigned int cpsize = READ_32(header + 18); /* compressed size */\n        unsigned int uncpsize = READ_32(header + 22); /* uncompressed sz */\n        unsigned int fnsize = READ_16(header + 26); /* file name length */\n        unsigned int extsize = READ_16(header + 28); /* extra field length */\n        filename[0] = extra[0] = '\\0';\n\n        /* Header */\n        if (fwrite(header, 1, 30, fpOut) == 30) {\n          offset += 30;\n        } else {\n          err = Z_ERRNO;\n          break;\n        }\n\n        /* Filename */\n        if (fnsize > 0) {\n          if (fread(filename, 1, fnsize, fpZip) == fnsize) {\n            if (fwrite(filename, 1, fnsize, fpOut) == fnsize) {\n              offset += fnsize;\n            } else {\n              err = Z_ERRNO;\n              break;\n            }\n          } else {\n            err = Z_ERRNO;\n            break;\n          }\n        } else {\n          err = Z_STREAM_ERROR;\n          break;\n        }\n\n        /* Extra field */\n        if (extsize > 0) {\n          if (fread(extra, 1, extsize, fpZip) == extsize) {\n            if (fwrite(extra, 1, extsize, fpOut) == extsize) {\n              offset += extsize;\n            } else {\n              err = Z_ERRNO;\n              break;\n            }\n          } else {\n            err = Z_ERRNO;\n            break;\n          }\n        }\n\n        /* Data */\n        {\n          int dataSize = cpsize;\n          if (dataSize == 0) {\n            dataSize = uncpsize;\n          }\n          if (dataSize > 0) {\n            char* data = malloc(dataSize);\n            if (data != NULL) {\n              if ((int)fread(data, 1, dataSize, fpZip) == dataSize) {\n                if ((int)fwrite(data, 1, dataSize, fpOut) == dataSize) {\n                  offset += dataSize;\n                  totalBytes += dataSize;\n                } else {\n                  err = Z_ERRNO;\n                }\n              } else {\n                err = Z_ERRNO;\n              }\n              free(data);\n              if (err != Z_OK) {\n                break;\n              }\n            } else {\n              err = Z_MEM_ERROR;\n              break;\n            }\n          }\n        }\n\n        /* Central directory entry */\n        {\n          char header[46];\n          char* comment = \"\";\n          int comsize = (int) strlen(comment);\n          WRITE_32(header, 0x02014b50);\n          WRITE_16(header + 4, version);\n          WRITE_16(header + 6, version);\n          WRITE_16(header + 8, gpflag);\n          WRITE_16(header + 10, method);\n          WRITE_16(header + 12, filetime);\n          WRITE_16(header + 14, filedate);\n          WRITE_32(header + 16, crc);\n          WRITE_32(header + 20, cpsize);\n          WRITE_32(header + 24, uncpsize);\n          WRITE_16(header + 28, fnsize);\n          WRITE_16(header + 30, extsize);\n          WRITE_16(header + 32, comsize);\n          WRITE_16(header + 34, 0);     /* disk # */\n          WRITE_16(header + 36, 0);     /* int attrb */\n          WRITE_32(header + 38, 0);     /* ext attrb */\n          WRITE_32(header + 42, currentOffset);\n          /* Header */\n          if (fwrite(header, 1, 46, fpOutCD) == 46) {\n            offsetCD += 46;\n\n            /* Filename */\n            if (fnsize > 0) {\n              if (fwrite(filename, 1, fnsize, fpOutCD) == fnsize) {\n                offsetCD += fnsize;\n              } else {\n                err = Z_ERRNO;\n                break;\n              }\n            } else {\n              err = Z_STREAM_ERROR;\n              break;\n            }\n\n            /* Extra field */\n            if (extsize > 0) {\n              if (fwrite(extra, 1, extsize, fpOutCD) == extsize) {\n                offsetCD += extsize;\n              } else {\n                err = Z_ERRNO;\n                break;\n              }\n            }\n\n            /* Comment field */\n            if (comsize > 0) {\n              if ((int)fwrite(comment, 1, comsize, fpOutCD) == comsize) {\n                offsetCD += comsize;\n              } else {\n                err = Z_ERRNO;\n                break;\n              }\n            }\n\n\n          } else {\n            err = Z_ERRNO;\n            break;\n          }\n        }\n\n        /* Success */\n        entries++;\n\n      } else {\n        break;\n      }\n    }\n\n    /* Final central directory  */\n    {\n      int entriesZip = entries;\n      char header[22];\n      char* comment = \"\"; // \"ZIP File recovered by zlib/minizip/mztools\";\n      int comsize = (int) strlen(comment);\n      if (entriesZip > 0xffff) {\n        entriesZip = 0xffff;\n      }\n      WRITE_32(header, 0x06054b50);\n      WRITE_16(header + 4, 0);    /* disk # */\n      WRITE_16(header + 6, 0);    /* disk # */\n      WRITE_16(header + 8, entriesZip);   /* hack */\n      WRITE_16(header + 10, entriesZip);  /* hack */\n      WRITE_32(header + 12, offsetCD);    /* size of CD */\n      WRITE_32(header + 16, offset);      /* offset to CD */\n      WRITE_16(header + 20, comsize);     /* comment */\n\n      /* Header */\n      if (fwrite(header, 1, 22, fpOutCD) == 22) {\n\n        /* Comment field */\n        if (comsize > 0) {\n          if ((int)fwrite(comment, 1, comsize, fpOutCD) != comsize) {\n            err = Z_ERRNO;\n          }\n        }\n\n      } else {\n        err = Z_ERRNO;\n      }\n    }\n\n    /* Final merge (file + central directory) */\n    fclose(fpOutCD);\n    if (err == Z_OK) {\n      fpOutCD = fopen(fileOutTmp, \"rb\");\n      if (fpOutCD != NULL) {\n        int nRead;\n        char buffer[8192];\n        while ( (nRead = (int)fread(buffer, 1, sizeof(buffer), fpOutCD)) > 0) {\n          if ((int)fwrite(buffer, 1, nRead, fpOut) != nRead) {\n            err = Z_ERRNO;\n            break;\n          }\n        }\n        fclose(fpOutCD);\n      }\n    }\n\n    /* Close */\n    fclose(fpZip);\n    fclose(fpOut);\n\n    /* Wipe temporary file */\n    (void)remove(fileOutTmp);\n\n    /* Number of recovered entries */\n    if (err == Z_OK) {\n      if (nRecovered != NULL) {\n        *nRecovered = entries;\n      }\n      if (bytesRecovered != NULL) {\n        *bytesRecovered = totalBytes;\n      }\n    }\n  } else {\n    err = Z_STREAM_ERROR;\n  }\n  return err;\n}\n"
  },
  {
    "path": "external/minizip/mztools.h",
    "content": "/*\n  Additional tools for Minizip\n  Code: Xavier Roche '2004\n  License: Same as ZLIB (www.gzip.org)\n*/\n\n#ifndef _zip_tools_H\n#define _zip_tools_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef _ZLIB_H\n#include \"zlib.h\"\n#endif\n\n#include \"unzip.h\"\n\n/* Repair a ZIP file (missing central directory)\n   file: file to recover\n   fileOut: output file after recovery\n   fileOutTmp: temporary file name used for recovery\n*/\nextern int ZEXPORT unzRepair(const char* file,\n                             const char* fileOut,\n                             const char* fileOutTmp,\n                             uLong* nRecovered,\n                             uLong* bytesRecovered);\n\n#endif\n"
  },
  {
    "path": "external/minizip/unzip.c",
    "content": "/* unzip.c -- IO for uncompress .zip files using zlib\n   Version 1.1, February 14h, 2010\n   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Modifications of Unzip for Zip64\n         Copyright (C) 2007-2008 Even Rouault\n\n         Modifications for Zip64 support on both zip and unzip\n         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )\n\n         For more info read MiniZip_info.txt\n\n\n  ------------------------------------------------------------------------------------\n  Decryption code comes from crypt.c by Info-ZIP but has been greatly reduced in terms of\n  compatibility with older software. The following is from the original crypt.c.\n  Code woven in by Terry Thorsen 1/2003.\n\n  Copyright (c) 1990-2000 Info-ZIP.  All rights reserved.\n\n  See the accompanying file LICENSE, version 2000-Apr-09 or later\n  (the contents of which are also included in zip.h) for terms of use.\n  If, for some reason, all these files are missing, the Info-ZIP license\n  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html\n\n        crypt.c (full version) by Info-ZIP.      Last revised:  [see crypt.h]\n\n  The encryption/decryption parts of this source code (as opposed to the\n  non-echoing password parts) were originally written in Europe.  The\n  whole source package can be freely distributed, including from the USA.\n  (Prior to January 2000, re-export from the US was a violation of US law.)\n\n        This encryption code is a direct transcription of the algorithm from\n  Roger Schlafly, described by Phil Katz in the file appnote.txt.  This\n  file (appnote.txt) is distributed with the PKZIP program (even in the\n  version without encryption capabilities).\n\n        ------------------------------------------------------------------------------------\n\n        Changes in unzip.c\n\n        2007-2008 - Even Rouault - Addition of cpl_unzGetCurrentFileZStreamPos\n  2007-2008 - Even Rouault - Decoration of symbol names unz* -> cpl_unz*\n  2007-2008 - Even Rouault - Remove old C style function prototypes\n  2007-2008 - Even Rouault - Add unzip support for ZIP64\n\n        Copyright (C) 2007-2008 Even Rouault\n\n\n        Oct-2009 - Mathias Svensson - Removed cpl_* from symbol names (Even Rouault added them but since this is now moved to a new project (minizip64) I renamed them again).\n  Oct-2009 - Mathias Svensson - Fixed problem if uncompressed size was > 4G and compressed size was <4G\n                                should only read the compressed/uncompressed size from the Zip64 format if\n                                the size from normal header was 0xFFFFFFFF\n  Oct-2009 - Mathias Svensson - Applied some bug fixes from paches recived from Gilles Vollant\n        Oct-2009 - Mathias Svensson - Applied support to unzip files with compression mathod BZIP2 (bzip2 lib is required)\n                                Patch created by Daniel Borca\n\n  Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer\n\n  Copyright (C) 1998 - 2010 Gilles Vollant, Even Rouault, Mathias Svensson\n\n*/\n\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#ifndef NOUNCRYPT\n        #define NOUNCRYPT\n#endif\n\n#include \"zlib.h\"\n#include \"unzip.h\"\n\n#ifdef STDC\n#  include <stddef.h>\n#  include <string.h>\n#  include <stdlib.h>\n#endif\n#ifdef NO_ERRNO_H\n    extern int errno;\n#else\n#   include <errno.h>\n#endif\n\n\n#ifndef local\n#  define local static\n#endif\n/* compile with -Dlocal if your debugger can't find static symbols */\n\n\n#ifndef CASESENSITIVITYDEFAULT_NO\n#  if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES)\n#    define CASESENSITIVITYDEFAULT_NO\n#  endif\n#endif\n\n\n#ifndef UNZ_BUFSIZE\n#define UNZ_BUFSIZE (16384)\n#endif\n\n#ifndef UNZ_MAXFILENAMEINZIP\n#define UNZ_MAXFILENAMEINZIP (256)\n#endif\n\n#ifndef ALLOC\n# define ALLOC(size) (malloc(size))\n#endif\n#ifndef TRYFREE\n# define TRYFREE(p) {if (p) free(p);}\n#endif\n\n#define SIZECENTRALDIRITEM (0x2e)\n#define SIZEZIPLOCALHEADER (0x1e)\n\n\nconst char unz_copyright[] =\n   \" unzip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll\";\n\n/* unz_file_info_interntal contain internal info about a file in zipfile*/\ntypedef struct unz_file_info64_internal_s\n{\n    ZPOS64_T offset_curfile;/* relative offset of local header 8 bytes */\n} unz_file_info64_internal;\n\n\n/* file_in_zip_read_info_s contain internal information about a file in zipfile,\n    when reading and decompress it */\ntypedef struct\n{\n    char  *read_buffer;         /* internal buffer for compressed data */\n    z_stream stream;            /* zLib stream structure for inflate */\n\n#ifdef HAVE_BZIP2\n    bz_stream bstream;          /* bzLib stream structure for bziped */\n#endif\n\n    ZPOS64_T pos_in_zipfile;       /* position in byte on the zipfile, for fseek*/\n    uLong stream_initialised;   /* flag set if stream structure is initialised*/\n\n    ZPOS64_T offset_local_extrafield;/* offset of the local extra field */\n    uInt  size_local_extrafield;/* size of the local extra field */\n    ZPOS64_T pos_local_extrafield;   /* position in the local extra field in read*/\n    ZPOS64_T total_out_64;\n\n    uLong crc32;                /* crc32 of all data uncompressed */\n    uLong crc32_wait;           /* crc32 we must obtain after decompress all */\n    ZPOS64_T rest_read_compressed; /* number of byte to be decompressed */\n    ZPOS64_T rest_read_uncompressed;/*number of byte to be obtained after decomp*/\n    zlib_filefunc64_32_def z_filefunc;\n    voidpf filestream;        /* io structore of the zipfile */\n    uLong compression_method;   /* compression method (0==store) */\n    ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/\n    int   raw;\n} file_in_zip64_read_info_s;\n\n\n/* unz64_s contain internal information about the zipfile\n*/\ntypedef struct\n{\n    zlib_filefunc64_32_def z_filefunc;\n    int is64bitOpenFunction;\n    voidpf filestream;        /* io structore of the zipfile */\n    unz_global_info64 gi;       /* public global information */\n    ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/\n    ZPOS64_T num_file;             /* number of the current file in the zipfile*/\n    ZPOS64_T pos_in_central_dir;   /* pos of the current file in the central dir*/\n    ZPOS64_T current_file_ok;      /* flag about the usability of the current file*/\n    ZPOS64_T central_pos;          /* position of the beginning of the central dir*/\n\n    ZPOS64_T size_central_dir;     /* size of the central directory  */\n    ZPOS64_T offset_central_dir;   /* offset of start of central directory with\n                                   respect to the starting disk number */\n\n    unz_file_info64 cur_file_info; /* public info about the current file in zip*/\n    unz_file_info64_internal cur_file_info_internal; /* private info about it*/\n    file_in_zip64_read_info_s* pfile_in_zip_read; /* structure about the current\n                                        file if we are decompressing it */\n    int encrypted;\n\n    int isZip64;\n\n#    ifndef NOUNCRYPT\n    unsigned long keys[3];     /* keys defining the pseudo-random sequence */\n    const unsigned long* pcrc_32_tab;\n#    endif\n} unz64_s;\n\n\n#ifndef NOUNCRYPT\n#include \"crypt.h\"\n#endif\n\n/* ===========================================================================\n     Read a byte from a gz_stream; update next_in and avail_in. Return EOF\n   for end of file.\n   IN assertion: the stream s has been sucessfully opened for reading.\n*/\n\n\nlocal int unz64local_getByte OF((\n    const zlib_filefunc64_32_def* pzlib_filefunc_def,\n    voidpf filestream,\n    int *pi));\n\nlocal int unz64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int *pi)\n{\n    unsigned char c;\n    int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1);\n    if (err==1)\n    {\n        *pi = (int)c;\n        return UNZ_OK;\n    }\n    else\n    {\n        if (ZERROR64(*pzlib_filefunc_def,filestream))\n            return UNZ_ERRNO;\n        else\n            return UNZ_EOF;\n    }\n}\n\n\n/* ===========================================================================\n   Reads a long in LSB order from the given gz_stream. Sets\n*/\nlocal int unz64local_getShort OF((\n    const zlib_filefunc64_32_def* pzlib_filefunc_def,\n    voidpf filestream,\n    uLong *pX));\n\nlocal int unz64local_getShort (const zlib_filefunc64_32_def* pzlib_filefunc_def,\n                             voidpf filestream,\n                             uLong *pX)\n{\n    uLong x ;\n    int i = 0;\n    int err;\n\n    err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x = (uLong)i;\n\n    if (err==UNZ_OK)\n        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x |= ((uLong)i)<<8;\n\n    if (err==UNZ_OK)\n        *pX = x;\n    else\n        *pX = 0;\n    return err;\n}\n\nlocal int unz64local_getLong OF((\n    const zlib_filefunc64_32_def* pzlib_filefunc_def,\n    voidpf filestream,\n    uLong *pX));\n\nlocal int unz64local_getLong (const zlib_filefunc64_32_def* pzlib_filefunc_def,\n                            voidpf filestream,\n                            uLong *pX)\n{\n    uLong x ;\n    int i = 0;\n    int err;\n\n    err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x = (uLong)i;\n\n    if (err==UNZ_OK)\n        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x |= ((uLong)i)<<8;\n\n    if (err==UNZ_OK)\n        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x |= ((uLong)i)<<16;\n\n    if (err==UNZ_OK)\n        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x += ((uLong)i)<<24;\n\n    if (err==UNZ_OK)\n        *pX = x;\n    else\n        *pX = 0;\n    return err;\n}\n\nlocal int unz64local_getLong64 OF((\n    const zlib_filefunc64_32_def* pzlib_filefunc_def,\n    voidpf filestream,\n    ZPOS64_T *pX));\n\n\nlocal int unz64local_getLong64 (const zlib_filefunc64_32_def* pzlib_filefunc_def,\n                            voidpf filestream,\n                            ZPOS64_T *pX)\n{\n    ZPOS64_T x ;\n    int i = 0;\n    int err;\n\n    err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x = (ZPOS64_T)i;\n\n    if (err==UNZ_OK)\n        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x |= ((ZPOS64_T)i)<<8;\n\n    if (err==UNZ_OK)\n        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x |= ((ZPOS64_T)i)<<16;\n\n    if (err==UNZ_OK)\n        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x |= ((ZPOS64_T)i)<<24;\n\n    if (err==UNZ_OK)\n        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x |= ((ZPOS64_T)i)<<32;\n\n    if (err==UNZ_OK)\n        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x |= ((ZPOS64_T)i)<<40;\n\n    if (err==UNZ_OK)\n        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x |= ((ZPOS64_T)i)<<48;\n\n    if (err==UNZ_OK)\n        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x |= ((ZPOS64_T)i)<<56;\n\n    if (err==UNZ_OK)\n        *pX = x;\n    else\n        *pX = 0;\n    return err;\n}\n\n/* My own strcmpi / strcasecmp */\nlocal int strcmpcasenosensitive_internal (const char* fileName1, const char* fileName2)\n{\n    for (;;)\n    {\n        char c1=*(fileName1++);\n        char c2=*(fileName2++);\n        if ((c1>='a') && (c1<='z'))\n            c1 -= 0x20;\n        if ((c2>='a') && (c2<='z'))\n            c2 -= 0x20;\n        if (c1=='\\0')\n            return ((c2=='\\0') ? 0 : -1);\n        if (c2=='\\0')\n            return 1;\n        if (c1<c2)\n            return -1;\n        if (c1>c2)\n            return 1;\n    }\n}\n\n\n#ifdef  CASESENSITIVITYDEFAULT_NO\n#define CASESENSITIVITYDEFAULTVALUE 2\n#else\n#define CASESENSITIVITYDEFAULTVALUE 1\n#endif\n\n#ifndef STRCMPCASENOSENTIVEFUNCTION\n#define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal\n#endif\n\n/*\n   Compare two filename (fileName1,fileName2).\n   If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)\n   If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi\n                                                                or strcasecmp)\n   If iCaseSenisivity = 0, case sensitivity is defaut of your operating system\n        (like 1 on Unix, 2 on Windows)\n\n*/\nextern int ZEXPORT unzStringFileNameCompare (const char*  fileName1,\n                                                 const char*  fileName2,\n                                                 int iCaseSensitivity)\n\n{\n    if (iCaseSensitivity==0)\n        iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE;\n\n    if (iCaseSensitivity==1)\n        return strcmp(fileName1,fileName2);\n\n    return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2);\n}\n\n#ifndef BUFREADCOMMENT\n#define BUFREADCOMMENT (0x400)\n#endif\n\n/*\n  Locate the Central directory of a zipfile (at the end, just before\n    the global comment)\n*/\nlocal ZPOS64_T unz64local_SearchCentralDir OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));\nlocal ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)\n{\n    unsigned char* buf;\n    ZPOS64_T uSizeFile;\n    ZPOS64_T uBackRead;\n    ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */\n    ZPOS64_T uPosFound=0;\n\n    if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)\n        return 0;\n\n\n    uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);\n\n    if (uMaxBack>uSizeFile)\n        uMaxBack = uSizeFile;\n\n    buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);\n    if (buf==NULL)\n        return 0;\n\n    uBackRead = 4;\n    while (uBackRead<uMaxBack)\n    {\n        uLong uReadSize;\n        ZPOS64_T uReadPos ;\n        int i;\n        if (uBackRead+BUFREADCOMMENT>uMaxBack)\n            uBackRead = uMaxBack;\n        else\n            uBackRead+=BUFREADCOMMENT;\n        uReadPos = uSizeFile-uBackRead ;\n\n        uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?\n                     (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);\n        if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)\n            break;\n\n        if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)\n            break;\n\n        for (i=(int)uReadSize-3; (i--)>0;)\n            if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&\n                ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))\n            {\n                uPosFound = uReadPos+i;\n                break;\n            }\n\n        if (uPosFound!=0)\n            break;\n    }\n    TRYFREE(buf);\n    return uPosFound;\n}\n\n\n/*\n  Locate the Central directory 64 of a zipfile (at the end, just before\n    the global comment)\n*/\nlocal ZPOS64_T unz64local_SearchCentralDir64 OF((\n    const zlib_filefunc64_32_def* pzlib_filefunc_def,\n    voidpf filestream));\n\nlocal ZPOS64_T unz64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def,\n                                      voidpf filestream)\n{\n    unsigned char* buf;\n    ZPOS64_T uSizeFile;\n    ZPOS64_T uBackRead;\n    ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */\n    ZPOS64_T uPosFound=0;\n    uLong uL;\n                ZPOS64_T relativeOffset;\n\n    if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)\n        return 0;\n\n\n    uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);\n\n    if (uMaxBack>uSizeFile)\n        uMaxBack = uSizeFile;\n\n    buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);\n    if (buf==NULL)\n        return 0;\n\n    uBackRead = 4;\n    while (uBackRead<uMaxBack)\n    {\n        uLong uReadSize;\n        ZPOS64_T uReadPos;\n        int i;\n        if (uBackRead+BUFREADCOMMENT>uMaxBack)\n            uBackRead = uMaxBack;\n        else\n            uBackRead+=BUFREADCOMMENT;\n        uReadPos = uSizeFile-uBackRead ;\n\n        uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?\n                     (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);\n        if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)\n            break;\n\n        if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)\n            break;\n\n        for (i=(int)uReadSize-3; (i--)>0;)\n            if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&\n                ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))\n            {\n                uPosFound = uReadPos+i;\n                break;\n            }\n\n        if (uPosFound!=0)\n            break;\n    }\n    TRYFREE(buf);\n    if (uPosFound == 0)\n        return 0;\n\n    /* Zip64 end of central directory locator */\n    if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0)\n        return 0;\n\n    /* the signature, already checked */\n    if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)\n        return 0;\n\n    /* number of the disk with the start of the zip64 end of  central directory */\n    if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)\n        return 0;\n    if (uL != 0)\n        return 0;\n\n    /* relative offset of the zip64 end of central directory record */\n    if (unz64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=UNZ_OK)\n        return 0;\n\n    /* total number of disks */\n    if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)\n        return 0;\n    if (uL != 1)\n        return 0;\n\n    /* Goto end of central directory record */\n    if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0)\n        return 0;\n\n     /* the signature */\n    if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)\n        return 0;\n\n    if (uL != 0x06064b50)\n        return 0;\n\n    return relativeOffset;\n}\n\n/*\n  Open a Zip file. path contain the full pathname (by example,\n     on a Windows NT computer \"c:\\\\test\\\\zlib114.zip\" or on an Unix computer\n     \"zlib/zlib114.zip\".\n     If the zipfile cannot be opened (file doesn't exist or in not valid), the\n       return value is NULL.\n     Else, the return value is a unzFile Handle, usable with other function\n       of this unzip package.\n*/\nlocal unzFile unzOpenInternal (const void *path,\n                               zlib_filefunc64_32_def* pzlib_filefunc64_32_def,\n                               int is64bitOpenFunction)\n{\n    unz64_s us;\n    unz64_s *s;\n    ZPOS64_T central_pos;\n    uLong   uL;\n\n    uLong number_disk;          /* number of the current dist, used for\n                                   spaning ZIP, unsupported, always 0*/\n    uLong number_disk_with_CD;  /* number the the disk with central dir, used\n                                   for spaning ZIP, unsupported, always 0*/\n    ZPOS64_T number_entry_CD;      /* total number of entries in\n                                   the central dir\n                                   (same than number_entry on nospan) */\n\n    int err=UNZ_OK;\n\n    if (unz_copyright[0]!=' ')\n        return NULL;\n\n    us.z_filefunc.zseek32_file = NULL;\n    us.z_filefunc.ztell32_file = NULL;\n    if (pzlib_filefunc64_32_def==NULL)\n        fill_fopen64_filefunc(&us.z_filefunc.zfile_func64);\n    else\n        us.z_filefunc = *pzlib_filefunc64_32_def;\n    us.is64bitOpenFunction = is64bitOpenFunction;\n\n\n\n    us.filestream = ZOPEN64(us.z_filefunc,\n                                                 path,\n                                                 ZLIB_FILEFUNC_MODE_READ |\n                                                 ZLIB_FILEFUNC_MODE_EXISTING);\n    if (us.filestream==NULL)\n        return NULL;\n\n    central_pos = unz64local_SearchCentralDir64(&us.z_filefunc,us.filestream);\n    if (central_pos)\n    {\n        uLong uS;\n        ZPOS64_T uL64;\n\n        us.isZip64 = 1;\n\n        if (ZSEEK64(us.z_filefunc, us.filestream,\n                                      central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)\n        err=UNZ_ERRNO;\n\n        /* the signature, already checked */\n        if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        /* size of zip64 end of central directory record */\n        if (unz64local_getLong64(&us.z_filefunc, us.filestream,&uL64)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        /* version made by */\n        if (unz64local_getShort(&us.z_filefunc, us.filestream,&uS)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        /* version needed to extract */\n        if (unz64local_getShort(&us.z_filefunc, us.filestream,&uS)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        /* number of this disk */\n        if (unz64local_getLong(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        /* number of the disk with the start of the central directory */\n        if (unz64local_getLong(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        /* total number of entries in the central directory on this disk */\n        if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.gi.number_entry)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        /* total number of entries in the central directory */\n        if (unz64local_getLong64(&us.z_filefunc, us.filestream,&number_entry_CD)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        if ((number_entry_CD!=us.gi.number_entry) ||\n            (number_disk_with_CD!=0) ||\n            (number_disk!=0))\n            err=UNZ_BADZIPFILE;\n\n        /* size of the central directory */\n        if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.size_central_dir)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        /* offset of start of central directory with respect to the\n          starting disk number */\n        if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.offset_central_dir)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        us.gi.size_comment = 0;\n    }\n    else\n    {\n        central_pos = unz64local_SearchCentralDir(&us.z_filefunc,us.filestream);\n        if (central_pos==0)\n            err=UNZ_ERRNO;\n\n        us.isZip64 = 0;\n\n        if (ZSEEK64(us.z_filefunc, us.filestream,\n                                        central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)\n            err=UNZ_ERRNO;\n\n        /* the signature, already checked */\n        if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        /* number of this disk */\n        if (unz64local_getShort(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        /* number of the disk with the start of the central directory */\n        if (unz64local_getShort(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        /* total number of entries in the central dir on this disk */\n        if (unz64local_getShort(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)\n            err=UNZ_ERRNO;\n        us.gi.number_entry = uL;\n\n        /* total number of entries in the central dir */\n        if (unz64local_getShort(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)\n            err=UNZ_ERRNO;\n        number_entry_CD = uL;\n\n        if ((number_entry_CD!=us.gi.number_entry) ||\n            (number_disk_with_CD!=0) ||\n            (number_disk!=0))\n            err=UNZ_BADZIPFILE;\n\n        /* size of the central directory */\n        if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)\n            err=UNZ_ERRNO;\n        us.size_central_dir = uL;\n\n        /* offset of start of central directory with respect to the\n            starting disk number */\n        if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)\n            err=UNZ_ERRNO;\n        us.offset_central_dir = uL;\n\n        /* zipfile comment length */\n        if (unz64local_getShort(&us.z_filefunc, us.filestream,&us.gi.size_comment)!=UNZ_OK)\n            err=UNZ_ERRNO;\n    }\n\n    if ((central_pos<us.offset_central_dir+us.size_central_dir) &&\n        (err==UNZ_OK))\n        err=UNZ_BADZIPFILE;\n\n    if (err!=UNZ_OK)\n    {\n        ZCLOSE64(us.z_filefunc, us.filestream);\n        return NULL;\n    }\n\n    us.byte_before_the_zipfile = central_pos -\n                            (us.offset_central_dir+us.size_central_dir);\n    us.central_pos = central_pos;\n    us.pfile_in_zip_read = NULL;\n    us.encrypted = 0;\n\n\n    s=(unz64_s*)ALLOC(sizeof(unz64_s));\n    if( s != NULL)\n    {\n        *s=us;\n        unzGoToFirstFile((unzFile)s);\n    }\n    return (unzFile)s;\n}\n\n\nextern unzFile ZEXPORT unzOpen2 (const char *path,\n                                        zlib_filefunc_def* pzlib_filefunc32_def)\n{\n    if (pzlib_filefunc32_def != NULL)\n    {\n        zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;\n        fill_zlib_filefunc64_32_def_from_filefunc32(&zlib_filefunc64_32_def_fill,pzlib_filefunc32_def);\n        return unzOpenInternal(path, &zlib_filefunc64_32_def_fill, 0);\n    }\n    else\n        return unzOpenInternal(path, NULL, 0);\n}\n\nextern unzFile ZEXPORT unzOpen2_64 (const void *path,\n                                     zlib_filefunc64_def* pzlib_filefunc_def)\n{\n    if (pzlib_filefunc_def != NULL)\n    {\n        zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;\n        zlib_filefunc64_32_def_fill.zfile_func64 = *pzlib_filefunc_def;\n        zlib_filefunc64_32_def_fill.ztell32_file = NULL;\n        zlib_filefunc64_32_def_fill.zseek32_file = NULL;\n        return unzOpenInternal(path, &zlib_filefunc64_32_def_fill, 1);\n    }\n    else\n        return unzOpenInternal(path, NULL, 1);\n}\n\nextern unzFile ZEXPORT unzOpen (const char *path)\n{\n    return unzOpenInternal(path, NULL, 0);\n}\n\nextern unzFile ZEXPORT unzOpen64 (const void *path)\n{\n    return unzOpenInternal(path, NULL, 1);\n}\n\n/*\n  Close a ZipFile opened with unzipOpen.\n  If there is files inside the .Zip opened with unzipOpenCurrentFile (see later),\n    these files MUST be closed with unzipCloseCurrentFile before call unzipClose.\n  return UNZ_OK if there is no problem. */\nextern int ZEXPORT unzClose (unzFile file)\n{\n    unz64_s* s;\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n\n    if (s->pfile_in_zip_read!=NULL)\n        unzCloseCurrentFile(file);\n\n    ZCLOSE64(s->z_filefunc, s->filestream);\n    TRYFREE(s);\n    return UNZ_OK;\n}\n\n\n/*\n  Write info about the ZipFile in the *pglobal_info structure.\n  No preparation of the structure is needed\n  return UNZ_OK if there is no problem. */\nextern int ZEXPORT unzGetGlobalInfo64 (unzFile file, unz_global_info64* pglobal_info)\n{\n    unz64_s* s;\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    *pglobal_info=s->gi;\n    return UNZ_OK;\n}\n\nextern int ZEXPORT unzGetGlobalInfo (unzFile file, unz_global_info* pglobal_info32)\n{\n    unz64_s* s;\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    /* to do : check if number_entry is not truncated */\n    pglobal_info32->number_entry = (uLong)s->gi.number_entry;\n    pglobal_info32->size_comment = s->gi.size_comment;\n    return UNZ_OK;\n}\n/*\n   Translate date/time from Dos format to tm_unz (readable more easilty)\n*/\nlocal void unz64local_DosDateToTmuDate (ZPOS64_T ulDosDate, tm_unz* ptm)\n{\n    ZPOS64_T uDate;\n    uDate = (ZPOS64_T)(ulDosDate>>16);\n    ptm->tm_mday = (uInt)(uDate&0x1f) ;\n    ptm->tm_mon =  (uInt)((((uDate)&0x1E0)/0x20)-1) ;\n    ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ;\n\n    ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800);\n    ptm->tm_min =  (uInt) ((ulDosDate&0x7E0)/0x20) ;\n    ptm->tm_sec =  (uInt) (2*(ulDosDate&0x1f)) ;\n}\n\n/*\n  Get Info about the current file in the zipfile, with internal only info\n*/\nlocal int unz64local_GetCurrentFileInfoInternal OF((unzFile file,\n                                                  unz_file_info64 *pfile_info,\n                                                  unz_file_info64_internal\n                                                  *pfile_info_internal,\n                                                  char *szFileName,\n                                                  uLong fileNameBufferSize,\n                                                  void *extraField,\n                                                  uLong extraFieldBufferSize,\n                                                  char *szComment,\n                                                  uLong commentBufferSize));\n\nlocal int unz64local_GetCurrentFileInfoInternal (unzFile file,\n                                                  unz_file_info64 *pfile_info,\n                                                  unz_file_info64_internal\n                                                  *pfile_info_internal,\n                                                  char *szFileName,\n                                                  uLong fileNameBufferSize,\n                                                  void *extraField,\n                                                  uLong extraFieldBufferSize,\n                                                  char *szComment,\n                                                  uLong commentBufferSize)\n{\n    unz64_s* s;\n    unz_file_info64 file_info;\n    unz_file_info64_internal file_info_internal;\n    int err=UNZ_OK;\n    uLong uMagic;\n    long lSeek=0;\n    uLong uL;\n\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    if (ZSEEK64(s->z_filefunc, s->filestream,\n              s->pos_in_central_dir+s->byte_before_the_zipfile,\n              ZLIB_FILEFUNC_SEEK_SET)!=0)\n        err=UNZ_ERRNO;\n\n\n    /* we check the magic */\n    if (err==UNZ_OK)\n    {\n        if (unz64local_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)\n            err=UNZ_ERRNO;\n        else if (uMagic!=0x02014b50)\n            err=UNZ_BADZIPFILE;\n    }\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.version) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.version_needed) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.flag) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.compression_method) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.dosDate) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    unz64local_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date);\n\n    if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.crc) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)\n        err=UNZ_ERRNO;\n    file_info.compressed_size = uL;\n\n    if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)\n        err=UNZ_ERRNO;\n    file_info.uncompressed_size = uL;\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_filename) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_extra) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_comment) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.disk_num_start) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.internal_fa) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.external_fa) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n                // relative offset of local header\n    if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)\n        err=UNZ_ERRNO;\n    file_info_internal.offset_curfile = uL;\n\n    lSeek+=file_info.size_filename;\n    if ((err==UNZ_OK) && (szFileName!=NULL))\n    {\n        uLong uSizeRead ;\n        if (file_info.size_filename<fileNameBufferSize)\n        {\n            *(szFileName+file_info.size_filename)='\\0';\n            uSizeRead = file_info.size_filename;\n        }\n        else\n            uSizeRead = fileNameBufferSize;\n\n        if ((file_info.size_filename>0) && (fileNameBufferSize>0))\n            if (ZREAD64(s->z_filefunc, s->filestream,szFileName,uSizeRead)!=uSizeRead)\n                err=UNZ_ERRNO;\n        lSeek -= uSizeRead;\n    }\n\n    // Read extrafield\n    if ((err==UNZ_OK) && (extraField!=NULL))\n    {\n        ZPOS64_T uSizeRead ;\n        if (file_info.size_file_extra<extraFieldBufferSize)\n            uSizeRead = file_info.size_file_extra;\n        else\n            uSizeRead = extraFieldBufferSize;\n\n        if (lSeek!=0)\n        {\n            if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)\n                lSeek=0;\n            else\n                err=UNZ_ERRNO;\n        }\n\n        if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0))\n            if (ZREAD64(s->z_filefunc, s->filestream,extraField,(uLong)uSizeRead)!=uSizeRead)\n                err=UNZ_ERRNO;\n\n        lSeek += file_info.size_file_extra - (uLong)uSizeRead;\n    }\n    else\n        lSeek += file_info.size_file_extra;\n\n\n    if ((err==UNZ_OK) && (file_info.size_file_extra != 0))\n    {\n                                uLong acc = 0;\n\n        // since lSeek now points to after the extra field we need to move back\n        lSeek -= file_info.size_file_extra;\n\n        if (lSeek!=0)\n        {\n            if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)\n                lSeek=0;\n            else\n                err=UNZ_ERRNO;\n        }\n\n        while(acc < file_info.size_file_extra)\n        {\n            uLong headerId;\n                                                uLong dataSize;\n\n            if (unz64local_getShort(&s->z_filefunc, s->filestream,&headerId) != UNZ_OK)\n                err=UNZ_ERRNO;\n\n            if (unz64local_getShort(&s->z_filefunc, s->filestream,&dataSize) != UNZ_OK)\n                err=UNZ_ERRNO;\n\n            /* ZIP64 extra fields */\n            if (headerId == 0x0001)\n            {\n                                                        uLong uL;\n\n                                                                if(file_info.uncompressed_size == (ZPOS64_T)(unsigned long)-1)\n                                                                {\n                                                                        if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK)\n                                                                                        err=UNZ_ERRNO;\n                                                                }\n\n                                                                if(file_info.compressed_size == (ZPOS64_T)(unsigned long)-1)\n                                                                {\n                                                                        if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.compressed_size) != UNZ_OK)\n                                                                                  err=UNZ_ERRNO;\n                                                                }\n\n                                                                if(file_info_internal.offset_curfile == (ZPOS64_T)(unsigned long)-1)\n                                                                {\n                                                                        /* Relative Header offset */\n                                                                        if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info_internal.offset_curfile) != UNZ_OK)\n                                                                                err=UNZ_ERRNO;\n                                                                }\n\n                                                                if(file_info.disk_num_start == (unsigned long)-1)\n                                                                {\n                                                                        /* Disk Start Number */\n                                                                        if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)\n                                                                                err=UNZ_ERRNO;\n                                                                }\n\n            }\n            else\n            {\n                if (ZSEEK64(s->z_filefunc, s->filestream,dataSize,ZLIB_FILEFUNC_SEEK_CUR)!=0)\n                    err=UNZ_ERRNO;\n            }\n\n            acc += 2 + 2 + dataSize;\n        }\n    }\n\n    if ((err==UNZ_OK) && (szComment!=NULL))\n    {\n        uLong uSizeRead ;\n        if (file_info.size_file_comment<commentBufferSize)\n        {\n            *(szComment+file_info.size_file_comment)='\\0';\n            uSizeRead = file_info.size_file_comment;\n        }\n        else\n            uSizeRead = commentBufferSize;\n\n        if (lSeek!=0)\n        {\n            if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)\n                lSeek=0;\n            else\n                err=UNZ_ERRNO;\n        }\n\n        if ((file_info.size_file_comment>0) && (commentBufferSize>0))\n            if (ZREAD64(s->z_filefunc, s->filestream,szComment,uSizeRead)!=uSizeRead)\n                err=UNZ_ERRNO;\n        lSeek+=file_info.size_file_comment - uSizeRead;\n    }\n    else\n        lSeek+=file_info.size_file_comment;\n\n\n    if ((err==UNZ_OK) && (pfile_info!=NULL))\n        *pfile_info=file_info;\n\n    if ((err==UNZ_OK) && (pfile_info_internal!=NULL))\n        *pfile_info_internal=file_info_internal;\n\n    return err;\n}\n\n\n\n/*\n  Write info about the ZipFile in the *pglobal_info structure.\n  No preparation of the structure is needed\n  return UNZ_OK if there is no problem.\n*/\nextern int ZEXPORT unzGetCurrentFileInfo64 (unzFile file,\n                                          unz_file_info64 * pfile_info,\n                                          char * szFileName, uLong fileNameBufferSize,\n                                          void *extraField, uLong extraFieldBufferSize,\n                                          char* szComment,  uLong commentBufferSize)\n{\n    return unz64local_GetCurrentFileInfoInternal(file,pfile_info,NULL,\n                                                szFileName,fileNameBufferSize,\n                                                extraField,extraFieldBufferSize,\n                                                szComment,commentBufferSize);\n}\n\nextern int ZEXPORT unzGetCurrentFileInfo (unzFile file,\n                                          unz_file_info * pfile_info,\n                                          char * szFileName, uLong fileNameBufferSize,\n                                          void *extraField, uLong extraFieldBufferSize,\n                                          char* szComment,  uLong commentBufferSize)\n{\n    int err;\n    unz_file_info64 file_info64;\n    err = unz64local_GetCurrentFileInfoInternal(file,&file_info64,NULL,\n                                                szFileName,fileNameBufferSize,\n                                                extraField,extraFieldBufferSize,\n                                                szComment,commentBufferSize);\n    if (err==UNZ_OK)\n    {\n        pfile_info->version = file_info64.version;\n        pfile_info->version_needed = file_info64.version_needed;\n        pfile_info->flag = file_info64.flag;\n        pfile_info->compression_method = file_info64.compression_method;\n        pfile_info->dosDate = file_info64.dosDate;\n        pfile_info->crc = file_info64.crc;\n\n        pfile_info->size_filename = file_info64.size_filename;\n        pfile_info->size_file_extra = file_info64.size_file_extra;\n        pfile_info->size_file_comment = file_info64.size_file_comment;\n\n        pfile_info->disk_num_start = file_info64.disk_num_start;\n        pfile_info->internal_fa = file_info64.internal_fa;\n        pfile_info->external_fa = file_info64.external_fa;\n\n        pfile_info->tmu_date = file_info64.tmu_date,\n\n\n        pfile_info->compressed_size = (uLong)file_info64.compressed_size;\n        pfile_info->uncompressed_size = (uLong)file_info64.uncompressed_size;\n\n    }\n    return err;\n}\n/*\n  Set the current file of the zipfile to the first file.\n  return UNZ_OK if there is no problem\n*/\nextern int ZEXPORT unzGoToFirstFile (unzFile file)\n{\n    int err=UNZ_OK;\n    unz64_s* s;\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    s->pos_in_central_dir=s->offset_central_dir;\n    s->num_file=0;\n    err=unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,\n                                             &s->cur_file_info_internal,\n                                             NULL,0,NULL,0,NULL,0);\n    s->current_file_ok = (err == UNZ_OK);\n    return err;\n}\n\n/*\n  Set the current file of the zipfile to the next file.\n  return UNZ_OK if there is no problem\n  return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.\n*/\nextern int ZEXPORT unzGoToNextFile (unzFile  file)\n{\n    unz64_s* s;\n    int err;\n\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    if (!s->current_file_ok)\n        return UNZ_END_OF_LIST_OF_FILE;\n    if (s->gi.number_entry != 0xffff)    /* 2^16 files overflow hack */\n      if (s->num_file+1==s->gi.number_entry)\n        return UNZ_END_OF_LIST_OF_FILE;\n\n    s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename +\n            s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ;\n    s->num_file++;\n    err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,\n                                               &s->cur_file_info_internal,\n                                               NULL,0,NULL,0,NULL,0);\n    s->current_file_ok = (err == UNZ_OK);\n    return err;\n}\n\n\n/*\n  Try locate the file szFileName in the zipfile.\n  For the iCaseSensitivity signification, see unzipStringFileNameCompare\n\n  return value :\n  UNZ_OK if the file is found. It becomes the current file.\n  UNZ_END_OF_LIST_OF_FILE if the file is not found\n*/\nextern int ZEXPORT unzLocateFile (unzFile file, const char *szFileName, int iCaseSensitivity)\n{\n    unz64_s* s;\n    int err;\n\n    /* We remember the 'current' position in the file so that we can jump\n     * back there if we fail.\n     */\n    unz_file_info64 cur_file_infoSaved;\n    unz_file_info64_internal cur_file_info_internalSaved;\n    ZPOS64_T num_fileSaved;\n    ZPOS64_T pos_in_central_dirSaved;\n\n\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n\n    if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP)\n        return UNZ_PARAMERROR;\n\n    s=(unz64_s*)file;\n    if (!s->current_file_ok)\n        return UNZ_END_OF_LIST_OF_FILE;\n\n    /* Save the current state */\n    num_fileSaved = s->num_file;\n    pos_in_central_dirSaved = s->pos_in_central_dir;\n    cur_file_infoSaved = s->cur_file_info;\n    cur_file_info_internalSaved = s->cur_file_info_internal;\n\n    err = unzGoToFirstFile(file);\n\n    while (err == UNZ_OK)\n    {\n        char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1];\n        err = unzGetCurrentFileInfo64(file,NULL,\n                                    szCurrentFileName,sizeof(szCurrentFileName)-1,\n                                    NULL,0,NULL,0);\n        if (err == UNZ_OK)\n        {\n            if (unzStringFileNameCompare(szCurrentFileName,\n                                            szFileName,iCaseSensitivity)==0)\n                return UNZ_OK;\n            err = unzGoToNextFile(file);\n        }\n    }\n\n    /* We failed, so restore the state of the 'current file' to where we\n     * were.\n     */\n    s->num_file = num_fileSaved ;\n    s->pos_in_central_dir = pos_in_central_dirSaved ;\n    s->cur_file_info = cur_file_infoSaved;\n    s->cur_file_info_internal = cur_file_info_internalSaved;\n    return err;\n}\n\n\n/*\n///////////////////////////////////////////\n// Contributed by Ryan Haksi (mailto://cryogen@infoserve.net)\n// I need random access\n//\n// Further optimization could be realized by adding an ability\n// to cache the directory in memory. The goal being a single\n// comprehensive file read to put the file I need in a memory.\n*/\n\n/*\ntypedef struct unz_file_pos_s\n{\n    ZPOS64_T pos_in_zip_directory;   // offset in file\n    ZPOS64_T num_of_file;            // # of file\n} unz_file_pos;\n*/\n\nextern int ZEXPORT unzGetFilePos64(unzFile file, unz64_file_pos*  file_pos)\n{\n    unz64_s* s;\n\n    if (file==NULL || file_pos==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    if (!s->current_file_ok)\n        return UNZ_END_OF_LIST_OF_FILE;\n\n    file_pos->pos_in_zip_directory  = s->pos_in_central_dir;\n    file_pos->num_of_file           = s->num_file;\n\n    return UNZ_OK;\n}\n\nextern int ZEXPORT unzGetFilePos(\n    unzFile file,\n    unz_file_pos* file_pos)\n{\n    unz64_file_pos file_pos64;\n    int err = unzGetFilePos64(file,&file_pos64);\n    if (err==UNZ_OK)\n    {\n        file_pos->pos_in_zip_directory = (uLong)file_pos64.pos_in_zip_directory;\n        file_pos->num_of_file = (uLong)file_pos64.num_of_file;\n    }\n    return err;\n}\n\nextern int ZEXPORT unzGoToFilePos64(unzFile file, const unz64_file_pos* file_pos)\n{\n    unz64_s* s;\n    int err;\n\n    if (file==NULL || file_pos==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n\n    /* jump to the right spot */\n    s->pos_in_central_dir = file_pos->pos_in_zip_directory;\n    s->num_file           = file_pos->num_of_file;\n\n    /* set the current file */\n    err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,\n                                               &s->cur_file_info_internal,\n                                               NULL,0,NULL,0,NULL,0);\n    /* return results */\n    s->current_file_ok = (err == UNZ_OK);\n    return err;\n}\n\nextern int ZEXPORT unzGoToFilePos(\n    unzFile file,\n    unz_file_pos* file_pos)\n{\n    unz64_file_pos file_pos64;\n    if (file_pos == NULL)\n        return UNZ_PARAMERROR;\n\n    file_pos64.pos_in_zip_directory = file_pos->pos_in_zip_directory;\n    file_pos64.num_of_file = file_pos->num_of_file;\n    return unzGoToFilePos64(file,&file_pos64);\n}\n\n/*\n// Unzip Helper Functions - should be here?\n///////////////////////////////////////////\n*/\n\n/*\n  Read the local header of the current zipfile\n  Check the coherency of the local header and info in the end of central\n        directory about this file\n  store in *piSizeVar the size of extra info in local header\n        (filename and size of extra field data)\n*/\nlocal int unz64local_CheckCurrentFileCoherencyHeader (unz64_s* s, uInt* piSizeVar,\n                                                    ZPOS64_T * poffset_local_extrafield,\n                                                    uInt  * psize_local_extrafield)\n{\n    uLong uMagic,uData,uFlags;\n    uLong size_filename;\n    uLong size_extra_field;\n    int err=UNZ_OK;\n\n    *piSizeVar = 0;\n    *poffset_local_extrafield = 0;\n    *psize_local_extrafield = 0;\n\n    if (ZSEEK64(s->z_filefunc, s->filestream,s->cur_file_info_internal.offset_curfile +\n                                s->byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET)!=0)\n        return UNZ_ERRNO;\n\n\n    if (err==UNZ_OK)\n    {\n        if (unz64local_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)\n            err=UNZ_ERRNO;\n        else if (uMagic!=0x04034b50)\n            err=UNZ_BADZIPFILE;\n    }\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK)\n        err=UNZ_ERRNO;\n/*\n    else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion))\n        err=UNZ_BADZIPFILE;\n*/\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&uFlags) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK)\n        err=UNZ_ERRNO;\n    else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method))\n        err=UNZ_BADZIPFILE;\n\n    if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) &&\n/* #ifdef HAVE_BZIP2 */\n                         (s->cur_file_info.compression_method!=Z_BZIP2ED) &&\n/* #endif */\n                         (s->cur_file_info.compression_method!=Z_DEFLATED))\n        err=UNZ_BADZIPFILE;\n\n    if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* date/time */\n        err=UNZ_ERRNO;\n\n    if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* crc */\n        err=UNZ_ERRNO;\n    else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) && ((uFlags & 8)==0))\n        err=UNZ_BADZIPFILE;\n\n    if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size compr */\n        err=UNZ_ERRNO;\n    else if (uData != 0xFFFFFFFF && (err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) && ((uFlags & 8)==0))\n        err=UNZ_BADZIPFILE;\n\n    if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size uncompr */\n        err=UNZ_ERRNO;\n    else if (uData != 0xFFFFFFFF && (err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) && ((uFlags & 8)==0))\n        err=UNZ_BADZIPFILE;\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&size_filename) != UNZ_OK)\n        err=UNZ_ERRNO;\n    else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename))\n        err=UNZ_BADZIPFILE;\n\n    *piSizeVar += (uInt)size_filename;\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&size_extra_field) != UNZ_OK)\n        err=UNZ_ERRNO;\n    *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile +\n                                    SIZEZIPLOCALHEADER + size_filename;\n    *psize_local_extrafield = (uInt)size_extra_field;\n\n    *piSizeVar += (uInt)size_extra_field;\n\n    return err;\n}\n\n/*\n  Open for reading data the current file in the zipfile.\n  If there is no error and the file is opened, the return value is UNZ_OK.\n*/\nextern int ZEXPORT unzOpenCurrentFile3 (unzFile file, int* method,\n                                            int* level, int raw, const char* password)\n{\n    int err=UNZ_OK;\n    uInt iSizeVar;\n    unz64_s* s;\n    file_in_zip64_read_info_s* pfile_in_zip_read_info;\n    ZPOS64_T offset_local_extrafield;  /* offset of the local extra field */\n    uInt  size_local_extrafield;    /* size of the local extra field */\n#    ifndef NOUNCRYPT\n    char source[12];\n#    else\n    if (password != NULL)\n        return UNZ_PARAMERROR;\n#    endif\n\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    if (!s->current_file_ok)\n        return UNZ_PARAMERROR;\n\n    if (s->pfile_in_zip_read != NULL)\n        unzCloseCurrentFile(file);\n\n    if (unz64local_CheckCurrentFileCoherencyHeader(s,&iSizeVar, &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK)\n        return UNZ_BADZIPFILE;\n\n    pfile_in_zip_read_info = (file_in_zip64_read_info_s*)ALLOC(sizeof(file_in_zip64_read_info_s));\n    if (pfile_in_zip_read_info==NULL)\n        return UNZ_INTERNALERROR;\n\n    pfile_in_zip_read_info->read_buffer=(char*)ALLOC(UNZ_BUFSIZE);\n    pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield;\n    pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield;\n    pfile_in_zip_read_info->pos_local_extrafield=0;\n    pfile_in_zip_read_info->raw=raw;\n\n    if (pfile_in_zip_read_info->read_buffer==NULL)\n    {\n        TRYFREE(pfile_in_zip_read_info);\n        return UNZ_INTERNALERROR;\n    }\n\n    pfile_in_zip_read_info->stream_initialised=0;\n\n    if (method!=NULL)\n        *method = (int)s->cur_file_info.compression_method;\n\n    if (level!=NULL)\n    {\n        *level = 6;\n        switch (s->cur_file_info.flag & 0x06)\n        {\n          case 6 : *level = 1; break;\n          case 4 : *level = 2; break;\n          case 2 : *level = 9; break;\n        }\n    }\n\n    if ((s->cur_file_info.compression_method!=0) &&\n/* #ifdef HAVE_BZIP2 */\n        (s->cur_file_info.compression_method!=Z_BZIP2ED) &&\n/* #endif */\n        (s->cur_file_info.compression_method!=Z_DEFLATED))\n\n        err=UNZ_BADZIPFILE;\n\n    pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc;\n    pfile_in_zip_read_info->crc32=0;\n    pfile_in_zip_read_info->total_out_64=0;\n    pfile_in_zip_read_info->compression_method = s->cur_file_info.compression_method;\n    pfile_in_zip_read_info->filestream=s->filestream;\n    pfile_in_zip_read_info->z_filefunc=s->z_filefunc;\n    pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile;\n\n    pfile_in_zip_read_info->stream.total_out = 0;\n\n    if ((s->cur_file_info.compression_method==Z_BZIP2ED) && (!raw))\n    {\n#ifdef HAVE_BZIP2\n      pfile_in_zip_read_info->bstream.bzalloc = (void *(*) (void *, int, int))0;\n      pfile_in_zip_read_info->bstream.bzfree = (free_func)0;\n      pfile_in_zip_read_info->bstream.opaque = (voidpf)0;\n      pfile_in_zip_read_info->bstream.state = (voidpf)0;\n\n      pfile_in_zip_read_info->stream.zalloc = (alloc_func)0;\n      pfile_in_zip_read_info->stream.zfree = (free_func)0;\n      pfile_in_zip_read_info->stream.opaque = (voidpf)0;\n      pfile_in_zip_read_info->stream.next_in = (voidpf)0;\n      pfile_in_zip_read_info->stream.avail_in = 0;\n\n      err=BZ2_bzDecompressInit(&pfile_in_zip_read_info->bstream, 0, 0);\n      if (err == Z_OK)\n        pfile_in_zip_read_info->stream_initialised=Z_BZIP2ED;\n      else\n      {\n        TRYFREE(pfile_in_zip_read_info);\n        return err;\n      }\n#else\n      pfile_in_zip_read_info->raw=1;\n#endif\n    }\n    else if ((s->cur_file_info.compression_method==Z_DEFLATED) && (!raw))\n    {\n      pfile_in_zip_read_info->stream.zalloc = (alloc_func)0;\n      pfile_in_zip_read_info->stream.zfree = (free_func)0;\n      pfile_in_zip_read_info->stream.opaque = (voidpf)0;\n      pfile_in_zip_read_info->stream.next_in = 0;\n      pfile_in_zip_read_info->stream.avail_in = 0;\n\n      err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS);\n      if (err == Z_OK)\n        pfile_in_zip_read_info->stream_initialised=Z_DEFLATED;\n      else\n      {\n        TRYFREE(pfile_in_zip_read_info);\n        return err;\n      }\n        /* windowBits is passed < 0 to tell that there is no zlib header.\n         * Note that in this case inflate *requires* an extra \"dummy\" byte\n         * after the compressed stream in order to complete decompression and\n         * return Z_STREAM_END.\n         * In unzip, i don't wait absolutely Z_STREAM_END because I known the\n         * size of both compressed and uncompressed data\n         */\n    }\n    pfile_in_zip_read_info->rest_read_compressed =\n            s->cur_file_info.compressed_size ;\n    pfile_in_zip_read_info->rest_read_uncompressed =\n            s->cur_file_info.uncompressed_size ;\n\n\n    pfile_in_zip_read_info->pos_in_zipfile =\n            s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER +\n              iSizeVar;\n\n    pfile_in_zip_read_info->stream.avail_in = (uInt)0;\n\n    s->pfile_in_zip_read = pfile_in_zip_read_info;\n                s->encrypted = 0;\n\n#    ifndef NOUNCRYPT\n    if (password != NULL)\n    {\n        int i;\n        s->pcrc_32_tab = get_crc_table();\n        init_keys(password,s->keys,s->pcrc_32_tab);\n        if (ZSEEK64(s->z_filefunc, s->filestream,\n                  s->pfile_in_zip_read->pos_in_zipfile +\n                     s->pfile_in_zip_read->byte_before_the_zipfile,\n                  SEEK_SET)!=0)\n            return UNZ_INTERNALERROR;\n        if(ZREAD64(s->z_filefunc, s->filestream,source, 12)<12)\n            return UNZ_INTERNALERROR;\n\n        for (i = 0; i<12; i++)\n            zdecode(s->keys,s->pcrc_32_tab,source[i]);\n\n        s->pfile_in_zip_read->pos_in_zipfile+=12;\n        s->encrypted=1;\n    }\n#    endif\n\n\n    return UNZ_OK;\n}\n\nextern int ZEXPORT unzOpenCurrentFile (unzFile file)\n{\n    return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL);\n}\n\nextern int ZEXPORT unzOpenCurrentFilePassword (unzFile file, const char*  password)\n{\n    return unzOpenCurrentFile3(file, NULL, NULL, 0, password);\n}\n\nextern int ZEXPORT unzOpenCurrentFile2 (unzFile file, int* method, int* level, int raw)\n{\n    return unzOpenCurrentFile3(file, method, level, raw, NULL);\n}\n\n/** Addition for GDAL : START */\n\nextern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64( unzFile file)\n{\n    unz64_s* s;\n    file_in_zip64_read_info_s* pfile_in_zip_read_info;\n    s=(unz64_s*)file;\n    if (file==NULL)\n        return 0; //UNZ_PARAMERROR;\n    pfile_in_zip_read_info=s->pfile_in_zip_read;\n    if (pfile_in_zip_read_info==NULL)\n        return 0; //UNZ_PARAMERROR;\n    return pfile_in_zip_read_info->pos_in_zipfile +\n                         pfile_in_zip_read_info->byte_before_the_zipfile;\n}\n\n/** Addition for GDAL : END */\n\n/*\n  Read bytes from the current file.\n  buf contain buffer where data must be copied\n  len the size of buf.\n\n  return the number of byte copied if somes bytes are copied\n  return 0 if the end of file was reached\n  return <0 with error code if there is an error\n    (UNZ_ERRNO for IO error, or zLib error for uncompress error)\n*/\nextern int ZEXPORT unzReadCurrentFile  (unzFile file, voidp buf, unsigned len)\n{\n    int err=UNZ_OK;\n    uInt iRead = 0;\n    unz64_s* s;\n    file_in_zip64_read_info_s* pfile_in_zip_read_info;\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    pfile_in_zip_read_info=s->pfile_in_zip_read;\n\n    if (pfile_in_zip_read_info==NULL)\n        return UNZ_PARAMERROR;\n\n\n    if ((pfile_in_zip_read_info->read_buffer == NULL))\n        return UNZ_END_OF_LIST_OF_FILE;\n    if (len==0)\n        return 0;\n\n    pfile_in_zip_read_info->stream.next_out = (Bytef*)buf;\n\n    pfile_in_zip_read_info->stream.avail_out = (uInt)len;\n\n    if ((len>pfile_in_zip_read_info->rest_read_uncompressed) &&\n        (!(pfile_in_zip_read_info->raw)))\n        pfile_in_zip_read_info->stream.avail_out =\n            (uInt)pfile_in_zip_read_info->rest_read_uncompressed;\n\n    if ((len>pfile_in_zip_read_info->rest_read_compressed+\n           pfile_in_zip_read_info->stream.avail_in) &&\n         (pfile_in_zip_read_info->raw))\n        pfile_in_zip_read_info->stream.avail_out =\n            (uInt)pfile_in_zip_read_info->rest_read_compressed+\n            pfile_in_zip_read_info->stream.avail_in;\n\n    while (pfile_in_zip_read_info->stream.avail_out>0)\n    {\n        if ((pfile_in_zip_read_info->stream.avail_in==0) &&\n            (pfile_in_zip_read_info->rest_read_compressed>0))\n        {\n            uInt uReadThis = UNZ_BUFSIZE;\n            if (pfile_in_zip_read_info->rest_read_compressed<uReadThis)\n                uReadThis = (uInt)pfile_in_zip_read_info->rest_read_compressed;\n            if (uReadThis == 0)\n                return UNZ_EOF;\n            if (ZSEEK64(pfile_in_zip_read_info->z_filefunc,\n                      pfile_in_zip_read_info->filestream,\n                      pfile_in_zip_read_info->pos_in_zipfile +\n                         pfile_in_zip_read_info->byte_before_the_zipfile,\n                         ZLIB_FILEFUNC_SEEK_SET)!=0)\n                return UNZ_ERRNO;\n            if (ZREAD64(pfile_in_zip_read_info->z_filefunc,\n                      pfile_in_zip_read_info->filestream,\n                      pfile_in_zip_read_info->read_buffer,\n                      uReadThis)!=uReadThis)\n                return UNZ_ERRNO;\n\n\n#            ifndef NOUNCRYPT\n            if(s->encrypted)\n            {\n                uInt i;\n                for(i=0;i<uReadThis;i++)\n                  pfile_in_zip_read_info->read_buffer[i] =\n                      zdecode(s->keys,s->pcrc_32_tab,\n                              pfile_in_zip_read_info->read_buffer[i]);\n            }\n#            endif\n\n\n            pfile_in_zip_read_info->pos_in_zipfile += uReadThis;\n\n            pfile_in_zip_read_info->rest_read_compressed-=uReadThis;\n\n            pfile_in_zip_read_info->stream.next_in =\n                (Bytef*)pfile_in_zip_read_info->read_buffer;\n            pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis;\n        }\n\n        if ((pfile_in_zip_read_info->compression_method==0) || (pfile_in_zip_read_info->raw))\n        {\n            uInt uDoCopy,i ;\n\n            if ((pfile_in_zip_read_info->stream.avail_in == 0) &&\n                (pfile_in_zip_read_info->rest_read_compressed == 0))\n                return (iRead==0) ? UNZ_EOF : iRead;\n\n            if (pfile_in_zip_read_info->stream.avail_out <\n                            pfile_in_zip_read_info->stream.avail_in)\n                uDoCopy = pfile_in_zip_read_info->stream.avail_out ;\n            else\n                uDoCopy = pfile_in_zip_read_info->stream.avail_in ;\n\n            for (i=0;i<uDoCopy;i++)\n                *(pfile_in_zip_read_info->stream.next_out+i) =\n                        *(pfile_in_zip_read_info->stream.next_in+i);\n\n            pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uDoCopy;\n\n            pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,\n                                pfile_in_zip_read_info->stream.next_out,\n                                uDoCopy);\n            pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy;\n            pfile_in_zip_read_info->stream.avail_in -= uDoCopy;\n            pfile_in_zip_read_info->stream.avail_out -= uDoCopy;\n            pfile_in_zip_read_info->stream.next_out += uDoCopy;\n            pfile_in_zip_read_info->stream.next_in += uDoCopy;\n            pfile_in_zip_read_info->stream.total_out += uDoCopy;\n            iRead += uDoCopy;\n        }\n        else if (pfile_in_zip_read_info->compression_method==Z_BZIP2ED)\n        {\n#ifdef HAVE_BZIP2\n            uLong uTotalOutBefore,uTotalOutAfter;\n            const Bytef *bufBefore;\n            uLong uOutThis;\n\n            pfile_in_zip_read_info->bstream.next_in        = (char*)pfile_in_zip_read_info->stream.next_in;\n            pfile_in_zip_read_info->bstream.avail_in       = pfile_in_zip_read_info->stream.avail_in;\n            pfile_in_zip_read_info->bstream.total_in_lo32  = pfile_in_zip_read_info->stream.total_in;\n            pfile_in_zip_read_info->bstream.total_in_hi32  = 0;\n            pfile_in_zip_read_info->bstream.next_out       = (char*)pfile_in_zip_read_info->stream.next_out;\n            pfile_in_zip_read_info->bstream.avail_out      = pfile_in_zip_read_info->stream.avail_out;\n            pfile_in_zip_read_info->bstream.total_out_lo32 = pfile_in_zip_read_info->stream.total_out;\n            pfile_in_zip_read_info->bstream.total_out_hi32 = 0;\n\n            uTotalOutBefore = pfile_in_zip_read_info->bstream.total_out_lo32;\n            bufBefore = (const Bytef *)pfile_in_zip_read_info->bstream.next_out;\n\n            err=BZ2_bzDecompress(&pfile_in_zip_read_info->bstream);\n\n            uTotalOutAfter = pfile_in_zip_read_info->bstream.total_out_lo32;\n            uOutThis = uTotalOutAfter-uTotalOutBefore;\n\n            pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis;\n\n            pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,bufBefore, (uInt)(uOutThis));\n            pfile_in_zip_read_info->rest_read_uncompressed -= uOutThis;\n            iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);\n\n            pfile_in_zip_read_info->stream.next_in   = (Bytef*)pfile_in_zip_read_info->bstream.next_in;\n            pfile_in_zip_read_info->stream.avail_in  = pfile_in_zip_read_info->bstream.avail_in;\n            pfile_in_zip_read_info->stream.total_in  = pfile_in_zip_read_info->bstream.total_in_lo32;\n            pfile_in_zip_read_info->stream.next_out  = (Bytef*)pfile_in_zip_read_info->bstream.next_out;\n            pfile_in_zip_read_info->stream.avail_out = pfile_in_zip_read_info->bstream.avail_out;\n            pfile_in_zip_read_info->stream.total_out = pfile_in_zip_read_info->bstream.total_out_lo32;\n\n            if (err==BZ_STREAM_END)\n              return (iRead==0) ? UNZ_EOF : iRead;\n            if (err!=BZ_OK)\n              break;\n#endif\n        } // end Z_BZIP2ED\n        else\n        {\n            ZPOS64_T uTotalOutBefore,uTotalOutAfter;\n            const Bytef *bufBefore;\n            ZPOS64_T uOutThis;\n            int flush=Z_SYNC_FLUSH;\n\n            uTotalOutBefore = pfile_in_zip_read_info->stream.total_out;\n            bufBefore = pfile_in_zip_read_info->stream.next_out;\n\n            /*\n            if ((pfile_in_zip_read_info->rest_read_uncompressed ==\n                     pfile_in_zip_read_info->stream.avail_out) &&\n                (pfile_in_zip_read_info->rest_read_compressed == 0))\n                flush = Z_FINISH;\n            */\n            err=inflate(&pfile_in_zip_read_info->stream,flush);\n\n            if ((err>=0) && (pfile_in_zip_read_info->stream.msg!=NULL))\n              err = Z_DATA_ERROR;\n\n            uTotalOutAfter = pfile_in_zip_read_info->stream.total_out;\n            uOutThis = uTotalOutAfter-uTotalOutBefore;\n\n            pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis;\n\n            pfile_in_zip_read_info->crc32 =\n                crc32(pfile_in_zip_read_info->crc32,bufBefore,\n                        (uInt)(uOutThis));\n\n            pfile_in_zip_read_info->rest_read_uncompressed -=\n                uOutThis;\n\n            iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);\n\n            if (err==Z_STREAM_END)\n                return (iRead==0) ? UNZ_EOF : iRead;\n            if (err!=Z_OK)\n                break;\n        }\n    }\n\n    if (err==Z_OK)\n        return iRead;\n    return err;\n}\n\n\n/*\n  Give the current position in uncompressed data\n*/\nextern z_off_t ZEXPORT unztell (unzFile file)\n{\n    unz64_s* s;\n    file_in_zip64_read_info_s* pfile_in_zip_read_info;\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    pfile_in_zip_read_info=s->pfile_in_zip_read;\n\n    if (pfile_in_zip_read_info==NULL)\n        return UNZ_PARAMERROR;\n\n    return (z_off_t)pfile_in_zip_read_info->stream.total_out;\n}\n\nextern ZPOS64_T ZEXPORT unztell64 (unzFile file)\n{\n\n    unz64_s* s;\n    file_in_zip64_read_info_s* pfile_in_zip_read_info;\n    if (file==NULL)\n        return (ZPOS64_T)-1;\n    s=(unz64_s*)file;\n    pfile_in_zip_read_info=s->pfile_in_zip_read;\n\n    if (pfile_in_zip_read_info==NULL)\n        return (ZPOS64_T)-1;\n\n    return pfile_in_zip_read_info->total_out_64;\n}\n\n\n/*\n  return 1 if the end of file was reached, 0 elsewhere\n*/\nextern int ZEXPORT unzeof (unzFile file)\n{\n    unz64_s* s;\n    file_in_zip64_read_info_s* pfile_in_zip_read_info;\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    pfile_in_zip_read_info=s->pfile_in_zip_read;\n\n    if (pfile_in_zip_read_info==NULL)\n        return UNZ_PARAMERROR;\n\n    if (pfile_in_zip_read_info->rest_read_uncompressed == 0)\n        return 1;\n    else\n        return 0;\n}\n\n\n\n/*\nRead extra field from the current file (opened by unzOpenCurrentFile)\nThis is the local-header version of the extra field (sometimes, there is\nmore info in the local-header version than in the central-header)\n\n  if buf==NULL, it return the size of the local extra field that can be read\n\n  if buf!=NULL, len is the size of the buffer, the extra header is copied in\n    buf.\n  the return value is the number of bytes copied in buf, or (if <0)\n    the error code\n*/\nextern int ZEXPORT unzGetLocalExtrafield (unzFile file, voidp buf, unsigned len)\n{\n    unz64_s* s;\n    file_in_zip64_read_info_s* pfile_in_zip_read_info;\n    uInt read_now;\n    ZPOS64_T size_to_read;\n\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    pfile_in_zip_read_info=s->pfile_in_zip_read;\n\n    if (pfile_in_zip_read_info==NULL)\n        return UNZ_PARAMERROR;\n\n    size_to_read = (pfile_in_zip_read_info->size_local_extrafield -\n                pfile_in_zip_read_info->pos_local_extrafield);\n\n    if (buf==NULL)\n        return (int)size_to_read;\n\n    if (len>size_to_read)\n        read_now = (uInt)size_to_read;\n    else\n        read_now = (uInt)len ;\n\n    if (read_now==0)\n        return 0;\n\n    if (ZSEEK64(pfile_in_zip_read_info->z_filefunc,\n              pfile_in_zip_read_info->filestream,\n              pfile_in_zip_read_info->offset_local_extrafield +\n              pfile_in_zip_read_info->pos_local_extrafield,\n              ZLIB_FILEFUNC_SEEK_SET)!=0)\n        return UNZ_ERRNO;\n\n    if (ZREAD64(pfile_in_zip_read_info->z_filefunc,\n              pfile_in_zip_read_info->filestream,\n              buf,read_now)!=read_now)\n        return UNZ_ERRNO;\n\n    return (int)read_now;\n}\n\n/*\n  Close the file in zip opened with unzipOpenCurrentFile\n  Return UNZ_CRCERROR if all the file was read but the CRC is not good\n*/\nextern int ZEXPORT unzCloseCurrentFile (unzFile file)\n{\n    int err=UNZ_OK;\n\n    unz64_s* s;\n    file_in_zip64_read_info_s* pfile_in_zip_read_info;\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    pfile_in_zip_read_info=s->pfile_in_zip_read;\n\n    if (pfile_in_zip_read_info==NULL)\n        return UNZ_PARAMERROR;\n\n\n    if ((pfile_in_zip_read_info->rest_read_uncompressed == 0) &&\n        (!pfile_in_zip_read_info->raw))\n    {\n        if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait)\n            err=UNZ_CRCERROR;\n    }\n\n\n    TRYFREE(pfile_in_zip_read_info->read_buffer);\n    pfile_in_zip_read_info->read_buffer = NULL;\n    if (pfile_in_zip_read_info->stream_initialised == Z_DEFLATED)\n        inflateEnd(&pfile_in_zip_read_info->stream);\n#ifdef HAVE_BZIP2\n    else if (pfile_in_zip_read_info->stream_initialised == Z_BZIP2ED)\n        BZ2_bzDecompressEnd(&pfile_in_zip_read_info->bstream);\n#endif\n\n\n    pfile_in_zip_read_info->stream_initialised = 0;\n    TRYFREE(pfile_in_zip_read_info);\n\n    s->pfile_in_zip_read=NULL;\n\n    return err;\n}\n\n\n/*\n  Get the global comment string of the ZipFile, in the szComment buffer.\n  uSizeBuf is the size of the szComment buffer.\n  return the number of byte copied or an error code <0\n*/\nextern int ZEXPORT unzGetGlobalComment (unzFile file, char * szComment, uLong uSizeBuf)\n{\n    unz64_s* s;\n    uLong uReadThis ;\n    if (file==NULL)\n        return (int)UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n\n    uReadThis = uSizeBuf;\n    if (uReadThis>s->gi.size_comment)\n        uReadThis = s->gi.size_comment;\n\n    if (ZSEEK64(s->z_filefunc,s->filestream,s->central_pos+22,ZLIB_FILEFUNC_SEEK_SET)!=0)\n        return UNZ_ERRNO;\n\n    if (uReadThis>0)\n    {\n      *szComment='\\0';\n      if (ZREAD64(s->z_filefunc,s->filestream,szComment,uReadThis)!=uReadThis)\n        return UNZ_ERRNO;\n    }\n\n    if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment))\n        *(szComment+s->gi.size_comment)='\\0';\n    return (int)uReadThis;\n}\n\n/* Additions by RX '2004 */\nextern ZPOS64_T ZEXPORT unzGetOffset64(unzFile file)\n{\n    unz64_s* s;\n\n    if (file==NULL)\n          return 0; //UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    if (!s->current_file_ok)\n      return 0;\n    if (s->gi.number_entry != 0 && s->gi.number_entry != 0xffff)\n      if (s->num_file==s->gi.number_entry)\n         return 0;\n    return s->pos_in_central_dir;\n}\n\nextern uLong ZEXPORT unzGetOffset (unzFile file)\n{\n    ZPOS64_T offset64;\n\n    if (file==NULL)\n          return 0; //UNZ_PARAMERROR;\n    offset64 = unzGetOffset64(file);\n    return (uLong)offset64;\n}\n\nextern int ZEXPORT unzSetOffset64(unzFile file, ZPOS64_T pos)\n{\n    unz64_s* s;\n    int err;\n\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n\n    s->pos_in_central_dir = pos;\n    s->num_file = s->gi.number_entry;      /* hack */\n    err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,\n                                              &s->cur_file_info_internal,\n                                              NULL,0,NULL,0,NULL,0);\n    s->current_file_ok = (err == UNZ_OK);\n    return err;\n}\n\nextern int ZEXPORT unzSetOffset (unzFile file, uLong pos)\n{\n    return unzSetOffset64(file,pos);\n}\n"
  },
  {
    "path": "external/minizip/unzip.h",
    "content": "/* unzip.h -- IO for uncompress .zip files using zlib\n   Version 1.1, February 14h, 2010\n   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Modifications of Unzip for Zip64\n         Copyright (C) 2007-2008 Even Rouault\n\n         Modifications for Zip64 support on both zip and unzip\n         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )\n\n         For more info read MiniZip_info.txt\n\n         ---------------------------------------------------------------------------------\n\n        Condition of use and distribution are the same than zlib :\n\n  This software is provided 'as-is', without any express or implied\n  warranty.  In no event will the authors be held liable for any damages\n  arising from the use of this software.\n\n  Permission is granted to anyone to use this software for any purpose,\n  including commercial applications, and to alter it and redistribute it\n  freely, subject to the following restrictions:\n\n  1. The origin of this software must not be misrepresented; you must not\n     claim that you wrote the original software. If you use this software\n     in a product, an acknowledgment in the product documentation would be\n     appreciated but is not required.\n  2. Altered source versions must be plainly marked as such, and must not be\n     misrepresented as being the original software.\n  3. This notice may not be removed or altered from any source distribution.\n\n  ---------------------------------------------------------------------------------\n\n        Changes\n\n        See header of unzip64.c\n\n*/\n\n#ifndef _unz64_H\n#define _unz64_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef _ZLIB_H\n#include \"zlib.h\"\n#endif\n\n#ifndef  _ZLIBIOAPI_H\n#include \"ioapi.h\"\n#endif\n\n#ifdef HAVE_BZIP2\n#include \"bzlib.h\"\n#endif\n\n#define Z_BZIP2ED 12\n\n#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP)\n/* like the STRICT of WIN32, we define a pointer that cannot be converted\n    from (void*) without cast */\ntypedef struct TagunzFile__ { int unused; } unzFile__;\ntypedef unzFile__ *unzFile;\n#else\ntypedef voidp unzFile;\n#endif\n\n\n#define UNZ_OK                          (0)\n#define UNZ_END_OF_LIST_OF_FILE         (-100)\n#define UNZ_ERRNO                       (Z_ERRNO)\n#define UNZ_EOF                         (0)\n#define UNZ_PARAMERROR                  (-102)\n#define UNZ_BADZIPFILE                  (-103)\n#define UNZ_INTERNALERROR               (-104)\n#define UNZ_CRCERROR                    (-105)\n\n/* tm_unz contain date/time info */\ntypedef struct tm_unz_s\n{\n    uInt tm_sec;            /* seconds after the minute - [0,59] */\n    uInt tm_min;            /* minutes after the hour - [0,59] */\n    uInt tm_hour;           /* hours since midnight - [0,23] */\n    uInt tm_mday;           /* day of the month - [1,31] */\n    uInt tm_mon;            /* months since January - [0,11] */\n    uInt tm_year;           /* years - [1980..2044] */\n} tm_unz;\n\n/* unz_global_info structure contain global data about the ZIPfile\n   These data comes from the end of central dir */\ntypedef struct unz_global_info64_s\n{\n    ZPOS64_T number_entry;         /* total number of entries in\n                                     the central dir on this disk */\n    uLong size_comment;         /* size of the global comment of the zipfile */\n} unz_global_info64;\n\ntypedef struct unz_global_info_s\n{\n    uLong number_entry;         /* total number of entries in\n                                     the central dir on this disk */\n    uLong size_comment;         /* size of the global comment of the zipfile */\n} unz_global_info;\n\n/* unz_file_info contain information about a file in the zipfile */\ntypedef struct unz_file_info64_s\n{\n    uLong version;              /* version made by                 2 bytes */\n    uLong version_needed;       /* version needed to extract       2 bytes */\n    uLong flag;                 /* general purpose bit flag        2 bytes */\n    uLong compression_method;   /* compression method              2 bytes */\n    uLong dosDate;              /* last mod file date in Dos fmt   4 bytes */\n    uLong crc;                  /* crc-32                          4 bytes */\n    ZPOS64_T compressed_size;   /* compressed size                 8 bytes */\n    ZPOS64_T uncompressed_size; /* uncompressed size               8 bytes */\n    uLong size_filename;        /* filename length                 2 bytes */\n    uLong size_file_extra;      /* extra field length              2 bytes */\n    uLong size_file_comment;    /* file comment length             2 bytes */\n\n    uLong disk_num_start;       /* disk number start               2 bytes */\n    uLong internal_fa;          /* internal file attributes        2 bytes */\n    uLong external_fa;          /* external file attributes        4 bytes */\n\n    tm_unz tmu_date;\n} unz_file_info64;\n\ntypedef struct unz_file_info_s\n{\n    uLong version;              /* version made by                 2 bytes */\n    uLong version_needed;       /* version needed to extract       2 bytes */\n    uLong flag;                 /* general purpose bit flag        2 bytes */\n    uLong compression_method;   /* compression method              2 bytes */\n    uLong dosDate;              /* last mod file date in Dos fmt   4 bytes */\n    uLong crc;                  /* crc-32                          4 bytes */\n    uLong compressed_size;      /* compressed size                 4 bytes */\n    uLong uncompressed_size;    /* uncompressed size               4 bytes */\n    uLong size_filename;        /* filename length                 2 bytes */\n    uLong size_file_extra;      /* extra field length              2 bytes */\n    uLong size_file_comment;    /* file comment length             2 bytes */\n\n    uLong disk_num_start;       /* disk number start               2 bytes */\n    uLong internal_fa;          /* internal file attributes        2 bytes */\n    uLong external_fa;          /* external file attributes        4 bytes */\n\n    tm_unz tmu_date;\n} unz_file_info;\n\nextern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1,\n                                                 const char* fileName2,\n                                                 int iCaseSensitivity));\n/*\n   Compare two filename (fileName1,fileName2).\n   If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)\n   If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi\n                                or strcasecmp)\n   If iCaseSenisivity = 0, case sensitivity is defaut of your operating system\n    (like 1 on Unix, 2 on Windows)\n*/\n\n\nextern unzFile ZEXPORT unzOpen OF((const char *path));\nextern unzFile ZEXPORT unzOpen64 OF((const void *path));\n/*\n  Open a Zip file. path contain the full pathname (by example,\n     on a Windows XP computer \"c:\\\\zlib\\\\zlib113.zip\" or on an Unix computer\n     \"zlib/zlib113.zip\".\n     If the zipfile cannot be opened (file don't exist or in not valid), the\n       return value is NULL.\n     Else, the return value is a unzFile Handle, usable with other function\n       of this unzip package.\n     the \"64\" function take a const void* pointer, because the path is just the\n       value passed to the open64_file_func callback.\n     Under Windows, if UNICODE is defined, using fill_fopen64_filefunc, the path\n       is a pointer to a wide unicode string (LPCTSTR is LPCWSTR), so const char*\n       does not describe the reality\n*/\n\n\nextern unzFile ZEXPORT unzOpen2 OF((const char *path,\n                                    zlib_filefunc_def* pzlib_filefunc_def));\n/*\n   Open a Zip file, like unzOpen, but provide a set of file low level API\n      for read/write the zip file (see ioapi.h)\n*/\n\nextern unzFile ZEXPORT unzOpen2_64 OF((const void *path,\n                                    zlib_filefunc64_def* pzlib_filefunc_def));\n/*\n   Open a Zip file, like unz64Open, but provide a set of file low level API\n      for read/write the zip file (see ioapi.h)\n*/\n\nextern int ZEXPORT unzClose OF((unzFile file));\n/*\n  Close a ZipFile opened with unzipOpen.\n  If there is files inside the .Zip opened with unzOpenCurrentFile (see later),\n    these files MUST be closed with unzipCloseCurrentFile before call unzipClose.\n  return UNZ_OK if there is no problem. */\n\nextern int ZEXPORT unzGetGlobalInfo OF((unzFile file,\n                                        unz_global_info *pglobal_info));\n\nextern int ZEXPORT unzGetGlobalInfo64 OF((unzFile file,\n                                        unz_global_info64 *pglobal_info));\n/*\n  Write info about the ZipFile in the *pglobal_info structure.\n  No preparation of the structure is needed\n  return UNZ_OK if there is no problem. */\n\n\nextern int ZEXPORT unzGetGlobalComment OF((unzFile file,\n                                           char *szComment,\n                                           uLong uSizeBuf));\n/*\n  Get the global comment string of the ZipFile, in the szComment buffer.\n  uSizeBuf is the size of the szComment buffer.\n  return the number of byte copied or an error code <0\n*/\n\n\n/***************************************************************************/\n/* Unzip package allow you browse the directory of the zipfile */\n\nextern int ZEXPORT unzGoToFirstFile OF((unzFile file));\n/*\n  Set the current file of the zipfile to the first file.\n  return UNZ_OK if there is no problem\n*/\n\nextern int ZEXPORT unzGoToNextFile OF((unzFile file));\n/*\n  Set the current file of the zipfile to the next file.\n  return UNZ_OK if there is no problem\n  return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.\n*/\n\nextern int ZEXPORT unzLocateFile OF((unzFile file,\n                     const char *szFileName,\n                     int iCaseSensitivity));\n/*\n  Try locate the file szFileName in the zipfile.\n  For the iCaseSensitivity signification, see unzStringFileNameCompare\n\n  return value :\n  UNZ_OK if the file is found. It becomes the current file.\n  UNZ_END_OF_LIST_OF_FILE if the file is not found\n*/\n\n\n/* ****************************************** */\n/* Ryan supplied functions */\n/* unz_file_info contain information about a file in the zipfile */\ntypedef struct unz_file_pos_s\n{\n    uLong pos_in_zip_directory;   /* offset in zip file directory */\n    uLong num_of_file;            /* # of file */\n} unz_file_pos;\n\nextern int ZEXPORT unzGetFilePos(\n    unzFile file,\n    unz_file_pos* file_pos);\n\nextern int ZEXPORT unzGoToFilePos(\n    unzFile file,\n    unz_file_pos* file_pos);\n\ntypedef struct unz64_file_pos_s\n{\n    ZPOS64_T pos_in_zip_directory;   /* offset in zip file directory */\n    ZPOS64_T num_of_file;            /* # of file */\n} unz64_file_pos;\n\nextern int ZEXPORT unzGetFilePos64(\n    unzFile file,\n    unz64_file_pos* file_pos);\n\nextern int ZEXPORT unzGoToFilePos64(\n    unzFile file,\n    const unz64_file_pos* file_pos);\n\n/* ****************************************** */\n\nextern int ZEXPORT unzGetCurrentFileInfo64 OF((unzFile file,\n                         unz_file_info64 *pfile_info,\n                         char *szFileName,\n                         uLong fileNameBufferSize,\n                         void *extraField,\n                         uLong extraFieldBufferSize,\n                         char *szComment,\n                         uLong commentBufferSize));\n\nextern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file,\n                         unz_file_info *pfile_info,\n                         char *szFileName,\n                         uLong fileNameBufferSize,\n                         void *extraField,\n                         uLong extraFieldBufferSize,\n                         char *szComment,\n                         uLong commentBufferSize));\n/*\n  Get Info about the current file\n  if pfile_info!=NULL, the *pfile_info structure will contain somes info about\n        the current file\n  if szFileName!=NULL, the filemane string will be copied in szFileName\n            (fileNameBufferSize is the size of the buffer)\n  if extraField!=NULL, the extra field information will be copied in extraField\n            (extraFieldBufferSize is the size of the buffer).\n            This is the Central-header version of the extra field\n  if szComment!=NULL, the comment string of the file will be copied in szComment\n            (commentBufferSize is the size of the buffer)\n*/\n\n\n/** Addition for GDAL : START */\n\nextern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64 OF((unzFile file));\n\n/** Addition for GDAL : END */\n\n\n/***************************************************************************/\n/* for reading the content of the current zipfile, you can open it, read data\n   from it, and close it (you can close it before reading all the file)\n   */\n\nextern int ZEXPORT unzOpenCurrentFile OF((unzFile file));\n/*\n  Open for reading data the current file in the zipfile.\n  If there is no error, the return value is UNZ_OK.\n*/\n\nextern int ZEXPORT unzOpenCurrentFilePassword OF((unzFile file,\n                                                  const char* password));\n/*\n  Open for reading data the current file in the zipfile.\n  password is a crypting password\n  If there is no error, the return value is UNZ_OK.\n*/\n\nextern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file,\n                                           int* method,\n                                           int* level,\n                                           int raw));\n/*\n  Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)\n    if raw==1\n  *method will receive method of compression, *level will receive level of\n     compression\n  note : you can set level parameter as NULL (if you did not want known level,\n         but you CANNOT set method parameter as NULL\n*/\n\nextern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file,\n                                           int* method,\n                                           int* level,\n                                           int raw,\n                                           const char* password));\n/*\n  Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)\n    if raw==1\n  *method will receive method of compression, *level will receive level of\n     compression\n  note : you can set level parameter as NULL (if you did not want known level,\n         but you CANNOT set method parameter as NULL\n*/\n\n\nextern int ZEXPORT unzCloseCurrentFile OF((unzFile file));\n/*\n  Close the file in zip opened with unzOpenCurrentFile\n  Return UNZ_CRCERROR if all the file was read but the CRC is not good\n*/\n\nextern int ZEXPORT unzReadCurrentFile OF((unzFile file,\n                      voidp buf,\n                      unsigned len));\n/*\n  Read bytes from the current file (opened by unzOpenCurrentFile)\n  buf contain buffer where data must be copied\n  len the size of buf.\n\n  return the number of byte copied if somes bytes are copied\n  return 0 if the end of file was reached\n  return <0 with error code if there is an error\n    (UNZ_ERRNO for IO error, or zLib error for uncompress error)\n*/\n\nextern z_off_t ZEXPORT unztell OF((unzFile file));\n\nextern ZPOS64_T ZEXPORT unztell64 OF((unzFile file));\n/*\n  Give the current position in uncompressed data\n*/\n\nextern int ZEXPORT unzeof OF((unzFile file));\n/*\n  return 1 if the end of file was reached, 0 elsewhere\n*/\n\nextern int ZEXPORT unzGetLocalExtrafield OF((unzFile file,\n                                             voidp buf,\n                                             unsigned len));\n/*\n  Read extra field from the current file (opened by unzOpenCurrentFile)\n  This is the local-header version of the extra field (sometimes, there is\n    more info in the local-header version than in the central-header)\n\n  if buf==NULL, it return the size of the local extra field\n\n  if buf!=NULL, len is the size of the buffer, the extra header is copied in\n    buf.\n  the return value is the number of bytes copied in buf, or (if <0)\n    the error code\n*/\n\n/***************************************************************************/\n\n/* Get the current file offset */\nextern ZPOS64_T ZEXPORT unzGetOffset64 (unzFile file);\nextern uLong ZEXPORT unzGetOffset (unzFile file);\n\n/* Set the current file offset */\nextern int ZEXPORT unzSetOffset64 (unzFile file, ZPOS64_T pos);\nextern int ZEXPORT unzSetOffset (unzFile file, uLong pos);\n\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _unz64_H */\n"
  },
  {
    "path": "external/minizip/zip.c",
    "content": "/* zip.c -- IO on .zip files using zlib\n   Version 1.1, February 14h, 2010\n   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Modifications for Zip64 support\n         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )\n\n         For more info read MiniZip_info.txt\n\n         Changes\n   Oct-2009 - Mathias Svensson - Remove old C style function prototypes\n   Oct-2009 - Mathias Svensson - Added Zip64 Support when creating new file archives\n   Oct-2009 - Mathias Svensson - Did some code cleanup and refactoring to get better overview of some functions.\n   Oct-2009 - Mathias Svensson - Added zipRemoveExtraInfoBlock to strip extra field data from its ZIP64 data\n                                 It is used when recreting zip archive with RAW when deleting items from a zip.\n                                 ZIP64 data is automaticly added to items that needs it, and existing ZIP64 data need to be removed.\n   Oct-2009 - Mathias Svensson - Added support for BZIP2 as compression mode (bzip2 lib is required)\n   Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer\n\n*/\n\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <time.h>\n#include \"zlib.h\"\n#include \"zip.h\"\n\n#ifdef STDC\n#  include <stddef.h>\n#  include <string.h>\n#  include <stdlib.h>\n#endif\n#ifdef NO_ERRNO_H\n    extern int errno;\n#else\n#   include <errno.h>\n#endif\n\n\n#ifndef local\n#  define local static\n#endif\n/* compile with -Dlocal if your debugger can't find static symbols */\n\n#ifndef VERSIONMADEBY\n# define VERSIONMADEBY   (0x0) /* platform depedent */\n#endif\n\n#ifndef Z_BUFSIZE\n#define Z_BUFSIZE (64*1024) //(16384)\n#endif\n\n#ifndef Z_MAXFILENAMEINZIP\n#define Z_MAXFILENAMEINZIP (256)\n#endif\n\n#ifndef ALLOC\n# define ALLOC(size) (malloc(size))\n#endif\n#ifndef TRYFREE\n# define TRYFREE(p) {if (p) free(p);}\n#endif\n\n/*\n#define SIZECENTRALDIRITEM (0x2e)\n#define SIZEZIPLOCALHEADER (0x1e)\n*/\n\n/* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */\n\n\n// NOT sure that this work on ALL platform\n#define MAKEULONG64(a, b) ((ZPOS64_T)(((unsigned long)(a)) | ((ZPOS64_T)((unsigned long)(b))) << 32))\n\n#ifndef SEEK_CUR\n#define SEEK_CUR    1\n#endif\n\n#ifndef SEEK_END\n#define SEEK_END    2\n#endif\n\n#ifndef SEEK_SET\n#define SEEK_SET    0\n#endif\n\n#ifndef DEF_MEM_LEVEL\n#if MAX_MEM_LEVEL >= 8\n#  define DEF_MEM_LEVEL 8\n#else\n#  define DEF_MEM_LEVEL  MAX_MEM_LEVEL\n#endif\n#endif\nconst char zip_copyright[] =\" zip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll\";\n\n\n#define SIZEDATA_INDATABLOCK (4096-(4*4))\n\n#define LOCALHEADERMAGIC    (0x04034b50)\n#define CENTRALHEADERMAGIC  (0x02014b50)\n#define ENDHEADERMAGIC      (0x06054b50)\n#define ZIP64ENDHEADERMAGIC      (0x6064b50)\n#define ZIP64ENDLOCHEADERMAGIC   (0x7064b50)\n\n#define FLAG_LOCALHEADER_OFFSET (0x06)\n#define CRC_LOCALHEADER_OFFSET  (0x0e)\n\n#define SIZECENTRALHEADER (0x2e) /* 46 */\n\ntypedef struct linkedlist_datablock_internal_s\n{\n  struct linkedlist_datablock_internal_s* next_datablock;\n  uLong  avail_in_this_block;\n  uLong  filled_in_this_block;\n  uLong  unused; /* for future use and alignement */\n  unsigned char data[SIZEDATA_INDATABLOCK];\n} linkedlist_datablock_internal;\n\ntypedef struct linkedlist_data_s\n{\n    linkedlist_datablock_internal* first_block;\n    linkedlist_datablock_internal* last_block;\n} linkedlist_data;\n\n\ntypedef struct\n{\n    z_stream stream;            /* zLib stream structure for inflate */\n#ifdef HAVE_BZIP2\n    bz_stream bstream;          /* bzLib stream structure for bziped */\n#endif\n\n    int  stream_initialised;    /* 1 is stream is initialised */\n    uInt pos_in_buffered_data;  /* last written byte in buffered_data */\n\n    ZPOS64_T pos_local_header;     /* offset of the local header of the file\n                                     currenty writing */\n    char* central_header;       /* central header data for the current file */\n    uLong size_centralExtra;\n    uLong size_centralheader;   /* size of the central header for cur file */\n    uLong size_centralExtraFree; /* Extra bytes allocated to the centralheader but that are not used */\n    uLong flag;                 /* flag of the file currently writing */\n\n    int  method;                /* compression method of file currenty wr.*/\n    int  raw;                   /* 1 for directly writing raw data */\n    Byte buffered_data[Z_BUFSIZE];/* buffer contain compressed data to be writ*/\n    uLong dosDate;\n    uLong crc32;\n    int  encrypt;\n    int  zip64;               /* Add ZIP64 extened information in the extra field */\n    ZPOS64_T pos_zip64extrainfo;\n    ZPOS64_T totalCompressedData;\n    ZPOS64_T totalUncompressedData;\n#ifndef NOCRYPT\n    unsigned long keys[3];     /* keys defining the pseudo-random sequence */\n    const unsigned long* pcrc_32_tab;\n    int crypt_header_size;\n#endif\n} curfile64_info;\n\ntypedef struct\n{\n    zlib_filefunc64_32_def z_filefunc;\n    voidpf filestream;        /* io structore of the zipfile */\n    linkedlist_data central_dir;/* datablock with central dir in construction*/\n    int  in_opened_file_inzip;  /* 1 if a file in the zip is currently writ.*/\n    curfile64_info ci;            /* info on the file curretly writing */\n\n    ZPOS64_T begin_pos;            /* position of the beginning of the zipfile */\n    ZPOS64_T add_position_when_writting_offset;\n    ZPOS64_T number_entry;\n\n#ifndef NO_ADDFILEINEXISTINGZIP\n    char *globalcomment;\n#endif\n\n} zip64_internal;\n\n\n#ifndef NOCRYPT\n#define INCLUDECRYPTINGCODE_IFCRYPTALLOWED\n#include \"crypt.h\"\n#endif\n\nlocal linkedlist_datablock_internal* allocate_new_datablock()\n{\n    linkedlist_datablock_internal* ldi;\n    ldi = (linkedlist_datablock_internal*)\n                 ALLOC(sizeof(linkedlist_datablock_internal));\n    if (ldi!=NULL)\n    {\n        ldi->next_datablock = NULL ;\n        ldi->filled_in_this_block = 0 ;\n        ldi->avail_in_this_block = SIZEDATA_INDATABLOCK ;\n    }\n    return ldi;\n}\n\nlocal void free_datablock(linkedlist_datablock_internal* ldi)\n{\n    while (ldi!=NULL)\n    {\n        linkedlist_datablock_internal* ldinext = ldi->next_datablock;\n        TRYFREE(ldi);\n        ldi = ldinext;\n    }\n}\n\nlocal void init_linkedlist(linkedlist_data* ll)\n{\n    ll->first_block = ll->last_block = NULL;\n}\n\nlocal void free_linkedlist(linkedlist_data* ll)\n{\n    free_datablock(ll->first_block);\n    ll->first_block = ll->last_block = NULL;\n}\n\n\nlocal int add_data_in_datablock(linkedlist_data* ll, const void* buf, uLong len)\n{\n    linkedlist_datablock_internal* ldi;\n    const unsigned char* from_copy;\n\n    if (ll==NULL)\n        return ZIP_INTERNALERROR;\n\n    if (ll->last_block == NULL)\n    {\n        ll->first_block = ll->last_block = allocate_new_datablock();\n        if (ll->first_block == NULL)\n            return ZIP_INTERNALERROR;\n    }\n\n    ldi = ll->last_block;\n    from_copy = (unsigned char*)buf;\n\n    while (len>0)\n    {\n        uInt copy_this;\n        uInt i;\n        unsigned char* to_copy;\n\n        if (ldi->avail_in_this_block==0)\n        {\n            ldi->next_datablock = allocate_new_datablock();\n            if (ldi->next_datablock == NULL)\n                return ZIP_INTERNALERROR;\n            ldi = ldi->next_datablock ;\n            ll->last_block = ldi;\n        }\n\n        if (ldi->avail_in_this_block < len)\n            copy_this = (uInt)ldi->avail_in_this_block;\n        else\n            copy_this = (uInt)len;\n\n        to_copy = &(ldi->data[ldi->filled_in_this_block]);\n\n        for (i=0;i<copy_this;i++)\n            *(to_copy+i)=*(from_copy+i);\n\n        ldi->filled_in_this_block += copy_this;\n        ldi->avail_in_this_block -= copy_this;\n        from_copy += copy_this ;\n        len -= copy_this;\n    }\n    return ZIP_OK;\n}\n\n\n\n/****************************************************************************/\n\n#ifndef NO_ADDFILEINEXISTINGZIP\n/* ===========================================================================\n   Inputs a long in LSB order to the given file\n   nbByte == 1, 2 ,4 or 8 (byte, short or long, ZPOS64_T)\n*/\n\nlocal int zip64local_putValue OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte));\nlocal int zip64local_putValue (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte)\n{\n    unsigned char buf[8];\n    int n;\n    for (n = 0; n < nbByte; n++)\n    {\n        buf[n] = (unsigned char)(x & 0xff);\n        x >>= 8;\n    }\n    if (x != 0)\n      {     /* data overflow - hack for ZIP64 (X Roche) */\n      for (n = 0; n < nbByte; n++)\n        {\n          buf[n] = 0xff;\n        }\n      }\n\n    if (ZWRITE64(*pzlib_filefunc_def,filestream,buf,nbByte)!=(uLong)nbByte)\n        return ZIP_ERRNO;\n    else\n        return ZIP_OK;\n}\n\nlocal void zip64local_putValue_inmemory OF((void* dest, ZPOS64_T x, int nbByte));\nlocal void zip64local_putValue_inmemory (void* dest, ZPOS64_T x, int nbByte)\n{\n    unsigned char* buf=(unsigned char*)dest;\n    int n;\n    for (n = 0; n < nbByte; n++) {\n        buf[n] = (unsigned char)(x & 0xff);\n        x >>= 8;\n    }\n\n    if (x != 0)\n    {     /* data overflow - hack for ZIP64 */\n       for (n = 0; n < nbByte; n++)\n       {\n          buf[n] = 0xff;\n       }\n    }\n}\n\n/****************************************************************************/\n\n\nlocal uLong zip64local_TmzDateToDosDate(const tm_zip* ptm)\n{\n    uLong year = (uLong)ptm->tm_year;\n    if (year>=1980)\n        year-=1980;\n    else if (year>=80)\n        year-=80;\n    return\n      (uLong) (((ptm->tm_mday) + (32 * (ptm->tm_mon+1)) + (512 * year)) << 16) |\n        ((ptm->tm_sec/2) + (32* ptm->tm_min) + (2048 * (uLong)ptm->tm_hour));\n}\n\n\n/****************************************************************************/\n\nlocal int zip64local_getByte OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int *pi));\n\nlocal int zip64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def,voidpf filestream,int* pi)\n{\n    unsigned char c;\n    int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1);\n    if (err==1)\n    {\n        *pi = (int)c;\n        return ZIP_OK;\n    }\n    else\n    {\n        if (ZERROR64(*pzlib_filefunc_def,filestream))\n            return ZIP_ERRNO;\n        else\n            return ZIP_EOF;\n    }\n}\n\n\n/* ===========================================================================\n   Reads a long in LSB order from the given gz_stream. Sets\n*/\nlocal int zip64local_getShort OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong *pX));\n\nlocal int zip64local_getShort (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX)\n{\n    uLong x ;\n    int i = 0;\n    int err;\n\n    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x = (uLong)i;\n\n    if (err==ZIP_OK)\n        err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x += ((uLong)i)<<8;\n\n    if (err==ZIP_OK)\n        *pX = x;\n    else\n        *pX = 0;\n    return err;\n}\n\nlocal int zip64local_getLong OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong *pX));\n\nlocal int zip64local_getLong (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX)\n{\n    uLong x ;\n    int i = 0;\n    int err;\n\n    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x = (uLong)i;\n\n    if (err==ZIP_OK)\n        err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x += ((uLong)i)<<8;\n\n    if (err==ZIP_OK)\n        err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x += ((uLong)i)<<16;\n\n    if (err==ZIP_OK)\n        err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x += ((uLong)i)<<24;\n\n    if (err==ZIP_OK)\n        *pX = x;\n    else\n        *pX = 0;\n    return err;\n}\n\nlocal int zip64local_getLong64 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX));\n\n\nlocal int zip64local_getLong64 (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX)\n{\n  ZPOS64_T x;\n  int i = 0;\n  int err;\n\n  err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n  x = (ZPOS64_T)i;\n\n  if (err==ZIP_OK)\n    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n  x += ((ZPOS64_T)i)<<8;\n\n  if (err==ZIP_OK)\n    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n  x += ((ZPOS64_T)i)<<16;\n\n  if (err==ZIP_OK)\n    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n  x += ((ZPOS64_T)i)<<24;\n\n  if (err==ZIP_OK)\n    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n  x += ((ZPOS64_T)i)<<32;\n\n  if (err==ZIP_OK)\n    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n  x += ((ZPOS64_T)i)<<40;\n\n  if (err==ZIP_OK)\n    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n  x += ((ZPOS64_T)i)<<48;\n\n  if (err==ZIP_OK)\n    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n  x += ((ZPOS64_T)i)<<56;\n\n  if (err==ZIP_OK)\n    *pX = x;\n  else\n    *pX = 0;\n\n  return err;\n}\n\n#ifndef BUFREADCOMMENT\n#define BUFREADCOMMENT (0x400)\n#endif\n/*\n  Locate the Central directory of a zipfile (at the end, just before\n    the global comment)\n*/\nlocal ZPOS64_T zip64local_SearchCentralDir OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));\n\nlocal ZPOS64_T zip64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)\n{\n  unsigned char* buf;\n  ZPOS64_T uSizeFile;\n  ZPOS64_T uBackRead;\n  ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */\n  ZPOS64_T uPosFound=0;\n\n  if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)\n    return 0;\n\n\n  uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);\n\n  if (uMaxBack>uSizeFile)\n    uMaxBack = uSizeFile;\n\n  buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);\n  if (buf==NULL)\n    return 0;\n\n  uBackRead = 4;\n  while (uBackRead<uMaxBack)\n  {\n    uLong uReadSize;\n    ZPOS64_T uReadPos ;\n    int i;\n    if (uBackRead+BUFREADCOMMENT>uMaxBack)\n      uBackRead = uMaxBack;\n    else\n      uBackRead+=BUFREADCOMMENT;\n    uReadPos = uSizeFile-uBackRead ;\n\n    uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?\n      (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);\n    if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)\n      break;\n\n    if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)\n      break;\n\n    for (i=(int)uReadSize-3; (i--)>0;)\n      if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&\n        ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))\n      {\n        uPosFound = uReadPos+i;\n        break;\n      }\n\n      if (uPosFound!=0)\n        break;\n  }\n  TRYFREE(buf);\n  return uPosFound;\n}\n\n/*\nLocate the End of Zip64 Central directory locator and from there find the CD of a zipfile (at the end, just before\nthe global comment)\n*/\nlocal ZPOS64_T zip64local_SearchCentralDir64 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));\n\nlocal ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)\n{\n  unsigned char* buf;\n  ZPOS64_T uSizeFile;\n  ZPOS64_T uBackRead;\n  ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */\n  ZPOS64_T uPosFound=0;\n  uLong uL;\n  ZPOS64_T relativeOffset;\n\n  if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)\n    return 0;\n\n  uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);\n\n  if (uMaxBack>uSizeFile)\n    uMaxBack = uSizeFile;\n\n  buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);\n  if (buf==NULL)\n    return 0;\n\n  uBackRead = 4;\n  while (uBackRead<uMaxBack)\n  {\n    uLong uReadSize;\n    ZPOS64_T uReadPos;\n    int i;\n    if (uBackRead+BUFREADCOMMENT>uMaxBack)\n      uBackRead = uMaxBack;\n    else\n      uBackRead+=BUFREADCOMMENT;\n    uReadPos = uSizeFile-uBackRead ;\n\n    uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?\n      (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);\n    if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)\n      break;\n\n    if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)\n      break;\n\n    for (i=(int)uReadSize-3; (i--)>0;)\n    {\n      // Signature \"0x07064b50\" Zip64 end of central directory locater\n      if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))\n      {\n        uPosFound = uReadPos+i;\n        break;\n      }\n    }\n\n      if (uPosFound!=0)\n        break;\n  }\n\n  TRYFREE(buf);\n  if (uPosFound == 0)\n    return 0;\n\n  /* Zip64 end of central directory locator */\n  if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0)\n    return 0;\n\n  /* the signature, already checked */\n  if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)\n    return 0;\n\n  /* number of the disk with the start of the zip64 end of  central directory */\n  if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)\n    return 0;\n  if (uL != 0)\n    return 0;\n\n  /* relative offset of the zip64 end of central directory record */\n  if (zip64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=ZIP_OK)\n    return 0;\n\n  /* total number of disks */\n  if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)\n    return 0;\n  if (uL != 1)\n    return 0;\n\n  /* Goto Zip64 end of central directory record */\n  if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0)\n    return 0;\n\n  /* the signature */\n  if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)\n    return 0;\n\n  if (uL != 0x06064b50) // signature of 'Zip64 end of central directory'\n    return 0;\n\n  return relativeOffset;\n}\n\nint LoadCentralDirectoryRecord(zip64_internal* pziinit)\n{\n  int err=ZIP_OK;\n  ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/\n\n  ZPOS64_T size_central_dir;     /* size of the central directory  */\n  ZPOS64_T offset_central_dir;   /* offset of start of central directory */\n  ZPOS64_T central_pos;\n  uLong uL;\n\n  uLong number_disk;          /* number of the current dist, used for\n                              spaning ZIP, unsupported, always 0*/\n  uLong number_disk_with_CD;  /* number the the disk with central dir, used\n                              for spaning ZIP, unsupported, always 0*/\n  ZPOS64_T number_entry;\n  ZPOS64_T number_entry_CD;      /* total number of entries in\n                                the central dir\n                                (same than number_entry on nospan) */\n  uLong VersionMadeBy;\n  uLong VersionNeeded;\n  uLong size_comment;\n\n  int hasZIP64Record = 0;\n\n  // check first if we find a ZIP64 record\n  central_pos = zip64local_SearchCentralDir64(&pziinit->z_filefunc,pziinit->filestream);\n  if(central_pos > 0)\n  {\n    hasZIP64Record = 1;\n  }\n  else if(central_pos == 0)\n  {\n    central_pos = zip64local_SearchCentralDir(&pziinit->z_filefunc,pziinit->filestream);\n  }\n\n/* disable to allow appending to empty ZIP archive\n        if (central_pos==0)\n            err=ZIP_ERRNO;\n*/\n\n  if(hasZIP64Record)\n  {\n    ZPOS64_T sizeEndOfCentralDirectory;\n    if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos, ZLIB_FILEFUNC_SEEK_SET) != 0)\n      err=ZIP_ERRNO;\n\n    /* the signature, already checked */\n    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    /* size of zip64 end of central directory record */\n    if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &sizeEndOfCentralDirectory)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    /* version made by */\n    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionMadeBy)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    /* version needed to extract */\n    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionNeeded)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    /* number of this disk */\n    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    /* number of the disk with the start of the central directory */\n    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    /* total number of entries in the central directory on this disk */\n    if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &number_entry)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    /* total number of entries in the central directory */\n    if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&number_entry_CD)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0))\n      err=ZIP_BADZIPFILE;\n\n    /* size of the central directory */\n    if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&size_central_dir)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    /* offset of start of central directory with respect to the\n    starting disk number */\n    if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&offset_central_dir)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    // TODO..\n    // read the comment from the standard central header.\n    size_comment = 0;\n  }\n  else\n  {\n    // Read End of central Directory info\n    if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)\n      err=ZIP_ERRNO;\n\n    /* the signature, already checked */\n    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    /* number of this disk */\n    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    /* number of the disk with the start of the central directory */\n    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    /* total number of entries in the central dir on this disk */\n    number_entry = 0;\n    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)\n      err=ZIP_ERRNO;\n    else\n      number_entry = uL;\n\n    /* total number of entries in the central dir */\n    number_entry_CD = 0;\n    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)\n      err=ZIP_ERRNO;\n    else\n      number_entry_CD = uL;\n\n    if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0))\n      err=ZIP_BADZIPFILE;\n\n    /* size of the central directory */\n    size_central_dir = 0;\n    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)\n      err=ZIP_ERRNO;\n    else\n      size_central_dir = uL;\n\n    /* offset of start of central directory with respect to the starting disk number */\n    offset_central_dir = 0;\n    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)\n      err=ZIP_ERRNO;\n    else\n      offset_central_dir = uL;\n\n\n    /* zipfile global comment length */\n    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &size_comment)!=ZIP_OK)\n      err=ZIP_ERRNO;\n  }\n\n  if ((central_pos<offset_central_dir+size_central_dir) &&\n    (err==ZIP_OK))\n    err=ZIP_BADZIPFILE;\n\n  if (err!=ZIP_OK)\n  {\n    ZCLOSE64(pziinit->z_filefunc, pziinit->filestream);\n    return ZIP_ERRNO;\n  }\n\n  if (size_comment>0)\n  {\n    pziinit->globalcomment = (char*)ALLOC(size_comment+1);\n    if (pziinit->globalcomment)\n    {\n      size_comment = ZREAD64(pziinit->z_filefunc, pziinit->filestream, pziinit->globalcomment,size_comment);\n      pziinit->globalcomment[size_comment]=0;\n    }\n  }\n\n  byte_before_the_zipfile = central_pos - (offset_central_dir+size_central_dir);\n  pziinit->add_position_when_writting_offset = byte_before_the_zipfile;\n\n  {\n    ZPOS64_T size_central_dir_to_read = size_central_dir;\n    size_t buf_size = SIZEDATA_INDATABLOCK;\n    void* buf_read = (void*)ALLOC(buf_size);\n    if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir + byte_before_the_zipfile, ZLIB_FILEFUNC_SEEK_SET) != 0)\n      err=ZIP_ERRNO;\n\n    while ((size_central_dir_to_read>0) && (err==ZIP_OK))\n    {\n      ZPOS64_T read_this = SIZEDATA_INDATABLOCK;\n      if (read_this > size_central_dir_to_read)\n        read_this = size_central_dir_to_read;\n\n      if (ZREAD64(pziinit->z_filefunc, pziinit->filestream,buf_read,(uLong)read_this) != read_this)\n        err=ZIP_ERRNO;\n\n      if (err==ZIP_OK)\n        err = add_data_in_datablock(&pziinit->central_dir,buf_read, (uLong)read_this);\n\n      size_central_dir_to_read-=read_this;\n    }\n    TRYFREE(buf_read);\n  }\n  pziinit->begin_pos = byte_before_the_zipfile;\n  pziinit->number_entry = number_entry_CD;\n\n  if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir+byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET) != 0)\n    err=ZIP_ERRNO;\n\n  return err;\n}\n\n\n#endif /* !NO_ADDFILEINEXISTINGZIP*/\n\n\n/************************************************************/\nextern zipFile ZEXPORT zipOpen3 (const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_32_def* pzlib_filefunc64_32_def)\n{\n    zip64_internal ziinit;\n    zip64_internal* zi;\n    int err=ZIP_OK;\n\n    ziinit.z_filefunc.zseek32_file = NULL;\n    ziinit.z_filefunc.ztell32_file = NULL;\n    if (pzlib_filefunc64_32_def==NULL)\n        fill_fopen64_filefunc(&ziinit.z_filefunc.zfile_func64);\n    else\n        ziinit.z_filefunc = *pzlib_filefunc64_32_def;\n\n    ziinit.filestream = ZOPEN64(ziinit.z_filefunc,\n                  pathname,\n                  (append == APPEND_STATUS_CREATE) ?\n                  (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_CREATE) :\n                    (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_EXISTING));\n\n    if (ziinit.filestream == NULL)\n        return NULL;\n\n    if (append == APPEND_STATUS_CREATEAFTER)\n        ZSEEK64(ziinit.z_filefunc,ziinit.filestream,0,SEEK_END);\n\n    ziinit.begin_pos = ZTELL64(ziinit.z_filefunc,ziinit.filestream);\n    ziinit.in_opened_file_inzip = 0;\n    ziinit.ci.stream_initialised = 0;\n    ziinit.number_entry = 0;\n    ziinit.add_position_when_writting_offset = 0;\n    init_linkedlist(&(ziinit.central_dir));\n\n\n\n    zi = (zip64_internal*)ALLOC(sizeof(zip64_internal));\n    if (zi==NULL)\n    {\n        ZCLOSE64(ziinit.z_filefunc,ziinit.filestream);\n        return NULL;\n    }\n\n    /* now we add file in a zipfile */\n#    ifndef NO_ADDFILEINEXISTINGZIP\n    ziinit.globalcomment = NULL;\n    if (append == APPEND_STATUS_ADDINZIP)\n    {\n      // Read and Cache Central Directory Records\n      err = LoadCentralDirectoryRecord(&ziinit);\n    }\n\n    if (globalcomment)\n    {\n      *globalcomment = ziinit.globalcomment;\n    }\n#    endif /* !NO_ADDFILEINEXISTINGZIP*/\n\n    if (err != ZIP_OK)\n    {\n#    ifndef NO_ADDFILEINEXISTINGZIP\n        TRYFREE(ziinit.globalcomment);\n#    endif /* !NO_ADDFILEINEXISTINGZIP*/\n        TRYFREE(zi);\n        return NULL;\n    }\n    else\n    {\n        *zi = ziinit;\n        return (zipFile)zi;\n    }\n}\n\nextern zipFile ZEXPORT zipOpen2 (const char *pathname, int append, zipcharpc* globalcomment, zlib_filefunc_def* pzlib_filefunc32_def)\n{\n    if (pzlib_filefunc32_def != NULL)\n    {\n        zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;\n        fill_zlib_filefunc64_32_def_from_filefunc32(&zlib_filefunc64_32_def_fill,pzlib_filefunc32_def);\n        return zipOpen3(pathname, append, globalcomment, &zlib_filefunc64_32_def_fill);\n    }\n    else\n        return zipOpen3(pathname, append, globalcomment, NULL);\n}\n\nextern zipFile ZEXPORT zipOpen2_64 (const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_def* pzlib_filefunc_def)\n{\n    if (pzlib_filefunc_def != NULL)\n    {\n        zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;\n        zlib_filefunc64_32_def_fill.zfile_func64 = *pzlib_filefunc_def;\n        zlib_filefunc64_32_def_fill.ztell32_file = NULL;\n        zlib_filefunc64_32_def_fill.zseek32_file = NULL;\n        return zipOpen3(pathname, append, globalcomment, &zlib_filefunc64_32_def_fill);\n    }\n    else\n        return zipOpen3(pathname, append, globalcomment, NULL);\n}\n\n\n\nextern zipFile ZEXPORT zipOpen (const char* pathname, int append)\n{\n    return zipOpen3((const void*)pathname,append,NULL,NULL);\n}\n\nextern zipFile ZEXPORT zipOpen64 (const void* pathname, int append)\n{\n    return zipOpen3(pathname,append,NULL,NULL);\n}\n\nint Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local)\n{\n  /* write the local header */\n  int err;\n  uInt size_filename = (uInt)strlen(filename);\n  uInt size_extrafield = size_extrafield_local;\n\n  err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)LOCALHEADERMAGIC, 4);\n\n  if (err==ZIP_OK)\n  {\n    if(zi->ci.zip64)\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);/* version needed to extract */\n    else\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)20,2);/* version needed to extract */\n  }\n\n  if (err==ZIP_OK)\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.flag,2);\n\n  if (err==ZIP_OK)\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.method,2);\n\n  if (err==ZIP_OK)\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.dosDate,4);\n\n  // CRC / Compressed size / Uncompressed size will be filled in later and rewritten later\n  if (err==ZIP_OK)\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* crc 32, unknown */\n  if (err==ZIP_OK)\n  {\n    if(zi->ci.zip64)\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* compressed size, unknown */\n    else\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* compressed size, unknown */\n  }\n  if (err==ZIP_OK)\n  {\n    if(zi->ci.zip64)\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* uncompressed size, unknown */\n    else\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* uncompressed size, unknown */\n  }\n\n  if (err==ZIP_OK)\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_filename,2);\n\n  if(zi->ci.zip64)\n  {\n    size_extrafield += 20;\n  }\n\n  if (err==ZIP_OK)\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_extrafield,2);\n\n  if ((err==ZIP_OK) && (size_filename > 0))\n  {\n    if (ZWRITE64(zi->z_filefunc,zi->filestream,filename,size_filename)!=size_filename)\n      err = ZIP_ERRNO;\n  }\n\n  if ((err==ZIP_OK) && (size_extrafield_local > 0))\n  {\n    if (ZWRITE64(zi->z_filefunc, zi->filestream, extrafield_local, size_extrafield_local) != size_extrafield_local)\n      err = ZIP_ERRNO;\n  }\n\n\n  if ((err==ZIP_OK) && (zi->ci.zip64))\n  {\n      // write the Zip64 extended info\n      short HeaderID = 1;\n      short DataSize = 16;\n      ZPOS64_T CompressedSize = 0;\n      ZPOS64_T UncompressedSize = 0;\n\n      // Remember position of Zip64 extended info for the local file header. (needed when we update size after done with file)\n      zi->ci.pos_zip64extrainfo = ZTELL64(zi->z_filefunc,zi->filestream);\n\n      err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)HeaderID,2);\n      err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)DataSize,2);\n\n      err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)UncompressedSize,8);\n      err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)CompressedSize,8);\n  }\n\n  return err;\n}\n\n/*\n NOTE.\n When writing RAW the ZIP64 extended information in extrafield_local and extrafield_global needs to be stripped\n before calling this function it can be done with zipRemoveExtraInfoBlock\n\n It is not done here because then we need to realloc a new buffer since parameters are 'const' and I want to minimize\n unnecessary allocations.\n */\nextern int ZEXPORT zipOpenNewFileInZip4_64 (zipFile file, const char* filename, const zip_fileinfo* zipfi,\n                                         const void* extrafield_local, uInt size_extrafield_local,\n                                         const void* extrafield_global, uInt size_extrafield_global,\n                                         const char* comment, int method, int level, int raw,\n                                         int windowBits,int memLevel, int strategy,\n                                         const char* password, uLong crcForCrypting,\n                                         uLong versionMadeBy, uLong flagBase, int zip64)\n{\n    zip64_internal* zi;\n    uInt size_filename;\n    uInt size_comment;\n    uInt i;\n    int err = ZIP_OK;\n\n#    ifdef NOCRYPT\n    if (password != NULL)\n        return ZIP_PARAMERROR;\n#    endif\n\n    if (file == NULL)\n        return ZIP_PARAMERROR;\n\n#ifdef HAVE_BZIP2\n    if ((method!=0) && (method!=Z_DEFLATED) && (method!=Z_BZIP2ED))\n      return ZIP_PARAMERROR;\n#else\n    if ((method!=0) && (method!=Z_DEFLATED))\n      return ZIP_PARAMERROR;\n#endif\n\n    zi = (zip64_internal*)file;\n\n    if (zi->in_opened_file_inzip == 1)\n    {\n        err = zipCloseFileInZip (file);\n        if (err != ZIP_OK)\n            return err;\n    }\n\n    if (filename==NULL)\n        filename=\"-\";\n\n    if (comment==NULL)\n        size_comment = 0;\n    else\n        size_comment = (uInt)strlen(comment);\n\n    size_filename = (uInt)strlen(filename);\n\n    if (zipfi == NULL)\n        zi->ci.dosDate = 0;\n    else\n    {\n        if (zipfi->dosDate != 0)\n            zi->ci.dosDate = zipfi->dosDate;\n        else\n          zi->ci.dosDate = zip64local_TmzDateToDosDate(&zipfi->tmz_date);\n    }\n\n    zi->ci.flag = flagBase;\n    if ((level==8) || (level==9))\n      zi->ci.flag |= 2;\n    if ((level==2))\n      zi->ci.flag |= 4;\n    if ((level==1))\n      zi->ci.flag |= 6;\n    if (password != NULL)\n      zi->ci.flag |= 1;\n\n    zi->ci.crc32 = 0;\n    zi->ci.method = method;\n    zi->ci.encrypt = 0;\n    zi->ci.stream_initialised = 0;\n    zi->ci.pos_in_buffered_data = 0;\n    zi->ci.raw = raw;\n    zi->ci.pos_local_header = ZTELL64(zi->z_filefunc,zi->filestream);\n\n    zi->ci.size_centralheader = SIZECENTRALHEADER + size_filename + size_extrafield_global + size_comment;\n    zi->ci.size_centralExtraFree = 32; // Extra space we have reserved in case we need to add ZIP64 extra info data\n\n    zi->ci.central_header = (char*)ALLOC((uInt)zi->ci.size_centralheader + zi->ci.size_centralExtraFree);\n\n    zi->ci.size_centralExtra = size_extrafield_global;\n    zip64local_putValue_inmemory(zi->ci.central_header,(uLong)CENTRALHEADERMAGIC,4);\n    /* version info */\n    zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)versionMadeBy,2);\n    zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)20,2);\n    zip64local_putValue_inmemory(zi->ci.central_header+8,(uLong)zi->ci.flag,2);\n    zip64local_putValue_inmemory(zi->ci.central_header+10,(uLong)zi->ci.method,2);\n    zip64local_putValue_inmemory(zi->ci.central_header+12,(uLong)zi->ci.dosDate,4);\n    zip64local_putValue_inmemory(zi->ci.central_header+16,(uLong)0,4); /*crc*/\n    zip64local_putValue_inmemory(zi->ci.central_header+20,(uLong)0,4); /*compr size*/\n    zip64local_putValue_inmemory(zi->ci.central_header+24,(uLong)0,4); /*uncompr size*/\n    zip64local_putValue_inmemory(zi->ci.central_header+28,(uLong)size_filename,2);\n    zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)size_extrafield_global,2);\n    zip64local_putValue_inmemory(zi->ci.central_header+32,(uLong)size_comment,2);\n    zip64local_putValue_inmemory(zi->ci.central_header+34,(uLong)0,2); /*disk nm start*/\n\n    if (zipfi==NULL)\n        zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)0,2);\n    else\n        zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)zipfi->internal_fa,2);\n\n    if (zipfi==NULL)\n        zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)0,4);\n    else\n        zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)zipfi->external_fa,4);\n\n    if(zi->ci.pos_local_header >= 0xffffffff)\n      zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)0xffffffff,4);\n    else\n      zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)zi->ci.pos_local_header - zi->add_position_when_writting_offset,4);\n\n    for (i=0;i<size_filename;i++)\n        *(zi->ci.central_header+SIZECENTRALHEADER+i) = *(filename+i);\n\n    for (i=0;i<size_extrafield_global;i++)\n        *(zi->ci.central_header+SIZECENTRALHEADER+size_filename+i) =\n              *(((const char*)extrafield_global)+i);\n\n    for (i=0;i<size_comment;i++)\n        *(zi->ci.central_header+SIZECENTRALHEADER+size_filename+\n              size_extrafield_global+i) = *(comment+i);\n    if (zi->ci.central_header == NULL)\n        return ZIP_INTERNALERROR;\n\n    zi->ci.zip64 = zip64;\n    zi->ci.totalCompressedData = 0;\n    zi->ci.totalUncompressedData = 0;\n    zi->ci.pos_zip64extrainfo = 0;\n\n    err = Write_LocalFileHeader(zi, filename, size_extrafield_local, extrafield_local);\n\n#ifdef HAVE_BZIP2\n    zi->ci.bstream.avail_in = (uInt)0;\n    zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;\n    zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;\n    zi->ci.bstream.total_in_hi32 = 0;\n    zi->ci.bstream.total_in_lo32 = 0;\n    zi->ci.bstream.total_out_hi32 = 0;\n    zi->ci.bstream.total_out_lo32 = 0;\n#endif\n\n    zi->ci.stream.avail_in = (uInt)0;\n    zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;\n    zi->ci.stream.next_out = zi->ci.buffered_data;\n    zi->ci.stream.total_in = 0;\n    zi->ci.stream.total_out = 0;\n    zi->ci.stream.data_type = Z_BINARY;\n\n#ifdef HAVE_BZIP2\n    if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED || zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))\n#else\n    if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))\n#endif\n    {\n        if(zi->ci.method == Z_DEFLATED)\n        {\n          zi->ci.stream.zalloc = (alloc_func)0;\n          zi->ci.stream.zfree = (free_func)0;\n          zi->ci.stream.opaque = (voidpf)0;\n\n          if (windowBits>0)\n              windowBits = -windowBits;\n\n          err = deflateInit2(&zi->ci.stream, level, Z_DEFLATED, windowBits, memLevel, strategy);\n\n          if (err==Z_OK)\n              zi->ci.stream_initialised = Z_DEFLATED;\n        }\n        else if(zi->ci.method == Z_BZIP2ED)\n        {\n#ifdef HAVE_BZIP2\n            // Init BZip stuff here\n          zi->ci.bstream.bzalloc = 0;\n          zi->ci.bstream.bzfree = 0;\n          zi->ci.bstream.opaque = (voidpf)0;\n\n          err = BZ2_bzCompressInit(&zi->ci.bstream, level, 0,35);\n          if(err == BZ_OK)\n            zi->ci.stream_initialised = Z_BZIP2ED;\n#endif\n        }\n\n    }\n\n#    ifndef NOCRYPT\n    zi->ci.crypt_header_size = 0;\n    if ((err==Z_OK) && (password != NULL))\n    {\n        unsigned char bufHead[RAND_HEAD_LEN];\n        unsigned int sizeHead;\n        zi->ci.encrypt = 1;\n        zi->ci.pcrc_32_tab = get_crc_table();\n        /*init_keys(password,zi->ci.keys,zi->ci.pcrc_32_tab);*/\n\n        sizeHead=crypthead(password,bufHead,RAND_HEAD_LEN,zi->ci.keys,zi->ci.pcrc_32_tab,crcForCrypting);\n        zi->ci.crypt_header_size = sizeHead;\n\n        if (ZWRITE64(zi->z_filefunc,zi->filestream,bufHead,sizeHead) != sizeHead)\n                err = ZIP_ERRNO;\n    }\n#    endif\n\n    if (err==Z_OK)\n        zi->in_opened_file_inzip = 1;\n    return err;\n}\n\nextern int ZEXPORT zipOpenNewFileInZip4 (zipFile file, const char* filename, const zip_fileinfo* zipfi,\n                                         const void* extrafield_local, uInt size_extrafield_local,\n                                         const void* extrafield_global, uInt size_extrafield_global,\n                                         const char* comment, int method, int level, int raw,\n                                         int windowBits,int memLevel, int strategy,\n                                         const char* password, uLong crcForCrypting,\n                                         uLong versionMadeBy, uLong flagBase)\n{\n    return zipOpenNewFileInZip4_64 (file, filename, zipfi,\n                                 extrafield_local, size_extrafield_local,\n                                 extrafield_global, size_extrafield_global,\n                                 comment, method, level, raw,\n                                 windowBits, memLevel, strategy,\n                                 password, crcForCrypting, versionMadeBy, flagBase, 0);\n}\n\nextern int ZEXPORT zipOpenNewFileInZip3 (zipFile file, const char* filename, const zip_fileinfo* zipfi,\n                                         const void* extrafield_local, uInt size_extrafield_local,\n                                         const void* extrafield_global, uInt size_extrafield_global,\n                                         const char* comment, int method, int level, int raw,\n                                         int windowBits,int memLevel, int strategy,\n                                         const char* password, uLong crcForCrypting)\n{\n    return zipOpenNewFileInZip4_64 (file, filename, zipfi,\n                                 extrafield_local, size_extrafield_local,\n                                 extrafield_global, size_extrafield_global,\n                                 comment, method, level, raw,\n                                 windowBits, memLevel, strategy,\n                                 password, crcForCrypting, VERSIONMADEBY, 0, 0);\n}\n\nextern int ZEXPORT zipOpenNewFileInZip3_64(zipFile file, const char* filename, const zip_fileinfo* zipfi,\n                                         const void* extrafield_local, uInt size_extrafield_local,\n                                         const void* extrafield_global, uInt size_extrafield_global,\n                                         const char* comment, int method, int level, int raw,\n                                         int windowBits,int memLevel, int strategy,\n                                         const char* password, uLong crcForCrypting, int zip64)\n{\n    return zipOpenNewFileInZip4_64 (file, filename, zipfi,\n                                 extrafield_local, size_extrafield_local,\n                                 extrafield_global, size_extrafield_global,\n                                 comment, method, level, raw,\n                                 windowBits, memLevel, strategy,\n                                 password, crcForCrypting, VERSIONMADEBY, 0, zip64);\n}\n\nextern int ZEXPORT zipOpenNewFileInZip2(zipFile file, const char* filename, const zip_fileinfo* zipfi,\n                                        const void* extrafield_local, uInt size_extrafield_local,\n                                        const void* extrafield_global, uInt size_extrafield_global,\n                                        const char* comment, int method, int level, int raw)\n{\n    return zipOpenNewFileInZip4_64 (file, filename, zipfi,\n                                 extrafield_local, size_extrafield_local,\n                                 extrafield_global, size_extrafield_global,\n                                 comment, method, level, raw,\n                                 -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,\n                                 NULL, 0, VERSIONMADEBY, 0, 0);\n}\n\nextern int ZEXPORT zipOpenNewFileInZip2_64(zipFile file, const char* filename, const zip_fileinfo* zipfi,\n                                        const void* extrafield_local, uInt size_extrafield_local,\n                                        const void* extrafield_global, uInt size_extrafield_global,\n                                        const char* comment, int method, int level, int raw, int zip64)\n{\n    return zipOpenNewFileInZip4_64 (file, filename, zipfi,\n                                 extrafield_local, size_extrafield_local,\n                                 extrafield_global, size_extrafield_global,\n                                 comment, method, level, raw,\n                                 -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,\n                                 NULL, 0, VERSIONMADEBY, 0, zip64);\n}\n\nextern int ZEXPORT zipOpenNewFileInZip64 (zipFile file, const char* filename, const zip_fileinfo* zipfi,\n                                        const void* extrafield_local, uInt size_extrafield_local,\n                                        const void*extrafield_global, uInt size_extrafield_global,\n                                        const char* comment, int method, int level, int zip64)\n{\n    return zipOpenNewFileInZip4_64 (file, filename, zipfi,\n                                 extrafield_local, size_extrafield_local,\n                                 extrafield_global, size_extrafield_global,\n                                 comment, method, level, 0,\n                                 -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,\n                                 NULL, 0, VERSIONMADEBY, 0, zip64);\n}\n\nextern int ZEXPORT zipOpenNewFileInZip (zipFile file, const char* filename, const zip_fileinfo* zipfi,\n                                        const void* extrafield_local, uInt size_extrafield_local,\n                                        const void*extrafield_global, uInt size_extrafield_global,\n                                        const char* comment, int method, int level)\n{\n    return zipOpenNewFileInZip4_64 (file, filename, zipfi,\n                                 extrafield_local, size_extrafield_local,\n                                 extrafield_global, size_extrafield_global,\n                                 comment, method, level, 0,\n                                 -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,\n                                 NULL, 0, VERSIONMADEBY, 0, 0);\n}\n\nlocal int zip64FlushWriteBuffer(zip64_internal* zi)\n{\n    int err=ZIP_OK;\n\n    if (zi->ci.encrypt != 0)\n    {\n#ifndef NOCRYPT\n        uInt i;\n        int t;\n        for (i=0;i<zi->ci.pos_in_buffered_data;i++)\n            zi->ci.buffered_data[i] = zencode(zi->ci.keys, zi->ci.pcrc_32_tab, zi->ci.buffered_data[i],t);\n#endif\n    }\n\n    if (ZWRITE64(zi->z_filefunc,zi->filestream,zi->ci.buffered_data,zi->ci.pos_in_buffered_data) != zi->ci.pos_in_buffered_data)\n      err = ZIP_ERRNO;\n\n    zi->ci.totalCompressedData += zi->ci.pos_in_buffered_data;\n\n#ifdef HAVE_BZIP2\n    if(zi->ci.method == Z_BZIP2ED)\n    {\n      zi->ci.totalUncompressedData += zi->ci.bstream.total_in_lo32;\n      zi->ci.bstream.total_in_lo32 = 0;\n      zi->ci.bstream.total_in_hi32 = 0;\n    }\n    else\n#endif\n    {\n      zi->ci.totalUncompressedData += zi->ci.stream.total_in;\n      zi->ci.stream.total_in = 0;\n    }\n\n\n    zi->ci.pos_in_buffered_data = 0;\n\n    return err;\n}\n\nextern int ZEXPORT zipWriteInFileInZip (zipFile file,const void* buf,unsigned int len)\n{\n    zip64_internal* zi;\n    int err=ZIP_OK;\n\n    if (file == NULL)\n        return ZIP_PARAMERROR;\n    zi = (zip64_internal*)file;\n\n    if (zi->in_opened_file_inzip == 0)\n        return ZIP_PARAMERROR;\n\n    zi->ci.crc32 = crc32(zi->ci.crc32,buf,(uInt)len);\n\n#ifdef HAVE_BZIP2\n    if(zi->ci.method == Z_BZIP2ED && (!zi->ci.raw))\n    {\n      zi->ci.bstream.next_in = (void*)buf;\n      zi->ci.bstream.avail_in = len;\n      err = BZ_RUN_OK;\n\n      while ((err==BZ_RUN_OK) && (zi->ci.bstream.avail_in>0))\n      {\n        if (zi->ci.bstream.avail_out == 0)\n        {\n          if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)\n            err = ZIP_ERRNO;\n          zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;\n          zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;\n        }\n\n\n        if(err != BZ_RUN_OK)\n          break;\n\n        if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))\n        {\n          uLong uTotalOutBefore_lo = zi->ci.bstream.total_out_lo32;\n//          uLong uTotalOutBefore_hi = zi->ci.bstream.total_out_hi32;\n          err=BZ2_bzCompress(&zi->ci.bstream,  BZ_RUN);\n\n          zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore_lo) ;\n        }\n      }\n\n      if(err == BZ_RUN_OK)\n        err = ZIP_OK;\n    }\n    else\n#endif\n    {\n      zi->ci.stream.next_in = (Bytef*)buf;\n      zi->ci.stream.avail_in = len;\n\n      while ((err==ZIP_OK) && (zi->ci.stream.avail_in>0))\n      {\n          if (zi->ci.stream.avail_out == 0)\n          {\n              if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)\n                  err = ZIP_ERRNO;\n              zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;\n              zi->ci.stream.next_out = zi->ci.buffered_data;\n          }\n\n\n          if(err != ZIP_OK)\n              break;\n\n          if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))\n          {\n              uLong uTotalOutBefore = zi->ci.stream.total_out;\n              err=deflate(&zi->ci.stream,  Z_NO_FLUSH);\n              if(uTotalOutBefore > zi->ci.stream.total_out)\n              {\n                int bBreak = 0;\n                bBreak++;\n              }\n\n              zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ;\n          }\n          else\n          {\n              uInt copy_this,i;\n              if (zi->ci.stream.avail_in < zi->ci.stream.avail_out)\n                  copy_this = zi->ci.stream.avail_in;\n              else\n                  copy_this = zi->ci.stream.avail_out;\n\n              for (i = 0; i < copy_this; i++)\n                  *(((char*)zi->ci.stream.next_out)+i) =\n                      *(((const char*)zi->ci.stream.next_in)+i);\n              {\n                  zi->ci.stream.avail_in -= copy_this;\n                  zi->ci.stream.avail_out-= copy_this;\n                  zi->ci.stream.next_in+= copy_this;\n                  zi->ci.stream.next_out+= copy_this;\n                  zi->ci.stream.total_in+= copy_this;\n                  zi->ci.stream.total_out+= copy_this;\n                  zi->ci.pos_in_buffered_data += copy_this;\n              }\n          }\n      }// while(...)\n    }\n\n    return err;\n}\n\nextern int ZEXPORT zipCloseFileInZipRaw (zipFile file, uLong uncompressed_size, uLong crc32)\n{\n    return zipCloseFileInZipRaw64 (file, uncompressed_size, crc32);\n}\n\nextern int ZEXPORT zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompressed_size, uLong crc32)\n{\n    zip64_internal* zi;\n    ZPOS64_T compressed_size;\n    uLong invalidValue = 0xffffffff;\n    short datasize = 0;\n    int err=ZIP_OK;\n\n    if (file == NULL)\n        return ZIP_PARAMERROR;\n    zi = (zip64_internal*)file;\n\n    if (zi->in_opened_file_inzip == 0)\n        return ZIP_PARAMERROR;\n    zi->ci.stream.avail_in = 0;\n\n    if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))\n                {\n                        while (err==ZIP_OK)\n                        {\n                                uLong uTotalOutBefore;\n                                if (zi->ci.stream.avail_out == 0)\n                                {\n                                        if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)\n                                                err = ZIP_ERRNO;\n                                        zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;\n                                        zi->ci.stream.next_out = zi->ci.buffered_data;\n                                }\n                                uTotalOutBefore = zi->ci.stream.total_out;\n                                err=deflate(&zi->ci.stream,  Z_FINISH);\n                                zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ;\n                        }\n                }\n    else if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))\n    {\n#ifdef HAVE_BZIP2\n      err = BZ_FINISH_OK;\n      while (err==BZ_FINISH_OK)\n      {\n        uLong uTotalOutBefore;\n        if (zi->ci.bstream.avail_out == 0)\n        {\n          if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)\n            err = ZIP_ERRNO;\n          zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;\n          zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;\n        }\n        uTotalOutBefore = zi->ci.bstream.total_out_lo32;\n        err=BZ2_bzCompress(&zi->ci.bstream,  BZ_FINISH);\n        if(err == BZ_STREAM_END)\n          err = Z_STREAM_END;\n\n        zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore);\n      }\n\n      if(err == BZ_FINISH_OK)\n        err = ZIP_OK;\n#endif\n    }\n\n    if (err==Z_STREAM_END)\n        err=ZIP_OK; /* this is normal */\n\n    if ((zi->ci.pos_in_buffered_data>0) && (err==ZIP_OK))\n                {\n        if (zip64FlushWriteBuffer(zi)==ZIP_ERRNO)\n            err = ZIP_ERRNO;\n                }\n\n    if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))\n    {\n        int tmp_err = deflateEnd(&zi->ci.stream);\n        if (err == ZIP_OK)\n            err = tmp_err;\n        zi->ci.stream_initialised = 0;\n    }\n#ifdef HAVE_BZIP2\n    else if((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))\n    {\n      int tmperr = BZ2_bzCompressEnd(&zi->ci.bstream);\n                        if (err==ZIP_OK)\n                                err = tmperr;\n                        zi->ci.stream_initialised = 0;\n    }\n#endif\n\n    if (!zi->ci.raw)\n    {\n        crc32 = (uLong)zi->ci.crc32;\n        uncompressed_size = zi->ci.totalUncompressedData;\n    }\n    compressed_size = zi->ci.totalCompressedData;\n\n#    ifndef NOCRYPT\n    compressed_size += zi->ci.crypt_header_size;\n#    endif\n\n    // update Current Item crc and sizes,\n    if(compressed_size >= 0xffffffff || uncompressed_size >= 0xffffffff || zi->ci.pos_local_header >= 0xffffffff)\n    {\n      /*version Made by*/\n      zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)45,2);\n      /*version needed*/\n      zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)45,2);\n\n    }\n\n    zip64local_putValue_inmemory(zi->ci.central_header+16,crc32,4); /*crc*/\n\n\n    if(compressed_size >= 0xffffffff)\n      zip64local_putValue_inmemory(zi->ci.central_header+20, invalidValue,4); /*compr size*/\n    else\n      zip64local_putValue_inmemory(zi->ci.central_header+20, compressed_size,4); /*compr size*/\n\n    /// set internal file attributes field\n    if (zi->ci.stream.data_type == Z_ASCII)\n        zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)Z_ASCII,2);\n\n    if(uncompressed_size >= 0xffffffff)\n      zip64local_putValue_inmemory(zi->ci.central_header+24, invalidValue,4); /*uncompr size*/\n    else\n      zip64local_putValue_inmemory(zi->ci.central_header+24, uncompressed_size,4); /*uncompr size*/\n\n    // Add ZIP64 extra info field for uncompressed size\n    if(uncompressed_size >= 0xffffffff)\n      datasize += 8;\n\n    // Add ZIP64 extra info field for compressed size\n    if(compressed_size >= 0xffffffff)\n      datasize += 8;\n\n    // Add ZIP64 extra info field for relative offset to local file header of current file\n    if(zi->ci.pos_local_header >= 0xffffffff)\n      datasize += 8;\n\n    if(datasize > 0)\n    {\n      char* p = NULL;\n\n      if((uLong)(datasize + 4) > zi->ci.size_centralExtraFree)\n      {\n        // we can not write more data to the buffer that we have room for.\n        return ZIP_BADZIPFILE;\n      }\n\n      p = zi->ci.central_header + zi->ci.size_centralheader;\n\n      // Add Extra Information Header for 'ZIP64 information'\n      zip64local_putValue_inmemory(p, 0x0001, 2); // HeaderID\n      p += 2;\n      zip64local_putValue_inmemory(p, datasize, 2); // DataSize\n      p += 2;\n\n      if(uncompressed_size >= 0xffffffff)\n      {\n        zip64local_putValue_inmemory(p, uncompressed_size, 8);\n        p += 8;\n      }\n\n      if(compressed_size >= 0xffffffff)\n      {\n        zip64local_putValue_inmemory(p, compressed_size, 8);\n        p += 8;\n      }\n\n      if(zi->ci.pos_local_header >= 0xffffffff)\n      {\n        zip64local_putValue_inmemory(p, zi->ci.pos_local_header, 8);\n        p += 8;\n      }\n\n      // Update how much extra free space we got in the memory buffer\n      // and increase the centralheader size so the new ZIP64 fields are included\n      // ( 4 below is the size of HeaderID and DataSize field )\n      zi->ci.size_centralExtraFree -= datasize + 4;\n      zi->ci.size_centralheader += datasize + 4;\n\n      // Update the extra info size field\n      zi->ci.size_centralExtra += datasize + 4;\n      zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)zi->ci.size_centralExtra,2);\n    }\n\n    if (err==ZIP_OK)\n        err = add_data_in_datablock(&zi->central_dir, zi->ci.central_header, (uLong)zi->ci.size_centralheader);\n\n    free(zi->ci.central_header);\n\n    if (err==ZIP_OK)\n    {\n        // Update the LocalFileHeader with the new values.\n\n        ZPOS64_T cur_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream);\n\n        if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_local_header + 14,ZLIB_FILEFUNC_SEEK_SET)!=0)\n            err = ZIP_ERRNO;\n\n        if (err==ZIP_OK)\n            err = zip64local_putValue(&zi->z_filefunc,zi->filestream,crc32,4); /* crc 32, unknown */\n\n        if(uncompressed_size >= 0xffffffff)\n        {\n          if(zi->ci.pos_zip64extrainfo > 0)\n          {\n            // Update the size in the ZIP64 extended field.\n            if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_zip64extrainfo + 4,ZLIB_FILEFUNC_SEEK_SET)!=0)\n              err = ZIP_ERRNO;\n\n            if (err==ZIP_OK) /* compressed size, unknown */\n              err = zip64local_putValue(&zi->z_filefunc, zi->filestream, uncompressed_size, 8);\n\n            if (err==ZIP_OK) /* uncompressed size, unknown */\n              err = zip64local_putValue(&zi->z_filefunc, zi->filestream, compressed_size, 8);\n          }\n        }\n        else\n        {\n          if (err==ZIP_OK) /* compressed size, unknown */\n              err = zip64local_putValue(&zi->z_filefunc,zi->filestream,compressed_size,4);\n\n          if (err==ZIP_OK) /* uncompressed size, unknown */\n              err = zip64local_putValue(&zi->z_filefunc,zi->filestream,uncompressed_size,4);\n        }\n\n        if (ZSEEK64(zi->z_filefunc,zi->filestream, cur_pos_inzip,ZLIB_FILEFUNC_SEEK_SET)!=0)\n            err = ZIP_ERRNO;\n    }\n\n    zi->number_entry ++;\n    zi->in_opened_file_inzip = 0;\n\n    return err;\n}\n\nextern int ZEXPORT zipCloseFileInZip (zipFile file)\n{\n    return zipCloseFileInZipRaw (file,0,0);\n}\n\nint Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip)\n{\n  int err = ZIP_OK;\n  ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writting_offset;\n\n  err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDLOCHEADERMAGIC,4);\n\n  /*num disks*/\n    if (err==ZIP_OK) /* number of the disk with the start of the central directory */\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);\n\n  /*relative offset*/\n    if (err==ZIP_OK) /* Relative offset to the Zip64EndOfCentralDirectory */\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream, pos,8);\n\n  /*total disks*/ /* Do not support spawning of disk so always say 1 here*/\n    if (err==ZIP_OK) /* number of the disk with the start of the central directory */\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)1,4);\n\n    return err;\n}\n\nint Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)\n{\n  int err = ZIP_OK;\n\n  uLong Zip64DataSize = 44;\n\n  err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDHEADERMAGIC,4);\n\n  if (err==ZIP_OK) /* size of this 'zip64 end of central directory' */\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)Zip64DataSize,8); // why ZPOS64_T of this ?\n\n  if (err==ZIP_OK) /* version made by */\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);\n\n  if (err==ZIP_OK) /* version needed */\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);\n\n  if (err==ZIP_OK) /* number of this disk */\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);\n\n  if (err==ZIP_OK) /* number of the disk with the start of the central directory */\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);\n\n  if (err==ZIP_OK) /* total number of entries in the central dir on this disk */\n    err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8);\n\n  if (err==ZIP_OK) /* total number of entries in the central dir */\n    err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8);\n\n  if (err==ZIP_OK) /* size of the central directory */\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)size_centraldir,8);\n\n  if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */\n  {\n    ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (ZPOS64_T)pos,8);\n  }\n  return err;\n}\nint Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)\n{\n  int err = ZIP_OK;\n\n  /*signature*/\n  err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4);\n\n  if (err==ZIP_OK) /* number of this disk */\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2);\n\n  if (err==ZIP_OK) /* number of the disk with the start of the central directory */\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2);\n\n  if (err==ZIP_OK) /* total number of entries in the central dir on this disk */\n  {\n    {\n      if(zi->number_entry >= 0xFFFF)\n        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record\n      else\n        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2);\n    }\n  }\n\n  if (err==ZIP_OK) /* total number of entries in the central dir */\n  {\n    if(zi->number_entry >= 0xFFFF)\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record\n    else\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2);\n  }\n\n  if (err==ZIP_OK) /* size of the central directory */\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_centraldir,4);\n\n  if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */\n  {\n    ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;\n    if(pos >= 0xffffffff)\n    {\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)0xffffffff,4);\n    }\n    else\n                  err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)(centraldir_pos_inzip - zi->add_position_when_writting_offset),4);\n  }\n\n   return err;\n}\n\nint Write_GlobalComment(zip64_internal* zi, const char* global_comment)\n{\n  int err = ZIP_OK;\n  uInt size_global_comment = 0;\n\n  if(global_comment != NULL)\n    size_global_comment = (uInt)strlen(global_comment);\n\n  err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_global_comment,2);\n\n  if (err == ZIP_OK && size_global_comment > 0)\n  {\n    if (ZWRITE64(zi->z_filefunc,zi->filestream, global_comment, size_global_comment) != size_global_comment)\n      err = ZIP_ERRNO;\n  }\n  return err;\n}\n\nextern int ZEXPORT zipClose (zipFile file, const char* global_comment)\n{\n    zip64_internal* zi;\n    int err = 0;\n    uLong size_centraldir = 0;\n    ZPOS64_T centraldir_pos_inzip;\n    ZPOS64_T pos;\n\n    if (file == NULL)\n        return ZIP_PARAMERROR;\n\n    zi = (zip64_internal*)file;\n\n    if (zi->in_opened_file_inzip == 1)\n    {\n        err = zipCloseFileInZip (file);\n    }\n\n#ifndef NO_ADDFILEINEXISTINGZIP\n    if (global_comment==NULL)\n        global_comment = zi->globalcomment;\n#endif\n\n    centraldir_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream);\n\n    if (err==ZIP_OK)\n    {\n        linkedlist_datablock_internal* ldi = zi->central_dir.first_block;\n        while (ldi!=NULL)\n        {\n            if ((err==ZIP_OK) && (ldi->filled_in_this_block>0))\n            {\n                if (ZWRITE64(zi->z_filefunc,zi->filestream, ldi->data, ldi->filled_in_this_block) != ldi->filled_in_this_block)\n                    err = ZIP_ERRNO;\n            }\n\n            size_centraldir += ldi->filled_in_this_block;\n            ldi = ldi->next_datablock;\n        }\n    }\n    free_linkedlist(&(zi->central_dir));\n\n    pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;\n    if(pos >= 0xffffffff)\n    {\n      ZPOS64_T Zip64EOCDpos = ZTELL64(zi->z_filefunc,zi->filestream);\n      Write_Zip64EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip);\n\n      Write_Zip64EndOfCentralDirectoryLocator(zi, Zip64EOCDpos);\n    }\n\n    if (err==ZIP_OK)\n      err = Write_EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip);\n\n    if(err == ZIP_OK)\n      err = Write_GlobalComment(zi, global_comment);\n\n    if (ZCLOSE64(zi->z_filefunc,zi->filestream) != 0)\n        if (err == ZIP_OK)\n            err = ZIP_ERRNO;\n\n#ifndef NO_ADDFILEINEXISTINGZIP\n    TRYFREE(zi->globalcomment);\n#endif\n    TRYFREE(zi);\n\n    return err;\n}\n\nextern int ZEXPORT zipRemoveExtraInfoBlock (char* pData, int* dataLen, short sHeader)\n{\n  char* p = pData;\n  int size = 0;\n  char* pNewHeader;\n  char* pTmp;\n  short header;\n  short dataSize;\n\n  int retVal = ZIP_OK;\n\n  if(pData == NULL || *dataLen < 4)\n    return ZIP_PARAMERROR;\n\n  pNewHeader = (char*)ALLOC(*dataLen);\n  pTmp = pNewHeader;\n\n  while(p < (pData + *dataLen))\n  {\n    header = *(short*)p;\n    dataSize = *(((short*)p)+1);\n\n    if( header == sHeader ) // Header found.\n    {\n      p += dataSize + 4; // skip it. do not copy to temp buffer\n    }\n    else\n    {\n      // Extra Info block should not be removed, So copy it to the temp buffer.\n      memcpy(pTmp, p, dataSize + 4);\n      p += dataSize + 4;\n      size += dataSize + 4;\n    }\n\n  }\n\n  if(size < *dataLen)\n  {\n    // clean old extra info block.\n    memset(pData,0, *dataLen);\n\n    // copy the new extra info block over the old\n    if(size > 0)\n      memcpy(pData, pNewHeader, size);\n\n    // set the new extra info size\n    *dataLen = size;\n\n    retVal = ZIP_OK;\n  }\n  else\n    retVal = ZIP_ERRNO;\n\n  TRYFREE(pNewHeader);\n\n  return retVal;\n}\n"
  },
  {
    "path": "external/minizip/zip.h",
    "content": "/* zip.h -- IO on .zip files using zlib\n   Version 1.1, February 14h, 2010\n   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Modifications for Zip64 support\n         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )\n\n         For more info read MiniZip_info.txt\n\n         ---------------------------------------------------------------------------\n\n   Condition of use and distribution are the same than zlib :\n\n  This software is provided 'as-is', without any express or implied\n  warranty.  In no event will the authors be held liable for any damages\n  arising from the use of this software.\n\n  Permission is granted to anyone to use this software for any purpose,\n  including commercial applications, and to alter it and redistribute it\n  freely, subject to the following restrictions:\n\n  1. The origin of this software must not be misrepresented; you must not\n     claim that you wrote the original software. If you use this software\n     in a product, an acknowledgment in the product documentation would be\n     appreciated but is not required.\n  2. Altered source versions must be plainly marked as such, and must not be\n     misrepresented as being the original software.\n  3. This notice may not be removed or altered from any source distribution.\n\n        ---------------------------------------------------------------------------\n\n        Changes\n\n        See header of zip.h\n\n*/\n\n#ifndef _zip12_H\n#define _zip12_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n//#define HAVE_BZIP2\n\n#ifndef _ZLIB_H\n#include \"zlib.h\"\n#endif\n\n#ifndef _ZLIBIOAPI_H\n#include \"ioapi.h\"\n#endif\n\n#ifdef HAVE_BZIP2\n#include \"bzlib.h\"\n#endif\n\n#define Z_BZIP2ED 12\n\n#if defined(STRICTZIP) || defined(STRICTZIPUNZIP)\n/* like the STRICT of WIN32, we define a pointer that cannot be converted\n    from (void*) without cast */\ntypedef struct TagzipFile__ { int unused; } zipFile__;\ntypedef zipFile__ *zipFile;\n#else\ntypedef voidp zipFile;\n#endif\n\n#define ZIP_OK                          (0)\n#define ZIP_EOF                         (0)\n#define ZIP_ERRNO                       (Z_ERRNO)\n#define ZIP_PARAMERROR                  (-102)\n#define ZIP_BADZIPFILE                  (-103)\n#define ZIP_INTERNALERROR               (-104)\n\n#ifndef DEF_MEM_LEVEL\n#  if MAX_MEM_LEVEL >= 8\n#    define DEF_MEM_LEVEL 8\n#  else\n#    define DEF_MEM_LEVEL  MAX_MEM_LEVEL\n#  endif\n#endif\n/* default memLevel */\n\n/* tm_zip contain date/time info */\ntypedef struct tm_zip_s\n{\n    uInt tm_sec;            /* seconds after the minute - [0,59] */\n    uInt tm_min;            /* minutes after the hour - [0,59] */\n    uInt tm_hour;           /* hours since midnight - [0,23] */\n    uInt tm_mday;           /* day of the month - [1,31] */\n    uInt tm_mon;            /* months since January - [0,11] */\n    uInt tm_year;           /* years - [1980..2044] */\n} tm_zip;\n\ntypedef struct\n{\n    tm_zip      tmz_date;       /* date in understandable format           */\n    uLong       dosDate;       /* if dos_date == 0, tmu_date is used      */\n/*    uLong       flag;        */   /* general purpose bit flag        2 bytes */\n\n    uLong       internal_fa;    /* internal file attributes        2 bytes */\n    uLong       external_fa;    /* external file attributes        4 bytes */\n} zip_fileinfo;\n\ntypedef const char* zipcharpc;\n\n\n#define APPEND_STATUS_CREATE        (0)\n#define APPEND_STATUS_CREATEAFTER   (1)\n#define APPEND_STATUS_ADDINZIP      (2)\n\nextern zipFile ZEXPORT zipOpen OF((const char *pathname, int append));\nextern zipFile ZEXPORT zipOpen64 OF((const void *pathname, int append));\n/*\n  Create a zipfile.\n     pathname contain on Windows XP a filename like \"c:\\\\zlib\\\\zlib113.zip\" or on\n       an Unix computer \"zlib/zlib113.zip\".\n     if the file pathname exist and append==APPEND_STATUS_CREATEAFTER, the zip\n       will be created at the end of the file.\n         (useful if the file contain a self extractor code)\n     if the file pathname exist and append==APPEND_STATUS_ADDINZIP, we will\n       add files in existing zip (be sure you don't add file that doesn't exist)\n     If the zipfile cannot be opened, the return value is NULL.\n     Else, the return value is a zipFile Handle, usable with other function\n       of this zip package.\n*/\n\n/* Note : there is no delete function into a zipfile.\n   If you want delete file into a zipfile, you must open a zipfile, and create another\n   Of couse, you can use RAW reading and writing to copy the file you did not want delte\n*/\n\nextern zipFile ZEXPORT zipOpen2 OF((const char *pathname,\n                                   int append,\n                                   zipcharpc* globalcomment,\n                                   zlib_filefunc_def* pzlib_filefunc_def));\n\nextern zipFile ZEXPORT zipOpen2_64 OF((const void *pathname,\n                                   int append,\n                                   zipcharpc* globalcomment,\n                                   zlib_filefunc64_def* pzlib_filefunc_def));\n\nextern int ZEXPORT zipOpenNewFileInZip OF((zipFile file,\n                       const char* filename,\n                       const zip_fileinfo* zipfi,\n                       const void* extrafield_local,\n                       uInt size_extrafield_local,\n                       const void* extrafield_global,\n                       uInt size_extrafield_global,\n                       const char* comment,\n                       int method,\n                       int level));\n\nextern int ZEXPORT zipOpenNewFileInZip64 OF((zipFile file,\n                       const char* filename,\n                       const zip_fileinfo* zipfi,\n                       const void* extrafield_local,\n                       uInt size_extrafield_local,\n                       const void* extrafield_global,\n                       uInt size_extrafield_global,\n                       const char* comment,\n                       int method,\n                       int level,\n                       int zip64));\n\n/*\n  Open a file in the ZIP for writing.\n  filename : the filename in zip (if NULL, '-' without quote will be used\n  *zipfi contain supplemental information\n  if extrafield_local!=NULL and size_extrafield_local>0, extrafield_local\n    contains the extrafield data the the local header\n  if extrafield_global!=NULL and size_extrafield_global>0, extrafield_global\n    contains the extrafield data the the local header\n  if comment != NULL, comment contain the comment string\n  method contain the compression method (0 for store, Z_DEFLATED for deflate)\n  level contain the level of compression (can be Z_DEFAULT_COMPRESSION)\n  zip64 is set to 1 if a zip64 extended information block should be added to the local file header.\n                    this MUST be '1' if the uncompressed size is >= 0xffffffff.\n\n*/\n\n\nextern int ZEXPORT zipOpenNewFileInZip2 OF((zipFile file,\n                                            const char* filename,\n                                            const zip_fileinfo* zipfi,\n                                            const void* extrafield_local,\n                                            uInt size_extrafield_local,\n                                            const void* extrafield_global,\n                                            uInt size_extrafield_global,\n                                            const char* comment,\n                                            int method,\n                                            int level,\n                                            int raw));\n\n\nextern int ZEXPORT zipOpenNewFileInZip2_64 OF((zipFile file,\n                                            const char* filename,\n                                            const zip_fileinfo* zipfi,\n                                            const void* extrafield_local,\n                                            uInt size_extrafield_local,\n                                            const void* extrafield_global,\n                                            uInt size_extrafield_global,\n                                            const char* comment,\n                                            int method,\n                                            int level,\n                                            int raw,\n                                            int zip64));\n/*\n  Same than zipOpenNewFileInZip, except if raw=1, we write raw file\n */\n\nextern int ZEXPORT zipOpenNewFileInZip3 OF((zipFile file,\n                                            const char* filename,\n                                            const zip_fileinfo* zipfi,\n                                            const void* extrafield_local,\n                                            uInt size_extrafield_local,\n                                            const void* extrafield_global,\n                                            uInt size_extrafield_global,\n                                            const char* comment,\n                                            int method,\n                                            int level,\n                                            int raw,\n                                            int windowBits,\n                                            int memLevel,\n                                            int strategy,\n                                            const char* password,\n                                            uLong crcForCrypting));\n\nextern int ZEXPORT zipOpenNewFileInZip3_64 OF((zipFile file,\n                                            const char* filename,\n                                            const zip_fileinfo* zipfi,\n                                            const void* extrafield_local,\n                                            uInt size_extrafield_local,\n                                            const void* extrafield_global,\n                                            uInt size_extrafield_global,\n                                            const char* comment,\n                                            int method,\n                                            int level,\n                                            int raw,\n                                            int windowBits,\n                                            int memLevel,\n                                            int strategy,\n                                            const char* password,\n                                            uLong crcForCrypting,\n                                            int zip64\n                                            ));\n\n/*\n  Same than zipOpenNewFileInZip2, except\n    windowBits,memLevel,,strategy : see parameter strategy in deflateInit2\n    password : crypting password (NULL for no crypting)\n    crcForCrypting : crc of file to compress (needed for crypting)\n */\n\nextern int ZEXPORT zipOpenNewFileInZip4 OF((zipFile file,\n                                            const char* filename,\n                                            const zip_fileinfo* zipfi,\n                                            const void* extrafield_local,\n                                            uInt size_extrafield_local,\n                                            const void* extrafield_global,\n                                            uInt size_extrafield_global,\n                                            const char* comment,\n                                            int method,\n                                            int level,\n                                            int raw,\n                                            int windowBits,\n                                            int memLevel,\n                                            int strategy,\n                                            const char* password,\n                                            uLong crcForCrypting,\n                                            uLong versionMadeBy,\n                                            uLong flagBase\n                                            ));\n\n\nextern int ZEXPORT zipOpenNewFileInZip4_64 OF((zipFile file,\n                                            const char* filename,\n                                            const zip_fileinfo* zipfi,\n                                            const void* extrafield_local,\n                                            uInt size_extrafield_local,\n                                            const void* extrafield_global,\n                                            uInt size_extrafield_global,\n                                            const char* comment,\n                                            int method,\n                                            int level,\n                                            int raw,\n                                            int windowBits,\n                                            int memLevel,\n                                            int strategy,\n                                            const char* password,\n                                            uLong crcForCrypting,\n                                            uLong versionMadeBy,\n                                            uLong flagBase,\n                                            int zip64\n                                            ));\n/*\n  Same than zipOpenNewFileInZip4, except\n    versionMadeBy : value for Version made by field\n    flag : value for flag field (compression level info will be added)\n */\n\n\nextern int ZEXPORT zipWriteInFileInZip OF((zipFile file,\n                       const void* buf,\n                       unsigned len));\n/*\n  Write data in the zipfile\n*/\n\nextern int ZEXPORT zipCloseFileInZip OF((zipFile file));\n/*\n  Close the current file in the zipfile\n*/\n\nextern int ZEXPORT zipCloseFileInZipRaw OF((zipFile file,\n                                            uLong uncompressed_size,\n                                            uLong crc32));\n\nextern int ZEXPORT zipCloseFileInZipRaw64 OF((zipFile file,\n                                            ZPOS64_T uncompressed_size,\n                                            uLong crc32));\n\n/*\n  Close the current file in the zipfile, for file opened with\n    parameter raw=1 in zipOpenNewFileInZip2\n  uncompressed_size and crc32 are value for the uncompressed size\n*/\n\nextern int ZEXPORT zipClose OF((zipFile file,\n                const char* global_comment));\n/*\n  Close the zipfile\n*/\n\n\nextern int ZEXPORT zipRemoveExtraInfoBlock OF((char* pData, int* dataLen, short sHeader));\n/*\n  zipRemoveExtraInfoBlock -  Added by Mathias Svensson\n\n  Remove extra information block from a extra information data for the local file header or central directory header\n\n  It is needed to remove ZIP64 extra information blocks when before data is written if using RAW mode.\n\n  0x0001 is the signature header for the ZIP64 extra information blocks\n\n  usage.\n                        Remove ZIP64 Extra information from a central director extra field data\n              zipRemoveExtraInfoBlock(pCenDirExtraFieldData, &nCenDirExtraFieldDataLen, 0x0001);\n\n                        Remove ZIP64 Extra information from a Local File Header extra field data\n        zipRemoveExtraInfoBlock(pLocalHeaderExtraFieldData, &nLocalHeaderExtraFieldDataLen, 0x0001);\n*/\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _zip64_H */\n"
  },
  {
    "path": "external/tinyxml/CMakeLists.txt",
    "content": "project(tinyxml)\n\ncmake_minimum_required(VERSION 2.6)\n\nAdd_definitions(-DTIXML_USE_STL)\n\nset(SOURCES\n  tinystr.cpp\n  tinyxml.cpp\n  tinyxmlerror.cpp\n  tinyxmlparser.cpp\n)\n\nset(HEADERS\n  tinystr.h\n  tinyxml.h\n)\n\nadd_library(tinyxml\n  ${SOURCES}\n  ${HEADERS}\n)\n\n"
  },
  {
    "path": "external/tinyxml/Makefile",
    "content": "#****************************************************************************\n#\n# Makefile for TinyXml test.\n# Lee Thomason\n# www.grinninglizard.com\n#\n# This is a GNU make (gmake) makefile\n#****************************************************************************\n\n# DEBUG can be set to YES to include debugging info, or NO otherwise\nDEBUG          := NO\n\n# PROFILE can be set to YES to include profiling info, or NO otherwise\nPROFILE        := NO\n\n# TINYXML_USE_STL can be used to turn on STL support. NO, then STL\n# will not be used. YES will include the STL files.\nTINYXML_USE_STL := NO\n\n#****************************************************************************\n\nCC     := gcc\nCXX    := g++\nLD     := g++\nAR     := ar rc\nRANLIB := ranlib\n\nDEBUG_CFLAGS     := -Wall -Wno-format -g -DDEBUG\nRELEASE_CFLAGS   := -Wall -Wno-unknown-pragmas -Wno-format -O3\n\nLIBS\t\t :=\n\nDEBUG_CXXFLAGS   := ${DEBUG_CFLAGS} \nRELEASE_CXXFLAGS := ${RELEASE_CFLAGS}\n\nDEBUG_LDFLAGS    := -g\nRELEASE_LDFLAGS  :=\n\nifeq (YES, ${DEBUG})\n   CFLAGS       := ${DEBUG_CFLAGS}\n   CXXFLAGS     := ${DEBUG_CXXFLAGS}\n   LDFLAGS      := ${DEBUG_LDFLAGS}\nelse\n   CFLAGS       := ${RELEASE_CFLAGS}\n   CXXFLAGS     := ${RELEASE_CXXFLAGS}\n   LDFLAGS      := ${RELEASE_LDFLAGS}\nendif\n\nifeq (YES, ${PROFILE})\n   CFLAGS   := ${CFLAGS} -pg -O3\n   CXXFLAGS := ${CXXFLAGS} -pg -O3\n   LDFLAGS  := ${LDFLAGS} -pg\nendif\n\n#****************************************************************************\n# Preprocessor directives\n#****************************************************************************\n\nifeq (YES, ${TINYXML_USE_STL})\n  DEFS := -DTIXML_USE_STL\nelse\n  DEFS :=\nendif\n\n#****************************************************************************\n# Include paths\n#****************************************************************************\n\n#INCS := -I/usr/include/g++-2 -I/usr/local/include\nINCS :=\n\n\n#****************************************************************************\n# Makefile code common to all platforms\n#****************************************************************************\n\nCFLAGS   := ${CFLAGS}   ${DEFS}\nCXXFLAGS := ${CXXFLAGS} ${DEFS}\n\n#****************************************************************************\n# Targets of the build\n#****************************************************************************\n\nOUTPUT := xmltest\n\nall: ${OUTPUT}\n\n\n#****************************************************************************\n# Source files\n#****************************************************************************\n\nSRCS := tinyxml.cpp tinyxmlparser.cpp xmltest.cpp tinyxmlerror.cpp tinystr.cpp\n\n# Add on the sources for libraries\nSRCS := ${SRCS}\n\nOBJS := $(addsuffix .o,$(basename ${SRCS}))\n\n#****************************************************************************\n# Output\n#****************************************************************************\n\n${OUTPUT}: ${OBJS}\n\t${LD} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}\n\n#****************************************************************************\n# common rules\n#****************************************************************************\n\n# Rules for compiling source files to object files\n%.o : %.cpp\n\t${CXX} -c ${CXXFLAGS} ${INCS} $< -o $@\n\n%.o : %.c\n\t${CC} -c ${CFLAGS} ${INCS} $< -o $@\n\ndist:\n\tbash makedistlinux\n\nclean:\n\t-rm -f core ${OBJS} ${OUTPUT}\n\ndepend:\n\t#makedepend ${INCS} ${SRCS}\n\ntinyxml.o: tinyxml.h tinystr.h\ntinyxmlparser.o: tinyxml.h tinystr.h\nxmltest.o: tinyxml.h tinystr.h\ntinyxmlerror.o: tinyxml.h tinystr.h\n"
  },
  {
    "path": "external/tinyxml/changes.txt",
    "content": "Changes in version 1.0.1:\n- Fixed comment tags which were outputing as '<?--' instead of \n  the correct '<!--'.\n- Implemented the Next and Prev methods of the TiXmlAttribute class.\n- Renamed 'LastAttribtute' to 'LastAttribute'\n- Fixed bad pointer to 'isspace' that could occur while parsing text.\n- Errors finding beginning and end of tags no longer throw it into an\n  infinite loop. (Hopefully.)\n\nChanges in version 1.0.2\n- Minor documentation fixes.\n\nChanges in version 1.0.3\n- After nodes are added to a document, they return a pointer\n  to the new node instead of a bool for success.\n- Elements can be constructed with a value, which is the\n  element name. Every element must have a value or it will be\n  invalid, but the code changes to enforce this are not fully\n  in place.\n\nChanges in version 1.1.0\n- Added the\tTiXmlAttributeSet class to pull the attributes into\n  a seperate container.\n- Moved the doubly liked list out of XmlBase. Now XmlBase only\n  requires the Print() function and defines some utility functions.\n- Moved errors into a seperate file. (With the idea of internationalization\n  to the other latin-1 languages.)\n- Added the \"NodeType\"\n- Fixed white space parsing in text to conform with the standard. \n  Basically, all white space becomes just one space.\n- Added the TiXmlDeclaration class to read xml declarations.\n\nChanges in version 1.2.0\n- Removed the factory. The factory was not really in the spirit \n  of small and simple, confused the code, and was of limited value.\n- Added FirstChildElement and NextSiblingElement, because they\n  are such common functions.\n- Re-wrote the example to test and demonstrate more functionality.\n\nChanges in version 1.2.1\n- Fixed a bug where comments couldn't be inside elements.\n- Loading now clears out existing XML rather than appending.\n- Added the \"Clear\" method on a node to delete all its children.\n\nChanges in version 1.2.2\n- Fixed TiXmlAttribute::Previous actually returning \"next.\" Thanks\n  to Rickard Troedsson for the bug fix.\n\nChanges in version 1.2.3\n- Added the TIXML prefix to the error strings to resolve conflicts\n  with #defines in OS headers. Thanks to Steve Lhomme.\n- Fixed a delete buf that should be a delete [] buf. \n  Thanks to Ephi Sinowitz.\n\nChanges in version 1.2.4\n- ReplaceChild() was almost guarenteed to fail. Should be fixed,\n  thanks to Joe Smith. Joe also pointed out that the Print() functions\n  should take stream references: I agree, and would like to overload\n  the Print() method to take either format, but I don't want to do \n  this in a dot release.\n- Some compilers seem to need an extra <ctype.h> include. Thanks\n  to Steve Lhomme for that.\n\nChanges in version 2.0.0 BETA\n- Made the ToXXX() casts safe if 'this' is null. \n  When \"LoadFile\" is called with a filename, the value will correctly get set.\n  Thanks to Brian Yoder.\n- Fixed bug where isalpha() and isalnum() would get called with a negative value for \n  high ascii numbers. Thanks to Alesky Aksenov.\n- Fixed some errors codes that were not getting set.\n- Made methods \"const\" that were not.\n- Added a switch to enable or disable the ignoring of white space. ( TiXmlDocument::SetIgnoreWhiteSpace() )\n- Greater standardization and code re-use in the parser.\n- Added a stream out operator.\n- Added a stream in operator.\n- Entity support, of predefined entites. &#x entities are untouched by input or output.\n- Improved text out formatting.\n- Fixed ReplaceChild bug, thanks to Tao Chen.\n\nChanges in version 2.0.1\n- Fixed hanging on loading a 0 length file. Thanks to Jeff Scozzafava.\n- Fixed crashing on InsertBeforeChild and InsertAfterChild. Also possibility of bad links being\n  created by same function. Thanks to Frank De prins.\n- Added missing licence text. Thanks to Lars Willemsens.\n- Added <ctype.h> include, at the suggestion of Steve Walters.\n\nChanges in version 2.1.0\n- Yves Berquin brings us the STL switch. The forum on SourceForge, and various emails to\n  me, have long debated all out STL vs. no STL at all. And now you can have it both ways.\n  TinyXml will compile either way.\n\nChanges in version 2.1.1\n- Compilation warnings.\n\nChanges in version 2.1.2\n- Uneeded code is not compiled in the STL case.\n- Changed headers so that STL can be turned on or off in tinyxml.h\n\nChanges in version 2.1.3\n- Fixed non-const reference in API; now uses a pointer.\n- Copy constructor of TiXmlString not checking for assignment to self.\n- Nimrod Cohen found a truly evil bug in the STL implementation that occurs\n  when a string is converted to a c_str and then assigned to self. Search for\n  STL_STRING_BUG for a full description. I'm asserting this is a Microsoft STL\n  bug, since &string and string.c_str() should never be the same. Nevertheless,\n  the code works around it.\n- Urivan Saaib pointed out a compiler conflict, where the C headers define\n  the isblank macro, which was wiping out the TiXmlString::isblank() method.\n  The method was unused and has been removed.\n\nChanges in version 2.1.4\n- Reworked the entity code. Entities were not correctly surving round trip input and output.\n  Will now automatically create entities for high ascii in output.\n\nChanges in version 2.1.5\n- Bug fix by kylotan : infinite loop on some input (tinyxmlparser.cpp rev 1.27)\n- Contributed by Ivica Aracic (bytelord) : 1 new VC++ project to compile versions as static libraries (tinyxml_lib.dsp), \n  and an example usage in xmltest.dsp\n  (Patch request ID 678605)\n- A suggestion by Ronald Fenner Jr (dormlock) to add #include <istream> and <ostream> for Apple's Project Builder \n  (Patch request ID 697642)\n- A patch from ohommes that allows to parse correctly dots in element names and attribute names\n  (Patch request 602600 and kylotan 701728)\n- A patch from  hermitgeek ( James ) and wasteland for improper error reporting\n- Reviewed by Lee, with the following changes:\n\t- Got sick of fighting the STL/non-STL thing in the windows build. Broke\n\t  them out as seperate projects.\n\t- I have too long not included the dsw. Added.\n\t- TinyXmlText had a protected Print. Odd.\n\t- Made LinkEndChild public, with docs and appropriate warnings.\n\t- Updated the docs.\n\n2.2.0\n- Fixed an uninitialized pointer in the TiXmlAttributes\n- Fixed STL compilation problem in MinGW (and gcc 3?) - thanks Brian Yoder for finding this one\n- Fixed a syntax error in TiXmlDeclaration - thanks Brian Yoder\n- Fletcher Dunn proposed and submitted new error handling that tracked the row and column. Lee\n  modified it to not have performance impact.\n- General cleanup suggestions from Fletcher Dunn.\n- In error handling, general errors will no longer clear the error state of specific ones.\n- Fix error in documentation : comments starting with \"<?--\" instead of \"<!--\" (thanks ion_pulse)\n- Added the TiXmlHandle. An easy, safe way to browse XML DOMs with less code.\n- Added QueryAttribute calls which have better error messaging. (Proposed by Fletcher Dunn)\n- Nodes and attributes can now print themselves to strings. (Yves suggestion)\n- Fixed bug where entities with one character would confuse parser. (Thanks Roman)\n\n2.2.1\n- Additional testing (no more bugs found to be fixed in this release)\n- Significant performance improvement to the cursor code.\n\n2.3.0\n- User Data are now defined in TiXmlBase instead of TiXmlNode\n- Character Entities are now UCS-2\n- Character Entities can be decimal or hexadecimal\n- UTF-8 conversion.\n- Fixed many, many bugs.\n\n2.3.1\n- Fixed bug in handling nulls embedded in the input.\n- Make UTF-8 parser tolerant of bad text encoding.\n- Added encoding detection. \n- Many fixes and input from John-Philip Leonard Johansson (JP) and Ellers, \n  including UTF-8 feedback, bug reports, and patches. Thanks!\n- Added version # constants - a suggestion from JP and Ellers.\n- [ 979180 ] Missing ; in entity reference, fix from Rob Laveaux.\n- Copy constructors and assignment have been a long time coming. Thanks to\n  Fokke and JP.\n\n2.3.2\n- Made the IsAlpha and IsAlphaNum much more tolerant of non-UTF-8 encodings. Thanks\n  Volker Boerchers for finding the issue.\n- Ran the program though the magnificent Valgrind - http://valgrind.kde.org - to check\n  for memory errors. Fixed some minor issues.\n\n2.3.3\n- Fixed crash when test program was run from incorrect directory.\n- Fixed bug 1070717 - empty document not returned correctly - thanks Katsuhisa Yuasa.\n- Bug 1079301 resolved - deprecated stdlib calls. Thanks Adrian Boeing.\n- Bug 1035218 fixed - documentation errors. Xunji Luo\n- Other bug fixes have accumulated and been fixed on the way as well; my apologies to\n  authors not credited!\n- Big fix / addition is to correctly return const values. TinyXml could basically\n  remove const in a method like this: TiXmlElement* Foo() const, where the returned element\n  was a pointer to internal data. That is now: const TiXmlElement* Foo() const and\n  TiXmlElement* Foo().\n\n2.3.4\n- Fixed additional const errors, thanks Kent Gibson.\n- Correctly re-enable warnings after tinyxml header. Thanks Cory Nelson.\n- Variety of type cleanup and warning fixes. Thanks Warren Stevens.\n- Cleaned up unneeded constructor calls in TinyString - thanks to Geoff Carlton and\n  the discussion group on sourceforge.\n\n2.4.0\n- Improved string class, thanks Tyge Lovset (whose name gets mangled in English - sorry)\n- Type cast compiler warning, thanks Rob van den Bogaard\n- Added GetText() convenience function. Thanks Ilya Parniuk & Andrew Ellers for input.\n- Many thanks to marlonism for finding an infinite loop in bad xml.\n- A patch to cleanup warnings from Robert Gebis.\n- Added ValueStr() to get the value of a node as a string.\n- TiXmlText can now parse and output as CDATA\n- Additional string improvement from James (z2895)\n- Removed extraneous 'const', thanks David Aldrich\n- First pass at switching to the \"safe\" stdlib functions. Many people have suggested and\n  pushed on this, but Warren Stevens put together the first proposal.\n- TinyXml now will do EOL normalization before parsing, consistent with the W3C XML spec.\n- Documents loaded with the UTF-8 BOM will now save with the UTF-8 BOM. Good suggestion \n  from 'instructor_'\n- Ellers submitted his very popular tutorials, which have been added to the distribution.\n\n2.4.1\n- Fixed CDATA output formatting\n- Fixed memory allocators in TinyString to work with overloaded new/delete\n\n2.4.2\n- solosnake pointed out that TIXML_LOG causes problems on an XBOX. The definition in the header\n  was superflous and was moved inside of DEBUG_PARSING\n\n2.4.3\n- Fixed a test bug that caused a crash in 'xmltest'. TinyXML was fine, but it isn't good\n  to ship with a broken test suite.\n- Started converting some functions to not cast between std::string and const char* \n  quite as often.\n- Added FILE* versions of the document loads - good suggestion from Wade Brainerd\n- Empty documents might not always return the errors they should. [1398915] Thanks to igor v.\n- Added some asserts for multiply adding a node, regardng bug [1391937] suggested by Paco Arjonilla.\n\n2.4.4\n- Bug find thanks to andre-gross found a memory leak that occured when a document failed to load.\n- Bug find (and good analysis) by VirtualJim who found a case where attribute parsing \n  should be throwing an error and wasn't.\n- Steve Hyatt suggested the QueryValueAttribute method, which is now implemented.\n- DavidA identified a chunk of dead code.\n- Andrew Baxter sent in some compiler warnings that were good clean up points.\n\n2.5\n- Added the Visit() API. Many thanks to both Andrew Ellerton and John-Philip for all their\n  work, code, suggestion, and just general pushing that it should be done.\n- Removed existing streaming code and use TiXmlPrinter instead.\n- [ tinyxml-Bugs-1527079 ] Compile error in tinystr.cpp fixed, thanks to Paul Suggs\n- [ tinyxml-Bugs-1522890 ] SaveFile has no error checks fixed, thanks to Ivan Dobrokotov\n- Ivan Dobrokotov also reported redundant memory allocation in the Attribute() method, which\n  upon investigation was a mess. The attribute should now be fixed for both const char* and \n  std::string, and the return types match the input parameters.\n- Feature [ 1511105 ] Make TiXmlComment constructor accept a string / char*, implemented.\n  Thanks to Karl Itschen for the feedback.\n- [ 1480108 ] Stream parsing fails when CDATA contains tags was found by Tobias Grimm, who also\n  submitted a test case and patch. A significant bug in CDATA streaming (operator>>) has now\n  been fixed.\n\n2.5.2\n- Lieven, and others, pointed out a missing const-cast that upset the Open Watcom compiler.\n  Should now be fixed.\n- ErrorRow and ErrorCol should have been const, and weren't. Fixed thanks to Dmitry Polutov.\n\n2.5.3\n- zloe_zlo identified a missing string specialization for QueryValueAttribute() [ 1695429 ]. Worked\n  on this bug, but not sure how to fix it in a safe, cross-compiler way.\n- increased warning level to 4 and turned on detect 64 bit portability issues for VC2005.\n  May address [ 1677737 ] VS2005: /Wp64 warnings\n- grosheck identified several problems with the Document copy. Many thanks for [ 1660367 ]\n- Nice catch, and suggested fix, be Gilad Novik on the Printer dropping entities.\n  \"[ 1600650 ] Bug when printing xml text\" is now fixed.\n- A subtle fix from Nicos Gollan in the tinystring initializer: \n  [ 1581449 ] Fix initialiser of TiXmlString::nullrep_\n- Great catch, although there isn't a submitter for the bug. [ 1475201 ] TinyXML parses entities in comments. \n  Comments should not, in fact, parse entities. Fixed the code path and added tests.\n- We were not catching all the returns from ftell. Thanks to Bernard for catching that.\n  \n2.5.4\n- A TiXMLDocument can't be a sub-node. Block this from happening in the 'replace'. Thanks Noam.\n- [ 1714831 ] TiXmlBase::location is not copied by copy-ctors, fix reported and suggested by Nicola Civran.\n- Fixed possible memory overrun in the comment reading code - thanks gcarlton77\n\n2.5.5\n- Alex van der Wal spotted incorrect types (lf) being used in print and scan. robertnestor pointed out some problems with the simple solution. Types updated.\n- Johannes Hillert pointed out some bug typos.\n- Christian Mueller identified inconsistent error handling with Attributes.\n- olivier barthelemy also reported a problem with double truncation, also related to the %lf issue.\n- zaelsius came up with a great (and simple) suggestion to fix QueryValueAttribute truncating strings.\n- added some null pointer checks suggested by hansenk\n- Sami Visnen found a (rare) buffer overrun that could occur in parsing.\n- vi tri filed a bug that led to a refactoring of the attribute setting mess (as well as adding a missing SetDoubleAttribute() )\n- removed TIXML_ERROR_OUT_OF_MEMORY. TinyXML does not systematically address OOO, and the notion it does is misleading.\n- vanneto, keithmarshall, others all reported the warning from IsWhiteSpace() usage. Cleaned this up - many thanks to everyone who reported this one.\n- tibur found a bug in end tag parsing\n\n\n2.6.2\n- Switched over to VC 2010\n- Fixed up all the build issues arising from that. (Lots of latent build problems.)\n- Removed the old, now unmaintained and likely not working, build files.\n- Fixed some static analysis issues reported by orbitcowboy from cppcheck. \n- Bayard 95 sent in analysis from a different analyzer - fixes applied from that as well.\n- Tim Kosse sent a patch fixing an infinite loop.\n- Ma Anguo identified a doc issue.\n- Eddie Cohen identified a missing qualifier resulting in a compilation error on some systems.\n- Fixed a line ending bug. (What year is this? Can we all agree on a format for text files? Please? ...oh well.)\n\n"
  },
  {
    "path": "external/tinyxml/docs/annotated.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>Class List</h1>Here are the classes, structs, unions and interfaces with brief descriptions:<table>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a></td><td class=\"indexvalue\">An attribute is a name-value pair </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td class=\"indexvalue\"><a class=\"el\" href=\"classTiXmlBase.html\" title=\"TiXmlBase is a base class for every class in TinyXml.\">TiXmlBase</a> is a base class for every class in TinyXml </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"classTiXmlComment.html\">TiXmlComment</a></td><td class=\"indexvalue\">An XML comment </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"classTiXmlDeclaration.html\">TiXmlDeclaration</a></td><td class=\"indexvalue\">In correct XML the declaration is the first entry in the file </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td class=\"indexvalue\">Always the top level node </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td class=\"indexvalue\">The element is a container class </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a></td><td class=\"indexvalue\">A <a class=\"el\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a> is a class that wraps a node pointer with null checks; this is an incredibly useful thing </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td class=\"indexvalue\">The parent class for everything in the Document Object Model </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"classTiXmlPrinter.html\">TiXmlPrinter</a></td><td class=\"indexvalue\">Print to memory functionality </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"classTiXmlText.html\">TiXmlText</a></td><td class=\"indexvalue\">XML text </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"classTiXmlUnknown.html\">TiXmlUnknown</a></td><td class=\"indexvalue\">Any tag that tinyXml doesn't recognize is saved as an unknown </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"classTiXmlVisitor.html\">TiXmlVisitor</a></td><td class=\"indexvalue\">Implements the interface to the \"Visitor pattern\" (see the Accept() method </td></tr>\n</table>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlAttribute-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlAttribute Member List</h1>This is the complete list of members for <a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a>, including all inherited members.<table>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ab54bfb9b70fe6dd276e7b279cab7f003\">Column</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlAttribute.html#a2880ddef53fc7522c99535273954d230\">DoubleValue</a>() const </td><td><a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a6bd8c315c1acb09e34107b8736505948\">EncodeString</a>(const TIXML_STRING &amp;str, TIXML_STRING *out)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a6559a530ca6763fc301a14d77ed28c17\">GetUserData</a>()</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ad0120210e4680ef2088601753ce0ede4\">GetUserData</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlAttribute.html#aa1a20ad59dc7e89a0ab265396360d50f\">IntValue</a>() const </td><td><a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ad4b1472531c647a25b1840a87ae42438\">IsWhiteSpaceCondensed</a>()</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline, static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlAttribute.html#a298a57287d305904ba6bd96ae6f78d3d\">Name</a>() const </td><td><a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlAttribute.html#a1c78e92e223a40843f644ba48ef69f67\">Next</a>() const </td><td><a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlAttribute.html#a6ebbfe333fe76cd834bd6cbcca3130cf\">Previous</a>() const </td><td><a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlAttribute.html#acc04956c1d5c4c31fe74f7a7528d109a\">Print</a>(FILE *cfile, int depth) const </td><td><a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlAttribute.html#ac87b2a8489906a5d7aa2875f20be3513\">QueryDoubleValue</a>(double *_value) const </td><td><a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlAttribute.html#ad6c93088ee21af41a107931223339344\">QueryIntValue</a>(int *_value) const </td><td><a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a024bceb070188df92c2a8d8852dd0853\">Row</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a0f799ec645bfb8d8a969e83478f379c1\">SetCondenseWhiteSpace</a>(bool condense)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline, static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlAttribute.html#a0316da31373496c4368ad549bf711394\">SetDoubleValue</a>(double _value)</td><td><a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlAttribute.html#a7e065df640116a62ea4f4b7da5449cc8\">SetIntValue</a>(int _value)</td><td><a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlAttribute.html#ab7fa3d21ff8d7c5764cf9af15b667a99\">SetName</a>(const char *_name)</td><td><a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlAttribute.html#ab296ff0c9a8c701055cd257a8a976e57\">SetName</a>(const std::string &amp;_name)</td><td><a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ac6b3e0f790930d4970ec30764e937b5d\">SetUserData</a>(void *user)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlAttribute.html#a2dae44178f668b3cb48101be4f2236a0\">SetValue</a>(const char *_value)</td><td><a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlAttribute.html#ab43f67a0cc3ec1d80e62606500f0925f\">SetValue</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlAttribute.html#a9cfa3c8179873fd485d83003b114f8e1\">TiXmlAttribute</a>()</td><td><a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlAttribute.html#a052213522caac3979960e0714063861d\">TiXmlAttribute</a>(const std::string &amp;_name, const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlAttribute.html#a759d0b76fb8fcf765ecab243bc14f05e\">TiXmlAttribute</a>(const char *_name, const char *_value)</td><td><a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ab242c01590191f644569fa89a080d97c\">userData</a></td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [protected]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlAttribute.html#a0f874490eac8ca00ee0070765d0e97e3\">Value</a>() const </td><td><a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlAttribute.html#a87705c3ccf9ee9417beb4f7cbacd4d33\">ValueStr</a>() const </td><td><a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a></td><td><code> [inline]</code></td></tr>\n</table></div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlAttribute.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: TiXmlAttribute Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlAttribute Class Reference</h1><!-- doxytag: class=\"TiXmlAttribute\" --><!-- doxytag: inherits=\"TiXmlBase\" -->\n<p>An attribute is a name-value pair.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for TiXmlAttribute:</div>\n<div class=\"dynsection\">\n <div class=\"center\">\n  <img src=\"classTiXmlAttribute.png\" usemap=\"#TiXmlAttribute_map\" alt=\"\"/>\n  <map id=\"TiXmlAttribute_map\" name=\"TiXmlAttribute_map\">\n<area href=\"classTiXmlBase.html\" alt=\"TiXmlBase\" shape=\"rect\" coords=\"0,0,90,24\"/>\n</map>\n </div>\n</div>\n\n<p><a href=\"classTiXmlAttribute-members.html\">List of all members.</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Public Member Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9cfa3c8179873fd485d83003b114f8e1\"></a><!-- doxytag: member=\"TiXmlAttribute::TiXmlAttribute\" ref=\"a9cfa3c8179873fd485d83003b114f8e1\" args=\"()\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlAttribute.html#a9cfa3c8179873fd485d83003b114f8e1\">TiXmlAttribute</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Construct an empty attribute. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a052213522caac3979960e0714063861d\"></a><!-- doxytag: member=\"TiXmlAttribute::TiXmlAttribute\" ref=\"a052213522caac3979960e0714063861d\" args=\"(const std::string &amp;_name, const std::string &amp;_value)\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlAttribute.html#a052213522caac3979960e0714063861d\">TiXmlAttribute</a> (const std::string &amp;_name, const std::string &amp;_value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">std::string constructor. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a759d0b76fb8fcf765ecab243bc14f05e\"></a><!-- doxytag: member=\"TiXmlAttribute::TiXmlAttribute\" ref=\"a759d0b76fb8fcf765ecab243bc14f05e\" args=\"(const char *_name, const char *_value)\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlAttribute.html#a759d0b76fb8fcf765ecab243bc14f05e\">TiXmlAttribute</a> (const char *_name, const char *_value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Construct an attribute with a name and value. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a298a57287d305904ba6bd96ae6f78d3d\"></a><!-- doxytag: member=\"TiXmlAttribute::Name\" ref=\"a298a57287d305904ba6bd96ae6f78d3d\" args=\"() const \" -->\nconst char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlAttribute.html#a298a57287d305904ba6bd96ae6f78d3d\">Name</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return the name of this attribute. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0f874490eac8ca00ee0070765d0e97e3\"></a><!-- doxytag: member=\"TiXmlAttribute::Value\" ref=\"a0f874490eac8ca00ee0070765d0e97e3\" args=\"() const \" -->\nconst char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlAttribute.html#a0f874490eac8ca00ee0070765d0e97e3\">Value</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return the value of this attribute. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a87705c3ccf9ee9417beb4f7cbacd4d33\"></a><!-- doxytag: member=\"TiXmlAttribute::ValueStr\" ref=\"a87705c3ccf9ee9417beb4f7cbacd4d33\" args=\"() const \" -->\nconst std::string &amp;&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlAttribute.html#a87705c3ccf9ee9417beb4f7cbacd4d33\">ValueStr</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return the value of this attribute. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa1a20ad59dc7e89a0ab265396360d50f\"></a><!-- doxytag: member=\"TiXmlAttribute::IntValue\" ref=\"aa1a20ad59dc7e89a0ab265396360d50f\" args=\"() const \" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlAttribute.html#aa1a20ad59dc7e89a0ab265396360d50f\">IntValue</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return the value of this attribute, converted to an integer. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2880ddef53fc7522c99535273954d230\"></a><!-- doxytag: member=\"TiXmlAttribute::DoubleValue\" ref=\"a2880ddef53fc7522c99535273954d230\" args=\"() const \" -->\ndouble&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlAttribute.html#a2880ddef53fc7522c99535273954d230\">DoubleValue</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return the value of this attribute, converted to a double. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlAttribute.html#ad6c93088ee21af41a107931223339344\">QueryIntValue</a> (int *_value) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">QueryIntValue examines the value string.  <a href=\"#ad6c93088ee21af41a107931223339344\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac87b2a8489906a5d7aa2875f20be3513\"></a><!-- doxytag: member=\"TiXmlAttribute::QueryDoubleValue\" ref=\"ac87b2a8489906a5d7aa2875f20be3513\" args=\"(double *_value) const \" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlAttribute.html#ac87b2a8489906a5d7aa2875f20be3513\">QueryDoubleValue</a> (double *_value) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">QueryDoubleValue examines the value string. See <a class=\"el\" href=\"classTiXmlAttribute.html#ad6c93088ee21af41a107931223339344\" title=\"QueryIntValue examines the value string.\">QueryIntValue()</a>. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab7fa3d21ff8d7c5764cf9af15b667a99\"></a><!-- doxytag: member=\"TiXmlAttribute::SetName\" ref=\"ab7fa3d21ff8d7c5764cf9af15b667a99\" args=\"(const char *_name)\" -->\nvoid&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlAttribute.html#ab7fa3d21ff8d7c5764cf9af15b667a99\">SetName</a> (const char *_name)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set the name of this attribute. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2dae44178f668b3cb48101be4f2236a0\"></a><!-- doxytag: member=\"TiXmlAttribute::SetValue\" ref=\"a2dae44178f668b3cb48101be4f2236a0\" args=\"(const char *_value)\" -->\nvoid&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlAttribute.html#a2dae44178f668b3cb48101be4f2236a0\">SetValue</a> (const char *_value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set the value. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7e065df640116a62ea4f4b7da5449cc8\"></a><!-- doxytag: member=\"TiXmlAttribute::SetIntValue\" ref=\"a7e065df640116a62ea4f4b7da5449cc8\" args=\"(int _value)\" -->\nvoid&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlAttribute.html#a7e065df640116a62ea4f4b7da5449cc8\">SetIntValue</a> (int _value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set the value from an integer. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0316da31373496c4368ad549bf711394\"></a><!-- doxytag: member=\"TiXmlAttribute::SetDoubleValue\" ref=\"a0316da31373496c4368ad549bf711394\" args=\"(double _value)\" -->\nvoid&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlAttribute.html#a0316da31373496c4368ad549bf711394\">SetDoubleValue</a> (double _value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set the value from a double. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab296ff0c9a8c701055cd257a8a976e57\"></a><!-- doxytag: member=\"TiXmlAttribute::SetName\" ref=\"ab296ff0c9a8c701055cd257a8a976e57\" args=\"(const std::string &amp;_name)\" -->\nvoid&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlAttribute.html#ab296ff0c9a8c701055cd257a8a976e57\">SetName</a> (const std::string &amp;_name)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">STL std::string form. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab43f67a0cc3ec1d80e62606500f0925f\"></a><!-- doxytag: member=\"TiXmlAttribute::SetValue\" ref=\"ab43f67a0cc3ec1d80e62606500f0925f\" args=\"(const std::string &amp;_value)\" -->\nvoid&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlAttribute.html#ab43f67a0cc3ec1d80e62606500f0925f\">SetValue</a> (const std::string &amp;_value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">STL std::string form. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1c78e92e223a40843f644ba48ef69f67\"></a><!-- doxytag: member=\"TiXmlAttribute::Next\" ref=\"a1c78e92e223a40843f644ba48ef69f67\" args=\"() const \" -->\nconst <a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlAttribute.html#a1c78e92e223a40843f644ba48ef69f67\">Next</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Get the next sibling attribute in the DOM. Returns null at end. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6ebbfe333fe76cd834bd6cbcca3130cf\"></a><!-- doxytag: member=\"TiXmlAttribute::Previous\" ref=\"a6ebbfe333fe76cd834bd6cbcca3130cf\" args=\"() const \" -->\nconst <a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlAttribute.html#a6ebbfe333fe76cd834bd6cbcca3130cf\">Previous</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Get the previous sibling attribute in the DOM. Returns null at beginning. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlAttribute.html#acc04956c1d5c4c31fe74f7a7528d109a\">Print</a> (FILE *cfile, int depth) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">All TinyXml classes can print themselves to a filestream or the string class (TiXmlString in non-STL mode, std::string in STL mode.  <a href=\"#acc04956c1d5c4c31fe74f7a7528d109a\"></a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>An attribute is a name-value pair. </p>\n<p>Elements have an arbitrary number of attributes, each with a unique name.</p>\n<dl class=\"note\"><dt><b>Note:</b></dt><dd>The attributes are not TiXmlNodes, since they are not part of the tinyXML document object model. There are other suggested ways to look at this problem. </dd></dl>\n<hr/><h2>Member Function Documentation</h2>\n<a class=\"anchor\" id=\"acc04956c1d5c4c31fe74f7a7528d109a\"></a><!-- doxytag: member=\"TiXmlAttribute::Print\" ref=\"acc04956c1d5c4c31fe74f7a7528d109a\" args=\"(FILE *cfile, int depth) const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void TiXmlAttribute::Print </td>\n          <td>(</td>\n          <td class=\"paramtype\">FILE *&nbsp;</td>\n          <td class=\"paramname\"> <em>cfile</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>depth</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td> const<code> [inline, virtual]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>All TinyXml classes can print themselves to a filestream or the string class (TiXmlString in non-STL mode, std::string in STL mode. </p>\n<p>) Either or both cfile and str can be null.</p>\n<p>This is a formatted print, and will insert tabs and newlines.</p>\n<p>(For an unformatted stream, use the &lt;&lt; operator.) </p>\n\n<p>Implements <a class=\"el\" href=\"classTiXmlBase.html#a0de56b3f2ef14c65091a3b916437b512\">TiXmlBase</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad6c93088ee21af41a107931223339344\"></a><!-- doxytag: member=\"TiXmlAttribute::QueryIntValue\" ref=\"ad6c93088ee21af41a107931223339344\" args=\"(int *_value) const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int TiXmlAttribute::QueryIntValue </td>\n          <td>(</td>\n          <td class=\"paramtype\">int *&nbsp;</td>\n          <td class=\"paramname\"> <em>_value</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>QueryIntValue examines the value string. </p>\n<p>It is an alternative to the <a class=\"el\" href=\"classTiXmlAttribute.html#aa1a20ad59dc7e89a0ab265396360d50f\" title=\"Return the value of this attribute, converted to an integer.\">IntValue()</a> method with richer error checking. If the value is an integer, it is stored in 'value' and the call returns TIXML_SUCCESS. If it is not an integer, it returns TIXML_WRONG_TYPE.</p>\n<p>A specialized but useful call. Note that for success it returns 0, which is the opposite of almost all other TinyXml calls. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a></li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlBase-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlBase Member List</h1>This is the complete list of members for <a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a>, including all inherited members.<table>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ab54bfb9b70fe6dd276e7b279cab7f003\">Column</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a6bd8c315c1acb09e34107b8736505948\">EncodeString</a>(const TIXML_STRING &amp;str, TIXML_STRING *out)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a6559a530ca6763fc301a14d77ed28c17\">GetUserData</a>()</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ad0120210e4680ef2088601753ce0ede4\">GetUserData</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ad4b1472531c647a25b1840a87ae42438\">IsWhiteSpaceCondensed</a>()</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline, static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a0de56b3f2ef14c65091a3b916437b512\">Print</a>(FILE *cfile, int depth) const =0</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [pure virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a024bceb070188df92c2a8d8852dd0853\">Row</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a0f799ec645bfb8d8a969e83478f379c1\">SetCondenseWhiteSpace</a>(bool condense)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline, static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ac6b3e0f790930d4970ec30764e937b5d\">SetUserData</a>(void *user)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ab242c01590191f644569fa89a080d97c\">userData</a></td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [protected]</code></td></tr>\n</table></div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlBase.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: TiXmlBase Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlBase Class Reference</h1><!-- doxytag: class=\"TiXmlBase\" -->\n<p><a class=\"el\" href=\"classTiXmlBase.html\" title=\"TiXmlBase is a base class for every class in TinyXml.\">TiXmlBase</a> is a base class for every class in TinyXml.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for TiXmlBase:</div>\n<div class=\"dynsection\">\n <div class=\"center\">\n  <img src=\"classTiXmlBase.png\" usemap=\"#TiXmlBase_map\" alt=\"\"/>\n  <map id=\"TiXmlBase_map\" name=\"TiXmlBase_map\">\n<area href=\"classTiXmlAttribute.html\" alt=\"TiXmlAttribute\" shape=\"rect\" coords=\"0,56,108,80\"/>\n<area href=\"classTiXmlNode.html\" alt=\"TiXmlNode\" shape=\"rect\" coords=\"295,56,403,80\"/>\n<area href=\"classTiXmlComment.html\" alt=\"TiXmlComment\" shape=\"rect\" coords=\"0,112,108,136\"/>\n<area href=\"classTiXmlDeclaration.html\" alt=\"TiXmlDeclaration\" shape=\"rect\" coords=\"118,112,226,136\"/>\n<area href=\"classTiXmlDocument.html\" alt=\"TiXmlDocument\" shape=\"rect\" coords=\"236,112,344,136\"/>\n<area href=\"classTiXmlElement.html\" alt=\"TiXmlElement\" shape=\"rect\" coords=\"354,112,462,136\"/>\n<area href=\"classTiXmlText.html\" alt=\"TiXmlText\" shape=\"rect\" coords=\"472,112,580,136\"/>\n<area href=\"classTiXmlUnknown.html\" alt=\"TiXmlUnknown\" shape=\"rect\" coords=\"590,112,698,136\"/>\n</map>\n </div>\n</div>\n\n<p><a href=\"classTiXmlBase-members.html\">List of all members.</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Public Member Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlBase.html#a0de56b3f2ef14c65091a3b916437b512\">Print</a> (FILE *cfile, int depth) const =0</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">All TinyXml classes can print themselves to a filestream or the string class (TiXmlString in non-STL mode, std::string in STL mode.  <a href=\"#a0de56b3f2ef14c65091a3b916437b512\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlBase.html#a024bceb070188df92c2a8d8852dd0853\">Row</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return the position, in the original source file, of this node or attribute.  <a href=\"#a024bceb070188df92c2a8d8852dd0853\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab54bfb9b70fe6dd276e7b279cab7f003\"></a><!-- doxytag: member=\"TiXmlBase::Column\" ref=\"ab54bfb9b70fe6dd276e7b279cab7f003\" args=\"() const \" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlBase.html#ab54bfb9b70fe6dd276e7b279cab7f003\">Column</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">See <a class=\"el\" href=\"classTiXmlBase.html#a024bceb070188df92c2a8d8852dd0853\" title=\"Return the position, in the original source file, of this node or attribute.\">Row()</a>. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac6b3e0f790930d4970ec30764e937b5d\"></a><!-- doxytag: member=\"TiXmlBase::SetUserData\" ref=\"ac6b3e0f790930d4970ec30764e937b5d\" args=\"(void *user)\" -->\nvoid&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlBase.html#ac6b3e0f790930d4970ec30764e937b5d\">SetUserData</a> (void *user)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set a pointer to arbitrary user data. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6559a530ca6763fc301a14d77ed28c17\"></a><!-- doxytag: member=\"TiXmlBase::GetUserData\" ref=\"a6559a530ca6763fc301a14d77ed28c17\" args=\"()\" -->\nvoid *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlBase.html#a6559a530ca6763fc301a14d77ed28c17\">GetUserData</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Get a pointer to arbitrary user data. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad0120210e4680ef2088601753ce0ede4\"></a><!-- doxytag: member=\"TiXmlBase::GetUserData\" ref=\"ad0120210e4680ef2088601753ce0ede4\" args=\"() const \" -->\nconst void *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlBase.html#ad0120210e4680ef2088601753ce0ede4\">GetUserData</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Get a pointer to arbitrary user data. <br/></td></tr>\n<tr><td colspan=\"2\"><h2>Static Public Member Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlBase.html#a0f799ec645bfb8d8a969e83478f379c1\">SetCondenseWhiteSpace</a> (bool condense)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The world does not agree on whether white space should be kept or not.  <a href=\"#a0f799ec645bfb8d8a969e83478f379c1\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad4b1472531c647a25b1840a87ae42438\"></a><!-- doxytag: member=\"TiXmlBase::IsWhiteSpaceCondensed\" ref=\"ad4b1472531c647a25b1840a87ae42438\" args=\"()\" -->\nstatic bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlBase.html#ad4b1472531c647a25b1840a87ae42438\">IsWhiteSpaceCondensed</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return the current white space setting. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlBase.html#a6bd8c315c1acb09e34107b8736505948\">EncodeString</a> (const TIXML_STRING &amp;str, TIXML_STRING *out)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Expands entities in a string.  <a href=\"#a6bd8c315c1acb09e34107b8736505948\"></a><br/></td></tr>\n<tr><td colspan=\"2\"><h2>Protected Attributes</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab242c01590191f644569fa89a080d97c\"></a><!-- doxytag: member=\"TiXmlBase::userData\" ref=\"ab242c01590191f644569fa89a080d97c\" args=\"\" -->\nvoid *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlBase.html#ab242c01590191f644569fa89a080d97c\">userData</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Field containing a generic user pointer. <br/></td></tr>\n<tr><td colspan=\"2\"><h2>Friends</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a218872a0d985ae30e78c55adc4bdb196\"></a><!-- doxytag: member=\"TiXmlBase::TiXmlNode\" ref=\"a218872a0d985ae30e78c55adc4bdb196\" args=\"\" -->\nclass&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlBase.html#a218872a0d985ae30e78c55adc4bdb196\">TiXmlNode</a></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab6592e32cb9132be517cc12a70564c4b\"></a><!-- doxytag: member=\"TiXmlBase::TiXmlElement\" ref=\"ab6592e32cb9132be517cc12a70564c4b\" args=\"\" -->\nclass&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlBase.html#ab6592e32cb9132be517cc12a70564c4b\">TiXmlElement</a></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a173617f6dfe902cf484ce5552b950475\"></a><!-- doxytag: member=\"TiXmlBase::TiXmlDocument\" ref=\"a173617f6dfe902cf484ce5552b950475\" args=\"\" -->\nclass&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlBase.html#a173617f6dfe902cf484ce5552b950475\">TiXmlDocument</a></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p><a class=\"el\" href=\"classTiXmlBase.html\" title=\"TiXmlBase is a base class for every class in TinyXml.\">TiXmlBase</a> is a base class for every class in TinyXml. </p>\n<p>It does little except to establish that TinyXml classes can be printed and provide some utility functions.</p>\n<p>In XML, the document and elements can contain other elements and other types of nodes.</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n\tA Document can contain:\tElement\t(container or leaf)\n\t\t\t\t\t\t\tComment (leaf)\n\t\t\t\t\t\t\tUnknown (leaf)\n\t\t\t\t\t\t\tDeclaration( leaf )\n\n\tAn Element can contain:\tElement (container or leaf)\n\t\t\t\t\t\t\tText\t(leaf)\n\t\t\t\t\t\t\tAttributes (not on tree)\n\t\t\t\t\t\t\tComment (leaf)\n\t\t\t\t\t\t\tUnknown (leaf)\n\n\tA Decleration contains: Attributes (not on tree)\n\t</pre></div> <hr/><h2>Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a6bd8c315c1acb09e34107b8736505948\"></a><!-- doxytag: member=\"TiXmlBase::EncodeString\" ref=\"a6bd8c315c1acb09e34107b8736505948\" args=\"(const TIXML_STRING &amp;str, TIXML_STRING *out)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">static void TiXmlBase::EncodeString </td>\n          <td>(</td>\n          <td class=\"paramtype\">const TIXML_STRING &amp;&nbsp;</td>\n          <td class=\"paramname\"> <em>str</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">TIXML_STRING *&nbsp;</td>\n          <td class=\"paramname\"> <em>out</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td><code> [static]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Expands entities in a string. </p>\n<p>Note this should not contian the tag's '&lt;', '&gt;', etc, or they will be transformed into entities! </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a0de56b3f2ef14c65091a3b916437b512\"></a><!-- doxytag: member=\"TiXmlBase::Print\" ref=\"a0de56b3f2ef14c65091a3b916437b512\" args=\"(FILE *cfile, int depth) const =0\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void TiXmlBase::Print </td>\n          <td>(</td>\n          <td class=\"paramtype\">FILE *&nbsp;</td>\n          <td class=\"paramname\"> <em>cfile</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>depth</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td> const<code> [pure virtual]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>All TinyXml classes can print themselves to a filestream or the string class (TiXmlString in non-STL mode, std::string in STL mode. </p>\n<p>) Either or both cfile and str can be null.</p>\n<p>This is a formatted print, and will insert tabs and newlines.</p>\n<p>(For an unformatted stream, use the &lt;&lt; operator.) </p>\n\n<p>Implemented in <a class=\"el\" href=\"classTiXmlAttribute.html#acc04956c1d5c4c31fe74f7a7528d109a\">TiXmlAttribute</a>, <a class=\"el\" href=\"classTiXmlElement.html#afbf52736e70fc91ec9d760721d6f4fd2\">TiXmlElement</a>, <a class=\"el\" href=\"classTiXmlComment.html#a6b316527aaa8da0370cd68c22a5a0f5f\">TiXmlComment</a>, <a class=\"el\" href=\"classTiXmlText.html#a0cafbf6f236c7f02d12b2bffc2b7976b\">TiXmlText</a>, <a class=\"el\" href=\"classTiXmlDeclaration.html#abf6303db4bd05b5be554036817ff1cb4\">TiXmlDeclaration</a>, <a class=\"el\" href=\"classTiXmlUnknown.html#a31ba089a40fb5a1869750fce09b0bacb\">TiXmlUnknown</a>, and <a class=\"el\" href=\"classTiXmlDocument.html#a8701fda1fa31b25abbc9c0df42da10e8\">TiXmlDocument</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a024bceb070188df92c2a8d8852dd0853\"></a><!-- doxytag: member=\"TiXmlBase::Row\" ref=\"a024bceb070188df92c2a8d8852dd0853\" args=\"() const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int TiXmlBase::Row </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const<code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Return the position, in the original source file, of this node or attribute. </p>\n<p>The row and column are 1-based. (That is the first row and first column is 1,1). If the returns values are 0 or less, then the parser does not have a row and column value.</p>\n<p>Generally, the row and column value will be set when the TiXmlDocument::Load(), <a class=\"el\" href=\"classTiXmlDocument.html#a4c852a889c02cf251117fd1d9fe1845f\" title=\"Load a file using the current document value.\">TiXmlDocument::LoadFile()</a>, or any TiXmlNode::Parse() is called. It will NOT be set when the DOM was created from operator&gt;&gt;.</p>\n<p>The values reflect the initial load. Once the DOM is modified programmatically (by adding or changing nodes and attributes) the new values will NOT update to reflect changes in the document.</p>\n<p>There is a minor performance cost to computing the row and column. Computation can be disabled if <a class=\"el\" href=\"classTiXmlDocument.html#a51dac56316f89b35bdb7d0d433ba988e\" title=\"SetTabSize() allows the error reporting functions (ErrorRow() and ErrorCol()) to...\">TiXmlDocument::SetTabSize()</a> is called with 0 as the value.</p>\n<dl class=\"see\"><dt><b>See also:</b></dt><dd><a class=\"el\" href=\"classTiXmlDocument.html#a51dac56316f89b35bdb7d0d433ba988e\" title=\"SetTabSize() allows the error reporting functions (ErrorRow() and ErrorCol()) to...\">TiXmlDocument::SetTabSize()</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a0f799ec645bfb8d8a969e83478f379c1\"></a><!-- doxytag: member=\"TiXmlBase::SetCondenseWhiteSpace\" ref=\"a0f799ec645bfb8d8a969e83478f379c1\" args=\"(bool condense)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">static void TiXmlBase::SetCondenseWhiteSpace </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&nbsp;</td>\n          <td class=\"paramname\"> <em>condense</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline, static]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The world does not agree on whether white space should be kept or not. </p>\n<p>In order to make everyone happy, these global, static functions are provided to set whether or not TinyXml will condense all white space into a single space or not. The default is to condense. Note changing this value is not thread safe. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a></li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlComment-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlComment Member List</h1>This is the complete list of members for <a class=\"el\" href=\"classTiXmlComment.html\">TiXmlComment</a>, including all inherited members.<table>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlComment.html#af3ac1b99fbbe9ea4fb6e14146156e43e\">Accept</a>(TiXmlVisitor *visitor) const </td><td><a class=\"el\" href=\"classTiXmlComment.html\">TiXmlComment</a></td><td><code> [virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a708e7f953df61d4d2d12f73171550a4b\">Clear</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlComment.html#a0d6662bdc52488b9e12b3c7a0453d028\">Clone</a>() const </td><td><a class=\"el\" href=\"classTiXmlComment.html\">TiXmlComment</a></td><td><code> [virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ab54bfb9b70fe6dd276e7b279cab7f003\">Column</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a6bd8c315c1acb09e34107b8736505948\">EncodeString</a>(const TIXML_STRING &amp;str, TIXML_STRING *out)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a44c8eee26bbe2d1b2762038df9dde2f0\">FirstChild</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1f05828d023150706eeb16d6fb3f6355\">FirstChild</a>(const char *value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#abc8bf32be6419ec453a731868de19554\">FirstChild</a>(const char *_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a07f6200a5956c723c5b52d70f29c46f6\">FirstChild</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a10d2669ccb5e29e02fcb0e4408685ef6\">FirstChild</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#af4fb652f6bd79ae0d5ce7d0f7d3c0fba\">FirstChildElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#accda2c6b45c25bb5a6f9c3407a644e61\">FirstChildElement</a>(const char *_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a327ad4bbd90073c5dfc931b07314f5f7\">FirstChildElement</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a7f1d7291880534c1e5cdeb392d8c1f45\">FirstChildElement</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a80e397fa973cf5323e33b07154b024f3\">GetDocument</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a6559a530ca6763fc301a14d77ed28c17\">GetUserData</a>()</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ad0120210e4680ef2088601753ce0ede4\">GetUserData</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ad9b75e54ec19301c8b4d5ff583d0b3d5\">InsertAfterChild</a>(TiXmlNode *afterThis, const TiXmlNode &amp;addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a0c146fa2fff0157b681594102f48cbc7\">InsertBeforeChild</a>(TiXmlNode *beforeThis, const TiXmlNode &amp;addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ad7d4630e1a2a916edda16be22448a8ba\">InsertEndChild</a>(const TiXmlNode &amp;addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ad4b1472531c647a25b1840a87ae42438\">IsWhiteSpaceCondensed</a>()</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline, static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a8621196ba3705fa226bef4a761cc51b6\">IterateChildren</a>(const TiXmlNode *previous) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#adfaef35a076b9343adc1420757376c39\">IterateChildren</a>(const char *value, const TiXmlNode *previous) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1cbaaf8e82c09ad763d52616d75724df\">IterateChildren</a>(const std::string &amp;_value, const TiXmlNode *previous) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a16e9ad53e2f5445b14bf325c90aa862c\">IterateChildren</a>(const std::string &amp;_value, const TiXmlNode *previous)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a6432d2b2495f6caf9cb4278df706a031\">LastChild</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#abad5bf1059c48127b958711ef89e8e5d\">LastChild</a>(const char *_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a256d0cdbfcfeccae83f3a1c9747a8b63\">LastChild</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a69772c9202f70553f940b15c06b07be3\">LastChild</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a5d29442ae46de6d0168429156197bfc6\">LinkEndChild</a>(TiXmlNode *addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1b94d2f7fa7ab25a5a8e8d4340c449c9\">NextSibling</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1757c1f4d01e8c9596ffdbd561c76aea\">NextSibling</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#af854baeba384f5fe9859f5aee03b548e\">NextSibling</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a2e61c0b89a77e36a0e8c60490003cb46\">NextSibling</a>(const char *) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a73acf929d49d10bd0e5fb3d31b0372d1\">NextSiblingElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a071ba77fd7ab79402fa84b7e9b8607b3\">NextSiblingElement</a>(const char *) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a7572d0af9d1e696ee3f05d8bb5ebb463\">NextSiblingElement</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a506958e34406729a4e4c5326ea39d081\">NextSiblingElement</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#aeed21ad30630ef6e7faf096127edc9f3\">NoChildren</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a836eded4920ab9e9ef28496f48cd95a2\">NodeType</a> enum name</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a86cd49cfb17a844c0010b3136ac966c7\">operator&lt;&lt;</a>(std::ostream &amp;out, const TiXmlNode &amp;base)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [friend]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a52ef17e7080df2490cf87bde380685ab\">operator&lt;&lt;</a>(std::string &amp;out, const TiXmlNode &amp;base)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [friend]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ab57bd426563c926844f65a78412e18b9\">operator&gt;&gt;</a>(std::istream &amp;in, TiXmlNode &amp;base)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [friend]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ab643043132ffd794f8602685d34a982e\">Parent</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ac2cd892768726270e511b2ab32de4d10\">PreviousSibling</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a5bdd49327eec1e609b7d22af706b8316\">PreviousSibling</a>(const char *) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a658276f57d35d5d4256d1dc1a2c398ab\">PreviousSibling</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#acc8a0434c7f401d4a3b6dee77c1a5912\">PreviousSibling</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlComment.html#a6b316527aaa8da0370cd68c22a5a0f5f\">Print</a>(FILE *cfile, int depth) const </td><td><a class=\"el\" href=\"classTiXmlComment.html\">TiXmlComment</a></td><td><code> [virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ae19d8510efc90596552f4feeac9a8fbf\">RemoveChild</a>(TiXmlNode *removeThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a0c49e739a17b9938050c22cd89617fbd\">ReplaceChild</a>(TiXmlNode *replaceThis, const TiXmlNode &amp;withThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a024bceb070188df92c2a8d8852dd0853\">Row</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a0f799ec645bfb8d8a969e83478f379c1\">SetCondenseWhiteSpace</a>(bool condense)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline, static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ac6b3e0f790930d4970ec30764e937b5d\">SetUserData</a>(void *user)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a2a38329ca5d3f28f98ce932b8299ae90\">SetValue</a>(const char *_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a2598d5f448042c1abbeae4503dd45ff2\">SetValue</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlComment.html#aaa3252031d3e8bd3a2bf51a1c61201b7\">TiXmlComment</a>()</td><td><a class=\"el\" href=\"classTiXmlComment.html\">TiXmlComment</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlComment.html#a37e7802ef17bc03ebe5ae79bf0713d47\">TiXmlComment</a>(const char *_value)</td><td><a class=\"el\" href=\"classTiXmlComment.html\">TiXmlComment</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlComment.html#a00fb4215c20a2399ea05ac9b9e7e68a0\">ToComment</a>() const </td><td><a class=\"el\" href=\"classTiXmlComment.html\">TiXmlComment</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlComment.html#acc7c7e07e13c23f17797d642981511df\">ToComment</a>()</td><td><a class=\"el\" href=\"classTiXmlComment.html\">TiXmlComment</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a9f43e6984fc7d4afd6eb32714c6b7b72\">ToDeclaration</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a4027136ca820ff4a636b607231b6a6df\">ToDeclaration</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a8a4cda4b15c29f64cff419309aebed08\">ToDocument</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a6a4c8ac28ee7a745d059db6691e03bae\">ToDocument</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a72abed96dc9667ab9e0a2a275301bb1c\">ToElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#aa65d000223187d22a4dcebd7479e9ebc\">ToElement</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a95a46a52c525992d6b4ee08beb14cd69\">ToText</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a3ddfbcac78fbea041fad57e5c6d60a03\">ToText</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#afd7205cf31d7a376929f8a36930627a2\">ToUnknown</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a06de5af852668c7e4af0d09c205f0b0d\">ToUnknown</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a57b99d5c97d67a42b9752f5210a1ba5e\">Type</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ab242c01590191f644569fa89a080d97c\">userData</a></td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [protected]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a77943eb90d12c2892b1337a9f5918b41\">Value</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a6d9e505619d39bf50bfd9609c9169ea5\">ValueStr</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n</table></div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlComment.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: TiXmlComment Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlComment Class Reference</h1><!-- doxytag: class=\"TiXmlComment\" --><!-- doxytag: inherits=\"TiXmlNode\" -->\n<p>An XML comment.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for TiXmlComment:</div>\n<div class=\"dynsection\">\n <div class=\"center\">\n  <img src=\"classTiXmlComment.png\" usemap=\"#TiXmlComment_map\" alt=\"\"/>\n  <map id=\"TiXmlComment_map\" name=\"TiXmlComment_map\">\n<area href=\"classTiXmlNode.html\" alt=\"TiXmlNode\" shape=\"rect\" coords=\"0,56,94,80\"/>\n<area href=\"classTiXmlBase.html\" alt=\"TiXmlBase\" shape=\"rect\" coords=\"0,0,94,24\"/>\n</map>\n </div>\n</div>\n\n<p><a href=\"classTiXmlComment-members.html\">List of all members.</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Public Member Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaa3252031d3e8bd3a2bf51a1c61201b7\"></a><!-- doxytag: member=\"TiXmlComment::TiXmlComment\" ref=\"aaa3252031d3e8bd3a2bf51a1c61201b7\" args=\"()\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlComment.html#aaa3252031d3e8bd3a2bf51a1c61201b7\">TiXmlComment</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Constructs an empty comment. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a37e7802ef17bc03ebe5ae79bf0713d47\"></a><!-- doxytag: member=\"TiXmlComment::TiXmlComment\" ref=\"a37e7802ef17bc03ebe5ae79bf0713d47\" args=\"(const char *_value)\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlComment.html#a37e7802ef17bc03ebe5ae79bf0713d47\">TiXmlComment</a> (const char *_value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Construct a comment from text. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0d6662bdc52488b9e12b3c7a0453d028\"></a><!-- doxytag: member=\"TiXmlComment::Clone\" ref=\"a0d6662bdc52488b9e12b3c7a0453d028\" args=\"() const \" -->\nvirtual <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlComment.html#a0d6662bdc52488b9e12b3c7a0453d028\">Clone</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Returns a copy of this Comment. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlComment.html#a6b316527aaa8da0370cd68c22a5a0f5f\">Print</a> (FILE *cfile, int depth) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">All TinyXml classes can print themselves to a filestream or the string class (TiXmlString in non-STL mode, std::string in STL mode.  <a href=\"#a6b316527aaa8da0370cd68c22a5a0f5f\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a00fb4215c20a2399ea05ac9b9e7e68a0\"></a><!-- doxytag: member=\"TiXmlComment::ToComment\" ref=\"a00fb4215c20a2399ea05ac9b9e7e68a0\" args=\"() const \" -->\nvirtual const <a class=\"el\" href=\"classTiXmlComment.html\">TiXmlComment</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlComment.html#a00fb4215c20a2399ea05ac9b9e7e68a0\">ToComment</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acc7c7e07e13c23f17797d642981511df\"></a><!-- doxytag: member=\"TiXmlComment::ToComment\" ref=\"acc7c7e07e13c23f17797d642981511df\" args=\"()\" -->\nvirtual <a class=\"el\" href=\"classTiXmlComment.html\">TiXmlComment</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlComment.html#acc7c7e07e13c23f17797d642981511df\">ToComment</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af3ac1b99fbbe9ea4fb6e14146156e43e\"></a><!-- doxytag: member=\"TiXmlComment::Accept\" ref=\"af3ac1b99fbbe9ea4fb6e14146156e43e\" args=\"(TiXmlVisitor *visitor) const \" -->\nvirtual bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlComment.html#af3ac1b99fbbe9ea4fb6e14146156e43e\">Accept</a> (<a class=\"el\" href=\"classTiXmlVisitor.html\">TiXmlVisitor</a> *visitor) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Walk the XML tree visiting this node and all of its children. <br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>An XML comment. </p>\n<hr/><h2>Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a6b316527aaa8da0370cd68c22a5a0f5f\"></a><!-- doxytag: member=\"TiXmlComment::Print\" ref=\"a6b316527aaa8da0370cd68c22a5a0f5f\" args=\"(FILE *cfile, int depth) const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void TiXmlComment::Print </td>\n          <td>(</td>\n          <td class=\"paramtype\">FILE *&nbsp;</td>\n          <td class=\"paramname\"> <em>cfile</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>depth</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td> const<code> [virtual]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>All TinyXml classes can print themselves to a filestream or the string class (TiXmlString in non-STL mode, std::string in STL mode. </p>\n<p>) Either or both cfile and str can be null.</p>\n<p>This is a formatted print, and will insert tabs and newlines.</p>\n<p>(For an unformatted stream, use the &lt;&lt; operator.) </p>\n\n<p>Implements <a class=\"el\" href=\"classTiXmlBase.html#a0de56b3f2ef14c65091a3b916437b512\">TiXmlBase</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a></li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlDeclaration-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlDeclaration Member List</h1>This is the complete list of members for <a class=\"el\" href=\"classTiXmlDeclaration.html\">TiXmlDeclaration</a>, including all inherited members.<table>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDeclaration.html#a22315a535983b86535cdba3458669e3e\">Accept</a>(TiXmlVisitor *visitor) const </td><td><a class=\"el\" href=\"classTiXmlDeclaration.html\">TiXmlDeclaration</a></td><td><code> [virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a708e7f953df61d4d2d12f73171550a4b\">Clear</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDeclaration.html#a7cf459186040141cda7a180a6585ce2e\">Clone</a>() const </td><td><a class=\"el\" href=\"classTiXmlDeclaration.html\">TiXmlDeclaration</a></td><td><code> [virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ab54bfb9b70fe6dd276e7b279cab7f003\">Column</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a6bd8c315c1acb09e34107b8736505948\">EncodeString</a>(const TIXML_STRING &amp;str, TIXML_STRING *out)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDeclaration.html#a5d974231f9e9a2f0542f15f3a46cdb76\">Encoding</a>() const </td><td><a class=\"el\" href=\"classTiXmlDeclaration.html\">TiXmlDeclaration</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a44c8eee26bbe2d1b2762038df9dde2f0\">FirstChild</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1f05828d023150706eeb16d6fb3f6355\">FirstChild</a>(const char *value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#abc8bf32be6419ec453a731868de19554\">FirstChild</a>(const char *_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a07f6200a5956c723c5b52d70f29c46f6\">FirstChild</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a10d2669ccb5e29e02fcb0e4408685ef6\">FirstChild</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#af4fb652f6bd79ae0d5ce7d0f7d3c0fba\">FirstChildElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#accda2c6b45c25bb5a6f9c3407a644e61\">FirstChildElement</a>(const char *_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a327ad4bbd90073c5dfc931b07314f5f7\">FirstChildElement</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a7f1d7291880534c1e5cdeb392d8c1f45\">FirstChildElement</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a80e397fa973cf5323e33b07154b024f3\">GetDocument</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a6559a530ca6763fc301a14d77ed28c17\">GetUserData</a>()</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ad0120210e4680ef2088601753ce0ede4\">GetUserData</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ad9b75e54ec19301c8b4d5ff583d0b3d5\">InsertAfterChild</a>(TiXmlNode *afterThis, const TiXmlNode &amp;addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a0c146fa2fff0157b681594102f48cbc7\">InsertBeforeChild</a>(TiXmlNode *beforeThis, const TiXmlNode &amp;addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ad7d4630e1a2a916edda16be22448a8ba\">InsertEndChild</a>(const TiXmlNode &amp;addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ad4b1472531c647a25b1840a87ae42438\">IsWhiteSpaceCondensed</a>()</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline, static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a8621196ba3705fa226bef4a761cc51b6\">IterateChildren</a>(const TiXmlNode *previous) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#adfaef35a076b9343adc1420757376c39\">IterateChildren</a>(const char *value, const TiXmlNode *previous) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1cbaaf8e82c09ad763d52616d75724df\">IterateChildren</a>(const std::string &amp;_value, const TiXmlNode *previous) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a16e9ad53e2f5445b14bf325c90aa862c\">IterateChildren</a>(const std::string &amp;_value, const TiXmlNode *previous)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a6432d2b2495f6caf9cb4278df706a031\">LastChild</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#abad5bf1059c48127b958711ef89e8e5d\">LastChild</a>(const char *_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a256d0cdbfcfeccae83f3a1c9747a8b63\">LastChild</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a69772c9202f70553f940b15c06b07be3\">LastChild</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a5d29442ae46de6d0168429156197bfc6\">LinkEndChild</a>(TiXmlNode *addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1b94d2f7fa7ab25a5a8e8d4340c449c9\">NextSibling</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1757c1f4d01e8c9596ffdbd561c76aea\">NextSibling</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#af854baeba384f5fe9859f5aee03b548e\">NextSibling</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a2e61c0b89a77e36a0e8c60490003cb46\">NextSibling</a>(const char *) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a73acf929d49d10bd0e5fb3d31b0372d1\">NextSiblingElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a071ba77fd7ab79402fa84b7e9b8607b3\">NextSiblingElement</a>(const char *) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a7572d0af9d1e696ee3f05d8bb5ebb463\">NextSiblingElement</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a506958e34406729a4e4c5326ea39d081\">NextSiblingElement</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#aeed21ad30630ef6e7faf096127edc9f3\">NoChildren</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a836eded4920ab9e9ef28496f48cd95a2\">NodeType</a> enum name</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a86cd49cfb17a844c0010b3136ac966c7\">operator&lt;&lt;</a>(std::ostream &amp;out, const TiXmlNode &amp;base)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [friend]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a52ef17e7080df2490cf87bde380685ab\">operator&lt;&lt;</a>(std::string &amp;out, const TiXmlNode &amp;base)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [friend]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ab57bd426563c926844f65a78412e18b9\">operator&gt;&gt;</a>(std::istream &amp;in, TiXmlNode &amp;base)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [friend]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ab643043132ffd794f8602685d34a982e\">Parent</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ac2cd892768726270e511b2ab32de4d10\">PreviousSibling</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a5bdd49327eec1e609b7d22af706b8316\">PreviousSibling</a>(const char *) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a658276f57d35d5d4256d1dc1a2c398ab\">PreviousSibling</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#acc8a0434c7f401d4a3b6dee77c1a5912\">PreviousSibling</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDeclaration.html#abf6303db4bd05b5be554036817ff1cb4\">Print</a>(FILE *cfile, int depth) const </td><td><a class=\"el\" href=\"classTiXmlDeclaration.html\">TiXmlDeclaration</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ae19d8510efc90596552f4feeac9a8fbf\">RemoveChild</a>(TiXmlNode *removeThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a0c49e739a17b9938050c22cd89617fbd\">ReplaceChild</a>(TiXmlNode *replaceThis, const TiXmlNode &amp;withThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a024bceb070188df92c2a8d8852dd0853\">Row</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a0f799ec645bfb8d8a969e83478f379c1\">SetCondenseWhiteSpace</a>(bool condense)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline, static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ac6b3e0f790930d4970ec30764e937b5d\">SetUserData</a>(void *user)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a2a38329ca5d3f28f98ce932b8299ae90\">SetValue</a>(const char *_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a2598d5f448042c1abbeae4503dd45ff2\">SetValue</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDeclaration.html#a9ff06afc033d7ef730ec7c6825b97ad9\">Standalone</a>() const </td><td><a class=\"el\" href=\"classTiXmlDeclaration.html\">TiXmlDeclaration</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDeclaration.html#aa0484d059bea0ea1acb47c9094382d79\">TiXmlDeclaration</a>()</td><td><a class=\"el\" href=\"classTiXmlDeclaration.html\">TiXmlDeclaration</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDeclaration.html#acd5556007c3c72209465081de39d9836\">TiXmlDeclaration</a>(const std::string &amp;_version, const std::string &amp;_encoding, const std::string &amp;_standalone)</td><td><a class=\"el\" href=\"classTiXmlDeclaration.html\">TiXmlDeclaration</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDeclaration.html#a3b618d1c30c25e4b7a71f31a595ee298\">TiXmlDeclaration</a>(const char *_version, const char *_encoding, const char *_standalone)</td><td><a class=\"el\" href=\"classTiXmlDeclaration.html\">TiXmlDeclaration</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#aa0a5086f9eaee910bbfdc7f975e26574\">ToComment</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a383e06a0787f7063953934867990f849\">ToComment</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDeclaration.html#a1e085d3fefd1dbf5ccdbff729931a967\">ToDeclaration</a>() const </td><td><a class=\"el\" href=\"classTiXmlDeclaration.html\">TiXmlDeclaration</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDeclaration.html#a6bd3d1daddcaeb9543c24bfd090969ce\">ToDeclaration</a>()</td><td><a class=\"el\" href=\"classTiXmlDeclaration.html\">TiXmlDeclaration</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a8a4cda4b15c29f64cff419309aebed08\">ToDocument</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a6a4c8ac28ee7a745d059db6691e03bae\">ToDocument</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a72abed96dc9667ab9e0a2a275301bb1c\">ToElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#aa65d000223187d22a4dcebd7479e9ebc\">ToElement</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a95a46a52c525992d6b4ee08beb14cd69\">ToText</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a3ddfbcac78fbea041fad57e5c6d60a03\">ToText</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#afd7205cf31d7a376929f8a36930627a2\">ToUnknown</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a06de5af852668c7e4af0d09c205f0b0d\">ToUnknown</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a57b99d5c97d67a42b9752f5210a1ba5e\">Type</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ab242c01590191f644569fa89a080d97c\">userData</a></td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [protected]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a77943eb90d12c2892b1337a9f5918b41\">Value</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a6d9e505619d39bf50bfd9609c9169ea5\">ValueStr</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDeclaration.html#a02ee557b1a4545c3219ed377c103ec76\">Version</a>() const </td><td><a class=\"el\" href=\"classTiXmlDeclaration.html\">TiXmlDeclaration</a></td><td><code> [inline]</code></td></tr>\n</table></div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlDeclaration.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: TiXmlDeclaration Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlDeclaration Class Reference</h1><!-- doxytag: class=\"TiXmlDeclaration\" --><!-- doxytag: inherits=\"TiXmlNode\" -->\n<p>In correct XML the declaration is the first entry in the file.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for TiXmlDeclaration:</div>\n<div class=\"dynsection\">\n <div class=\"center\">\n  <img src=\"classTiXmlDeclaration.png\" usemap=\"#TiXmlDeclaration_map\" alt=\"\"/>\n  <map id=\"TiXmlDeclaration_map\" name=\"TiXmlDeclaration_map\">\n<area href=\"classTiXmlNode.html\" alt=\"TiXmlNode\" shape=\"rect\" coords=\"0,56,108,80\"/>\n<area href=\"classTiXmlBase.html\" alt=\"TiXmlBase\" shape=\"rect\" coords=\"0,0,108,24\"/>\n</map>\n </div>\n</div>\n\n<p><a href=\"classTiXmlDeclaration-members.html\">List of all members.</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Public Member Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa0484d059bea0ea1acb47c9094382d79\"></a><!-- doxytag: member=\"TiXmlDeclaration::TiXmlDeclaration\" ref=\"aa0484d059bea0ea1acb47c9094382d79\" args=\"()\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDeclaration.html#aa0484d059bea0ea1acb47c9094382d79\">TiXmlDeclaration</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Construct an empty declaration. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acd5556007c3c72209465081de39d9836\"></a><!-- doxytag: member=\"TiXmlDeclaration::TiXmlDeclaration\" ref=\"acd5556007c3c72209465081de39d9836\" args=\"(const std::string &amp;_version, const std::string &amp;_encoding, const std::string &amp;_standalone)\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDeclaration.html#acd5556007c3c72209465081de39d9836\">TiXmlDeclaration</a> (const std::string &amp;_version, const std::string &amp;_encoding, const std::string &amp;_standalone)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Constructor. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3b618d1c30c25e4b7a71f31a595ee298\"></a><!-- doxytag: member=\"TiXmlDeclaration::TiXmlDeclaration\" ref=\"a3b618d1c30c25e4b7a71f31a595ee298\" args=\"(const char *_version, const char *_encoding, const char *_standalone)\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDeclaration.html#a3b618d1c30c25e4b7a71f31a595ee298\">TiXmlDeclaration</a> (const char *_version, const char *_encoding, const char *_standalone)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Construct. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a02ee557b1a4545c3219ed377c103ec76\"></a><!-- doxytag: member=\"TiXmlDeclaration::Version\" ref=\"a02ee557b1a4545c3219ed377c103ec76\" args=\"() const \" -->\nconst char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDeclaration.html#a02ee557b1a4545c3219ed377c103ec76\">Version</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Version. Will return an empty string if none was found. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5d974231f9e9a2f0542f15f3a46cdb76\"></a><!-- doxytag: member=\"TiXmlDeclaration::Encoding\" ref=\"a5d974231f9e9a2f0542f15f3a46cdb76\" args=\"() const \" -->\nconst char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDeclaration.html#a5d974231f9e9a2f0542f15f3a46cdb76\">Encoding</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Encoding. Will return an empty string if none was found. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9ff06afc033d7ef730ec7c6825b97ad9\"></a><!-- doxytag: member=\"TiXmlDeclaration::Standalone\" ref=\"a9ff06afc033d7ef730ec7c6825b97ad9\" args=\"() const \" -->\nconst char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDeclaration.html#a9ff06afc033d7ef730ec7c6825b97ad9\">Standalone</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Is this a standalone document? <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7cf459186040141cda7a180a6585ce2e\"></a><!-- doxytag: member=\"TiXmlDeclaration::Clone\" ref=\"a7cf459186040141cda7a180a6585ce2e\" args=\"() const \" -->\nvirtual <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDeclaration.html#a7cf459186040141cda7a180a6585ce2e\">Clone</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Creates a copy of this Declaration and returns it. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDeclaration.html#abf6303db4bd05b5be554036817ff1cb4\">Print</a> (FILE *cfile, int depth) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">All TinyXml classes can print themselves to a filestream or the string class (TiXmlString in non-STL mode, std::string in STL mode.  <a href=\"#abf6303db4bd05b5be554036817ff1cb4\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1e085d3fefd1dbf5ccdbff729931a967\"></a><!-- doxytag: member=\"TiXmlDeclaration::ToDeclaration\" ref=\"a1e085d3fefd1dbf5ccdbff729931a967\" args=\"() const \" -->\nvirtual const <a class=\"el\" href=\"classTiXmlDeclaration.html\">TiXmlDeclaration</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDeclaration.html#a1e085d3fefd1dbf5ccdbff729931a967\">ToDeclaration</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6bd3d1daddcaeb9543c24bfd090969ce\"></a><!-- doxytag: member=\"TiXmlDeclaration::ToDeclaration\" ref=\"a6bd3d1daddcaeb9543c24bfd090969ce\" args=\"()\" -->\nvirtual <a class=\"el\" href=\"classTiXmlDeclaration.html\">TiXmlDeclaration</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDeclaration.html#a6bd3d1daddcaeb9543c24bfd090969ce\">ToDeclaration</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a22315a535983b86535cdba3458669e3e\"></a><!-- doxytag: member=\"TiXmlDeclaration::Accept\" ref=\"a22315a535983b86535cdba3458669e3e\" args=\"(TiXmlVisitor *visitor) const \" -->\nvirtual bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDeclaration.html#a22315a535983b86535cdba3458669e3e\">Accept</a> (<a class=\"el\" href=\"classTiXmlVisitor.html\">TiXmlVisitor</a> *visitor) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Walk the XML tree visiting this node and all of its children. <br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>In correct XML the declaration is the first entry in the file. </p>\n<div class=\"fragment\"><pre class=\"fragment\">\n\t\t&lt;?xml version=\"1.0\" standalone=\"yes\"?&gt;\n\t</pre></div><p>TinyXml will happily read or write files without a declaration, however. There are 3 possible attributes to the declaration: version, encoding, and standalone.</p>\n<p>Note: In this version of the code, the attributes are handled as special cases, not generic attributes, simply because there can only be at most 3 and they are always the same. </p>\n<hr/><h2>Member Function Documentation</h2>\n<a class=\"anchor\" id=\"abf6303db4bd05b5be554036817ff1cb4\"></a><!-- doxytag: member=\"TiXmlDeclaration::Print\" ref=\"abf6303db4bd05b5be554036817ff1cb4\" args=\"(FILE *cfile, int depth) const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void TiXmlDeclaration::Print </td>\n          <td>(</td>\n          <td class=\"paramtype\">FILE *&nbsp;</td>\n          <td class=\"paramname\"> <em>cfile</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>depth</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td> const<code> [inline, virtual]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>All TinyXml classes can print themselves to a filestream or the string class (TiXmlString in non-STL mode, std::string in STL mode. </p>\n<p>) Either or both cfile and str can be null.</p>\n<p>This is a formatted print, and will insert tabs and newlines.</p>\n<p>(For an unformatted stream, use the &lt;&lt; operator.) </p>\n\n<p>Implements <a class=\"el\" href=\"classTiXmlBase.html#a0de56b3f2ef14c65091a3b916437b512\">TiXmlBase</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a></li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlDocument-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlDocument Member List</h1>This is the complete list of members for <a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a>, including all inherited members.<table>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#aa545aae325d9752ad64120bc4ecf939a\">Accept</a>(TiXmlVisitor *content) const </td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td><code> [virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a708e7f953df61d4d2d12f73171550a4b\">Clear</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#ac66b8c28db86363315712a3574e87c35\">ClearError</a>()</td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#a4968661cab4a1f44a23329c6f8db1907\">Clone</a>() const </td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td><code> [protected, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ab54bfb9b70fe6dd276e7b279cab7f003\">Column</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a6bd8c315c1acb09e34107b8736505948\">EncodeString</a>(const TIXML_STRING &amp;str, TIXML_STRING *out)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#a6dfc01a6e5d58e56acd537dfd3bdeb29\">Error</a>() const </td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#aa90bc630ee5203c6109ca5fad3323649\">ErrorCol</a>() const </td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#a9d0f689f6e09ea494ea547be8d79c25e\">ErrorDesc</a>() const </td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#af96fc2f3f9ec6422782bfe916c9e778f\">ErrorId</a>() const </td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#af30efc75e804aa2e92fb8be3a8cb676e\">ErrorRow</a>() const </td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a44c8eee26bbe2d1b2762038df9dde2f0\">FirstChild</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1f05828d023150706eeb16d6fb3f6355\">FirstChild</a>(const char *value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#abc8bf32be6419ec453a731868de19554\">FirstChild</a>(const char *_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a07f6200a5956c723c5b52d70f29c46f6\">FirstChild</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a10d2669ccb5e29e02fcb0e4408685ef6\">FirstChild</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#af4fb652f6bd79ae0d5ce7d0f7d3c0fba\">FirstChildElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#accda2c6b45c25bb5a6f9c3407a644e61\">FirstChildElement</a>(const char *_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a327ad4bbd90073c5dfc931b07314f5f7\">FirstChildElement</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a7f1d7291880534c1e5cdeb392d8c1f45\">FirstChildElement</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a80e397fa973cf5323e33b07154b024f3\">GetDocument</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a6559a530ca6763fc301a14d77ed28c17\">GetUserData</a>()</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ad0120210e4680ef2088601753ce0ede4\">GetUserData</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ad9b75e54ec19301c8b4d5ff583d0b3d5\">InsertAfterChild</a>(TiXmlNode *afterThis, const TiXmlNode &amp;addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a0c146fa2fff0157b681594102f48cbc7\">InsertBeforeChild</a>(TiXmlNode *beforeThis, const TiXmlNode &amp;addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ad7d4630e1a2a916edda16be22448a8ba\">InsertEndChild</a>(const TiXmlNode &amp;addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ad4b1472531c647a25b1840a87ae42438\">IsWhiteSpaceCondensed</a>()</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline, static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a8621196ba3705fa226bef4a761cc51b6\">IterateChildren</a>(const TiXmlNode *previous) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#adfaef35a076b9343adc1420757376c39\">IterateChildren</a>(const char *value, const TiXmlNode *previous) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1cbaaf8e82c09ad763d52616d75724df\">IterateChildren</a>(const std::string &amp;_value, const TiXmlNode *previous) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a16e9ad53e2f5445b14bf325c90aa862c\">IterateChildren</a>(const std::string &amp;_value, const TiXmlNode *previous)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a6432d2b2495f6caf9cb4278df706a031\">LastChild</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#abad5bf1059c48127b958711ef89e8e5d\">LastChild</a>(const char *_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a256d0cdbfcfeccae83f3a1c9747a8b63\">LastChild</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a69772c9202f70553f940b15c06b07be3\">LastChild</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a5d29442ae46de6d0168429156197bfc6\">LinkEndChild</a>(TiXmlNode *addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#a4c852a889c02cf251117fd1d9fe1845f\">LoadFile</a>(TiXmlEncoding encoding=TIXML_DEFAULT_ENCODING)</td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#a879cdf5e981b8b2d2ef82f2546dd28fb\">LoadFile</a>(const char *filename, TiXmlEncoding encoding=TIXML_DEFAULT_ENCODING)</td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#a41f6fe7200864d1dca663d230caf8db6\">LoadFile</a>(FILE *, TiXmlEncoding encoding=TIXML_DEFAULT_ENCODING)</td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#a18ae6ed34fed7991ebc220862dfac884\">LoadFile</a>(const std::string &amp;filename, TiXmlEncoding encoding=TIXML_DEFAULT_ENCODING)</td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1b94d2f7fa7ab25a5a8e8d4340c449c9\">NextSibling</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1757c1f4d01e8c9596ffdbd561c76aea\">NextSibling</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#af854baeba384f5fe9859f5aee03b548e\">NextSibling</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a2e61c0b89a77e36a0e8c60490003cb46\">NextSibling</a>(const char *) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a73acf929d49d10bd0e5fb3d31b0372d1\">NextSiblingElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a071ba77fd7ab79402fa84b7e9b8607b3\">NextSiblingElement</a>(const char *) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a7572d0af9d1e696ee3f05d8bb5ebb463\">NextSiblingElement</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a506958e34406729a4e4c5326ea39d081\">NextSiblingElement</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#aeed21ad30630ef6e7faf096127edc9f3\">NoChildren</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a836eded4920ab9e9ef28496f48cd95a2\">NodeType</a> enum name</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a86cd49cfb17a844c0010b3136ac966c7\">operator&lt;&lt;</a>(std::ostream &amp;out, const TiXmlNode &amp;base)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [friend]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a52ef17e7080df2490cf87bde380685ab\">operator&lt;&lt;</a>(std::string &amp;out, const TiXmlNode &amp;base)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [friend]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ab57bd426563c926844f65a78412e18b9\">operator&gt;&gt;</a>(std::istream &amp;in, TiXmlNode &amp;base)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [friend]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ab643043132ffd794f8602685d34a982e\">Parent</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#a17ebabe36926ef398e78dec0d0ad0378\">Parse</a>(const char *p, TiXmlParsingData *data=0, TiXmlEncoding encoding=TIXML_DEFAULT_ENCODING)</td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td><code> [virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ac2cd892768726270e511b2ab32de4d10\">PreviousSibling</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a5bdd49327eec1e609b7d22af706b8316\">PreviousSibling</a>(const char *) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a658276f57d35d5d4256d1dc1a2c398ab\">PreviousSibling</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#acc8a0434c7f401d4a3b6dee77c1a5912\">PreviousSibling</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#af08389ec70ee9b2de7f800e206a18510\">Print</a>() const </td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#a8701fda1fa31b25abbc9c0df42da10e8\">Print</a>(FILE *cfile, int depth=0) const </td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td><code> [virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ae19d8510efc90596552f4feeac9a8fbf\">RemoveChild</a>(TiXmlNode *removeThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a0c49e739a17b9938050c22cd89617fbd\">ReplaceChild</a>(TiXmlNode *replaceThis, const TiXmlNode &amp;withThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#ad09d17927f908f40efb406af2fb873be\">RootElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a024bceb070188df92c2a8d8852dd0853\">Row</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#a21c0aeb0d0a720169ad4ac89523ebe93\">SaveFile</a>() const </td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#ae869f5ebf7fc54c4a1d737fb4689fd44\">SaveFile</a>(const char *filename) const </td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#acf1672b4538c6d1d441f9f108aea2bf4\">SaveFile</a>(FILE *) const </td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#a3d4fae0463f3f03679ba0b7cf6f2df52\">SaveFile</a>(const std::string &amp;filename) const </td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a0f799ec645bfb8d8a969e83478f379c1\">SetCondenseWhiteSpace</a>(bool condense)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline, static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#a51dac56316f89b35bdb7d0d433ba988e\">SetTabSize</a>(int _tabsize)</td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ac6b3e0f790930d4970ec30764e937b5d\">SetUserData</a>(void *user)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a2a38329ca5d3f28f98ce932b8299ae90\">SetValue</a>(const char *_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a2598d5f448042c1abbeae4503dd45ff2\">SetValue</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#a9f5e84335708fde98400230f9f12659c\">TiXmlDocument</a>()</td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#ae4508b452d0c3061db085f3db27b8396\">TiXmlDocument</a>(const char *documentName)</td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#a2c6e58fb99bfa76cc613f16840022225\">TiXmlDocument</a>(const std::string &amp;documentName)</td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#aa0a5086f9eaee910bbfdc7f975e26574\">ToComment</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a383e06a0787f7063953934867990f849\">ToComment</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a9f43e6984fc7d4afd6eb32714c6b7b72\">ToDeclaration</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a4027136ca820ff4a636b607231b6a6df\">ToDeclaration</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#a1dc977bde3e4fe85a8eb9d88a35ef5a4\">ToDocument</a>() const </td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlDocument.html#a1025d942a1f328fd742d545e37efdd42\">ToDocument</a>()</td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a72abed96dc9667ab9e0a2a275301bb1c\">ToElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#aa65d000223187d22a4dcebd7479e9ebc\">ToElement</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a95a46a52c525992d6b4ee08beb14cd69\">ToText</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a3ddfbcac78fbea041fad57e5c6d60a03\">ToText</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#afd7205cf31d7a376929f8a36930627a2\">ToUnknown</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a06de5af852668c7e4af0d09c205f0b0d\">ToUnknown</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a57b99d5c97d67a42b9752f5210a1ba5e\">Type</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ab242c01590191f644569fa89a080d97c\">userData</a></td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [protected]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a77943eb90d12c2892b1337a9f5918b41\">Value</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a6d9e505619d39bf50bfd9609c9169ea5\">ValueStr</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n</table></div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlDocument.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: TiXmlDocument Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlDocument Class Reference</h1><!-- doxytag: class=\"TiXmlDocument\" --><!-- doxytag: inherits=\"TiXmlNode\" -->\n<p>Always the top level node.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for TiXmlDocument:</div>\n<div class=\"dynsection\">\n <div class=\"center\">\n  <img src=\"classTiXmlDocument.png\" usemap=\"#TiXmlDocument_map\" alt=\"\"/>\n  <map id=\"TiXmlDocument_map\" name=\"TiXmlDocument_map\">\n<area href=\"classTiXmlNode.html\" alt=\"TiXmlNode\" shape=\"rect\" coords=\"0,56,99,80\"/>\n<area href=\"classTiXmlBase.html\" alt=\"TiXmlBase\" shape=\"rect\" coords=\"0,0,99,24\"/>\n</map>\n </div>\n</div>\n\n<p><a href=\"classTiXmlDocument-members.html\">List of all members.</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Public Member Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9f5e84335708fde98400230f9f12659c\"></a><!-- doxytag: member=\"TiXmlDocument::TiXmlDocument\" ref=\"a9f5e84335708fde98400230f9f12659c\" args=\"()\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#a9f5e84335708fde98400230f9f12659c\">TiXmlDocument</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create an empty document, that has no name. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae4508b452d0c3061db085f3db27b8396\"></a><!-- doxytag: member=\"TiXmlDocument::TiXmlDocument\" ref=\"ae4508b452d0c3061db085f3db27b8396\" args=\"(const char *documentName)\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#ae4508b452d0c3061db085f3db27b8396\">TiXmlDocument</a> (const char *documentName)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a document with a name. The name of the document is also the filename of the xml. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2c6e58fb99bfa76cc613f16840022225\"></a><!-- doxytag: member=\"TiXmlDocument::TiXmlDocument\" ref=\"a2c6e58fb99bfa76cc613f16840022225\" args=\"(const std::string &amp;documentName)\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#a2c6e58fb99bfa76cc613f16840022225\">TiXmlDocument</a> (const std::string &amp;documentName)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Constructor. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#a4c852a889c02cf251117fd1d9fe1845f\">LoadFile</a> (TiXmlEncoding encoding=TIXML_DEFAULT_ENCODING)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Load a file using the current document value.  <a href=\"#a4c852a889c02cf251117fd1d9fe1845f\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a21c0aeb0d0a720169ad4ac89523ebe93\"></a><!-- doxytag: member=\"TiXmlDocument::SaveFile\" ref=\"a21c0aeb0d0a720169ad4ac89523ebe93\" args=\"() const \" -->\nbool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#a21c0aeb0d0a720169ad4ac89523ebe93\">SaveFile</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Save a file using the current document value. Returns true if successful. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a879cdf5e981b8b2d2ef82f2546dd28fb\"></a><!-- doxytag: member=\"TiXmlDocument::LoadFile\" ref=\"a879cdf5e981b8b2d2ef82f2546dd28fb\" args=\"(const char *filename, TiXmlEncoding encoding=TIXML_DEFAULT_ENCODING)\" -->\nbool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#a879cdf5e981b8b2d2ef82f2546dd28fb\">LoadFile</a> (const char *filename, TiXmlEncoding encoding=TIXML_DEFAULT_ENCODING)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Load a file using the given filename. Returns true if successful. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae869f5ebf7fc54c4a1d737fb4689fd44\"></a><!-- doxytag: member=\"TiXmlDocument::SaveFile\" ref=\"ae869f5ebf7fc54c4a1d737fb4689fd44\" args=\"(const char *filename) const \" -->\nbool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#ae869f5ebf7fc54c4a1d737fb4689fd44\">SaveFile</a> (const char *filename) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Save a file using the given filename. Returns true if successful. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#a41f6fe7200864d1dca663d230caf8db6\">LoadFile</a> (FILE *, TiXmlEncoding encoding=TIXML_DEFAULT_ENCODING)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Load a file using the given FILE*.  <a href=\"#a41f6fe7200864d1dca663d230caf8db6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acf1672b4538c6d1d441f9f108aea2bf4\"></a><!-- doxytag: member=\"TiXmlDocument::SaveFile\" ref=\"acf1672b4538c6d1d441f9f108aea2bf4\" args=\"(FILE *) const \" -->\nbool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#acf1672b4538c6d1d441f9f108aea2bf4\">SaveFile</a> (FILE *) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Save a file using the given FILE*. Returns true if successful. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#a18ae6ed34fed7991ebc220862dfac884\">LoadFile</a> (const std::string &amp;filename, TiXmlEncoding encoding=TIXML_DEFAULT_ENCODING)</td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3d4fae0463f3f03679ba0b7cf6f2df52\"></a><!-- doxytag: member=\"TiXmlDocument::SaveFile\" ref=\"a3d4fae0463f3f03679ba0b7cf6f2df52\" args=\"(const std::string &amp;filename) const \" -->\nbool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#a3d4fae0463f3f03679ba0b7cf6f2df52\">SaveFile</a> (const std::string &amp;filename) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">&lt; STL std::string version. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual const char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#a17ebabe36926ef398e78dec0d0ad0378\">Parse</a> (const char *p, TiXmlParsingData *data=0, TiXmlEncoding encoding=TIXML_DEFAULT_ENCODING)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Parse the given null terminated block of xml data.  <a href=\"#a17ebabe36926ef398e78dec0d0ad0378\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const <a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#ad09d17927f908f40efb406af2fb873be\">RootElement</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Get the root element -- the only top level element -- of the document.  <a href=\"#ad09d17927f908f40efb406af2fb873be\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#a6dfc01a6e5d58e56acd537dfd3bdeb29\">Error</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">If an error occurs, Error will be set to true.  <a href=\"#a6dfc01a6e5d58e56acd537dfd3bdeb29\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9d0f689f6e09ea494ea547be8d79c25e\"></a><!-- doxytag: member=\"TiXmlDocument::ErrorDesc\" ref=\"a9d0f689f6e09ea494ea547be8d79c25e\" args=\"() const \" -->\nconst char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#a9d0f689f6e09ea494ea547be8d79c25e\">ErrorDesc</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Contains a textual (english) description of the error if one occurs. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#af96fc2f3f9ec6422782bfe916c9e778f\">ErrorId</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Generally, you probably want the error string ( <a class=\"el\" href=\"classTiXmlDocument.html#a9d0f689f6e09ea494ea547be8d79c25e\" title=\"Contains a textual (english) description of the error if one occurs.\">ErrorDesc()</a> ).  <a href=\"#af96fc2f3f9ec6422782bfe916c9e778f\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#af30efc75e804aa2e92fb8be3a8cb676e\">ErrorRow</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Returns the location (if known) of the error.  <a href=\"#af30efc75e804aa2e92fb8be3a8cb676e\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa90bc630ee5203c6109ca5fad3323649\"></a><!-- doxytag: member=\"TiXmlDocument::ErrorCol\" ref=\"aa90bc630ee5203c6109ca5fad3323649\" args=\"() const \" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#aa90bc630ee5203c6109ca5fad3323649\">ErrorCol</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The column where the error occured. See <a class=\"el\" href=\"classTiXmlDocument.html#af30efc75e804aa2e92fb8be3a8cb676e\" title=\"Returns the location (if known) of the error.\">ErrorRow()</a>. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#a51dac56316f89b35bdb7d0d433ba988e\">SetTabSize</a> (int _tabsize)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><a class=\"el\" href=\"classTiXmlDocument.html#a51dac56316f89b35bdb7d0d433ba988e\" title=\"SetTabSize() allows the error reporting functions (ErrorRow() and ErrorCol()) to...\">SetTabSize()</a> allows the error reporting functions (<a class=\"el\" href=\"classTiXmlDocument.html#af30efc75e804aa2e92fb8be3a8cb676e\" title=\"Returns the location (if known) of the error.\">ErrorRow()</a> and <a class=\"el\" href=\"classTiXmlDocument.html#aa90bc630ee5203c6109ca5fad3323649\" title=\"The column where the error occured. See ErrorRow().\">ErrorCol()</a>) to report the correct values for row and column.  <a href=\"#a51dac56316f89b35bdb7d0d433ba988e\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#ac66b8c28db86363315712a3574e87c35\">ClearError</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">If you have handled the error, it can be reset with this call.  <a href=\"#ac66b8c28db86363315712a3574e87c35\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#af08389ec70ee9b2de7f800e206a18510\">Print</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Write the document to standard out using formatted printing (\"pretty print\").  <a href=\"#af08389ec70ee9b2de7f800e206a18510\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8701fda1fa31b25abbc9c0df42da10e8\"></a><!-- doxytag: member=\"TiXmlDocument::Print\" ref=\"a8701fda1fa31b25abbc9c0df42da10e8\" args=\"(FILE *cfile, int depth=0) const \" -->\nvirtual void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#a8701fda1fa31b25abbc9c0df42da10e8\">Print</a> (FILE *cfile, int depth=0) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Print this Document to a FILE stream. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1dc977bde3e4fe85a8eb9d88a35ef5a4\"></a><!-- doxytag: member=\"TiXmlDocument::ToDocument\" ref=\"a1dc977bde3e4fe85a8eb9d88a35ef5a4\" args=\"() const \" -->\nvirtual const <a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#a1dc977bde3e4fe85a8eb9d88a35ef5a4\">ToDocument</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1025d942a1f328fd742d545e37efdd42\"></a><!-- doxytag: member=\"TiXmlDocument::ToDocument\" ref=\"a1025d942a1f328fd742d545e37efdd42\" args=\"()\" -->\nvirtual <a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#a1025d942a1f328fd742d545e37efdd42\">ToDocument</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa545aae325d9752ad64120bc4ecf939a\"></a><!-- doxytag: member=\"TiXmlDocument::Accept\" ref=\"aa545aae325d9752ad64120bc4ecf939a\" args=\"(TiXmlVisitor *content) const \" -->\nvirtual bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#aa545aae325d9752ad64120bc4ecf939a\">Accept</a> (<a class=\"el\" href=\"classTiXmlVisitor.html\">TiXmlVisitor</a> *content) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Walk the XML tree visiting this node and all of its children. <br/></td></tr>\n<tr><td colspan=\"2\"><h2>Protected Member Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlDocument.html#a4968661cab4a1f44a23329c6f8db1907\">Clone</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create an exact duplicate of this node and return it.  <a href=\"#a4968661cab4a1f44a23329c6f8db1907\"></a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>Always the top level node. </p>\n<p>A document binds together all the XML pieces. It can be saved, loaded, and printed to the screen. The 'value' of a document node is the xml file name. </p>\n<hr/><h2>Member Function Documentation</h2>\n<a class=\"anchor\" id=\"ac66b8c28db86363315712a3574e87c35\"></a><!-- doxytag: member=\"TiXmlDocument::ClearError\" ref=\"ac66b8c28db86363315712a3574e87c35\" args=\"()\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void TiXmlDocument::ClearError </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>If you have handled the error, it can be reset with this call. </p>\n<p>The error state is automatically cleared if you Parse a new XML block. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a4968661cab4a1f44a23329c6f8db1907\"></a><!-- doxytag: member=\"TiXmlDocument::Clone\" ref=\"a4968661cab4a1f44a23329c6f8db1907\" args=\"() const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a>* TiXmlDocument::Clone </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const<code> [protected, virtual]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Create an exact duplicate of this node and return it. </p>\n<p>The memory must be deleted by the caller. </p>\n\n<p>Implements <a class=\"el\" href=\"classTiXmlNode.html#a4508cc3a2d7a98e96a54cc09c37a78a4\">TiXmlNode</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a6dfc01a6e5d58e56acd537dfd3bdeb29\"></a><!-- doxytag: member=\"TiXmlDocument::Error\" ref=\"a6dfc01a6e5d58e56acd537dfd3bdeb29\" args=\"() const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool TiXmlDocument::Error </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const<code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>If an error occurs, Error will be set to true. </p>\n<p>Also,</p>\n<ul>\n<li>The <a class=\"el\" href=\"classTiXmlDocument.html#af96fc2f3f9ec6422782bfe916c9e778f\" title=\"Generally, you probably want the error string ( ErrorDesc() ).\">ErrorId()</a> will contain the integer identifier of the error (not generally useful)</li>\n<li>The <a class=\"el\" href=\"classTiXmlDocument.html#a9d0f689f6e09ea494ea547be8d79c25e\" title=\"Contains a textual (english) description of the error if one occurs.\">ErrorDesc()</a> method will return the name of the error. (very useful)</li>\n<li>The <a class=\"el\" href=\"classTiXmlDocument.html#af30efc75e804aa2e92fb8be3a8cb676e\" title=\"Returns the location (if known) of the error.\">ErrorRow()</a> and <a class=\"el\" href=\"classTiXmlDocument.html#aa90bc630ee5203c6109ca5fad3323649\" title=\"The column where the error occured. See ErrorRow().\">ErrorCol()</a> will return the location of the error (if known) </li>\n</ul>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"af96fc2f3f9ec6422782bfe916c9e778f\"></a><!-- doxytag: member=\"TiXmlDocument::ErrorId\" ref=\"af96fc2f3f9ec6422782bfe916c9e778f\" args=\"() const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int TiXmlDocument::ErrorId </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const<code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Generally, you probably want the error string ( <a class=\"el\" href=\"classTiXmlDocument.html#a9d0f689f6e09ea494ea547be8d79c25e\" title=\"Contains a textual (english) description of the error if one occurs.\">ErrorDesc()</a> ). </p>\n<p>But if you prefer the ErrorId, this function will fetch it. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"af30efc75e804aa2e92fb8be3a8cb676e\"></a><!-- doxytag: member=\"TiXmlDocument::ErrorRow\" ref=\"af30efc75e804aa2e92fb8be3a8cb676e\" args=\"() const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int TiXmlDocument::ErrorRow </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const<code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Returns the location (if known) of the error. </p>\n<p>The first column is column 1, and the first row is row 1. A value of 0 means the row and column wasn't applicable (memory errors, for example, have no row/column) or the parser lost the error. (An error in the error reporting, in that case.)</p>\n<dl class=\"see\"><dt><b>See also:</b></dt><dd><a class=\"el\" href=\"classTiXmlDocument.html#a51dac56316f89b35bdb7d0d433ba988e\" title=\"SetTabSize() allows the error reporting functions (ErrorRow() and ErrorCol()) to...\">SetTabSize</a>, <a class=\"el\" href=\"classTiXmlBase.html#a024bceb070188df92c2a8d8852dd0853\" title=\"Return the position, in the original source file, of this node or attribute.\">Row</a>, <a class=\"el\" href=\"classTiXmlBase.html#ab54bfb9b70fe6dd276e7b279cab7f003\" title=\"See Row().\">Column</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a18ae6ed34fed7991ebc220862dfac884\"></a><!-- doxytag: member=\"TiXmlDocument::LoadFile\" ref=\"a18ae6ed34fed7991ebc220862dfac884\" args=\"(const std::string &amp;filename, TiXmlEncoding encoding=TIXML_DEFAULT_ENCODING)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool TiXmlDocument::LoadFile </td>\n          <td>(</td>\n          <td class=\"paramtype\">const std::string &amp;&nbsp;</td>\n          <td class=\"paramname\"> <em>filename</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">TiXmlEncoding&nbsp;</td>\n          <td class=\"paramname\"> <em>encoding</em> = <code>TIXML_DEFAULT_ENCODING</code></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"></td><td valign=\"top\"><em>encoding</em>&nbsp;</td><td>STL std::string version. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>References <a class=\"el\" href=\"classTiXmlDocument.html#a4c852a889c02cf251117fd1d9fe1845f\">LoadFile()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a41f6fe7200864d1dca663d230caf8db6\"></a><!-- doxytag: member=\"TiXmlDocument::LoadFile\" ref=\"a41f6fe7200864d1dca663d230caf8db6\" args=\"(FILE *, TiXmlEncoding encoding=TIXML_DEFAULT_ENCODING)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool TiXmlDocument::LoadFile </td>\n          <td>(</td>\n          <td class=\"paramtype\">FILE *&nbsp;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">TiXmlEncoding&nbsp;</td>\n          <td class=\"paramname\"> <em>encoding</em> = <code>TIXML_DEFAULT_ENCODING</code></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Load a file using the given FILE*. </p>\n<p>Returns true if successful. Note that this method doesn't stream - the entire object pointed at by the FILE* will be interpreted as an XML file. TinyXML doesn't stream in XML from the current file location. Streaming may be added in the future. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a4c852a889c02cf251117fd1d9fe1845f\"></a><!-- doxytag: member=\"TiXmlDocument::LoadFile\" ref=\"a4c852a889c02cf251117fd1d9fe1845f\" args=\"(TiXmlEncoding encoding=TIXML_DEFAULT_ENCODING)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool TiXmlDocument::LoadFile </td>\n          <td>(</td>\n          <td class=\"paramtype\">TiXmlEncoding&nbsp;</td>\n          <td class=\"paramname\"> <em>encoding</em> = <code>TIXML_DEFAULT_ENCODING</code></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Load a file using the current document value. </p>\n<p>Returns true if successful. Will delete any existing document data before loading. </p>\n\n<p>Referenced by <a class=\"el\" href=\"tinyxml_8h_source.html#l01432\">LoadFile()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a17ebabe36926ef398e78dec0d0ad0378\"></a><!-- doxytag: member=\"TiXmlDocument::Parse\" ref=\"a17ebabe36926ef398e78dec0d0ad0378\" args=\"(const char *p, TiXmlParsingData *data=0, TiXmlEncoding encoding=TIXML_DEFAULT_ENCODING)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual const char* TiXmlDocument::Parse </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&nbsp;</td>\n          <td class=\"paramname\"> <em>p</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">TiXmlParsingData *&nbsp;</td>\n          <td class=\"paramname\"> <em>data</em> = <code>0</code>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">TiXmlEncoding&nbsp;</td>\n          <td class=\"paramname\"> <em>encoding</em> = <code>TIXML_DEFAULT_ENCODING</code></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td><code> [virtual]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Parse the given null terminated block of xml data. </p>\n<p>Passing in an encoding to this method (either TIXML_ENCODING_LEGACY or TIXML_ENCODING_UTF8 will force TinyXml to use that encoding, regardless of what TinyXml might otherwise try to detect. </p>\n\n<p>Implements <a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"af08389ec70ee9b2de7f800e206a18510\"></a><!-- doxytag: member=\"TiXmlDocument::Print\" ref=\"af08389ec70ee9b2de7f800e206a18510\" args=\"() const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void TiXmlDocument::Print </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const<code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Write the document to standard out using formatted printing (\"pretty print\"). </p>\n\n<p>References <a class=\"el\" href=\"tinyxml_8h_source.html#l01519\">Print()</a>.</p>\n\n<p>Referenced by <a class=\"el\" href=\"tinyxml_8h_source.html#l01519\">Print()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad09d17927f908f40efb406af2fb873be\"></a><!-- doxytag: member=\"TiXmlDocument::RootElement\" ref=\"ad09d17927f908f40efb406af2fb873be\" args=\"() const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const <a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a>* TiXmlDocument::RootElement </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const<code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Get the root element -- the only top level element -- of the document. </p>\n<p>In well formed XML, there should only be one. TinyXml is tolerant of multiple elements at the document level. </p>\n\n<p>References <a class=\"el\" href=\"classTiXmlNode.html#af4fb652f6bd79ae0d5ce7d0f7d3c0fba\">TiXmlNode::FirstChildElement()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a51dac56316f89b35bdb7d0d433ba988e\"></a><!-- doxytag: member=\"TiXmlDocument::SetTabSize\" ref=\"a51dac56316f89b35bdb7d0d433ba988e\" args=\"(int _tabsize)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void TiXmlDocument::SetTabSize </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>_tabsize</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p><a class=\"el\" href=\"classTiXmlDocument.html#a51dac56316f89b35bdb7d0d433ba988e\" title=\"SetTabSize() allows the error reporting functions (ErrorRow() and ErrorCol()) to...\">SetTabSize()</a> allows the error reporting functions (<a class=\"el\" href=\"classTiXmlDocument.html#af30efc75e804aa2e92fb8be3a8cb676e\" title=\"Returns the location (if known) of the error.\">ErrorRow()</a> and <a class=\"el\" href=\"classTiXmlDocument.html#aa90bc630ee5203c6109ca5fad3323649\" title=\"The column where the error occured. See ErrorRow().\">ErrorCol()</a>) to report the correct values for row and column. </p>\n<p>It does not change the output or input in any way.</p>\n<p>By calling this method, with a tab size greater than 0, the row and column of each node and attribute is stored when the file is loaded. Very useful for tracking the DOM back in to the source file.</p>\n<p>The tab size is required for calculating the location of nodes. If not set, the default of 4 is used. The tabsize is set per document. Setting the tabsize to 0 disables row/column tracking.</p>\n<p>Note that row and column tracking is not supported when using operator&gt;&gt;.</p>\n<p>The tab size needs to be enabled before the parse or load. Correct usage: </p>\n<div class=\"fragment\"><pre class=\"fragment\">\n\t\tTiXmlDocument doc;\n\t\tdoc.SetTabSize( 8 );\n\t\tdoc.Load( \"myfile.xml\" );\n\t\t</pre></div><dl class=\"see\"><dt><b>See also:</b></dt><dd><a class=\"el\" href=\"classTiXmlBase.html#a024bceb070188df92c2a8d8852dd0853\" title=\"Return the position, in the original source file, of this node or attribute.\">Row</a>, <a class=\"el\" href=\"classTiXmlBase.html#ab54bfb9b70fe6dd276e7b279cab7f003\" title=\"See Row().\">Column</a> </dd></dl>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a></li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlElement-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlElement Member List</h1>This is the complete list of members for <a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a>, including all inherited members.<table>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#a71a81b2afb0d42be1543d1c404dee6f5\">Accept</a>(TiXmlVisitor *visitor) const </td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td><code> [virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#ae419a442a9701a62b0c3d8fd1cbdd12d\">Attribute</a>(const char *name) const </td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#a0ed8348fdc56b72a6b4900ce5bac1849\">Attribute</a>(const char *name, int *i) const </td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#aeaff99d4f0ea5b34f7aee202aad457ba\">Attribute</a>(const char *name, double *d) const </td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a708e7f953df61d4d2d12f73171550a4b\">Clear</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#aa464535ea1994db337cb6a8ce4b588b5\">Clone</a>() const </td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td><code> [virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ab54bfb9b70fe6dd276e7b279cab7f003\">Column</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a6bd8c315c1acb09e34107b8736505948\">EncodeString</a>(const TIXML_STRING &amp;str, TIXML_STRING *out)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#a516054c9073647d6cb29b6abe9fa0592\">FirstAttribute</a>() const </td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a44c8eee26bbe2d1b2762038df9dde2f0\">FirstChild</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1f05828d023150706eeb16d6fb3f6355\">FirstChild</a>(const char *value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#abc8bf32be6419ec453a731868de19554\">FirstChild</a>(const char *_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a07f6200a5956c723c5b52d70f29c46f6\">FirstChild</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a10d2669ccb5e29e02fcb0e4408685ef6\">FirstChild</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#af4fb652f6bd79ae0d5ce7d0f7d3c0fba\">FirstChildElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#accda2c6b45c25bb5a6f9c3407a644e61\">FirstChildElement</a>(const char *_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a327ad4bbd90073c5dfc931b07314f5f7\">FirstChildElement</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a7f1d7291880534c1e5cdeb392d8c1f45\">FirstChildElement</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a80e397fa973cf5323e33b07154b024f3\">GetDocument</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#af3282294986cdb216646ea1f67af2c87\">GetText</a>() const </td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a6559a530ca6763fc301a14d77ed28c17\">GetUserData</a>()</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ad0120210e4680ef2088601753ce0ede4\">GetUserData</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ad9b75e54ec19301c8b4d5ff583d0b3d5\">InsertAfterChild</a>(TiXmlNode *afterThis, const TiXmlNode &amp;addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a0c146fa2fff0157b681594102f48cbc7\">InsertBeforeChild</a>(TiXmlNode *beforeThis, const TiXmlNode &amp;addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ad7d4630e1a2a916edda16be22448a8ba\">InsertEndChild</a>(const TiXmlNode &amp;addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ad4b1472531c647a25b1840a87ae42438\">IsWhiteSpaceCondensed</a>()</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline, static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a8621196ba3705fa226bef4a761cc51b6\">IterateChildren</a>(const TiXmlNode *previous) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#adfaef35a076b9343adc1420757376c39\">IterateChildren</a>(const char *value, const TiXmlNode *previous) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1cbaaf8e82c09ad763d52616d75724df\">IterateChildren</a>(const std::string &amp;_value, const TiXmlNode *previous) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a16e9ad53e2f5445b14bf325c90aa862c\">IterateChildren</a>(const std::string &amp;_value, const TiXmlNode *previous)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#a86191b49f9177be132b85b14655f1381\">LastAttribute</a>() const </td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a6432d2b2495f6caf9cb4278df706a031\">LastChild</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#abad5bf1059c48127b958711ef89e8e5d\">LastChild</a>(const char *_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a256d0cdbfcfeccae83f3a1c9747a8b63\">LastChild</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a69772c9202f70553f940b15c06b07be3\">LastChild</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a5d29442ae46de6d0168429156197bfc6\">LinkEndChild</a>(TiXmlNode *addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1b94d2f7fa7ab25a5a8e8d4340c449c9\">NextSibling</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1757c1f4d01e8c9596ffdbd561c76aea\">NextSibling</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#af854baeba384f5fe9859f5aee03b548e\">NextSibling</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a2e61c0b89a77e36a0e8c60490003cb46\">NextSibling</a>(const char *) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a73acf929d49d10bd0e5fb3d31b0372d1\">NextSiblingElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a071ba77fd7ab79402fa84b7e9b8607b3\">NextSiblingElement</a>(const char *) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a7572d0af9d1e696ee3f05d8bb5ebb463\">NextSiblingElement</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a506958e34406729a4e4c5326ea39d081\">NextSiblingElement</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#aeed21ad30630ef6e7faf096127edc9f3\">NoChildren</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a836eded4920ab9e9ef28496f48cd95a2\">NodeType</a> enum name</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a86cd49cfb17a844c0010b3136ac966c7\">operator&lt;&lt;</a>(std::ostream &amp;out, const TiXmlNode &amp;base)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [friend]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a52ef17e7080df2490cf87bde380685ab\">operator&lt;&lt;</a>(std::string &amp;out, const TiXmlNode &amp;base)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [friend]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ab57bd426563c926844f65a78412e18b9\">operator&gt;&gt;</a>(std::istream &amp;in, TiXmlNode &amp;base)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [friend]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ab643043132ffd794f8602685d34a982e\">Parent</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ac2cd892768726270e511b2ab32de4d10\">PreviousSibling</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a5bdd49327eec1e609b7d22af706b8316\">PreviousSibling</a>(const char *) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a658276f57d35d5d4256d1dc1a2c398ab\">PreviousSibling</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#acc8a0434c7f401d4a3b6dee77c1a5912\">PreviousSibling</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#afbf52736e70fc91ec9d760721d6f4fd2\">Print</a>(FILE *cfile, int depth) const </td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td><code> [virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#af4a1d3f88c28eb0f3115dc39ebd83fff\">QueryBoolAttribute</a>(const char *name, bool *_value) const </td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#a898d7730ecc341f0bffc7a9dadbf1ce7\">QueryDoubleAttribute</a>(const char *name, double *_value) const </td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#aa04d3af11601ef5a5f88295203a843be\">QueryFloatAttribute</a>(const char *name, float *_value) const </td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#aea0bfe471380f281c5945770ddbf52b9\">QueryIntAttribute</a>(const char *name, int *_value) const </td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#a14321ac360efe906ed449d9db3fd9961\">QueryStringAttribute</a>(const char *name, std::string *_value) const </td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#ae48df644f890ab86fa19839ac401f00d\">QueryUnsignedAttribute</a>(const char *name, unsigned *_value) const </td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#ae3b9a03b0a56663a40801c7256683576\">QueryValueAttribute</a>(const std::string &amp;name, T *outValue) const </td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#a56979767deca794376b1dfa69a525b2a\">RemoveAttribute</a>(const char *name)</td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#a1afa6aea716511326a608e4c05df4f3a\">RemoveAttribute</a>(const std::string &amp;name)</td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ae19d8510efc90596552f4feeac9a8fbf\">RemoveChild</a>(TiXmlNode *removeThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a0c49e739a17b9938050c22cd89617fbd\">ReplaceChild</a>(TiXmlNode *replaceThis, const TiXmlNode &amp;withThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a024bceb070188df92c2a8d8852dd0853\">Row</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#abf0b3bd7f0e4c746a89ec6e7f101fc32\">SetAttribute</a>(const char *name, const char *_value)</td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#a80ed65b1d194c71c6c9986ae42337d7d\">SetAttribute</a>(const std::string &amp;name, const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#a6f18d54fbe25bbc527936ee65363b3c5\">SetAttribute</a>(const std::string &amp;name, int _value)</td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#ace6f4be75e373726d4774073d666d1a7\">SetAttribute</a>(const char *name, int value)</td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a0f799ec645bfb8d8a969e83478f379c1\">SetCondenseWhiteSpace</a>(bool condense)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline, static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#a0d1dd975d75496778177e35abfe0ec0b\">SetDoubleAttribute</a>(const char *name, double value)</td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ac6b3e0f790930d4970ec30764e937b5d\">SetUserData</a>(void *user)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a2a38329ca5d3f28f98ce932b8299ae90\">SetValue</a>(const char *_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a2598d5f448042c1abbeae4503dd45ff2\">SetValue</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#a01bc3ab372d35da08efcbbe65ad90c60\">TiXmlElement</a>(const char *in_value)</td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#a40fc2e3c1a955e2f78e1a32350d180e7\">TiXmlElement</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#aa0a5086f9eaee910bbfdc7f975e26574\">ToComment</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a383e06a0787f7063953934867990f849\">ToComment</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a9f43e6984fc7d4afd6eb32714c6b7b72\">ToDeclaration</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a4027136ca820ff4a636b607231b6a6df\">ToDeclaration</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a8a4cda4b15c29f64cff419309aebed08\">ToDocument</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a6a4c8ac28ee7a745d059db6691e03bae\">ToDocument</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#ac5b8d0e25fa23fd9acbb6d146082901c\">ToElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlElement.html#a9def86337ea7a755eb41cac980f60c7a\">ToElement</a>()</td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a95a46a52c525992d6b4ee08beb14cd69\">ToText</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a3ddfbcac78fbea041fad57e5c6d60a03\">ToText</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#afd7205cf31d7a376929f8a36930627a2\">ToUnknown</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a06de5af852668c7e4af0d09c205f0b0d\">ToUnknown</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a57b99d5c97d67a42b9752f5210a1ba5e\">Type</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ab242c01590191f644569fa89a080d97c\">userData</a></td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [protected]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a77943eb90d12c2892b1337a9f5918b41\">Value</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a6d9e505619d39bf50bfd9609c9169ea5\">ValueStr</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n</table></div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlElement.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: TiXmlElement Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlElement Class Reference</h1><!-- doxytag: class=\"TiXmlElement\" --><!-- doxytag: inherits=\"TiXmlNode\" -->\n<p>The element is a container class.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for TiXmlElement:</div>\n<div class=\"dynsection\">\n <div class=\"center\">\n  <img src=\"classTiXmlElement.png\" usemap=\"#TiXmlElement_map\" alt=\"\"/>\n  <map id=\"TiXmlElement_map\" name=\"TiXmlElement_map\">\n<area href=\"classTiXmlNode.html\" alt=\"TiXmlNode\" shape=\"rect\" coords=\"0,56,87,80\"/>\n<area href=\"classTiXmlBase.html\" alt=\"TiXmlBase\" shape=\"rect\" coords=\"0,0,87,24\"/>\n</map>\n </div>\n</div>\n\n<p><a href=\"classTiXmlElement-members.html\">List of all members.</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Public Member Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a01bc3ab372d35da08efcbbe65ad90c60\"></a><!-- doxytag: member=\"TiXmlElement::TiXmlElement\" ref=\"a01bc3ab372d35da08efcbbe65ad90c60\" args=\"(const char *in_value)\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#a01bc3ab372d35da08efcbbe65ad90c60\">TiXmlElement</a> (const char *in_value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Construct an element. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a40fc2e3c1a955e2f78e1a32350d180e7\"></a><!-- doxytag: member=\"TiXmlElement::TiXmlElement\" ref=\"a40fc2e3c1a955e2f78e1a32350d180e7\" args=\"(const std::string &amp;_value)\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#a40fc2e3c1a955e2f78e1a32350d180e7\">TiXmlElement</a> (const std::string &amp;_value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">std::string constructor. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae419a442a9701a62b0c3d8fd1cbdd12d\"></a><!-- doxytag: member=\"TiXmlElement::Attribute\" ref=\"ae419a442a9701a62b0c3d8fd1cbdd12d\" args=\"(const char *name) const \" -->\nconst char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#ae419a442a9701a62b0c3d8fd1cbdd12d\">Attribute</a> (const char *name) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Given an attribute name, <a class=\"el\" href=\"classTiXmlElement.html#ae419a442a9701a62b0c3d8fd1cbdd12d\" title=\"Given an attribute name, Attribute() returns the value for the attribute of that...\">Attribute()</a> returns the value for the attribute of that name, or null if none exists. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#a0ed8348fdc56b72a6b4900ce5bac1849\">Attribute</a> (const char *name, int *i) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Given an attribute name, <a class=\"el\" href=\"classTiXmlElement.html#ae419a442a9701a62b0c3d8fd1cbdd12d\" title=\"Given an attribute name, Attribute() returns the value for the attribute of that...\">Attribute()</a> returns the value for the attribute of that name, or null if none exists.  <a href=\"#a0ed8348fdc56b72a6b4900ce5bac1849\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#aeaff99d4f0ea5b34f7aee202aad457ba\">Attribute</a> (const char *name, double *d) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Given an attribute name, <a class=\"el\" href=\"classTiXmlElement.html#ae419a442a9701a62b0c3d8fd1cbdd12d\" title=\"Given an attribute name, Attribute() returns the value for the attribute of that...\">Attribute()</a> returns the value for the attribute of that name, or null if none exists.  <a href=\"#aeaff99d4f0ea5b34f7aee202aad457ba\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#aea0bfe471380f281c5945770ddbf52b9\">QueryIntAttribute</a> (const char *name, int *_value) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">QueryIntAttribute examines the attribute - it is an alternative to the <a class=\"el\" href=\"classTiXmlElement.html#ae419a442a9701a62b0c3d8fd1cbdd12d\" title=\"Given an attribute name, Attribute() returns the value for the attribute of that...\">Attribute()</a> method with richer error checking.  <a href=\"#aea0bfe471380f281c5945770ddbf52b9\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae48df644f890ab86fa19839ac401f00d\"></a><!-- doxytag: member=\"TiXmlElement::QueryUnsignedAttribute\" ref=\"ae48df644f890ab86fa19839ac401f00d\" args=\"(const char *name, unsigned *_value) const \" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#ae48df644f890ab86fa19839ac401f00d\">QueryUnsignedAttribute</a> (const char *name, unsigned *_value) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">QueryUnsignedAttribute examines the attribute - see <a class=\"el\" href=\"classTiXmlElement.html#aea0bfe471380f281c5945770ddbf52b9\" title=\"QueryIntAttribute examines the attribute - it is an alternative to the Attribute()...\">QueryIntAttribute()</a>. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#af4a1d3f88c28eb0f3115dc39ebd83fff\">QueryBoolAttribute</a> (const char *name, bool *_value) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">QueryBoolAttribute examines the attribute - see <a class=\"el\" href=\"classTiXmlElement.html#aea0bfe471380f281c5945770ddbf52b9\" title=\"QueryIntAttribute examines the attribute - it is an alternative to the Attribute()...\">QueryIntAttribute()</a>.  <a href=\"#af4a1d3f88c28eb0f3115dc39ebd83fff\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a898d7730ecc341f0bffc7a9dadbf1ce7\"></a><!-- doxytag: member=\"TiXmlElement::QueryDoubleAttribute\" ref=\"a898d7730ecc341f0bffc7a9dadbf1ce7\" args=\"(const char *name, double *_value) const \" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#a898d7730ecc341f0bffc7a9dadbf1ce7\">QueryDoubleAttribute</a> (const char *name, double *_value) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">QueryDoubleAttribute examines the attribute - see <a class=\"el\" href=\"classTiXmlElement.html#aea0bfe471380f281c5945770ddbf52b9\" title=\"QueryIntAttribute examines the attribute - it is an alternative to the Attribute()...\">QueryIntAttribute()</a>. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa04d3af11601ef5a5f88295203a843be\"></a><!-- doxytag: member=\"TiXmlElement::QueryFloatAttribute\" ref=\"aa04d3af11601ef5a5f88295203a843be\" args=\"(const char *name, float *_value) const \" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#aa04d3af11601ef5a5f88295203a843be\">QueryFloatAttribute</a> (const char *name, float *_value) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">QueryFloatAttribute examines the attribute - see <a class=\"el\" href=\"classTiXmlElement.html#aea0bfe471380f281c5945770ddbf52b9\" title=\"QueryIntAttribute examines the attribute - it is an alternative to the Attribute()...\">QueryIntAttribute()</a>. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a14321ac360efe906ed449d9db3fd9961\"></a><!-- doxytag: member=\"TiXmlElement::QueryStringAttribute\" ref=\"a14321ac360efe906ed449d9db3fd9961\" args=\"(const char *name, std::string *_value) const \" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#a14321ac360efe906ed449d9db3fd9961\">QueryStringAttribute</a> (const char *name, std::string *_value) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">QueryStringAttribute examines the attribute - see <a class=\"el\" href=\"classTiXmlElement.html#aea0bfe471380f281c5945770ddbf52b9\" title=\"QueryIntAttribute examines the attribute - it is an alternative to the Attribute()...\">QueryIntAttribute()</a>. <br/></td></tr>\n<tr><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#ae3b9a03b0a56663a40801c7256683576\">QueryValueAttribute</a> (const std::string &amp;name, T *outValue) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Template form of the attribute query which will try to read the attribute into the specified type.  <a href=\"#ae3b9a03b0a56663a40801c7256683576\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#abf0b3bd7f0e4c746a89ec6e7f101fc32\">SetAttribute</a> (const char *name, const char *_value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Sets an attribute of name to a given value.  <a href=\"#abf0b3bd7f0e4c746a89ec6e7f101fc32\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#a80ed65b1d194c71c6c9986ae42337d7d\">SetAttribute</a> (const std::string &amp;name, const std::string &amp;_value)</td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6f18d54fbe25bbc527936ee65363b3c5\"></a><!-- doxytag: member=\"TiXmlElement::SetAttribute\" ref=\"a6f18d54fbe25bbc527936ee65363b3c5\" args=\"(const std::string &amp;name, int _value)\" -->\nvoid&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#a6f18d54fbe25bbc527936ee65363b3c5\">SetAttribute</a> (const std::string &amp;name, int _value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">STL std::string form. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#ace6f4be75e373726d4774073d666d1a7\">SetAttribute</a> (const char *name, int value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Sets an attribute of name to a given value.  <a href=\"#ace6f4be75e373726d4774073d666d1a7\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#a0d1dd975d75496778177e35abfe0ec0b\">SetDoubleAttribute</a> (const char *name, double value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Sets an attribute of name to a given value.  <a href=\"#a0d1dd975d75496778177e35abfe0ec0b\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a56979767deca794376b1dfa69a525b2a\"></a><!-- doxytag: member=\"TiXmlElement::RemoveAttribute\" ref=\"a56979767deca794376b1dfa69a525b2a\" args=\"(const char *name)\" -->\nvoid&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#a56979767deca794376b1dfa69a525b2a\">RemoveAttribute</a> (const char *name)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Deletes an attribute with the given name. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1afa6aea716511326a608e4c05df4f3a\"></a><!-- doxytag: member=\"TiXmlElement::RemoveAttribute\" ref=\"a1afa6aea716511326a608e4c05df4f3a\" args=\"(const std::string &amp;name)\" -->\nvoid&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#a1afa6aea716511326a608e4c05df4f3a\">RemoveAttribute</a> (const std::string &amp;name)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">STL std::string form. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a516054c9073647d6cb29b6abe9fa0592\"></a><!-- doxytag: member=\"TiXmlElement::FirstAttribute\" ref=\"a516054c9073647d6cb29b6abe9fa0592\" args=\"() const \" -->\nconst <a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#a516054c9073647d6cb29b6abe9fa0592\">FirstAttribute</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Access the first attribute in this element. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a86191b49f9177be132b85b14655f1381\"></a><!-- doxytag: member=\"TiXmlElement::LastAttribute\" ref=\"a86191b49f9177be132b85b14655f1381\" args=\"() const \" -->\nconst <a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#a86191b49f9177be132b85b14655f1381\">LastAttribute</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Access the last attribute in this element. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#af3282294986cdb216646ea1f67af2c87\">GetText</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Convenience function for easy access to the text inside an element.  <a href=\"#af3282294986cdb216646ea1f67af2c87\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa464535ea1994db337cb6a8ce4b588b5\"></a><!-- doxytag: member=\"TiXmlElement::Clone\" ref=\"aa464535ea1994db337cb6a8ce4b588b5\" args=\"() const \" -->\nvirtual <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#aa464535ea1994db337cb6a8ce4b588b5\">Clone</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Creates a new Element and returns it - the returned element is a copy. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#afbf52736e70fc91ec9d760721d6f4fd2\">Print</a> (FILE *cfile, int depth) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">All TinyXml classes can print themselves to a filestream or the string class (TiXmlString in non-STL mode, std::string in STL mode.  <a href=\"#afbf52736e70fc91ec9d760721d6f4fd2\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac5b8d0e25fa23fd9acbb6d146082901c\"></a><!-- doxytag: member=\"TiXmlElement::ToElement\" ref=\"ac5b8d0e25fa23fd9acbb6d146082901c\" args=\"() const \" -->\nvirtual const <a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#ac5b8d0e25fa23fd9acbb6d146082901c\">ToElement</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9def86337ea7a755eb41cac980f60c7a\"></a><!-- doxytag: member=\"TiXmlElement::ToElement\" ref=\"a9def86337ea7a755eb41cac980f60c7a\" args=\"()\" -->\nvirtual <a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#a9def86337ea7a755eb41cac980f60c7a\">ToElement</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a71a81b2afb0d42be1543d1c404dee6f5\"></a><!-- doxytag: member=\"TiXmlElement::Accept\" ref=\"a71a81b2afb0d42be1543d1c404dee6f5\" args=\"(TiXmlVisitor *visitor) const \" -->\nvirtual bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlElement.html#a71a81b2afb0d42be1543d1c404dee6f5\">Accept</a> (<a class=\"el\" href=\"classTiXmlVisitor.html\">TiXmlVisitor</a> *visitor) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Walk the XML tree visiting this node and all of its children. <br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>The element is a container class. </p>\n<p>It has a value, the element name, and can contain other elements, text, comments, and unknowns. Elements also contain an arbitrary number of attributes. </p>\n<hr/><h2>Member Function Documentation</h2>\n<a class=\"anchor\" id=\"aeaff99d4f0ea5b34f7aee202aad457ba\"></a><!-- doxytag: member=\"TiXmlElement::Attribute\" ref=\"aeaff99d4f0ea5b34f7aee202aad457ba\" args=\"(const char *name, double *d) const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* TiXmlElement::Attribute </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&nbsp;</td>\n          <td class=\"paramname\"> <em>name</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">double *&nbsp;</td>\n          <td class=\"paramname\"> <em>d</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td> const</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Given an attribute name, <a class=\"el\" href=\"classTiXmlElement.html#ae419a442a9701a62b0c3d8fd1cbdd12d\" title=\"Given an attribute name, Attribute() returns the value for the attribute of that...\">Attribute()</a> returns the value for the attribute of that name, or null if none exists. </p>\n<p>If the attribute exists and can be converted to an double, the double value will be put in the return 'd', if 'd' is non-null. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a0ed8348fdc56b72a6b4900ce5bac1849\"></a><!-- doxytag: member=\"TiXmlElement::Attribute\" ref=\"a0ed8348fdc56b72a6b4900ce5bac1849\" args=\"(const char *name, int *i) const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* TiXmlElement::Attribute </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&nbsp;</td>\n          <td class=\"paramname\"> <em>name</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int *&nbsp;</td>\n          <td class=\"paramname\"> <em>i</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td> const</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Given an attribute name, <a class=\"el\" href=\"classTiXmlElement.html#ae419a442a9701a62b0c3d8fd1cbdd12d\" title=\"Given an attribute name, Attribute() returns the value for the attribute of that...\">Attribute()</a> returns the value for the attribute of that name, or null if none exists. </p>\n<p>If the attribute exists and can be converted to an integer, the integer value will be put in the return 'i', if 'i' is non-null. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"af3282294986cdb216646ea1f67af2c87\"></a><!-- doxytag: member=\"TiXmlElement::GetText\" ref=\"af3282294986cdb216646ea1f67af2c87\" args=\"() const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* TiXmlElement::GetText </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Convenience function for easy access to the text inside an element. </p>\n<p>Although easy and concise, <a class=\"el\" href=\"classTiXmlElement.html#af3282294986cdb216646ea1f67af2c87\" title=\"Convenience function for easy access to the text inside an element.\">GetText()</a> is limited compared to getting the <a class=\"el\" href=\"classTiXmlText.html\" title=\"XML text.\">TiXmlText</a> child and accessing it directly.</p>\n<p>If the first child of 'this' is a <a class=\"el\" href=\"classTiXmlText.html\" title=\"XML text.\">TiXmlText</a>, the <a class=\"el\" href=\"classTiXmlElement.html#af3282294986cdb216646ea1f67af2c87\" title=\"Convenience function for easy access to the text inside an element.\">GetText()</a> returns the character string of the Text node, else null is returned.</p>\n<p>This is a convenient method for getting the text of simple contained text: </p>\n<div class=\"fragment\"><pre class=\"fragment\">\n\t\t&lt;foo&gt;This is text&lt;/foo&gt;\n\t\tconst char* str = fooElement-&gt;GetText();\n\t\t</pre></div><p>'str' will be a pointer to \"This is text\".</p>\n<p>Note that this function can be misleading. If the element foo was created from this XML: </p>\n<div class=\"fragment\"><pre class=\"fragment\">\n\t\t&lt;foo&gt;&lt;b&gt;This is text&lt;/b&gt;&lt;/foo&gt; \n\t\t</pre></div><p>then the value of str would be null. The first child node isn't a text node, it is another element. From this XML: </p>\n<div class=\"fragment\"><pre class=\"fragment\">\n\t\t&lt;foo&gt;This is &lt;b&gt;text&lt;/b&gt;&lt;/foo&gt; \n\t\t</pre></div><p> <a class=\"el\" href=\"classTiXmlElement.html#af3282294986cdb216646ea1f67af2c87\" title=\"Convenience function for easy access to the text inside an element.\">GetText()</a> will return \"This is \".</p>\n<p>WARNING: <a class=\"el\" href=\"classTiXmlElement.html#af3282294986cdb216646ea1f67af2c87\" title=\"Convenience function for easy access to the text inside an element.\">GetText()</a> accesses a child node - don't become confused with the similarly named <a class=\"el\" href=\"classTiXmlHandle.html#a9fc739c8a18d160006f82572fc143d13\">TiXmlHandle::Text()</a> and <a class=\"el\" href=\"classTiXmlNode.html#a3ddfbcac78fbea041fad57e5c6d60a03\" title=\"Cast to a more defined type. Will return null if not of the requested type.\">TiXmlNode::ToText()</a> which are safe type casts on the referenced node. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"afbf52736e70fc91ec9d760721d6f4fd2\"></a><!-- doxytag: member=\"TiXmlElement::Print\" ref=\"afbf52736e70fc91ec9d760721d6f4fd2\" args=\"(FILE *cfile, int depth) const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void TiXmlElement::Print </td>\n          <td>(</td>\n          <td class=\"paramtype\">FILE *&nbsp;</td>\n          <td class=\"paramname\"> <em>cfile</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>depth</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td> const<code> [virtual]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>All TinyXml classes can print themselves to a filestream or the string class (TiXmlString in non-STL mode, std::string in STL mode. </p>\n<p>) Either or both cfile and str can be null.</p>\n<p>This is a formatted print, and will insert tabs and newlines.</p>\n<p>(For an unformatted stream, use the &lt;&lt; operator.) </p>\n\n<p>Implements <a class=\"el\" href=\"classTiXmlBase.html#a0de56b3f2ef14c65091a3b916437b512\">TiXmlBase</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"af4a1d3f88c28eb0f3115dc39ebd83fff\"></a><!-- doxytag: member=\"TiXmlElement::QueryBoolAttribute\" ref=\"af4a1d3f88c28eb0f3115dc39ebd83fff\" args=\"(const char *name, bool *_value) const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int TiXmlElement::QueryBoolAttribute </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&nbsp;</td>\n          <td class=\"paramname\"> <em>name</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">bool *&nbsp;</td>\n          <td class=\"paramname\"> <em>_value</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td> const</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>QueryBoolAttribute examines the attribute - see <a class=\"el\" href=\"classTiXmlElement.html#aea0bfe471380f281c5945770ddbf52b9\" title=\"QueryIntAttribute examines the attribute - it is an alternative to the Attribute()...\">QueryIntAttribute()</a>. </p>\n<p>Note that '1', 'true', or 'yes' are considered true, while '0', 'false' and 'no' are considered false. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aea0bfe471380f281c5945770ddbf52b9\"></a><!-- doxytag: member=\"TiXmlElement::QueryIntAttribute\" ref=\"aea0bfe471380f281c5945770ddbf52b9\" args=\"(const char *name, int *_value) const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int TiXmlElement::QueryIntAttribute </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&nbsp;</td>\n          <td class=\"paramname\"> <em>name</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int *&nbsp;</td>\n          <td class=\"paramname\"> <em>_value</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td> const</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>QueryIntAttribute examines the attribute - it is an alternative to the <a class=\"el\" href=\"classTiXmlElement.html#ae419a442a9701a62b0c3d8fd1cbdd12d\" title=\"Given an attribute name, Attribute() returns the value for the attribute of that...\">Attribute()</a> method with richer error checking. </p>\n<p>If the attribute is an integer, it is stored in 'value' and the call returns TIXML_SUCCESS. If it is not an integer, it returns TIXML_WRONG_TYPE. If the attribute does not exist, then TIXML_NO_ATTRIBUTE is returned. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ae3b9a03b0a56663a40801c7256683576\"></a><!-- doxytag: member=\"TiXmlElement::QueryValueAttribute\" ref=\"ae3b9a03b0a56663a40801c7256683576\" args=\"(const std::string &amp;name, T *outValue) const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int TiXmlElement::QueryValueAttribute </td>\n          <td>(</td>\n          <td class=\"paramtype\">const std::string &amp;&nbsp;</td>\n          <td class=\"paramname\"> <em>name</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T *&nbsp;</td>\n          <td class=\"paramname\"> <em>outValue</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td> const<code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Template form of the attribute query which will try to read the attribute into the specified type. </p>\n<p>Very easy, very powerful, but be careful to make sure to call this with the correct type.</p>\n<p>NOTE: This method doesn't work correctly for 'string' types that contain spaces.</p>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd>TIXML_SUCCESS, TIXML_WRONG_TYPE, or TIXML_NO_ATTRIBUTE </dd></dl>\n\n<p>References <a class=\"el\" href=\"tinyxml_8h_source.html#l00814\">TiXmlAttribute::ValueStr()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ace6f4be75e373726d4774073d666d1a7\"></a><!-- doxytag: member=\"TiXmlElement::SetAttribute\" ref=\"ace6f4be75e373726d4774073d666d1a7\" args=\"(const char *name, int value)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void TiXmlElement::SetAttribute </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&nbsp;</td>\n          <td class=\"paramname\"> <em>name</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>value</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Sets an attribute of name to a given value. </p>\n<p>The attribute will be created if it does not exist, or changed if it does. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a80ed65b1d194c71c6c9986ae42337d7d\"></a><!-- doxytag: member=\"TiXmlElement::SetAttribute\" ref=\"a80ed65b1d194c71c6c9986ae42337d7d\" args=\"(const std::string &amp;name, const std::string &amp;_value)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void TiXmlElement::SetAttribute </td>\n          <td>(</td>\n          <td class=\"paramtype\">const std::string &amp;&nbsp;</td>\n          <td class=\"paramname\"> <em>name</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const std::string &amp;&nbsp;</td>\n          <td class=\"paramname\"> <em>_value</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n<p>STL std::string form. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"abf0b3bd7f0e4c746a89ec6e7f101fc32\"></a><!-- doxytag: member=\"TiXmlElement::SetAttribute\" ref=\"abf0b3bd7f0e4c746a89ec6e7f101fc32\" args=\"(const char *name, const char *_value)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void TiXmlElement::SetAttribute </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&nbsp;</td>\n          <td class=\"paramname\"> <em>name</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&nbsp;</td>\n          <td class=\"paramname\"> <em>_value</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Sets an attribute of name to a given value. </p>\n<p>The attribute will be created if it does not exist, or changed if it does. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a0d1dd975d75496778177e35abfe0ec0b\"></a><!-- doxytag: member=\"TiXmlElement::SetDoubleAttribute\" ref=\"a0d1dd975d75496778177e35abfe0ec0b\" args=\"(const char *name, double value)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void TiXmlElement::SetDoubleAttribute </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&nbsp;</td>\n          <td class=\"paramname\"> <em>name</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">double&nbsp;</td>\n          <td class=\"paramname\"> <em>value</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Sets an attribute of name to a given value. </p>\n<p>The attribute will be created if it does not exist, or changed if it does. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a></li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlHandle-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlHandle Member List</h1>This is the complete list of members for <a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a>, including all inherited members.<table>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlHandle.html#a072492b4be1acdb0db2d03cd8f71ccc4\">Child</a>(const char *value, int index) const </td><td><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlHandle.html#af9cf6a7d08a5da94a8924425ad0cd5ac\">Child</a>(int index) const </td><td><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlHandle.html#a979a3f850984a176ee884e394c7eed2d\">ChildElement</a>(const char *value, int index) const </td><td><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlHandle.html#a8786475b9d1f1518492e3a46704c7ef0\">ChildElement</a>(int index) const </td><td><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlHandle.html#acb5fe8388a526289ea65e817a51e05e7\">Element</a>() const </td><td><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlHandle.html#acdb1faaf88a700b40ca2c8d9aee21139\">FirstChild</a>() const </td><td><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlHandle.html#a8c61f64ae9365d89c264f289085541f8\">FirstChild</a>(const char *value) const </td><td><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlHandle.html#a24d1112e995e937e4dddb202d4113d4a\">FirstChildElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlHandle.html#af0aea751320f5e430fac6f8fff3b8dd4\">FirstChildElement</a>(const char *value) const </td><td><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlHandle.html#ab44b723a8dc9af72838a303c079d0376\">Node</a>() const </td><td><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlHandle.html#a9fc739c8a18d160006f82572fc143d13\">Text</a>() const </td><td><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlHandle.html#aba18fd7bdefb942ecdea4bf4b8e29ec8\">TiXmlHandle</a>(TiXmlNode *_node)</td><td><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlHandle.html#a236d7855e1e56ccc7b980630c48c7fd7\">TiXmlHandle</a>(const TiXmlHandle &amp;ref)</td><td><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlHandle.html#abc6e7ed383a5fe1e52b0c0004b457b9e\">ToElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlHandle.html#af678e5088e83be67baf76f699756f2c3\">ToNode</a>() const </td><td><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlHandle.html#a4ac53a652296203a5b5e13854d923586\">ToText</a>() const </td><td><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlHandle.html#a1381c17507a130767b1e23afc93b3674\">ToUnknown</a>() const </td><td><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlHandle.html#a49675b74357ba2aae124657a9a1ef465\">Unknown</a>() const </td><td><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a></td><td><code> [inline]</code></td></tr>\n</table></div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlHandle.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: TiXmlHandle Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlHandle Class Reference</h1><!-- doxytag: class=\"TiXmlHandle\" -->\n<p>A <a class=\"el\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a> is a class that wraps a node pointer with null checks; this is an incredibly useful thing.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a>&gt;</code></p>\n\n<p><a href=\"classTiXmlHandle-members.html\">List of all members.</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Public Member Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aba18fd7bdefb942ecdea4bf4b8e29ec8\"></a><!-- doxytag: member=\"TiXmlHandle::TiXmlHandle\" ref=\"aba18fd7bdefb942ecdea4bf4b8e29ec8\" args=\"(TiXmlNode *_node)\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlHandle.html#aba18fd7bdefb942ecdea4bf4b8e29ec8\">TiXmlHandle</a> (<a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *_node)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a handle from any node (at any depth of the tree.) This can be a null pointer. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a236d7855e1e56ccc7b980630c48c7fd7\"></a><!-- doxytag: member=\"TiXmlHandle::TiXmlHandle\" ref=\"a236d7855e1e56ccc7b980630c48c7fd7\" args=\"(const TiXmlHandle &amp;ref)\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlHandle.html#a236d7855e1e56ccc7b980630c48c7fd7\">TiXmlHandle</a> (const <a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a> &amp;ref)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Copy constructor. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acdb1faaf88a700b40ca2c8d9aee21139\"></a><!-- doxytag: member=\"TiXmlHandle::FirstChild\" ref=\"acdb1faaf88a700b40ca2c8d9aee21139\" args=\"() const \" -->\n<a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlHandle.html#acdb1faaf88a700b40ca2c8d9aee21139\">FirstChild</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return a handle to the first child node. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8c61f64ae9365d89c264f289085541f8\"></a><!-- doxytag: member=\"TiXmlHandle::FirstChild\" ref=\"a8c61f64ae9365d89c264f289085541f8\" args=\"(const char *value) const \" -->\n<a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlHandle.html#a8c61f64ae9365d89c264f289085541f8\">FirstChild</a> (const char *value) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return a handle to the first child node with the given name. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a24d1112e995e937e4dddb202d4113d4a\"></a><!-- doxytag: member=\"TiXmlHandle::FirstChildElement\" ref=\"a24d1112e995e937e4dddb202d4113d4a\" args=\"() const \" -->\n<a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlHandle.html#a24d1112e995e937e4dddb202d4113d4a\">FirstChildElement</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return a handle to the first child element. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af0aea751320f5e430fac6f8fff3b8dd4\"></a><!-- doxytag: member=\"TiXmlHandle::FirstChildElement\" ref=\"af0aea751320f5e430fac6f8fff3b8dd4\" args=\"(const char *value) const \" -->\n<a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlHandle.html#af0aea751320f5e430fac6f8fff3b8dd4\">FirstChildElement</a> (const char *value) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return a handle to the first child element with the given name. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlHandle.html#a072492b4be1acdb0db2d03cd8f71ccc4\">Child</a> (const char *value, int index) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return a handle to the \"index\" child with the given name.  <a href=\"#a072492b4be1acdb0db2d03cd8f71ccc4\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlHandle.html#af9cf6a7d08a5da94a8924425ad0cd5ac\">Child</a> (int index) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return a handle to the \"index\" child.  <a href=\"#af9cf6a7d08a5da94a8924425ad0cd5ac\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlHandle.html#a979a3f850984a176ee884e394c7eed2d\">ChildElement</a> (const char *value, int index) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return a handle to the \"index\" child element with the given name.  <a href=\"#a979a3f850984a176ee884e394c7eed2d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlHandle.html#a8786475b9d1f1518492e3a46704c7ef0\">ChildElement</a> (int index) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return a handle to the \"index\" child element.  <a href=\"#a8786475b9d1f1518492e3a46704c7ef0\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlHandle.html#af678e5088e83be67baf76f699756f2c3\">ToNode</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return the handle as a <a class=\"el\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>.  <a href=\"#af678e5088e83be67baf76f699756f2c3\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlHandle.html#abc6e7ed383a5fe1e52b0c0004b457b9e\">ToElement</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return the handle as a <a class=\"el\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>.  <a href=\"#abc6e7ed383a5fe1e52b0c0004b457b9e\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classTiXmlText.html\">TiXmlText</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlHandle.html#a4ac53a652296203a5b5e13854d923586\">ToText</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return the handle as a <a class=\"el\" href=\"classTiXmlText.html\" title=\"XML text.\">TiXmlText</a>.  <a href=\"#a4ac53a652296203a5b5e13854d923586\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classTiXmlUnknown.html\">TiXmlUnknown</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlHandle.html#a1381c17507a130767b1e23afc93b3674\">ToUnknown</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return the handle as a <a class=\"el\" href=\"classTiXmlUnknown.html\" title=\"Any tag that tinyXml doesn&#39;t recognize is saved as an unknown.\">TiXmlUnknown</a>.  <a href=\"#a1381c17507a130767b1e23afc93b3674\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlHandle.html#ab44b723a8dc9af72838a303c079d0376\">Node</a> () const </td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlHandle.html#acb5fe8388a526289ea65e817a51e05e7\">Element</a> () const </td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classTiXmlText.html\">TiXmlText</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlHandle.html#a9fc739c8a18d160006f82572fc143d13\">Text</a> () const </td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classTiXmlUnknown.html\">TiXmlUnknown</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlHandle.html#a49675b74357ba2aae124657a9a1ef465\">Unknown</a> () const </td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>A <a class=\"el\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a> is a class that wraps a node pointer with null checks; this is an incredibly useful thing. </p>\n<p>Note that <a class=\"el\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a> is not part of the TinyXml DOM structure. It is a separate utility class.</p>\n<p>Take an example: </p>\n<div class=\"fragment\"><pre class=\"fragment\">\n\t&lt;Document&gt;\n\t\t&lt;Element attributeA = \"valueA\"&gt;\n\t\t\t&lt;Child attributeB = \"value1\" /&gt;\n\t\t\t&lt;Child attributeB = \"value2\" /&gt;\n\t\t&lt;/Element&gt;\n\t&lt;Document&gt;\n\t</pre></div><p>Assuming you want the value of \"attributeB\" in the 2nd \"Child\" element, it's very easy to write a *lot* of code that looks like:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n\tTiXmlElement* root = document.FirstChildElement( \"Document\" );\n\tif ( root )\n\t{\n\t\tTiXmlElement* element = root-&gt;FirstChildElement( \"Element\" );\n\t\tif ( element )\n\t\t{\n\t\t\tTiXmlElement* child = element-&gt;FirstChildElement( \"Child\" );\n\t\t\tif ( child )\n\t\t\t{\n\t\t\t\tTiXmlElement* child2 = child-&gt;NextSiblingElement( \"Child\" );\n\t\t\t\tif ( child2 )\n\t\t\t\t{\n\t\t\t\t\t// Finally do something useful.\n\t</pre></div><p>And that doesn't even cover \"else\" cases. <a class=\"el\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a> addresses the verbosity of such code. A <a class=\"el\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a> checks for null pointers so it is perfectly safe and correct to use:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n\tTiXmlHandle docHandle( &amp;document );\n\tTiXmlElement* child2 = docHandle.FirstChild( \"Document\" ).FirstChild( \"Element\" ).Child( \"Child\", 1 ).ToElement();\n\tif ( child2 )\n\t{\n\t\t// do something useful\n\t</pre></div><p>Which is MUCH more concise and useful.</p>\n<p>It is also safe to copy handles - internally they are nothing more than node pointers. </p>\n<div class=\"fragment\"><pre class=\"fragment\">\n\tTiXmlHandle handleCopy = handle;\n\t</pre></div><p>What they should not be used for is iteration:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n\tint i=0; \n\twhile ( true )\n\t{\n\t\tTiXmlElement* child = docHandle.FirstChild( \"Document\" ).FirstChild( \"Element\" ).Child( \"Child\", i ).ToElement();\n\t\tif ( !child )\n\t\t\tbreak;\n\t\t// do something\n\t\t++i;\n\t}\n\t</pre></div><p>It seems reasonable, but it is in fact two embedded while loops. The Child method is a linear walk to find the element, so this code would iterate much more than it needs to. Instead, prefer:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n\tTiXmlElement* child = docHandle.FirstChild( \"Document\" ).FirstChild( \"Element\" ).FirstChild( \"Child\" ).ToElement();\n\n\tfor( child; child; child=child-&gt;NextSiblingElement() )\n\t{\n\t\t// do something\n\t}\n\t</pre></div> <hr/><h2>Member Function Documentation</h2>\n<a class=\"anchor\" id=\"af9cf6a7d08a5da94a8924425ad0cd5ac\"></a><!-- doxytag: member=\"TiXmlHandle::Child\" ref=\"af9cf6a7d08a5da94a8924425ad0cd5ac\" args=\"(int index) const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a> TiXmlHandle::Child </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>index</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Return a handle to the \"index\" child. </p>\n<p>The first child is 0, the second 1, etc. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a072492b4be1acdb0db2d03cd8f71ccc4\"></a><!-- doxytag: member=\"TiXmlHandle::Child\" ref=\"a072492b4be1acdb0db2d03cd8f71ccc4\" args=\"(const char *value, int index) const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a> TiXmlHandle::Child </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&nbsp;</td>\n          <td class=\"paramname\"> <em>value</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>index</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td> const</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Return a handle to the \"index\" child with the given name. </p>\n<p>The first child is 0, the second 1, etc. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a8786475b9d1f1518492e3a46704c7ef0\"></a><!-- doxytag: member=\"TiXmlHandle::ChildElement\" ref=\"a8786475b9d1f1518492e3a46704c7ef0\" args=\"(int index) const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a> TiXmlHandle::ChildElement </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>index</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Return a handle to the \"index\" child element. </p>\n<p>The first child element is 0, the second 1, etc. Note that only TiXmlElements are indexed: other types are not counted. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a979a3f850984a176ee884e394c7eed2d\"></a><!-- doxytag: member=\"TiXmlHandle::ChildElement\" ref=\"a979a3f850984a176ee884e394c7eed2d\" args=\"(const char *value, int index) const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a> TiXmlHandle::ChildElement </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&nbsp;</td>\n          <td class=\"paramname\"> <em>value</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>index</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td> const</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Return a handle to the \"index\" child element with the given name. </p>\n<p>The first child element is 0, the second 1, etc. Note that only TiXmlElements are indexed: other types are not counted. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"acb5fe8388a526289ea65e817a51e05e7\"></a><!-- doxytag: member=\"TiXmlHandle::Element\" ref=\"acb5fe8388a526289ea65e817a51e05e7\" args=\"() const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a>* TiXmlHandle::Element </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const<code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n<dl class=\"deprecated\"><dt><b><a class=\"el\" href=\"deprecated.html#_deprecated000002\">Deprecated:</a></b></dt><dd>use ToElement. Return the handle as a <a class=\"el\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>. This may return null. </dd></dl>\n\n<p>References <a class=\"el\" href=\"tinyxml_8h_source.html#l01688\">ToElement()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ab44b723a8dc9af72838a303c079d0376\"></a><!-- doxytag: member=\"TiXmlHandle::Node\" ref=\"ab44b723a8dc9af72838a303c079d0376\" args=\"() const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a>* TiXmlHandle::Node </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const<code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n<dl class=\"deprecated\"><dt><b><a class=\"el\" href=\"deprecated.html#_deprecated000001\">Deprecated:</a></b></dt><dd>use ToNode. Return the handle as a <a class=\"el\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>. This may return null. </dd></dl>\n\n<p>References <a class=\"el\" href=\"tinyxml_8h_source.html#l01685\">ToNode()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9fc739c8a18d160006f82572fc143d13\"></a><!-- doxytag: member=\"TiXmlHandle::Text\" ref=\"a9fc739c8a18d160006f82572fc143d13\" args=\"() const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classTiXmlText.html\">TiXmlText</a>* TiXmlHandle::Text </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const<code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n<dl class=\"deprecated\"><dt><b><a class=\"el\" href=\"deprecated.html#_deprecated000003\">Deprecated:</a></b></dt><dd>use <a class=\"el\" href=\"classTiXmlHandle.html#a4ac53a652296203a5b5e13854d923586\" title=\"Return the handle as a TiXmlText.\">ToText()</a> Return the handle as a <a class=\"el\" href=\"classTiXmlText.html\" title=\"XML text.\">TiXmlText</a>. This may return null. </dd></dl>\n\n<p>References <a class=\"el\" href=\"tinyxml_8h_source.html#l01691\">ToText()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"abc6e7ed383a5fe1e52b0c0004b457b9e\"></a><!-- doxytag: member=\"TiXmlHandle::ToElement\" ref=\"abc6e7ed383a5fe1e52b0c0004b457b9e\" args=\"() const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a>* TiXmlHandle::ToElement </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const<code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Return the handle as a <a class=\"el\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>. </p>\n<p>This may return null. </p>\n\n<p>Referenced by <a class=\"el\" href=\"tinyxml_8h_source.html#l01703\">Element()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"af678e5088e83be67baf76f699756f2c3\"></a><!-- doxytag: member=\"TiXmlHandle::ToNode\" ref=\"af678e5088e83be67baf76f699756f2c3\" args=\"() const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a>* TiXmlHandle::ToNode </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const<code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Return the handle as a <a class=\"el\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>. </p>\n<p>This may return null. </p>\n\n<p>Referenced by <a class=\"el\" href=\"tinyxml_8h_source.html#l01699\">Node()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a4ac53a652296203a5b5e13854d923586\"></a><!-- doxytag: member=\"TiXmlHandle::ToText\" ref=\"a4ac53a652296203a5b5e13854d923586\" args=\"() const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classTiXmlText.html\">TiXmlText</a>* TiXmlHandle::ToText </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const<code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Return the handle as a <a class=\"el\" href=\"classTiXmlText.html\" title=\"XML text.\">TiXmlText</a>. </p>\n<p>This may return null. </p>\n\n<p>Referenced by <a class=\"el\" href=\"tinyxml_8h_source.html#l01707\">Text()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a1381c17507a130767b1e23afc93b3674\"></a><!-- doxytag: member=\"TiXmlHandle::ToUnknown\" ref=\"a1381c17507a130767b1e23afc93b3674\" args=\"() const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classTiXmlUnknown.html\">TiXmlUnknown</a>* TiXmlHandle::ToUnknown </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const<code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Return the handle as a <a class=\"el\" href=\"classTiXmlUnknown.html\" title=\"Any tag that tinyXml doesn&#39;t recognize is saved as an unknown.\">TiXmlUnknown</a>. </p>\n<p>This may return null. </p>\n\n<p>Referenced by <a class=\"el\" href=\"tinyxml_8h_source.html#l01711\">Unknown()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a49675b74357ba2aae124657a9a1ef465\"></a><!-- doxytag: member=\"TiXmlHandle::Unknown\" ref=\"a49675b74357ba2aae124657a9a1ef465\" args=\"() const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classTiXmlUnknown.html\">TiXmlUnknown</a>* TiXmlHandle::Unknown </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const<code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n<dl class=\"deprecated\"><dt><b><a class=\"el\" href=\"deprecated.html#_deprecated000004\">Deprecated:</a></b></dt><dd>use <a class=\"el\" href=\"classTiXmlHandle.html#a1381c17507a130767b1e23afc93b3674\" title=\"Return the handle as a TiXmlUnknown.\">ToUnknown()</a> Return the handle as a <a class=\"el\" href=\"classTiXmlUnknown.html\" title=\"Any tag that tinyXml doesn&#39;t recognize is saved as an unknown.\">TiXmlUnknown</a>. This may return null. </dd></dl>\n\n<p>References <a class=\"el\" href=\"tinyxml_8h_source.html#l01694\">ToUnknown()</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a></li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlNode-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlNode Member List</h1>This is the complete list of members for <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a>, including all inherited members.<table>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#acc0f88b7462c6cb73809d410a4f5bb86\">Accept</a>(TiXmlVisitor *visitor) const =0</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [pure virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a708e7f953df61d4d2d12f73171550a4b\">Clear</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a4508cc3a2d7a98e96a54cc09c37a78a4\">Clone</a>() const =0</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [pure virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ab54bfb9b70fe6dd276e7b279cab7f003\">Column</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a6bd8c315c1acb09e34107b8736505948\">EncodeString</a>(const TIXML_STRING &amp;str, TIXML_STRING *out)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a44c8eee26bbe2d1b2762038df9dde2f0\">FirstChild</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1f05828d023150706eeb16d6fb3f6355\">FirstChild</a>(const char *value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#abc8bf32be6419ec453a731868de19554\">FirstChild</a>(const char *_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a07f6200a5956c723c5b52d70f29c46f6\">FirstChild</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a10d2669ccb5e29e02fcb0e4408685ef6\">FirstChild</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#af4fb652f6bd79ae0d5ce7d0f7d3c0fba\">FirstChildElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#accda2c6b45c25bb5a6f9c3407a644e61\">FirstChildElement</a>(const char *_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a327ad4bbd90073c5dfc931b07314f5f7\">FirstChildElement</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a7f1d7291880534c1e5cdeb392d8c1f45\">FirstChildElement</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a80e397fa973cf5323e33b07154b024f3\">GetDocument</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a6559a530ca6763fc301a14d77ed28c17\">GetUserData</a>()</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ad0120210e4680ef2088601753ce0ede4\">GetUserData</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ad9b75e54ec19301c8b4d5ff583d0b3d5\">InsertAfterChild</a>(TiXmlNode *afterThis, const TiXmlNode &amp;addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a0c146fa2fff0157b681594102f48cbc7\">InsertBeforeChild</a>(TiXmlNode *beforeThis, const TiXmlNode &amp;addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ad7d4630e1a2a916edda16be22448a8ba\">InsertEndChild</a>(const TiXmlNode &amp;addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ad4b1472531c647a25b1840a87ae42438\">IsWhiteSpaceCondensed</a>()</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline, static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a8621196ba3705fa226bef4a761cc51b6\">IterateChildren</a>(const TiXmlNode *previous) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#adfaef35a076b9343adc1420757376c39\">IterateChildren</a>(const char *value, const TiXmlNode *previous) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1cbaaf8e82c09ad763d52616d75724df\">IterateChildren</a>(const std::string &amp;_value, const TiXmlNode *previous) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a16e9ad53e2f5445b14bf325c90aa862c\">IterateChildren</a>(const std::string &amp;_value, const TiXmlNode *previous)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a6432d2b2495f6caf9cb4278df706a031\">LastChild</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#abad5bf1059c48127b958711ef89e8e5d\">LastChild</a>(const char *_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a256d0cdbfcfeccae83f3a1c9747a8b63\">LastChild</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a69772c9202f70553f940b15c06b07be3\">LastChild</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a5d29442ae46de6d0168429156197bfc6\">LinkEndChild</a>(TiXmlNode *addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1b94d2f7fa7ab25a5a8e8d4340c449c9\">NextSibling</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1757c1f4d01e8c9596ffdbd561c76aea\">NextSibling</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#af854baeba384f5fe9859f5aee03b548e\">NextSibling</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a2e61c0b89a77e36a0e8c60490003cb46\">NextSibling</a>(const char *) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a73acf929d49d10bd0e5fb3d31b0372d1\">NextSiblingElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a071ba77fd7ab79402fa84b7e9b8607b3\">NextSiblingElement</a>(const char *) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a7572d0af9d1e696ee3f05d8bb5ebb463\">NextSiblingElement</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a506958e34406729a4e4c5326ea39d081\">NextSiblingElement</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#aeed21ad30630ef6e7faf096127edc9f3\">NoChildren</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a836eded4920ab9e9ef28496f48cd95a2\">NodeType</a> enum name</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a86cd49cfb17a844c0010b3136ac966c7\">operator&lt;&lt;</a>(std::ostream &amp;out, const TiXmlNode &amp;base)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [friend]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a52ef17e7080df2490cf87bde380685ab\">operator&lt;&lt;</a>(std::string &amp;out, const TiXmlNode &amp;base)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [friend]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ab57bd426563c926844f65a78412e18b9\">operator&gt;&gt;</a>(std::istream &amp;in, TiXmlNode &amp;base)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [friend]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ab643043132ffd794f8602685d34a982e\">Parent</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ac2cd892768726270e511b2ab32de4d10\">PreviousSibling</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a5bdd49327eec1e609b7d22af706b8316\">PreviousSibling</a>(const char *) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a658276f57d35d5d4256d1dc1a2c398ab\">PreviousSibling</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#acc8a0434c7f401d4a3b6dee77c1a5912\">PreviousSibling</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a0de56b3f2ef14c65091a3b916437b512\">Print</a>(FILE *cfile, int depth) const =0</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [pure virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ae19d8510efc90596552f4feeac9a8fbf\">RemoveChild</a>(TiXmlNode *removeThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a0c49e739a17b9938050c22cd89617fbd\">ReplaceChild</a>(TiXmlNode *replaceThis, const TiXmlNode &amp;withThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a024bceb070188df92c2a8d8852dd0853\">Row</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a0f799ec645bfb8d8a969e83478f379c1\">SetCondenseWhiteSpace</a>(bool condense)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline, static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ac6b3e0f790930d4970ec30764e937b5d\">SetUserData</a>(void *user)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a2a38329ca5d3f28f98ce932b8299ae90\">SetValue</a>(const char *_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a2598d5f448042c1abbeae4503dd45ff2\">SetValue</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#aa0a5086f9eaee910bbfdc7f975e26574\">ToComment</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a383e06a0787f7063953934867990f849\">ToComment</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a9f43e6984fc7d4afd6eb32714c6b7b72\">ToDeclaration</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a4027136ca820ff4a636b607231b6a6df\">ToDeclaration</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a8a4cda4b15c29f64cff419309aebed08\">ToDocument</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a6a4c8ac28ee7a745d059db6691e03bae\">ToDocument</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a72abed96dc9667ab9e0a2a275301bb1c\">ToElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#aa65d000223187d22a4dcebd7479e9ebc\">ToElement</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a95a46a52c525992d6b4ee08beb14cd69\">ToText</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a3ddfbcac78fbea041fad57e5c6d60a03\">ToText</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#afd7205cf31d7a376929f8a36930627a2\">ToUnknown</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a06de5af852668c7e4af0d09c205f0b0d\">ToUnknown</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a57b99d5c97d67a42b9752f5210a1ba5e\">Type</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ab242c01590191f644569fa89a080d97c\">userData</a></td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [protected]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a77943eb90d12c2892b1337a9f5918b41\">Value</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a6d9e505619d39bf50bfd9609c9169ea5\">ValueStr</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n</table></div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlNode.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: TiXmlNode Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlNode Class Reference</h1><!-- doxytag: class=\"TiXmlNode\" --><!-- doxytag: inherits=\"TiXmlBase\" -->\n<p>The parent class for everything in the Document Object Model.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for TiXmlNode:</div>\n<div class=\"dynsection\">\n <div class=\"center\">\n  <img src=\"classTiXmlNode.png\" usemap=\"#TiXmlNode_map\" alt=\"\"/>\n  <map id=\"TiXmlNode_map\" name=\"TiXmlNode_map\">\n<area href=\"classTiXmlBase.html\" alt=\"TiXmlBase\" shape=\"rect\" coords=\"295,0,403,24\"/>\n<area href=\"classTiXmlComment.html\" alt=\"TiXmlComment\" shape=\"rect\" coords=\"0,112,108,136\"/>\n<area href=\"classTiXmlDeclaration.html\" alt=\"TiXmlDeclaration\" shape=\"rect\" coords=\"118,112,226,136\"/>\n<area href=\"classTiXmlDocument.html\" alt=\"TiXmlDocument\" shape=\"rect\" coords=\"236,112,344,136\"/>\n<area href=\"classTiXmlElement.html\" alt=\"TiXmlElement\" shape=\"rect\" coords=\"354,112,462,136\"/>\n<area href=\"classTiXmlText.html\" alt=\"TiXmlText\" shape=\"rect\" coords=\"472,112,580,136\"/>\n<area href=\"classTiXmlUnknown.html\" alt=\"TiXmlUnknown\" shape=\"rect\" coords=\"590,112,698,136\"/>\n</map>\n </div>\n</div>\n\n<p><a href=\"classTiXmlNode-members.html\">List of all members.</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Public Types</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a836eded4920ab9e9ef28496f48cd95a2\">NodeType</a> </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>The types of XML nodes supported by TinyXml. </p>\n <a href=\"classTiXmlNode.html#a836eded4920ab9e9ef28496f48cd95a2\">More...</a><br/></td></tr>\n<tr><td colspan=\"2\"><h2>Public Member Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a77943eb90d12c2892b1337a9f5918b41\">Value</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The meaning of 'value' changes for the specific type of <a class=\"el\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>.  <a href=\"#a77943eb90d12c2892b1337a9f5918b41\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const std::string &amp;&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a6d9e505619d39bf50bfd9609c9169ea5\">ValueStr</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return <a class=\"el\" href=\"classTiXmlNode.html#a77943eb90d12c2892b1337a9f5918b41\" title=\"The meaning of &#39;value&#39; changes for the specific type of TiXmlNode.\">Value()</a> as a std::string.  <a href=\"#a6d9e505619d39bf50bfd9609c9169ea5\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a2a38329ca5d3f28f98ce932b8299ae90\">SetValue</a> (const char *_value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Changes the value of the node.  <a href=\"#a2a38329ca5d3f28f98ce932b8299ae90\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2598d5f448042c1abbeae4503dd45ff2\"></a><!-- doxytag: member=\"TiXmlNode::SetValue\" ref=\"a2598d5f448042c1abbeae4503dd45ff2\" args=\"(const std::string &amp;_value)\" -->\nvoid&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a2598d5f448042c1abbeae4503dd45ff2\">SetValue</a> (const std::string &amp;_value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">STL std::string form. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a708e7f953df61d4d2d12f73171550a4b\"></a><!-- doxytag: member=\"TiXmlNode::Clear\" ref=\"a708e7f953df61d4d2d12f73171550a4b\" args=\"()\" -->\nvoid&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a708e7f953df61d4d2d12f73171550a4b\">Clear</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Delete all the children of this node. Does not affect 'this'. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab643043132ffd794f8602685d34a982e\"></a><!-- doxytag: member=\"TiXmlNode::Parent\" ref=\"ab643043132ffd794f8602685d34a982e\" args=\"()\" -->\n<a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#ab643043132ffd794f8602685d34a982e\">Parent</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">One step up the DOM. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a44c8eee26bbe2d1b2762038df9dde2f0\"></a><!-- doxytag: member=\"TiXmlNode::FirstChild\" ref=\"a44c8eee26bbe2d1b2762038df9dde2f0\" args=\"() const \" -->\nconst <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a44c8eee26bbe2d1b2762038df9dde2f0\">FirstChild</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The first child of this node. Will be null if there are no children. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a1f05828d023150706eeb16d6fb3f6355\">FirstChild</a> (const char *value) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The first child of this node with the matching 'value'.  <a href=\"#a1f05828d023150706eeb16d6fb3f6355\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abc8bf32be6419ec453a731868de19554\"></a><!-- doxytag: member=\"TiXmlNode::FirstChild\" ref=\"abc8bf32be6419ec453a731868de19554\" args=\"(const char *_value)\" -->\n<a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#abc8bf32be6419ec453a731868de19554\">FirstChild</a> (const char *_value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The first child of this node with the matching 'value'. Will be null if none found. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6432d2b2495f6caf9cb4278df706a031\"></a><!-- doxytag: member=\"TiXmlNode::LastChild\" ref=\"a6432d2b2495f6caf9cb4278df706a031\" args=\"()\" -->\n<a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a6432d2b2495f6caf9cb4278df706a031\">LastChild</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The last child of this node. Will be null if there are no children. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abad5bf1059c48127b958711ef89e8e5d\"></a><!-- doxytag: member=\"TiXmlNode::LastChild\" ref=\"abad5bf1059c48127b958711ef89e8e5d\" args=\"(const char *_value)\" -->\n<a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#abad5bf1059c48127b958711ef89e8e5d\">LastChild</a> (const char *_value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The last child of this node matching 'value'. Will be null if there are no children. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a07f6200a5956c723c5b52d70f29c46f6\"></a><!-- doxytag: member=\"TiXmlNode::FirstChild\" ref=\"a07f6200a5956c723c5b52d70f29c46f6\" args=\"(const std::string &amp;_value) const \" -->\nconst <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a07f6200a5956c723c5b52d70f29c46f6\">FirstChild</a> (const std::string &amp;_value) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">STL std::string form. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a10d2669ccb5e29e02fcb0e4408685ef6\"></a><!-- doxytag: member=\"TiXmlNode::FirstChild\" ref=\"a10d2669ccb5e29e02fcb0e4408685ef6\" args=\"(const std::string &amp;_value)\" -->\n<a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a10d2669ccb5e29e02fcb0e4408685ef6\">FirstChild</a> (const std::string &amp;_value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">STL std::string form. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a256d0cdbfcfeccae83f3a1c9747a8b63\"></a><!-- doxytag: member=\"TiXmlNode::LastChild\" ref=\"a256d0cdbfcfeccae83f3a1c9747a8b63\" args=\"(const std::string &amp;_value) const \" -->\nconst <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a256d0cdbfcfeccae83f3a1c9747a8b63\">LastChild</a> (const std::string &amp;_value) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">STL std::string form. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a69772c9202f70553f940b15c06b07be3\"></a><!-- doxytag: member=\"TiXmlNode::LastChild\" ref=\"a69772c9202f70553f940b15c06b07be3\" args=\"(const std::string &amp;_value)\" -->\n<a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a69772c9202f70553f940b15c06b07be3\">LastChild</a> (const std::string &amp;_value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">STL std::string form. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a8621196ba3705fa226bef4a761cc51b6\">IterateChildren</a> (const <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *previous) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">An alternate way to walk the children of a node.  <a href=\"#a8621196ba3705fa226bef4a761cc51b6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adfaef35a076b9343adc1420757376c39\"></a><!-- doxytag: member=\"TiXmlNode::IterateChildren\" ref=\"adfaef35a076b9343adc1420757376c39\" args=\"(const char *value, const TiXmlNode *previous) const \" -->\nconst <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#adfaef35a076b9343adc1420757376c39\">IterateChildren</a> (const char *value, const <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *previous) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">This flavor of IterateChildren searches for children with a particular 'value'. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1cbaaf8e82c09ad763d52616d75724df\"></a><!-- doxytag: member=\"TiXmlNode::IterateChildren\" ref=\"a1cbaaf8e82c09ad763d52616d75724df\" args=\"(const std::string &amp;_value, const TiXmlNode *previous) const \" -->\nconst <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a1cbaaf8e82c09ad763d52616d75724df\">IterateChildren</a> (const std::string &amp;_value, const <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *previous) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">STL std::string form. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a16e9ad53e2f5445b14bf325c90aa862c\"></a><!-- doxytag: member=\"TiXmlNode::IterateChildren\" ref=\"a16e9ad53e2f5445b14bf325c90aa862c\" args=\"(const std::string &amp;_value, const TiXmlNode *previous)\" -->\n<a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a16e9ad53e2f5445b14bf325c90aa862c\">IterateChildren</a> (const std::string &amp;_value, const <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *previous)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">STL std::string form. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#ad7d4630e1a2a916edda16be22448a8ba\">InsertEndChild</a> (const <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> &amp;addThis)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Add a new node related to this.  <a href=\"#ad7d4630e1a2a916edda16be22448a8ba\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a5d29442ae46de6d0168429156197bfc6\">LinkEndChild</a> (<a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *addThis)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Add a new node related to this.  <a href=\"#a5d29442ae46de6d0168429156197bfc6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a0c146fa2fff0157b681594102f48cbc7\">InsertBeforeChild</a> (<a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *beforeThis, const <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> &amp;addThis)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Add a new node related to this.  <a href=\"#a0c146fa2fff0157b681594102f48cbc7\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#ad9b75e54ec19301c8b4d5ff583d0b3d5\">InsertAfterChild</a> (<a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *afterThis, const <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> &amp;addThis)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Add a new node related to this.  <a href=\"#ad9b75e54ec19301c8b4d5ff583d0b3d5\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a0c49e739a17b9938050c22cd89617fbd\">ReplaceChild</a> (<a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *replaceThis, const <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> &amp;withThis)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Replace a child of this node.  <a href=\"#a0c49e739a17b9938050c22cd89617fbd\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae19d8510efc90596552f4feeac9a8fbf\"></a><!-- doxytag: member=\"TiXmlNode::RemoveChild\" ref=\"ae19d8510efc90596552f4feeac9a8fbf\" args=\"(TiXmlNode *removeThis)\" -->\nbool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#ae19d8510efc90596552f4feeac9a8fbf\">RemoveChild</a> (<a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *removeThis)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Delete a child of this node. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac2cd892768726270e511b2ab32de4d10\"></a><!-- doxytag: member=\"TiXmlNode::PreviousSibling\" ref=\"ac2cd892768726270e511b2ab32de4d10\" args=\"() const \" -->\nconst <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#ac2cd892768726270e511b2ab32de4d10\">PreviousSibling</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Navigate to a sibling node. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5bdd49327eec1e609b7d22af706b8316\"></a><!-- doxytag: member=\"TiXmlNode::PreviousSibling\" ref=\"a5bdd49327eec1e609b7d22af706b8316\" args=\"(const char *) const \" -->\nconst <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a5bdd49327eec1e609b7d22af706b8316\">PreviousSibling</a> (const char *) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Navigate to a sibling node. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a658276f57d35d5d4256d1dc1a2c398ab\"></a><!-- doxytag: member=\"TiXmlNode::PreviousSibling\" ref=\"a658276f57d35d5d4256d1dc1a2c398ab\" args=\"(const std::string &amp;_value) const \" -->\nconst <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a658276f57d35d5d4256d1dc1a2c398ab\">PreviousSibling</a> (const std::string &amp;_value) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">STL std::string form. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acc8a0434c7f401d4a3b6dee77c1a5912\"></a><!-- doxytag: member=\"TiXmlNode::PreviousSibling\" ref=\"acc8a0434c7f401d4a3b6dee77c1a5912\" args=\"(const std::string &amp;_value)\" -->\n<a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#acc8a0434c7f401d4a3b6dee77c1a5912\">PreviousSibling</a> (const std::string &amp;_value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">STL std::string form. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1b94d2f7fa7ab25a5a8e8d4340c449c9\"></a><!-- doxytag: member=\"TiXmlNode::NextSibling\" ref=\"a1b94d2f7fa7ab25a5a8e8d4340c449c9\" args=\"(const std::string &amp;_value) const \" -->\nconst <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a1b94d2f7fa7ab25a5a8e8d4340c449c9\">NextSibling</a> (const std::string &amp;_value) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">STL std::string form. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1757c1f4d01e8c9596ffdbd561c76aea\"></a><!-- doxytag: member=\"TiXmlNode::NextSibling\" ref=\"a1757c1f4d01e8c9596ffdbd561c76aea\" args=\"(const std::string &amp;_value)\" -->\n<a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a1757c1f4d01e8c9596ffdbd561c76aea\">NextSibling</a> (const std::string &amp;_value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">STL std::string form. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af854baeba384f5fe9859f5aee03b548e\"></a><!-- doxytag: member=\"TiXmlNode::NextSibling\" ref=\"af854baeba384f5fe9859f5aee03b548e\" args=\"() const \" -->\nconst <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#af854baeba384f5fe9859f5aee03b548e\">NextSibling</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Navigate to a sibling node. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2e61c0b89a77e36a0e8c60490003cb46\"></a><!-- doxytag: member=\"TiXmlNode::NextSibling\" ref=\"a2e61c0b89a77e36a0e8c60490003cb46\" args=\"(const char *) const \" -->\nconst <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a2e61c0b89a77e36a0e8c60490003cb46\">NextSibling</a> (const char *) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Navigate to a sibling node with the given 'value'. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const <a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a73acf929d49d10bd0e5fb3d31b0372d1\">NextSiblingElement</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Convenience function to get through elements.  <a href=\"#a73acf929d49d10bd0e5fb3d31b0372d1\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const <a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a071ba77fd7ab79402fa84b7e9b8607b3\">NextSiblingElement</a> (const char *) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Convenience function to get through elements.  <a href=\"#a071ba77fd7ab79402fa84b7e9b8607b3\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7572d0af9d1e696ee3f05d8bb5ebb463\"></a><!-- doxytag: member=\"TiXmlNode::NextSiblingElement\" ref=\"a7572d0af9d1e696ee3f05d8bb5ebb463\" args=\"(const std::string &amp;_value) const \" -->\nconst <a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a7572d0af9d1e696ee3f05d8bb5ebb463\">NextSiblingElement</a> (const std::string &amp;_value) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">STL std::string form. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a506958e34406729a4e4c5326ea39d081\"></a><!-- doxytag: member=\"TiXmlNode::NextSiblingElement\" ref=\"a506958e34406729a4e4c5326ea39d081\" args=\"(const std::string &amp;_value)\" -->\n<a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a506958e34406729a4e4c5326ea39d081\">NextSiblingElement</a> (const std::string &amp;_value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">STL std::string form. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af4fb652f6bd79ae0d5ce7d0f7d3c0fba\"></a><!-- doxytag: member=\"TiXmlNode::FirstChildElement\" ref=\"af4fb652f6bd79ae0d5ce7d0f7d3c0fba\" args=\"() const \" -->\nconst <a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#af4fb652f6bd79ae0d5ce7d0f7d3c0fba\">FirstChildElement</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Convenience function to get through elements. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"accda2c6b45c25bb5a6f9c3407a644e61\"></a><!-- doxytag: member=\"TiXmlNode::FirstChildElement\" ref=\"accda2c6b45c25bb5a6f9c3407a644e61\" args=\"(const char *_value) const \" -->\nconst <a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#accda2c6b45c25bb5a6f9c3407a644e61\">FirstChildElement</a> (const char *_value) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Convenience function to get through elements. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a327ad4bbd90073c5dfc931b07314f5f7\"></a><!-- doxytag: member=\"TiXmlNode::FirstChildElement\" ref=\"a327ad4bbd90073c5dfc931b07314f5f7\" args=\"(const std::string &amp;_value) const \" -->\nconst <a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a327ad4bbd90073c5dfc931b07314f5f7\">FirstChildElement</a> (const std::string &amp;_value) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">STL std::string form. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7f1d7291880534c1e5cdeb392d8c1f45\"></a><!-- doxytag: member=\"TiXmlNode::FirstChildElement\" ref=\"a7f1d7291880534c1e5cdeb392d8c1f45\" args=\"(const std::string &amp;_value)\" -->\n<a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a7f1d7291880534c1e5cdeb392d8c1f45\">FirstChildElement</a> (const std::string &amp;_value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">STL std::string form. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a57b99d5c97d67a42b9752f5210a1ba5e\">Type</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Query the type (as an enumerated value, above) of this node.  <a href=\"#a57b99d5c97d67a42b9752f5210a1ba5e\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const <a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a80e397fa973cf5323e33b07154b024f3\">GetDocument</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return a pointer to the Document this node lives in.  <a href=\"#a80e397fa973cf5323e33b07154b024f3\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeed21ad30630ef6e7faf096127edc9f3\"></a><!-- doxytag: member=\"TiXmlNode::NoChildren\" ref=\"aeed21ad30630ef6e7faf096127edc9f3\" args=\"() const \" -->\nbool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#aeed21ad30630ef6e7faf096127edc9f3\">NoChildren</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Returns true if this node has no children. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8a4cda4b15c29f64cff419309aebed08\"></a><!-- doxytag: member=\"TiXmlNode::ToDocument\" ref=\"a8a4cda4b15c29f64cff419309aebed08\" args=\"() const \" -->\nvirtual const <a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a8a4cda4b15c29f64cff419309aebed08\">ToDocument</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null if not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a72abed96dc9667ab9e0a2a275301bb1c\"></a><!-- doxytag: member=\"TiXmlNode::ToElement\" ref=\"a72abed96dc9667ab9e0a2a275301bb1c\" args=\"() const \" -->\nvirtual const <a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a72abed96dc9667ab9e0a2a275301bb1c\">ToElement</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null if not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa0a5086f9eaee910bbfdc7f975e26574\"></a><!-- doxytag: member=\"TiXmlNode::ToComment\" ref=\"aa0a5086f9eaee910bbfdc7f975e26574\" args=\"() const \" -->\nvirtual const <a class=\"el\" href=\"classTiXmlComment.html\">TiXmlComment</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#aa0a5086f9eaee910bbfdc7f975e26574\">ToComment</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null if not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afd7205cf31d7a376929f8a36930627a2\"></a><!-- doxytag: member=\"TiXmlNode::ToUnknown\" ref=\"afd7205cf31d7a376929f8a36930627a2\" args=\"() const \" -->\nvirtual const <a class=\"el\" href=\"classTiXmlUnknown.html\">TiXmlUnknown</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#afd7205cf31d7a376929f8a36930627a2\">ToUnknown</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null if not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a95a46a52c525992d6b4ee08beb14cd69\"></a><!-- doxytag: member=\"TiXmlNode::ToText\" ref=\"a95a46a52c525992d6b4ee08beb14cd69\" args=\"() const \" -->\nvirtual const <a class=\"el\" href=\"classTiXmlText.html\">TiXmlText</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a95a46a52c525992d6b4ee08beb14cd69\">ToText</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null if not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9f43e6984fc7d4afd6eb32714c6b7b72\"></a><!-- doxytag: member=\"TiXmlNode::ToDeclaration\" ref=\"a9f43e6984fc7d4afd6eb32714c6b7b72\" args=\"() const \" -->\nvirtual const <a class=\"el\" href=\"classTiXmlDeclaration.html\">TiXmlDeclaration</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a9f43e6984fc7d4afd6eb32714c6b7b72\">ToDeclaration</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null if not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6a4c8ac28ee7a745d059db6691e03bae\"></a><!-- doxytag: member=\"TiXmlNode::ToDocument\" ref=\"a6a4c8ac28ee7a745d059db6691e03bae\" args=\"()\" -->\nvirtual <a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a6a4c8ac28ee7a745d059db6691e03bae\">ToDocument</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null if not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa65d000223187d22a4dcebd7479e9ebc\"></a><!-- doxytag: member=\"TiXmlNode::ToElement\" ref=\"aa65d000223187d22a4dcebd7479e9ebc\" args=\"()\" -->\nvirtual <a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#aa65d000223187d22a4dcebd7479e9ebc\">ToElement</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null if not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a383e06a0787f7063953934867990f849\"></a><!-- doxytag: member=\"TiXmlNode::ToComment\" ref=\"a383e06a0787f7063953934867990f849\" args=\"()\" -->\nvirtual <a class=\"el\" href=\"classTiXmlComment.html\">TiXmlComment</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a383e06a0787f7063953934867990f849\">ToComment</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null if not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a06de5af852668c7e4af0d09c205f0b0d\"></a><!-- doxytag: member=\"TiXmlNode::ToUnknown\" ref=\"a06de5af852668c7e4af0d09c205f0b0d\" args=\"()\" -->\nvirtual <a class=\"el\" href=\"classTiXmlUnknown.html\">TiXmlUnknown</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a06de5af852668c7e4af0d09c205f0b0d\">ToUnknown</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null if not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3ddfbcac78fbea041fad57e5c6d60a03\"></a><!-- doxytag: member=\"TiXmlNode::ToText\" ref=\"a3ddfbcac78fbea041fad57e5c6d60a03\" args=\"()\" -->\nvirtual <a class=\"el\" href=\"classTiXmlText.html\">TiXmlText</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a3ddfbcac78fbea041fad57e5c6d60a03\">ToText</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null if not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4027136ca820ff4a636b607231b6a6df\"></a><!-- doxytag: member=\"TiXmlNode::ToDeclaration\" ref=\"a4027136ca820ff4a636b607231b6a6df\" args=\"()\" -->\nvirtual <a class=\"el\" href=\"classTiXmlDeclaration.html\">TiXmlDeclaration</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a4027136ca820ff4a636b607231b6a6df\">ToDeclaration</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null if not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a4508cc3a2d7a98e96a54cc09c37a78a4\">Clone</a> () const =0</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create an exact duplicate of this node and return it.  <a href=\"#a4508cc3a2d7a98e96a54cc09c37a78a4\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#acc0f88b7462c6cb73809d410a4f5bb86\">Accept</a> (<a class=\"el\" href=\"classTiXmlVisitor.html\">TiXmlVisitor</a> *visitor) const =0</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Accept a hierchical visit the nodes in the TinyXML DOM.  <a href=\"#acc0f88b7462c6cb73809d410a4f5bb86\"></a><br/></td></tr>\n<tr><td colspan=\"2\"><h2>Friends</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a173617f6dfe902cf484ce5552b950475\"></a><!-- doxytag: member=\"TiXmlNode::TiXmlDocument\" ref=\"a173617f6dfe902cf484ce5552b950475\" args=\"\" -->\nclass&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a173617f6dfe902cf484ce5552b950475\">TiXmlDocument</a></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab6592e32cb9132be517cc12a70564c4b\"></a><!-- doxytag: member=\"TiXmlNode::TiXmlElement\" ref=\"ab6592e32cb9132be517cc12a70564c4b\" args=\"\" -->\nclass&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#ab6592e32cb9132be517cc12a70564c4b\">TiXmlElement</a></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">std::istream &amp;&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#ab57bd426563c926844f65a78412e18b9\">operator&gt;&gt;</a> (std::istream &amp;in, <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> &amp;base)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">An input stream operator, for every class.  <a href=\"#ab57bd426563c926844f65a78412e18b9\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">std::ostream &amp;&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a86cd49cfb17a844c0010b3136ac966c7\">operator&lt;&lt;</a> (std::ostream &amp;out, const <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> &amp;base)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">An output stream operator, for every class.  <a href=\"#a86cd49cfb17a844c0010b3136ac966c7\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a52ef17e7080df2490cf87bde380685ab\"></a><!-- doxytag: member=\"TiXmlNode::operator&lt;&lt;\" ref=\"a52ef17e7080df2490cf87bde380685ab\" args=\"(std::string &amp;out, const TiXmlNode &amp;base)\" -->\nstd::string &amp;&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlNode.html#a52ef17e7080df2490cf87bde380685ab\">operator&lt;&lt;</a> (std::string &amp;out, const <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> &amp;base)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Appends the XML node or attribute to a std::string. <br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>The parent class for everything in the Document Object Model. </p>\n<p>(Except for attributes). Nodes have siblings, a parent, and children. A node can be in a document, or stand on its own. The type of a <a class=\"el\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a> can be queried, and it can be cast to its more defined type. </p>\n<hr/><h2>Member Enumeration Documentation</h2>\n<a class=\"anchor\" id=\"a836eded4920ab9e9ef28496f48cd95a2\"></a><!-- doxytag: member=\"TiXmlNode::NodeType\" ref=\"a836eded4920ab9e9ef28496f48cd95a2\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"classTiXmlNode.html#a836eded4920ab9e9ef28496f48cd95a2\">TiXmlNode::NodeType</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The types of XML nodes supported by TinyXml. </p>\n<p>(All the unsupported types are picked up by UNKNOWN.) </p>\n\n</div>\n</div>\n<hr/><h2>Member Function Documentation</h2>\n<a class=\"anchor\" id=\"acc0f88b7462c6cb73809d410a4f5bb86\"></a><!-- doxytag: member=\"TiXmlNode::Accept\" ref=\"acc0f88b7462c6cb73809d410a4f5bb86\" args=\"(TiXmlVisitor *visitor) const =0\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual bool TiXmlNode::Accept </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classTiXmlVisitor.html\">TiXmlVisitor</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>visitor</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const<code> [pure virtual]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Accept a hierchical visit the nodes in the TinyXML DOM. </p>\n<p>Every node in the XML tree will be conditionally visited and the host will be called back via the <a class=\"el\" href=\"classTiXmlVisitor.html\" title=\"Implements the interface to the &quot;Visitor pattern&quot; (see the Accept() method...\">TiXmlVisitor</a> interface.</p>\n<p>This is essentially a SAX interface for TinyXML. (Note however it doesn't re-parse the XML for the callbacks, so the performance of TinyXML is unchanged by using this interface versus any other.)</p>\n<p>The interface has been based on ideas from:</p>\n<ul>\n<li><a href=\"http://www.saxproject.org/\">http://www.saxproject.org/</a></li>\n<li><a href=\"http://c2.com/cgi/wiki?HierarchicalVisitorPattern\">http://c2.com/cgi/wiki?HierarchicalVisitorPattern</a></li>\n</ul>\n<p>Which are both good references for \"visiting\".</p>\n<p>An example of using <a class=\"el\" href=\"classTiXmlNode.html#acc0f88b7462c6cb73809d410a4f5bb86\" title=\"Accept a hierchical visit the nodes in the TinyXML DOM.\">Accept()</a>: </p>\n<div class=\"fragment\"><pre class=\"fragment\">\n\t\tTiXmlPrinter printer;\n\t\ttinyxmlDoc.Accept( &amp;printer );\n\t\tconst char* xmlcstr = printer.CStr();\n\t\t</pre></div> \n<p>Implemented in <a class=\"el\" href=\"classTiXmlElement.html#a71a81b2afb0d42be1543d1c404dee6f5\">TiXmlElement</a>, <a class=\"el\" href=\"classTiXmlComment.html#af3ac1b99fbbe9ea4fb6e14146156e43e\">TiXmlComment</a>, <a class=\"el\" href=\"classTiXmlText.html#a8483d4415ce9de6c4fa8f63d067d5de6\">TiXmlText</a>, <a class=\"el\" href=\"classTiXmlDeclaration.html#a22315a535983b86535cdba3458669e3e\">TiXmlDeclaration</a>, <a class=\"el\" href=\"classTiXmlUnknown.html#ad7122e5135581b3c832a1a3217760a93\">TiXmlUnknown</a>, and <a class=\"el\" href=\"classTiXmlDocument.html#aa545aae325d9752ad64120bc4ecf939a\">TiXmlDocument</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a4508cc3a2d7a98e96a54cc09c37a78a4\"></a><!-- doxytag: member=\"TiXmlNode::Clone\" ref=\"a4508cc3a2d7a98e96a54cc09c37a78a4\" args=\"() const =0\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a>* TiXmlNode::Clone </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const<code> [pure virtual]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Create an exact duplicate of this node and return it. </p>\n<p>The memory must be deleted by the caller. </p>\n\n<p>Implemented in <a class=\"el\" href=\"classTiXmlElement.html#aa464535ea1994db337cb6a8ce4b588b5\">TiXmlElement</a>, <a class=\"el\" href=\"classTiXmlComment.html#a0d6662bdc52488b9e12b3c7a0453d028\">TiXmlComment</a>, <a class=\"el\" href=\"classTiXmlText.html#a0c411e93a27537369479d034cc82da3b\">TiXmlText</a>, <a class=\"el\" href=\"classTiXmlDeclaration.html#a7cf459186040141cda7a180a6585ce2e\">TiXmlDeclaration</a>, <a class=\"el\" href=\"classTiXmlUnknown.html#a0960bb7428b3f341da46244229604d73\">TiXmlUnknown</a>, and <a class=\"el\" href=\"classTiXmlDocument.html#a4968661cab4a1f44a23329c6f8db1907\">TiXmlDocument</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a1f05828d023150706eeb16d6fb3f6355\"></a><!-- doxytag: member=\"TiXmlNode::FirstChild\" ref=\"a1f05828d023150706eeb16d6fb3f6355\" args=\"(const char *value) const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a>* TiXmlNode::FirstChild </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&nbsp;</td>\n          <td class=\"paramname\"> <em>value</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The first child of this node with the matching 'value'. </p>\n<p>Will be null if none found. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a80e397fa973cf5323e33b07154b024f3\"></a><!-- doxytag: member=\"TiXmlNode::GetDocument\" ref=\"a80e397fa973cf5323e33b07154b024f3\" args=\"() const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const <a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a>* TiXmlNode::GetDocument </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Return a pointer to the Document this node lives in. </p>\n<p>Returns null if not in a document. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad9b75e54ec19301c8b4d5ff583d0b3d5\"></a><!-- doxytag: member=\"TiXmlNode::InsertAfterChild\" ref=\"ad9b75e54ec19301c8b4d5ff583d0b3d5\" args=\"(TiXmlNode *afterThis, const TiXmlNode &amp;addThis)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a>* TiXmlNode::InsertAfterChild </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>afterThis</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> &amp;&nbsp;</td>\n          <td class=\"paramname\"> <em>addThis</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Add a new node related to this. </p>\n<p>Adds a child after the specified child. Returns a pointer to the new object or NULL if an error occured. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a0c146fa2fff0157b681594102f48cbc7\"></a><!-- doxytag: member=\"TiXmlNode::InsertBeforeChild\" ref=\"a0c146fa2fff0157b681594102f48cbc7\" args=\"(TiXmlNode *beforeThis, const TiXmlNode &amp;addThis)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a>* TiXmlNode::InsertBeforeChild </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>beforeThis</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> &amp;&nbsp;</td>\n          <td class=\"paramname\"> <em>addThis</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Add a new node related to this. </p>\n<p>Adds a child before the specified child. Returns a pointer to the new object or NULL if an error occured. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad7d4630e1a2a916edda16be22448a8ba\"></a><!-- doxytag: member=\"TiXmlNode::InsertEndChild\" ref=\"ad7d4630e1a2a916edda16be22448a8ba\" args=\"(const TiXmlNode &amp;addThis)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a>* TiXmlNode::InsertEndChild </td>\n          <td>(</td>\n          <td class=\"paramtype\">const <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> &amp;&nbsp;</td>\n          <td class=\"paramname\"> <em>addThis</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Add a new node related to this. </p>\n<p>Adds a child past the LastChild. Returns a pointer to the new object or NULL if an error occured. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a8621196ba3705fa226bef4a761cc51b6\"></a><!-- doxytag: member=\"TiXmlNode::IterateChildren\" ref=\"a8621196ba3705fa226bef4a761cc51b6\" args=\"(const TiXmlNode *previous) const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a>* TiXmlNode::IterateChildren </td>\n          <td>(</td>\n          <td class=\"paramtype\">const <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>previous</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>An alternate way to walk the children of a node. </p>\n<p>One way to iterate over nodes is: </p>\n<div class=\"fragment\"><pre class=\"fragment\">\n\t\t\tfor( child = parent-&gt;FirstChild(); child; child = child-&gt;NextSibling() )\n\t\t</pre></div><p>IterateChildren does the same thing with the syntax: </p>\n<div class=\"fragment\"><pre class=\"fragment\">\n\t\t\tchild = 0;\n\t\t\twhile( child = parent-&gt;IterateChildren( child ) )\n\t\t</pre></div><p>IterateChildren takes the previous child as input and finds the next one. If the previous child is null, it returns the first. IterateChildren will return null when done. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a5d29442ae46de6d0168429156197bfc6\"></a><!-- doxytag: member=\"TiXmlNode::LinkEndChild\" ref=\"a5d29442ae46de6d0168429156197bfc6\" args=\"(TiXmlNode *addThis)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a>* TiXmlNode::LinkEndChild </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>addThis</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Add a new node related to this. </p>\n<p>Adds a child past the LastChild.</p>\n<p>NOTE: the node to be added is passed by pointer, and will be henceforth owned (and deleted) by tinyXml. This method is efficient and avoids an extra copy, but should be used with care as it uses a different memory model than the other insert functions.</p>\n<dl class=\"see\"><dt><b>See also:</b></dt><dd><a class=\"el\" href=\"classTiXmlNode.html#ad7d4630e1a2a916edda16be22448a8ba\" title=\"Add a new node related to this.\">InsertEndChild</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a071ba77fd7ab79402fa84b7e9b8607b3\"></a><!-- doxytag: member=\"TiXmlNode::NextSiblingElement\" ref=\"a071ba77fd7ab79402fa84b7e9b8607b3\" args=\"(const char *) const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const <a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a>* TiXmlNode::NextSiblingElement </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&nbsp;</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Convenience function to get through elements. </p>\n<p>Calls NextSibling and ToElement. Will skip all non-Element nodes. Returns 0 if there is not another element. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a73acf929d49d10bd0e5fb3d31b0372d1\"></a><!-- doxytag: member=\"TiXmlNode::NextSiblingElement\" ref=\"a73acf929d49d10bd0e5fb3d31b0372d1\" args=\"() const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const <a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a>* TiXmlNode::NextSiblingElement </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Convenience function to get through elements. </p>\n<p>Calls NextSibling and ToElement. Will skip all non-Element nodes. Returns 0 if there is not another element. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a0c49e739a17b9938050c22cd89617fbd\"></a><!-- doxytag: member=\"TiXmlNode::ReplaceChild\" ref=\"a0c49e739a17b9938050c22cd89617fbd\" args=\"(TiXmlNode *replaceThis, const TiXmlNode &amp;withThis)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a>* TiXmlNode::ReplaceChild </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>replaceThis</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> &amp;&nbsp;</td>\n          <td class=\"paramname\"> <em>withThis</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Replace a child of this node. </p>\n<p>Returns a pointer to the new object or NULL if an error occured. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a2a38329ca5d3f28f98ce932b8299ae90\"></a><!-- doxytag: member=\"TiXmlNode::SetValue\" ref=\"a2a38329ca5d3f28f98ce932b8299ae90\" args=\"(const char *_value)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void TiXmlNode::SetValue </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&nbsp;</td>\n          <td class=\"paramname\"> <em>_value</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Changes the value of the node. </p>\n<p>Defined as: </p>\n<div class=\"fragment\"><pre class=\"fragment\">\n\t\tDocument:\tfilename of the xml file\n\t\tElement:\tname of the element\n\t\tComment:\tthe comment text\n\t\tUnknown:\tthe tag contents\n\t\tText:\t\tthe text string\n\t\t</pre></div> \n<p>Referenced by <a class=\"el\" href=\"tinyxml_8h_source.html#l01168\">TiXmlComment::TiXmlComment()</a>, and <a class=\"el\" href=\"tinyxml_8h_source.html#l01220\">TiXmlText::TiXmlText()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a57b99d5c97d67a42b9752f5210a1ba5e\"></a><!-- doxytag: member=\"TiXmlNode::Type\" ref=\"a57b99d5c97d67a42b9752f5210a1ba5e\" args=\"() const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int TiXmlNode::Type </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const<code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Query the type (as an enumerated value, above) of this node. </p>\n<p>The possible types are: TINYXML_DOCUMENT, TINYXML_ELEMENT, TINYXML_COMMENT, TINYXML_UNKNOWN, TINYXML_TEXT, and TINYXML_DECLARATION. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a77943eb90d12c2892b1337a9f5918b41\"></a><!-- doxytag: member=\"TiXmlNode::Value\" ref=\"a77943eb90d12c2892b1337a9f5918b41\" args=\"() const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* TiXmlNode::Value </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const<code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The meaning of 'value' changes for the specific type of <a class=\"el\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>. </p>\n<div class=\"fragment\"><pre class=\"fragment\">\n\t\tDocument:\tfilename of the xml file\n\t\tElement:\tname of the element\n\t\tComment:\tthe comment text\n\t\tUnknown:\tthe tag contents\n\t\tText:\t\tthe text string\n\t\t</pre></div><p>The subclasses will wrap this function. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a6d9e505619d39bf50bfd9609c9169ea5\"></a><!-- doxytag: member=\"TiXmlNode::ValueStr\" ref=\"a6d9e505619d39bf50bfd9609c9169ea5\" args=\"() const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const std::string&amp; TiXmlNode::ValueStr </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td> const<code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Return <a class=\"el\" href=\"classTiXmlNode.html#a77943eb90d12c2892b1337a9f5918b41\" title=\"The meaning of &#39;value&#39; changes for the specific type of TiXmlNode.\">Value()</a> as a std::string. </p>\n<p>If you only use STL, this is more efficient than calling <a class=\"el\" href=\"classTiXmlNode.html#a77943eb90d12c2892b1337a9f5918b41\" title=\"The meaning of &#39;value&#39; changes for the specific type of TiXmlNode.\">Value()</a>. Only available in STL mode. </p>\n\n</div>\n</div>\n<hr/><h2>Friends And Related Function Documentation</h2>\n<a class=\"anchor\" id=\"a86cd49cfb17a844c0010b3136ac966c7\"></a><!-- doxytag: member=\"TiXmlNode::operator&lt;&lt;\" ref=\"a86cd49cfb17a844c0010b3136ac966c7\" args=\"(std::ostream &amp;out, const TiXmlNode &amp;base)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">std::ostream&amp; operator&lt;&lt; </td>\n          <td>(</td>\n          <td class=\"paramtype\">std::ostream &amp;&nbsp;</td>\n          <td class=\"paramname\"> <em>out</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> &amp;&nbsp;</td>\n          <td class=\"paramname\"> <em>base</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td><code> [friend]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>An output stream operator, for every class. </p>\n<p>Note that this outputs without any newlines or formatting, as opposed to <a class=\"el\" href=\"classTiXmlBase.html#a0de56b3f2ef14c65091a3b916437b512\" title=\"All TinyXml classes can print themselves to a filestream or the string class (TiXmlString...\">Print()</a>, which includes tabs and new lines.</p>\n<p>The operator&lt;&lt; and operator&gt;&gt; are not completely symmetric. Writing a node to a stream is very well defined. You'll get a nice stream of output, without any extra whitespace or newlines.</p>\n<p>But reading is not as well defined. (As it always is.) If you create a <a class=\"el\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a> (for example) and read that from an input stream, the text needs to define an element or junk will result. This is true of all input streams, but it's worth keeping in mind.</p>\n<p>A <a class=\"el\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a> will read nodes until it reads a root element, and all the children of that root element. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ab57bd426563c926844f65a78412e18b9\"></a><!-- doxytag: member=\"TiXmlNode::operator&gt;&gt;\" ref=\"ab57bd426563c926844f65a78412e18b9\" args=\"(std::istream &amp;in, TiXmlNode &amp;base)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">std::istream&amp; operator&gt;&gt; </td>\n          <td>(</td>\n          <td class=\"paramtype\">std::istream &amp;&nbsp;</td>\n          <td class=\"paramname\"> <em>in</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> &amp;&nbsp;</td>\n          <td class=\"paramname\"> <em>base</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td><code> [friend]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>An input stream operator, for every class. </p>\n<p>Tolerant of newlines and formatting, but doesn't expect them. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a></li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlPrinter-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlPrinter Member List</h1>This is the complete list of members for <a class=\"el\" href=\"classTiXmlPrinter.html\">TiXmlPrinter</a>, including all inherited members.<table>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlPrinter.html#a859eede9597d3e0355b77757be48735e\">CStr</a>()</td><td><a class=\"el\" href=\"classTiXmlPrinter.html\">TiXmlPrinter</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlPrinter.html#abb33ec7d4bad6aaeb57f4304394b133d\">Indent</a>()</td><td><a class=\"el\" href=\"classTiXmlPrinter.html\">TiXmlPrinter</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlPrinter.html#a11f1b4804a460b175ec244eb5724d96d\">LineBreak</a>()</td><td><a class=\"el\" href=\"classTiXmlPrinter.html\">TiXmlPrinter</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlPrinter.html#a213377a4070c7e625bae59716b089e5e\">SetIndent</a>(const char *_indent)</td><td><a class=\"el\" href=\"classTiXmlPrinter.html\">TiXmlPrinter</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlPrinter.html#a4be1e37e69e3858c59635aa947174fe6\">SetLineBreak</a>(const char *_lineBreak)</td><td><a class=\"el\" href=\"classTiXmlPrinter.html\">TiXmlPrinter</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlPrinter.html#ab23a90629e374cb1cadca090468bbd19\">SetStreamPrinting</a>()</td><td><a class=\"el\" href=\"classTiXmlPrinter.html\">TiXmlPrinter</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlPrinter.html#ad01375ae9199bd2f48252eaddce3039d\">Size</a>()</td><td><a class=\"el\" href=\"classTiXmlPrinter.html\">TiXmlPrinter</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlPrinter.html#a3bd4daf44309b41f5813a833caa0d1c9\">Str</a>()</td><td><a class=\"el\" href=\"classTiXmlPrinter.html\">TiXmlPrinter</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlPrinter.html#ace1b14d33eede2575c0743e2350f6a38\">Visit</a>(const TiXmlDeclaration &amp;declaration)</td><td><a class=\"el\" href=\"classTiXmlPrinter.html\">TiXmlPrinter</a></td><td><code> [virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlPrinter.html#a711e7d65d4af9ec70977568d2451fb1c\">Visit</a>(const TiXmlText &amp;text)</td><td><a class=\"el\" href=\"classTiXmlPrinter.html\">TiXmlPrinter</a></td><td><code> [virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlPrinter.html#a83c13d6b980064b30f989f9a35498979\">Visit</a>(const TiXmlComment &amp;comment)</td><td><a class=\"el\" href=\"classTiXmlPrinter.html\">TiXmlPrinter</a></td><td><code> [virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlPrinter.html#ad2dca6dd106e8982fd3c7db1f3330970\">Visit</a>(const TiXmlUnknown &amp;unknown)</td><td><a class=\"el\" href=\"classTiXmlPrinter.html\">TiXmlPrinter</a></td><td><code> [virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlPrinter.html#a799f4f0388570cbb54c0d3c345fef7c1\">VisitEnter</a>(const TiXmlDocument &amp;doc)</td><td><a class=\"el\" href=\"classTiXmlPrinter.html\">TiXmlPrinter</a></td><td><code> [virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlPrinter.html#a0c5e7bf8622838417a0d0bfb8f433854\">VisitEnter</a>(const TiXmlElement &amp;element, const TiXmlAttribute *firstAttribute)</td><td><a class=\"el\" href=\"classTiXmlPrinter.html\">TiXmlPrinter</a></td><td><code> [virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlPrinter.html#a66b33edd76c538b462f789b797a4fdf2\">VisitExit</a>(const TiXmlDocument &amp;doc)</td><td><a class=\"el\" href=\"classTiXmlPrinter.html\">TiXmlPrinter</a></td><td><code> [virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlPrinter.html#a1853cf2f6e63ad4b4232b4835e0acaf0\">VisitExit</a>(const TiXmlElement &amp;element)</td><td><a class=\"el\" href=\"classTiXmlPrinter.html\">TiXmlPrinter</a></td><td><code> [virtual]</code></td></tr>\n</table></div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlPrinter.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: TiXmlPrinter Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlPrinter Class Reference</h1><!-- doxytag: class=\"TiXmlPrinter\" --><!-- doxytag: inherits=\"TiXmlVisitor\" -->\n<p>Print to memory functionality.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for TiXmlPrinter:</div>\n<div class=\"dynsection\">\n <div class=\"center\">\n  <img src=\"classTiXmlPrinter.png\" usemap=\"#TiXmlPrinter_map\" alt=\"\"/>\n  <map id=\"TiXmlPrinter_map\" name=\"TiXmlPrinter_map\">\n<area href=\"classTiXmlVisitor.html\" alt=\"TiXmlVisitor\" shape=\"rect\" coords=\"0,0,81,24\"/>\n</map>\n </div>\n</div>\n\n<p><a href=\"classTiXmlPrinter-members.html\">List of all members.</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Public Member Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a799f4f0388570cbb54c0d3c345fef7c1\"></a><!-- doxytag: member=\"TiXmlPrinter::VisitEnter\" ref=\"a799f4f0388570cbb54c0d3c345fef7c1\" args=\"(const TiXmlDocument &amp;doc)\" -->\nvirtual bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlPrinter.html#a799f4f0388570cbb54c0d3c345fef7c1\">VisitEnter</a> (const <a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a> &amp;doc)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Visit a document. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a66b33edd76c538b462f789b797a4fdf2\"></a><!-- doxytag: member=\"TiXmlPrinter::VisitExit\" ref=\"a66b33edd76c538b462f789b797a4fdf2\" args=\"(const TiXmlDocument &amp;doc)\" -->\nvirtual bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlPrinter.html#a66b33edd76c538b462f789b797a4fdf2\">VisitExit</a> (const <a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a> &amp;doc)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Visit a document. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0c5e7bf8622838417a0d0bfb8f433854\"></a><!-- doxytag: member=\"TiXmlPrinter::VisitEnter\" ref=\"a0c5e7bf8622838417a0d0bfb8f433854\" args=\"(const TiXmlElement &amp;element, const TiXmlAttribute *firstAttribute)\" -->\nvirtual bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlPrinter.html#a0c5e7bf8622838417a0d0bfb8f433854\">VisitEnter</a> (const <a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a> &amp;element, const <a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a> *firstAttribute)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Visit an element. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1853cf2f6e63ad4b4232b4835e0acaf0\"></a><!-- doxytag: member=\"TiXmlPrinter::VisitExit\" ref=\"a1853cf2f6e63ad4b4232b4835e0acaf0\" args=\"(const TiXmlElement &amp;element)\" -->\nvirtual bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlPrinter.html#a1853cf2f6e63ad4b4232b4835e0acaf0\">VisitExit</a> (const <a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a> &amp;element)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Visit an element. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ace1b14d33eede2575c0743e2350f6a38\"></a><!-- doxytag: member=\"TiXmlPrinter::Visit\" ref=\"ace1b14d33eede2575c0743e2350f6a38\" args=\"(const TiXmlDeclaration &amp;declaration)\" -->\nvirtual bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlPrinter.html#ace1b14d33eede2575c0743e2350f6a38\">Visit</a> (const <a class=\"el\" href=\"classTiXmlDeclaration.html\">TiXmlDeclaration</a> &amp;declaration)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Visit a declaration. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a711e7d65d4af9ec70977568d2451fb1c\"></a><!-- doxytag: member=\"TiXmlPrinter::Visit\" ref=\"a711e7d65d4af9ec70977568d2451fb1c\" args=\"(const TiXmlText &amp;text)\" -->\nvirtual bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlPrinter.html#a711e7d65d4af9ec70977568d2451fb1c\">Visit</a> (const <a class=\"el\" href=\"classTiXmlText.html\">TiXmlText</a> &amp;text)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Visit a text node. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a83c13d6b980064b30f989f9a35498979\"></a><!-- doxytag: member=\"TiXmlPrinter::Visit\" ref=\"a83c13d6b980064b30f989f9a35498979\" args=\"(const TiXmlComment &amp;comment)\" -->\nvirtual bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlPrinter.html#a83c13d6b980064b30f989f9a35498979\">Visit</a> (const <a class=\"el\" href=\"classTiXmlComment.html\">TiXmlComment</a> &amp;comment)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Visit a comment node. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad2dca6dd106e8982fd3c7db1f3330970\"></a><!-- doxytag: member=\"TiXmlPrinter::Visit\" ref=\"ad2dca6dd106e8982fd3c7db1f3330970\" args=\"(const TiXmlUnknown &amp;unknown)\" -->\nvirtual bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlPrinter.html#ad2dca6dd106e8982fd3c7db1f3330970\">Visit</a> (const <a class=\"el\" href=\"classTiXmlUnknown.html\">TiXmlUnknown</a> &amp;unknown)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Visit an unknown node. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlPrinter.html#a213377a4070c7e625bae59716b089e5e\">SetIndent</a> (const char *_indent)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set the indent characters for printing.  <a href=\"#a213377a4070c7e625bae59716b089e5e\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abb33ec7d4bad6aaeb57f4304394b133d\"></a><!-- doxytag: member=\"TiXmlPrinter::Indent\" ref=\"abb33ec7d4bad6aaeb57f4304394b133d\" args=\"()\" -->\nconst char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlPrinter.html#abb33ec7d4bad6aaeb57f4304394b133d\">Indent</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Query the indention string. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlPrinter.html#a4be1e37e69e3858c59635aa947174fe6\">SetLineBreak</a> (const char *_lineBreak)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set the line breaking string.  <a href=\"#a4be1e37e69e3858c59635aa947174fe6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a11f1b4804a460b175ec244eb5724d96d\"></a><!-- doxytag: member=\"TiXmlPrinter::LineBreak\" ref=\"a11f1b4804a460b175ec244eb5724d96d\" args=\"()\" -->\nconst char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlPrinter.html#a11f1b4804a460b175ec244eb5724d96d\">LineBreak</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Query the current line breaking string. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlPrinter.html#ab23a90629e374cb1cadca090468bbd19\">SetStreamPrinting</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Switch over to \"stream printing\" which is the most dense formatting without linebreaks.  <a href=\"#ab23a90629e374cb1cadca090468bbd19\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a859eede9597d3e0355b77757be48735e\"></a><!-- doxytag: member=\"TiXmlPrinter::CStr\" ref=\"a859eede9597d3e0355b77757be48735e\" args=\"()\" -->\nconst char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlPrinter.html#a859eede9597d3e0355b77757be48735e\">CStr</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return the result. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad01375ae9199bd2f48252eaddce3039d\"></a><!-- doxytag: member=\"TiXmlPrinter::Size\" ref=\"ad01375ae9199bd2f48252eaddce3039d\" args=\"()\" -->\nsize_t&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlPrinter.html#ad01375ae9199bd2f48252eaddce3039d\">Size</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return the length of the result string. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3bd4daf44309b41f5813a833caa0d1c9\"></a><!-- doxytag: member=\"TiXmlPrinter::Str\" ref=\"a3bd4daf44309b41f5813a833caa0d1c9\" args=\"()\" -->\nconst std::string &amp;&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlPrinter.html#a3bd4daf44309b41f5813a833caa0d1c9\">Str</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Return the result. <br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>Print to memory functionality. </p>\n<p>The <a class=\"el\" href=\"classTiXmlPrinter.html\" title=\"Print to memory functionality.\">TiXmlPrinter</a> is useful when you need to:</p>\n<ol type=\"1\">\n<li>Print to memory (especially in non-STL mode)</li>\n<li>Control formatting (line endings, etc.)</li>\n</ol>\n<p>When constructed, the <a class=\"el\" href=\"classTiXmlPrinter.html\" title=\"Print to memory functionality.\">TiXmlPrinter</a> is in its default \"pretty printing\" mode. Before calling Accept() you can call methods to control the printing of the XML document. After <a class=\"el\" href=\"classTiXmlNode.html#acc0f88b7462c6cb73809d410a4f5bb86\" title=\"Accept a hierchical visit the nodes in the TinyXML DOM.\">TiXmlNode::Accept()</a> is called, the printed document can be accessed via the <a class=\"el\" href=\"classTiXmlPrinter.html#a859eede9597d3e0355b77757be48735e\" title=\"Return the result.\">CStr()</a>, <a class=\"el\" href=\"classTiXmlPrinter.html#a3bd4daf44309b41f5813a833caa0d1c9\" title=\"Return the result.\">Str()</a>, and <a class=\"el\" href=\"classTiXmlPrinter.html#ad01375ae9199bd2f48252eaddce3039d\" title=\"Return the length of the result string.\">Size()</a> methods.</p>\n<p><a class=\"el\" href=\"classTiXmlPrinter.html\" title=\"Print to memory functionality.\">TiXmlPrinter</a> uses the Visitor API. </p>\n<div class=\"fragment\"><pre class=\"fragment\">\n\tTiXmlPrinter printer;\n\tprinter.SetIndent( \"\\t\" );\n\n\tdoc.Accept( &amp;printer );\n\tfprintf( stdout, \"%s\", printer.CStr() );\n\t</pre></div> <hr/><h2>Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a213377a4070c7e625bae59716b089e5e\"></a><!-- doxytag: member=\"TiXmlPrinter::SetIndent\" ref=\"a213377a4070c7e625bae59716b089e5e\" args=\"(const char *_indent)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void TiXmlPrinter::SetIndent </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&nbsp;</td>\n          <td class=\"paramname\"> <em>_indent</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Set the indent characters for printing. </p>\n<p>By default 4 spaces but tab () is also useful, or null/empty string for no indentation. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a4be1e37e69e3858c59635aa947174fe6\"></a><!-- doxytag: member=\"TiXmlPrinter::SetLineBreak\" ref=\"a4be1e37e69e3858c59635aa947174fe6\" args=\"(const char *_lineBreak)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void TiXmlPrinter::SetLineBreak </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&nbsp;</td>\n          <td class=\"paramname\"> <em>_lineBreak</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Set the line breaking string. </p>\n<p>By default set to newline (<br/>\n). Some operating systems prefer other characters, or can be set to the null/empty string for no indenation. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ab23a90629e374cb1cadca090468bbd19\"></a><!-- doxytag: member=\"TiXmlPrinter::SetStreamPrinting\" ref=\"ab23a90629e374cb1cadca090468bbd19\" args=\"()\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void TiXmlPrinter::SetStreamPrinting </td>\n          <td>(</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Switch over to \"stream printing\" which is the most dense formatting without linebreaks. </p>\n<p>Common when the XML is needed for network transmission. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a></li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlText-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlText Member List</h1>This is the complete list of members for <a class=\"el\" href=\"classTiXmlText.html\">TiXmlText</a>, including all inherited members.<table>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlText.html#a8483d4415ce9de6c4fa8f63d067d5de6\">Accept</a>(TiXmlVisitor *content) const </td><td><a class=\"el\" href=\"classTiXmlText.html\">TiXmlText</a></td><td><code> [virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlText.html#ad1a6a6b83fa2271022dd97c072a2b586\">CDATA</a>() const </td><td><a class=\"el\" href=\"classTiXmlText.html\">TiXmlText</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a708e7f953df61d4d2d12f73171550a4b\">Clear</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlText.html#a0c411e93a27537369479d034cc82da3b\">Clone</a>() const </td><td><a class=\"el\" href=\"classTiXmlText.html\">TiXmlText</a></td><td><code> [protected, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ab54bfb9b70fe6dd276e7b279cab7f003\">Column</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a6bd8c315c1acb09e34107b8736505948\">EncodeString</a>(const TIXML_STRING &amp;str, TIXML_STRING *out)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a44c8eee26bbe2d1b2762038df9dde2f0\">FirstChild</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1f05828d023150706eeb16d6fb3f6355\">FirstChild</a>(const char *value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#abc8bf32be6419ec453a731868de19554\">FirstChild</a>(const char *_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a07f6200a5956c723c5b52d70f29c46f6\">FirstChild</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a10d2669ccb5e29e02fcb0e4408685ef6\">FirstChild</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#af4fb652f6bd79ae0d5ce7d0f7d3c0fba\">FirstChildElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#accda2c6b45c25bb5a6f9c3407a644e61\">FirstChildElement</a>(const char *_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a327ad4bbd90073c5dfc931b07314f5f7\">FirstChildElement</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a7f1d7291880534c1e5cdeb392d8c1f45\">FirstChildElement</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a80e397fa973cf5323e33b07154b024f3\">GetDocument</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a6559a530ca6763fc301a14d77ed28c17\">GetUserData</a>()</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ad0120210e4680ef2088601753ce0ede4\">GetUserData</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ad9b75e54ec19301c8b4d5ff583d0b3d5\">InsertAfterChild</a>(TiXmlNode *afterThis, const TiXmlNode &amp;addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a0c146fa2fff0157b681594102f48cbc7\">InsertBeforeChild</a>(TiXmlNode *beforeThis, const TiXmlNode &amp;addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ad7d4630e1a2a916edda16be22448a8ba\">InsertEndChild</a>(const TiXmlNode &amp;addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ad4b1472531c647a25b1840a87ae42438\">IsWhiteSpaceCondensed</a>()</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline, static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a8621196ba3705fa226bef4a761cc51b6\">IterateChildren</a>(const TiXmlNode *previous) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#adfaef35a076b9343adc1420757376c39\">IterateChildren</a>(const char *value, const TiXmlNode *previous) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1cbaaf8e82c09ad763d52616d75724df\">IterateChildren</a>(const std::string &amp;_value, const TiXmlNode *previous) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a16e9ad53e2f5445b14bf325c90aa862c\">IterateChildren</a>(const std::string &amp;_value, const TiXmlNode *previous)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a6432d2b2495f6caf9cb4278df706a031\">LastChild</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#abad5bf1059c48127b958711ef89e8e5d\">LastChild</a>(const char *_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a256d0cdbfcfeccae83f3a1c9747a8b63\">LastChild</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a69772c9202f70553f940b15c06b07be3\">LastChild</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a5d29442ae46de6d0168429156197bfc6\">LinkEndChild</a>(TiXmlNode *addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1b94d2f7fa7ab25a5a8e8d4340c449c9\">NextSibling</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1757c1f4d01e8c9596ffdbd561c76aea\">NextSibling</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#af854baeba384f5fe9859f5aee03b548e\">NextSibling</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a2e61c0b89a77e36a0e8c60490003cb46\">NextSibling</a>(const char *) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a73acf929d49d10bd0e5fb3d31b0372d1\">NextSiblingElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a071ba77fd7ab79402fa84b7e9b8607b3\">NextSiblingElement</a>(const char *) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a7572d0af9d1e696ee3f05d8bb5ebb463\">NextSiblingElement</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a506958e34406729a4e4c5326ea39d081\">NextSiblingElement</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#aeed21ad30630ef6e7faf096127edc9f3\">NoChildren</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a836eded4920ab9e9ef28496f48cd95a2\">NodeType</a> enum name</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a86cd49cfb17a844c0010b3136ac966c7\">operator&lt;&lt;</a>(std::ostream &amp;out, const TiXmlNode &amp;base)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [friend]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a52ef17e7080df2490cf87bde380685ab\">operator&lt;&lt;</a>(std::string &amp;out, const TiXmlNode &amp;base)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [friend]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ab57bd426563c926844f65a78412e18b9\">operator&gt;&gt;</a>(std::istream &amp;in, TiXmlNode &amp;base)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [friend]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ab643043132ffd794f8602685d34a982e\">Parent</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ac2cd892768726270e511b2ab32de4d10\">PreviousSibling</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a5bdd49327eec1e609b7d22af706b8316\">PreviousSibling</a>(const char *) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a658276f57d35d5d4256d1dc1a2c398ab\">PreviousSibling</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#acc8a0434c7f401d4a3b6dee77c1a5912\">PreviousSibling</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlText.html#a0cafbf6f236c7f02d12b2bffc2b7976b\">Print</a>(FILE *cfile, int depth) const </td><td><a class=\"el\" href=\"classTiXmlText.html\">TiXmlText</a></td><td><code> [virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ae19d8510efc90596552f4feeac9a8fbf\">RemoveChild</a>(TiXmlNode *removeThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a0c49e739a17b9938050c22cd89617fbd\">ReplaceChild</a>(TiXmlNode *replaceThis, const TiXmlNode &amp;withThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a024bceb070188df92c2a8d8852dd0853\">Row</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlText.html#acb17ff7c5d09b2c839393445a3de5ea9\">SetCDATA</a>(bool _cdata)</td><td><a class=\"el\" href=\"classTiXmlText.html\">TiXmlText</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a0f799ec645bfb8d8a969e83478f379c1\">SetCondenseWhiteSpace</a>(bool condense)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline, static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ac6b3e0f790930d4970ec30764e937b5d\">SetUserData</a>(void *user)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a2a38329ca5d3f28f98ce932b8299ae90\">SetValue</a>(const char *_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a2598d5f448042c1abbeae4503dd45ff2\">SetValue</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlText.html#af659e77c6b87d684827f35a8f4895960\">TiXmlText</a>(const char *initValue)</td><td><a class=\"el\" href=\"classTiXmlText.html\">TiXmlText</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlText.html#a439792f6183a3d3fb6f2bc2b16fa5691\">TiXmlText</a>(const std::string &amp;initValue)</td><td><a class=\"el\" href=\"classTiXmlText.html\">TiXmlText</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#aa0a5086f9eaee910bbfdc7f975e26574\">ToComment</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a383e06a0787f7063953934867990f849\">ToComment</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a9f43e6984fc7d4afd6eb32714c6b7b72\">ToDeclaration</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a4027136ca820ff4a636b607231b6a6df\">ToDeclaration</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a8a4cda4b15c29f64cff419309aebed08\">ToDocument</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a6a4c8ac28ee7a745d059db6691e03bae\">ToDocument</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a72abed96dc9667ab9e0a2a275301bb1c\">ToElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#aa65d000223187d22a4dcebd7479e9ebc\">ToElement</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlText.html#a895bf34ffad17f7439ab2a52b9651648\">ToText</a>() const </td><td><a class=\"el\" href=\"classTiXmlText.html\">TiXmlText</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlText.html#ae7c3a8fd3e4dbf6c0c4363a943d72f5b\">ToText</a>()</td><td><a class=\"el\" href=\"classTiXmlText.html\">TiXmlText</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#afd7205cf31d7a376929f8a36930627a2\">ToUnknown</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a06de5af852668c7e4af0d09c205f0b0d\">ToUnknown</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a57b99d5c97d67a42b9752f5210a1ba5e\">Type</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ab242c01590191f644569fa89a080d97c\">userData</a></td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [protected]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a77943eb90d12c2892b1337a9f5918b41\">Value</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a6d9e505619d39bf50bfd9609c9169ea5\">ValueStr</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n</table></div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlText.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: TiXmlText Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlText Class Reference</h1><!-- doxytag: class=\"TiXmlText\" --><!-- doxytag: inherits=\"TiXmlNode\" -->\n<p>XML text.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for TiXmlText:</div>\n<div class=\"dynsection\">\n <div class=\"center\">\n  <img src=\"classTiXmlText.png\" usemap=\"#TiXmlText_map\" alt=\"\"/>\n  <map id=\"TiXmlText_map\" name=\"TiXmlText_map\">\n<area href=\"classTiXmlNode.html\" alt=\"TiXmlNode\" shape=\"rect\" coords=\"0,56,73,80\"/>\n<area href=\"classTiXmlBase.html\" alt=\"TiXmlBase\" shape=\"rect\" coords=\"0,0,73,24\"/>\n</map>\n </div>\n</div>\n\n<p><a href=\"classTiXmlText-members.html\">List of all members.</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Public Member Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlText.html#af659e77c6b87d684827f35a8f4895960\">TiXmlText</a> (const char *initValue)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Constructor for text element.  <a href=\"#af659e77c6b87d684827f35a8f4895960\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a439792f6183a3d3fb6f2bc2b16fa5691\"></a><!-- doxytag: member=\"TiXmlText::TiXmlText\" ref=\"a439792f6183a3d3fb6f2bc2b16fa5691\" args=\"(const std::string &amp;initValue)\" -->\n&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlText.html#a439792f6183a3d3fb6f2bc2b16fa5691\">TiXmlText</a> (const std::string &amp;initValue)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Constructor. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlText.html#a0cafbf6f236c7f02d12b2bffc2b7976b\">Print</a> (FILE *cfile, int depth) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">All TinyXml classes can print themselves to a filestream or the string class (TiXmlString in non-STL mode, std::string in STL mode.  <a href=\"#a0cafbf6f236c7f02d12b2bffc2b7976b\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad1a6a6b83fa2271022dd97c072a2b586\"></a><!-- doxytag: member=\"TiXmlText::CDATA\" ref=\"ad1a6a6b83fa2271022dd97c072a2b586\" args=\"() const \" -->\nbool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlText.html#ad1a6a6b83fa2271022dd97c072a2b586\">CDATA</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Queries whether this represents text using a CDATA section. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acb17ff7c5d09b2c839393445a3de5ea9\"></a><!-- doxytag: member=\"TiXmlText::SetCDATA\" ref=\"acb17ff7c5d09b2c839393445a3de5ea9\" args=\"(bool _cdata)\" -->\nvoid&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlText.html#acb17ff7c5d09b2c839393445a3de5ea9\">SetCDATA</a> (bool _cdata)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Turns on or off a CDATA representation of text. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a895bf34ffad17f7439ab2a52b9651648\"></a><!-- doxytag: member=\"TiXmlText::ToText\" ref=\"a895bf34ffad17f7439ab2a52b9651648\" args=\"() const \" -->\nvirtual const <a class=\"el\" href=\"classTiXmlText.html\">TiXmlText</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlText.html#a895bf34ffad17f7439ab2a52b9651648\">ToText</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae7c3a8fd3e4dbf6c0c4363a943d72f5b\"></a><!-- doxytag: member=\"TiXmlText::ToText\" ref=\"ae7c3a8fd3e4dbf6c0c4363a943d72f5b\" args=\"()\" -->\nvirtual <a class=\"el\" href=\"classTiXmlText.html\">TiXmlText</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlText.html#ae7c3a8fd3e4dbf6c0c4363a943d72f5b\">ToText</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8483d4415ce9de6c4fa8f63d067d5de6\"></a><!-- doxytag: member=\"TiXmlText::Accept\" ref=\"a8483d4415ce9de6c4fa8f63d067d5de6\" args=\"(TiXmlVisitor *content) const \" -->\nvirtual bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlText.html#a8483d4415ce9de6c4fa8f63d067d5de6\">Accept</a> (<a class=\"el\" href=\"classTiXmlVisitor.html\">TiXmlVisitor</a> *content) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Walk the XML tree visiting this node and all of its children. <br/></td></tr>\n<tr><td colspan=\"2\"><h2>Protected Member Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0c411e93a27537369479d034cc82da3b\"></a><!-- doxytag: member=\"TiXmlText::Clone\" ref=\"a0c411e93a27537369479d034cc82da3b\" args=\"() const \" -->\nvirtual <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlText.html#a0c411e93a27537369479d034cc82da3b\">Clone</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">[internal use] Creates a new Element and returns it. <br/></td></tr>\n<tr><td colspan=\"2\"><h2>Friends</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab6592e32cb9132be517cc12a70564c4b\"></a><!-- doxytag: member=\"TiXmlText::TiXmlElement\" ref=\"ab6592e32cb9132be517cc12a70564c4b\" args=\"\" -->\nclass&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlText.html#ab6592e32cb9132be517cc12a70564c4b\">TiXmlElement</a></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>XML text. </p>\n<p>A text node can have 2 ways to output the next. \"normal\" output and CDATA. It will default to the mode it was parsed from the XML file and you generally want to leave it alone, but you can change the output mode with <a class=\"el\" href=\"classTiXmlText.html#acb17ff7c5d09b2c839393445a3de5ea9\" title=\"Turns on or off a CDATA representation of text.\">SetCDATA()</a> and query it with <a class=\"el\" href=\"classTiXmlText.html#ad1a6a6b83fa2271022dd97c072a2b586\" title=\"Queries whether this represents text using a CDATA section.\">CDATA()</a>. </p>\n<hr/><h2>Constructor &amp; Destructor Documentation</h2>\n<a class=\"anchor\" id=\"af659e77c6b87d684827f35a8f4895960\"></a><!-- doxytag: member=\"TiXmlText::TiXmlText\" ref=\"af659e77c6b87d684827f35a8f4895960\" args=\"(const char *initValue)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">TiXmlText::TiXmlText </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&nbsp;</td>\n          <td class=\"paramname\"> <em>initValue</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td><code> [inline]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Constructor for text element. </p>\n<p>By default, it is treated as normal, encoded text. If you want it be output as a CDATA text element, set the parameter _cdata to 'true' </p>\n\n<p>References <a class=\"el\" href=\"tinyxml_8h_source.html#l00508\">TiXmlNode::SetValue()</a>.</p>\n\n</div>\n</div>\n<hr/><h2>Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a0cafbf6f236c7f02d12b2bffc2b7976b\"></a><!-- doxytag: member=\"TiXmlText::Print\" ref=\"a0cafbf6f236c7f02d12b2bffc2b7976b\" args=\"(FILE *cfile, int depth) const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void TiXmlText::Print </td>\n          <td>(</td>\n          <td class=\"paramtype\">FILE *&nbsp;</td>\n          <td class=\"paramname\"> <em>cfile</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>depth</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td> const<code> [virtual]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>All TinyXml classes can print themselves to a filestream or the string class (TiXmlString in non-STL mode, std::string in STL mode. </p>\n<p>) Either or both cfile and str can be null.</p>\n<p>This is a formatted print, and will insert tabs and newlines.</p>\n<p>(For an unformatted stream, use the &lt;&lt; operator.) </p>\n\n<p>Implements <a class=\"el\" href=\"classTiXmlBase.html#a0de56b3f2ef14c65091a3b916437b512\">TiXmlBase</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a></li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlUnknown-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlUnknown Member List</h1>This is the complete list of members for <a class=\"el\" href=\"classTiXmlUnknown.html\">TiXmlUnknown</a>, including all inherited members.<table>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlUnknown.html#ad7122e5135581b3c832a1a3217760a93\">Accept</a>(TiXmlVisitor *content) const </td><td><a class=\"el\" href=\"classTiXmlUnknown.html\">TiXmlUnknown</a></td><td><code> [virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a708e7f953df61d4d2d12f73171550a4b\">Clear</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlUnknown.html#a0960bb7428b3f341da46244229604d73\">Clone</a>() const </td><td><a class=\"el\" href=\"classTiXmlUnknown.html\">TiXmlUnknown</a></td><td><code> [virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ab54bfb9b70fe6dd276e7b279cab7f003\">Column</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a6bd8c315c1acb09e34107b8736505948\">EncodeString</a>(const TIXML_STRING &amp;str, TIXML_STRING *out)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a44c8eee26bbe2d1b2762038df9dde2f0\">FirstChild</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1f05828d023150706eeb16d6fb3f6355\">FirstChild</a>(const char *value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#abc8bf32be6419ec453a731868de19554\">FirstChild</a>(const char *_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a07f6200a5956c723c5b52d70f29c46f6\">FirstChild</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a10d2669ccb5e29e02fcb0e4408685ef6\">FirstChild</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#af4fb652f6bd79ae0d5ce7d0f7d3c0fba\">FirstChildElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#accda2c6b45c25bb5a6f9c3407a644e61\">FirstChildElement</a>(const char *_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a327ad4bbd90073c5dfc931b07314f5f7\">FirstChildElement</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a7f1d7291880534c1e5cdeb392d8c1f45\">FirstChildElement</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a80e397fa973cf5323e33b07154b024f3\">GetDocument</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a6559a530ca6763fc301a14d77ed28c17\">GetUserData</a>()</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ad0120210e4680ef2088601753ce0ede4\">GetUserData</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ad9b75e54ec19301c8b4d5ff583d0b3d5\">InsertAfterChild</a>(TiXmlNode *afterThis, const TiXmlNode &amp;addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a0c146fa2fff0157b681594102f48cbc7\">InsertBeforeChild</a>(TiXmlNode *beforeThis, const TiXmlNode &amp;addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ad7d4630e1a2a916edda16be22448a8ba\">InsertEndChild</a>(const TiXmlNode &amp;addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ad4b1472531c647a25b1840a87ae42438\">IsWhiteSpaceCondensed</a>()</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline, static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a8621196ba3705fa226bef4a761cc51b6\">IterateChildren</a>(const TiXmlNode *previous) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#adfaef35a076b9343adc1420757376c39\">IterateChildren</a>(const char *value, const TiXmlNode *previous) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1cbaaf8e82c09ad763d52616d75724df\">IterateChildren</a>(const std::string &amp;_value, const TiXmlNode *previous) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a16e9ad53e2f5445b14bf325c90aa862c\">IterateChildren</a>(const std::string &amp;_value, const TiXmlNode *previous)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a6432d2b2495f6caf9cb4278df706a031\">LastChild</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#abad5bf1059c48127b958711ef89e8e5d\">LastChild</a>(const char *_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a256d0cdbfcfeccae83f3a1c9747a8b63\">LastChild</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a69772c9202f70553f940b15c06b07be3\">LastChild</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a5d29442ae46de6d0168429156197bfc6\">LinkEndChild</a>(TiXmlNode *addThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1b94d2f7fa7ab25a5a8e8d4340c449c9\">NextSibling</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a1757c1f4d01e8c9596ffdbd561c76aea\">NextSibling</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#af854baeba384f5fe9859f5aee03b548e\">NextSibling</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a2e61c0b89a77e36a0e8c60490003cb46\">NextSibling</a>(const char *) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a73acf929d49d10bd0e5fb3d31b0372d1\">NextSiblingElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a071ba77fd7ab79402fa84b7e9b8607b3\">NextSiblingElement</a>(const char *) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a7572d0af9d1e696ee3f05d8bb5ebb463\">NextSiblingElement</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a506958e34406729a4e4c5326ea39d081\">NextSiblingElement</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#aeed21ad30630ef6e7faf096127edc9f3\">NoChildren</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a836eded4920ab9e9ef28496f48cd95a2\">NodeType</a> enum name</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a86cd49cfb17a844c0010b3136ac966c7\">operator&lt;&lt;</a>(std::ostream &amp;out, const TiXmlNode &amp;base)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [friend]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a52ef17e7080df2490cf87bde380685ab\">operator&lt;&lt;</a>(std::string &amp;out, const TiXmlNode &amp;base)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [friend]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ab57bd426563c926844f65a78412e18b9\">operator&gt;&gt;</a>(std::istream &amp;in, TiXmlNode &amp;base)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [friend]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ab643043132ffd794f8602685d34a982e\">Parent</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ac2cd892768726270e511b2ab32de4d10\">PreviousSibling</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a5bdd49327eec1e609b7d22af706b8316\">PreviousSibling</a>(const char *) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a658276f57d35d5d4256d1dc1a2c398ab\">PreviousSibling</a>(const std::string &amp;_value) const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#acc8a0434c7f401d4a3b6dee77c1a5912\">PreviousSibling</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlUnknown.html#a31ba089a40fb5a1869750fce09b0bacb\">Print</a>(FILE *cfile, int depth) const </td><td><a class=\"el\" href=\"classTiXmlUnknown.html\">TiXmlUnknown</a></td><td><code> [virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#ae19d8510efc90596552f4feeac9a8fbf\">RemoveChild</a>(TiXmlNode *removeThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a0c49e739a17b9938050c22cd89617fbd\">ReplaceChild</a>(TiXmlNode *replaceThis, const TiXmlNode &amp;withThis)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a024bceb070188df92c2a8d8852dd0853\">Row</a>() const </td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#a0f799ec645bfb8d8a969e83478f379c1\">SetCondenseWhiteSpace</a>(bool condense)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline, static]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ac6b3e0f790930d4970ec30764e937b5d\">SetUserData</a>(void *user)</td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a2a38329ca5d3f28f98ce932b8299ae90\">SetValue</a>(const char *_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a2598d5f448042c1abbeae4503dd45ff2\">SetValue</a>(const std::string &amp;_value)</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#aa0a5086f9eaee910bbfdc7f975e26574\">ToComment</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a383e06a0787f7063953934867990f849\">ToComment</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a9f43e6984fc7d4afd6eb32714c6b7b72\">ToDeclaration</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a4027136ca820ff4a636b607231b6a6df\">ToDeclaration</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a8a4cda4b15c29f64cff419309aebed08\">ToDocument</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a6a4c8ac28ee7a745d059db6691e03bae\">ToDocument</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a72abed96dc9667ab9e0a2a275301bb1c\">ToElement</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#aa65d000223187d22a4dcebd7479e9ebc\">ToElement</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a95a46a52c525992d6b4ee08beb14cd69\">ToText</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a3ddfbcac78fbea041fad57e5c6d60a03\">ToText</a>()</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlUnknown.html#ab0313e5fe77987d746ac1a97a254419d\">ToUnknown</a>() const </td><td><a class=\"el\" href=\"classTiXmlUnknown.html\">TiXmlUnknown</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlUnknown.html#a67c9fd22940e8c47f706a72cdd2e332c\">ToUnknown</a>()</td><td><a class=\"el\" href=\"classTiXmlUnknown.html\">TiXmlUnknown</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a57b99d5c97d67a42b9752f5210a1ba5e\">Type</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlBase.html#ab242c01590191f644569fa89a080d97c\">userData</a></td><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a></td><td><code> [protected]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a77943eb90d12c2892b1337a9f5918b41\">Value</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlNode.html#a6d9e505619d39bf50bfd9609c9169ea5\">ValueStr</a>() const </td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a></td><td><code> [inline]</code></td></tr>\n</table></div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlUnknown.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: TiXmlUnknown Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlUnknown Class Reference</h1><!-- doxytag: class=\"TiXmlUnknown\" --><!-- doxytag: inherits=\"TiXmlNode\" -->\n<p>Any tag that tinyXml doesn't recognize is saved as an unknown.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for TiXmlUnknown:</div>\n<div class=\"dynsection\">\n <div class=\"center\">\n  <img src=\"classTiXmlUnknown.png\" usemap=\"#TiXmlUnknown_map\" alt=\"\"/>\n  <map id=\"TiXmlUnknown_map\" name=\"TiXmlUnknown_map\">\n<area href=\"classTiXmlNode.html\" alt=\"TiXmlNode\" shape=\"rect\" coords=\"0,56,94,80\"/>\n<area href=\"classTiXmlBase.html\" alt=\"TiXmlBase\" shape=\"rect\" coords=\"0,0,94,24\"/>\n</map>\n </div>\n</div>\n\n<p><a href=\"classTiXmlUnknown-members.html\">List of all members.</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Public Member Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0960bb7428b3f341da46244229604d73\"></a><!-- doxytag: member=\"TiXmlUnknown::Clone\" ref=\"a0960bb7428b3f341da46244229604d73\" args=\"() const \" -->\nvirtual <a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlUnknown.html#a0960bb7428b3f341da46244229604d73\">Clone</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Creates a copy of this Unknown and returns it. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlUnknown.html#a31ba089a40fb5a1869750fce09b0bacb\">Print</a> (FILE *cfile, int depth) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">All TinyXml classes can print themselves to a filestream or the string class (TiXmlString in non-STL mode, std::string in STL mode.  <a href=\"#a31ba089a40fb5a1869750fce09b0bacb\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab0313e5fe77987d746ac1a97a254419d\"></a><!-- doxytag: member=\"TiXmlUnknown::ToUnknown\" ref=\"ab0313e5fe77987d746ac1a97a254419d\" args=\"() const \" -->\nvirtual const <a class=\"el\" href=\"classTiXmlUnknown.html\">TiXmlUnknown</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlUnknown.html#ab0313e5fe77987d746ac1a97a254419d\">ToUnknown</a> () const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a67c9fd22940e8c47f706a72cdd2e332c\"></a><!-- doxytag: member=\"TiXmlUnknown::ToUnknown\" ref=\"a67c9fd22940e8c47f706a72cdd2e332c\" args=\"()\" -->\nvirtual <a class=\"el\" href=\"classTiXmlUnknown.html\">TiXmlUnknown</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlUnknown.html#a67c9fd22940e8c47f706a72cdd2e332c\">ToUnknown</a> ()</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Cast to a more defined type. Will return null not of the requested type. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad7122e5135581b3c832a1a3217760a93\"></a><!-- doxytag: member=\"TiXmlUnknown::Accept\" ref=\"ad7122e5135581b3c832a1a3217760a93\" args=\"(TiXmlVisitor *content) const \" -->\nvirtual bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlUnknown.html#ad7122e5135581b3c832a1a3217760a93\">Accept</a> (<a class=\"el\" href=\"classTiXmlVisitor.html\">TiXmlVisitor</a> *content) const </td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Walk the XML tree visiting this node and all of its children. <br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>Any tag that tinyXml doesn't recognize is saved as an unknown. </p>\n<p>It is a tag of text, but should not be modified. It will be written back to the XML, unchanged, when the file is saved.</p>\n<p>DTD tags get thrown into TiXmlUnknowns. </p>\n<hr/><h2>Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a31ba089a40fb5a1869750fce09b0bacb\"></a><!-- doxytag: member=\"TiXmlUnknown::Print\" ref=\"a31ba089a40fb5a1869750fce09b0bacb\" args=\"(FILE *cfile, int depth) const \" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void TiXmlUnknown::Print </td>\n          <td>(</td>\n          <td class=\"paramtype\">FILE *&nbsp;</td>\n          <td class=\"paramname\"> <em>cfile</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>depth</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td> const<code> [virtual]</code></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>All TinyXml classes can print themselves to a filestream or the string class (TiXmlString in non-STL mode, std::string in STL mode. </p>\n<p>) Either or both cfile and str can be null.</p>\n<p>This is a formatted print, and will insert tabs and newlines.</p>\n<p>(For an unformatted stream, use the &lt;&lt; operator.) </p>\n\n<p>Implements <a class=\"el\" href=\"classTiXmlBase.html#a0de56b3f2ef14c65091a3b916437b512\">TiXmlBase</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a></li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlVisitor-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlVisitor Member List</h1>This is the complete list of members for <a class=\"el\" href=\"classTiXmlVisitor.html\">TiXmlVisitor</a>, including all inherited members.<table>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlVisitor.html#afad71c71ce6473fb9b4b64cd92de4a19\">Visit</a>(const TiXmlDeclaration &amp;)</td><td><a class=\"el\" href=\"classTiXmlVisitor.html\">TiXmlVisitor</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlVisitor.html#a399b8ebca5cd14664974a32d2ce029e5\">Visit</a>(const TiXmlText &amp;)</td><td><a class=\"el\" href=\"classTiXmlVisitor.html\">TiXmlVisitor</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlVisitor.html#a53a60e7a528627b31af3161972cc7fa2\">Visit</a>(const TiXmlComment &amp;)</td><td><a class=\"el\" href=\"classTiXmlVisitor.html\">TiXmlVisitor</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlVisitor.html#a7e284d607d275c51dac1adb58159ce28\">Visit</a>(const TiXmlUnknown &amp;)</td><td><a class=\"el\" href=\"classTiXmlVisitor.html\">TiXmlVisitor</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlVisitor.html#a07baecb52dd7d8716ae2a48ad0956ee0\">VisitEnter</a>(const TiXmlDocument &amp;)</td><td><a class=\"el\" href=\"classTiXmlVisitor.html\">TiXmlVisitor</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlVisitor.html#af6c6178ffa517bbdba95d70490875fff\">VisitEnter</a>(const TiXmlElement &amp;, const TiXmlAttribute *)</td><td><a class=\"el\" href=\"classTiXmlVisitor.html\">TiXmlVisitor</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlVisitor.html#aa0ade4f27087447e93974e975c3246ad\">VisitExit</a>(const TiXmlDocument &amp;)</td><td><a class=\"el\" href=\"classTiXmlVisitor.html\">TiXmlVisitor</a></td><td><code> [inline, virtual]</code></td></tr>\n  <tr class=\"memlist\"><td><a class=\"el\" href=\"classTiXmlVisitor.html#aec2b1f8116226d52f3a1b95dafd3a32c\">VisitExit</a>(const TiXmlElement &amp;)</td><td><a class=\"el\" href=\"classTiXmlVisitor.html\">TiXmlVisitor</a></td><td><code> [inline, virtual]</code></td></tr>\n</table></div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classTiXmlVisitor.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: TiXmlVisitor Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TiXmlVisitor Class Reference</h1><!-- doxytag: class=\"TiXmlVisitor\" -->\n<p>Implements the interface to the \"Visitor pattern\" (see the Accept() method.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for TiXmlVisitor:</div>\n<div class=\"dynsection\">\n <div class=\"center\">\n  <img src=\"classTiXmlVisitor.png\" usemap=\"#TiXmlVisitor_map\" alt=\"\"/>\n  <map id=\"TiXmlVisitor_map\" name=\"TiXmlVisitor_map\">\n<area href=\"classTiXmlPrinter.html\" alt=\"TiXmlPrinter\" shape=\"rect\" coords=\"0,56,81,80\"/>\n</map>\n </div>\n</div>\n\n<p><a href=\"classTiXmlVisitor-members.html\">List of all members.</a></p>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr><td colspan=\"2\"><h2>Public Member Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a07baecb52dd7d8716ae2a48ad0956ee0\"></a><!-- doxytag: member=\"TiXmlVisitor::VisitEnter\" ref=\"a07baecb52dd7d8716ae2a48ad0956ee0\" args=\"(const TiXmlDocument &amp;)\" -->\nvirtual bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlVisitor.html#a07baecb52dd7d8716ae2a48ad0956ee0\">VisitEnter</a> (const <a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a> &amp;)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Visit a document. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa0ade4f27087447e93974e975c3246ad\"></a><!-- doxytag: member=\"TiXmlVisitor::VisitExit\" ref=\"aa0ade4f27087447e93974e975c3246ad\" args=\"(const TiXmlDocument &amp;)\" -->\nvirtual bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlVisitor.html#aa0ade4f27087447e93974e975c3246ad\">VisitExit</a> (const <a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a> &amp;)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Visit a document. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af6c6178ffa517bbdba95d70490875fff\"></a><!-- doxytag: member=\"TiXmlVisitor::VisitEnter\" ref=\"af6c6178ffa517bbdba95d70490875fff\" args=\"(const TiXmlElement &amp;, const TiXmlAttribute *)\" -->\nvirtual bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlVisitor.html#af6c6178ffa517bbdba95d70490875fff\">VisitEnter</a> (const <a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a> &amp;, const <a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a> *)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Visit an element. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aec2b1f8116226d52f3a1b95dafd3a32c\"></a><!-- doxytag: member=\"TiXmlVisitor::VisitExit\" ref=\"aec2b1f8116226d52f3a1b95dafd3a32c\" args=\"(const TiXmlElement &amp;)\" -->\nvirtual bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlVisitor.html#aec2b1f8116226d52f3a1b95dafd3a32c\">VisitExit</a> (const <a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a> &amp;)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Visit an element. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afad71c71ce6473fb9b4b64cd92de4a19\"></a><!-- doxytag: member=\"TiXmlVisitor::Visit\" ref=\"afad71c71ce6473fb9b4b64cd92de4a19\" args=\"(const TiXmlDeclaration &amp;)\" -->\nvirtual bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlVisitor.html#afad71c71ce6473fb9b4b64cd92de4a19\">Visit</a> (const <a class=\"el\" href=\"classTiXmlDeclaration.html\">TiXmlDeclaration</a> &amp;)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Visit a declaration. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a399b8ebca5cd14664974a32d2ce029e5\"></a><!-- doxytag: member=\"TiXmlVisitor::Visit\" ref=\"a399b8ebca5cd14664974a32d2ce029e5\" args=\"(const TiXmlText &amp;)\" -->\nvirtual bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlVisitor.html#a399b8ebca5cd14664974a32d2ce029e5\">Visit</a> (const <a class=\"el\" href=\"classTiXmlText.html\">TiXmlText</a> &amp;)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Visit a text node. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a53a60e7a528627b31af3161972cc7fa2\"></a><!-- doxytag: member=\"TiXmlVisitor::Visit\" ref=\"a53a60e7a528627b31af3161972cc7fa2\" args=\"(const TiXmlComment &amp;)\" -->\nvirtual bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlVisitor.html#a53a60e7a528627b31af3161972cc7fa2\">Visit</a> (const <a class=\"el\" href=\"classTiXmlComment.html\">TiXmlComment</a> &amp;)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Visit a comment node. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7e284d607d275c51dac1adb58159ce28\"></a><!-- doxytag: member=\"TiXmlVisitor::Visit\" ref=\"a7e284d607d275c51dac1adb58159ce28\" args=\"(const TiXmlUnknown &amp;)\" -->\nvirtual bool&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTiXmlVisitor.html#a7e284d607d275c51dac1adb58159ce28\">Visit</a> (const <a class=\"el\" href=\"classTiXmlUnknown.html\">TiXmlUnknown</a> &amp;)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Visit an unknown node. <br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>Implements the interface to the \"Visitor pattern\" (see the Accept() method. </p>\n<p>) If you call the Accept() method, it requires being passed a <a class=\"el\" href=\"classTiXmlVisitor.html\" title=\"Implements the interface to the &quot;Visitor pattern&quot; (see the Accept() method...\">TiXmlVisitor</a> class to handle callbacks. For nodes that contain other nodes (Document, Element) you will get called with a VisitEnter/VisitExit pair. Nodes that are always leaves are simply called with <a class=\"el\" href=\"classTiXmlVisitor.html#afad71c71ce6473fb9b4b64cd92de4a19\" title=\"Visit a declaration.\">Visit()</a>.</p>\n<p>If you return 'true' from a Visit method, recursive parsing will continue. If you return false, <b>no children of this node or its sibilings</b> will be Visited.</p>\n<p>All flavors of Visit methods have a default implementation that returns 'true' (continue visiting). You need to only override methods that are interesting to you.</p>\n<p>Generally Accept() is called on the <a class=\"el\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a>, although all nodes suppert Visiting.</p>\n<p>You should never change the document from a callback.</p>\n<dl class=\"see\"><dt><b>See also:</b></dt><dd><a class=\"el\" href=\"classTiXmlNode.html#acc0f88b7462c6cb73809d410a4f5bb86\" title=\"Accept a hierchical visit the nodes in the TinyXML DOM.\">TiXmlNode::Accept()</a> </dd></dl>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a></li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/classes.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Alphabetical List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>Class Index</h1><div class=\"qindex\"><a class=\"qindex\" href=\"#letter_T\">T</a></div>\n<table align=\"center\" width=\"95%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tr><td><a name=\"letter_T\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&nbsp;&nbsp;T&nbsp;&nbsp;</div></td></tr></table>\n</td><td><a class=\"el\" href=\"classTiXmlComment.html\">TiXmlComment</a>&nbsp;&nbsp;&nbsp;</td><td><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a>&nbsp;&nbsp;&nbsp;</td><td><a class=\"el\" href=\"classTiXmlPrinter.html\">TiXmlPrinter</a>&nbsp;&nbsp;&nbsp;</td><td><a class=\"el\" href=\"classTiXmlUnknown.html\">TiXmlUnknown</a>&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a>&nbsp;&nbsp;&nbsp;</td><td><a class=\"el\" href=\"classTiXmlDeclaration.html\">TiXmlDeclaration</a>&nbsp;&nbsp;&nbsp;</td><td><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a>&nbsp;&nbsp;&nbsp;</td><td><a class=\"el\" href=\"classTiXmlText.html\">TiXmlText</a>&nbsp;&nbsp;&nbsp;</td><td><a class=\"el\" href=\"classTiXmlVisitor.html\">TiXmlVisitor</a>&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a>&nbsp;&nbsp;&nbsp;</td><td><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a>&nbsp;&nbsp;&nbsp;</td><td><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a>&nbsp;&nbsp;&nbsp;</td></tr></table><div class=\"qindex\"><a class=\"qindex\" href=\"#letter_T\">T</a></div>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/deprecated.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Deprecated List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li class=\"current\"><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n\n\n<h1><a class=\"anchor\" id=\"deprecated\">Deprecated List </a></h1><p><a class=\"anchor\" id=\"_deprecated000002\"></a> </p>\n<dl>\n<dt>Member <a class=\"el\" href=\"classTiXmlHandle.html#acb5fe8388a526289ea65e817a51e05e7\">TiXmlHandle::Element</a> () const  </dt>\n<dd>use ToElement. Return the handle as a <a class=\"el\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>. This may return null. </dd>\n</dl>\n<p><a class=\"anchor\" id=\"_deprecated000001\"></a> </p>\n<dl>\n<dt>Member <a class=\"el\" href=\"classTiXmlHandle.html#ab44b723a8dc9af72838a303c079d0376\">TiXmlHandle::Node</a> () const  </dt>\n<dd>use ToNode. Return the handle as a <a class=\"el\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>. This may return null. </dd>\n</dl>\n<p><a class=\"anchor\" id=\"_deprecated000003\"></a> </p>\n<dl>\n<dt>Member <a class=\"el\" href=\"classTiXmlHandle.html#a9fc739c8a18d160006f82572fc143d13\">TiXmlHandle::Text</a> () const  </dt>\n<dd>use ToText() Return the handle as a <a class=\"el\" href=\"classTiXmlText.html\" title=\"XML text.\">TiXmlText</a>. This may return null. </dd>\n</dl>\n<p><a class=\"anchor\" id=\"_deprecated000004\"></a> </p>\n<dl>\n<dt>Member <a class=\"el\" href=\"classTiXmlHandle.html#a49675b74357ba2aae124657a9a1ef465\">TiXmlHandle::Unknown</a> () const  </dt>\n<dd>use ToUnknown() Return the handle as a <a class=\"el\" href=\"classTiXmlUnknown.html\" title=\"Any tag that tinyXml doesn&#39;t recognize is saved as an unknown.\">TiXmlUnknown</a>. This may return null. </dd>\n</dl>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/doxygen.css",
    "content": "/* The standard CSS for doxygen */\n\nbody, table, div, p, dl {\n\tfont-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;\n\tfont-size: 12px;\n}\n\n/* @group Heading Levels */\n\nh1 {\n\ttext-align: center;\n\tfont-size: 150%;\n}\n\nh2 {\n\tfont-size: 120%;\n}\n\nh3 {\n\tfont-size: 100%;\n}\n\ndt {\n\tfont-weight: bold;\n}\n\ndiv.multicol {\n\t-moz-column-gap: 1em;\n\t-webkit-column-gap: 1em;\n\t-moz-column-count: 3;\n\t-webkit-column-count: 3;\n}\n\np.startli, p.startdd, p.starttd {\n\tmargin-top: 2px;\n}\n\np.endli {\n\tmargin-bottom: 0px;\n}\n\np.enddd {\n\tmargin-bottom: 4px;\n}\n\np.endtd {\n\tmargin-bottom: 2px;\n}\n\n/* @end */\n\ncaption {\n\tfont-weight: bold;\n}\n\nspan.legend {\n        font-size: 70%;\n        text-align: center;\n}\n\nh3.version {\n        font-size: 90%;\n        text-align: center;\n}\n\ndiv.qindex, div.navtab{\n\tbackground-color: #e8eef2;\n\tborder: 1px solid #84b0c7;\n\ttext-align: center;\n\tmargin: 2px;\n\tpadding: 2px;\n}\n\ndiv.qindex, div.navpath {\n\twidth: 100%;\n\tline-height: 140%;\n}\n\ndiv.navtab {\n\tmargin-right: 15px;\n}\n\n/* @group Link Styling */\n\na {\n\tcolor: #153788;\n\tfont-weight: normal;\n\ttext-decoration: none;\n}\n\n.contents a:visited {\n\tcolor: #1b77c5;\n}\n\na:hover {\n\ttext-decoration: underline;\n}\n\na.qindex {\n\tfont-weight: bold;\n}\n\na.qindexHL {\n\tfont-weight: bold;\n\tbackground-color: #6666cc;\n\tcolor: #ffffff;\n\tborder: 1px double #9295C2;\n}\n\n.contents a.qindexHL:visited {\n        color: #ffffff;\n}\n\na.el {\n\tfont-weight: bold;\n}\n\na.elRef {\n}\n\na.code {\n\tcolor: #3030f0;\n}\n\na.codeRef {\n\tcolor: #3030f0;\n}\n\n/* @end */\n\ndl.el {\n\tmargin-left: -1cm;\n}\n\n.fragment {\n\tfont-family: monospace, fixed;\n\tfont-size: 105%;\n}\n\npre.fragment {\n\tborder: 1px solid #CCCCCC;\n\tbackground-color: #f5f5f5;\n\tpadding: 4px 6px;\n\tmargin: 4px 8px 4px 2px;\n\toverflow: auto;\n\tword-wrap: break-word;\n\tfont-size:  9pt;\n\tline-height: 125%;\n}\n\ndiv.ah {\n\tbackground-color: black;\n\tfont-weight: bold;\n\tcolor: #ffffff;\n\tmargin-bottom: 3px;\n\tmargin-top: 3px\n}\n\ndiv.groupHeader {\n\tmargin-left: 16px;\n\tmargin-top: 12px;\n\tmargin-bottom: 6px;\n\tfont-weight: bold;\n}\n\ndiv.groupText {\n\tmargin-left: 16px;\n\tfont-style: italic;\n}\n\nbody {\n\tbackground: white;\n\tcolor: black;\n\tmargin-right: 20px;\n\tmargin-left: 20px;\n}\n\ntd.indexkey {\n\tbackground-color: #e8eef2;\n\tfont-weight: bold;\n\tborder: 1px solid #CCCCCC;\n\tmargin: 2px 0px 2px 0;\n\tpadding: 2px 10px;\n}\n\ntd.indexvalue {\n\tbackground-color: #e8eef2;\n\tborder: 1px solid #CCCCCC;\n\tpadding: 2px 10px;\n\tmargin: 2px 0px;\n}\n\ntr.memlist {\n\tbackground-color: #f0f0f0;\n}\n\np.formulaDsp {\n\ttext-align: center;\n}\n\nimg.formulaDsp {\n\t\n}\n\nimg.formulaInl {\n\tvertical-align: middle;\n}\n\ndiv.center {\n\ttext-align: center;\n        margin-top: 0px;\n        margin-bottom: 0px;\n        padding: 0px;\n}\n\ndiv.center img {\n\tborder: 0px;\n}\n\nimg.footer {\n\tborder: 0px;\n\tvertical-align: middle;\n}\n\n/* @group Code Colorization */\n\nspan.keyword {\n\tcolor: #008000\n}\n\nspan.keywordtype {\n\tcolor: #604020\n}\n\nspan.keywordflow {\n\tcolor: #e08000\n}\n\nspan.comment {\n\tcolor: #800000\n}\n\nspan.preprocessor {\n\tcolor: #806020\n}\n\nspan.stringliteral {\n\tcolor: #002080\n}\n\nspan.charliteral {\n\tcolor: #008080\n}\n\nspan.vhdldigit { \n\tcolor: #ff00ff \n}\n\nspan.vhdlchar { \n\tcolor: #000000 \n}\n\nspan.vhdlkeyword { \n\tcolor: #700070 \n}\n\nspan.vhdllogic { \n\tcolor: #ff0000 \n}\n\n/* @end */\n\n.search {\n\tcolor: #003399;\n\tfont-weight: bold;\n}\n\nform.search {\n\tmargin-bottom: 0px;\n\tmargin-top: 0px;\n}\n\ninput.search {\n\tfont-size: 75%;\n\tcolor: #000080;\n\tfont-weight: normal;\n\tbackground-color: #e8eef2;\n}\n\ntd.tiny {\n\tfont-size: 75%;\n}\n\n.dirtab {\n\tpadding: 4px;\n\tborder-collapse: collapse;\n\tborder: 1px solid #84b0c7;\n}\n\nth.dirtab {\n\tbackground: #e8eef2;\n\tfont-weight: bold;\n}\n\nhr {\n\theight: 0;\n\tborder: none;\n\tborder-top: 1px solid #666;\n}\n\n/* @group Member Descriptions */\n\n.mdescLeft, .mdescRight,\n.memItemLeft, .memItemRight,\n.memTemplItemLeft, .memTemplItemRight, .memTemplParams {\n\tbackground-color: #FAFAFA;\n\tborder: none;\n\tmargin: 4px;\n\tpadding: 1px 0 0 8px;\n}\n\n.mdescLeft, .mdescRight {\n\tpadding: 0px 8px 4px 8px;\n\tcolor: #555;\n}\n\n.memItemLeft, .memItemRight, .memTemplParams {\n\tborder-top: 1px solid #ccc;\n}\n\n.memItemLeft, .memTemplItemLeft {\n        white-space: nowrap;\n}\n\n.memTemplParams {\n\tcolor: #606060;\n        white-space: nowrap;\n}\n\n/* @end */\n\n/* @group Member Details */\n\n/* Styles for detailed member documentation */\n\n.memtemplate {\n\tfont-size: 80%;\n\tcolor: #606060;\n\tfont-weight: normal;\n\tmargin-left: 3px;\n}\n\n.memnav {\n\tbackground-color: #e8eef2;\n\tborder: 1px solid #84b0c7;\n\ttext-align: center;\n\tmargin: 2px;\n\tmargin-right: 15px;\n\tpadding: 2px;\n}\n\n.memitem {\n\tpadding: 0;\n\tmargin-bottom: 10px;\n}\n\n.memname {\n\twhite-space: nowrap;\n\tfont-weight: bold;\n}\n\n.memproto, .memdoc {\n\tborder: 1px solid #84b0c7;\t\n}\n\n.memproto {\n\tpadding: 0;\n\tbackground-color: #d5e1e8;\n\tfont-weight: bold;\n\t-webkit-border-top-left-radius: 8px;\n\t-webkit-border-top-right-radius: 8px;\n        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n\t-moz-border-radius-topleft: 8px;\n\t-moz-border-radius-topright: 8px;\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n\n}\n\n.memdoc {\n\tpadding: 2px 5px;\n\tbackground-color: #eef3f5;\n\tborder-top-width: 0;\n\t-webkit-border-bottom-left-radius: 8px;\n\t-webkit-border-bottom-right-radius: 8px;\n        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n\t-moz-border-radius-bottomleft: 8px;\n\t-moz-border-radius-bottomright: 8px;\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n}\n\n.paramkey {\n\ttext-align: right;\n}\n\n.paramtype {\n\twhite-space: nowrap;\n}\n\n.paramname {\n\tcolor: #602020;\n\twhite-space: nowrap;\n}\n.paramname em {\n\tfont-style: normal;\n}\n\n/* @end */\n\n/* @group Directory (tree) */\n\n/* for the tree view */\n\n.ftvtree {\n\tfont-family: sans-serif;\n\tmargin: 0.5em;\n}\n\n/* these are for tree view when used as main index */\n\n.directory {\n\tfont-size: 9pt;\n\tfont-weight: bold;\n}\n\n.directory h3 {\n\tmargin: 0px;\n\tmargin-top: 1em;\n\tfont-size: 11pt;\n}\n\n/*\nThe following two styles can be used to replace the root node title\nwith an image of your choice.  Simply uncomment the next two styles,\nspecify the name of your image and be sure to set 'height' to the\nproper pixel height of your image.\n*/\n\n/*\n.directory h3.swap {\n\theight: 61px;\n\tbackground-repeat: no-repeat;\n\tbackground-image: url(\"yourimage.gif\");\n}\n.directory h3.swap span {\n\tdisplay: none;\n}\n*/\n\n.directory > h3 {\n\tmargin-top: 0;\n}\n\n.directory p {\n\tmargin: 0px;\n\twhite-space: nowrap;\n}\n\n.directory div {\n\tdisplay: none;\n\tmargin: 0px;\n}\n\n.directory img {\n\tvertical-align: -30%;\n}\n\n/* these are for tree view when not used as main index */\n\n.directory-alt {\n\tfont-size: 100%;\n\tfont-weight: bold;\n}\n\n.directory-alt h3 {\n\tmargin: 0px;\n\tmargin-top: 1em;\n\tfont-size: 11pt;\n}\n\n.directory-alt > h3 {\n\tmargin-top: 0;\n}\n\n.directory-alt p {\n\tmargin: 0px;\n\twhite-space: nowrap;\n}\n\n.directory-alt div {\n\tdisplay: none;\n\tmargin: 0px;\n}\n\n.directory-alt img {\n\tvertical-align: -30%;\n}\n\n/* @end */\n\naddress {\n\tfont-style: normal;\n\tcolor: #333;\n}\n\ntable.doxtable {\n\tborder-collapse:collapse;\n}\n\ntable.doxtable td, table.doxtable th {\n\tborder: 1px solid #153788;\n\tpadding: 3px 7px 2px;\n}\n\ntable.doxtable th {\n\tbackground-color: #254798;\n\tcolor: #FFFFFF;\n\tfont-size: 110%;\n\tpadding-bottom: 4px;\n\tpadding-top: 5px;\n\ttext-align:left;\n}\n\n"
  },
  {
    "path": "external/tinyxml/docs/files.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: File Index</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"files.html\"><span>File&nbsp;List</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>File List</h1>Here is a list of all documented files with brief descriptions:<table>\n  <tr><td class=\"indexkey\"><b>tinystr.h</b> <a href=\"tinystr_8h_source.html\">[code]</a></td><td class=\"indexvalue\"></td></tr>\n  <tr><td class=\"indexkey\"><b>tinyxml.h</b> <a href=\"tinyxml_8h_source.html\">[code]</a></td><td class=\"indexvalue\"></td></tr>\n</table>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented class members with links to the class documentation for each member:\n\n<h3><a class=\"anchor\" id=\"index_a\">- a -</a></h3><ul>\n<li>Accept()\n: <a class=\"el\" href=\"classTiXmlNode.html#acc0f88b7462c6cb73809d410a4f5bb86\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlElement.html#a71a81b2afb0d42be1543d1c404dee6f5\">TiXmlElement</a>\n, <a class=\"el\" href=\"classTiXmlText.html#a8483d4415ce9de6c4fa8f63d067d5de6\">TiXmlText</a>\n, <a class=\"el\" href=\"classTiXmlDeclaration.html#a22315a535983b86535cdba3458669e3e\">TiXmlDeclaration</a>\n, <a class=\"el\" href=\"classTiXmlDocument.html#aa545aae325d9752ad64120bc4ecf939a\">TiXmlDocument</a>\n, <a class=\"el\" href=\"classTiXmlUnknown.html#ad7122e5135581b3c832a1a3217760a93\">TiXmlUnknown</a>\n, <a class=\"el\" href=\"classTiXmlComment.html#af3ac1b99fbbe9ea4fb6e14146156e43e\">TiXmlComment</a>\n</li>\n<li>Attribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#aeaff99d4f0ea5b34f7aee202aad457ba\">TiXmlElement</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_0x63.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented class members with links to the class documentation for each member:\n\n<h3><a class=\"anchor\" id=\"index_c\">- c -</a></h3><ul>\n<li>CDATA()\n: <a class=\"el\" href=\"classTiXmlText.html#ad1a6a6b83fa2271022dd97c072a2b586\">TiXmlText</a>\n</li>\n<li>Child()\n: <a class=\"el\" href=\"classTiXmlHandle.html#a072492b4be1acdb0db2d03cd8f71ccc4\">TiXmlHandle</a>\n</li>\n<li>ChildElement()\n: <a class=\"el\" href=\"classTiXmlHandle.html#a979a3f850984a176ee884e394c7eed2d\">TiXmlHandle</a>\n</li>\n<li>Clear()\n: <a class=\"el\" href=\"classTiXmlNode.html#a708e7f953df61d4d2d12f73171550a4b\">TiXmlNode</a>\n</li>\n<li>ClearError()\n: <a class=\"el\" href=\"classTiXmlDocument.html#ac66b8c28db86363315712a3574e87c35\">TiXmlDocument</a>\n</li>\n<li>Clone()\n: <a class=\"el\" href=\"classTiXmlComment.html#a0d6662bdc52488b9e12b3c7a0453d028\">TiXmlComment</a>\n, <a class=\"el\" href=\"classTiXmlElement.html#aa464535ea1994db337cb6a8ce4b588b5\">TiXmlElement</a>\n, <a class=\"el\" href=\"classTiXmlUnknown.html#a0960bb7428b3f341da46244229604d73\">TiXmlUnknown</a>\n, <a class=\"el\" href=\"classTiXmlNode.html#a4508cc3a2d7a98e96a54cc09c37a78a4\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlDeclaration.html#a7cf459186040141cda7a180a6585ce2e\">TiXmlDeclaration</a>\n, <a class=\"el\" href=\"classTiXmlDocument.html#a4968661cab4a1f44a23329c6f8db1907\">TiXmlDocument</a>\n, <a class=\"el\" href=\"classTiXmlText.html#a0c411e93a27537369479d034cc82da3b\">TiXmlText</a>\n</li>\n<li>Column()\n: <a class=\"el\" href=\"classTiXmlBase.html#ab54bfb9b70fe6dd276e7b279cab7f003\">TiXmlBase</a>\n</li>\n<li>CStr()\n: <a class=\"el\" href=\"classTiXmlPrinter.html#a859eede9597d3e0355b77757be48735e\">TiXmlPrinter</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_0x64.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented class members with links to the class documentation for each member:\n\n<h3><a class=\"anchor\" id=\"index_d\">- d -</a></h3><ul>\n<li>DoubleValue()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#a2880ddef53fc7522c99535273954d230\">TiXmlAttribute</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_0x65.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented class members with links to the class documentation for each member:\n\n<h3><a class=\"anchor\" id=\"index_e\">- e -</a></h3><ul>\n<li>Element()\n: <a class=\"el\" href=\"classTiXmlHandle.html#acb5fe8388a526289ea65e817a51e05e7\">TiXmlHandle</a>\n</li>\n<li>EncodeString()\n: <a class=\"el\" href=\"classTiXmlBase.html#a6bd8c315c1acb09e34107b8736505948\">TiXmlBase</a>\n</li>\n<li>Encoding()\n: <a class=\"el\" href=\"classTiXmlDeclaration.html#a5d974231f9e9a2f0542f15f3a46cdb76\">TiXmlDeclaration</a>\n</li>\n<li>Error()\n: <a class=\"el\" href=\"classTiXmlDocument.html#a6dfc01a6e5d58e56acd537dfd3bdeb29\">TiXmlDocument</a>\n</li>\n<li>ErrorCol()\n: <a class=\"el\" href=\"classTiXmlDocument.html#aa90bc630ee5203c6109ca5fad3323649\">TiXmlDocument</a>\n</li>\n<li>ErrorDesc()\n: <a class=\"el\" href=\"classTiXmlDocument.html#a9d0f689f6e09ea494ea547be8d79c25e\">TiXmlDocument</a>\n</li>\n<li>ErrorId()\n: <a class=\"el\" href=\"classTiXmlDocument.html#af96fc2f3f9ec6422782bfe916c9e778f\">TiXmlDocument</a>\n</li>\n<li>ErrorRow()\n: <a class=\"el\" href=\"classTiXmlDocument.html#af30efc75e804aa2e92fb8be3a8cb676e\">TiXmlDocument</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_0x66.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented class members with links to the class documentation for each member:\n\n<h3><a class=\"anchor\" id=\"index_f\">- f -</a></h3><ul>\n<li>FirstAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#a516054c9073647d6cb29b6abe9fa0592\">TiXmlElement</a>\n</li>\n<li>FirstChild()\n: <a class=\"el\" href=\"classTiXmlNode.html#a44c8eee26bbe2d1b2762038df9dde2f0\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlHandle.html#a8c61f64ae9365d89c264f289085541f8\">TiXmlHandle</a>\n, <a class=\"el\" href=\"classTiXmlNode.html#a07f6200a5956c723c5b52d70f29c46f6\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlHandle.html#acdb1faaf88a700b40ca2c8d9aee21139\">TiXmlHandle</a>\n</li>\n<li>FirstChildElement()\n: <a class=\"el\" href=\"classTiXmlNode.html#af4fb652f6bd79ae0d5ce7d0f7d3c0fba\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlHandle.html#a24d1112e995e937e4dddb202d4113d4a\">TiXmlHandle</a>\n, <a class=\"el\" href=\"classTiXmlNode.html#a327ad4bbd90073c5dfc931b07314f5f7\">TiXmlNode</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_0x67.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented class members with links to the class documentation for each member:\n\n<h3><a class=\"anchor\" id=\"index_g\">- g -</a></h3><ul>\n<li>GetDocument()\n: <a class=\"el\" href=\"classTiXmlNode.html#a80e397fa973cf5323e33b07154b024f3\">TiXmlNode</a>\n</li>\n<li>GetText()\n: <a class=\"el\" href=\"classTiXmlElement.html#af3282294986cdb216646ea1f67af2c87\">TiXmlElement</a>\n</li>\n<li>GetUserData()\n: <a class=\"el\" href=\"classTiXmlBase.html#a6559a530ca6763fc301a14d77ed28c17\">TiXmlBase</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_0x69.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented class members with links to the class documentation for each member:\n\n<h3><a class=\"anchor\" id=\"index_i\">- i -</a></h3><ul>\n<li>Indent()\n: <a class=\"el\" href=\"classTiXmlPrinter.html#abb33ec7d4bad6aaeb57f4304394b133d\">TiXmlPrinter</a>\n</li>\n<li>InsertAfterChild()\n: <a class=\"el\" href=\"classTiXmlNode.html#ad9b75e54ec19301c8b4d5ff583d0b3d5\">TiXmlNode</a>\n</li>\n<li>InsertBeforeChild()\n: <a class=\"el\" href=\"classTiXmlNode.html#a0c146fa2fff0157b681594102f48cbc7\">TiXmlNode</a>\n</li>\n<li>InsertEndChild()\n: <a class=\"el\" href=\"classTiXmlNode.html#ad7d4630e1a2a916edda16be22448a8ba\">TiXmlNode</a>\n</li>\n<li>IntValue()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#aa1a20ad59dc7e89a0ab265396360d50f\">TiXmlAttribute</a>\n</li>\n<li>IsWhiteSpaceCondensed()\n: <a class=\"el\" href=\"classTiXmlBase.html#ad4b1472531c647a25b1840a87ae42438\">TiXmlBase</a>\n</li>\n<li>IterateChildren()\n: <a class=\"el\" href=\"classTiXmlNode.html#adfaef35a076b9343adc1420757376c39\">TiXmlNode</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_0x6c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented class members with links to the class documentation for each member:\n\n<h3><a class=\"anchor\" id=\"index_l\">- l -</a></h3><ul>\n<li>LastAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#a86191b49f9177be132b85b14655f1381\">TiXmlElement</a>\n</li>\n<li>LastChild()\n: <a class=\"el\" href=\"classTiXmlNode.html#a6432d2b2495f6caf9cb4278df706a031\">TiXmlNode</a>\n</li>\n<li>LineBreak()\n: <a class=\"el\" href=\"classTiXmlPrinter.html#a11f1b4804a460b175ec244eb5724d96d\">TiXmlPrinter</a>\n</li>\n<li>LinkEndChild()\n: <a class=\"el\" href=\"classTiXmlNode.html#a5d29442ae46de6d0168429156197bfc6\">TiXmlNode</a>\n</li>\n<li>LoadFile()\n: <a class=\"el\" href=\"classTiXmlDocument.html#a41f6fe7200864d1dca663d230caf8db6\">TiXmlDocument</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_0x6e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented class members with links to the class documentation for each member:\n\n<h3><a class=\"anchor\" id=\"index_n\">- n -</a></h3><ul>\n<li>Name()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#a298a57287d305904ba6bd96ae6f78d3d\">TiXmlAttribute</a>\n</li>\n<li>Next()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#a1c78e92e223a40843f644ba48ef69f67\">TiXmlAttribute</a>\n</li>\n<li>NextSibling()\n: <a class=\"el\" href=\"classTiXmlNode.html#a1757c1f4d01e8c9596ffdbd561c76aea\">TiXmlNode</a>\n</li>\n<li>NextSiblingElement()\n: <a class=\"el\" href=\"classTiXmlNode.html#a071ba77fd7ab79402fa84b7e9b8607b3\">TiXmlNode</a>\n</li>\n<li>NoChildren()\n: <a class=\"el\" href=\"classTiXmlNode.html#aeed21ad30630ef6e7faf096127edc9f3\">TiXmlNode</a>\n</li>\n<li>Node()\n: <a class=\"el\" href=\"classTiXmlHandle.html#ab44b723a8dc9af72838a303c079d0376\">TiXmlHandle</a>\n</li>\n<li>NodeType\n: <a class=\"el\" href=\"classTiXmlNode.html#a836eded4920ab9e9ef28496f48cd95a2\">TiXmlNode</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_0x6f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented class members with links to the class documentation for each member:\n\n<h3><a class=\"anchor\" id=\"index_o\">- o -</a></h3><ul>\n<li>operator&lt;&lt;\n: <a class=\"el\" href=\"classTiXmlNode.html#a86cd49cfb17a844c0010b3136ac966c7\">TiXmlNode</a>\n</li>\n<li>operator&gt;&gt;\n: <a class=\"el\" href=\"classTiXmlNode.html#ab57bd426563c926844f65a78412e18b9\">TiXmlNode</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_0x70.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented class members with links to the class documentation for each member:\n\n<h3><a class=\"anchor\" id=\"index_p\">- p -</a></h3><ul>\n<li>Parent()\n: <a class=\"el\" href=\"classTiXmlNode.html#ab643043132ffd794f8602685d34a982e\">TiXmlNode</a>\n</li>\n<li>Parse()\n: <a class=\"el\" href=\"classTiXmlDocument.html#a17ebabe36926ef398e78dec0d0ad0378\">TiXmlDocument</a>\n</li>\n<li>Previous()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#a6ebbfe333fe76cd834bd6cbcca3130cf\">TiXmlAttribute</a>\n</li>\n<li>PreviousSibling()\n: <a class=\"el\" href=\"classTiXmlNode.html#ac2cd892768726270e511b2ab32de4d10\">TiXmlNode</a>\n</li>\n<li>Print()\n: <a class=\"el\" href=\"classTiXmlElement.html#afbf52736e70fc91ec9d760721d6f4fd2\">TiXmlElement</a>\n, <a class=\"el\" href=\"classTiXmlAttribute.html#acc04956c1d5c4c31fe74f7a7528d109a\">TiXmlAttribute</a>\n, <a class=\"el\" href=\"classTiXmlBase.html#a0de56b3f2ef14c65091a3b916437b512\">TiXmlBase</a>\n, <a class=\"el\" href=\"classTiXmlText.html#a0cafbf6f236c7f02d12b2bffc2b7976b\">TiXmlText</a>\n, <a class=\"el\" href=\"classTiXmlDocument.html#af08389ec70ee9b2de7f800e206a18510\">TiXmlDocument</a>\n, <a class=\"el\" href=\"classTiXmlUnknown.html#a31ba089a40fb5a1869750fce09b0bacb\">TiXmlUnknown</a>\n, <a class=\"el\" href=\"classTiXmlDocument.html#a8701fda1fa31b25abbc9c0df42da10e8\">TiXmlDocument</a>\n, <a class=\"el\" href=\"classTiXmlComment.html#a6b316527aaa8da0370cd68c22a5a0f5f\">TiXmlComment</a>\n, <a class=\"el\" href=\"classTiXmlDeclaration.html#abf6303db4bd05b5be554036817ff1cb4\">TiXmlDeclaration</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_0x71.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented class members with links to the class documentation for each member:\n\n<h3><a class=\"anchor\" id=\"index_q\">- q -</a></h3><ul>\n<li>QueryBoolAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#af4a1d3f88c28eb0f3115dc39ebd83fff\">TiXmlElement</a>\n</li>\n<li>QueryDoubleAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#a898d7730ecc341f0bffc7a9dadbf1ce7\">TiXmlElement</a>\n</li>\n<li>QueryDoubleValue()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#ac87b2a8489906a5d7aa2875f20be3513\">TiXmlAttribute</a>\n</li>\n<li>QueryFloatAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#aa04d3af11601ef5a5f88295203a843be\">TiXmlElement</a>\n</li>\n<li>QueryIntAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#aea0bfe471380f281c5945770ddbf52b9\">TiXmlElement</a>\n</li>\n<li>QueryIntValue()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#ad6c93088ee21af41a107931223339344\">TiXmlAttribute</a>\n</li>\n<li>QueryStringAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#a14321ac360efe906ed449d9db3fd9961\">TiXmlElement</a>\n</li>\n<li>QueryUnsignedAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#ae48df644f890ab86fa19839ac401f00d\">TiXmlElement</a>\n</li>\n<li>QueryValueAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#ae3b9a03b0a56663a40801c7256683576\">TiXmlElement</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_0x72.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented class members with links to the class documentation for each member:\n\n<h3><a class=\"anchor\" id=\"index_r\">- r -</a></h3><ul>\n<li>RemoveAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#a56979767deca794376b1dfa69a525b2a\">TiXmlElement</a>\n</li>\n<li>RemoveChild()\n: <a class=\"el\" href=\"classTiXmlNode.html#ae19d8510efc90596552f4feeac9a8fbf\">TiXmlNode</a>\n</li>\n<li>ReplaceChild()\n: <a class=\"el\" href=\"classTiXmlNode.html#a0c49e739a17b9938050c22cd89617fbd\">TiXmlNode</a>\n</li>\n<li>RootElement()\n: <a class=\"el\" href=\"classTiXmlDocument.html#ad09d17927f908f40efb406af2fb873be\">TiXmlDocument</a>\n</li>\n<li>Row()\n: <a class=\"el\" href=\"classTiXmlBase.html#a024bceb070188df92c2a8d8852dd0853\">TiXmlBase</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_0x73.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented class members with links to the class documentation for each member:\n\n<h3><a class=\"anchor\" id=\"index_s\">- s -</a></h3><ul>\n<li>SaveFile()\n: <a class=\"el\" href=\"classTiXmlDocument.html#a21c0aeb0d0a720169ad4ac89523ebe93\">TiXmlDocument</a>\n</li>\n<li>SetAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#ace6f4be75e373726d4774073d666d1a7\">TiXmlElement</a>\n</li>\n<li>SetCDATA()\n: <a class=\"el\" href=\"classTiXmlText.html#acb17ff7c5d09b2c839393445a3de5ea9\">TiXmlText</a>\n</li>\n<li>SetCondenseWhiteSpace()\n: <a class=\"el\" href=\"classTiXmlBase.html#a0f799ec645bfb8d8a969e83478f379c1\">TiXmlBase</a>\n</li>\n<li>SetDoubleAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#a0d1dd975d75496778177e35abfe0ec0b\">TiXmlElement</a>\n</li>\n<li>SetDoubleValue()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#a0316da31373496c4368ad549bf711394\">TiXmlAttribute</a>\n</li>\n<li>SetIndent()\n: <a class=\"el\" href=\"classTiXmlPrinter.html#a213377a4070c7e625bae59716b089e5e\">TiXmlPrinter</a>\n</li>\n<li>SetIntValue()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#a7e065df640116a62ea4f4b7da5449cc8\">TiXmlAttribute</a>\n</li>\n<li>SetLineBreak()\n: <a class=\"el\" href=\"classTiXmlPrinter.html#a4be1e37e69e3858c59635aa947174fe6\">TiXmlPrinter</a>\n</li>\n<li>SetName()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#ab7fa3d21ff8d7c5764cf9af15b667a99\">TiXmlAttribute</a>\n</li>\n<li>SetStreamPrinting()\n: <a class=\"el\" href=\"classTiXmlPrinter.html#ab23a90629e374cb1cadca090468bbd19\">TiXmlPrinter</a>\n</li>\n<li>SetTabSize()\n: <a class=\"el\" href=\"classTiXmlDocument.html#a51dac56316f89b35bdb7d0d433ba988e\">TiXmlDocument</a>\n</li>\n<li>SetUserData()\n: <a class=\"el\" href=\"classTiXmlBase.html#ac6b3e0f790930d4970ec30764e937b5d\">TiXmlBase</a>\n</li>\n<li>SetValue()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#a2dae44178f668b3cb48101be4f2236a0\">TiXmlAttribute</a>\n, <a class=\"el\" href=\"classTiXmlNode.html#a2598d5f448042c1abbeae4503dd45ff2\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlAttribute.html#ab43f67a0cc3ec1d80e62606500f0925f\">TiXmlAttribute</a>\n</li>\n<li>Size()\n: <a class=\"el\" href=\"classTiXmlPrinter.html#ad01375ae9199bd2f48252eaddce3039d\">TiXmlPrinter</a>\n</li>\n<li>Standalone()\n: <a class=\"el\" href=\"classTiXmlDeclaration.html#a9ff06afc033d7ef730ec7c6825b97ad9\">TiXmlDeclaration</a>\n</li>\n<li>Str()\n: <a class=\"el\" href=\"classTiXmlPrinter.html#a3bd4daf44309b41f5813a833caa0d1c9\">TiXmlPrinter</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_0x74.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented class members with links to the class documentation for each member:\n\n<h3><a class=\"anchor\" id=\"index_t\">- t -</a></h3><ul>\n<li>Text()\n: <a class=\"el\" href=\"classTiXmlHandle.html#a9fc739c8a18d160006f82572fc143d13\">TiXmlHandle</a>\n</li>\n<li>TiXmlAttribute()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#a9cfa3c8179873fd485d83003b114f8e1\">TiXmlAttribute</a>\n</li>\n<li>TiXmlComment()\n: <a class=\"el\" href=\"classTiXmlComment.html#aaa3252031d3e8bd3a2bf51a1c61201b7\">TiXmlComment</a>\n</li>\n<li>TiXmlDeclaration()\n: <a class=\"el\" href=\"classTiXmlDeclaration.html#acd5556007c3c72209465081de39d9836\">TiXmlDeclaration</a>\n</li>\n<li>TiXmlDocument()\n: <a class=\"el\" href=\"classTiXmlDocument.html#a9f5e84335708fde98400230f9f12659c\">TiXmlDocument</a>\n</li>\n<li>TiXmlElement()\n: <a class=\"el\" href=\"classTiXmlElement.html#a01bc3ab372d35da08efcbbe65ad90c60\">TiXmlElement</a>\n</li>\n<li>TiXmlHandle()\n: <a class=\"el\" href=\"classTiXmlHandle.html#a236d7855e1e56ccc7b980630c48c7fd7\">TiXmlHandle</a>\n</li>\n<li>TiXmlText()\n: <a class=\"el\" href=\"classTiXmlText.html#af659e77c6b87d684827f35a8f4895960\">TiXmlText</a>\n</li>\n<li>ToComment()\n: <a class=\"el\" href=\"classTiXmlNode.html#aa0a5086f9eaee910bbfdc7f975e26574\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlComment.html#a00fb4215c20a2399ea05ac9b9e7e68a0\">TiXmlComment</a>\n</li>\n<li>ToDeclaration()\n: <a class=\"el\" href=\"classTiXmlNode.html#a9f43e6984fc7d4afd6eb32714c6b7b72\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlDeclaration.html#a1e085d3fefd1dbf5ccdbff729931a967\">TiXmlDeclaration</a>\n</li>\n<li>ToDocument()\n: <a class=\"el\" href=\"classTiXmlNode.html#a8a4cda4b15c29f64cff419309aebed08\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlDocument.html#a1dc977bde3e4fe85a8eb9d88a35ef5a4\">TiXmlDocument</a>\n</li>\n<li>ToElement()\n: <a class=\"el\" href=\"classTiXmlNode.html#a72abed96dc9667ab9e0a2a275301bb1c\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlElement.html#ac5b8d0e25fa23fd9acbb6d146082901c\">TiXmlElement</a>\n, <a class=\"el\" href=\"classTiXmlHandle.html#abc6e7ed383a5fe1e52b0c0004b457b9e\">TiXmlHandle</a>\n</li>\n<li>ToNode()\n: <a class=\"el\" href=\"classTiXmlHandle.html#af678e5088e83be67baf76f699756f2c3\">TiXmlHandle</a>\n</li>\n<li>ToText()\n: <a class=\"el\" href=\"classTiXmlText.html#ae7c3a8fd3e4dbf6c0c4363a943d72f5b\">TiXmlText</a>\n, <a class=\"el\" href=\"classTiXmlHandle.html#a4ac53a652296203a5b5e13854d923586\">TiXmlHandle</a>\n, <a class=\"el\" href=\"classTiXmlNode.html#a3ddfbcac78fbea041fad57e5c6d60a03\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlText.html#a895bf34ffad17f7439ab2a52b9651648\">TiXmlText</a>\n</li>\n<li>ToUnknown()\n: <a class=\"el\" href=\"classTiXmlNode.html#afd7205cf31d7a376929f8a36930627a2\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlUnknown.html#ab0313e5fe77987d746ac1a97a254419d\">TiXmlUnknown</a>\n, <a class=\"el\" href=\"classTiXmlNode.html#a06de5af852668c7e4af0d09c205f0b0d\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlHandle.html#a1381c17507a130767b1e23afc93b3674\">TiXmlHandle</a>\n</li>\n<li>Type()\n: <a class=\"el\" href=\"classTiXmlNode.html#a57b99d5c97d67a42b9752f5210a1ba5e\">TiXmlNode</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_0x75.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented class members with links to the class documentation for each member:\n\n<h3><a class=\"anchor\" id=\"index_u\">- u -</a></h3><ul>\n<li>Unknown()\n: <a class=\"el\" href=\"classTiXmlHandle.html#a49675b74357ba2aae124657a9a1ef465\">TiXmlHandle</a>\n</li>\n<li>userData\n: <a class=\"el\" href=\"classTiXmlBase.html#ab242c01590191f644569fa89a080d97c\">TiXmlBase</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_0x76.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented class members with links to the class documentation for each member:\n\n<h3><a class=\"anchor\" id=\"index_v\">- v -</a></h3><ul>\n<li>Value()\n: <a class=\"el\" href=\"classTiXmlNode.html#a77943eb90d12c2892b1337a9f5918b41\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlAttribute.html#a0f874490eac8ca00ee0070765d0e97e3\">TiXmlAttribute</a>\n</li>\n<li>ValueStr()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#a87705c3ccf9ee9417beb4f7cbacd4d33\">TiXmlAttribute</a>\n, <a class=\"el\" href=\"classTiXmlNode.html#a6d9e505619d39bf50bfd9609c9169ea5\">TiXmlNode</a>\n</li>\n<li>Version()\n: <a class=\"el\" href=\"classTiXmlDeclaration.html#a02ee557b1a4545c3219ed377c103ec76\">TiXmlDeclaration</a>\n</li>\n<li>Visit()\n: <a class=\"el\" href=\"classTiXmlVisitor.html#a53a60e7a528627b31af3161972cc7fa2\">TiXmlVisitor</a>\n, <a class=\"el\" href=\"classTiXmlPrinter.html#ace1b14d33eede2575c0743e2350f6a38\">TiXmlPrinter</a>\n, <a class=\"el\" href=\"classTiXmlVisitor.html#afad71c71ce6473fb9b4b64cd92de4a19\">TiXmlVisitor</a>\n, <a class=\"el\" href=\"classTiXmlPrinter.html#a83c13d6b980064b30f989f9a35498979\">TiXmlPrinter</a>\n, <a class=\"el\" href=\"classTiXmlVisitor.html#a399b8ebca5cd14664974a32d2ce029e5\">TiXmlVisitor</a>\n</li>\n<li>VisitEnter()\n: <a class=\"el\" href=\"classTiXmlVisitor.html#a07baecb52dd7d8716ae2a48ad0956ee0\">TiXmlVisitor</a>\n, <a class=\"el\" href=\"classTiXmlPrinter.html#a0c5e7bf8622838417a0d0bfb8f433854\">TiXmlPrinter</a>\n, <a class=\"el\" href=\"classTiXmlVisitor.html#af6c6178ffa517bbdba95d70490875fff\">TiXmlVisitor</a>\n</li>\n<li>VisitExit()\n: <a class=\"el\" href=\"classTiXmlPrinter.html#a1853cf2f6e63ad4b4232b4835e0acaf0\">TiXmlPrinter</a>\n, <a class=\"el\" href=\"classTiXmlVisitor.html#aa0ade4f27087447e93974e975c3246ad\">TiXmlVisitor</a>\n, <a class=\"el\" href=\"classTiXmlPrinter.html#a66b33edd76c538b462f789b797a4fdf2\">TiXmlPrinter</a>\n, <a class=\"el\" href=\"classTiXmlVisitor.html#aec2b1f8116226d52f3a1b95dafd3a32c\">TiXmlVisitor</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_enum.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members - Enumerations</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li class=\"current\"><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;<ul>\n<li>NodeType\n: <a class=\"el\" href=\"classTiXmlNode.html#a836eded4920ab9e9ef28496f48cd95a2\">TiXmlNode</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_func.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_a\">- a -</a></h3><ul>\n<li>Accept()\n: <a class=\"el\" href=\"classTiXmlNode.html#acc0f88b7462c6cb73809d410a4f5bb86\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlElement.html#a71a81b2afb0d42be1543d1c404dee6f5\">TiXmlElement</a>\n, <a class=\"el\" href=\"classTiXmlText.html#a8483d4415ce9de6c4fa8f63d067d5de6\">TiXmlText</a>\n, <a class=\"el\" href=\"classTiXmlDeclaration.html#a22315a535983b86535cdba3458669e3e\">TiXmlDeclaration</a>\n, <a class=\"el\" href=\"classTiXmlDocument.html#aa545aae325d9752ad64120bc4ecf939a\">TiXmlDocument</a>\n, <a class=\"el\" href=\"classTiXmlUnknown.html#ad7122e5135581b3c832a1a3217760a93\">TiXmlUnknown</a>\n, <a class=\"el\" href=\"classTiXmlComment.html#af3ac1b99fbbe9ea4fb6e14146156e43e\">TiXmlComment</a>\n</li>\n<li>Attribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#aeaff99d4f0ea5b34f7aee202aad457ba\">TiXmlElement</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_func_0x63.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_c\">- c -</a></h3><ul>\n<li>CDATA()\n: <a class=\"el\" href=\"classTiXmlText.html#ad1a6a6b83fa2271022dd97c072a2b586\">TiXmlText</a>\n</li>\n<li>Child()\n: <a class=\"el\" href=\"classTiXmlHandle.html#a072492b4be1acdb0db2d03cd8f71ccc4\">TiXmlHandle</a>\n</li>\n<li>ChildElement()\n: <a class=\"el\" href=\"classTiXmlHandle.html#a979a3f850984a176ee884e394c7eed2d\">TiXmlHandle</a>\n</li>\n<li>Clear()\n: <a class=\"el\" href=\"classTiXmlNode.html#a708e7f953df61d4d2d12f73171550a4b\">TiXmlNode</a>\n</li>\n<li>ClearError()\n: <a class=\"el\" href=\"classTiXmlDocument.html#ac66b8c28db86363315712a3574e87c35\">TiXmlDocument</a>\n</li>\n<li>Clone()\n: <a class=\"el\" href=\"classTiXmlComment.html#a0d6662bdc52488b9e12b3c7a0453d028\">TiXmlComment</a>\n, <a class=\"el\" href=\"classTiXmlElement.html#aa464535ea1994db337cb6a8ce4b588b5\">TiXmlElement</a>\n, <a class=\"el\" href=\"classTiXmlUnknown.html#a0960bb7428b3f341da46244229604d73\">TiXmlUnknown</a>\n, <a class=\"el\" href=\"classTiXmlNode.html#a4508cc3a2d7a98e96a54cc09c37a78a4\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlDeclaration.html#a7cf459186040141cda7a180a6585ce2e\">TiXmlDeclaration</a>\n, <a class=\"el\" href=\"classTiXmlDocument.html#a4968661cab4a1f44a23329c6f8db1907\">TiXmlDocument</a>\n, <a class=\"el\" href=\"classTiXmlText.html#a0c411e93a27537369479d034cc82da3b\">TiXmlText</a>\n</li>\n<li>Column()\n: <a class=\"el\" href=\"classTiXmlBase.html#ab54bfb9b70fe6dd276e7b279cab7f003\">TiXmlBase</a>\n</li>\n<li>CStr()\n: <a class=\"el\" href=\"classTiXmlPrinter.html#a859eede9597d3e0355b77757be48735e\">TiXmlPrinter</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_func_0x64.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_d\">- d -</a></h3><ul>\n<li>DoubleValue()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#a2880ddef53fc7522c99535273954d230\">TiXmlAttribute</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_func_0x65.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_e\">- e -</a></h3><ul>\n<li>Element()\n: <a class=\"el\" href=\"classTiXmlHandle.html#acb5fe8388a526289ea65e817a51e05e7\">TiXmlHandle</a>\n</li>\n<li>EncodeString()\n: <a class=\"el\" href=\"classTiXmlBase.html#a6bd8c315c1acb09e34107b8736505948\">TiXmlBase</a>\n</li>\n<li>Encoding()\n: <a class=\"el\" href=\"classTiXmlDeclaration.html#a5d974231f9e9a2f0542f15f3a46cdb76\">TiXmlDeclaration</a>\n</li>\n<li>Error()\n: <a class=\"el\" href=\"classTiXmlDocument.html#a6dfc01a6e5d58e56acd537dfd3bdeb29\">TiXmlDocument</a>\n</li>\n<li>ErrorCol()\n: <a class=\"el\" href=\"classTiXmlDocument.html#aa90bc630ee5203c6109ca5fad3323649\">TiXmlDocument</a>\n</li>\n<li>ErrorDesc()\n: <a class=\"el\" href=\"classTiXmlDocument.html#a9d0f689f6e09ea494ea547be8d79c25e\">TiXmlDocument</a>\n</li>\n<li>ErrorId()\n: <a class=\"el\" href=\"classTiXmlDocument.html#af96fc2f3f9ec6422782bfe916c9e778f\">TiXmlDocument</a>\n</li>\n<li>ErrorRow()\n: <a class=\"el\" href=\"classTiXmlDocument.html#af30efc75e804aa2e92fb8be3a8cb676e\">TiXmlDocument</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_func_0x66.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_f\">- f -</a></h3><ul>\n<li>FirstAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#a516054c9073647d6cb29b6abe9fa0592\">TiXmlElement</a>\n</li>\n<li>FirstChild()\n: <a class=\"el\" href=\"classTiXmlNode.html#a44c8eee26bbe2d1b2762038df9dde2f0\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlHandle.html#a8c61f64ae9365d89c264f289085541f8\">TiXmlHandle</a>\n, <a class=\"el\" href=\"classTiXmlNode.html#a07f6200a5956c723c5b52d70f29c46f6\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlHandle.html#acdb1faaf88a700b40ca2c8d9aee21139\">TiXmlHandle</a>\n</li>\n<li>FirstChildElement()\n: <a class=\"el\" href=\"classTiXmlNode.html#af4fb652f6bd79ae0d5ce7d0f7d3c0fba\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlHandle.html#a24d1112e995e937e4dddb202d4113d4a\">TiXmlHandle</a>\n, <a class=\"el\" href=\"classTiXmlNode.html#a327ad4bbd90073c5dfc931b07314f5f7\">TiXmlNode</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_func_0x67.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_g\">- g -</a></h3><ul>\n<li>GetDocument()\n: <a class=\"el\" href=\"classTiXmlNode.html#a80e397fa973cf5323e33b07154b024f3\">TiXmlNode</a>\n</li>\n<li>GetText()\n: <a class=\"el\" href=\"classTiXmlElement.html#af3282294986cdb216646ea1f67af2c87\">TiXmlElement</a>\n</li>\n<li>GetUserData()\n: <a class=\"el\" href=\"classTiXmlBase.html#a6559a530ca6763fc301a14d77ed28c17\">TiXmlBase</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_func_0x69.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_i\">- i -</a></h3><ul>\n<li>Indent()\n: <a class=\"el\" href=\"classTiXmlPrinter.html#abb33ec7d4bad6aaeb57f4304394b133d\">TiXmlPrinter</a>\n</li>\n<li>InsertAfterChild()\n: <a class=\"el\" href=\"classTiXmlNode.html#ad9b75e54ec19301c8b4d5ff583d0b3d5\">TiXmlNode</a>\n</li>\n<li>InsertBeforeChild()\n: <a class=\"el\" href=\"classTiXmlNode.html#a0c146fa2fff0157b681594102f48cbc7\">TiXmlNode</a>\n</li>\n<li>InsertEndChild()\n: <a class=\"el\" href=\"classTiXmlNode.html#ad7d4630e1a2a916edda16be22448a8ba\">TiXmlNode</a>\n</li>\n<li>IntValue()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#aa1a20ad59dc7e89a0ab265396360d50f\">TiXmlAttribute</a>\n</li>\n<li>IsWhiteSpaceCondensed()\n: <a class=\"el\" href=\"classTiXmlBase.html#ad4b1472531c647a25b1840a87ae42438\">TiXmlBase</a>\n</li>\n<li>IterateChildren()\n: <a class=\"el\" href=\"classTiXmlNode.html#adfaef35a076b9343adc1420757376c39\">TiXmlNode</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_func_0x6c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_l\">- l -</a></h3><ul>\n<li>LastAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#a86191b49f9177be132b85b14655f1381\">TiXmlElement</a>\n</li>\n<li>LastChild()\n: <a class=\"el\" href=\"classTiXmlNode.html#a6432d2b2495f6caf9cb4278df706a031\">TiXmlNode</a>\n</li>\n<li>LineBreak()\n: <a class=\"el\" href=\"classTiXmlPrinter.html#a11f1b4804a460b175ec244eb5724d96d\">TiXmlPrinter</a>\n</li>\n<li>LinkEndChild()\n: <a class=\"el\" href=\"classTiXmlNode.html#a5d29442ae46de6d0168429156197bfc6\">TiXmlNode</a>\n</li>\n<li>LoadFile()\n: <a class=\"el\" href=\"classTiXmlDocument.html#a41f6fe7200864d1dca663d230caf8db6\">TiXmlDocument</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_func_0x6e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_n\">- n -</a></h3><ul>\n<li>Name()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#a298a57287d305904ba6bd96ae6f78d3d\">TiXmlAttribute</a>\n</li>\n<li>Next()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#a1c78e92e223a40843f644ba48ef69f67\">TiXmlAttribute</a>\n</li>\n<li>NextSibling()\n: <a class=\"el\" href=\"classTiXmlNode.html#a1757c1f4d01e8c9596ffdbd561c76aea\">TiXmlNode</a>\n</li>\n<li>NextSiblingElement()\n: <a class=\"el\" href=\"classTiXmlNode.html#a071ba77fd7ab79402fa84b7e9b8607b3\">TiXmlNode</a>\n</li>\n<li>NoChildren()\n: <a class=\"el\" href=\"classTiXmlNode.html#aeed21ad30630ef6e7faf096127edc9f3\">TiXmlNode</a>\n</li>\n<li>Node()\n: <a class=\"el\" href=\"classTiXmlHandle.html#ab44b723a8dc9af72838a303c079d0376\">TiXmlHandle</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_func_0x70.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_p\">- p -</a></h3><ul>\n<li>Parent()\n: <a class=\"el\" href=\"classTiXmlNode.html#ab643043132ffd794f8602685d34a982e\">TiXmlNode</a>\n</li>\n<li>Parse()\n: <a class=\"el\" href=\"classTiXmlDocument.html#a17ebabe36926ef398e78dec0d0ad0378\">TiXmlDocument</a>\n</li>\n<li>Previous()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#a6ebbfe333fe76cd834bd6cbcca3130cf\">TiXmlAttribute</a>\n</li>\n<li>PreviousSibling()\n: <a class=\"el\" href=\"classTiXmlNode.html#ac2cd892768726270e511b2ab32de4d10\">TiXmlNode</a>\n</li>\n<li>Print()\n: <a class=\"el\" href=\"classTiXmlElement.html#afbf52736e70fc91ec9d760721d6f4fd2\">TiXmlElement</a>\n, <a class=\"el\" href=\"classTiXmlAttribute.html#acc04956c1d5c4c31fe74f7a7528d109a\">TiXmlAttribute</a>\n, <a class=\"el\" href=\"classTiXmlBase.html#a0de56b3f2ef14c65091a3b916437b512\">TiXmlBase</a>\n, <a class=\"el\" href=\"classTiXmlText.html#a0cafbf6f236c7f02d12b2bffc2b7976b\">TiXmlText</a>\n, <a class=\"el\" href=\"classTiXmlDocument.html#af08389ec70ee9b2de7f800e206a18510\">TiXmlDocument</a>\n, <a class=\"el\" href=\"classTiXmlUnknown.html#a31ba089a40fb5a1869750fce09b0bacb\">TiXmlUnknown</a>\n, <a class=\"el\" href=\"classTiXmlDocument.html#a8701fda1fa31b25abbc9c0df42da10e8\">TiXmlDocument</a>\n, <a class=\"el\" href=\"classTiXmlComment.html#a6b316527aaa8da0370cd68c22a5a0f5f\">TiXmlComment</a>\n, <a class=\"el\" href=\"classTiXmlDeclaration.html#abf6303db4bd05b5be554036817ff1cb4\">TiXmlDeclaration</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_func_0x71.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_q\">- q -</a></h3><ul>\n<li>QueryBoolAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#af4a1d3f88c28eb0f3115dc39ebd83fff\">TiXmlElement</a>\n</li>\n<li>QueryDoubleAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#a898d7730ecc341f0bffc7a9dadbf1ce7\">TiXmlElement</a>\n</li>\n<li>QueryDoubleValue()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#ac87b2a8489906a5d7aa2875f20be3513\">TiXmlAttribute</a>\n</li>\n<li>QueryFloatAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#aa04d3af11601ef5a5f88295203a843be\">TiXmlElement</a>\n</li>\n<li>QueryIntAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#aea0bfe471380f281c5945770ddbf52b9\">TiXmlElement</a>\n</li>\n<li>QueryIntValue()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#ad6c93088ee21af41a107931223339344\">TiXmlAttribute</a>\n</li>\n<li>QueryStringAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#a14321ac360efe906ed449d9db3fd9961\">TiXmlElement</a>\n</li>\n<li>QueryUnsignedAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#ae48df644f890ab86fa19839ac401f00d\">TiXmlElement</a>\n</li>\n<li>QueryValueAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#ae3b9a03b0a56663a40801c7256683576\">TiXmlElement</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_func_0x72.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_r\">- r -</a></h3><ul>\n<li>RemoveAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#a56979767deca794376b1dfa69a525b2a\">TiXmlElement</a>\n</li>\n<li>RemoveChild()\n: <a class=\"el\" href=\"classTiXmlNode.html#ae19d8510efc90596552f4feeac9a8fbf\">TiXmlNode</a>\n</li>\n<li>ReplaceChild()\n: <a class=\"el\" href=\"classTiXmlNode.html#a0c49e739a17b9938050c22cd89617fbd\">TiXmlNode</a>\n</li>\n<li>RootElement()\n: <a class=\"el\" href=\"classTiXmlDocument.html#ad09d17927f908f40efb406af2fb873be\">TiXmlDocument</a>\n</li>\n<li>Row()\n: <a class=\"el\" href=\"classTiXmlBase.html#a024bceb070188df92c2a8d8852dd0853\">TiXmlBase</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_func_0x73.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_s\">- s -</a></h3><ul>\n<li>SaveFile()\n: <a class=\"el\" href=\"classTiXmlDocument.html#a21c0aeb0d0a720169ad4ac89523ebe93\">TiXmlDocument</a>\n</li>\n<li>SetAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#ace6f4be75e373726d4774073d666d1a7\">TiXmlElement</a>\n</li>\n<li>SetCDATA()\n: <a class=\"el\" href=\"classTiXmlText.html#acb17ff7c5d09b2c839393445a3de5ea9\">TiXmlText</a>\n</li>\n<li>SetCondenseWhiteSpace()\n: <a class=\"el\" href=\"classTiXmlBase.html#a0f799ec645bfb8d8a969e83478f379c1\">TiXmlBase</a>\n</li>\n<li>SetDoubleAttribute()\n: <a class=\"el\" href=\"classTiXmlElement.html#a0d1dd975d75496778177e35abfe0ec0b\">TiXmlElement</a>\n</li>\n<li>SetDoubleValue()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#a0316da31373496c4368ad549bf711394\">TiXmlAttribute</a>\n</li>\n<li>SetIndent()\n: <a class=\"el\" href=\"classTiXmlPrinter.html#a213377a4070c7e625bae59716b089e5e\">TiXmlPrinter</a>\n</li>\n<li>SetIntValue()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#a7e065df640116a62ea4f4b7da5449cc8\">TiXmlAttribute</a>\n</li>\n<li>SetLineBreak()\n: <a class=\"el\" href=\"classTiXmlPrinter.html#a4be1e37e69e3858c59635aa947174fe6\">TiXmlPrinter</a>\n</li>\n<li>SetName()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#ab7fa3d21ff8d7c5764cf9af15b667a99\">TiXmlAttribute</a>\n</li>\n<li>SetStreamPrinting()\n: <a class=\"el\" href=\"classTiXmlPrinter.html#ab23a90629e374cb1cadca090468bbd19\">TiXmlPrinter</a>\n</li>\n<li>SetTabSize()\n: <a class=\"el\" href=\"classTiXmlDocument.html#a51dac56316f89b35bdb7d0d433ba988e\">TiXmlDocument</a>\n</li>\n<li>SetUserData()\n: <a class=\"el\" href=\"classTiXmlBase.html#ac6b3e0f790930d4970ec30764e937b5d\">TiXmlBase</a>\n</li>\n<li>SetValue()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#a2dae44178f668b3cb48101be4f2236a0\">TiXmlAttribute</a>\n, <a class=\"el\" href=\"classTiXmlNode.html#a2598d5f448042c1abbeae4503dd45ff2\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlAttribute.html#ab43f67a0cc3ec1d80e62606500f0925f\">TiXmlAttribute</a>\n</li>\n<li>Size()\n: <a class=\"el\" href=\"classTiXmlPrinter.html#ad01375ae9199bd2f48252eaddce3039d\">TiXmlPrinter</a>\n</li>\n<li>Standalone()\n: <a class=\"el\" href=\"classTiXmlDeclaration.html#a9ff06afc033d7ef730ec7c6825b97ad9\">TiXmlDeclaration</a>\n</li>\n<li>Str()\n: <a class=\"el\" href=\"classTiXmlPrinter.html#a3bd4daf44309b41f5813a833caa0d1c9\">TiXmlPrinter</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_func_0x74.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_t\">- t -</a></h3><ul>\n<li>Text()\n: <a class=\"el\" href=\"classTiXmlHandle.html#a9fc739c8a18d160006f82572fc143d13\">TiXmlHandle</a>\n</li>\n<li>TiXmlAttribute()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#a9cfa3c8179873fd485d83003b114f8e1\">TiXmlAttribute</a>\n</li>\n<li>TiXmlComment()\n: <a class=\"el\" href=\"classTiXmlComment.html#aaa3252031d3e8bd3a2bf51a1c61201b7\">TiXmlComment</a>\n</li>\n<li>TiXmlDeclaration()\n: <a class=\"el\" href=\"classTiXmlDeclaration.html#acd5556007c3c72209465081de39d9836\">TiXmlDeclaration</a>\n</li>\n<li>TiXmlDocument()\n: <a class=\"el\" href=\"classTiXmlDocument.html#a9f5e84335708fde98400230f9f12659c\">TiXmlDocument</a>\n</li>\n<li>TiXmlElement()\n: <a class=\"el\" href=\"classTiXmlElement.html#a01bc3ab372d35da08efcbbe65ad90c60\">TiXmlElement</a>\n</li>\n<li>TiXmlHandle()\n: <a class=\"el\" href=\"classTiXmlHandle.html#a236d7855e1e56ccc7b980630c48c7fd7\">TiXmlHandle</a>\n</li>\n<li>TiXmlText()\n: <a class=\"el\" href=\"classTiXmlText.html#af659e77c6b87d684827f35a8f4895960\">TiXmlText</a>\n</li>\n<li>ToComment()\n: <a class=\"el\" href=\"classTiXmlNode.html#aa0a5086f9eaee910bbfdc7f975e26574\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlComment.html#a00fb4215c20a2399ea05ac9b9e7e68a0\">TiXmlComment</a>\n</li>\n<li>ToDeclaration()\n: <a class=\"el\" href=\"classTiXmlNode.html#a9f43e6984fc7d4afd6eb32714c6b7b72\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlDeclaration.html#a1e085d3fefd1dbf5ccdbff729931a967\">TiXmlDeclaration</a>\n</li>\n<li>ToDocument()\n: <a class=\"el\" href=\"classTiXmlNode.html#a8a4cda4b15c29f64cff419309aebed08\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlDocument.html#a1dc977bde3e4fe85a8eb9d88a35ef5a4\">TiXmlDocument</a>\n</li>\n<li>ToElement()\n: <a class=\"el\" href=\"classTiXmlNode.html#a72abed96dc9667ab9e0a2a275301bb1c\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlElement.html#ac5b8d0e25fa23fd9acbb6d146082901c\">TiXmlElement</a>\n, <a class=\"el\" href=\"classTiXmlHandle.html#abc6e7ed383a5fe1e52b0c0004b457b9e\">TiXmlHandle</a>\n</li>\n<li>ToNode()\n: <a class=\"el\" href=\"classTiXmlHandle.html#af678e5088e83be67baf76f699756f2c3\">TiXmlHandle</a>\n</li>\n<li>ToText()\n: <a class=\"el\" href=\"classTiXmlText.html#ae7c3a8fd3e4dbf6c0c4363a943d72f5b\">TiXmlText</a>\n, <a class=\"el\" href=\"classTiXmlHandle.html#a4ac53a652296203a5b5e13854d923586\">TiXmlHandle</a>\n, <a class=\"el\" href=\"classTiXmlNode.html#a3ddfbcac78fbea041fad57e5c6d60a03\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlText.html#a895bf34ffad17f7439ab2a52b9651648\">TiXmlText</a>\n</li>\n<li>ToUnknown()\n: <a class=\"el\" href=\"classTiXmlNode.html#afd7205cf31d7a376929f8a36930627a2\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlUnknown.html#ab0313e5fe77987d746ac1a97a254419d\">TiXmlUnknown</a>\n, <a class=\"el\" href=\"classTiXmlNode.html#a06de5af852668c7e4af0d09c205f0b0d\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlHandle.html#a1381c17507a130767b1e23afc93b3674\">TiXmlHandle</a>\n</li>\n<li>Type()\n: <a class=\"el\" href=\"classTiXmlNode.html#a57b99d5c97d67a42b9752f5210a1ba5e\">TiXmlNode</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_func_0x75.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_u\">- u -</a></h3><ul>\n<li>Unknown()\n: <a class=\"el\" href=\"classTiXmlHandle.html#a49675b74357ba2aae124657a9a1ef465\">TiXmlHandle</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_func_0x76.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x76.html#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_v\">- v -</a></h3><ul>\n<li>Value()\n: <a class=\"el\" href=\"classTiXmlNode.html#a77943eb90d12c2892b1337a9f5918b41\">TiXmlNode</a>\n, <a class=\"el\" href=\"classTiXmlAttribute.html#a0f874490eac8ca00ee0070765d0e97e3\">TiXmlAttribute</a>\n</li>\n<li>ValueStr()\n: <a class=\"el\" href=\"classTiXmlAttribute.html#a87705c3ccf9ee9417beb4f7cbacd4d33\">TiXmlAttribute</a>\n, <a class=\"el\" href=\"classTiXmlNode.html#a6d9e505619d39bf50bfd9609c9169ea5\">TiXmlNode</a>\n</li>\n<li>Version()\n: <a class=\"el\" href=\"classTiXmlDeclaration.html#a02ee557b1a4545c3219ed377c103ec76\">TiXmlDeclaration</a>\n</li>\n<li>Visit()\n: <a class=\"el\" href=\"classTiXmlVisitor.html#a53a60e7a528627b31af3161972cc7fa2\">TiXmlVisitor</a>\n, <a class=\"el\" href=\"classTiXmlPrinter.html#ace1b14d33eede2575c0743e2350f6a38\">TiXmlPrinter</a>\n, <a class=\"el\" href=\"classTiXmlVisitor.html#afad71c71ce6473fb9b4b64cd92de4a19\">TiXmlVisitor</a>\n, <a class=\"el\" href=\"classTiXmlPrinter.html#a83c13d6b980064b30f989f9a35498979\">TiXmlPrinter</a>\n, <a class=\"el\" href=\"classTiXmlVisitor.html#a399b8ebca5cd14664974a32d2ce029e5\">TiXmlVisitor</a>\n</li>\n<li>VisitEnter()\n: <a class=\"el\" href=\"classTiXmlVisitor.html#a07baecb52dd7d8716ae2a48ad0956ee0\">TiXmlVisitor</a>\n, <a class=\"el\" href=\"classTiXmlPrinter.html#a0c5e7bf8622838417a0d0bfb8f433854\">TiXmlPrinter</a>\n, <a class=\"el\" href=\"classTiXmlVisitor.html#af6c6178ffa517bbdba95d70490875fff\">TiXmlVisitor</a>\n</li>\n<li>VisitExit()\n: <a class=\"el\" href=\"classTiXmlPrinter.html#a1853cf2f6e63ad4b4232b4835e0acaf0\">TiXmlPrinter</a>\n, <a class=\"el\" href=\"classTiXmlVisitor.html#aa0ade4f27087447e93974e975c3246ad\">TiXmlVisitor</a>\n, <a class=\"el\" href=\"classTiXmlPrinter.html#a66b33edd76c538b462f789b797a4fdf2\">TiXmlPrinter</a>\n, <a class=\"el\" href=\"classTiXmlVisitor.html#aec2b1f8116226d52f3a1b95dafd3a32c\">TiXmlVisitor</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_rela.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members - Related Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li class=\"current\"><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;<ul>\n<li>operator&lt;&lt;\n: <a class=\"el\" href=\"classTiXmlNode.html#a86cd49cfb17a844c0010b3136ac966c7\">TiXmlNode</a>\n</li>\n<li>operator&gt;&gt;\n: <a class=\"el\" href=\"classTiXmlNode.html#ab57bd426563c926844f65a78412e18b9\">TiXmlNode</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/functions_vars.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&nbsp;Functions</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;<ul>\n<li>userData\n: <a class=\"el\" href=\"classTiXmlBase.html#ab242c01590191f644569fa89a080d97c\">TiXmlBase</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/hierarchy.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Hierarchical Index</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"annotated.html\"><span>Class&nbsp;List</span></a></li>\n      <li class=\"current\"><a href=\"hierarchy.html\"><span>Class&nbsp;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&nbsp;Members</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>Class Hierarchy</h1>This inheritance list is sorted roughly, but not completely, alphabetically:<ul>\n<li><a class=\"el\" href=\"classTiXmlBase.html\">TiXmlBase</a><ul>\n<li><a class=\"el\" href=\"classTiXmlAttribute.html\">TiXmlAttribute</a></li>\n<li><a class=\"el\" href=\"classTiXmlNode.html\">TiXmlNode</a><ul>\n<li><a class=\"el\" href=\"classTiXmlComment.html\">TiXmlComment</a></li>\n<li><a class=\"el\" href=\"classTiXmlDeclaration.html\">TiXmlDeclaration</a></li>\n<li><a class=\"el\" href=\"classTiXmlDocument.html\">TiXmlDocument</a></li>\n<li><a class=\"el\" href=\"classTiXmlElement.html\">TiXmlElement</a></li>\n<li><a class=\"el\" href=\"classTiXmlText.html\">TiXmlText</a></li>\n<li><a class=\"el\" href=\"classTiXmlUnknown.html\">TiXmlUnknown</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><a class=\"el\" href=\"classTiXmlHandle.html\">TiXmlHandle</a></li>\n<li><a class=\"el\" href=\"classTiXmlVisitor.html\">TiXmlVisitor</a><ul>\n<li><a class=\"el\" href=\"classTiXmlPrinter.html\">TiXmlPrinter</a></li>\n</ul>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Main Page</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li class=\"current\"><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>TinyXml Documentation</h1><h3 class=\"version\">2.6.2 </h3><h1>TinyXML </h1>\n<p>TinyXML is a simple, small, C++ XML parser that can be easily integrated into other programs.</p>\n<h2>What it does. </h2>\n<p>In brief, TinyXML parses an XML document, and builds from that a Document Object Model (DOM) that can be read, modified, and saved.</p>\n<p>XML stands for \"eXtensible Markup Language.\" It allows you to create your own document markups. Where HTML does a very good job of marking documents for browsers, XML allows you to define any kind of document markup, for example a document that describes a \"to do\" list for an organizer application. XML is a very structured and convenient format. All those random file formats created to store application data can all be replaced with XML. One parser for everything.</p>\n<p>The best place for the complete, correct, and quite frankly hard to read spec is at <a href=\"http://www.w3.org/TR/2004/REC-xml-20040204/\">http://www.w3.org/TR/2004/REC-xml-20040204/</a>. An intro to XML (that I really like) can be found at <a href=\"http://skew.org/xml/tutorial/\">http://skew.org/xml/tutorial</a>.</p>\n<p>There are different ways to access and interact with XML data. TinyXML uses a Document Object Model (DOM), meaning the XML data is parsed into a C++ objects that can be browsed and manipulated, and then written to disk or another output stream. You can also construct an XML document from scratch with C++ objects and write this to disk or another output stream.</p>\n<p>TinyXML is designed to be easy and fast to learn. It is two headers and four cpp files. Simply add these to your project and off you go. There is an example file - xmltest.cpp - to get you started.</p>\n<p>TinyXML is released under the ZLib license, so you can use it in open source or commercial code. The details of the license are at the top of every source file.</p>\n<p>TinyXML attempts to be a flexible parser, but with truly correct and compliant XML output. TinyXML should compile on any reasonably C++ compliant system. It does not rely on exceptions or RTTI. It can be compiled with or without STL support. TinyXML fully supports the UTF-8 encoding, and the first 64k character entities.</p>\n<h2>What it doesn't do. </h2>\n<p>TinyXML doesn't parse or use DTDs (Document Type Definitions) or XSLs (eXtensible Stylesheet Language.) There are other parsers out there (check out www.sourceforge.org, search for XML) that are much more fully featured. But they are also much bigger, take longer to set up in your project, have a higher learning curve, and often have a more restrictive license. If you are working with browsers or have more complete XML needs, TinyXML is not the parser for you.</p>\n<p>The following DTD syntax will not parse at this time in TinyXML:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n\t&lt;!DOCTYPE Archiv [\n\t &lt;!ELEMENT Comment (#PCDATA)&gt;\n\t]&gt;\n</pre></div><p>because TinyXML sees this as a !DOCTYPE node with an illegally embedded !ELEMENT node. This may be addressed in the future.</p>\n<h2>Tutorials. </h2>\n<p>For the impatient, here is a tutorial to get you going. A great way to get started, but it is worth your time to read this (very short) manual completely.</p>\n<ul>\n<li><a class=\"el\" href=\"tutorial0.html\">TinyXML Tutorial</a></li>\n</ul>\n<h2>Code Status. </h2>\n<p>TinyXML is mature, tested code. It is very stable. If you find bugs, please file a bug report on the sourceforge web site (www.sourceforge.net/projects/tinyxml). We'll get them straightened out as soon as possible.</p>\n<p>There are some areas of improvement; please check sourceforge if you are interested in working on TinyXML.</p>\n<h2>Related Projects </h2>\n<p>TinyXML projects you may find useful! (Descriptions provided by the projects.)</p>\n<ul>\n<li>\n<b>TinyXPath</b> (<a href=\"http://tinyxpath.sourceforge.net\">http://tinyxpath.sourceforge.net</a>). TinyXPath is a small footprint XPath syntax decoder, written in C++. </li>\n<li>\n<b>TinyXML++</b> (<a href=\"http://code.google.com/p/ticpp/\">http://code.google.com/p/ticpp/</a>). TinyXML++ is a completely new interface to TinyXML that uses MANY of the C++ strengths. Templates, exceptions, and much better error handling. </li>\n</ul>\n<h2>Features </h2>\n<h3>Using STL </h3>\n<p>TinyXML can be compiled to use or not use STL. When using STL, TinyXML uses the std::string class, and fully supports std::istream, std::ostream, operator&lt;&lt;, and operator&gt;&gt;. Many API methods have both 'const char*' and 'const std::string&amp;' forms.</p>\n<p>When STL support is compiled out, no STL files are included whatsoever. All the string classes are implemented by TinyXML itself. API methods all use the 'const char*' form for input.</p>\n<p>Use the compile time define:</p>\n<p>TIXML_USE_STL</p>\n<p>to compile one version or the other. This can be passed by the compiler, or set as the first line of \"tinyxml.h\".</p>\n<p>Note: If compiling the test code in Linux, setting the environment variable TINYXML_USE_STL=YES/NO will control STL compilation. In the Windows project file, STL and non STL targets are provided. In your project, It's probably easiest to add the line \"#define TIXML_USE_STL\" as the first line of <a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a>.</p>\n<h3>UTF-8 </h3>\n<p>TinyXML supports UTF-8 allowing to manipulate XML files in any language. TinyXML also supports \"legacy mode\" - the encoding used before UTF-8 support and probably best described as \"extended ascii\".</p>\n<p>Normally, TinyXML will try to detect the correct encoding and use it. However, by setting the value of TIXML_DEFAULT_ENCODING in the header file, TinyXML can be forced to always use one encoding.</p>\n<p>TinyXML will assume Legacy Mode until one of the following occurs: </p>\n<ol>\n<li>\nIf the non-standard but common \"UTF-8 lead bytes\" (0xef 0xbb 0xbf) begin the file or data stream, TinyXML will read it as UTF-8.  </li>\n<li>\nIf the declaration tag is read, and it has an encoding=\"UTF-8\", then TinyXML will read it as UTF-8.  </li>\n<li>\nIf the declaration tag is read, and it has no encoding specified, then TinyXML will read it as UTF-8.  </li>\n<li>\nIf the declaration tag is read, and it has an encoding=\"something else\", then TinyXML will read it as Legacy Mode. In legacy mode, TinyXML will work as it did before. It's not clear what that mode does exactly, but old content should keep working. </li>\n<li>\nUntil one of the above criteria is met, TinyXML runs in Legacy Mode. </li>\n</ol>\n<p>What happens if the encoding is incorrectly set or detected? TinyXML will try to read and pass through text seen as improperly encoded. You may get some strange results or mangled characters. You may want to force TinyXML to the correct mode.</p>\n<p>You may force TinyXML to Legacy Mode by using LoadFile( TIXML_ENCODING_LEGACY ) or LoadFile( filename, TIXML_ENCODING_LEGACY ). You may force it to use legacy mode all the time by setting TIXML_DEFAULT_ENCODING = TIXML_ENCODING_LEGACY. Likewise, you may force it to TIXML_ENCODING_UTF8 with the same technique.</p>\n<p>For English users, using English XML, UTF-8 is the same as low-ASCII. You don't need to be aware of UTF-8 or change your code in any way. You can think of UTF-8 as a \"superset\" of ASCII.</p>\n<p>UTF-8 is not a double byte format - but it is a standard encoding of Unicode! TinyXML does not use or directly support wchar, TCHAR, or Microsoft's _UNICODE at this time. It is common to see the term \"Unicode\" improperly refer to UTF-16, a wide byte encoding of unicode. This is a source of confusion.</p>\n<p>For \"high-ascii\" languages - everything not English, pretty much - TinyXML can handle all languages, at the same time, as long as the XML is encoded in UTF-8. That can be a little tricky, older programs and operating systems tend to use the \"default\" or \"traditional\" code page. Many apps (and almost all modern ones) can output UTF-8, but older or stubborn (or just broken) ones still output text in the default code page.</p>\n<p>For example, Japanese systems traditionally use SHIFT-JIS encoding. Text encoded as SHIFT-JIS can not be read by TinyXML. A good text editor can import SHIFT-JIS and then save as UTF-8.</p>\n<p>The <a href=\"http://skew.org/xml/tutorial/\">Skew.org link</a> does a great job covering the encoding issue.</p>\n<p>The test file \"utf8test.xml\" is an XML containing English, Spanish, Russian, and Simplified Chinese. (Hopefully they are translated correctly). The file \"utf8test.gif\" is a screen capture of the XML file, rendered in IE. Note that if you don't have the correct fonts (Simplified Chinese or Russian) on your system, you won't see output that matches the GIF file even if you can parse it correctly. Also note that (at least on my Windows machine) console output is in a Western code page, so that Print() or printf() cannot correctly display the file. This is not a bug in TinyXML - just an OS issue. No data is lost or destroyed by TinyXML. The console just doesn't render UTF-8.</p>\n<h3>Entities </h3>\n<p>TinyXML recognizes the pre-defined \"character entities\", meaning special characters. Namely:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n\t&amp;amp;\t&amp;\n\t&amp;lt;\t&lt;\n\t&amp;gt;\t&gt;\n\t&amp;quot;\t\"\n\t&amp;apos;\t'\n</pre></div><p>These are recognized when the XML document is read, and translated to there UTF-8 equivalents. For instance, text with the XML of:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n\tFar &amp;amp; Away\n</pre></div><p>will have the Value() of \"Far &amp; Away\" when queried from the <a class=\"el\" href=\"classTiXmlText.html\" title=\"XML text.\">TiXmlText</a> object, and will be written back to the XML stream/file as an ampersand. Older versions of TinyXML \"preserved\" character entities, but the newer versions will translate them into characters.</p>\n<p>Additionally, any character can be specified by its Unicode code point: The syntax \"&amp;#xA0;\" or \"&amp;#160;\" are both to the non-breaking space characher.</p>\n<h3>Printing </h3>\n<p>TinyXML can print output in several different ways that all have strengths and limitations.</p>\n<ul>\n<li>Print( FILE* ). Output to a std-C stream, which includes all C files as well as stdout.<ul>\n<li>\"Pretty prints\", but you don't have control over printing options.</li>\n<li>The output is streamed directly to the FILE object, so there is no memory overhead in the TinyXML code.</li>\n<li>used by Print() and SaveFile()</li>\n</ul>\n</li>\n</ul>\n<ul>\n<li>operator&lt;&lt;. Output to a c++ stream.<ul>\n<li>Integrates with standart C++ iostreams.</li>\n<li>Outputs in \"network printing\" mode without line breaks. Good for network transmission and moving XML between C++ objects, but hard for a human to read.</li>\n</ul>\n</li>\n</ul>\n<ul>\n<li><a class=\"el\" href=\"classTiXmlPrinter.html\" title=\"Print to memory functionality.\">TiXmlPrinter</a>. Output to a std::string or memory buffer.<ul>\n<li>API is less concise</li>\n<li>Future printing options will be put here.</li>\n<li>Printing may change slightly in future versions as it is refined and expanded.</li>\n</ul>\n</li>\n</ul>\n<h3>Streams </h3>\n<p>With TIXML_USE_STL on TinyXML supports C++ streams (operator &lt;&lt;,&gt;&gt;) streams as well as C (FILE*) streams. There are some differences that you may need to be aware of.</p>\n<p>C style output:</p>\n<ul>\n<li>based on FILE*</li>\n<li>the Print() and SaveFile() methods</li>\n</ul>\n<p>Generates formatted output, with plenty of white space, intended to be as human-readable as possible. They are very fast, and tolerant of ill formed XML documents. For example, an XML document that contains 2 root elements and 2 declarations, will still print.</p>\n<p>C style input:</p>\n<ul>\n<li>based on FILE*</li>\n<li>the Parse() and LoadFile() methods</li>\n</ul>\n<p>A fast, tolerant read. Use whenever you don't need the C++ streams.</p>\n<p>C++ style output:</p>\n<ul>\n<li>based on std::ostream</li>\n<li>operator&lt;&lt;</li>\n</ul>\n<p>Generates condensed output, intended for network transmission rather than readability. Depending on your system's implementation of the ostream class, these may be somewhat slower. (Or may not.) Not tolerant of ill formed XML: a document should contain the correct one root element. Additional root level elements will not be streamed out.</p>\n<p>C++ style input:</p>\n<ul>\n<li>based on std::istream</li>\n<li>operator&gt;&gt;</li>\n</ul>\n<p>Reads XML from a stream, making it useful for network transmission. The tricky part is knowing when the XML document is complete, since there will almost certainly be other data in the stream. TinyXML will assume the XML data is complete after it reads the root element. Put another way, documents that are ill-constructed with more than one root element will not read correctly. Also note that operator&gt;&gt; is somewhat slower than Parse, due to both implementation of the STL and limitations of TinyXML.</p>\n<h3>White space </h3>\n<p>The world simply does not agree on whether white space should be kept, or condensed. For example, pretend the '_' is a space, and look at \"Hello____world\". HTML, and at least some XML parsers, will interpret this as \"Hello_world\". They condense white space. Some XML parsers do not, and will leave it as \"Hello____world\". (Remember to keep pretending the _ is a space.) Others suggest that __Hello___world__ should become Hello___world.</p>\n<p>It's an issue that hasn't been resolved to my satisfaction. TinyXML supports the first 2 approaches. Call <a class=\"el\" href=\"classTiXmlBase.html#a0f799ec645bfb8d8a969e83478f379c1\" title=\"The world does not agree on whether white space should be kept or not.\">TiXmlBase::SetCondenseWhiteSpace( bool )</a> to set the desired behavior. The default is to condense white space.</p>\n<p>If you change the default, you should call <a class=\"el\" href=\"classTiXmlBase.html#a0f799ec645bfb8d8a969e83478f379c1\" title=\"The world does not agree on whether white space should be kept or not.\">TiXmlBase::SetCondenseWhiteSpace( bool )</a> before making any calls to Parse XML data, and I don't recommend changing it after it has been set.</p>\n<h3>Handles </h3>\n<p>Where browsing an XML document in a robust way, it is important to check for null returns from method calls. An error safe implementation can generate a lot of code like:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\nTiXmlElement* root = document.FirstChildElement( \"Document\" );\nif ( root )\n{\n\tTiXmlElement* element = root-&gt;FirstChildElement( \"Element\" );\n\tif ( element )\n\t{\n\t\tTiXmlElement* child = element-&gt;FirstChildElement( \"Child\" );\n\t\tif ( child )\n\t\t{\n\t\t\tTiXmlElement* child2 = child-&gt;NextSiblingElement( \"Child\" );\n\t\t\tif ( child2 )\n\t\t\t{\n\t\t\t\t// Finally do something useful.\n</pre></div><p>Handles have been introduced to clean this up. Using the <a class=\"el\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a> class, the previous code reduces to:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\nTiXmlHandle docHandle( &amp;document );\nTiXmlElement* child2 = docHandle.FirstChild( \"Document\" ).FirstChild( \"Element\" ).Child( \"Child\", 1 ).ToElement();\nif ( child2 )\n{\n\t// do something useful\n</pre></div><p>Which is much easier to deal with. See <a class=\"el\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a> for more information.</p>\n<h3>Row and Column tracking </h3>\n<p>Being able to track nodes and attributes back to their origin location in source files can be very important for some applications. Additionally, knowing where parsing errors occured in the original source can be very time saving.</p>\n<p>TinyXML can tracks the row and column origin of all nodes and attributes in a text file. The <a class=\"el\" href=\"classTiXmlBase.html#a024bceb070188df92c2a8d8852dd0853\" title=\"Return the position, in the original source file, of this node or attribute.\">TiXmlBase::Row()</a> and <a class=\"el\" href=\"classTiXmlBase.html#ab54bfb9b70fe6dd276e7b279cab7f003\" title=\"See Row().\">TiXmlBase::Column()</a> methods return the origin of the node in the source text. The correct tabs can be configured in <a class=\"el\" href=\"classTiXmlDocument.html#a51dac56316f89b35bdb7d0d433ba988e\" title=\"SetTabSize() allows the error reporting functions (ErrorRow() and ErrorCol()) to...\">TiXmlDocument::SetTabSize()</a>.</p>\n<h2>Using and Installing </h2>\n<p>To Compile and Run xmltest:</p>\n<p>A Linux Makefile and a Windows Visual C++ .dsw file is provided. Simply compile and run. It will write the file demotest.xml to your disk and generate output on the screen. It also tests walking the DOM by printing out the number of nodes found using different techniques.</p>\n<p>The Linux makefile is very generic and runs on many systems - it is currently tested on mingw and MacOSX. You do not need to run 'make depend'. The dependecies have been hard coded.</p>\n<h3>Windows project file for VC6</h3>\n<ul>\n<li>\ntinyxml: tinyxml library, non-STL  </li>\n<li>\ntinyxmlSTL: tinyxml library, STL  </li>\n<li>\ntinyXmlTest: test app, non-STL  </li>\n<li>\ntinyXmlTestSTL: test app, STL  </li>\n</ul>\n<h3>Makefile</h3>\n<p>At the top of the makefile you can set:</p>\n<p>PROFILE, DEBUG, and TINYXML_USE_STL. Details (such that they are) are in the makefile.</p>\n<p>In the tinyxml directory, type \"make clean\" then \"make\". The executable file 'xmltest' will be created.</p>\n<h3>To Use in an Application:</h3>\n<p>Add tinyxml.cpp, <a class=\"el\" href=\"tinyxml_8h_source.html\">tinyxml.h</a>, tinyxmlerror.cpp, tinyxmlparser.cpp, tinystr.cpp, and <a class=\"el\" href=\"tinystr_8h_source.html\">tinystr.h</a> to your project or make file. That's it! It should compile on any reasonably compliant C++ system. You do not need to enable exceptions or RTTI for TinyXML.</p>\n<h2>How TinyXML works. </h2>\n<p>An example is probably the best way to go. Take: </p>\n<div class=\"fragment\"><pre class=\"fragment\">\n\t&lt;?xml version=\"1.0\" standalone=no&gt;\n\t&lt;!-- Our to do list data --&gt;\n\t&lt;ToDo&gt;\n\t\t&lt;Item priority=\"1\"&gt; Go to the &lt;bold&gt;Toy store!&lt;/bold&gt;&lt;/Item&gt;\n\t\t&lt;Item priority=\"2\"&gt; Do bills&lt;/Item&gt;\n\t&lt;/ToDo&gt;\n</pre></div><p>Its not much of a To Do list, but it will do. To read this file (say \"demo.xml\") you would create a document, and parse it in: </p>\n<div class=\"fragment\"><pre class=\"fragment\">\n\tTiXmlDocument doc( \"demo.xml\" );\n\tdoc.LoadFile();\n</pre></div><p>And its ready to go. Now lets look at some lines and how they relate to the DOM.</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n&lt;?xml version=\"1.0\" standalone=no&gt;\n</pre></div><p>The first line is a declaration, and gets turned into the <a class=\"el\" href=\"classTiXmlDeclaration.html\" title=\"In correct XML the declaration is the first entry in the file.\">TiXmlDeclaration</a> class. It will be the first child of the document node.</p>\n<p>This is the only directive/special tag parsed by TinyXML. Generally directive tags are stored in <a class=\"el\" href=\"classTiXmlUnknown.html\" title=\"Any tag that tinyXml doesn&#39;t recognize is saved as an unknown.\">TiXmlUnknown</a> so the commands wont be lost when it is saved back to disk.</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n&lt;!-- Our to do list data --&gt;\n</pre></div><p>A comment. Will become a <a class=\"el\" href=\"classTiXmlComment.html\" title=\"An XML comment.\">TiXmlComment</a> object.</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n&lt;ToDo&gt;\n</pre></div><p>The \"ToDo\" tag defines a <a class=\"el\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a> object. This one does not have any attributes, but does contain 2 other elements.</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n&lt;Item priority=\"1\"&gt; \n</pre></div><p>Creates another <a class=\"el\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a> which is a child of the \"ToDo\" element. This element has 1 attribute, with the name \"priority\" and the value \"1\".</p>\n<div class=\"fragment\"><pre class=\"fragment\">\nGo to the\n</pre></div><p>A <a class=\"el\" href=\"classTiXmlText.html\" title=\"XML text.\">TiXmlText</a>. This is a leaf node and cannot contain other nodes. It is a child of the \"Item\" <a class=\"el\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>.</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n&lt;bold&gt;\n</pre></div><p>Another <a class=\"el\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>, this one a child of the \"Item\" element.</p>\n<p>Etc.</p>\n<p>Looking at the entire object tree, you end up with: </p>\n<div class=\"fragment\"><pre class=\"fragment\">\nTiXmlDocument\t\t\t\t\t\"demo.xml\"\n\tTiXmlDeclaration\t\t\t\"version='1.0'\" \"standalone=no\"\n\tTiXmlComment\t\t\t\t\" Our to do list data\"\n\tTiXmlElement\t\t\t\t\"ToDo\"\n\t\tTiXmlElement\t\t\t\"Item\" Attribtutes: priority = 1\n\t\t\tTiXmlText\t\t\t\"Go to the \"\n\t\t\tTiXmlElement\t\t\"bold\"\n\t\t\t\tTiXmlText\t\t\"Toy store!\"\n\t\tTiXmlElement\t\t\t\"Item\" Attributes: priority=2\n\t\t\tTiXmlText\t\t\t\"Do bills\"\n</pre></div><h2>Documentation </h2>\n<p>The documentation is build with Doxygen, using the 'dox' configuration file.</p>\n<h2>License </h2>\n<p>TinyXML is released under the zlib license:</p>\n<p>This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.</p>\n<p>Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:</p>\n<p>1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.</p>\n<p>2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</p>\n<p>3. This notice may not be removed or altered from any source distribution.</p>\n<h2>References </h2>\n<p>The World Wide Web Consortium is the definitive standard body for XML, and their web pages contain huge amounts of information.</p>\n<p>The definitive spec: <a href=\"http://www.w3.org/TR/2004/REC-xml-20040204/\">http://www.w3.org/TR/2004/REC-xml-20040204/</a></p>\n<p>I also recommend \"XML Pocket Reference\" by Robert Eckstein and published by OReilly...the book that got the whole thing started.</p>\n<h2>Contributors, Contacts, and a Brief History </h2>\n<p>Thanks very much to everyone who sends suggestions, bugs, ideas, and encouragement. It all helps, and makes this project fun. A special thanks to the contributors on the web pages that keep it lively.</p>\n<p>So many people have sent in bugs and ideas, that rather than list here we try to give credit due in the \"changes.txt\" file.</p>\n<p>TinyXML was originally written by Lee Thomason. (Often the \"I\" still in the documentation.) Lee reviews changes and releases new versions, with the help of Yves Berquin, Andrew Ellerton, and the tinyXml community.</p>\n<p>We appreciate your suggestions, and would love to know if you use TinyXML. Hopefully you will enjoy it and find it useful. Please post questions, comments, file bugs, or contact us at:</p>\n<p>www.sourceforge.net/projects/tinyxml</p>\n<p>Lee Thomason, Yves Berquin, Andrew Ellerton </p>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/pages.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: Page Index</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li class=\"current\"><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n<h1>Related Pages</h1>Here is a list of all related documentation pages:<ul>\n<li><a class=\"el\" href=\"deprecated.html\">Deprecated List</a>\n</li>\n</ul>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/tabs.css",
    "content": "/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */\n\nDIV.tabs\n{\n   float            : left;\n   width            : 100%;\n   background       : url(\"tab_b.gif\") repeat-x bottom;\n   margin-bottom    : 4px;\n}\n\nDIV.tabs UL\n{\n   margin           : 0px;\n   padding-left     : 10px;\n   list-style       : none;\n}\n\nDIV.tabs LI, DIV.tabs FORM\n{\n   display          : inline;\n   margin           : 0px;\n   padding          : 0px;\n}\n\nDIV.tabs FORM\n{\n   float            : right;\n}\n\nDIV.tabs A\n{\n   float            : left;\n   background       : url(\"tab_r.gif\") no-repeat right top;\n   border-bottom    : 1px solid #84B0C7;\n   font-size        : 80%;\n   font-weight      : bold;\n   text-decoration  : none;\n}\n\nDIV.tabs A:hover\n{\n   background-position: 100% -150px;\n}\n\nDIV.tabs A:link, DIV.tabs A:visited,\nDIV.tabs A:active, DIV.tabs A:hover\n{\n       color: #1A419D;\n}\n\nDIV.tabs SPAN\n{\n   float            : left;\n   display          : block;\n   background       : url(\"tab_l.gif\") no-repeat left top;\n   padding          : 5px 9px;\n   white-space      : nowrap;\n}\n\nDIV.tabs #MSearchBox\n{\n   float            : right;\n   display          : inline;\n   font-size        : 1em;\n}\n\nDIV.tabs TD\n{\n   font-size        : 80%;\n   font-weight      : bold;\n   text-decoration  : none;\n}\n\n\n\n/* Commented Backslash Hack hides rule from IE5-Mac \\*/\nDIV.tabs SPAN {float : none;}\n/* End IE5-Mac hack */\n\nDIV.tabs A:hover SPAN\n{\n   background-position: 0% -150px;\n}\n\nDIV.tabs LI.current A\n{\n   background-position: 100% -150px;\n   border-width     : 0px;\n}\n\nDIV.tabs LI.current SPAN\n{\n   background-position: 0% -150px;\n   padding-bottom   : 6px;\n}\n\nDIV.navpath\n{\n   background       : none;\n   border           : none;\n   border-bottom    : 1px solid #84B0C7;\n   text-align       : center;\n   margin           : 2px;\n   padding          : 2px;\n}\n"
  },
  {
    "path": "external/tinyxml/docs/tinystr_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: tinystr.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"files.html\"><span>File&nbsp;List</span></a></li>\n    </ul>\n  </div>\n<h1>tinystr.h</h1><div class=\"fragment\"><pre class=\"fragment\"><a name=\"l00001\"></a>00001 <span class=\"comment\">/*</span>\n<a name=\"l00002\"></a>00002 <span class=\"comment\">www.sourceforge.net/projects/tinyxml</span>\n<a name=\"l00003\"></a>00003 <span class=\"comment\"></span>\n<a name=\"l00004\"></a>00004 <span class=\"comment\">This software is provided &#39;as-is&#39;, without any express or implied</span>\n<a name=\"l00005\"></a>00005 <span class=\"comment\">warranty. In no event will the authors be held liable for any</span>\n<a name=\"l00006\"></a>00006 <span class=\"comment\">damages arising from the use of this software.</span>\n<a name=\"l00007\"></a>00007 <span class=\"comment\"></span>\n<a name=\"l00008\"></a>00008 <span class=\"comment\">Permission is granted to anyone to use this software for any</span>\n<a name=\"l00009\"></a>00009 <span class=\"comment\">purpose, including commercial applications, and to alter it and</span>\n<a name=\"l00010\"></a>00010 <span class=\"comment\">redistribute it freely, subject to the following restrictions:</span>\n<a name=\"l00011\"></a>00011 <span class=\"comment\"></span>\n<a name=\"l00012\"></a>00012 <span class=\"comment\">1. The origin of this software must not be misrepresented; you must</span>\n<a name=\"l00013\"></a>00013 <span class=\"comment\">not claim that you wrote the original software. If you use this</span>\n<a name=\"l00014\"></a>00014 <span class=\"comment\">software in a product, an acknowledgment in the product documentation</span>\n<a name=\"l00015\"></a>00015 <span class=\"comment\">would be appreciated but is not required.</span>\n<a name=\"l00016\"></a>00016 <span class=\"comment\"></span>\n<a name=\"l00017\"></a>00017 <span class=\"comment\">2. Altered source versions must be plainly marked as such, and</span>\n<a name=\"l00018\"></a>00018 <span class=\"comment\">must not be misrepresented as being the original software.</span>\n<a name=\"l00019\"></a>00019 <span class=\"comment\"></span>\n<a name=\"l00020\"></a>00020 <span class=\"comment\">3. This notice may not be removed or altered from any source</span>\n<a name=\"l00021\"></a>00021 <span class=\"comment\">distribution.</span>\n<a name=\"l00022\"></a>00022 <span class=\"comment\">*/</span>\n<a name=\"l00023\"></a>00023 \n<a name=\"l00024\"></a>00024 \n<a name=\"l00025\"></a>00025 <span class=\"preprocessor\">#ifndef TIXML_USE_STL</span>\n<a name=\"l00026\"></a>00026 <span class=\"preprocessor\"></span>\n<a name=\"l00027\"></a>00027 <span class=\"preprocessor\">#ifndef TIXML_STRING_INCLUDED</span>\n<a name=\"l00028\"></a>00028 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#define TIXML_STRING_INCLUDED</span>\n<a name=\"l00029\"></a>00029 <span class=\"preprocessor\"></span>\n<a name=\"l00030\"></a>00030 <span class=\"preprocessor\">#include &lt;assert.h&gt;</span>\n<a name=\"l00031\"></a>00031 <span class=\"preprocessor\">#include &lt;string.h&gt;</span>\n<a name=\"l00032\"></a>00032 \n<a name=\"l00033\"></a>00033 <span class=\"comment\">/*  The support for explicit isn&#39;t that universal, and it isn&#39;t really</span>\n<a name=\"l00034\"></a>00034 <span class=\"comment\">    required - it is used to check that the TiXmlString class isn&#39;t incorrectly</span>\n<a name=\"l00035\"></a>00035 <span class=\"comment\">    used. Be nice to old compilers and macro it here:</span>\n<a name=\"l00036\"></a>00036 <span class=\"comment\">*/</span>\n<a name=\"l00037\"></a>00037 <span class=\"preprocessor\">#if defined(_MSC_VER) &amp;&amp; (_MSC_VER &gt;= 1200 )</span>\n<a name=\"l00038\"></a>00038 <span class=\"preprocessor\"></span>    <span class=\"comment\">// Microsoft visual studio, version 6 and higher.</span>\n<a name=\"l00039\"></a>00039 <span class=\"preprocessor\">    #define TIXML_EXPLICIT explicit</span>\n<a name=\"l00040\"></a>00040 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#elif defined(__GNUC__) &amp;&amp; (__GNUC__ &gt;= 3 )</span>\n<a name=\"l00041\"></a>00041 <span class=\"preprocessor\"></span>    <span class=\"comment\">// GCC version 3 and higher.s</span>\n<a name=\"l00042\"></a>00042 <span class=\"preprocessor\">    #define TIXML_EXPLICIT explicit</span>\n<a name=\"l00043\"></a>00043 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#else</span>\n<a name=\"l00044\"></a>00044 <span class=\"preprocessor\"></span><span class=\"preprocessor\">    #define TIXML_EXPLICIT</span>\n<a name=\"l00045\"></a>00045 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#endif</span>\n<a name=\"l00046\"></a>00046 <span class=\"preprocessor\"></span>\n<a name=\"l00047\"></a>00047 \n<a name=\"l00048\"></a>00048 <span class=\"comment\">/*</span>\n<a name=\"l00049\"></a>00049 <span class=\"comment\">   TiXmlString is an emulation of a subset of the std::string template.</span>\n<a name=\"l00050\"></a>00050 <span class=\"comment\">   Its purpose is to allow compiling TinyXML on compilers with no or poor STL support.</span>\n<a name=\"l00051\"></a>00051 <span class=\"comment\">   Only the member functions relevant to the TinyXML project have been implemented.</span>\n<a name=\"l00052\"></a>00052 <span class=\"comment\">   The buffer allocation is made by a simplistic power of 2 like mechanism : if we increase</span>\n<a name=\"l00053\"></a>00053 <span class=\"comment\">   a string and there&#39;s no more room, we allocate a buffer twice as big as we need.</span>\n<a name=\"l00054\"></a>00054 <span class=\"comment\">*/</span>\n<a name=\"l00055\"></a>00055 <span class=\"keyword\">class </span>TiXmlString\n<a name=\"l00056\"></a>00056 {\n<a name=\"l00057\"></a>00057   <span class=\"keyword\">public</span> :\n<a name=\"l00058\"></a>00058     <span class=\"comment\">// The size type used</span>\n<a name=\"l00059\"></a>00059     <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">size_t</span> size_type;\n<a name=\"l00060\"></a>00060 \n<a name=\"l00061\"></a>00061     <span class=\"comment\">// Error value for find primitive</span>\n<a name=\"l00062\"></a>00062     <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> size_type npos; <span class=\"comment\">// = -1;</span>\n<a name=\"l00063\"></a>00063 \n<a name=\"l00064\"></a>00064 \n<a name=\"l00065\"></a>00065     <span class=\"comment\">// TiXmlString empty constructor</span>\n<a name=\"l00066\"></a>00066     TiXmlString () : rep_(&amp;nullrep_)\n<a name=\"l00067\"></a>00067     {\n<a name=\"l00068\"></a>00068     }\n<a name=\"l00069\"></a>00069 \n<a name=\"l00070\"></a>00070     <span class=\"comment\">// TiXmlString copy constructor</span>\n<a name=\"l00071\"></a>00071     TiXmlString ( <span class=\"keyword\">const</span> TiXmlString &amp; copy) : rep_(0)\n<a name=\"l00072\"></a>00072     {\n<a name=\"l00073\"></a>00073         init(copy.length());\n<a name=\"l00074\"></a>00074         memcpy(start(), copy.data(), length());\n<a name=\"l00075\"></a>00075     }\n<a name=\"l00076\"></a>00076 \n<a name=\"l00077\"></a>00077     <span class=\"comment\">// TiXmlString constructor, based on a string</span>\n<a name=\"l00078\"></a>00078     TIXML_EXPLICIT TiXmlString ( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * copy) : rep_(0)\n<a name=\"l00079\"></a>00079     {\n<a name=\"l00080\"></a>00080         init( static_cast&lt;size_type&gt;( strlen(copy) ));\n<a name=\"l00081\"></a>00081         memcpy(start(), copy, length());\n<a name=\"l00082\"></a>00082     }\n<a name=\"l00083\"></a>00083 \n<a name=\"l00084\"></a>00084     <span class=\"comment\">// TiXmlString constructor, based on a string</span>\n<a name=\"l00085\"></a>00085     TIXML_EXPLICIT TiXmlString ( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * str, size_type len) : rep_(0)\n<a name=\"l00086\"></a>00086     {\n<a name=\"l00087\"></a>00087         init(len);\n<a name=\"l00088\"></a>00088         memcpy(start(), str, len);\n<a name=\"l00089\"></a>00089     }\n<a name=\"l00090\"></a>00090 \n<a name=\"l00091\"></a>00091     <span class=\"comment\">// TiXmlString destructor</span>\n<a name=\"l00092\"></a>00092     ~TiXmlString ()\n<a name=\"l00093\"></a>00093     {\n<a name=\"l00094\"></a>00094         quit();\n<a name=\"l00095\"></a>00095     }\n<a name=\"l00096\"></a>00096 \n<a name=\"l00097\"></a>00097     TiXmlString&amp; operator = (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * copy)\n<a name=\"l00098\"></a>00098     {\n<a name=\"l00099\"></a>00099         <span class=\"keywordflow\">return</span> assign( copy, (size_type)strlen(copy));\n<a name=\"l00100\"></a>00100     }\n<a name=\"l00101\"></a>00101 \n<a name=\"l00102\"></a>00102     TiXmlString&amp; operator = (<span class=\"keyword\">const</span> TiXmlString &amp; copy)\n<a name=\"l00103\"></a>00103     {\n<a name=\"l00104\"></a>00104         <span class=\"keywordflow\">return</span> assign(copy.start(), copy.length());\n<a name=\"l00105\"></a>00105     }\n<a name=\"l00106\"></a>00106 \n<a name=\"l00107\"></a>00107 \n<a name=\"l00108\"></a>00108     <span class=\"comment\">// += operator. Maps to append</span>\n<a name=\"l00109\"></a>00109     TiXmlString&amp; operator += (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * suffix)\n<a name=\"l00110\"></a>00110     {\n<a name=\"l00111\"></a>00111         <span class=\"keywordflow\">return</span> append(suffix, static_cast&lt;size_type&gt;( strlen(suffix) ));\n<a name=\"l00112\"></a>00112     }\n<a name=\"l00113\"></a>00113 \n<a name=\"l00114\"></a>00114     <span class=\"comment\">// += operator. Maps to append</span>\n<a name=\"l00115\"></a>00115     TiXmlString&amp; operator += (<span class=\"keywordtype\">char</span> single)\n<a name=\"l00116\"></a>00116     {\n<a name=\"l00117\"></a>00117         <span class=\"keywordflow\">return</span> append(&amp;single, 1);\n<a name=\"l00118\"></a>00118     }\n<a name=\"l00119\"></a>00119 \n<a name=\"l00120\"></a>00120     <span class=\"comment\">// += operator. Maps to append</span>\n<a name=\"l00121\"></a>00121     TiXmlString&amp; operator += (<span class=\"keyword\">const</span> TiXmlString &amp; suffix)\n<a name=\"l00122\"></a>00122     {\n<a name=\"l00123\"></a>00123         <span class=\"keywordflow\">return</span> append(suffix.data(), suffix.length());\n<a name=\"l00124\"></a>00124     }\n<a name=\"l00125\"></a>00125 \n<a name=\"l00126\"></a>00126 \n<a name=\"l00127\"></a>00127     <span class=\"comment\">// Convert a TiXmlString into a null-terminated char *</span>\n<a name=\"l00128\"></a>00128     <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * c_str ()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> rep_-&gt;str; }\n<a name=\"l00129\"></a>00129 \n<a name=\"l00130\"></a>00130     <span class=\"comment\">// Convert a TiXmlString into a char * (need not be null terminated).</span>\n<a name=\"l00131\"></a>00131     <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * data ()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> rep_-&gt;str; }\n<a name=\"l00132\"></a>00132 \n<a name=\"l00133\"></a>00133     <span class=\"comment\">// Return the length of a TiXmlString</span>\n<a name=\"l00134\"></a>00134     size_type length ()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> rep_-&gt;size; }\n<a name=\"l00135\"></a>00135 \n<a name=\"l00136\"></a>00136     <span class=\"comment\">// Alias for length()</span>\n<a name=\"l00137\"></a>00137     size_type size ()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> rep_-&gt;size; }\n<a name=\"l00138\"></a>00138 \n<a name=\"l00139\"></a>00139     <span class=\"comment\">// Checks if a TiXmlString is empty</span>\n<a name=\"l00140\"></a>00140     <span class=\"keywordtype\">bool</span> empty ()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> rep_-&gt;size == 0; }\n<a name=\"l00141\"></a>00141 \n<a name=\"l00142\"></a>00142     <span class=\"comment\">// Return capacity of string</span>\n<a name=\"l00143\"></a>00143     size_type capacity ()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> rep_-&gt;capacity; }\n<a name=\"l00144\"></a>00144 \n<a name=\"l00145\"></a>00145 \n<a name=\"l00146\"></a>00146     <span class=\"comment\">// single char extraction</span>\n<a name=\"l00147\"></a>00147     <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>&amp; at (size_type index)<span class=\"keyword\"> const</span>\n<a name=\"l00148\"></a>00148 <span class=\"keyword\">    </span>{\n<a name=\"l00149\"></a>00149         assert( index &lt; length() );\n<a name=\"l00150\"></a>00150         <span class=\"keywordflow\">return</span> rep_-&gt;str[ index ];\n<a name=\"l00151\"></a>00151     }\n<a name=\"l00152\"></a>00152 \n<a name=\"l00153\"></a>00153     <span class=\"comment\">// [] operator</span>\n<a name=\"l00154\"></a>00154     <span class=\"keywordtype\">char</span>&amp; operator [] (size_type index)<span class=\"keyword\"> const</span>\n<a name=\"l00155\"></a>00155 <span class=\"keyword\">    </span>{\n<a name=\"l00156\"></a>00156         assert( index &lt; length() );\n<a name=\"l00157\"></a>00157         <span class=\"keywordflow\">return</span> rep_-&gt;str[ index ];\n<a name=\"l00158\"></a>00158     }\n<a name=\"l00159\"></a>00159 \n<a name=\"l00160\"></a>00160     <span class=\"comment\">// find a char in a string. Return TiXmlString::npos if not found</span>\n<a name=\"l00161\"></a>00161     size_type find (<span class=\"keywordtype\">char</span> lookup)<span class=\"keyword\"> const</span>\n<a name=\"l00162\"></a>00162 <span class=\"keyword\">    </span>{\n<a name=\"l00163\"></a>00163         <span class=\"keywordflow\">return</span> find(lookup, 0);\n<a name=\"l00164\"></a>00164     }\n<a name=\"l00165\"></a>00165 \n<a name=\"l00166\"></a>00166     <span class=\"comment\">// find a char in a string from an offset. Return TiXmlString::npos if not found</span>\n<a name=\"l00167\"></a>00167     size_type find (<span class=\"keywordtype\">char</span> tofind, size_type offset)<span class=\"keyword\"> const</span>\n<a name=\"l00168\"></a>00168 <span class=\"keyword\">    </span>{\n<a name=\"l00169\"></a>00169         <span class=\"keywordflow\">if</span> (offset &gt;= length()) <span class=\"keywordflow\">return</span> npos;\n<a name=\"l00170\"></a>00170 \n<a name=\"l00171\"></a>00171         <span class=\"keywordflow\">for</span> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* p = c_str() + offset; *p != <span class=\"charliteral\">&#39;\\0&#39;</span>; ++p)\n<a name=\"l00172\"></a>00172         {\n<a name=\"l00173\"></a>00173            <span class=\"keywordflow\">if</span> (*p == tofind) <span class=\"keywordflow\">return</span> <span class=\"keyword\">static_cast&lt;</span> size_type <span class=\"keyword\">&gt;</span>( p - c_str() );\n<a name=\"l00174\"></a>00174         }\n<a name=\"l00175\"></a>00175         <span class=\"keywordflow\">return</span> npos;\n<a name=\"l00176\"></a>00176     }\n<a name=\"l00177\"></a>00177 \n<a name=\"l00178\"></a>00178     <span class=\"keywordtype\">void</span> clear ()\n<a name=\"l00179\"></a>00179     {\n<a name=\"l00180\"></a>00180         <span class=\"comment\">//Lee:</span>\n<a name=\"l00181\"></a>00181         <span class=\"comment\">//The original was just too strange, though correct:</span>\n<a name=\"l00182\"></a>00182         <span class=\"comment\">//  TiXmlString().swap(*this);</span>\n<a name=\"l00183\"></a>00183         <span class=\"comment\">//Instead use the quit &amp; re-init:</span>\n<a name=\"l00184\"></a>00184         quit();\n<a name=\"l00185\"></a>00185         init(0,0);\n<a name=\"l00186\"></a>00186     }\n<a name=\"l00187\"></a>00187 \n<a name=\"l00188\"></a>00188     <span class=\"comment\">/*  Function to reserve a big amount of data when we know we&#39;ll need it. Be aware that this</span>\n<a name=\"l00189\"></a>00189 <span class=\"comment\">        function DOES NOT clear the content of the TiXmlString if any exists.</span>\n<a name=\"l00190\"></a>00190 <span class=\"comment\">    */</span>\n<a name=\"l00191\"></a>00191     <span class=\"keywordtype\">void</span> reserve (size_type cap);\n<a name=\"l00192\"></a>00192 \n<a name=\"l00193\"></a>00193     TiXmlString&amp; assign (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* str, size_type len);\n<a name=\"l00194\"></a>00194 \n<a name=\"l00195\"></a>00195     TiXmlString&amp; append (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* str, size_type len);\n<a name=\"l00196\"></a>00196 \n<a name=\"l00197\"></a>00197     <span class=\"keywordtype\">void</span> swap (TiXmlString&amp; other)\n<a name=\"l00198\"></a>00198     {\n<a name=\"l00199\"></a>00199         Rep* r = rep_;\n<a name=\"l00200\"></a>00200         rep_ = other.rep_;\n<a name=\"l00201\"></a>00201         other.rep_ = r;\n<a name=\"l00202\"></a>00202     }\n<a name=\"l00203\"></a>00203 \n<a name=\"l00204\"></a>00204   <span class=\"keyword\">private</span>:\n<a name=\"l00205\"></a>00205 \n<a name=\"l00206\"></a>00206     <span class=\"keywordtype\">void</span> init(size_type sz) { init(sz, sz); }\n<a name=\"l00207\"></a>00207     <span class=\"keywordtype\">void</span> set_size(size_type sz) { rep_-&gt;str[ rep_-&gt;size = sz ] = <span class=\"charliteral\">&#39;\\0&#39;</span>; }\n<a name=\"l00208\"></a>00208     <span class=\"keywordtype\">char</span>* start()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> rep_-&gt;str; }\n<a name=\"l00209\"></a>00209     <span class=\"keywordtype\">char</span>* finish()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> rep_-&gt;str + rep_-&gt;size; }\n<a name=\"l00210\"></a>00210 \n<a name=\"l00211\"></a>00211     <span class=\"keyword\">struct </span>Rep\n<a name=\"l00212\"></a>00212     {\n<a name=\"l00213\"></a>00213         size_type size, capacity;\n<a name=\"l00214\"></a>00214         <span class=\"keywordtype\">char</span> str[1];\n<a name=\"l00215\"></a>00215     };\n<a name=\"l00216\"></a>00216 \n<a name=\"l00217\"></a>00217     <span class=\"keywordtype\">void</span> init(size_type sz, size_type cap)\n<a name=\"l00218\"></a>00218     {\n<a name=\"l00219\"></a>00219         <span class=\"keywordflow\">if</span> (cap)\n<a name=\"l00220\"></a>00220         {\n<a name=\"l00221\"></a>00221             <span class=\"comment\">// Lee: the original form:</span>\n<a name=\"l00222\"></a>00222             <span class=\"comment\">//  rep_ = static_cast&lt;Rep*&gt;(operator new(sizeof(Rep) + cap));</span>\n<a name=\"l00223\"></a>00223             <span class=\"comment\">// doesn&#39;t work in some cases of new being overloaded. Switching</span>\n<a name=\"l00224\"></a>00224             <span class=\"comment\">// to the normal allocation, although use an &#39;int&#39; for systems</span>\n<a name=\"l00225\"></a>00225             <span class=\"comment\">// that are overly picky about structure alignment.</span>\n<a name=\"l00226\"></a>00226             <span class=\"keyword\">const</span> size_type bytesNeeded = <span class=\"keyword\">sizeof</span>(Rep) + cap;\n<a name=\"l00227\"></a>00227             <span class=\"keyword\">const</span> size_type intsNeeded = ( bytesNeeded + <span class=\"keyword\">sizeof</span>(int) - 1 ) / <span class=\"keyword\">sizeof</span>( int ); \n<a name=\"l00228\"></a>00228             rep_ = <span class=\"keyword\">reinterpret_cast&lt;</span>Rep*<span class=\"keyword\">&gt;</span>( <span class=\"keyword\">new</span> <span class=\"keywordtype\">int</span>[ intsNeeded ] );\n<a name=\"l00229\"></a>00229 \n<a name=\"l00230\"></a>00230             rep_-&gt;str[ rep_-&gt;size = sz ] = <span class=\"charliteral\">&#39;\\0&#39;</span>;\n<a name=\"l00231\"></a>00231             rep_-&gt;capacity = cap;\n<a name=\"l00232\"></a>00232         }\n<a name=\"l00233\"></a>00233         <span class=\"keywordflow\">else</span>\n<a name=\"l00234\"></a>00234         {\n<a name=\"l00235\"></a>00235             rep_ = &amp;nullrep_;\n<a name=\"l00236\"></a>00236         }\n<a name=\"l00237\"></a>00237     }\n<a name=\"l00238\"></a>00238 \n<a name=\"l00239\"></a>00239     <span class=\"keywordtype\">void</span> quit()\n<a name=\"l00240\"></a>00240     {\n<a name=\"l00241\"></a>00241         <span class=\"keywordflow\">if</span> (rep_ != &amp;nullrep_)\n<a name=\"l00242\"></a>00242         {\n<a name=\"l00243\"></a>00243             <span class=\"comment\">// The rep_ is really an array of ints. (see the allocator, above).</span>\n<a name=\"l00244\"></a>00244             <span class=\"comment\">// Cast it back before delete, so the compiler won&#39;t incorrectly call destructors.</span>\n<a name=\"l00245\"></a>00245             <span class=\"keyword\">delete</span> [] ( <span class=\"keyword\">reinterpret_cast&lt;</span><span class=\"keywordtype\">int</span>*<span class=\"keyword\">&gt;</span>( rep_ ) );\n<a name=\"l00246\"></a>00246         }\n<a name=\"l00247\"></a>00247     }\n<a name=\"l00248\"></a>00248 \n<a name=\"l00249\"></a>00249     Rep * rep_;\n<a name=\"l00250\"></a>00250     <span class=\"keyword\">static</span> Rep nullrep_;\n<a name=\"l00251\"></a>00251 \n<a name=\"l00252\"></a>00252 } ;\n<a name=\"l00253\"></a>00253 \n<a name=\"l00254\"></a>00254 \n<a name=\"l00255\"></a>00255 <span class=\"keyword\">inline</span> <span class=\"keywordtype\">bool</span> operator == (<span class=\"keyword\">const</span> TiXmlString &amp; a, <span class=\"keyword\">const</span> TiXmlString &amp; b)\n<a name=\"l00256\"></a>00256 {\n<a name=\"l00257\"></a>00257     <span class=\"keywordflow\">return</span>    ( a.length() == b.length() )              <span class=\"comment\">// optimization on some platforms</span>\n<a name=\"l00258\"></a>00258            &amp;&amp; ( strcmp(a.c_str(), b.c_str()) == 0 );    <span class=\"comment\">// actual compare</span>\n<a name=\"l00259\"></a>00259 }\n<a name=\"l00260\"></a>00260 <span class=\"keyword\">inline</span> <span class=\"keywordtype\">bool</span> operator &lt; (<span class=\"keyword\">const</span> TiXmlString &amp; a, <span class=\"keyword\">const</span> TiXmlString &amp; b)\n<a name=\"l00261\"></a>00261 {\n<a name=\"l00262\"></a>00262     <span class=\"keywordflow\">return</span> strcmp(a.c_str(), b.c_str()) &lt; 0;\n<a name=\"l00263\"></a>00263 }\n<a name=\"l00264\"></a>00264 \n<a name=\"l00265\"></a>00265 <span class=\"keyword\">inline</span> <span class=\"keywordtype\">bool</span> operator != (<span class=\"keyword\">const</span> TiXmlString &amp; a, <span class=\"keyword\">const</span> TiXmlString &amp; b) { <span class=\"keywordflow\">return</span> !(a == b); }\n<a name=\"l00266\"></a>00266 <span class=\"keyword\">inline</span> <span class=\"keywordtype\">bool</span> operator &gt;  (<span class=\"keyword\">const</span> TiXmlString &amp; a, <span class=\"keyword\">const</span> TiXmlString &amp; b) { <span class=\"keywordflow\">return</span> b &lt; a; }\n<a name=\"l00267\"></a>00267 <span class=\"keyword\">inline</span> <span class=\"keywordtype\">bool</span> operator &lt;= (<span class=\"keyword\">const</span> TiXmlString &amp; a, <span class=\"keyword\">const</span> TiXmlString &amp; b) { <span class=\"keywordflow\">return</span> !(b &lt; a); }\n<a name=\"l00268\"></a>00268 <span class=\"keyword\">inline</span> <span class=\"keywordtype\">bool</span> operator &gt;= (<span class=\"keyword\">const</span> TiXmlString &amp; a, <span class=\"keyword\">const</span> TiXmlString &amp; b) { <span class=\"keywordflow\">return</span> !(a &lt; b); }\n<a name=\"l00269\"></a>00269 \n<a name=\"l00270\"></a>00270 <span class=\"keyword\">inline</span> <span class=\"keywordtype\">bool</span> operator == (<span class=\"keyword\">const</span> TiXmlString &amp; a, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* b) { <span class=\"keywordflow\">return</span> strcmp(a.c_str(), b) == 0; }\n<a name=\"l00271\"></a>00271 <span class=\"keyword\">inline</span> <span class=\"keywordtype\">bool</span> operator == (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* a, <span class=\"keyword\">const</span> TiXmlString &amp; b) { <span class=\"keywordflow\">return</span> b == a; }\n<a name=\"l00272\"></a>00272 <span class=\"keyword\">inline</span> <span class=\"keywordtype\">bool</span> operator != (<span class=\"keyword\">const</span> TiXmlString &amp; a, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* b) { <span class=\"keywordflow\">return</span> !(a == b); }\n<a name=\"l00273\"></a>00273 <span class=\"keyword\">inline</span> <span class=\"keywordtype\">bool</span> operator != (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* a, <span class=\"keyword\">const</span> TiXmlString &amp; b) { <span class=\"keywordflow\">return</span> !(b == a); }\n<a name=\"l00274\"></a>00274 \n<a name=\"l00275\"></a>00275 TiXmlString operator + (<span class=\"keyword\">const</span> TiXmlString &amp; a, <span class=\"keyword\">const</span> TiXmlString &amp; b);\n<a name=\"l00276\"></a>00276 TiXmlString operator + (<span class=\"keyword\">const</span> TiXmlString &amp; a, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* b);\n<a name=\"l00277\"></a>00277 TiXmlString operator + (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* a, <span class=\"keyword\">const</span> TiXmlString &amp; b);\n<a name=\"l00278\"></a>00278 \n<a name=\"l00279\"></a>00279 \n<a name=\"l00280\"></a>00280 <span class=\"comment\">/*</span>\n<a name=\"l00281\"></a>00281 <span class=\"comment\">   TiXmlOutStream is an emulation of std::ostream. It is based on TiXmlString.</span>\n<a name=\"l00282\"></a>00282 <span class=\"comment\">   Only the operators that we need for TinyXML have been developped.</span>\n<a name=\"l00283\"></a>00283 <span class=\"comment\">*/</span>\n<a name=\"l00284\"></a>00284 <span class=\"keyword\">class </span>TiXmlOutStream : <span class=\"keyword\">public</span> TiXmlString\n<a name=\"l00285\"></a>00285 {\n<a name=\"l00286\"></a>00286 <span class=\"keyword\">public</span> :\n<a name=\"l00287\"></a>00287 \n<a name=\"l00288\"></a>00288     <span class=\"comment\">// TiXmlOutStream &lt;&lt; operator.</span>\n<a name=\"l00289\"></a>00289     TiXmlOutStream &amp; operator &lt;&lt; (<span class=\"keyword\">const</span> TiXmlString &amp; in)\n<a name=\"l00290\"></a>00290     {\n<a name=\"l00291\"></a>00291         *<span class=\"keyword\">this</span> += in;\n<a name=\"l00292\"></a>00292         <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;\n<a name=\"l00293\"></a>00293     }\n<a name=\"l00294\"></a>00294 \n<a name=\"l00295\"></a>00295     <span class=\"comment\">// TiXmlOutStream &lt;&lt; operator.</span>\n<a name=\"l00296\"></a>00296     TiXmlOutStream &amp; operator &lt;&lt; (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * in)\n<a name=\"l00297\"></a>00297     {\n<a name=\"l00298\"></a>00298         *<span class=\"keyword\">this</span> += in;\n<a name=\"l00299\"></a>00299         <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;\n<a name=\"l00300\"></a>00300     }\n<a name=\"l00301\"></a>00301 \n<a name=\"l00302\"></a>00302 } ;\n<a name=\"l00303\"></a>00303 \n<a name=\"l00304\"></a>00304 <span class=\"preprocessor\">#endif  // TIXML_STRING_INCLUDED</span>\n<a name=\"l00305\"></a>00305 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#endif  // TIXML_USE_STL</span>\n</pre></div></div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/tinyxml_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: tinyxml.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"files.html\"><span>File&nbsp;List</span></a></li>\n    </ul>\n  </div>\n<h1>tinyxml.h</h1><div class=\"fragment\"><pre class=\"fragment\"><a name=\"l00001\"></a>00001 <span class=\"comment\">/*</span>\n<a name=\"l00002\"></a>00002 <span class=\"comment\">www.sourceforge.net/projects/tinyxml</span>\n<a name=\"l00003\"></a>00003 <span class=\"comment\">Original code by Lee Thomason (www.grinninglizard.com)</span>\n<a name=\"l00004\"></a>00004 <span class=\"comment\"></span>\n<a name=\"l00005\"></a>00005 <span class=\"comment\">This software is provided &#39;as-is&#39;, without any express or implied</span>\n<a name=\"l00006\"></a>00006 <span class=\"comment\">warranty. In no event will the authors be held liable for any</span>\n<a name=\"l00007\"></a>00007 <span class=\"comment\">damages arising from the use of this software.</span>\n<a name=\"l00008\"></a>00008 <span class=\"comment\"></span>\n<a name=\"l00009\"></a>00009 <span class=\"comment\">Permission is granted to anyone to use this software for any</span>\n<a name=\"l00010\"></a>00010 <span class=\"comment\">purpose, including commercial applications, and to alter it and</span>\n<a name=\"l00011\"></a>00011 <span class=\"comment\">redistribute it freely, subject to the following restrictions:</span>\n<a name=\"l00012\"></a>00012 <span class=\"comment\"></span>\n<a name=\"l00013\"></a>00013 <span class=\"comment\">1. The origin of this software must not be misrepresented; you must</span>\n<a name=\"l00014\"></a>00014 <span class=\"comment\">not claim that you wrote the original software. If you use this</span>\n<a name=\"l00015\"></a>00015 <span class=\"comment\">software in a product, an acknowledgment in the product documentation</span>\n<a name=\"l00016\"></a>00016 <span class=\"comment\">would be appreciated but is not required.</span>\n<a name=\"l00017\"></a>00017 <span class=\"comment\"></span>\n<a name=\"l00018\"></a>00018 <span class=\"comment\">2. Altered source versions must be plainly marked as such, and</span>\n<a name=\"l00019\"></a>00019 <span class=\"comment\">must not be misrepresented as being the original software.</span>\n<a name=\"l00020\"></a>00020 <span class=\"comment\"></span>\n<a name=\"l00021\"></a>00021 <span class=\"comment\">3. This notice may not be removed or altered from any source</span>\n<a name=\"l00022\"></a>00022 <span class=\"comment\">distribution.</span>\n<a name=\"l00023\"></a>00023 <span class=\"comment\">*/</span>\n<a name=\"l00024\"></a>00024 \n<a name=\"l00025\"></a>00025 \n<a name=\"l00026\"></a>00026 <span class=\"preprocessor\">#ifndef TINYXML_INCLUDED</span>\n<a name=\"l00027\"></a>00027 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#define TINYXML_INCLUDED</span>\n<a name=\"l00028\"></a>00028 <span class=\"preprocessor\"></span>\n<a name=\"l00029\"></a>00029 <span class=\"preprocessor\">#ifdef _MSC_VER</span>\n<a name=\"l00030\"></a>00030 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#pragma warning( push )</span>\n<a name=\"l00031\"></a>00031 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#pragma warning( disable : 4530 )</span>\n<a name=\"l00032\"></a>00032 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#pragma warning( disable : 4786 )</span>\n<a name=\"l00033\"></a>00033 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#endif</span>\n<a name=\"l00034\"></a>00034 <span class=\"preprocessor\"></span>\n<a name=\"l00035\"></a>00035 <span class=\"preprocessor\">#include &lt;ctype.h&gt;</span>\n<a name=\"l00036\"></a>00036 <span class=\"preprocessor\">#include &lt;stdio.h&gt;</span>\n<a name=\"l00037\"></a>00037 <span class=\"preprocessor\">#include &lt;stdlib.h&gt;</span>\n<a name=\"l00038\"></a>00038 <span class=\"preprocessor\">#include &lt;string.h&gt;</span>\n<a name=\"l00039\"></a>00039 <span class=\"preprocessor\">#include &lt;assert.h&gt;</span>\n<a name=\"l00040\"></a>00040 \n<a name=\"l00041\"></a>00041 <span class=\"comment\">// Help out windows:</span>\n<a name=\"l00042\"></a>00042 <span class=\"preprocessor\">#if defined( _DEBUG ) &amp;&amp; !defined( DEBUG )</span>\n<a name=\"l00043\"></a>00043 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#define DEBUG</span>\n<a name=\"l00044\"></a>00044 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#endif</span>\n<a name=\"l00045\"></a>00045 <span class=\"preprocessor\"></span>\n<a name=\"l00046\"></a>00046 <span class=\"preprocessor\">#ifdef TIXML_USE_STL</span>\n<a name=\"l00047\"></a>00047 <span class=\"preprocessor\"></span><span class=\"preprocessor\">    #include &lt;string&gt;</span>\n<a name=\"l00048\"></a>00048 <span class=\"preprocessor\">    #include &lt;iostream&gt;</span>\n<a name=\"l00049\"></a>00049 <span class=\"preprocessor\">    #include &lt;sstream&gt;</span>\n<a name=\"l00050\"></a>00050 <span class=\"preprocessor\">    #define TIXML_STRING        std::string</span>\n<a name=\"l00051\"></a>00051 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#else</span>\n<a name=\"l00052\"></a>00052 <span class=\"preprocessor\"></span><span class=\"preprocessor\">    #include &quot;tinystr.h&quot;</span>\n<a name=\"l00053\"></a>00053 <span class=\"preprocessor\">    #define TIXML_STRING        TiXmlString</span>\n<a name=\"l00054\"></a>00054 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#endif</span>\n<a name=\"l00055\"></a>00055 <span class=\"preprocessor\"></span>\n<a name=\"l00056\"></a>00056 <span class=\"comment\">// Deprecated library function hell. Compilers want to use the</span>\n<a name=\"l00057\"></a>00057 <span class=\"comment\">// new safe versions. This probably doesn&#39;t fully address the problem,</span>\n<a name=\"l00058\"></a>00058 <span class=\"comment\">// but it gets closer. There are too many compilers for me to fully</span>\n<a name=\"l00059\"></a>00059 <span class=\"comment\">// test. If you get compilation troubles, undefine TIXML_SAFE</span>\n<a name=\"l00060\"></a>00060 <span class=\"preprocessor\">#define TIXML_SAFE</span>\n<a name=\"l00061\"></a>00061 <span class=\"preprocessor\"></span>\n<a name=\"l00062\"></a>00062 <span class=\"preprocessor\">#ifdef TIXML_SAFE</span>\n<a name=\"l00063\"></a>00063 <span class=\"preprocessor\"></span><span class=\"preprocessor\">    #if defined(_MSC_VER) &amp;&amp; (_MSC_VER &gt;= 1400 )</span>\n<a name=\"l00064\"></a>00064 <span class=\"preprocessor\"></span>        <span class=\"comment\">// Microsoft visual studio, version 2005 and higher.</span>\n<a name=\"l00065\"></a>00065 <span class=\"preprocessor\">        #define TIXML_SNPRINTF _snprintf_s</span>\n<a name=\"l00066\"></a>00066 <span class=\"preprocessor\"></span><span class=\"preprocessor\">        #define TIXML_SSCANF   sscanf_s</span>\n<a name=\"l00067\"></a>00067 <span class=\"preprocessor\"></span><span class=\"preprocessor\">    #elif defined(_MSC_VER) &amp;&amp; (_MSC_VER &gt;= 1200 )</span>\n<a name=\"l00068\"></a>00068 <span class=\"preprocessor\"></span>        <span class=\"comment\">// Microsoft visual studio, version 6 and higher.</span>\n<a name=\"l00069\"></a>00069         <span class=\"comment\">//#pragma message( &quot;Using _sn* functions.&quot; )</span>\n<a name=\"l00070\"></a>00070 <span class=\"preprocessor\">        #define TIXML_SNPRINTF _snprintf</span>\n<a name=\"l00071\"></a>00071 <span class=\"preprocessor\"></span><span class=\"preprocessor\">        #define TIXML_SSCANF   sscanf</span>\n<a name=\"l00072\"></a>00072 <span class=\"preprocessor\"></span><span class=\"preprocessor\">    #elif defined(__GNUC__) &amp;&amp; (__GNUC__ &gt;= 3 )</span>\n<a name=\"l00073\"></a>00073 <span class=\"preprocessor\"></span>        <span class=\"comment\">// GCC version 3 and higher.s</span>\n<a name=\"l00074\"></a>00074         <span class=\"comment\">//#warning( &quot;Using sn* functions.&quot; )</span>\n<a name=\"l00075\"></a>00075 <span class=\"preprocessor\">        #define TIXML_SNPRINTF snprintf</span>\n<a name=\"l00076\"></a>00076 <span class=\"preprocessor\"></span><span class=\"preprocessor\">        #define TIXML_SSCANF   sscanf</span>\n<a name=\"l00077\"></a>00077 <span class=\"preprocessor\"></span><span class=\"preprocessor\">    #else</span>\n<a name=\"l00078\"></a>00078 <span class=\"preprocessor\"></span><span class=\"preprocessor\">        #define TIXML_SNPRINTF snprintf</span>\n<a name=\"l00079\"></a>00079 <span class=\"preprocessor\"></span><span class=\"preprocessor\">        #define TIXML_SSCANF   sscanf</span>\n<a name=\"l00080\"></a>00080 <span class=\"preprocessor\"></span><span class=\"preprocessor\">    #endif</span>\n<a name=\"l00081\"></a>00081 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#endif  </span>\n<a name=\"l00082\"></a>00082 <span class=\"preprocessor\"></span>\n<a name=\"l00083\"></a>00083 <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a>;\n<a name=\"l00084\"></a>00084 <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>;\n<a name=\"l00085\"></a>00085 <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlComment.html\" title=\"An XML comment.\">TiXmlComment</a>;\n<a name=\"l00086\"></a>00086 <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlUnknown.html\" title=\"Any tag that tinyXml doesn&amp;#39;t recognize is saved as an unknown.\">TiXmlUnknown</a>;\n<a name=\"l00087\"></a>00087 <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>;\n<a name=\"l00088\"></a>00088 <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlText.html\" title=\"XML text.\">TiXmlText</a>;\n<a name=\"l00089\"></a>00089 <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlDeclaration.html\" title=\"In correct XML the declaration is the first entry in the file.\">TiXmlDeclaration</a>;\n<a name=\"l00090\"></a>00090 <span class=\"keyword\">class </span>TiXmlParsingData;\n<a name=\"l00091\"></a>00091 \n<a name=\"l00092\"></a>00092 <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> TIXML_MAJOR_VERSION = 2;\n<a name=\"l00093\"></a>00093 <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> TIXML_MINOR_VERSION = 6;\n<a name=\"l00094\"></a>00094 <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> TIXML_PATCH_VERSION = 2;\n<a name=\"l00095\"></a>00095 \n<a name=\"l00096\"></a>00096 <span class=\"comment\">/*  Internal structure for tracking location of items </span>\n<a name=\"l00097\"></a>00097 <span class=\"comment\">    in the XML file.</span>\n<a name=\"l00098\"></a>00098 <span class=\"comment\">*/</span>\n<a name=\"l00099\"></a>00099 <span class=\"keyword\">struct </span>TiXmlCursor\n<a name=\"l00100\"></a>00100 {\n<a name=\"l00101\"></a>00101     TiXmlCursor()       { Clear(); }\n<a name=\"l00102\"></a>00102     <span class=\"keywordtype\">void</span> Clear()        { row = col = -1; }\n<a name=\"l00103\"></a>00103 \n<a name=\"l00104\"></a>00104     <span class=\"keywordtype\">int</span> row;    <span class=\"comment\">// 0 based.</span>\n<a name=\"l00105\"></a>00105     <span class=\"keywordtype\">int</span> col;    <span class=\"comment\">// 0 based.</span>\n<a name=\"l00106\"></a>00106 };\n<a name=\"l00107\"></a>00107 \n<a name=\"l00108\"></a>00108 \n<a name=\"l00128\"></a><a class=\"code\" href=\"classTiXmlVisitor.html\">00128</a> <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlVisitor.html\" title=\"Implements the interface to the &amp;quot;Visitor pattern&amp;quot; (see the Accept() method...\">TiXmlVisitor</a>\n<a name=\"l00129\"></a>00129 {\n<a name=\"l00130\"></a>00130 <span class=\"keyword\">public</span>:\n<a name=\"l00131\"></a>00131     <span class=\"keyword\">virtual</span> ~<a class=\"code\" href=\"classTiXmlVisitor.html\" title=\"Implements the interface to the &amp;quot;Visitor pattern&amp;quot; (see the Accept() method...\">TiXmlVisitor</a>() {}\n<a name=\"l00132\"></a>00132 \n<a name=\"l00134\"></a><a class=\"code\" href=\"classTiXmlVisitor.html#a07baecb52dd7d8716ae2a48ad0956ee0\">00134</a>     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlVisitor.html#a07baecb52dd7d8716ae2a48ad0956ee0\" title=\"Visit a document.\">VisitEnter</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a>&amp; <span class=\"comment\">/*doc*/</span> )         { <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>; }\n<a name=\"l00136\"></a><a class=\"code\" href=\"classTiXmlVisitor.html#aa0ade4f27087447e93974e975c3246ad\">00136</a>     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlVisitor.html#aa0ade4f27087447e93974e975c3246ad\" title=\"Visit a document.\">VisitExit</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a>&amp; <span class=\"comment\">/*doc*/</span> )          { <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>; }\n<a name=\"l00137\"></a>00137 \n<a name=\"l00139\"></a><a class=\"code\" href=\"classTiXmlVisitor.html#af6c6178ffa517bbdba95d70490875fff\">00139</a>     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlVisitor.html#af6c6178ffa517bbdba95d70490875fff\" title=\"Visit an element.\">VisitEnter</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>&amp; <span class=\"comment\">/*element*/</span>, <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* <span class=\"comment\">/*firstAttribute*/</span> )    { <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>; }\n<a name=\"l00141\"></a><a class=\"code\" href=\"classTiXmlVisitor.html#aec2b1f8116226d52f3a1b95dafd3a32c\">00141</a>     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlVisitor.html#aec2b1f8116226d52f3a1b95dafd3a32c\" title=\"Visit an element.\">VisitExit</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>&amp; <span class=\"comment\">/*element*/</span> )       { <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>; }\n<a name=\"l00142\"></a>00142 \n<a name=\"l00144\"></a><a class=\"code\" href=\"classTiXmlVisitor.html#afad71c71ce6473fb9b4b64cd92de4a19\">00144</a>     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlVisitor.html#afad71c71ce6473fb9b4b64cd92de4a19\" title=\"Visit a declaration.\">Visit</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlDeclaration.html\" title=\"In correct XML the declaration is the first entry in the file.\">TiXmlDeclaration</a>&amp; <span class=\"comment\">/*declaration*/</span> )   { <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>; }\n<a name=\"l00146\"></a><a class=\"code\" href=\"classTiXmlVisitor.html#a399b8ebca5cd14664974a32d2ce029e5\">00146</a>     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlVisitor.html#a399b8ebca5cd14664974a32d2ce029e5\" title=\"Visit a text node.\">Visit</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlText.html\" title=\"XML text.\">TiXmlText</a>&amp; <span class=\"comment\">/*text*/</span> )                 { <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>; }\n<a name=\"l00148\"></a><a class=\"code\" href=\"classTiXmlVisitor.html#a53a60e7a528627b31af3161972cc7fa2\">00148</a>     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlVisitor.html#a53a60e7a528627b31af3161972cc7fa2\" title=\"Visit a comment node.\">Visit</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlComment.html\" title=\"An XML comment.\">TiXmlComment</a>&amp; <span class=\"comment\">/*comment*/</span> )           { <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>; }\n<a name=\"l00150\"></a><a class=\"code\" href=\"classTiXmlVisitor.html#a7e284d607d275c51dac1adb58159ce28\">00150</a>     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlVisitor.html#a7e284d607d275c51dac1adb58159ce28\" title=\"Visit an unknown node.\">Visit</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlUnknown.html\" title=\"Any tag that tinyXml doesn&amp;#39;t recognize is saved as an unknown.\">TiXmlUnknown</a>&amp; <span class=\"comment\">/*unknown*/</span> )           { <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>; }\n<a name=\"l00151\"></a>00151 };\n<a name=\"l00152\"></a>00152 \n<a name=\"l00153\"></a>00153 <span class=\"comment\">// Only used by Attribute::Query functions</span>\n<a name=\"l00154\"></a>00154 <span class=\"keyword\">enum</span> \n<a name=\"l00155\"></a>00155 { \n<a name=\"l00156\"></a>00156     TIXML_SUCCESS,\n<a name=\"l00157\"></a>00157     TIXML_NO_ATTRIBUTE,\n<a name=\"l00158\"></a>00158     TIXML_WRONG_TYPE\n<a name=\"l00159\"></a>00159 };\n<a name=\"l00160\"></a>00160 \n<a name=\"l00161\"></a>00161 \n<a name=\"l00162\"></a>00162 <span class=\"comment\">// Used by the parsing routines.</span>\n<a name=\"l00163\"></a>00163 <span class=\"keyword\">enum</span> TiXmlEncoding\n<a name=\"l00164\"></a>00164 {\n<a name=\"l00165\"></a>00165     TIXML_ENCODING_UNKNOWN,\n<a name=\"l00166\"></a>00166     TIXML_ENCODING_UTF8,\n<a name=\"l00167\"></a>00167     TIXML_ENCODING_LEGACY\n<a name=\"l00168\"></a>00168 };\n<a name=\"l00169\"></a>00169 \n<a name=\"l00170\"></a>00170 <span class=\"keyword\">const</span> TiXmlEncoding TIXML_DEFAULT_ENCODING = TIXML_ENCODING_UNKNOWN;\n<a name=\"l00171\"></a>00171 \n<a name=\"l00194\"></a><a class=\"code\" href=\"classTiXmlBase.html\">00194</a> <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlBase.html\" title=\"TiXmlBase is a base class for every class in TinyXml.\">TiXmlBase</a>\n<a name=\"l00195\"></a>00195 {\n<a name=\"l00196\"></a>00196     <span class=\"keyword\">friend</span> <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>;\n<a name=\"l00197\"></a>00197     <span class=\"keyword\">friend</span> <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>;\n<a name=\"l00198\"></a>00198     <span class=\"keyword\">friend</span> <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a>;\n<a name=\"l00199\"></a>00199 \n<a name=\"l00200\"></a>00200 <span class=\"keyword\">public</span>:\n<a name=\"l00201\"></a>00201     <a class=\"code\" href=\"classTiXmlBase.html\" title=\"TiXmlBase is a base class for every class in TinyXml.\">TiXmlBase</a>() :   <a class=\"code\" href=\"classTiXmlBase.html#ab242c01590191f644569fa89a080d97c\" title=\"Field containing a generic user pointer.\">userData</a>(0)     {}\n<a name=\"l00202\"></a>00202     <span class=\"keyword\">virtual</span> ~<a class=\"code\" href=\"classTiXmlBase.html\" title=\"TiXmlBase is a base class for every class in TinyXml.\">TiXmlBase</a>()            {}\n<a name=\"l00203\"></a>00203 \n<a name=\"l00213\"></a>00213     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlBase.html#a0de56b3f2ef14c65091a3b916437b512\" title=\"All TinyXml classes can print themselves to a filestream or the string class (TiXmlString...\">Print</a>( FILE* cfile, <span class=\"keywordtype\">int</span> depth ) <span class=\"keyword\">const</span> = 0;\n<a name=\"l00214\"></a>00214 \n<a name=\"l00221\"></a><a class=\"code\" href=\"classTiXmlBase.html#a0f799ec645bfb8d8a969e83478f379c1\">00221</a>     <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlBase.html#a0f799ec645bfb8d8a969e83478f379c1\" title=\"The world does not agree on whether white space should be kept or not.\">SetCondenseWhiteSpace</a>( <span class=\"keywordtype\">bool</span> condense )      { condenseWhiteSpace = condense; }\n<a name=\"l00222\"></a>00222 \n<a name=\"l00224\"></a><a class=\"code\" href=\"classTiXmlBase.html#ad4b1472531c647a25b1840a87ae42438\">00224</a>     <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlBase.html#ad4b1472531c647a25b1840a87ae42438\" title=\"Return the current white space setting.\">IsWhiteSpaceCondensed</a>()                     { <span class=\"keywordflow\">return</span> condenseWhiteSpace; }\n<a name=\"l00225\"></a>00225 \n<a name=\"l00244\"></a><a class=\"code\" href=\"classTiXmlBase.html#a024bceb070188df92c2a8d8852dd0853\">00244</a>     <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classTiXmlBase.html#a024bceb070188df92c2a8d8852dd0853\" title=\"Return the position, in the original source file, of this node or attribute.\">Row</a>()<span class=\"keyword\"> const         </span>{ <span class=\"keywordflow\">return</span> location.row + 1; }\n<a name=\"l00245\"></a><a class=\"code\" href=\"classTiXmlBase.html#ab54bfb9b70fe6dd276e7b279cab7f003\">00245</a>     <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classTiXmlBase.html#ab54bfb9b70fe6dd276e7b279cab7f003\" title=\"See Row().\">Column</a>()<span class=\"keyword\"> const      </span>{ <span class=\"keywordflow\">return</span> location.col + 1; }    \n<a name=\"l00246\"></a>00246 \n<a name=\"l00247\"></a><a class=\"code\" href=\"classTiXmlBase.html#ac6b3e0f790930d4970ec30764e937b5d\">00247</a>     <span class=\"keywordtype\">void</span>  <a class=\"code\" href=\"classTiXmlBase.html#ac6b3e0f790930d4970ec30764e937b5d\" title=\"Set a pointer to arbitrary user data.\">SetUserData</a>( <span class=\"keywordtype\">void</span>* user )         { <a class=\"code\" href=\"classTiXmlBase.html#ab242c01590191f644569fa89a080d97c\" title=\"Field containing a generic user pointer.\">userData</a> = user; }    \n<a name=\"l00248\"></a><a class=\"code\" href=\"classTiXmlBase.html#a6559a530ca6763fc301a14d77ed28c17\">00248</a>     <span class=\"keywordtype\">void</span>* <a class=\"code\" href=\"classTiXmlBase.html#a6559a530ca6763fc301a14d77ed28c17\" title=\"Get a pointer to arbitrary user data.\">GetUserData</a>()                     { <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlBase.html#ab242c01590191f644569fa89a080d97c\" title=\"Field containing a generic user pointer.\">userData</a>; }    \n<a name=\"l00249\"></a><a class=\"code\" href=\"classTiXmlBase.html#ad0120210e4680ef2088601753ce0ede4\">00249</a>     <span class=\"keyword\">const</span> <span class=\"keywordtype\">void</span>* <a class=\"code\" href=\"classTiXmlBase.html#ad0120210e4680ef2088601753ce0ede4\" title=\"Get a pointer to arbitrary user data.\">GetUserData</a>()<span class=\"keyword\"> const         </span>{ <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlBase.html#ab242c01590191f644569fa89a080d97c\" title=\"Field containing a generic user pointer.\">userData</a>; }    \n<a name=\"l00250\"></a>00250 \n<a name=\"l00251\"></a>00251     <span class=\"comment\">// Table that returs, for a given lead byte, the total number of bytes</span>\n<a name=\"l00252\"></a>00252     <span class=\"comment\">// in the UTF-8 sequence.</span>\n<a name=\"l00253\"></a>00253     <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> utf8ByteTable[256];\n<a name=\"l00254\"></a>00254 \n<a name=\"l00255\"></a>00255     <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"classTiXmlDocument.html#a17ebabe36926ef398e78dec0d0ad0378\" title=\"Parse the given null terminated block of xml data.\">Parse</a>(  <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* p, \n<a name=\"l00256\"></a>00256                                 TiXmlParsingData* data, \n<a name=\"l00257\"></a>00257                                 TiXmlEncoding encoding <span class=\"comment\">/*= TIXML_ENCODING_UNKNOWN */</span> ) = 0;\n<a name=\"l00258\"></a>00258 \n<a name=\"l00262\"></a>00262     <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlBase.html#a6bd8c315c1acb09e34107b8736505948\" title=\"Expands entities in a string.\">EncodeString</a>( <span class=\"keyword\">const</span> TIXML_STRING&amp; str, TIXML_STRING* out );\n<a name=\"l00263\"></a>00263 \n<a name=\"l00264\"></a>00264     <span class=\"keyword\">enum</span>\n<a name=\"l00265\"></a>00265     {\n<a name=\"l00266\"></a>00266         TIXML_NO_ERROR = 0,\n<a name=\"l00267\"></a>00267         TIXML_ERROR,\n<a name=\"l00268\"></a>00268         TIXML_ERROR_OPENING_FILE,\n<a name=\"l00269\"></a>00269         TIXML_ERROR_PARSING_ELEMENT,\n<a name=\"l00270\"></a>00270         TIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME,\n<a name=\"l00271\"></a>00271         TIXML_ERROR_READING_ELEMENT_VALUE,\n<a name=\"l00272\"></a>00272         TIXML_ERROR_READING_ATTRIBUTES,\n<a name=\"l00273\"></a>00273         TIXML_ERROR_PARSING_EMPTY,\n<a name=\"l00274\"></a>00274         TIXML_ERROR_READING_END_TAG,\n<a name=\"l00275\"></a>00275         TIXML_ERROR_PARSING_UNKNOWN,\n<a name=\"l00276\"></a>00276         TIXML_ERROR_PARSING_COMMENT,\n<a name=\"l00277\"></a>00277         TIXML_ERROR_PARSING_DECLARATION,\n<a name=\"l00278\"></a>00278         TIXML_ERROR_DOCUMENT_EMPTY,\n<a name=\"l00279\"></a>00279         TIXML_ERROR_EMBEDDED_NULL,\n<a name=\"l00280\"></a>00280         TIXML_ERROR_PARSING_CDATA,\n<a name=\"l00281\"></a>00281         TIXML_ERROR_DOCUMENT_TOP_ONLY,\n<a name=\"l00282\"></a>00282 \n<a name=\"l00283\"></a>00283         TIXML_ERROR_STRING_COUNT\n<a name=\"l00284\"></a>00284     };\n<a name=\"l00285\"></a>00285 \n<a name=\"l00286\"></a>00286 <span class=\"keyword\">protected</span>:\n<a name=\"l00287\"></a>00287 \n<a name=\"l00288\"></a>00288     <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* SkipWhiteSpace( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>*, TiXmlEncoding encoding );\n<a name=\"l00289\"></a>00289 \n<a name=\"l00290\"></a>00290     <span class=\"keyword\">inline</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> IsWhiteSpace( <span class=\"keywordtype\">char</span> c )       \n<a name=\"l00291\"></a>00291     { \n<a name=\"l00292\"></a>00292         <span class=\"keywordflow\">return</span> ( isspace( (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">char</span>) c ) || c == <span class=\"charliteral\">&#39;\\n&#39;</span> || c == <span class=\"charliteral\">&#39;\\r&#39;</span> ); \n<a name=\"l00293\"></a>00293     }\n<a name=\"l00294\"></a>00294     <span class=\"keyword\">inline</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> IsWhiteSpace( <span class=\"keywordtype\">int</span> c )\n<a name=\"l00295\"></a>00295     {\n<a name=\"l00296\"></a>00296         <span class=\"keywordflow\">if</span> ( c &lt; 256 )\n<a name=\"l00297\"></a>00297             <span class=\"keywordflow\">return</span> IsWhiteSpace( (<span class=\"keywordtype\">char</span>) c );\n<a name=\"l00298\"></a>00298         <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;   <span class=\"comment\">// Again, only truly correct for English/Latin...but usually works.</span>\n<a name=\"l00299\"></a>00299     }\n<a name=\"l00300\"></a>00300 \n<a name=\"l00301\"></a>00301 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l00302\"></a>00302 <span class=\"preprocessor\"></span>    <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> StreamWhiteSpace( std::istream * in, TIXML_STRING * tag );\n<a name=\"l00303\"></a>00303     <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> StreamTo( std::istream * in, <span class=\"keywordtype\">int</span> character, TIXML_STRING * tag );\n<a name=\"l00304\"></a>00304 <span class=\"preprocessor\">    #endif</span>\n<a name=\"l00305\"></a>00305 <span class=\"preprocessor\"></span>\n<a name=\"l00306\"></a>00306     <span class=\"comment\">/*  Reads an XML name into the string provided. Returns</span>\n<a name=\"l00307\"></a>00307 <span class=\"comment\">        a pointer just past the last character of the name,</span>\n<a name=\"l00308\"></a>00308 <span class=\"comment\">        or 0 if the function has an error.</span>\n<a name=\"l00309\"></a>00309 <span class=\"comment\">    */</span>\n<a name=\"l00310\"></a>00310     <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* ReadName( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* p, TIXML_STRING* name, TiXmlEncoding encoding );\n<a name=\"l00311\"></a>00311 \n<a name=\"l00312\"></a>00312     <span class=\"comment\">/*  Reads text. Returns a pointer past the given end tag.</span>\n<a name=\"l00313\"></a>00313 <span class=\"comment\">        Wickedly complex options, but it keeps the (sensitive) code in one place.</span>\n<a name=\"l00314\"></a>00314 <span class=\"comment\">    */</span>\n<a name=\"l00315\"></a>00315     <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* ReadText(    <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* in,             <span class=\"comment\">// where to start</span>\n<a name=\"l00316\"></a>00316                                     TIXML_STRING* text,         <span class=\"comment\">// the string read</span>\n<a name=\"l00317\"></a>00317                                     <span class=\"keywordtype\">bool</span> ignoreWhiteSpace,      <span class=\"comment\">// whether to keep the white space</span>\n<a name=\"l00318\"></a>00318                                     <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* endTag,         <span class=\"comment\">// what ends this text</span>\n<a name=\"l00319\"></a>00319                                     <span class=\"keywordtype\">bool</span> ignoreCase,            <span class=\"comment\">// whether to ignore case in the end tag</span>\n<a name=\"l00320\"></a>00320                                     TiXmlEncoding encoding );   <span class=\"comment\">// the current encoding</span>\n<a name=\"l00321\"></a>00321 \n<a name=\"l00322\"></a>00322     <span class=\"comment\">// If an entity has been found, transform it into a character.</span>\n<a name=\"l00323\"></a>00323     <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* GetEntity( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* in, <span class=\"keywordtype\">char</span>* value, <span class=\"keywordtype\">int</span>* length, TiXmlEncoding encoding );\n<a name=\"l00324\"></a>00324 \n<a name=\"l00325\"></a>00325     <span class=\"comment\">// Get a character, while interpreting entities.</span>\n<a name=\"l00326\"></a>00326     <span class=\"comment\">// The length can be from 0 to 4 bytes.</span>\n<a name=\"l00327\"></a>00327     <span class=\"keyword\">inline</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* GetChar( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* p, <span class=\"keywordtype\">char</span>* _value, <span class=\"keywordtype\">int</span>* length, TiXmlEncoding encoding )\n<a name=\"l00328\"></a>00328     {\n<a name=\"l00329\"></a>00329         assert( p );\n<a name=\"l00330\"></a>00330         <span class=\"keywordflow\">if</span> ( encoding == TIXML_ENCODING_UTF8 )\n<a name=\"l00331\"></a>00331         {\n<a name=\"l00332\"></a>00332             *length = utf8ByteTable[ *((<span class=\"keyword\">const</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">char</span>*)p) ];\n<a name=\"l00333\"></a>00333             assert( *length &gt;= 0 &amp;&amp; *length &lt; 5 );\n<a name=\"l00334\"></a>00334         }\n<a name=\"l00335\"></a>00335         <span class=\"keywordflow\">else</span>\n<a name=\"l00336\"></a>00336         {\n<a name=\"l00337\"></a>00337             *length = 1;\n<a name=\"l00338\"></a>00338         }\n<a name=\"l00339\"></a>00339 \n<a name=\"l00340\"></a>00340         <span class=\"keywordflow\">if</span> ( *length == 1 )\n<a name=\"l00341\"></a>00341         {\n<a name=\"l00342\"></a>00342             <span class=\"keywordflow\">if</span> ( *p == <span class=\"charliteral\">&#39;&amp;&#39;</span> )\n<a name=\"l00343\"></a>00343                 <span class=\"keywordflow\">return</span> GetEntity( p, _value, length, encoding );\n<a name=\"l00344\"></a>00344             *_value = *p;\n<a name=\"l00345\"></a>00345             <span class=\"keywordflow\">return</span> p+1;\n<a name=\"l00346\"></a>00346         }\n<a name=\"l00347\"></a>00347         <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> ( *length )\n<a name=\"l00348\"></a>00348         {\n<a name=\"l00349\"></a>00349             <span class=\"comment\">//strncpy( _value, p, *length );    // lots of compilers don&#39;t like this function (unsafe),</span>\n<a name=\"l00350\"></a>00350                                                 <span class=\"comment\">// and the null terminator isn&#39;t needed</span>\n<a name=\"l00351\"></a>00351             <span class=\"keywordflow\">for</span>( <span class=\"keywordtype\">int</span> i=0; p[i] &amp;&amp; i&lt;*length; ++i ) {\n<a name=\"l00352\"></a>00352                 _value[i] = p[i];\n<a name=\"l00353\"></a>00353             }\n<a name=\"l00354\"></a>00354             <span class=\"keywordflow\">return</span> p + (*length);\n<a name=\"l00355\"></a>00355         }\n<a name=\"l00356\"></a>00356         <span class=\"keywordflow\">else</span>\n<a name=\"l00357\"></a>00357         {\n<a name=\"l00358\"></a>00358             <span class=\"comment\">// Not valid text.</span>\n<a name=\"l00359\"></a>00359             <span class=\"keywordflow\">return</span> 0;\n<a name=\"l00360\"></a>00360         }\n<a name=\"l00361\"></a>00361     }\n<a name=\"l00362\"></a>00362 \n<a name=\"l00363\"></a>00363     <span class=\"comment\">// Return true if the next characters in the stream are any of the endTag sequences.</span>\n<a name=\"l00364\"></a>00364     <span class=\"comment\">// Ignore case only works for english, and should only be relied on when comparing</span>\n<a name=\"l00365\"></a>00365     <span class=\"comment\">// to English words: StringEqual( p, &quot;version&quot;, true ) is fine.</span>\n<a name=\"l00366\"></a>00366     <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> StringEqual(    <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* p,\n<a name=\"l00367\"></a>00367                                 <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* endTag,\n<a name=\"l00368\"></a>00368                                 <span class=\"keywordtype\">bool</span> ignoreCase,\n<a name=\"l00369\"></a>00369                                 TiXmlEncoding encoding );\n<a name=\"l00370\"></a>00370 \n<a name=\"l00371\"></a>00371     <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* errorString[ TIXML_ERROR_STRING_COUNT ];\n<a name=\"l00372\"></a>00372 \n<a name=\"l00373\"></a>00373     TiXmlCursor location;\n<a name=\"l00374\"></a>00374 \n<a name=\"l00376\"></a><a class=\"code\" href=\"classTiXmlBase.html#ab242c01590191f644569fa89a080d97c\">00376</a>     <span class=\"keywordtype\">void</span>*           <a class=\"code\" href=\"classTiXmlBase.html#ab242c01590191f644569fa89a080d97c\" title=\"Field containing a generic user pointer.\">userData</a>;\n<a name=\"l00377\"></a>00377     \n<a name=\"l00378\"></a>00378     <span class=\"comment\">// None of these methods are reliable for any language except English.</span>\n<a name=\"l00379\"></a>00379     <span class=\"comment\">// Good for approximation, not great for accuracy.</span>\n<a name=\"l00380\"></a>00380     <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> IsAlpha( <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">char</span> anyByte, TiXmlEncoding encoding );\n<a name=\"l00381\"></a>00381     <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> IsAlphaNum( <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">char</span> anyByte, TiXmlEncoding encoding );\n<a name=\"l00382\"></a>00382     <span class=\"keyword\">inline</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> ToLower( <span class=\"keywordtype\">int</span> v, TiXmlEncoding encoding )\n<a name=\"l00383\"></a>00383     {\n<a name=\"l00384\"></a>00384         <span class=\"keywordflow\">if</span> ( encoding == TIXML_ENCODING_UTF8 )\n<a name=\"l00385\"></a>00385         {\n<a name=\"l00386\"></a>00386             <span class=\"keywordflow\">if</span> ( v &lt; 128 ) <span class=\"keywordflow\">return</span> tolower( v );\n<a name=\"l00387\"></a>00387             <span class=\"keywordflow\">return</span> v;\n<a name=\"l00388\"></a>00388         }\n<a name=\"l00389\"></a>00389         <span class=\"keywordflow\">else</span>\n<a name=\"l00390\"></a>00390         {\n<a name=\"l00391\"></a>00391             <span class=\"keywordflow\">return</span> tolower( v );\n<a name=\"l00392\"></a>00392         }\n<a name=\"l00393\"></a>00393     }\n<a name=\"l00394\"></a>00394     <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> ConvertUTF32ToUTF8( <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">long</span> input, <span class=\"keywordtype\">char</span>* output, <span class=\"keywordtype\">int</span>* length );\n<a name=\"l00395\"></a>00395 \n<a name=\"l00396\"></a>00396 <span class=\"keyword\">private</span>:\n<a name=\"l00397\"></a>00397     <a class=\"code\" href=\"classTiXmlBase.html\" title=\"TiXmlBase is a base class for every class in TinyXml.\">TiXmlBase</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlBase.html\" title=\"TiXmlBase is a base class for every class in TinyXml.\">TiXmlBase</a>&amp; );              <span class=\"comment\">// not implemented.</span>\n<a name=\"l00398\"></a>00398     <span class=\"keywordtype\">void</span> operator=( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlBase.html\" title=\"TiXmlBase is a base class for every class in TinyXml.\">TiXmlBase</a>&amp; base );    <span class=\"comment\">// not allowed.</span>\n<a name=\"l00399\"></a>00399 \n<a name=\"l00400\"></a>00400     <span class=\"keyword\">struct </span>Entity\n<a name=\"l00401\"></a>00401     {\n<a name=\"l00402\"></a>00402         <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>*     str;\n<a name=\"l00403\"></a>00403         <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>    strLength;\n<a name=\"l00404\"></a>00404         <span class=\"keywordtype\">char</span>            chr;\n<a name=\"l00405\"></a>00405     };\n<a name=\"l00406\"></a>00406     <span class=\"keyword\">enum</span>\n<a name=\"l00407\"></a>00407     {\n<a name=\"l00408\"></a>00408         NUM_ENTITY = 5,\n<a name=\"l00409\"></a>00409         MAX_ENTITY_LENGTH = 6\n<a name=\"l00410\"></a>00410 \n<a name=\"l00411\"></a>00411     };\n<a name=\"l00412\"></a>00412     <span class=\"keyword\">static</span> Entity entity[ NUM_ENTITY ];\n<a name=\"l00413\"></a>00413     <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> condenseWhiteSpace;\n<a name=\"l00414\"></a>00414 };\n<a name=\"l00415\"></a>00415 \n<a name=\"l00416\"></a>00416 \n<a name=\"l00423\"></a><a class=\"code\" href=\"classTiXmlNode.html\">00423</a> <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a> : <span class=\"keyword\">public</span> <a class=\"code\" href=\"classTiXmlBase.html\" title=\"TiXmlBase is a base class for every class in TinyXml.\">TiXmlBase</a>\n<a name=\"l00424\"></a>00424 {\n<a name=\"l00425\"></a>00425     <span class=\"keyword\">friend</span> <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a>;\n<a name=\"l00426\"></a>00426     <span class=\"keyword\">friend</span> <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>;\n<a name=\"l00427\"></a>00427 \n<a name=\"l00428\"></a>00428 <span class=\"keyword\">public</span>:\n<a name=\"l00429\"></a>00429 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL    </span>\n<a name=\"l00430\"></a>00430 <span class=\"preprocessor\"></span>\n<a name=\"l00434\"></a>00434         <span class=\"keyword\">friend</span> std::istream&amp; <a class=\"code\" href=\"classTiXmlNode.html#ab57bd426563c926844f65a78412e18b9\" title=\"An input stream operator, for every class.\">operator &gt;&gt; </a>(std::istream&amp; in, <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>&amp; base);\n<a name=\"l00435\"></a>00435 \n<a name=\"l00452\"></a>00452         <span class=\"keyword\">friend</span> std::ostream&amp; <a class=\"code\" href=\"classTiXmlNode.html#a86cd49cfb17a844c0010b3136ac966c7\" title=\"An output stream operator, for every class.\">operator&lt;&lt; </a>(std::ostream&amp; out, <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>&amp; base);\n<a name=\"l00453\"></a>00453 \n<a name=\"l00455\"></a>00455         <span class=\"keyword\">friend</span> std::string&amp; <a class=\"code\" href=\"classTiXmlNode.html#a86cd49cfb17a844c0010b3136ac966c7\" title=\"An output stream operator, for every class.\">operator&lt;&lt; </a>(std::string&amp; out, <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>&amp; base );\n<a name=\"l00456\"></a>00456 \n<a name=\"l00457\"></a>00457 <span class=\"preprocessor\">    #endif</span>\n<a name=\"l00458\"></a>00458 <span class=\"preprocessor\"></span>\n<a name=\"l00462\"></a><a class=\"code\" href=\"classTiXmlNode.html#a836eded4920ab9e9ef28496f48cd95a2\">00462</a>     <span class=\"keyword\">enum</span> <a class=\"code\" href=\"classTiXmlNode.html#a836eded4920ab9e9ef28496f48cd95a2\" title=\"The types of XML nodes supported by TinyXml.\">NodeType</a>\n<a name=\"l00463\"></a>00463     {\n<a name=\"l00464\"></a>00464         TINYXML_DOCUMENT,\n<a name=\"l00465\"></a>00465         TINYXML_ELEMENT,\n<a name=\"l00466\"></a>00466         TINYXML_COMMENT,\n<a name=\"l00467\"></a>00467         TINYXML_UNKNOWN,\n<a name=\"l00468\"></a>00468         TINYXML_TEXT,\n<a name=\"l00469\"></a>00469         TINYXML_DECLARATION,\n<a name=\"l00470\"></a>00470         TINYXML_TYPECOUNT\n<a name=\"l00471\"></a>00471     };\n<a name=\"l00472\"></a>00472 \n<a name=\"l00473\"></a>00473     <span class=\"keyword\">virtual</span> ~<a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>();\n<a name=\"l00474\"></a>00474 \n<a name=\"l00487\"></a><a class=\"code\" href=\"classTiXmlNode.html#a77943eb90d12c2892b1337a9f5918b41\">00487</a>     <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> *<a class=\"code\" href=\"classTiXmlNode.html#a77943eb90d12c2892b1337a9f5918b41\" title=\"The meaning of &amp;#39;value&amp;#39; changes for the specific type of TiXmlNode.\">Value</a>()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> value.c_str (); }\n<a name=\"l00488\"></a>00488 \n<a name=\"l00489\"></a>00489 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l00490\"></a>00490 <span class=\"preprocessor\"></span>\n<a name=\"l00494\"></a><a class=\"code\" href=\"classTiXmlNode.html#a6d9e505619d39bf50bfd9609c9169ea5\">00494</a>     <span class=\"keyword\">const</span> std::string&amp; <a class=\"code\" href=\"classTiXmlNode.html#a6d9e505619d39bf50bfd9609c9169ea5\" title=\"Return Value() as a std::string.\">ValueStr</a>()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> value; }\n<a name=\"l00495\"></a>00495 <span class=\"preprocessor\">    #endif</span>\n<a name=\"l00496\"></a>00496 <span class=\"preprocessor\"></span>\n<a name=\"l00497\"></a>00497     <span class=\"keyword\">const</span> TIXML_STRING&amp; ValueTStr()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> value; }\n<a name=\"l00498\"></a>00498 \n<a name=\"l00508\"></a><a class=\"code\" href=\"classTiXmlNode.html#a2a38329ca5d3f28f98ce932b8299ae90\">00508</a>     <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlNode.html#a2a38329ca5d3f28f98ce932b8299ae90\" title=\"Changes the value of the node.\">SetValue</a>(<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * _value) { value = _value;}\n<a name=\"l00509\"></a>00509 \n<a name=\"l00510\"></a>00510 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l00512\"></a><a class=\"code\" href=\"classTiXmlNode.html#a2598d5f448042c1abbeae4503dd45ff2\">00512</a> <span class=\"preprocessor\">    void SetValue( const std::string&amp; _value )  { value = _value; }</span>\n<a name=\"l00513\"></a>00513 <span class=\"preprocessor\"></span><span class=\"preprocessor\">    #endif</span>\n<a name=\"l00514\"></a>00514 <span class=\"preprocessor\"></span>\n<a name=\"l00516\"></a>00516     <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlNode.html#a708e7f953df61d4d2d12f73171550a4b\" title=\"Delete all the children of this node. Does not affect &amp;#39;this&amp;#39;.\">Clear</a>();\n<a name=\"l00517\"></a>00517 \n<a name=\"l00519\"></a><a class=\"code\" href=\"classTiXmlNode.html#ab643043132ffd794f8602685d34a982e\">00519</a>     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#ab643043132ffd794f8602685d34a982e\" title=\"One step up the DOM.\">Parent</a>()                         { <span class=\"keywordflow\">return</span> parent; }\n<a name=\"l00520\"></a>00520     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#ab643043132ffd794f8602685d34a982e\" title=\"One step up the DOM.\">Parent</a>()<span class=\"keyword\"> const             </span>{ <span class=\"keywordflow\">return</span> parent; }\n<a name=\"l00521\"></a>00521 \n<a name=\"l00522\"></a><a class=\"code\" href=\"classTiXmlNode.html#a44c8eee26bbe2d1b2762038df9dde2f0\">00522</a>     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#a44c8eee26bbe2d1b2762038df9dde2f0\" title=\"The first child of this node. Will be null if there are no children.\">FirstChild</a>()<span class=\"keyword\">   const       </span>{ <span class=\"keywordflow\">return</span> firstChild; }  \n<a name=\"l00523\"></a>00523     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#a44c8eee26bbe2d1b2762038df9dde2f0\" title=\"The first child of this node. Will be null if there are no children.\">FirstChild</a>()                     { <span class=\"keywordflow\">return</span> firstChild; }\n<a name=\"l00524\"></a>00524     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#a44c8eee26bbe2d1b2762038df9dde2f0\" title=\"The first child of this node. Will be null if there are no children.\">FirstChild</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * value ) <span class=\"keyword\">const</span>;            \n<a name=\"l00525\"></a>00525 \n<a name=\"l00526\"></a><a class=\"code\" href=\"classTiXmlNode.html#abc8bf32be6419ec453a731868de19554\">00526</a>     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#abc8bf32be6419ec453a731868de19554\" title=\"The first child of this node with the matching &amp;#39;value&amp;#39;. Will be null if none...\">FirstChild</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * _value ) {\n<a name=\"l00527\"></a>00527         <span class=\"comment\">// Call through to the const version - safe since nothing is changed. Exiting syntax: cast this to a const (always safe)</span>\n<a name=\"l00528\"></a>00528         <span class=\"comment\">// call the method, cast the return back to non-const.</span>\n<a name=\"l00529\"></a>00529         <span class=\"keywordflow\">return</span> <span class=\"keyword\">const_cast&lt;</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <span class=\"keyword\">&gt;</span> ((<span class=\"keyword\">const_cast&lt;</span> <span class=\"keyword\">const </span><a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <span class=\"keyword\">&gt;</span>(<span class=\"keyword\">this</span>))-&gt;FirstChild( _value ));\n<a name=\"l00530\"></a>00530     }\n<a name=\"l00531\"></a>00531     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* LastChild()<span class=\"keyword\"> const  </span>{ <span class=\"keywordflow\">return</span> lastChild; }       \n<a name=\"l00532\"></a><a class=\"code\" href=\"classTiXmlNode.html#a6432d2b2495f6caf9cb4278df706a031\">00532</a>     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#a6432d2b2495f6caf9cb4278df706a031\" title=\"The last child of this node. Will be null if there are no children.\">LastChild</a>()  { <span class=\"keywordflow\">return</span> lastChild; }\n<a name=\"l00533\"></a>00533     \n<a name=\"l00534\"></a>00534     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* LastChild( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * value ) <span class=\"keyword\">const</span>;         \n<a name=\"l00535\"></a><a class=\"code\" href=\"classTiXmlNode.html#abad5bf1059c48127b958711ef89e8e5d\">00535</a>     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#abad5bf1059c48127b958711ef89e8e5d\" title=\"The last child of this node matching &amp;#39;value&amp;#39;. Will be null if there are no...\">LastChild</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * _value ) {\n<a name=\"l00536\"></a>00536         <span class=\"keywordflow\">return</span> <span class=\"keyword\">const_cast&lt;</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <span class=\"keyword\">&gt;</span> ((<span class=\"keyword\">const_cast&lt;</span> <span class=\"keyword\">const </span><a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <span class=\"keyword\">&gt;</span>(<span class=\"keyword\">this</span>))-&gt;LastChild( _value ));\n<a name=\"l00537\"></a>00537     }\n<a name=\"l00538\"></a>00538 \n<a name=\"l00539\"></a>00539 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l00540\"></a><a class=\"code\" href=\"classTiXmlNode.html#a07f6200a5956c723c5b52d70f29c46f6\">00540</a> <span class=\"preprocessor\"></span>    <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#a07f6200a5956c723c5b52d70f29c46f6\" title=\"STL std::string form.\">FirstChild</a>( <span class=\"keyword\">const</span> std::string&amp; _value )<span class=\"keyword\"> const  </span>{   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlNode.html#a07f6200a5956c723c5b52d70f29c46f6\" title=\"STL std::string form.\">FirstChild</a> (_value.c_str ());    }   \n<a name=\"l00541\"></a><a class=\"code\" href=\"classTiXmlNode.html#a10d2669ccb5e29e02fcb0e4408685ef6\">00541</a>     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#a10d2669ccb5e29e02fcb0e4408685ef6\" title=\"STL std::string form.\">FirstChild</a>( <span class=\"keyword\">const</span> std::string&amp; _value )              {   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlNode.html#a10d2669ccb5e29e02fcb0e4408685ef6\" title=\"STL std::string form.\">FirstChild</a> (_value.c_str ());    }   \n<a name=\"l00542\"></a><a class=\"code\" href=\"classTiXmlNode.html#a256d0cdbfcfeccae83f3a1c9747a8b63\">00542</a>     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#a256d0cdbfcfeccae83f3a1c9747a8b63\" title=\"STL std::string form.\">LastChild</a>( <span class=\"keyword\">const</span> std::string&amp; _value )<span class=\"keyword\"> const   </span>{   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlNode.html#a256d0cdbfcfeccae83f3a1c9747a8b63\" title=\"STL std::string form.\">LastChild</a> (_value.c_str ()); }   \n<a name=\"l00543\"></a><a class=\"code\" href=\"classTiXmlNode.html#a69772c9202f70553f940b15c06b07be3\">00543</a>     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#a69772c9202f70553f940b15c06b07be3\" title=\"STL std::string form.\">LastChild</a>( <span class=\"keyword\">const</span> std::string&amp; _value )               {   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlNode.html#a69772c9202f70553f940b15c06b07be3\" title=\"STL std::string form.\">LastChild</a> (_value.c_str ()); }   \n<a name=\"l00544\"></a>00544 <span class=\"preprocessor\">    #endif</span>\n<a name=\"l00545\"></a>00545 <span class=\"preprocessor\"></span>\n<a name=\"l00562\"></a>00562     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#a8621196ba3705fa226bef4a761cc51b6\" title=\"An alternate way to walk the children of a node.\">IterateChildren</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* previous ) <span class=\"keyword\">const</span>;\n<a name=\"l00563\"></a>00563     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#a8621196ba3705fa226bef4a761cc51b6\" title=\"An alternate way to walk the children of a node.\">IterateChildren</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* previous ) {\n<a name=\"l00564\"></a>00564         <span class=\"keywordflow\">return</span> <span class=\"keyword\">const_cast&lt;</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <span class=\"keyword\">&gt;</span>( (<span class=\"keyword\">const_cast&lt;</span> <span class=\"keyword\">const </span><a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <span class=\"keyword\">&gt;</span>(<span class=\"keyword\">this</span>))-&gt;IterateChildren( previous ) );\n<a name=\"l00565\"></a>00565     }\n<a name=\"l00566\"></a>00566 \n<a name=\"l00568\"></a>00568     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#a8621196ba3705fa226bef4a761cc51b6\" title=\"An alternate way to walk the children of a node.\">IterateChildren</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * value, <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* previous ) <span class=\"keyword\">const</span>;\n<a name=\"l00569\"></a>00569     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#a8621196ba3705fa226bef4a761cc51b6\" title=\"An alternate way to walk the children of a node.\">IterateChildren</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * _value, <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* previous ) {\n<a name=\"l00570\"></a>00570         <span class=\"keywordflow\">return</span> <span class=\"keyword\">const_cast&lt;</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <span class=\"keyword\">&gt;</span>( (<span class=\"keyword\">const_cast&lt;</span> <span class=\"keyword\">const </span><a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <span class=\"keyword\">&gt;</span>(<span class=\"keyword\">this</span>))-&gt;IterateChildren( _value, previous ) );\n<a name=\"l00571\"></a>00571     }\n<a name=\"l00572\"></a>00572 \n<a name=\"l00573\"></a>00573 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l00574\"></a><a class=\"code\" href=\"classTiXmlNode.html#a1cbaaf8e82c09ad763d52616d75724df\">00574</a> <span class=\"preprocessor\"></span>    <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#a1cbaaf8e82c09ad763d52616d75724df\" title=\"STL std::string form.\">IterateChildren</a>( <span class=\"keyword\">const</span> std::string&amp; _value, <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* previous )<span class=\"keyword\"> const  </span>{   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlNode.html#a1cbaaf8e82c09ad763d52616d75724df\" title=\"STL std::string form.\">IterateChildren</a> (_value.c_str (), previous); }   \n<a name=\"l00575\"></a><a class=\"code\" href=\"classTiXmlNode.html#a16e9ad53e2f5445b14bf325c90aa862c\">00575</a>     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#a16e9ad53e2f5445b14bf325c90aa862c\" title=\"STL std::string form.\">IterateChildren</a>( <span class=\"keyword\">const</span> std::string&amp; _value, <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* previous ) {    <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlNode.html#a16e9ad53e2f5445b14bf325c90aa862c\" title=\"STL std::string form.\">IterateChildren</a> (_value.c_str (), previous); }   \n<a name=\"l00576\"></a>00576 <span class=\"preprocessor\">    #endif</span>\n<a name=\"l00577\"></a>00577 <span class=\"preprocessor\"></span>\n<a name=\"l00581\"></a>00581     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#ad7d4630e1a2a916edda16be22448a8ba\" title=\"Add a new node related to this.\">InsertEndChild</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>&amp; addThis );\n<a name=\"l00582\"></a>00582 \n<a name=\"l00583\"></a>00583 \n<a name=\"l00593\"></a>00593     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#a5d29442ae46de6d0168429156197bfc6\" title=\"Add a new node related to this.\">LinkEndChild</a>( <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* addThis );\n<a name=\"l00594\"></a>00594 \n<a name=\"l00598\"></a>00598     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#a0c146fa2fff0157b681594102f48cbc7\" title=\"Add a new node related to this.\">InsertBeforeChild</a>( <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* beforeThis, <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>&amp; addThis );\n<a name=\"l00599\"></a>00599 \n<a name=\"l00603\"></a>00603     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#ad9b75e54ec19301c8b4d5ff583d0b3d5\" title=\"Add a new node related to this.\">InsertAfterChild</a>(  <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* afterThis, <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>&amp; addThis );\n<a name=\"l00604\"></a>00604 \n<a name=\"l00608\"></a>00608     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#a0c49e739a17b9938050c22cd89617fbd\" title=\"Replace a child of this node.\">ReplaceChild</a>( <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* replaceThis, <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>&amp; withThis );\n<a name=\"l00609\"></a>00609 \n<a name=\"l00611\"></a>00611     <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlNode.html#ae19d8510efc90596552f4feeac9a8fbf\" title=\"Delete a child of this node.\">RemoveChild</a>( <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* removeThis );\n<a name=\"l00612\"></a>00612 \n<a name=\"l00614\"></a><a class=\"code\" href=\"classTiXmlNode.html#ac2cd892768726270e511b2ab32de4d10\">00614</a>     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#ac2cd892768726270e511b2ab32de4d10\" title=\"Navigate to a sibling node.\">PreviousSibling</a>()<span class=\"keyword\"> const            </span>{ <span class=\"keywordflow\">return</span> prev; }\n<a name=\"l00615\"></a>00615     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#ac2cd892768726270e511b2ab32de4d10\" title=\"Navigate to a sibling node.\">PreviousSibling</a>()                        { <span class=\"keywordflow\">return</span> prev; }\n<a name=\"l00616\"></a>00616 \n<a name=\"l00618\"></a>00618     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#ac2cd892768726270e511b2ab32de4d10\" title=\"Navigate to a sibling node.\">PreviousSibling</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * ) <span class=\"keyword\">const</span>;\n<a name=\"l00619\"></a>00619     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#ac2cd892768726270e511b2ab32de4d10\" title=\"Navigate to a sibling node.\">PreviousSibling</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> *_prev ) {\n<a name=\"l00620\"></a>00620         <span class=\"keywordflow\">return</span> <span class=\"keyword\">const_cast&lt;</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <span class=\"keyword\">&gt;</span>( (<span class=\"keyword\">const_cast&lt;</span> <span class=\"keyword\">const </span><a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <span class=\"keyword\">&gt;</span>(<span class=\"keyword\">this</span>))-&gt;PreviousSibling( _prev ) );\n<a name=\"l00621\"></a>00621     }\n<a name=\"l00622\"></a>00622 \n<a name=\"l00623\"></a>00623 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l00624\"></a><a class=\"code\" href=\"classTiXmlNode.html#a658276f57d35d5d4256d1dc1a2c398ab\">00624</a> <span class=\"preprocessor\"></span>    <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#a658276f57d35d5d4256d1dc1a2c398ab\" title=\"STL std::string form.\">PreviousSibling</a>( <span class=\"keyword\">const</span> std::string&amp; _value )<span class=\"keyword\"> const </span>{   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlNode.html#a658276f57d35d5d4256d1dc1a2c398ab\" title=\"STL std::string form.\">PreviousSibling</a> (_value.c_str ());   }   \n<a name=\"l00625\"></a><a class=\"code\" href=\"classTiXmlNode.html#acc8a0434c7f401d4a3b6dee77c1a5912\">00625</a>     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#acc8a0434c7f401d4a3b6dee77c1a5912\" title=\"STL std::string form.\">PreviousSibling</a>( <span class=\"keyword\">const</span> std::string&amp; _value )             {   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlNode.html#acc8a0434c7f401d4a3b6dee77c1a5912\" title=\"STL std::string form.\">PreviousSibling</a> (_value.c_str ());   }   \n<a name=\"l00626\"></a><a class=\"code\" href=\"classTiXmlNode.html#a1b94d2f7fa7ab25a5a8e8d4340c449c9\">00626</a>     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#a1b94d2f7fa7ab25a5a8e8d4340c449c9\" title=\"STL std::string form.\">NextSibling</a>( <span class=\"keyword\">const</span> std::string&amp; _value)<span class=\"keyword\"> const      </span>{   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlNode.html#a1b94d2f7fa7ab25a5a8e8d4340c449c9\" title=\"STL std::string form.\">NextSibling</a> (_value.c_str ());   }   \n<a name=\"l00627\"></a><a class=\"code\" href=\"classTiXmlNode.html#a1757c1f4d01e8c9596ffdbd561c76aea\">00627</a>     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#a1757c1f4d01e8c9596ffdbd561c76aea\" title=\"STL std::string form.\">NextSibling</a>( <span class=\"keyword\">const</span> std::string&amp; _value)                  {   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlNode.html#a1757c1f4d01e8c9596ffdbd561c76aea\" title=\"STL std::string form.\">NextSibling</a> (_value.c_str ());   }   \n<a name=\"l00628\"></a>00628 <span class=\"preprocessor\">    #endif</span>\n<a name=\"l00629\"></a>00629 <span class=\"preprocessor\"></span>\n<a name=\"l00631\"></a><a class=\"code\" href=\"classTiXmlNode.html#af854baeba384f5fe9859f5aee03b548e\">00631</a>     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#af854baeba384f5fe9859f5aee03b548e\" title=\"Navigate to a sibling node.\">NextSibling</a>()<span class=\"keyword\"> const                </span>{ <span class=\"keywordflow\">return</span> next; }\n<a name=\"l00632\"></a>00632     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#af854baeba384f5fe9859f5aee03b548e\" title=\"Navigate to a sibling node.\">NextSibling</a>()                            { <span class=\"keywordflow\">return</span> next; }\n<a name=\"l00633\"></a>00633 \n<a name=\"l00635\"></a>00635     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#af854baeba384f5fe9859f5aee03b548e\" title=\"Navigate to a sibling node.\">NextSibling</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * ) <span class=\"keyword\">const</span>;\n<a name=\"l00636\"></a>00636     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#af854baeba384f5fe9859f5aee03b548e\" title=\"Navigate to a sibling node.\">NextSibling</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* _next ) {\n<a name=\"l00637\"></a>00637         <span class=\"keywordflow\">return</span> <span class=\"keyword\">const_cast&lt;</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <span class=\"keyword\">&gt;</span>( (<span class=\"keyword\">const_cast&lt;</span> <span class=\"keyword\">const </span><a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <span class=\"keyword\">&gt;</span>(<span class=\"keyword\">this</span>))-&gt;NextSibling( _next ) );\n<a name=\"l00638\"></a>00638     }\n<a name=\"l00639\"></a>00639 \n<a name=\"l00644\"></a>00644     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>* <a class=\"code\" href=\"classTiXmlNode.html#a73acf929d49d10bd0e5fb3d31b0372d1\" title=\"Convenience function to get through elements.\">NextSiblingElement</a>() <span class=\"keyword\">const</span>;\n<a name=\"l00645\"></a>00645     <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>* <a class=\"code\" href=\"classTiXmlNode.html#a73acf929d49d10bd0e5fb3d31b0372d1\" title=\"Convenience function to get through elements.\">NextSiblingElement</a>() {\n<a name=\"l00646\"></a>00646         <span class=\"keywordflow\">return</span> <span class=\"keyword\">const_cast&lt;</span> <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>* <span class=\"keyword\">&gt;</span>( (<span class=\"keyword\">const_cast&lt;</span> <span class=\"keyword\">const </span><a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <span class=\"keyword\">&gt;</span>(<span class=\"keyword\">this</span>))-&gt;NextSiblingElement() );\n<a name=\"l00647\"></a>00647     }\n<a name=\"l00648\"></a>00648 \n<a name=\"l00653\"></a>00653     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>* <a class=\"code\" href=\"classTiXmlNode.html#a73acf929d49d10bd0e5fb3d31b0372d1\" title=\"Convenience function to get through elements.\">NextSiblingElement</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * ) <span class=\"keyword\">const</span>;\n<a name=\"l00654\"></a>00654     <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>* <a class=\"code\" href=\"classTiXmlNode.html#a73acf929d49d10bd0e5fb3d31b0372d1\" title=\"Convenience function to get through elements.\">NextSiblingElement</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> *_next ) {\n<a name=\"l00655\"></a>00655         <span class=\"keywordflow\">return</span> <span class=\"keyword\">const_cast&lt;</span> <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>* <span class=\"keyword\">&gt;</span>( (<span class=\"keyword\">const_cast&lt;</span> <span class=\"keyword\">const </span><a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <span class=\"keyword\">&gt;</span>(<span class=\"keyword\">this</span>))-&gt;NextSiblingElement( _next ) );\n<a name=\"l00656\"></a>00656     }\n<a name=\"l00657\"></a>00657 \n<a name=\"l00658\"></a>00658 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l00659\"></a><a class=\"code\" href=\"classTiXmlNode.html#a7572d0af9d1e696ee3f05d8bb5ebb463\">00659</a> <span class=\"preprocessor\"></span>    <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>* <a class=\"code\" href=\"classTiXmlNode.html#a7572d0af9d1e696ee3f05d8bb5ebb463\" title=\"STL std::string form.\">NextSiblingElement</a>( <span class=\"keyword\">const</span> std::string&amp; _value)<span class=\"keyword\"> const    </span>{   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlNode.html#a7572d0af9d1e696ee3f05d8bb5ebb463\" title=\"STL std::string form.\">NextSiblingElement</a> (_value.c_str ());    }   \n<a name=\"l00660\"></a><a class=\"code\" href=\"classTiXmlNode.html#a506958e34406729a4e4c5326ea39d081\">00660</a>     <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>* <a class=\"code\" href=\"classTiXmlNode.html#a506958e34406729a4e4c5326ea39d081\" title=\"STL std::string form.\">NextSiblingElement</a>( <span class=\"keyword\">const</span> std::string&amp; _value)                {   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlNode.html#a506958e34406729a4e4c5326ea39d081\" title=\"STL std::string form.\">NextSiblingElement</a> (_value.c_str ());    }   \n<a name=\"l00661\"></a>00661 <span class=\"preprocessor\">    #endif</span>\n<a name=\"l00662\"></a>00662 <span class=\"preprocessor\"></span>\n<a name=\"l00664\"></a>00664     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>* <a class=\"code\" href=\"classTiXmlNode.html#af4fb652f6bd79ae0d5ce7d0f7d3c0fba\" title=\"Convenience function to get through elements.\">FirstChildElement</a>() <span class=\"keyword\">const</span>;\n<a name=\"l00665\"></a>00665     <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>* <a class=\"code\" href=\"classTiXmlNode.html#af4fb652f6bd79ae0d5ce7d0f7d3c0fba\" title=\"Convenience function to get through elements.\">FirstChildElement</a>() {\n<a name=\"l00666\"></a>00666         <span class=\"keywordflow\">return</span> <span class=\"keyword\">const_cast&lt;</span> <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>* <span class=\"keyword\">&gt;</span>( (<span class=\"keyword\">const_cast&lt;</span> <span class=\"keyword\">const </span><a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <span class=\"keyword\">&gt;</span>(<span class=\"keyword\">this</span>))-&gt;FirstChildElement() );\n<a name=\"l00667\"></a>00667     }\n<a name=\"l00668\"></a>00668 \n<a name=\"l00670\"></a>00670     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>* <a class=\"code\" href=\"classTiXmlNode.html#af4fb652f6bd79ae0d5ce7d0f7d3c0fba\" title=\"Convenience function to get through elements.\">FirstChildElement</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * _value ) <span class=\"keyword\">const</span>;\n<a name=\"l00671\"></a>00671     <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>* <a class=\"code\" href=\"classTiXmlNode.html#af4fb652f6bd79ae0d5ce7d0f7d3c0fba\" title=\"Convenience function to get through elements.\">FirstChildElement</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * _value ) {\n<a name=\"l00672\"></a>00672         <span class=\"keywordflow\">return</span> <span class=\"keyword\">const_cast&lt;</span> <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>* <span class=\"keyword\">&gt;</span>( (<span class=\"keyword\">const_cast&lt;</span> <span class=\"keyword\">const </span><a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <span class=\"keyword\">&gt;</span>(<span class=\"keyword\">this</span>))-&gt;FirstChildElement( _value ) );\n<a name=\"l00673\"></a>00673     }\n<a name=\"l00674\"></a>00674 \n<a name=\"l00675\"></a>00675 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l00676\"></a><a class=\"code\" href=\"classTiXmlNode.html#a327ad4bbd90073c5dfc931b07314f5f7\">00676</a> <span class=\"preprocessor\"></span>    <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>* <a class=\"code\" href=\"classTiXmlNode.html#a327ad4bbd90073c5dfc931b07314f5f7\" title=\"STL std::string form.\">FirstChildElement</a>( <span class=\"keyword\">const</span> std::string&amp; _value )<span class=\"keyword\"> const    </span>{   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlNode.html#a327ad4bbd90073c5dfc931b07314f5f7\" title=\"STL std::string form.\">FirstChildElement</a> (_value.c_str ()); }   \n<a name=\"l00677\"></a><a class=\"code\" href=\"classTiXmlNode.html#a7f1d7291880534c1e5cdeb392d8c1f45\">00677</a>     <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>* <a class=\"code\" href=\"classTiXmlNode.html#a7f1d7291880534c1e5cdeb392d8c1f45\" title=\"STL std::string form.\">FirstChildElement</a>( <span class=\"keyword\">const</span> std::string&amp; _value )                {   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlNode.html#a7f1d7291880534c1e5cdeb392d8c1f45\" title=\"STL std::string form.\">FirstChildElement</a> (_value.c_str ()); }   \n<a name=\"l00678\"></a>00678 <span class=\"preprocessor\">    #endif</span>\n<a name=\"l00679\"></a>00679 <span class=\"preprocessor\"></span>\n<a name=\"l00684\"></a><a class=\"code\" href=\"classTiXmlNode.html#a57b99d5c97d67a42b9752f5210a1ba5e\">00684</a>     <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classTiXmlNode.html#a57b99d5c97d67a42b9752f5210a1ba5e\" title=\"Query the type (as an enumerated value, above) of this node.\">Type</a>()<span class=\"keyword\"> const    </span>{ <span class=\"keywordflow\">return</span> type; }\n<a name=\"l00685\"></a>00685 \n<a name=\"l00689\"></a>00689     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a>* <a class=\"code\" href=\"classTiXmlNode.html#a80e397fa973cf5323e33b07154b024f3\" title=\"Return a pointer to the Document this node lives in.\">GetDocument</a>() <span class=\"keyword\">const</span>;\n<a name=\"l00690\"></a>00690     <a class=\"code\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a>* <a class=\"code\" href=\"classTiXmlNode.html#a80e397fa973cf5323e33b07154b024f3\" title=\"Return a pointer to the Document this node lives in.\">GetDocument</a>() {\n<a name=\"l00691\"></a>00691         <span class=\"keywordflow\">return</span> <span class=\"keyword\">const_cast&lt;</span> <a class=\"code\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a>* <span class=\"keyword\">&gt;</span>( (<span class=\"keyword\">const_cast&lt;</span> <span class=\"keyword\">const </span><a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <span class=\"keyword\">&gt;</span>(<span class=\"keyword\">this</span>))-&gt;GetDocument() );\n<a name=\"l00692\"></a>00692     }\n<a name=\"l00693\"></a>00693 \n<a name=\"l00695\"></a><a class=\"code\" href=\"classTiXmlNode.html#aeed21ad30630ef6e7faf096127edc9f3\">00695</a>     <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlNode.html#aeed21ad30630ef6e7faf096127edc9f3\" title=\"Returns true if this node has no children.\">NoChildren</a>()<span class=\"keyword\"> const                     </span>{ <span class=\"keywordflow\">return</span> !firstChild; }\n<a name=\"l00696\"></a>00696 \n<a name=\"l00697\"></a><a class=\"code\" href=\"classTiXmlNode.html#a8a4cda4b15c29f64cff419309aebed08\">00697</a>     <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a>*    <a class=\"code\" href=\"classTiXmlNode.html#a8a4cda4b15c29f64cff419309aebed08\" title=\"Cast to a more defined type. Will return null if not of the requested type.\">ToDocument</a>()<span class=\"keyword\">    const </span>{ <span class=\"keywordflow\">return</span> 0; } \n<a name=\"l00698\"></a><a class=\"code\" href=\"classTiXmlNode.html#a72abed96dc9667ab9e0a2a275301bb1c\">00698</a>     <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>*     <a class=\"code\" href=\"classTiXmlNode.html#a72abed96dc9667ab9e0a2a275301bb1c\" title=\"Cast to a more defined type. Will return null if not of the requested type.\">ToElement</a>()<span class=\"keyword\">     const </span>{ <span class=\"keywordflow\">return</span> 0; } \n<a name=\"l00699\"></a><a class=\"code\" href=\"classTiXmlNode.html#aa0a5086f9eaee910bbfdc7f975e26574\">00699</a>     <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlComment.html\" title=\"An XML comment.\">TiXmlComment</a>*     <a class=\"code\" href=\"classTiXmlNode.html#aa0a5086f9eaee910bbfdc7f975e26574\" title=\"Cast to a more defined type. Will return null if not of the requested type.\">ToComment</a>()<span class=\"keyword\">     const </span>{ <span class=\"keywordflow\">return</span> 0; } \n<a name=\"l00700\"></a><a class=\"code\" href=\"classTiXmlNode.html#afd7205cf31d7a376929f8a36930627a2\">00700</a>     <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlUnknown.html\" title=\"Any tag that tinyXml doesn&amp;#39;t recognize is saved as an unknown.\">TiXmlUnknown</a>*     <a class=\"code\" href=\"classTiXmlNode.html#afd7205cf31d7a376929f8a36930627a2\" title=\"Cast to a more defined type. Will return null if not of the requested type.\">ToUnknown</a>()<span class=\"keyword\">     const </span>{ <span class=\"keywordflow\">return</span> 0; } \n<a name=\"l00701\"></a><a class=\"code\" href=\"classTiXmlNode.html#a95a46a52c525992d6b4ee08beb14cd69\">00701</a>     <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlText.html\" title=\"XML text.\">TiXmlText</a>*        <a class=\"code\" href=\"classTiXmlNode.html#a95a46a52c525992d6b4ee08beb14cd69\" title=\"Cast to a more defined type. Will return null if not of the requested type.\">ToText</a>()<span class=\"keyword\">        const </span>{ <span class=\"keywordflow\">return</span> 0; } \n<a name=\"l00702\"></a><a class=\"code\" href=\"classTiXmlNode.html#a9f43e6984fc7d4afd6eb32714c6b7b72\">00702</a>     <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlDeclaration.html\" title=\"In correct XML the declaration is the first entry in the file.\">TiXmlDeclaration</a>* <a class=\"code\" href=\"classTiXmlNode.html#a9f43e6984fc7d4afd6eb32714c6b7b72\" title=\"Cast to a more defined type. Will return null if not of the requested type.\">ToDeclaration</a>()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> 0; } \n<a name=\"l00703\"></a>00703 \n<a name=\"l00704\"></a><a class=\"code\" href=\"classTiXmlNode.html#a6a4c8ac28ee7a745d059db6691e03bae\">00704</a>     <span class=\"keyword\">virtual</span> <a class=\"code\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a>*          <a class=\"code\" href=\"classTiXmlNode.html#a6a4c8ac28ee7a745d059db6691e03bae\" title=\"Cast to a more defined type. Will return null if not of the requested type.\">ToDocument</a>()    { <span class=\"keywordflow\">return</span> 0; } \n<a name=\"l00705\"></a><a class=\"code\" href=\"classTiXmlNode.html#aa65d000223187d22a4dcebd7479e9ebc\">00705</a>     <span class=\"keyword\">virtual</span> <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>*           <a class=\"code\" href=\"classTiXmlNode.html#aa65d000223187d22a4dcebd7479e9ebc\" title=\"Cast to a more defined type. Will return null if not of the requested type.\">ToElement</a>()     { <span class=\"keywordflow\">return</span> 0; } \n<a name=\"l00706\"></a><a class=\"code\" href=\"classTiXmlNode.html#a383e06a0787f7063953934867990f849\">00706</a>     <span class=\"keyword\">virtual</span> <a class=\"code\" href=\"classTiXmlComment.html\" title=\"An XML comment.\">TiXmlComment</a>*           <a class=\"code\" href=\"classTiXmlNode.html#a383e06a0787f7063953934867990f849\" title=\"Cast to a more defined type. Will return null if not of the requested type.\">ToComment</a>()     { <span class=\"keywordflow\">return</span> 0; } \n<a name=\"l00707\"></a><a class=\"code\" href=\"classTiXmlNode.html#a06de5af852668c7e4af0d09c205f0b0d\">00707</a>     <span class=\"keyword\">virtual</span> <a class=\"code\" href=\"classTiXmlUnknown.html\" title=\"Any tag that tinyXml doesn&amp;#39;t recognize is saved as an unknown.\">TiXmlUnknown</a>*           <a class=\"code\" href=\"classTiXmlNode.html#a06de5af852668c7e4af0d09c205f0b0d\" title=\"Cast to a more defined type. Will return null if not of the requested type.\">ToUnknown</a>()     { <span class=\"keywordflow\">return</span> 0; } \n<a name=\"l00708\"></a><a class=\"code\" href=\"classTiXmlNode.html#a3ddfbcac78fbea041fad57e5c6d60a03\">00708</a>     <span class=\"keyword\">virtual</span> <a class=\"code\" href=\"classTiXmlText.html\" title=\"XML text.\">TiXmlText</a>*              <a class=\"code\" href=\"classTiXmlNode.html#a3ddfbcac78fbea041fad57e5c6d60a03\" title=\"Cast to a more defined type. Will return null if not of the requested type.\">ToText</a>()        { <span class=\"keywordflow\">return</span> 0; } \n<a name=\"l00709\"></a><a class=\"code\" href=\"classTiXmlNode.html#a4027136ca820ff4a636b607231b6a6df\">00709</a>     <span class=\"keyword\">virtual</span> <a class=\"code\" href=\"classTiXmlDeclaration.html\" title=\"In correct XML the declaration is the first entry in the file.\">TiXmlDeclaration</a>*       <a class=\"code\" href=\"classTiXmlNode.html#a4027136ca820ff4a636b607231b6a6df\" title=\"Cast to a more defined type. Will return null if not of the requested type.\">ToDeclaration</a>() { <span class=\"keywordflow\">return</span> 0; } \n<a name=\"l00710\"></a>00710 \n<a name=\"l00714\"></a>00714     <span class=\"keyword\">virtual</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlNode.html#a4508cc3a2d7a98e96a54cc09c37a78a4\" title=\"Create an exact duplicate of this node and return it.\">Clone</a>() <span class=\"keyword\">const</span> = 0;\n<a name=\"l00715\"></a>00715 \n<a name=\"l00738\"></a>00738     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlNode.html#acc0f88b7462c6cb73809d410a4f5bb86\" title=\"Accept a hierchical visit the nodes in the TinyXML DOM.\">Accept</a>( <a class=\"code\" href=\"classTiXmlVisitor.html\" title=\"Implements the interface to the &amp;quot;Visitor pattern&amp;quot; (see the Accept() method...\">TiXmlVisitor</a>* visitor ) <span class=\"keyword\">const</span> = 0;\n<a name=\"l00739\"></a>00739 \n<a name=\"l00740\"></a>00740 <span class=\"keyword\">protected</span>:\n<a name=\"l00741\"></a>00741     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>( <a class=\"code\" href=\"classTiXmlNode.html#a836eded4920ab9e9ef28496f48cd95a2\" title=\"The types of XML nodes supported by TinyXml.\">NodeType</a> _type );\n<a name=\"l00742\"></a>00742 \n<a name=\"l00743\"></a>00743     <span class=\"comment\">// Copy to the allocated object. Shared functionality between Clone, Copy constructor,</span>\n<a name=\"l00744\"></a>00744     <span class=\"comment\">// and the assignment operator.</span>\n<a name=\"l00745\"></a>00745     <span class=\"keywordtype\">void</span> CopyTo( <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* target ) <span class=\"keyword\">const</span>;\n<a name=\"l00746\"></a>00746 \n<a name=\"l00747\"></a>00747 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l00748\"></a>00748 <span class=\"preprocessor\"></span>        <span class=\"comment\">// The real work of the input operator.</span>\n<a name=\"l00749\"></a>00749     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> StreamIn( std::istream* in, TIXML_STRING* tag ) = 0;\n<a name=\"l00750\"></a>00750 <span class=\"preprocessor\">    #endif</span>\n<a name=\"l00751\"></a>00751 <span class=\"preprocessor\"></span>\n<a name=\"l00752\"></a>00752     <span class=\"comment\">// Figure out what is at *p, and parse it. Returns null if it is not an xml node.</span>\n<a name=\"l00753\"></a>00753     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* Identify( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* start, TiXmlEncoding encoding );\n<a name=\"l00754\"></a>00754 \n<a name=\"l00755\"></a>00755     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>*      parent;\n<a name=\"l00756\"></a>00756     <a class=\"code\" href=\"classTiXmlNode.html#a836eded4920ab9e9ef28496f48cd95a2\" title=\"The types of XML nodes supported by TinyXml.\">NodeType</a>        type;\n<a name=\"l00757\"></a>00757 \n<a name=\"l00758\"></a>00758     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>*      firstChild;\n<a name=\"l00759\"></a>00759     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>*      lastChild;\n<a name=\"l00760\"></a>00760 \n<a name=\"l00761\"></a>00761     TIXML_STRING    value;\n<a name=\"l00762\"></a>00762 \n<a name=\"l00763\"></a>00763     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>*      prev;\n<a name=\"l00764\"></a>00764     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>*      next;\n<a name=\"l00765\"></a>00765 \n<a name=\"l00766\"></a>00766 <span class=\"keyword\">private</span>:\n<a name=\"l00767\"></a>00767     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>&amp; );              <span class=\"comment\">// not implemented.</span>\n<a name=\"l00768\"></a>00768     <span class=\"keywordtype\">void</span> operator=( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>&amp; base );    <span class=\"comment\">// not allowed.</span>\n<a name=\"l00769\"></a>00769 };\n<a name=\"l00770\"></a>00770 \n<a name=\"l00771\"></a>00771 \n<a name=\"l00779\"></a><a class=\"code\" href=\"classTiXmlAttribute.html\">00779</a> <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a> : <span class=\"keyword\">public</span> <a class=\"code\" href=\"classTiXmlBase.html\" title=\"TiXmlBase is a base class for every class in TinyXml.\">TiXmlBase</a>\n<a name=\"l00780\"></a>00780 {\n<a name=\"l00781\"></a>00781     <span class=\"keyword\">friend</span> <span class=\"keyword\">class </span>TiXmlAttributeSet;\n<a name=\"l00782\"></a>00782 \n<a name=\"l00783\"></a>00783 <span class=\"keyword\">public</span>:\n<a name=\"l00785\"></a><a class=\"code\" href=\"classTiXmlAttribute.html#a9cfa3c8179873fd485d83003b114f8e1\">00785</a>     <a class=\"code\" href=\"classTiXmlAttribute.html#a9cfa3c8179873fd485d83003b114f8e1\" title=\"Construct an empty attribute.\">TiXmlAttribute</a>() : <a class=\"code\" href=\"classTiXmlBase.html\" title=\"TiXmlBase is a base class for every class in TinyXml.\">TiXmlBase</a>()\n<a name=\"l00786\"></a>00786     {\n<a name=\"l00787\"></a>00787         document = 0;\n<a name=\"l00788\"></a>00788         prev = next = 0;\n<a name=\"l00789\"></a>00789     }\n<a name=\"l00790\"></a>00790 \n<a name=\"l00791\"></a>00791 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l00793\"></a><a class=\"code\" href=\"classTiXmlAttribute.html#a052213522caac3979960e0714063861d\">00793</a> <span class=\"preprocessor\">    TiXmlAttribute( const std::string&amp; _name, const std::string&amp; _value )</span>\n<a name=\"l00794\"></a>00794 <span class=\"preprocessor\"></span>    {\n<a name=\"l00795\"></a>00795         name = _name;\n<a name=\"l00796\"></a>00796         value = _value;\n<a name=\"l00797\"></a>00797         document = 0;\n<a name=\"l00798\"></a>00798         prev = next = 0;\n<a name=\"l00799\"></a>00799     }\n<a name=\"l00800\"></a>00800 <span class=\"preprocessor\">    #endif</span>\n<a name=\"l00801\"></a>00801 <span class=\"preprocessor\"></span>\n<a name=\"l00803\"></a><a class=\"code\" href=\"classTiXmlAttribute.html#a759d0b76fb8fcf765ecab243bc14f05e\">00803</a>     <a class=\"code\" href=\"classTiXmlAttribute.html#a9cfa3c8179873fd485d83003b114f8e1\" title=\"Construct an empty attribute.\">TiXmlAttribute</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * _name, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * _value )\n<a name=\"l00804\"></a>00804     {\n<a name=\"l00805\"></a>00805         name = _name;\n<a name=\"l00806\"></a>00806         value = _value;\n<a name=\"l00807\"></a>00807         document = 0;\n<a name=\"l00808\"></a>00808         prev = next = 0;\n<a name=\"l00809\"></a>00809     }\n<a name=\"l00810\"></a>00810 \n<a name=\"l00811\"></a><a class=\"code\" href=\"classTiXmlAttribute.html#a298a57287d305904ba6bd96ae6f78d3d\">00811</a>     <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>*     <a class=\"code\" href=\"classTiXmlAttribute.html#a298a57287d305904ba6bd96ae6f78d3d\" title=\"Return the name of this attribute.\">Name</a>()<span class=\"keyword\">  const       </span>{ <span class=\"keywordflow\">return</span> name.c_str(); }        \n<a name=\"l00812\"></a><a class=\"code\" href=\"classTiXmlAttribute.html#a0f874490eac8ca00ee0070765d0e97e3\">00812</a>     <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>*     <a class=\"code\" href=\"classTiXmlAttribute.html#a0f874490eac8ca00ee0070765d0e97e3\" title=\"Return the value of this attribute.\">Value</a>()<span class=\"keyword\"> const       </span>{ <span class=\"keywordflow\">return</span> value.c_str(); }       \n<a name=\"l00813\"></a>00813 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l00814\"></a><a class=\"code\" href=\"classTiXmlAttribute.html#a87705c3ccf9ee9417beb4f7cbacd4d33\">00814</a> <span class=\"preprocessor\"></span>    <span class=\"keyword\">const</span> std::string&amp; <a class=\"code\" href=\"classTiXmlAttribute.html#a87705c3ccf9ee9417beb4f7cbacd4d33\" title=\"Return the value of this attribute.\">ValueStr</a>()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> value; }               \n<a name=\"l00815\"></a>00815 <span class=\"preprocessor\">    #endif</span>\n<a name=\"l00816\"></a>00816 <span class=\"preprocessor\"></span>    <span class=\"keywordtype\">int</span>             <a class=\"code\" href=\"classTiXmlAttribute.html#aa1a20ad59dc7e89a0ab265396360d50f\" title=\"Return the value of this attribute, converted to an integer.\">IntValue</a>() <span class=\"keyword\">const</span>;                                   \n<a name=\"l00817\"></a>00817     <span class=\"keywordtype\">double</span>          <a class=\"code\" href=\"classTiXmlAttribute.html#a2880ddef53fc7522c99535273954d230\" title=\"Return the value of this attribute, converted to a double.\">DoubleValue</a>() <span class=\"keyword\">const</span>;                                \n<a name=\"l00818\"></a>00818 \n<a name=\"l00819\"></a>00819     <span class=\"comment\">// Get the tinyxml string representation</span>\n<a name=\"l00820\"></a>00820     <span class=\"keyword\">const</span> TIXML_STRING&amp; NameTStr()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> name; }\n<a name=\"l00821\"></a>00821 \n<a name=\"l00831\"></a>00831     <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classTiXmlAttribute.html#ad6c93088ee21af41a107931223339344\" title=\"QueryIntValue examines the value string.\">QueryIntValue</a>( <span class=\"keywordtype\">int</span>* _value ) <span class=\"keyword\">const</span>;\n<a name=\"l00833\"></a>00833     <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classTiXmlAttribute.html#ac87b2a8489906a5d7aa2875f20be3513\" title=\"QueryDoubleValue examines the value string. See QueryIntValue().\">QueryDoubleValue</a>( <span class=\"keywordtype\">double</span>* _value ) <span class=\"keyword\">const</span>;\n<a name=\"l00834\"></a>00834 \n<a name=\"l00835\"></a><a class=\"code\" href=\"classTiXmlAttribute.html#ab7fa3d21ff8d7c5764cf9af15b667a99\">00835</a>     <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlAttribute.html#ab7fa3d21ff8d7c5764cf9af15b667a99\" title=\"Set the name of this attribute.\">SetName</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* _name )   { name = _name; }               \n<a name=\"l00836\"></a><a class=\"code\" href=\"classTiXmlAttribute.html#a2dae44178f668b3cb48101be4f2236a0\">00836</a>     <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlAttribute.html#a2dae44178f668b3cb48101be4f2236a0\" title=\"Set the value.\">SetValue</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* _value ) { value = _value; }             \n<a name=\"l00837\"></a>00837 \n<a name=\"l00838\"></a>00838     <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlAttribute.html#a7e065df640116a62ea4f4b7da5449cc8\" title=\"Set the value from an integer.\">SetIntValue</a>( <span class=\"keywordtype\">int</span> _value );                                     \n<a name=\"l00839\"></a>00839     <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlAttribute.html#a0316da31373496c4368ad549bf711394\" title=\"Set the value from a double.\">SetDoubleValue</a>( <span class=\"keywordtype\">double</span> _value );                               \n<a name=\"l00840\"></a>00840 \n<a name=\"l00841\"></a>00841 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l00843\"></a><a class=\"code\" href=\"classTiXmlAttribute.html#ab296ff0c9a8c701055cd257a8a976e57\">00843</a> <span class=\"preprocessor\">    void SetName( const std::string&amp; _name )    { name = _name; }   </span>\n<a name=\"l00845\"></a><a class=\"code\" href=\"classTiXmlAttribute.html#ab43f67a0cc3ec1d80e62606500f0925f\">00845</a> <span class=\"preprocessor\">    void SetValue( const std::string&amp; _value )  { value = _value; }</span>\n<a name=\"l00846\"></a>00846 <span class=\"preprocessor\"></span><span class=\"preprocessor\">    #endif</span>\n<a name=\"l00847\"></a>00847 <span class=\"preprocessor\"></span>\n<a name=\"l00849\"></a>00849     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* <a class=\"code\" href=\"classTiXmlAttribute.html#a1c78e92e223a40843f644ba48ef69f67\" title=\"Get the next sibling attribute in the DOM. Returns null at end.\">Next</a>() <span class=\"keyword\">const</span>;\n<a name=\"l00850\"></a>00850     <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* <a class=\"code\" href=\"classTiXmlAttribute.html#a1c78e92e223a40843f644ba48ef69f67\" title=\"Get the next sibling attribute in the DOM. Returns null at end.\">Next</a>() {\n<a name=\"l00851\"></a>00851         <span class=\"keywordflow\">return</span> <span class=\"keyword\">const_cast&lt;</span> <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* <span class=\"keyword\">&gt;</span>( (<span class=\"keyword\">const_cast&lt;</span> <span class=\"keyword\">const </span><a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* <span class=\"keyword\">&gt;</span>(<span class=\"keyword\">this</span>))-&gt;Next() ); \n<a name=\"l00852\"></a>00852     }\n<a name=\"l00853\"></a>00853 \n<a name=\"l00855\"></a>00855     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* <a class=\"code\" href=\"classTiXmlAttribute.html#a6ebbfe333fe76cd834bd6cbcca3130cf\" title=\"Get the previous sibling attribute in the DOM. Returns null at beginning.\">Previous</a>() <span class=\"keyword\">const</span>;\n<a name=\"l00856\"></a>00856     <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* <a class=\"code\" href=\"classTiXmlAttribute.html#a6ebbfe333fe76cd834bd6cbcca3130cf\" title=\"Get the previous sibling attribute in the DOM. Returns null at beginning.\">Previous</a>() {\n<a name=\"l00857\"></a>00857         <span class=\"keywordflow\">return</span> <span class=\"keyword\">const_cast&lt;</span> <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* <span class=\"keyword\">&gt;</span>( (<span class=\"keyword\">const_cast&lt;</span> <span class=\"keyword\">const </span><a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* <span class=\"keyword\">&gt;</span>(<span class=\"keyword\">this</span>))-&gt;Previous() ); \n<a name=\"l00858\"></a>00858     }\n<a name=\"l00859\"></a>00859 \n<a name=\"l00860\"></a>00860     <span class=\"keywordtype\">bool</span> operator==( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>&amp; rhs )<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> rhs.name == name; }\n<a name=\"l00861\"></a>00861     <span class=\"keywordtype\">bool</span> operator&lt;( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>&amp; rhs )<span class=\"keyword\">  const </span>{ <span class=\"keywordflow\">return</span> name &lt; rhs.name; }\n<a name=\"l00862\"></a>00862     <span class=\"keywordtype\">bool</span> operator&gt;( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>&amp; rhs )<span class=\"keyword\">  const </span>{ <span class=\"keywordflow\">return</span> name &gt; rhs.name; }\n<a name=\"l00863\"></a>00863 \n<a name=\"l00864\"></a>00864     <span class=\"comment\">/*  Attribute parsing starts: first letter of the name</span>\n<a name=\"l00865\"></a>00865 <span class=\"comment\">                         returns: the next char after the value end quote</span>\n<a name=\"l00866\"></a>00866 <span class=\"comment\">    */</span>\n<a name=\"l00867\"></a>00867     <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* Parse( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* p, TiXmlParsingData* data, TiXmlEncoding encoding );\n<a name=\"l00868\"></a>00868 \n<a name=\"l00869\"></a>00869     <span class=\"comment\">// Prints this Attribute to a FILE stream.</span>\n<a name=\"l00870\"></a><a class=\"code\" href=\"classTiXmlAttribute.html#acc04956c1d5c4c31fe74f7a7528d109a\">00870</a>     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlAttribute.html#acc04956c1d5c4c31fe74f7a7528d109a\" title=\"All TinyXml classes can print themselves to a filestream or the string class (TiXmlString...\">Print</a>( FILE* cfile, <span class=\"keywordtype\">int</span> depth )<span class=\"keyword\"> const </span>{\n<a name=\"l00871\"></a>00871         <a class=\"code\" href=\"classTiXmlAttribute.html#acc04956c1d5c4c31fe74f7a7528d109a\" title=\"All TinyXml classes can print themselves to a filestream or the string class (TiXmlString...\">Print</a>( cfile, depth, 0 );\n<a name=\"l00872\"></a>00872     }\n<a name=\"l00873\"></a>00873     <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlAttribute.html#acc04956c1d5c4c31fe74f7a7528d109a\" title=\"All TinyXml classes can print themselves to a filestream or the string class (TiXmlString...\">Print</a>( FILE* cfile, <span class=\"keywordtype\">int</span> depth, TIXML_STRING* str ) <span class=\"keyword\">const</span>;\n<a name=\"l00874\"></a>00874 \n<a name=\"l00875\"></a>00875     <span class=\"comment\">// [internal use]</span>\n<a name=\"l00876\"></a>00876     <span class=\"comment\">// Set the document pointer so the attribute can report errors.</span>\n<a name=\"l00877\"></a>00877     <span class=\"keywordtype\">void</span> SetDocument( <a class=\"code\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a>* doc )  { document = doc; }\n<a name=\"l00878\"></a>00878 \n<a name=\"l00879\"></a>00879 <span class=\"keyword\">private</span>:\n<a name=\"l00880\"></a>00880     <a class=\"code\" href=\"classTiXmlAttribute.html#a9cfa3c8179873fd485d83003b114f8e1\" title=\"Construct an empty attribute.\">TiXmlAttribute</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>&amp; );                <span class=\"comment\">// not implemented.</span>\n<a name=\"l00881\"></a>00881     <span class=\"keywordtype\">void</span> operator=( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>&amp; base );   <span class=\"comment\">// not allowed.</span>\n<a name=\"l00882\"></a>00882 \n<a name=\"l00883\"></a>00883     <a class=\"code\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a>*  document;   <span class=\"comment\">// A pointer back to a document, for error reporting.</span>\n<a name=\"l00884\"></a>00884     TIXML_STRING name;\n<a name=\"l00885\"></a>00885     TIXML_STRING value;\n<a name=\"l00886\"></a>00886     <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* prev;\n<a name=\"l00887\"></a>00887     <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* next;\n<a name=\"l00888\"></a>00888 };\n<a name=\"l00889\"></a>00889 \n<a name=\"l00890\"></a>00890 \n<a name=\"l00891\"></a>00891 <span class=\"comment\">/*  A class used to manage a group of attributes.</span>\n<a name=\"l00892\"></a>00892 <span class=\"comment\">    It is only used internally, both by the ELEMENT and the DECLARATION.</span>\n<a name=\"l00893\"></a>00893 <span class=\"comment\">    </span>\n<a name=\"l00894\"></a>00894 <span class=\"comment\">    The set can be changed transparent to the Element and Declaration</span>\n<a name=\"l00895\"></a>00895 <span class=\"comment\">    classes that use it, but NOT transparent to the Attribute</span>\n<a name=\"l00896\"></a>00896 <span class=\"comment\">    which has to implement a next() and previous() method. Which makes</span>\n<a name=\"l00897\"></a>00897 <span class=\"comment\">    it a bit problematic and prevents the use of STL.</span>\n<a name=\"l00898\"></a>00898 <span class=\"comment\"></span>\n<a name=\"l00899\"></a>00899 <span class=\"comment\">    This version is implemented with circular lists because:</span>\n<a name=\"l00900\"></a>00900 <span class=\"comment\">        - I like circular lists</span>\n<a name=\"l00901\"></a>00901 <span class=\"comment\">        - it demonstrates some independence from the (typical) doubly linked list.</span>\n<a name=\"l00902\"></a>00902 <span class=\"comment\">*/</span>\n<a name=\"l00903\"></a>00903 <span class=\"keyword\">class </span>TiXmlAttributeSet\n<a name=\"l00904\"></a>00904 {\n<a name=\"l00905\"></a>00905 <span class=\"keyword\">public</span>:\n<a name=\"l00906\"></a>00906     TiXmlAttributeSet();\n<a name=\"l00907\"></a>00907     ~TiXmlAttributeSet();\n<a name=\"l00908\"></a>00908 \n<a name=\"l00909\"></a>00909     <span class=\"keywordtype\">void</span> Add( <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* attribute );\n<a name=\"l00910\"></a>00910     <span class=\"keywordtype\">void</span> Remove( <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* attribute );\n<a name=\"l00911\"></a>00911 \n<a name=\"l00912\"></a>00912     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* First()<span class=\"keyword\">   const   </span>{ <span class=\"keywordflow\">return</span> ( sentinel.next == &amp;sentinel ) ? 0 : sentinel.next; }\n<a name=\"l00913\"></a>00913     <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* First()                 { <span class=\"keywordflow\">return</span> ( sentinel.next == &amp;sentinel ) ? 0 : sentinel.next; }\n<a name=\"l00914\"></a>00914     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* Last()<span class=\"keyword\"> const      </span>{ <span class=\"keywordflow\">return</span> ( sentinel.prev == &amp;sentinel ) ? 0 : sentinel.prev; }\n<a name=\"l00915\"></a>00915     <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* Last()                  { <span class=\"keywordflow\">return</span> ( sentinel.prev == &amp;sentinel ) ? 0 : sentinel.prev; }\n<a name=\"l00916\"></a>00916 \n<a name=\"l00917\"></a>00917     <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* Find( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* _name ) <span class=\"keyword\">const</span>;\n<a name=\"l00918\"></a>00918     <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* FindOrCreate( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* _name );\n<a name=\"l00919\"></a>00919 \n<a name=\"l00920\"></a>00920 <span class=\"preprocessor\">#   ifdef TIXML_USE_STL</span>\n<a name=\"l00921\"></a>00921 <span class=\"preprocessor\"></span>    <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* Find( <span class=\"keyword\">const</span> std::string&amp; _name ) <span class=\"keyword\">const</span>;\n<a name=\"l00922\"></a>00922     <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* FindOrCreate( <span class=\"keyword\">const</span> std::string&amp; _name );\n<a name=\"l00923\"></a>00923 <span class=\"preprocessor\">#   endif</span>\n<a name=\"l00924\"></a>00924 <span class=\"preprocessor\"></span>\n<a name=\"l00925\"></a>00925 \n<a name=\"l00926\"></a>00926 <span class=\"keyword\">private</span>:\n<a name=\"l00927\"></a>00927     <span class=\"comment\">//*ME:  Because of hidden/disabled copy-construktor in TiXmlAttribute (sentinel-element),</span>\n<a name=\"l00928\"></a>00928     <span class=\"comment\">//*ME:  this class must be also use a hidden/disabled copy-constructor !!!</span>\n<a name=\"l00929\"></a>00929     TiXmlAttributeSet( <span class=\"keyword\">const</span> TiXmlAttributeSet&amp; );  <span class=\"comment\">// not allowed</span>\n<a name=\"l00930\"></a>00930     <span class=\"keywordtype\">void</span> operator=( <span class=\"keyword\">const</span> TiXmlAttributeSet&amp; ); <span class=\"comment\">// not allowed (as TiXmlAttribute)</span>\n<a name=\"l00931\"></a>00931 \n<a name=\"l00932\"></a>00932     <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a> sentinel;\n<a name=\"l00933\"></a>00933 };\n<a name=\"l00934\"></a>00934 \n<a name=\"l00935\"></a>00935 \n<a name=\"l00940\"></a><a class=\"code\" href=\"classTiXmlElement.html\">00940</a> <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a> : <span class=\"keyword\">public</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>\n<a name=\"l00941\"></a>00941 {\n<a name=\"l00942\"></a>00942 <span class=\"keyword\">public</span>:\n<a name=\"l00944\"></a>00944     <a class=\"code\" href=\"classTiXmlElement.html#a01bc3ab372d35da08efcbbe65ad90c60\" title=\"Construct an element.\">TiXmlElement</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * in_value);\n<a name=\"l00945\"></a>00945 \n<a name=\"l00946\"></a>00946 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l00948\"></a>00948 <span class=\"preprocessor\">    TiXmlElement( const std::string&amp; _value );</span>\n<a name=\"l00949\"></a>00949 <span class=\"preprocessor\"></span><span class=\"preprocessor\">    #endif</span>\n<a name=\"l00950\"></a>00950 <span class=\"preprocessor\"></span>\n<a name=\"l00951\"></a>00951     <a class=\"code\" href=\"classTiXmlElement.html#a01bc3ab372d35da08efcbbe65ad90c60\" title=\"Construct an element.\">TiXmlElement</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>&amp; );\n<a name=\"l00952\"></a>00952 \n<a name=\"l00953\"></a>00953     <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>&amp; operator=( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>&amp; base );\n<a name=\"l00954\"></a>00954 \n<a name=\"l00955\"></a>00955     <span class=\"keyword\">virtual</span> ~<a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>();\n<a name=\"l00956\"></a>00956 \n<a name=\"l00960\"></a>00960     <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"classTiXmlElement.html#ae419a442a9701a62b0c3d8fd1cbdd12d\" title=\"Given an attribute name, Attribute() returns the value for the attribute of that...\">Attribute</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* name ) <span class=\"keyword\">const</span>;\n<a name=\"l00961\"></a>00961 \n<a name=\"l00968\"></a>00968     <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"classTiXmlElement.html#ae419a442a9701a62b0c3d8fd1cbdd12d\" title=\"Given an attribute name, Attribute() returns the value for the attribute of that...\">Attribute</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* name, <span class=\"keywordtype\">int</span>* i ) <span class=\"keyword\">const</span>;\n<a name=\"l00969\"></a>00969 \n<a name=\"l00976\"></a>00976     <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"classTiXmlElement.html#ae419a442a9701a62b0c3d8fd1cbdd12d\" title=\"Given an attribute name, Attribute() returns the value for the attribute of that...\">Attribute</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* name, <span class=\"keywordtype\">double</span>* d ) <span class=\"keyword\">const</span>;\n<a name=\"l00977\"></a>00977 \n<a name=\"l00985\"></a>00985     <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classTiXmlElement.html#aea0bfe471380f281c5945770ddbf52b9\" title=\"QueryIntAttribute examines the attribute - it is an alternative to the Attribute()...\">QueryIntAttribute</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* name, <span class=\"keywordtype\">int</span>* _value ) <span class=\"keyword\">const</span>;\n<a name=\"l00987\"></a>00987     <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classTiXmlElement.html#ae48df644f890ab86fa19839ac401f00d\" title=\"QueryUnsignedAttribute examines the attribute - see QueryIntAttribute().\">QueryUnsignedAttribute</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* name, <span class=\"keywordtype\">unsigned</span>* _value ) <span class=\"keyword\">const</span>;\n<a name=\"l00992\"></a>00992     <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classTiXmlElement.html#af4a1d3f88c28eb0f3115dc39ebd83fff\" title=\"QueryBoolAttribute examines the attribute - see QueryIntAttribute().\">QueryBoolAttribute</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* name, <span class=\"keywordtype\">bool</span>* _value ) <span class=\"keyword\">const</span>;\n<a name=\"l00994\"></a>00994     <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classTiXmlElement.html#a898d7730ecc341f0bffc7a9dadbf1ce7\" title=\"QueryDoubleAttribute examines the attribute - see QueryIntAttribute().\">QueryDoubleAttribute</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* name, <span class=\"keywordtype\">double</span>* _value ) <span class=\"keyword\">const</span>;\n<a name=\"l00996\"></a><a class=\"code\" href=\"classTiXmlElement.html#aa04d3af11601ef5a5f88295203a843be\">00996</a>     <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classTiXmlElement.html#aa04d3af11601ef5a5f88295203a843be\" title=\"QueryFloatAttribute examines the attribute - see QueryIntAttribute().\">QueryFloatAttribute</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* name, <span class=\"keywordtype\">float</span>* _value )<span class=\"keyword\"> const </span>{\n<a name=\"l00997\"></a>00997         <span class=\"keywordtype\">double</span> d;\n<a name=\"l00998\"></a>00998         <span class=\"keywordtype\">int</span> result = <a class=\"code\" href=\"classTiXmlElement.html#a898d7730ecc341f0bffc7a9dadbf1ce7\" title=\"QueryDoubleAttribute examines the attribute - see QueryIntAttribute().\">QueryDoubleAttribute</a>( name, &amp;d );\n<a name=\"l00999\"></a>00999         <span class=\"keywordflow\">if</span> ( result == TIXML_SUCCESS ) {\n<a name=\"l01000\"></a>01000             *_value = (float)d;\n<a name=\"l01001\"></a>01001         }\n<a name=\"l01002\"></a>01002         <span class=\"keywordflow\">return</span> result;\n<a name=\"l01003\"></a>01003     }\n<a name=\"l01004\"></a>01004 \n<a name=\"l01005\"></a>01005 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l01007\"></a><a class=\"code\" href=\"classTiXmlElement.html#a14321ac360efe906ed449d9db3fd9961\">01007</a> <span class=\"preprocessor\">    int QueryStringAttribute( const char* name, std::string* _value ) const {</span>\n<a name=\"l01008\"></a>01008 <span class=\"preprocessor\"></span>        <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* cstr = <a class=\"code\" href=\"classTiXmlElement.html#ae419a442a9701a62b0c3d8fd1cbdd12d\" title=\"Given an attribute name, Attribute() returns the value for the attribute of that...\">Attribute</a>( name );\n<a name=\"l01009\"></a>01009         <span class=\"keywordflow\">if</span> ( cstr ) {\n<a name=\"l01010\"></a>01010             *_value = std::string( cstr );\n<a name=\"l01011\"></a>01011             <span class=\"keywordflow\">return</span> TIXML_SUCCESS;\n<a name=\"l01012\"></a>01012         }\n<a name=\"l01013\"></a>01013         <span class=\"keywordflow\">return</span> TIXML_NO_ATTRIBUTE;\n<a name=\"l01014\"></a>01014     }\n<a name=\"l01015\"></a>01015 \n<a name=\"l01024\"></a><a class=\"code\" href=\"classTiXmlElement.html#ae3b9a03b0a56663a40801c7256683576\">01024</a>     <span class=\"keyword\">template</span>&lt; <span class=\"keyword\">typename</span> T &gt; <span class=\"keywordtype\">int</span> QueryValueAttribute( <span class=\"keyword\">const</span> std::string&amp; name, T* outValue )<span class=\"keyword\"> const</span>\n<a name=\"l01025\"></a>01025 <span class=\"keyword\">    </span>{\n<a name=\"l01026\"></a>01026         <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* node = attributeSet.Find( name );\n<a name=\"l01027\"></a>01027         <span class=\"keywordflow\">if</span> ( !node )\n<a name=\"l01028\"></a>01028             <span class=\"keywordflow\">return</span> TIXML_NO_ATTRIBUTE;\n<a name=\"l01029\"></a>01029 \n<a name=\"l01030\"></a>01030         std::stringstream sstream( node-&gt;<a class=\"code\" href=\"classTiXmlAttribute.html#a87705c3ccf9ee9417beb4f7cbacd4d33\" title=\"Return the value of this attribute.\">ValueStr</a>() );\n<a name=\"l01031\"></a>01031         sstream &gt;&gt; *outValue;\n<a name=\"l01032\"></a>01032         <span class=\"keywordflow\">if</span> ( !sstream.fail() )\n<a name=\"l01033\"></a>01033             <span class=\"keywordflow\">return</span> TIXML_SUCCESS;\n<a name=\"l01034\"></a>01034         <span class=\"keywordflow\">return</span> TIXML_WRONG_TYPE;\n<a name=\"l01035\"></a>01035     }\n<a name=\"l01036\"></a>01036 \n<a name=\"l01037\"></a>01037     <span class=\"keywordtype\">int</span> QueryValueAttribute( <span class=\"keyword\">const</span> std::string&amp; name, std::string* outValue )<span class=\"keyword\"> const</span>\n<a name=\"l01038\"></a>01038 <span class=\"keyword\">    </span>{\n<a name=\"l01039\"></a>01039         <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* node = attributeSet.Find( name );\n<a name=\"l01040\"></a>01040         <span class=\"keywordflow\">if</span> ( !node )\n<a name=\"l01041\"></a>01041             <span class=\"keywordflow\">return</span> TIXML_NO_ATTRIBUTE;\n<a name=\"l01042\"></a>01042         *outValue = node-&gt;<a class=\"code\" href=\"classTiXmlAttribute.html#a87705c3ccf9ee9417beb4f7cbacd4d33\" title=\"Return the value of this attribute.\">ValueStr</a>();\n<a name=\"l01043\"></a>01043         <span class=\"keywordflow\">return</span> TIXML_SUCCESS;\n<a name=\"l01044\"></a>01044     }\n<a name=\"l01045\"></a>01045 <span class=\"preprocessor\">    #endif</span>\n<a name=\"l01046\"></a>01046 <span class=\"preprocessor\"></span>\n<a name=\"l01050\"></a>01050     <span class=\"keywordtype\">void</span> SetAttribute( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* name, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * _value );\n<a name=\"l01051\"></a>01051 \n<a name=\"l01052\"></a>01052 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l01053\"></a>01053 <span class=\"preprocessor\"></span>    <span class=\"keyword\">const</span> std::string* Attribute( <span class=\"keyword\">const</span> std::string&amp; name ) <span class=\"keyword\">const</span>;\n<a name=\"l01054\"></a>01054     <span class=\"keyword\">const</span> std::string* Attribute( <span class=\"keyword\">const</span> std::string&amp; name, <span class=\"keywordtype\">int</span>* i ) <span class=\"keyword\">const</span>;\n<a name=\"l01055\"></a>01055     <span class=\"keyword\">const</span> std::string* Attribute( <span class=\"keyword\">const</span> std::string&amp; name, <span class=\"keywordtype\">double</span>* d ) <span class=\"keyword\">const</span>;\n<a name=\"l01056\"></a>01056     <span class=\"keywordtype\">int</span> QueryIntAttribute( <span class=\"keyword\">const</span> std::string&amp; name, <span class=\"keywordtype\">int</span>* _value ) <span class=\"keyword\">const</span>;\n<a name=\"l01057\"></a>01057     <span class=\"keywordtype\">int</span> QueryDoubleAttribute( <span class=\"keyword\">const</span> std::string&amp; name, <span class=\"keywordtype\">double</span>* _value ) <span class=\"keyword\">const</span>;\n<a name=\"l01058\"></a>01058 \n<a name=\"l01060\"></a>01060     <span class=\"keywordtype\">void</span> SetAttribute( <span class=\"keyword\">const</span> std::string&amp; name, <span class=\"keyword\">const</span> std::string&amp; _value );\n<a name=\"l01062\"></a>01062     <span class=\"keywordtype\">void</span> SetAttribute( <span class=\"keyword\">const</span> std::string&amp; name, <span class=\"keywordtype\">int</span> _value );\n<a name=\"l01064\"></a>01064     <span class=\"keywordtype\">void</span> SetDoubleAttribute( <span class=\"keyword\">const</span> std::string&amp; name, <span class=\"keywordtype\">double</span> value );\n<a name=\"l01065\"></a>01065 <span class=\"preprocessor\">    #endif</span>\n<a name=\"l01066\"></a>01066 <span class=\"preprocessor\"></span>\n<a name=\"l01070\"></a>01070     <span class=\"keywordtype\">void</span> SetAttribute( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * name, <span class=\"keywordtype\">int</span> value );\n<a name=\"l01071\"></a>01071 \n<a name=\"l01075\"></a>01075     <span class=\"keywordtype\">void</span> SetDoubleAttribute( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * name, <span class=\"keywordtype\">double</span> value );\n<a name=\"l01076\"></a>01076 \n<a name=\"l01079\"></a>01079     <span class=\"keywordtype\">void</span> RemoveAttribute( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * name );\n<a name=\"l01080\"></a>01080 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l01081\"></a><a class=\"code\" href=\"classTiXmlElement.html#a1afa6aea716511326a608e4c05df4f3a\">01081</a> <span class=\"preprocessor\"></span>    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlElement.html#a1afa6aea716511326a608e4c05df4f3a\" title=\"STL std::string form.\">RemoveAttribute</a>( <span class=\"keyword\">const</span> std::string&amp; name ) {   <a class=\"code\" href=\"classTiXmlElement.html#a1afa6aea716511326a608e4c05df4f3a\" title=\"STL std::string form.\">RemoveAttribute</a> (name.c_str ());    }   \n<a name=\"l01082\"></a>01082 <span class=\"preprocessor\">    #endif</span>\n<a name=\"l01083\"></a>01083 <span class=\"preprocessor\"></span>\n<a name=\"l01084\"></a><a class=\"code\" href=\"classTiXmlElement.html#a516054c9073647d6cb29b6abe9fa0592\">01084</a>     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* <a class=\"code\" href=\"classTiXmlElement.html#a516054c9073647d6cb29b6abe9fa0592\" title=\"Access the first attribute in this element.\">FirstAttribute</a>()<span class=\"keyword\"> const    </span>{ <span class=\"keywordflow\">return</span> attributeSet.First(); }        \n<a name=\"l01085\"></a>01085     <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* FirstAttribute()                { <span class=\"keywordflow\">return</span> attributeSet.First(); }\n<a name=\"l01086\"></a><a class=\"code\" href=\"classTiXmlElement.html#a86191b49f9177be132b85b14655f1381\">01086</a>     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* <a class=\"code\" href=\"classTiXmlElement.html#a86191b49f9177be132b85b14655f1381\" title=\"Access the last attribute in this element.\">LastAttribute</a>()<span class=\"keyword\">   const   </span>{ <span class=\"keywordflow\">return</span> attributeSet.Last(); }     \n<a name=\"l01087\"></a>01087     <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* LastAttribute()                 { <span class=\"keywordflow\">return</span> attributeSet.Last(); }\n<a name=\"l01088\"></a>01088 \n<a name=\"l01121\"></a>01121     <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* GetText() <span class=\"keyword\">const</span>;\n<a name=\"l01122\"></a>01122 \n<a name=\"l01124\"></a>01124     <span class=\"keyword\">virtual</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* Clone() <span class=\"keyword\">const</span>;\n<a name=\"l01125\"></a>01125     <span class=\"comment\">// Print the Element to a FILE stream.</span>\n<a name=\"l01126\"></a>01126     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> Print( FILE* cfile, <span class=\"keywordtype\">int</span> depth ) <span class=\"keyword\">const</span>;\n<a name=\"l01127\"></a>01127 \n<a name=\"l01128\"></a>01128     <span class=\"comment\">/*  Attribtue parsing starts: next char past &#39;&lt;&#39;</span>\n<a name=\"l01129\"></a>01129 <span class=\"comment\">                         returns: next char past &#39;&gt;&#39;</span>\n<a name=\"l01130\"></a>01130 <span class=\"comment\">    */</span>\n<a name=\"l01131\"></a>01131     <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* Parse( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* p, TiXmlParsingData* data, TiXmlEncoding encoding );\n<a name=\"l01132\"></a>01132 \n<a name=\"l01133\"></a><a class=\"code\" href=\"classTiXmlElement.html#ac5b8d0e25fa23fd9acbb6d146082901c\">01133</a>     <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>*     <a class=\"code\" href=\"classTiXmlElement.html#ac5b8d0e25fa23fd9acbb6d146082901c\" title=\"Cast to a more defined type. Will return null not of the requested type.\">ToElement</a>()<span class=\"keyword\">     const </span>{ <span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>; } \n<a name=\"l01134\"></a><a class=\"code\" href=\"classTiXmlElement.html#a9def86337ea7a755eb41cac980f60c7a\">01134</a>     <span class=\"keyword\">virtual</span> <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>*           <a class=\"code\" href=\"classTiXmlElement.html#a9def86337ea7a755eb41cac980f60c7a\" title=\"Cast to a more defined type. Will return null not of the requested type.\">ToElement</a>()           { <span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>; } \n<a name=\"l01135\"></a>01135 \n<a name=\"l01138\"></a>01138     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> Accept( <a class=\"code\" href=\"classTiXmlVisitor.html\" title=\"Implements the interface to the &amp;quot;Visitor pattern&amp;quot; (see the Accept() method...\">TiXmlVisitor</a>* visitor ) <span class=\"keyword\">const</span>;\n<a name=\"l01139\"></a>01139 \n<a name=\"l01140\"></a>01140 <span class=\"keyword\">protected</span>:\n<a name=\"l01141\"></a>01141 \n<a name=\"l01142\"></a>01142     <span class=\"keywordtype\">void</span> CopyTo( <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>* target ) <span class=\"keyword\">const</span>;\n<a name=\"l01143\"></a>01143     <span class=\"keywordtype\">void</span> ClearThis();   <span class=\"comment\">// like clear, but initializes &#39;this&#39; object as well</span>\n<a name=\"l01144\"></a>01144 \n<a name=\"l01145\"></a>01145     <span class=\"comment\">// Used to be public [internal use]</span>\n<a name=\"l01146\"></a>01146 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l01147\"></a>01147 <span class=\"preprocessor\"></span>    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> StreamIn( std::istream * in, TIXML_STRING * tag );\n<a name=\"l01148\"></a>01148 <span class=\"preprocessor\">    #endif</span>\n<a name=\"l01149\"></a>01149 <span class=\"preprocessor\"></span>    <span class=\"comment\">/*  [internal use]</span>\n<a name=\"l01150\"></a>01150 <span class=\"comment\">        Reads the &quot;value&quot; of the element -- another element, or text.</span>\n<a name=\"l01151\"></a>01151 <span class=\"comment\">        This should terminate with the current end tag.</span>\n<a name=\"l01152\"></a>01152 <span class=\"comment\">    */</span>\n<a name=\"l01153\"></a>01153     <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* ReadValue( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* in, TiXmlParsingData* prevData, TiXmlEncoding encoding );\n<a name=\"l01154\"></a>01154 \n<a name=\"l01155\"></a>01155 <span class=\"keyword\">private</span>:\n<a name=\"l01156\"></a>01156     TiXmlAttributeSet attributeSet;\n<a name=\"l01157\"></a>01157 };\n<a name=\"l01158\"></a>01158 \n<a name=\"l01159\"></a>01159 \n<a name=\"l01162\"></a><a class=\"code\" href=\"classTiXmlComment.html\">01162</a> <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlComment.html\" title=\"An XML comment.\">TiXmlComment</a> : <span class=\"keyword\">public</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>\n<a name=\"l01163\"></a>01163 {\n<a name=\"l01164\"></a>01164 <span class=\"keyword\">public</span>:\n<a name=\"l01166\"></a><a class=\"code\" href=\"classTiXmlComment.html#aaa3252031d3e8bd3a2bf51a1c61201b7\">01166</a>     <a class=\"code\" href=\"classTiXmlComment.html#aaa3252031d3e8bd3a2bf51a1c61201b7\" title=\"Constructs an empty comment.\">TiXmlComment</a>() : <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>( <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>::TINYXML_COMMENT ) {}\n<a name=\"l01168\"></a><a class=\"code\" href=\"classTiXmlComment.html#a37e7802ef17bc03ebe5ae79bf0713d47\">01168</a>     <a class=\"code\" href=\"classTiXmlComment.html#a37e7802ef17bc03ebe5ae79bf0713d47\" title=\"Construct a comment from text.\">TiXmlComment</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* _value ) : <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>( <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>::TINYXML_COMMENT ) {\n<a name=\"l01169\"></a>01169         <a class=\"code\" href=\"classTiXmlNode.html#a2a38329ca5d3f28f98ce932b8299ae90\" title=\"Changes the value of the node.\">SetValue</a>( _value );\n<a name=\"l01170\"></a>01170     }\n<a name=\"l01171\"></a>01171     <a class=\"code\" href=\"classTiXmlComment.html#aaa3252031d3e8bd3a2bf51a1c61201b7\" title=\"Constructs an empty comment.\">TiXmlComment</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlComment.html\" title=\"An XML comment.\">TiXmlComment</a>&amp; );\n<a name=\"l01172\"></a>01172     <a class=\"code\" href=\"classTiXmlComment.html\" title=\"An XML comment.\">TiXmlComment</a>&amp; operator=( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlComment.html\" title=\"An XML comment.\">TiXmlComment</a>&amp; base );\n<a name=\"l01173\"></a>01173 \n<a name=\"l01174\"></a>01174     <span class=\"keyword\">virtual</span> ~<a class=\"code\" href=\"classTiXmlComment.html\" title=\"An XML comment.\">TiXmlComment</a>() {}\n<a name=\"l01175\"></a>01175 \n<a name=\"l01177\"></a>01177     <span class=\"keyword\">virtual</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlComment.html#a0d6662bdc52488b9e12b3c7a0453d028\" title=\"Returns a copy of this Comment.\">Clone</a>() <span class=\"keyword\">const</span>;\n<a name=\"l01178\"></a>01178     <span class=\"comment\">// Write this Comment to a FILE stream.</span>\n<a name=\"l01179\"></a>01179     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlComment.html#a6b316527aaa8da0370cd68c22a5a0f5f\" title=\"All TinyXml classes can print themselves to a filestream or the string class (TiXmlString...\">Print</a>( FILE* cfile, <span class=\"keywordtype\">int</span> depth ) <span class=\"keyword\">const</span>;\n<a name=\"l01180\"></a>01180 \n<a name=\"l01181\"></a>01181     <span class=\"comment\">/*  Attribtue parsing starts: at the ! of the !--</span>\n<a name=\"l01182\"></a>01182 <span class=\"comment\">                         returns: next char past &#39;&gt;&#39;</span>\n<a name=\"l01183\"></a>01183 <span class=\"comment\">    */</span>\n<a name=\"l01184\"></a>01184     <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* Parse( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* p, TiXmlParsingData* data, TiXmlEncoding encoding );\n<a name=\"l01185\"></a>01185 \n<a name=\"l01186\"></a><a class=\"code\" href=\"classTiXmlComment.html#a00fb4215c20a2399ea05ac9b9e7e68a0\">01186</a>     <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlComment.html\" title=\"An XML comment.\">TiXmlComment</a>*  <a class=\"code\" href=\"classTiXmlComment.html#a00fb4215c20a2399ea05ac9b9e7e68a0\" title=\"Cast to a more defined type. Will return null not of the requested type.\">ToComment</a>()<span class=\"keyword\"> const  </span>{ <span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>; } \n<a name=\"l01187\"></a><a class=\"code\" href=\"classTiXmlComment.html#acc7c7e07e13c23f17797d642981511df\">01187</a>     <span class=\"keyword\">virtual</span>       <a class=\"code\" href=\"classTiXmlComment.html\" title=\"An XML comment.\">TiXmlComment</a>*  <a class=\"code\" href=\"classTiXmlComment.html#acc7c7e07e13c23f17797d642981511df\" title=\"Cast to a more defined type. Will return null not of the requested type.\">ToComment</a>()        { <span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>; } \n<a name=\"l01188\"></a>01188 \n<a name=\"l01191\"></a>01191     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlComment.html#af3ac1b99fbbe9ea4fb6e14146156e43e\" title=\"Walk the XML tree visiting this node and all of its children.\">Accept</a>( <a class=\"code\" href=\"classTiXmlVisitor.html\" title=\"Implements the interface to the &amp;quot;Visitor pattern&amp;quot; (see the Accept() method...\">TiXmlVisitor</a>* visitor ) <span class=\"keyword\">const</span>;\n<a name=\"l01192\"></a>01192 \n<a name=\"l01193\"></a>01193 <span class=\"keyword\">protected</span>:\n<a name=\"l01194\"></a>01194     <span class=\"keywordtype\">void</span> CopyTo( <a class=\"code\" href=\"classTiXmlComment.html\" title=\"An XML comment.\">TiXmlComment</a>* target ) <span class=\"keyword\">const</span>;\n<a name=\"l01195\"></a>01195 \n<a name=\"l01196\"></a>01196     <span class=\"comment\">// used to be public</span>\n<a name=\"l01197\"></a>01197 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l01198\"></a>01198 <span class=\"preprocessor\"></span>    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> StreamIn( std::istream * in, TIXML_STRING * tag );\n<a name=\"l01199\"></a>01199 <span class=\"preprocessor\">    #endif</span>\n<a name=\"l01200\"></a>01200 <span class=\"preprocessor\"></span><span class=\"comment\">//  virtual void StreamOut( TIXML_OSTREAM * out ) const;</span>\n<a name=\"l01201\"></a>01201 \n<a name=\"l01202\"></a>01202 <span class=\"keyword\">private</span>:\n<a name=\"l01203\"></a>01203 \n<a name=\"l01204\"></a>01204 };\n<a name=\"l01205\"></a>01205 \n<a name=\"l01206\"></a>01206 \n<a name=\"l01212\"></a><a class=\"code\" href=\"classTiXmlText.html\">01212</a> <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlText.html\" title=\"XML text.\">TiXmlText</a> : <span class=\"keyword\">public</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>\n<a name=\"l01213\"></a>01213 {\n<a name=\"l01214\"></a>01214     <span class=\"keyword\">friend</span> <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>;\n<a name=\"l01215\"></a>01215 <span class=\"keyword\">public</span>:\n<a name=\"l01220\"></a><a class=\"code\" href=\"classTiXmlText.html#af659e77c6b87d684827f35a8f4895960\">01220</a>     <a class=\"code\" href=\"classTiXmlText.html#af659e77c6b87d684827f35a8f4895960\" title=\"Constructor for text element.\">TiXmlText</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * initValue ) : <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a> (<a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>::TINYXML_TEXT)\n<a name=\"l01221\"></a>01221     {\n<a name=\"l01222\"></a>01222         <a class=\"code\" href=\"classTiXmlNode.html#a2a38329ca5d3f28f98ce932b8299ae90\" title=\"Changes the value of the node.\">SetValue</a>( initValue );\n<a name=\"l01223\"></a>01223         cdata = <span class=\"keyword\">false</span>;\n<a name=\"l01224\"></a>01224     }\n<a name=\"l01225\"></a>01225     <span class=\"keyword\">virtual</span> ~<a class=\"code\" href=\"classTiXmlText.html\" title=\"XML text.\">TiXmlText</a>() {}\n<a name=\"l01226\"></a>01226 \n<a name=\"l01227\"></a>01227 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l01229\"></a><a class=\"code\" href=\"classTiXmlText.html#a439792f6183a3d3fb6f2bc2b16fa5691\">01229</a> <span class=\"preprocessor\">    TiXmlText( const std::string&amp; initValue ) : TiXmlNode (TiXmlNode::TINYXML_TEXT)</span>\n<a name=\"l01230\"></a>01230 <span class=\"preprocessor\"></span>    {\n<a name=\"l01231\"></a>01231         <a class=\"code\" href=\"classTiXmlNode.html#a2a38329ca5d3f28f98ce932b8299ae90\" title=\"Changes the value of the node.\">SetValue</a>( initValue );\n<a name=\"l01232\"></a>01232         cdata = <span class=\"keyword\">false</span>;\n<a name=\"l01233\"></a>01233     }\n<a name=\"l01234\"></a>01234 <span class=\"preprocessor\">    #endif</span>\n<a name=\"l01235\"></a>01235 <span class=\"preprocessor\"></span>\n<a name=\"l01236\"></a>01236     <a class=\"code\" href=\"classTiXmlText.html#af659e77c6b87d684827f35a8f4895960\" title=\"Constructor for text element.\">TiXmlText</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlText.html\" title=\"XML text.\">TiXmlText</a>&amp; copy ) : <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>( <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>::TINYXML_TEXT )   { copy.CopyTo( <span class=\"keyword\">this</span> ); }\n<a name=\"l01237\"></a>01237     <a class=\"code\" href=\"classTiXmlText.html\" title=\"XML text.\">TiXmlText</a>&amp; operator=( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlText.html\" title=\"XML text.\">TiXmlText</a>&amp; base )                               { base.CopyTo( <span class=\"keyword\">this</span> ); <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>; }\n<a name=\"l01238\"></a>01238 \n<a name=\"l01239\"></a>01239     <span class=\"comment\">// Write this text object to a FILE stream.</span>\n<a name=\"l01240\"></a>01240     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlText.html#a0cafbf6f236c7f02d12b2bffc2b7976b\" title=\"All TinyXml classes can print themselves to a filestream or the string class (TiXmlString...\">Print</a>( FILE* cfile, <span class=\"keywordtype\">int</span> depth ) <span class=\"keyword\">const</span>;\n<a name=\"l01241\"></a>01241 \n<a name=\"l01243\"></a><a class=\"code\" href=\"classTiXmlText.html#ad1a6a6b83fa2271022dd97c072a2b586\">01243</a>     <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlText.html#ad1a6a6b83fa2271022dd97c072a2b586\" title=\"Queries whether this represents text using a CDATA section.\">CDATA</a>()<span class=\"keyword\"> const              </span>{ <span class=\"keywordflow\">return</span> cdata; }\n<a name=\"l01245\"></a><a class=\"code\" href=\"classTiXmlText.html#acb17ff7c5d09b2c839393445a3de5ea9\">01245</a>     <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlText.html#acb17ff7c5d09b2c839393445a3de5ea9\" title=\"Turns on or off a CDATA representation of text.\">SetCDATA</a>( <span class=\"keywordtype\">bool</span> _cdata )    { cdata = _cdata; }\n<a name=\"l01246\"></a>01246 \n<a name=\"l01247\"></a>01247     <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* Parse( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* p, TiXmlParsingData* data, TiXmlEncoding encoding );\n<a name=\"l01248\"></a>01248 \n<a name=\"l01249\"></a><a class=\"code\" href=\"classTiXmlText.html#a895bf34ffad17f7439ab2a52b9651648\">01249</a>     <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlText.html\" title=\"XML text.\">TiXmlText</a>* <a class=\"code\" href=\"classTiXmlText.html#a895bf34ffad17f7439ab2a52b9651648\" title=\"Cast to a more defined type. Will return null not of the requested type.\">ToText</a>()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>; } \n<a name=\"l01250\"></a><a class=\"code\" href=\"classTiXmlText.html#ae7c3a8fd3e4dbf6c0c4363a943d72f5b\">01250</a>     <span class=\"keyword\">virtual</span> <a class=\"code\" href=\"classTiXmlText.html\" title=\"XML text.\">TiXmlText</a>*       <a class=\"code\" href=\"classTiXmlText.html#ae7c3a8fd3e4dbf6c0c4363a943d72f5b\" title=\"Cast to a more defined type. Will return null not of the requested type.\">ToText</a>()       { <span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>; } \n<a name=\"l01251\"></a>01251 \n<a name=\"l01254\"></a>01254     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlText.html#a8483d4415ce9de6c4fa8f63d067d5de6\" title=\"Walk the XML tree visiting this node and all of its children.\">Accept</a>( <a class=\"code\" href=\"classTiXmlVisitor.html\" title=\"Implements the interface to the &amp;quot;Visitor pattern&amp;quot; (see the Accept() method...\">TiXmlVisitor</a>* content ) <span class=\"keyword\">const</span>;\n<a name=\"l01255\"></a>01255 \n<a name=\"l01256\"></a>01256 <span class=\"keyword\">protected</span> :\n<a name=\"l01258\"></a>01258     <span class=\"keyword\">virtual</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlText.html#a0c411e93a27537369479d034cc82da3b\" title=\"[internal use] Creates a new Element and returns it.\">Clone</a>() <span class=\"keyword\">const</span>;\n<a name=\"l01259\"></a>01259     <span class=\"keywordtype\">void</span> CopyTo( <a class=\"code\" href=\"classTiXmlText.html\" title=\"XML text.\">TiXmlText</a>* target ) <span class=\"keyword\">const</span>;\n<a name=\"l01260\"></a>01260 \n<a name=\"l01261\"></a>01261     <span class=\"keywordtype\">bool</span> Blank() <span class=\"keyword\">const</span>; <span class=\"comment\">// returns true if all white space and new lines</span>\n<a name=\"l01262\"></a>01262     <span class=\"comment\">// [internal use]</span>\n<a name=\"l01263\"></a>01263 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l01264\"></a>01264 <span class=\"preprocessor\"></span>    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> StreamIn( std::istream * in, TIXML_STRING * tag );\n<a name=\"l01265\"></a>01265 <span class=\"preprocessor\">    #endif</span>\n<a name=\"l01266\"></a>01266 <span class=\"preprocessor\"></span>\n<a name=\"l01267\"></a>01267 <span class=\"keyword\">private</span>:\n<a name=\"l01268\"></a>01268     <span class=\"keywordtype\">bool</span> cdata;         <span class=\"comment\">// true if this should be input and output as a CDATA style text element</span>\n<a name=\"l01269\"></a>01269 };\n<a name=\"l01270\"></a>01270 \n<a name=\"l01271\"></a>01271 \n<a name=\"l01285\"></a><a class=\"code\" href=\"classTiXmlDeclaration.html\">01285</a> <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlDeclaration.html\" title=\"In correct XML the declaration is the first entry in the file.\">TiXmlDeclaration</a> : <span class=\"keyword\">public</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>\n<a name=\"l01286\"></a>01286 {\n<a name=\"l01287\"></a>01287 <span class=\"keyword\">public</span>:\n<a name=\"l01289\"></a><a class=\"code\" href=\"classTiXmlDeclaration.html#aa0484d059bea0ea1acb47c9094382d79\">01289</a>     <a class=\"code\" href=\"classTiXmlDeclaration.html#aa0484d059bea0ea1acb47c9094382d79\" title=\"Construct an empty declaration.\">TiXmlDeclaration</a>()   : <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>( <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>::TINYXML_DECLARATION ) {}\n<a name=\"l01290\"></a>01290 \n<a name=\"l01291\"></a>01291 <span class=\"preprocessor\">#ifdef TIXML_USE_STL</span>\n<a name=\"l01293\"></a>01293 <span class=\"preprocessor\">    TiXmlDeclaration(   const std::string&amp; _version,</span>\n<a name=\"l01294\"></a>01294 <span class=\"preprocessor\"></span>                        <span class=\"keyword\">const</span> std::string&amp; _encoding,\n<a name=\"l01295\"></a>01295                         <span class=\"keyword\">const</span> std::string&amp; _standalone );\n<a name=\"l01296\"></a>01296 <span class=\"preprocessor\">#endif</span>\n<a name=\"l01297\"></a>01297 <span class=\"preprocessor\"></span>\n<a name=\"l01299\"></a>01299     <a class=\"code\" href=\"classTiXmlDeclaration.html#aa0484d059bea0ea1acb47c9094382d79\" title=\"Construct an empty declaration.\">TiXmlDeclaration</a>(   <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* _version,\n<a name=\"l01300\"></a>01300                         <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* _encoding,\n<a name=\"l01301\"></a>01301                         <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* _standalone );\n<a name=\"l01302\"></a>01302 \n<a name=\"l01303\"></a>01303     <a class=\"code\" href=\"classTiXmlDeclaration.html#aa0484d059bea0ea1acb47c9094382d79\" title=\"Construct an empty declaration.\">TiXmlDeclaration</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlDeclaration.html\" title=\"In correct XML the declaration is the first entry in the file.\">TiXmlDeclaration</a>&amp; copy );\n<a name=\"l01304\"></a>01304     <a class=\"code\" href=\"classTiXmlDeclaration.html\" title=\"In correct XML the declaration is the first entry in the file.\">TiXmlDeclaration</a>&amp; operator=( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlDeclaration.html\" title=\"In correct XML the declaration is the first entry in the file.\">TiXmlDeclaration</a>&amp; copy );\n<a name=\"l01305\"></a>01305 \n<a name=\"l01306\"></a>01306     <span class=\"keyword\">virtual</span> ~<a class=\"code\" href=\"classTiXmlDeclaration.html\" title=\"In correct XML the declaration is the first entry in the file.\">TiXmlDeclaration</a>() {}\n<a name=\"l01307\"></a>01307 \n<a name=\"l01309\"></a><a class=\"code\" href=\"classTiXmlDeclaration.html#a02ee557b1a4545c3219ed377c103ec76\">01309</a>     <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> *<a class=\"code\" href=\"classTiXmlDeclaration.html#a02ee557b1a4545c3219ed377c103ec76\" title=\"Version. Will return an empty string if none was found.\">Version</a>()<span class=\"keyword\"> const         </span>{ <span class=\"keywordflow\">return</span> version.c_str (); }\n<a name=\"l01311\"></a><a class=\"code\" href=\"classTiXmlDeclaration.html#a5d974231f9e9a2f0542f15f3a46cdb76\">01311</a>     <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> *<a class=\"code\" href=\"classTiXmlDeclaration.html#a5d974231f9e9a2f0542f15f3a46cdb76\" title=\"Encoding. Will return an empty string if none was found.\">Encoding</a>()<span class=\"keyword\"> const        </span>{ <span class=\"keywordflow\">return</span> encoding.c_str (); }\n<a name=\"l01313\"></a><a class=\"code\" href=\"classTiXmlDeclaration.html#a9ff06afc033d7ef730ec7c6825b97ad9\">01313</a>     <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> *<a class=\"code\" href=\"classTiXmlDeclaration.html#a9ff06afc033d7ef730ec7c6825b97ad9\" title=\"Is this a standalone document?\">Standalone</a>()<span class=\"keyword\"> const      </span>{ <span class=\"keywordflow\">return</span> standalone.c_str (); }\n<a name=\"l01314\"></a>01314 \n<a name=\"l01316\"></a>01316     <span class=\"keyword\">virtual</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlDeclaration.html#a7cf459186040141cda7a180a6585ce2e\" title=\"Creates a copy of this Declaration and returns it.\">Clone</a>() <span class=\"keyword\">const</span>;\n<a name=\"l01317\"></a>01317     <span class=\"comment\">// Print this declaration to a FILE stream.</span>\n<a name=\"l01318\"></a>01318     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> Print( FILE* cfile, <span class=\"keywordtype\">int</span> depth, TIXML_STRING* str ) <span class=\"keyword\">const</span>;\n<a name=\"l01319\"></a><a class=\"code\" href=\"classTiXmlDeclaration.html#abf6303db4bd05b5be554036817ff1cb4\">01319</a>     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlDeclaration.html#abf6303db4bd05b5be554036817ff1cb4\" title=\"All TinyXml classes can print themselves to a filestream or the string class (TiXmlString...\">Print</a>( FILE* cfile, <span class=\"keywordtype\">int</span> depth )<span class=\"keyword\"> const </span>{\n<a name=\"l01320\"></a>01320         Print( cfile, depth, 0 );\n<a name=\"l01321\"></a>01321     }\n<a name=\"l01322\"></a>01322 \n<a name=\"l01323\"></a>01323     <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* Parse( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* p, TiXmlParsingData* data, TiXmlEncoding encoding );\n<a name=\"l01324\"></a>01324 \n<a name=\"l01325\"></a><a class=\"code\" href=\"classTiXmlDeclaration.html#a1e085d3fefd1dbf5ccdbff729931a967\">01325</a>     <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlDeclaration.html\" title=\"In correct XML the declaration is the first entry in the file.\">TiXmlDeclaration</a>* <a class=\"code\" href=\"classTiXmlDeclaration.html#a1e085d3fefd1dbf5ccdbff729931a967\" title=\"Cast to a more defined type. Will return null not of the requested type.\">ToDeclaration</a>()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>; } \n<a name=\"l01326\"></a><a class=\"code\" href=\"classTiXmlDeclaration.html#a6bd3d1daddcaeb9543c24bfd090969ce\">01326</a>     <span class=\"keyword\">virtual</span> <a class=\"code\" href=\"classTiXmlDeclaration.html\" title=\"In correct XML the declaration is the first entry in the file.\">TiXmlDeclaration</a>*       <a class=\"code\" href=\"classTiXmlDeclaration.html#a6bd3d1daddcaeb9543c24bfd090969ce\" title=\"Cast to a more defined type. Will return null not of the requested type.\">ToDeclaration</a>()       { <span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>; } \n<a name=\"l01327\"></a>01327 \n<a name=\"l01330\"></a>01330     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlDeclaration.html#a22315a535983b86535cdba3458669e3e\" title=\"Walk the XML tree visiting this node and all of its children.\">Accept</a>( <a class=\"code\" href=\"classTiXmlVisitor.html\" title=\"Implements the interface to the &amp;quot;Visitor pattern&amp;quot; (see the Accept() method...\">TiXmlVisitor</a>* visitor ) <span class=\"keyword\">const</span>;\n<a name=\"l01331\"></a>01331 \n<a name=\"l01332\"></a>01332 <span class=\"keyword\">protected</span>:\n<a name=\"l01333\"></a>01333     <span class=\"keywordtype\">void</span> CopyTo( <a class=\"code\" href=\"classTiXmlDeclaration.html\" title=\"In correct XML the declaration is the first entry in the file.\">TiXmlDeclaration</a>* target ) <span class=\"keyword\">const</span>;\n<a name=\"l01334\"></a>01334     <span class=\"comment\">// used to be public</span>\n<a name=\"l01335\"></a>01335 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l01336\"></a>01336 <span class=\"preprocessor\"></span>    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> StreamIn( std::istream * in, TIXML_STRING * tag );\n<a name=\"l01337\"></a>01337 <span class=\"preprocessor\">    #endif</span>\n<a name=\"l01338\"></a>01338 <span class=\"preprocessor\"></span>\n<a name=\"l01339\"></a>01339 <span class=\"keyword\">private</span>:\n<a name=\"l01340\"></a>01340 \n<a name=\"l01341\"></a>01341     TIXML_STRING version;\n<a name=\"l01342\"></a>01342     TIXML_STRING encoding;\n<a name=\"l01343\"></a>01343     TIXML_STRING standalone;\n<a name=\"l01344\"></a>01344 };\n<a name=\"l01345\"></a>01345 \n<a name=\"l01346\"></a>01346 \n<a name=\"l01354\"></a><a class=\"code\" href=\"classTiXmlUnknown.html\">01354</a> <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlUnknown.html\" title=\"Any tag that tinyXml doesn&amp;#39;t recognize is saved as an unknown.\">TiXmlUnknown</a> : <span class=\"keyword\">public</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>\n<a name=\"l01355\"></a>01355 {\n<a name=\"l01356\"></a>01356 <span class=\"keyword\">public</span>:\n<a name=\"l01357\"></a>01357     <a class=\"code\" href=\"classTiXmlUnknown.html\" title=\"Any tag that tinyXml doesn&amp;#39;t recognize is saved as an unknown.\">TiXmlUnknown</a>() : <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>( TiXmlNode::TINYXML_UNKNOWN )    {}\n<a name=\"l01358\"></a>01358     <span class=\"keyword\">virtual</span> ~<a class=\"code\" href=\"classTiXmlUnknown.html\" title=\"Any tag that tinyXml doesn&amp;#39;t recognize is saved as an unknown.\">TiXmlUnknown</a>() {}\n<a name=\"l01359\"></a>01359 \n<a name=\"l01360\"></a>01360     <a class=\"code\" href=\"classTiXmlUnknown.html\" title=\"Any tag that tinyXml doesn&amp;#39;t recognize is saved as an unknown.\">TiXmlUnknown</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlUnknown.html\" title=\"Any tag that tinyXml doesn&amp;#39;t recognize is saved as an unknown.\">TiXmlUnknown</a>&amp; copy ) : <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>( TiXmlNode::TINYXML_UNKNOWN )      { copy.CopyTo( <span class=\"keyword\">this</span> ); }\n<a name=\"l01361\"></a>01361     <a class=\"code\" href=\"classTiXmlUnknown.html\" title=\"Any tag that tinyXml doesn&amp;#39;t recognize is saved as an unknown.\">TiXmlUnknown</a>&amp; operator=( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlUnknown.html\" title=\"Any tag that tinyXml doesn&amp;#39;t recognize is saved as an unknown.\">TiXmlUnknown</a>&amp; copy )                                     { copy.CopyTo( <span class=\"keyword\">this</span> ); <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>; }\n<a name=\"l01362\"></a>01362 \n<a name=\"l01364\"></a>01364     <span class=\"keyword\">virtual</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlUnknown.html#a0960bb7428b3f341da46244229604d73\" title=\"Creates a copy of this Unknown and returns it.\">Clone</a>() <span class=\"keyword\">const</span>;\n<a name=\"l01365\"></a>01365     <span class=\"comment\">// Print this Unknown to a FILE stream.</span>\n<a name=\"l01366\"></a>01366     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlUnknown.html#a31ba089a40fb5a1869750fce09b0bacb\" title=\"All TinyXml classes can print themselves to a filestream or the string class (TiXmlString...\">Print</a>( FILE* cfile, <span class=\"keywordtype\">int</span> depth ) <span class=\"keyword\">const</span>;\n<a name=\"l01367\"></a>01367 \n<a name=\"l01368\"></a>01368     <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* Parse( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* p, TiXmlParsingData* data, TiXmlEncoding encoding );\n<a name=\"l01369\"></a>01369 \n<a name=\"l01370\"></a><a class=\"code\" href=\"classTiXmlUnknown.html#ab0313e5fe77987d746ac1a97a254419d\">01370</a>     <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlUnknown.html\" title=\"Any tag that tinyXml doesn&amp;#39;t recognize is saved as an unknown.\">TiXmlUnknown</a>*     <a class=\"code\" href=\"classTiXmlUnknown.html#ab0313e5fe77987d746ac1a97a254419d\" title=\"Cast to a more defined type. Will return null not of the requested type.\">ToUnknown</a>()<span class=\"keyword\">     const   </span>{ <span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>; } \n<a name=\"l01371\"></a><a class=\"code\" href=\"classTiXmlUnknown.html#a67c9fd22940e8c47f706a72cdd2e332c\">01371</a>     <span class=\"keyword\">virtual</span> <a class=\"code\" href=\"classTiXmlUnknown.html\" title=\"Any tag that tinyXml doesn&amp;#39;t recognize is saved as an unknown.\">TiXmlUnknown</a>*           <a class=\"code\" href=\"classTiXmlUnknown.html#a67c9fd22940e8c47f706a72cdd2e332c\" title=\"Cast to a more defined type. Will return null not of the requested type.\">ToUnknown</a>()             { <span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>; } \n<a name=\"l01372\"></a>01372 \n<a name=\"l01375\"></a>01375     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlUnknown.html#ad7122e5135581b3c832a1a3217760a93\" title=\"Walk the XML tree visiting this node and all of its children.\">Accept</a>( <a class=\"code\" href=\"classTiXmlVisitor.html\" title=\"Implements the interface to the &amp;quot;Visitor pattern&amp;quot; (see the Accept() method...\">TiXmlVisitor</a>* content ) <span class=\"keyword\">const</span>;\n<a name=\"l01376\"></a>01376 \n<a name=\"l01377\"></a>01377 <span class=\"keyword\">protected</span>:\n<a name=\"l01378\"></a>01378     <span class=\"keywordtype\">void</span> CopyTo( <a class=\"code\" href=\"classTiXmlUnknown.html\" title=\"Any tag that tinyXml doesn&amp;#39;t recognize is saved as an unknown.\">TiXmlUnknown</a>* target ) <span class=\"keyword\">const</span>;\n<a name=\"l01379\"></a>01379 \n<a name=\"l01380\"></a>01380 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l01381\"></a>01381 <span class=\"preprocessor\"></span>    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> StreamIn( std::istream * in, TIXML_STRING * tag );\n<a name=\"l01382\"></a>01382 <span class=\"preprocessor\">    #endif</span>\n<a name=\"l01383\"></a>01383 <span class=\"preprocessor\"></span>\n<a name=\"l01384\"></a>01384 <span class=\"keyword\">private</span>:\n<a name=\"l01385\"></a>01385 \n<a name=\"l01386\"></a>01386 };\n<a name=\"l01387\"></a>01387 \n<a name=\"l01388\"></a>01388 \n<a name=\"l01393\"></a><a class=\"code\" href=\"classTiXmlDocument.html\">01393</a> <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a> : <span class=\"keyword\">public</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>\n<a name=\"l01394\"></a>01394 {\n<a name=\"l01395\"></a>01395 <span class=\"keyword\">public</span>:\n<a name=\"l01397\"></a>01397     <a class=\"code\" href=\"classTiXmlDocument.html#a9f5e84335708fde98400230f9f12659c\" title=\"Create an empty document, that has no name.\">TiXmlDocument</a>();\n<a name=\"l01399\"></a>01399     <a class=\"code\" href=\"classTiXmlDocument.html#a9f5e84335708fde98400230f9f12659c\" title=\"Create an empty document, that has no name.\">TiXmlDocument</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * documentName );\n<a name=\"l01400\"></a>01400 \n<a name=\"l01401\"></a>01401 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l01403\"></a>01403 <span class=\"preprocessor\">    TiXmlDocument( const std::string&amp; documentName );</span>\n<a name=\"l01404\"></a>01404 <span class=\"preprocessor\"></span><span class=\"preprocessor\">    #endif</span>\n<a name=\"l01405\"></a>01405 <span class=\"preprocessor\"></span>\n<a name=\"l01406\"></a>01406     <a class=\"code\" href=\"classTiXmlDocument.html#a9f5e84335708fde98400230f9f12659c\" title=\"Create an empty document, that has no name.\">TiXmlDocument</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a>&amp; copy );\n<a name=\"l01407\"></a>01407     <a class=\"code\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a>&amp; operator=( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a>&amp; copy );\n<a name=\"l01408\"></a>01408 \n<a name=\"l01409\"></a>01409     <span class=\"keyword\">virtual</span> ~<a class=\"code\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a>() {}\n<a name=\"l01410\"></a>01410 \n<a name=\"l01415\"></a>01415     <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlDocument.html#a4c852a889c02cf251117fd1d9fe1845f\" title=\"Load a file using the current document value.\">LoadFile</a>( TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );\n<a name=\"l01417\"></a>01417     <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlDocument.html#a21c0aeb0d0a720169ad4ac89523ebe93\" title=\"Save a file using the current document value. Returns true if successful.\">SaveFile</a>() <span class=\"keyword\">const</span>;\n<a name=\"l01419\"></a>01419     <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlDocument.html#a4c852a889c02cf251117fd1d9fe1845f\" title=\"Load a file using the current document value.\">LoadFile</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );\n<a name=\"l01421\"></a>01421     <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlDocument.html#a21c0aeb0d0a720169ad4ac89523ebe93\" title=\"Save a file using the current document value. Returns true if successful.\">SaveFile</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * filename ) <span class=\"keyword\">const</span>;\n<a name=\"l01427\"></a>01427     <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlDocument.html#a4c852a889c02cf251117fd1d9fe1845f\" title=\"Load a file using the current document value.\">LoadFile</a>( FILE*, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );\n<a name=\"l01429\"></a>01429     <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlDocument.html#a21c0aeb0d0a720169ad4ac89523ebe93\" title=\"Save a file using the current document value. Returns true if successful.\">SaveFile</a>( FILE* ) <span class=\"keyword\">const</span>;\n<a name=\"l01430\"></a>01430 \n<a name=\"l01431\"></a>01431 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l01432\"></a><a class=\"code\" href=\"classTiXmlDocument.html#a18ae6ed34fed7991ebc220862dfac884\">01432</a> <span class=\"preprocessor\"></span>    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlDocument.html#a4c852a889c02cf251117fd1d9fe1845f\" title=\"Load a file using the current document value.\">LoadFile</a>( <span class=\"keyword\">const</span> std::string&amp; filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING )           \n<a name=\"l01433\"></a>01433     {\n<a name=\"l01434\"></a>01434         <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlDocument.html#a4c852a889c02cf251117fd1d9fe1845f\" title=\"Load a file using the current document value.\">LoadFile</a>( filename.c_str(), encoding );\n<a name=\"l01435\"></a>01435     }\n<a name=\"l01436\"></a><a class=\"code\" href=\"classTiXmlDocument.html#a3d4fae0463f3f03679ba0b7cf6f2df52\">01436</a>     <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlDocument.html#a21c0aeb0d0a720169ad4ac89523ebe93\" title=\"Save a file using the current document value. Returns true if successful.\">SaveFile</a>( <span class=\"keyword\">const</span> std::string&amp; filename ) <span class=\"keyword\">const</span>      \n<a name=\"l01437\"></a>01437     {\n<a name=\"l01438\"></a>01438         <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlDocument.html#a21c0aeb0d0a720169ad4ac89523ebe93\" title=\"Save a file using the current document value. Returns true if successful.\">SaveFile</a>( filename.c_str() );\n<a name=\"l01439\"></a>01439     }\n<a name=\"l01440\"></a>01440 <span class=\"preprocessor\">    #endif</span>\n<a name=\"l01441\"></a>01441 <span class=\"preprocessor\"></span>\n<a name=\"l01446\"></a>01446     <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"classTiXmlDocument.html#a17ebabe36926ef398e78dec0d0ad0378\" title=\"Parse the given null terminated block of xml data.\">Parse</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* p, TiXmlParsingData* data = 0, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );\n<a name=\"l01447\"></a>01447 \n<a name=\"l01452\"></a><a class=\"code\" href=\"classTiXmlDocument.html#ad09d17927f908f40efb406af2fb873be\">01452</a>     <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>* <a class=\"code\" href=\"classTiXmlDocument.html#ad09d17927f908f40efb406af2fb873be\" title=\"Get the root element -- the only top level element -- of the document.\">RootElement</a>()<span class=\"keyword\"> const     </span>{ <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlNode.html#af4fb652f6bd79ae0d5ce7d0f7d3c0fba\" title=\"Convenience function to get through elements.\">FirstChildElement</a>(); }\n<a name=\"l01453\"></a>01453     <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>* <a class=\"code\" href=\"classTiXmlDocument.html#ad09d17927f908f40efb406af2fb873be\" title=\"Get the root element -- the only top level element -- of the document.\">RootElement</a>()                 { <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlNode.html#af4fb652f6bd79ae0d5ce7d0f7d3c0fba\" title=\"Convenience function to get through elements.\">FirstChildElement</a>(); }\n<a name=\"l01454\"></a>01454 \n<a name=\"l01460\"></a><a class=\"code\" href=\"classTiXmlDocument.html#a6dfc01a6e5d58e56acd537dfd3bdeb29\">01460</a>     <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlDocument.html#a6dfc01a6e5d58e56acd537dfd3bdeb29\" title=\"If an error occurs, Error will be set to true.\">Error</a>()<span class=\"keyword\"> const                      </span>{ <span class=\"keywordflow\">return</span> error; }\n<a name=\"l01461\"></a>01461 \n<a name=\"l01463\"></a><a class=\"code\" href=\"classTiXmlDocument.html#a9d0f689f6e09ea494ea547be8d79c25e\">01463</a>     <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * <a class=\"code\" href=\"classTiXmlDocument.html#a9d0f689f6e09ea494ea547be8d79c25e\" title=\"Contains a textual (english) description of the error if one occurs.\">ErrorDesc</a>()<span class=\"keyword\"> const  </span>{ <span class=\"keywordflow\">return</span> errorDesc.c_str (); }\n<a name=\"l01464\"></a>01464 \n<a name=\"l01468\"></a><a class=\"code\" href=\"classTiXmlDocument.html#af96fc2f3f9ec6422782bfe916c9e778f\">01468</a>     <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classTiXmlDocument.html#af96fc2f3f9ec6422782bfe916c9e778f\" title=\"Generally, you probably want the error string ( ErrorDesc() ).\">ErrorId</a>()<span class=\"keyword\">   const               </span>{ <span class=\"keywordflow\">return</span> errorId; }\n<a name=\"l01469\"></a>01469 \n<a name=\"l01477\"></a><a class=\"code\" href=\"classTiXmlDocument.html#af30efc75e804aa2e92fb8be3a8cb676e\">01477</a>     <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classTiXmlDocument.html#af30efc75e804aa2e92fb8be3a8cb676e\" title=\"Returns the location (if known) of the error.\">ErrorRow</a>()<span class=\"keyword\"> const    </span>{ <span class=\"keywordflow\">return</span> errorLocation.row+1; }\n<a name=\"l01478\"></a><a class=\"code\" href=\"classTiXmlDocument.html#aa90bc630ee5203c6109ca5fad3323649\">01478</a>     <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classTiXmlDocument.html#aa90bc630ee5203c6109ca5fad3323649\" title=\"The column where the error occured. See ErrorRow().\">ErrorCol</a>()<span class=\"keyword\"> const    </span>{ <span class=\"keywordflow\">return</span> errorLocation.col+1; } \n<a name=\"l01479\"></a>01479 \n<a name=\"l01504\"></a><a class=\"code\" href=\"classTiXmlDocument.html#a51dac56316f89b35bdb7d0d433ba988e\">01504</a>     <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlDocument.html#a51dac56316f89b35bdb7d0d433ba988e\" title=\"SetTabSize() allows the error reporting functions (ErrorRow() and ErrorCol()) to...\">SetTabSize</a>( <span class=\"keywordtype\">int</span> _tabsize )     { tabsize = _tabsize; }\n<a name=\"l01505\"></a>01505 \n<a name=\"l01506\"></a>01506     <span class=\"keywordtype\">int</span> TabSize()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> tabsize; }\n<a name=\"l01507\"></a>01507 \n<a name=\"l01511\"></a><a class=\"code\" href=\"classTiXmlDocument.html#ac66b8c28db86363315712a3574e87c35\">01511</a>     <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlDocument.html#ac66b8c28db86363315712a3574e87c35\" title=\"If you have handled the error, it can be reset with this call.\">ClearError</a>()                       {   error = <span class=\"keyword\">false</span>; \n<a name=\"l01512\"></a>01512                                                 errorId = 0; \n<a name=\"l01513\"></a>01513                                                 errorDesc = <span class=\"stringliteral\">&quot;&quot;</span>; \n<a name=\"l01514\"></a>01514                                                 errorLocation.row = errorLocation.col = 0; \n<a name=\"l01515\"></a>01515                                                 <span class=\"comment\">//errorLocation.last = 0; </span>\n<a name=\"l01516\"></a>01516                                             }\n<a name=\"l01517\"></a>01517 \n<a name=\"l01519\"></a><a class=\"code\" href=\"classTiXmlDocument.html#af08389ec70ee9b2de7f800e206a18510\">01519</a>     <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlDocument.html#af08389ec70ee9b2de7f800e206a18510\" title=\"Write the document to standard out using formatted printing (&amp;quot;pretty print&amp;quot;)...\">Print</a>()<span class=\"keyword\"> const                      </span>{ <a class=\"code\" href=\"classTiXmlDocument.html#af08389ec70ee9b2de7f800e206a18510\" title=\"Write the document to standard out using formatted printing (&amp;quot;pretty print&amp;quot;)...\">Print</a>( stdout, 0 ); }\n<a name=\"l01520\"></a>01520 \n<a name=\"l01521\"></a>01521     <span class=\"comment\">/* Write the document to a string using formatted printing (&quot;pretty print&quot;). This</span>\n<a name=\"l01522\"></a>01522 <span class=\"comment\">        will allocate a character array (new char[]) and return it as a pointer. The</span>\n<a name=\"l01523\"></a>01523 <span class=\"comment\">        calling code pust call delete[] on the return char* to avoid a memory leak.</span>\n<a name=\"l01524\"></a>01524 <span class=\"comment\">    */</span>\n<a name=\"l01525\"></a>01525     <span class=\"comment\">//char* PrintToMemory() const; </span>\n<a name=\"l01526\"></a>01526 \n<a name=\"l01528\"></a>01528     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlDocument.html#af08389ec70ee9b2de7f800e206a18510\" title=\"Write the document to standard out using formatted printing (&amp;quot;pretty print&amp;quot;)...\">Print</a>( FILE* cfile, <span class=\"keywordtype\">int</span> depth = 0 ) <span class=\"keyword\">const</span>;\n<a name=\"l01529\"></a>01529     <span class=\"comment\">// [internal use]</span>\n<a name=\"l01530\"></a>01530     <span class=\"keywordtype\">void</span> SetError( <span class=\"keywordtype\">int</span> err, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* errorLocation, TiXmlParsingData* prevData, TiXmlEncoding encoding );\n<a name=\"l01531\"></a>01531 \n<a name=\"l01532\"></a><a class=\"code\" href=\"classTiXmlDocument.html#a1dc977bde3e4fe85a8eb9d88a35ef5a4\">01532</a>     <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a>*    <a class=\"code\" href=\"classTiXmlDocument.html#a1dc977bde3e4fe85a8eb9d88a35ef5a4\" title=\"Cast to a more defined type. Will return null not of the requested type.\">ToDocument</a>()<span class=\"keyword\">    const </span>{ <span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>; } \n<a name=\"l01533\"></a><a class=\"code\" href=\"classTiXmlDocument.html#a1025d942a1f328fd742d545e37efdd42\">01533</a>     <span class=\"keyword\">virtual</span> <a class=\"code\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a>*          <a class=\"code\" href=\"classTiXmlDocument.html#a1025d942a1f328fd742d545e37efdd42\" title=\"Cast to a more defined type. Will return null not of the requested type.\">ToDocument</a>()          { <span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>; } \n<a name=\"l01534\"></a>01534 \n<a name=\"l01537\"></a>01537     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlDocument.html#aa545aae325d9752ad64120bc4ecf939a\" title=\"Walk the XML tree visiting this node and all of its children.\">Accept</a>( <a class=\"code\" href=\"classTiXmlVisitor.html\" title=\"Implements the interface to the &amp;quot;Visitor pattern&amp;quot; (see the Accept() method...\">TiXmlVisitor</a>* content ) <span class=\"keyword\">const</span>;\n<a name=\"l01538\"></a>01538 \n<a name=\"l01539\"></a>01539 <span class=\"keyword\">protected</span> :\n<a name=\"l01540\"></a>01540     <span class=\"comment\">// [internal use]</span>\n<a name=\"l01541\"></a>01541     <span class=\"keyword\">virtual</span> <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlDocument.html#a4968661cab4a1f44a23329c6f8db1907\" title=\"Create an exact duplicate of this node and return it.\">Clone</a>() <span class=\"keyword\">const</span>;\n<a name=\"l01542\"></a>01542 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l01543\"></a>01543 <span class=\"preprocessor\"></span>    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> StreamIn( std::istream * in, TIXML_STRING * tag );\n<a name=\"l01544\"></a>01544 <span class=\"preprocessor\">    #endif</span>\n<a name=\"l01545\"></a>01545 <span class=\"preprocessor\"></span>\n<a name=\"l01546\"></a>01546 <span class=\"keyword\">private</span>:\n<a name=\"l01547\"></a>01547     <span class=\"keywordtype\">void</span> CopyTo( <a class=\"code\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a>* target ) <span class=\"keyword\">const</span>;\n<a name=\"l01548\"></a>01548 \n<a name=\"l01549\"></a>01549     <span class=\"keywordtype\">bool</span> error;\n<a name=\"l01550\"></a>01550     <span class=\"keywordtype\">int</span>  errorId;\n<a name=\"l01551\"></a>01551     TIXML_STRING errorDesc;\n<a name=\"l01552\"></a>01552     <span class=\"keywordtype\">int</span> tabsize;\n<a name=\"l01553\"></a>01553     TiXmlCursor errorLocation;\n<a name=\"l01554\"></a>01554     <span class=\"keywordtype\">bool</span> useMicrosoftBOM;       <span class=\"comment\">// the UTF-8 BOM were found when read. Note this, and try to write.</span>\n<a name=\"l01555\"></a>01555 };\n<a name=\"l01556\"></a>01556 \n<a name=\"l01557\"></a>01557 \n<a name=\"l01638\"></a><a class=\"code\" href=\"classTiXmlHandle.html\">01638</a> <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a>\n<a name=\"l01639\"></a>01639 {\n<a name=\"l01640\"></a>01640 <span class=\"keyword\">public</span>:\n<a name=\"l01642\"></a><a class=\"code\" href=\"classTiXmlHandle.html#aba18fd7bdefb942ecdea4bf4b8e29ec8\">01642</a>     <a class=\"code\" href=\"classTiXmlHandle.html#aba18fd7bdefb942ecdea4bf4b8e29ec8\" title=\"Create a handle from any node (at any depth of the tree.) This can be a null pointer...\">TiXmlHandle</a>( <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* _node )                 { this-&gt;node = _node; }\n<a name=\"l01644\"></a><a class=\"code\" href=\"classTiXmlHandle.html#a236d7855e1e56ccc7b980630c48c7fd7\">01644</a>     <a class=\"code\" href=\"classTiXmlHandle.html#a236d7855e1e56ccc7b980630c48c7fd7\" title=\"Copy constructor.\">TiXmlHandle</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a>&amp; ref )           { this-&gt;node = ref.node; }\n<a name=\"l01645\"></a>01645     <a class=\"code\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a> operator=( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a>&amp; ref ) { <span class=\"keywordflow\">if</span> ( &amp;ref != <span class=\"keyword\">this</span> ) this-&gt;node = ref.node; <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>; }\n<a name=\"l01646\"></a>01646 \n<a name=\"l01648\"></a>01648     <a class=\"code\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a> <a class=\"code\" href=\"classTiXmlHandle.html#acdb1faaf88a700b40ca2c8d9aee21139\" title=\"Return a handle to the first child node.\">FirstChild</a>() <span class=\"keyword\">const</span>;\n<a name=\"l01650\"></a>01650     <a class=\"code\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a> <a class=\"code\" href=\"classTiXmlHandle.html#acdb1faaf88a700b40ca2c8d9aee21139\" title=\"Return a handle to the first child node.\">FirstChild</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * value ) <span class=\"keyword\">const</span>;\n<a name=\"l01652\"></a>01652     <a class=\"code\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a> <a class=\"code\" href=\"classTiXmlHandle.html#a24d1112e995e937e4dddb202d4113d4a\" title=\"Return a handle to the first child element.\">FirstChildElement</a>() <span class=\"keyword\">const</span>;\n<a name=\"l01654\"></a>01654     <a class=\"code\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a> <a class=\"code\" href=\"classTiXmlHandle.html#a24d1112e995e937e4dddb202d4113d4a\" title=\"Return a handle to the first child element.\">FirstChildElement</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * value ) <span class=\"keyword\">const</span>;\n<a name=\"l01655\"></a>01655 \n<a name=\"l01659\"></a>01659     <a class=\"code\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a> <a class=\"code\" href=\"classTiXmlHandle.html#a072492b4be1acdb0db2d03cd8f71ccc4\" title=\"Return a handle to the &amp;quot;index&amp;quot; child with the given name.\">Child</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* value, <span class=\"keywordtype\">int</span> index ) <span class=\"keyword\">const</span>;\n<a name=\"l01663\"></a>01663     <a class=\"code\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a> <a class=\"code\" href=\"classTiXmlHandle.html#a072492b4be1acdb0db2d03cd8f71ccc4\" title=\"Return a handle to the &amp;quot;index&amp;quot; child with the given name.\">Child</a>( <span class=\"keywordtype\">int</span> index ) <span class=\"keyword\">const</span>;\n<a name=\"l01668\"></a>01668     <a class=\"code\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a> <a class=\"code\" href=\"classTiXmlHandle.html#a979a3f850984a176ee884e394c7eed2d\" title=\"Return a handle to the &amp;quot;index&amp;quot; child element with the given name.\">ChildElement</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* value, <span class=\"keywordtype\">int</span> index ) <span class=\"keyword\">const</span>;\n<a name=\"l01673\"></a>01673     <a class=\"code\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a> <a class=\"code\" href=\"classTiXmlHandle.html#a979a3f850984a176ee884e394c7eed2d\" title=\"Return a handle to the &amp;quot;index&amp;quot; child element with the given name.\">ChildElement</a>( <span class=\"keywordtype\">int</span> index ) <span class=\"keyword\">const</span>;\n<a name=\"l01674\"></a>01674 \n<a name=\"l01675\"></a>01675 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l01676\"></a>01676 <span class=\"preprocessor\"></span>    <a class=\"code\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a> <a class=\"code\" href=\"classTiXmlHandle.html#acdb1faaf88a700b40ca2c8d9aee21139\" title=\"Return a handle to the first child node.\">FirstChild</a>( <span class=\"keyword\">const</span> std::string&amp; _value )<span class=\"keyword\"> const               </span>{ <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlHandle.html#acdb1faaf88a700b40ca2c8d9aee21139\" title=\"Return a handle to the first child node.\">FirstChild</a>( _value.c_str() ); }\n<a name=\"l01677\"></a>01677     <a class=\"code\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a> <a class=\"code\" href=\"classTiXmlHandle.html#a24d1112e995e937e4dddb202d4113d4a\" title=\"Return a handle to the first child element.\">FirstChildElement</a>( <span class=\"keyword\">const</span> std::string&amp; _value )<span class=\"keyword\"> const        </span>{ <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlHandle.html#a24d1112e995e937e4dddb202d4113d4a\" title=\"Return a handle to the first child element.\">FirstChildElement</a>( _value.c_str() ); }\n<a name=\"l01678\"></a>01678 \n<a name=\"l01679\"></a>01679     <a class=\"code\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a> <a class=\"code\" href=\"classTiXmlHandle.html#a072492b4be1acdb0db2d03cd8f71ccc4\" title=\"Return a handle to the &amp;quot;index&amp;quot; child with the given name.\">Child</a>( <span class=\"keyword\">const</span> std::string&amp; _value, <span class=\"keywordtype\">int</span> index )<span class=\"keyword\"> const         </span>{ <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlHandle.html#a072492b4be1acdb0db2d03cd8f71ccc4\" title=\"Return a handle to the &amp;quot;index&amp;quot; child with the given name.\">Child</a>( _value.c_str(), index ); }\n<a name=\"l01680\"></a>01680     <a class=\"code\" href=\"classTiXmlHandle.html\" title=\"A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly...\">TiXmlHandle</a> <a class=\"code\" href=\"classTiXmlHandle.html#a979a3f850984a176ee884e394c7eed2d\" title=\"Return a handle to the &amp;quot;index&amp;quot; child element with the given name.\">ChildElement</a>( <span class=\"keyword\">const</span> std::string&amp; _value, <span class=\"keywordtype\">int</span> index )<span class=\"keyword\"> const  </span>{ <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlHandle.html#a979a3f850984a176ee884e394c7eed2d\" title=\"Return a handle to the &amp;quot;index&amp;quot; child element with the given name.\">ChildElement</a>( _value.c_str(), index ); }\n<a name=\"l01681\"></a>01681 <span class=\"preprocessor\">    #endif</span>\n<a name=\"l01682\"></a>01682 <span class=\"preprocessor\"></span>\n<a name=\"l01685\"></a><a class=\"code\" href=\"classTiXmlHandle.html#af678e5088e83be67baf76f699756f2c3\">01685</a>     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlHandle.html#af678e5088e83be67baf76f699756f2c3\" title=\"Return the handle as a TiXmlNode.\">ToNode</a>()<span class=\"keyword\"> const           </span>{ <span class=\"keywordflow\">return</span> node; } \n<a name=\"l01688\"></a><a class=\"code\" href=\"classTiXmlHandle.html#abc6e7ed383a5fe1e52b0c0004b457b9e\">01688</a>     <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>* <a class=\"code\" href=\"classTiXmlHandle.html#abc6e7ed383a5fe1e52b0c0004b457b9e\" title=\"Return the handle as a TiXmlElement.\">ToElement</a>()<span class=\"keyword\"> const     </span>{ <span class=\"keywordflow\">return</span> ( ( node &amp;&amp; node-&gt;ToElement() ) ? node-&gt;ToElement() : 0 ); }\n<a name=\"l01691\"></a><a class=\"code\" href=\"classTiXmlHandle.html#a4ac53a652296203a5b5e13854d923586\">01691</a>     <a class=\"code\" href=\"classTiXmlText.html\" title=\"XML text.\">TiXmlText</a>* <a class=\"code\" href=\"classTiXmlHandle.html#a4ac53a652296203a5b5e13854d923586\" title=\"Return the handle as a TiXmlText.\">ToText</a>()<span class=\"keyword\"> const           </span>{ <span class=\"keywordflow\">return</span> ( ( node &amp;&amp; node-&gt;ToText() ) ? node-&gt;ToText() : 0 ); }\n<a name=\"l01694\"></a><a class=\"code\" href=\"classTiXmlHandle.html#a1381c17507a130767b1e23afc93b3674\">01694</a>     <a class=\"code\" href=\"classTiXmlUnknown.html\" title=\"Any tag that tinyXml doesn&amp;#39;t recognize is saved as an unknown.\">TiXmlUnknown</a>* <a class=\"code\" href=\"classTiXmlHandle.html#a1381c17507a130767b1e23afc93b3674\" title=\"Return the handle as a TiXmlUnknown.\">ToUnknown</a>()<span class=\"keyword\"> const     </span>{ <span class=\"keywordflow\">return</span> ( ( node &amp;&amp; node-&gt;ToUnknown() ) ? node-&gt;ToUnknown() : 0 ); }\n<a name=\"l01695\"></a>01695 \n<a name=\"l01699\"></a><a class=\"code\" href=\"classTiXmlHandle.html#ab44b723a8dc9af72838a303c079d0376\">01699</a>     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* <a class=\"code\" href=\"classTiXmlHandle.html#ab44b723a8dc9af72838a303c079d0376\">Node</a>()<span class=\"keyword\"> const         </span>{ <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlHandle.html#af678e5088e83be67baf76f699756f2c3\" title=\"Return the handle as a TiXmlNode.\">ToNode</a>(); } \n<a name=\"l01703\"></a><a class=\"code\" href=\"classTiXmlHandle.html#acb5fe8388a526289ea65e817a51e05e7\">01703</a>     <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>* <a class=\"code\" href=\"classTiXmlHandle.html#acb5fe8388a526289ea65e817a51e05e7\">Element</a>()<span class=\"keyword\"> const   </span>{ <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlHandle.html#abc6e7ed383a5fe1e52b0c0004b457b9e\" title=\"Return the handle as a TiXmlElement.\">ToElement</a>(); }\n<a name=\"l01707\"></a><a class=\"code\" href=\"classTiXmlHandle.html#a9fc739c8a18d160006f82572fc143d13\">01707</a>     <a class=\"code\" href=\"classTiXmlText.html\" title=\"XML text.\">TiXmlText</a>* <a class=\"code\" href=\"classTiXmlHandle.html#a9fc739c8a18d160006f82572fc143d13\">Text</a>()<span class=\"keyword\"> const         </span>{ <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlHandle.html#a4ac53a652296203a5b5e13854d923586\" title=\"Return the handle as a TiXmlText.\">ToText</a>(); }\n<a name=\"l01711\"></a><a class=\"code\" href=\"classTiXmlHandle.html#a49675b74357ba2aae124657a9a1ef465\">01711</a>     <a class=\"code\" href=\"classTiXmlUnknown.html\" title=\"Any tag that tinyXml doesn&amp;#39;t recognize is saved as an unknown.\">TiXmlUnknown</a>* <a class=\"code\" href=\"classTiXmlHandle.html#a49675b74357ba2aae124657a9a1ef465\">Unknown</a>()<span class=\"keyword\"> const   </span>{ <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTiXmlHandle.html#a1381c17507a130767b1e23afc93b3674\" title=\"Return the handle as a TiXmlUnknown.\">ToUnknown</a>(); }\n<a name=\"l01712\"></a>01712 \n<a name=\"l01713\"></a>01713 <span class=\"keyword\">private</span>:\n<a name=\"l01714\"></a>01714     <a class=\"code\" href=\"classTiXmlNode.html\" title=\"The parent class for everything in the Document Object Model.\">TiXmlNode</a>* node;\n<a name=\"l01715\"></a>01715 };\n<a name=\"l01716\"></a>01716 \n<a name=\"l01717\"></a>01717 \n<a name=\"l01737\"></a><a class=\"code\" href=\"classTiXmlPrinter.html\">01737</a> <span class=\"keyword\">class </span><a class=\"code\" href=\"classTiXmlPrinter.html\" title=\"Print to memory functionality.\">TiXmlPrinter</a> : <span class=\"keyword\">public</span> <a class=\"code\" href=\"classTiXmlVisitor.html\" title=\"Implements the interface to the &amp;quot;Visitor pattern&amp;quot; (see the Accept() method...\">TiXmlVisitor</a>\n<a name=\"l01738\"></a>01738 {\n<a name=\"l01739\"></a>01739 <span class=\"keyword\">public</span>:\n<a name=\"l01740\"></a>01740     <a class=\"code\" href=\"classTiXmlPrinter.html\" title=\"Print to memory functionality.\">TiXmlPrinter</a>() : depth( 0 ), simpleTextPrint( <span class=\"keyword\">false</span> ),\n<a name=\"l01741\"></a>01741                      buffer(), indent( <span class=\"stringliteral\">&quot;    &quot;</span> ), lineBreak( <span class=\"stringliteral\">&quot;\\n&quot;</span> ) {}\n<a name=\"l01742\"></a>01742 \n<a name=\"l01743\"></a>01743     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlPrinter.html#a799f4f0388570cbb54c0d3c345fef7c1\" title=\"Visit a document.\">VisitEnter</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a>&amp; doc );\n<a name=\"l01744\"></a>01744     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlPrinter.html#a66b33edd76c538b462f789b797a4fdf2\" title=\"Visit a document.\">VisitExit</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlDocument.html\" title=\"Always the top level node.\">TiXmlDocument</a>&amp; doc );\n<a name=\"l01745\"></a>01745 \n<a name=\"l01746\"></a>01746     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlPrinter.html#a799f4f0388570cbb54c0d3c345fef7c1\" title=\"Visit a document.\">VisitEnter</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>&amp; element, <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a>* firstAttribute );\n<a name=\"l01747\"></a>01747     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlPrinter.html#a66b33edd76c538b462f789b797a4fdf2\" title=\"Visit a document.\">VisitExit</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlElement.html\" title=\"The element is a container class.\">TiXmlElement</a>&amp; element );\n<a name=\"l01748\"></a>01748 \n<a name=\"l01749\"></a>01749     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlPrinter.html#ace1b14d33eede2575c0743e2350f6a38\" title=\"Visit a declaration.\">Visit</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlDeclaration.html\" title=\"In correct XML the declaration is the first entry in the file.\">TiXmlDeclaration</a>&amp; declaration );\n<a name=\"l01750\"></a>01750     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlPrinter.html#ace1b14d33eede2575c0743e2350f6a38\" title=\"Visit a declaration.\">Visit</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlText.html\" title=\"XML text.\">TiXmlText</a>&amp; text );\n<a name=\"l01751\"></a>01751     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlPrinter.html#ace1b14d33eede2575c0743e2350f6a38\" title=\"Visit a declaration.\">Visit</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlComment.html\" title=\"An XML comment.\">TiXmlComment</a>&amp; comment );\n<a name=\"l01752\"></a>01752     <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTiXmlPrinter.html#ace1b14d33eede2575c0743e2350f6a38\" title=\"Visit a declaration.\">Visit</a>( <span class=\"keyword\">const</span> <a class=\"code\" href=\"classTiXmlUnknown.html\" title=\"Any tag that tinyXml doesn&amp;#39;t recognize is saved as an unknown.\">TiXmlUnknown</a>&amp; unknown );\n<a name=\"l01753\"></a>01753 \n<a name=\"l01757\"></a><a class=\"code\" href=\"classTiXmlPrinter.html#a213377a4070c7e625bae59716b089e5e\">01757</a>     <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlPrinter.html#a213377a4070c7e625bae59716b089e5e\" title=\"Set the indent characters for printing.\">SetIndent</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* _indent )           { indent = _indent ? _indent : <span class=\"stringliteral\">&quot;&quot;</span> ; }\n<a name=\"l01759\"></a><a class=\"code\" href=\"classTiXmlPrinter.html#abb33ec7d4bad6aaeb57f4304394b133d\">01759</a>     <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"classTiXmlPrinter.html#abb33ec7d4bad6aaeb57f4304394b133d\" title=\"Query the indention string.\">Indent</a>()                            { <span class=\"keywordflow\">return</span> indent.c_str(); }\n<a name=\"l01764\"></a><a class=\"code\" href=\"classTiXmlPrinter.html#a4be1e37e69e3858c59635aa947174fe6\">01764</a>     <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlPrinter.html#a4be1e37e69e3858c59635aa947174fe6\" title=\"Set the line breaking string.\">SetLineBreak</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* _lineBreak )     { lineBreak = _lineBreak ? _lineBreak : <span class=\"stringliteral\">&quot;&quot;</span>; }\n<a name=\"l01766\"></a><a class=\"code\" href=\"classTiXmlPrinter.html#a11f1b4804a460b175ec244eb5724d96d\">01766</a>     <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"classTiXmlPrinter.html#a11f1b4804a460b175ec244eb5724d96d\" title=\"Query the current line breaking string.\">LineBreak</a>()                         { <span class=\"keywordflow\">return</span> lineBreak.c_str(); }\n<a name=\"l01767\"></a>01767 \n<a name=\"l01771\"></a><a class=\"code\" href=\"classTiXmlPrinter.html#ab23a90629e374cb1cadca090468bbd19\">01771</a>     <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTiXmlPrinter.html#ab23a90629e374cb1cadca090468bbd19\" title=\"Switch over to &amp;quot;stream printing&amp;quot; which is the most dense formatting without...\">SetStreamPrinting</a>()                        { indent = <span class=\"stringliteral\">&quot;&quot;</span>;\n<a name=\"l01772\"></a>01772                                                       lineBreak = <span class=\"stringliteral\">&quot;&quot;</span>;\n<a name=\"l01773\"></a>01773                                                     }   \n<a name=\"l01775\"></a><a class=\"code\" href=\"classTiXmlPrinter.html#a859eede9597d3e0355b77757be48735e\">01775</a>     <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"classTiXmlPrinter.html#a859eede9597d3e0355b77757be48735e\" title=\"Return the result.\">CStr</a>()                              { <span class=\"keywordflow\">return</span> buffer.c_str(); }\n<a name=\"l01777\"></a><a class=\"code\" href=\"classTiXmlPrinter.html#ad01375ae9199bd2f48252eaddce3039d\">01777</a>     <span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"classTiXmlPrinter.html#ad01375ae9199bd2f48252eaddce3039d\" title=\"Return the length of the result string.\">Size</a>()                                   { <span class=\"keywordflow\">return</span> buffer.size(); }\n<a name=\"l01778\"></a>01778 \n<a name=\"l01779\"></a>01779 <span class=\"preprocessor\">    #ifdef TIXML_USE_STL</span>\n<a name=\"l01781\"></a><a class=\"code\" href=\"classTiXmlPrinter.html#a3bd4daf44309b41f5813a833caa0d1c9\">01781</a> <span class=\"preprocessor\">    const std::string&amp; Str()                        { return buffer; }</span>\n<a name=\"l01782\"></a>01782 <span class=\"preprocessor\"></span><span class=\"preprocessor\">    #endif</span>\n<a name=\"l01783\"></a>01783 <span class=\"preprocessor\"></span>\n<a name=\"l01784\"></a>01784 <span class=\"keyword\">private</span>:\n<a name=\"l01785\"></a>01785     <span class=\"keywordtype\">void</span> DoIndent() {\n<a name=\"l01786\"></a>01786         <span class=\"keywordflow\">for</span>( <span class=\"keywordtype\">int</span> i=0; i&lt;depth; ++i )\n<a name=\"l01787\"></a>01787             buffer += indent;\n<a name=\"l01788\"></a>01788     }\n<a name=\"l01789\"></a>01789     <span class=\"keywordtype\">void</span> DoLineBreak() {\n<a name=\"l01790\"></a>01790         buffer += lineBreak;\n<a name=\"l01791\"></a>01791     }\n<a name=\"l01792\"></a>01792 \n<a name=\"l01793\"></a>01793     <span class=\"keywordtype\">int</span> depth;\n<a name=\"l01794\"></a>01794     <span class=\"keywordtype\">bool</span> simpleTextPrint;\n<a name=\"l01795\"></a>01795     TIXML_STRING buffer;\n<a name=\"l01796\"></a>01796     TIXML_STRING indent;\n<a name=\"l01797\"></a>01797     TIXML_STRING lineBreak;\n<a name=\"l01798\"></a>01798 };\n<a name=\"l01799\"></a>01799 \n<a name=\"l01800\"></a>01800 \n<a name=\"l01801\"></a>01801 <span class=\"preprocessor\">#ifdef _MSC_VER</span>\n<a name=\"l01802\"></a>01802 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#pragma warning( pop )</span>\n<a name=\"l01803\"></a>01803 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#endif</span>\n<a name=\"l01804\"></a>01804 <span class=\"preprocessor\"></span>\n<a name=\"l01805\"></a>01805 <span class=\"preprocessor\">#endif</span>\n</pre></div></div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/docs/tutorial0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>TinyXml: TinyXML Tutorial</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.6.2 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul>\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li class=\"current\"><a href=\"pages.html\"><span>Related&nbsp;Pages</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"navpath\"><a class=\"el\" href=\"index.html\">index</a>\n  </div>\n</div>\n<div class=\"contents\">\n\n\n<h1><a class=\"anchor\" id=\"tutorial0\">TinyXML Tutorial </a></h1><h1>What is this? </h1>\n<p>This tutorial has a few tips and suggestions on how to use TinyXML effectively.</p>\n<p>I've also tried to include some C++ tips like how to convert strings to integers and vice versa. This isn't anything to do with TinyXML itself, but it may helpful for your project so I've put it in anyway.</p>\n<p>If you don't know basic C++ concepts this tutorial won't be useful. Likewise if you don't know what a DOM is, look elsewhere first.</p>\n<h1>Before we start </h1>\n<p>Some example XML datasets/files will be used.</p>\n<p>example1.xml:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n&lt;?xml version=\"1.0\" ?&gt;\n&lt;Hello&gt;World&lt;/Hello&gt;\n</pre></div><p>example2.xml:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n&lt;?xml version=\"1.0\" ?&gt;\n&lt;poetry&gt;\n\t&lt;verse&gt;\n\t\tAlas\n\t\t  Great World\n\t\t\tAlas (again)\n\t&lt;/verse&gt;\n&lt;/poetry&gt;\n</pre></div><p>example3.xml:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n&lt;?xml version=\"1.0\" ?&gt;\n&lt;shapes&gt;\n\t&lt;circle name=\"int-based\" x=\"20\" y=\"30\" r=\"50\" /&gt;\n\t&lt;point name=\"float-based\" x=\"3.5\" y=\"52.1\" /&gt;\n&lt;/shapes&gt;\n</pre></div><p>example4.xml</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n&lt;?xml version=\"1.0\" ?&gt;\n&lt;MyApp&gt;\n    &lt;!-- Settings for MyApp --&gt;\n    &lt;Messages&gt;\n        &lt;Welcome&gt;Welcome to MyApp&lt;/Welcome&gt;\n        &lt;Farewell&gt;Thank you for using MyApp&lt;/Farewell&gt;\n    &lt;/Messages&gt;\n    &lt;Windows&gt;\n        &lt;Window name=\"MainFrame\" x=\"5\" y=\"15\" w=\"400\" h=\"250\" /&gt;\n    &lt;/Windows&gt;\n    &lt;Connection ip=\"192.168.0.1\" timeout=\"123.456000\" /&gt;\n&lt;/MyApp&gt;\n</pre></div><h1>Getting Started </h1>\n<h2>Load XML from a file </h2>\n<p>The simplest way to load a file into a TinyXML DOM is:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\nTiXmlDocument doc( \"demo.xml\" );\ndoc.LoadFile();\n</pre></div><p>A more real-world usage is shown below. This will load the file and display the contents to STDOUT:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n// load the named file and dump its structure to STDOUT\nvoid dump_to_stdout(const char* pFilename)\n{\n\tTiXmlDocument doc(pFilename);\n\tbool loadOkay = doc.LoadFile();\n\tif (loadOkay)\n\t{\n\t\tprintf(\"\\n%s:\\n\", pFilename);\n\t\tdump_to_stdout( &amp;doc ); // defined later in the tutorial\n\t}\n\telse\n\t{\n\t\tprintf(\"Failed to load file \\\"%s\\\"\\n\", pFilename);\n\t}\n}\n</pre></div><p>A simple demonstration of this function is to use a main like this:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\nint main(void)\n{\n\tdump_to_stdout(\"example1.xml\");\n\treturn 0;\n}\n</pre></div><p>Recall that Example 1 XML is:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n&lt;?xml version=\"1.0\" ?&gt;\n&lt;Hello&gt;World&lt;/Hello&gt;\n</pre></div><p>Running the program with this XML will display this in the console/DOS window:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\nDOCUMENT\n+ DECLARATION\n+ ELEMENT Hello\n  + TEXT[World]\n</pre></div><p>The ``dump_to_stdout`` function is defined later in this tutorial and is useful if you want to understand recursive traversal of a DOM.</p>\n<h2>Building Documents Programatically </h2>\n<p>This is how to build Example 1 pragmatically:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\nvoid build_simple_doc( )\n{\n\t// Make xml: &lt;?xml ..&gt;&lt;Hello&gt;World&lt;/Hello&gt;\n\tTiXmlDocument doc;\n\tTiXmlDeclaration * decl = new TiXmlDeclaration( \"1.0\", \"\", \"\" );\n\tTiXmlElement * element = new TiXmlElement( \"Hello\" );\n\tTiXmlText * text = new TiXmlText( \"World\" );\n\telement-&gt;LinkEndChild( text );\n\tdoc.LinkEndChild( decl );\n\tdoc.LinkEndChild( element );\n\tdoc.SaveFile( \"madeByHand.xml\" );\n}\n</pre></div><p>This can be loaded and displayed on the console with:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\ndump_to_stdout(\"madeByHand.xml\"); // this func defined later in the tutorial\n</pre></div><p>and you'll see it is identical to Example 1:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\nmadeByHand.xml:\nDocument\n+ Declaration\n+ Element [Hello]\n  + Text: [World]\n</pre></div><p>This code produces exactly the same XML DOM but it shows a different ordering to node creation and linking:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\nvoid write_simple_doc2( )\n{\n\t// same as write_simple_doc1 but add each node\n\t// as early as possible into the tree.\n\n\tTiXmlDocument doc;\n\tTiXmlDeclaration * decl = new TiXmlDeclaration( \"1.0\", \"\", \"\" );\n\tdoc.LinkEndChild( decl );\n\t\n\tTiXmlElement * element = new TiXmlElement( \"Hello\" );\n\tdoc.LinkEndChild( element );\n\t\n\tTiXmlText * text = new TiXmlText( \"World\" );\n\telement-&gt;LinkEndChild( text );\n\t\n\tdoc.SaveFile( \"madeByHand2.xml\" );\n}\n</pre></div><p>Both of these produce the same XML, namely:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n&lt;?xml version=\"1.0\" ?&gt;\n&lt;Hello&gt;World&lt;/Hello&gt;\n</pre></div><p>Or in structure form:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\nDOCUMENT\n+ DECLARATION\n+ ELEMENT Hello\n  + TEXT[World]\n</pre></div><h2>Attributes </h2>\n<p>Given an existing node, settings attributes is easy:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\nwindow = new TiXmlElement( \"Demo\" );  \nwindow-&gt;SetAttribute(\"name\", \"Circle\");\nwindow-&gt;SetAttribute(\"x\", 5);\nwindow-&gt;SetAttribute(\"y\", 15);\nwindow-&gt;SetDoubleAttribute(\"radius\", 3.14159);\n</pre></div><p>You can it also work with the <a class=\"el\" href=\"classTiXmlAttribute.html\" title=\"An attribute is a name-value pair.\">TiXmlAttribute</a> objects if you want.</p>\n<p>The following code shows one way (not the only way) to get all attributes of an element, print the name and string value, and if the value can be converted to an integer or double, print that value too:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n// print all attributes of pElement.\n// returns the number of attributes printed\nint dump_attribs_to_stdout(TiXmlElement* pElement, unsigned int indent)\n{\n\tif ( !pElement ) return 0;\n\n\tTiXmlAttribute* pAttrib=pElement-&gt;FirstAttribute();\n\tint i=0;\n\tint ival;\n\tdouble dval;\n\tconst char* pIndent=getIndent(indent);\n\tprintf(\"\\n\");\n\twhile (pAttrib)\n\t{\n\t\tprintf( \"%s%s: value=[%s]\", pIndent, pAttrib-&gt;Name(), pAttrib-&gt;Value());\n\n\t\tif (pAttrib-&gt;QueryIntValue(&amp;ival)==TIXML_SUCCESS)    printf( \" int=%d\", ival);\n\t\tif (pAttrib-&gt;QueryDoubleValue(&amp;dval)==TIXML_SUCCESS) printf( \" d=%1.1f\", dval);\n\t\tprintf( \"\\n\" );\n\t\ti++;\n\t\tpAttrib=pAttrib-&gt;Next();\n\t}\n\treturn i;\n}\n</pre></div><h2>Writing a document to a file </h2>\n<p>Writing a pre-built DOM to a file is trivial:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\ndoc.SaveFile( saveFilename );  \n</pre></div><p>Recall, for example, example 4:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n&lt;?xml version=\"1.0\" ?&gt;\n&lt;MyApp&gt;\n    &lt;!-- Settings for MyApp --&gt;\n    &lt;Messages&gt;\n        &lt;Welcome&gt;Welcome to MyApp&lt;/Welcome&gt;\n        &lt;Farewell&gt;Thank you for using MyApp&lt;/Farewell&gt;\n    &lt;/Messages&gt;\n    &lt;Windows&gt;\n        &lt;Window name=\"MainFrame\" x=\"5\" y=\"15\" w=\"400\" h=\"250\" /&gt;\n    &lt;/Windows&gt;\n    &lt;Connection ip=\"192.168.0.1\" timeout=\"123.456000\" /&gt;\n&lt;/MyApp&gt;\n</pre></div><p>The following function builds this DOM and writes the file \"appsettings.xml\":</p>\n<div class=\"fragment\"><pre class=\"fragment\">\nvoid write_app_settings_doc( )  \n{  \n\tTiXmlDocument doc;  \n\tTiXmlElement* msg;\n \tTiXmlDeclaration* decl = new TiXmlDeclaration( \"1.0\", \"\", \"\" );  \n\tdoc.LinkEndChild( decl );  \n \n\tTiXmlElement * root = new TiXmlElement( \"MyApp\" );  \n\tdoc.LinkEndChild( root );  \n\n\tTiXmlComment * comment = new TiXmlComment();\n\tcomment-&gt;SetValue(\" Settings for MyApp \" );  \n\troot-&gt;LinkEndChild( comment );  \n \n\tTiXmlElement * msgs = new TiXmlElement( \"Messages\" );  \n\troot-&gt;LinkEndChild( msgs );  \n \n\tmsg = new TiXmlElement( \"Welcome\" );  \n\tmsg-&gt;LinkEndChild( new TiXmlText( \"Welcome to MyApp\" ));  \n\tmsgs-&gt;LinkEndChild( msg );  \n \n\tmsg = new TiXmlElement( \"Farewell\" );  \n\tmsg-&gt;LinkEndChild( new TiXmlText( \"Thank you for using MyApp\" ));  \n\tmsgs-&gt;LinkEndChild( msg );  \n \n\tTiXmlElement * windows = new TiXmlElement( \"Windows\" );  \n\troot-&gt;LinkEndChild( windows );  \n\n\tTiXmlElement * window;\n\twindow = new TiXmlElement( \"Window\" );  \n\twindows-&gt;LinkEndChild( window );  \n\twindow-&gt;SetAttribute(\"name\", \"MainFrame\");\n\twindow-&gt;SetAttribute(\"x\", 5);\n\twindow-&gt;SetAttribute(\"y\", 15);\n\twindow-&gt;SetAttribute(\"w\", 400);\n\twindow-&gt;SetAttribute(\"h\", 250);\n\n\tTiXmlElement * cxn = new TiXmlElement( \"Connection\" );  \n\troot-&gt;LinkEndChild( cxn );  \n\tcxn-&gt;SetAttribute(\"ip\", \"192.168.0.1\");\n\tcxn-&gt;SetDoubleAttribute(\"timeout\", 123.456); // floating point attrib\n\t\n\tdump_to_stdout( &amp;doc );\n\tdoc.SaveFile( \"appsettings.xml\" );  \n} \n</pre></div><p>The dump_to_stdout function will show this structure:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\nDocument\n+ Declaration\n+ Element [MyApp]\n (No attributes)\n  + Comment: [ Settings for MyApp ]\n  + Element [Messages]\n (No attributes)\n    + Element [Welcome]\n (No attributes)\n      + Text: [Welcome to MyApp]\n    + Element [Farewell]\n (No attributes)\n      + Text: [Thank you for using MyApp]\n  + Element [Windows]\n (No attributes)\n    + Element [Window]\n      + name: value=[MainFrame]\n      + x: value=[5] int=5 d=5.0\n      + y: value=[15] int=15 d=15.0\n      + w: value=[400] int=400 d=400.0\n      + h: value=[250] int=250 d=250.0\n      5 attributes\n  + Element [Connection]\n    + ip: value=[192.168.0.1] int=192 d=192.2\n    + timeout: value=[123.456000] int=123 d=123.5\n    2 attributes\n</pre></div><p>I was surprised that TinyXml, by default, writes the XML in what other APIs call a \"pretty\" format - it modifies the whitespace of text of elements that contain other nodes so that writing the tree includes an indication of nesting level.</p>\n<p>I haven't looked yet to see if there is a way to turn off indenting when writing a file - its bound to be easy.</p>\n<p>[Lee: It's easy in STL mode, just use cout &lt;&lt; myDoc. Non-STL mode is always in \"pretty\" format. Adding a switch would be a nice feature and has been requested.]</p>\n<h1>XML to/from C++ objects </h1>\n<h2>Intro </h2>\n<p>This example assumes you're loading and saving your app settings in an XML file, e.g. something like example4.xml.</p>\n<p>There are a number of ways to do this. For example, look into the TinyBind project at <a href=\"http://sourceforge.net/projects/tinybind\">http://sourceforge.net/projects/tinybind</a></p>\n<p>This section shows a plain-old approach to loading and saving a basic object structure using XML.</p>\n<h2>Set up your object classes </h2>\n<p>Start off with some basic classes like these:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n#include &lt;string&gt;\n#include &lt;map&gt;\nusing namespace std;\n\ntypedef std::map&lt;std::string,std::string&gt; MessageMap;\n\n// a basic window abstraction - demo purposes only\nclass WindowSettings\n{\npublic:\n\tint x,y,w,h;\n\tstring name;\n\n\tWindowSettings()\n\t\t: x(0), y(0), w(100), h(100), name(\"Untitled\")\n\t{\n\t}\n\n\tWindowSettings(int x, int y, int w, int h, const string&amp; name)\n\t{\n\t\tthis-&gt;x=x;\n\t\tthis-&gt;y=y;\n\t\tthis-&gt;w=w;\n\t\tthis-&gt;h=h;\n\t\tthis-&gt;name=name;\n\t}\n};\n\nclass ConnectionSettings\n{\npublic:\n\tstring ip;\n\tdouble timeout;\n};\n\nclass AppSettings\n{\npublic:\n\tstring m_name;\n\tMessageMap m_messages;\n\tlist&lt;WindowSettings&gt; m_windows;\n\tConnectionSettings m_connection;\n\n\tAppSettings() {}\n\n\tvoid save(const char* pFilename);\n\tvoid load(const char* pFilename);\n\t\n\t// just to show how to do it\n\tvoid setDemoValues()\n\t{\n\t\tm_name=\"MyApp\";\n\t\tm_messages.clear();\n\t\tm_messages[\"Welcome\"]=\"Welcome to \"+m_name;\n\t\tm_messages[\"Farewell\"]=\"Thank you for using \"+m_name;\n\t\tm_windows.clear();\n\t\tm_windows.push_back(WindowSettings(15,15,400,250,\"Main\"));\n\t\tm_connection.ip=\"Unknown\";\n\t\tm_connection.timeout=123.456;\n\t}\n};\n</pre></div><p>This is a basic main() that shows how to create a default settings object tree, save it and load it again:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\nint main(void)\n{\n\tAppSettings settings;\n\t\n\tsettings.save(\"appsettings2.xml\");\n\tsettings.load(\"appsettings2.xml\");\n\treturn 0;\n}\n</pre></div><p>The following main() shows creation, modification, saving and then loading of a settings structure:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\nint main(void)\n{\n\t// block: customise and save settings\n\t{\n\t\tAppSettings settings;\n\t\tsettings.m_name=\"HitchHikerApp\";\n\t\tsettings.m_messages[\"Welcome\"]=\"Don't Panic\";\n\t\tsettings.m_messages[\"Farewell\"]=\"Thanks for all the fish\";\n\t\tsettings.m_windows.push_back(WindowSettings(15,25,300,250,\"BookFrame\"));\n\t\tsettings.m_connection.ip=\"192.168.0.77\";\n\t\tsettings.m_connection.timeout=42.0;\n\n\t\tsettings.save(\"appsettings2.xml\");\n\t}\n\t\n\t// block: load settings\n\t{\n\t\tAppSettings settings;\n\t\tsettings.load(\"appsettings2.xml\");\n\t\tprintf(\"%s: %s\\n\", settings.m_name.c_str(), \n\t\t\tsettings.m_messages[\"Welcome\"].c_str());\n\t\tWindowSettings &amp; w=settings.m_windows.front();\n\t\tprintf(\"%s: Show window '%s' at %d,%d (%d x %d)\\n\", \n\t\t\tsettings.m_name.c_str(), w.name.c_str(), w.x, w.y, w.w, w.h);\n\t\tprintf(\"%s: %s\\n\", settings.m_name.c_str(), settings.m_messages[\"Farewell\"].c_str());\n\t}\n\treturn 0;\n}\n</pre></div><p>When the save() and load() are completed (see below), running this main() displays on the console:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\nHitchHikerApp: Don't Panic\nHitchHikerApp: Show window 'BookFrame' at 15,25 (300 x 100)\nHitchHikerApp: Thanks for all the fish\n</pre></div><h2>Encode C++ state as XML </h2>\n<p>There are lots of different ways to approach saving this to a file. Here's one:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\nvoid AppSettings::save(const char* pFilename)\n{\n\tTiXmlDocument doc;  \n\tTiXmlElement* msg;\n\tTiXmlComment * comment;\n\tstring s;\n \tTiXmlDeclaration* decl = new TiXmlDeclaration( \"1.0\", \"\", \"\" );  \n\tdoc.LinkEndChild( decl ); \n \n\tTiXmlElement * root = new TiXmlElement(m_name.c_str());  \n\tdoc.LinkEndChild( root );  \n\n\tcomment = new TiXmlComment();\n\ts=\" Settings for \"+m_name+\" \";\n\tcomment-&gt;SetValue(s.c_str());  \n\troot-&gt;LinkEndChild( comment );  \n\n\t// block: messages\n\t{\n\t\tMessageMap::iterator iter;\n\n\t\tTiXmlElement * msgs = new TiXmlElement( \"Messages\" );  \n\t\troot-&gt;LinkEndChild( msgs );  \n \n\t\tfor (iter=m_messages.begin(); iter != m_messages.end(); iter++)\n\t\t{\n\t\t\tconst string &amp; key=(*iter).first;\n\t\t\tconst string &amp; value=(*iter).second;\n\t\t\tmsg = new TiXmlElement(key.c_str());  \n\t\t\tmsg-&gt;LinkEndChild( new TiXmlText(value.c_str()));  \n\t\t\tmsgs-&gt;LinkEndChild( msg );  \n\t\t}\n\t}\n\n\t// block: windows\n\t{\n\t\tTiXmlElement * windowsNode = new TiXmlElement( \"Windows\" );  \n\t\troot-&gt;LinkEndChild( windowsNode );  \n\n\t\tlist&lt;WindowSettings&gt;::iterator iter;\n\n\t\tfor (iter=m_windows.begin(); iter != m_windows.end(); iter++)\n\t\t{\n\t\t\tconst WindowSettings&amp; w=*iter;\n\n\t\t\tTiXmlElement * window;\n\t\t\twindow = new TiXmlElement( \"Window\" );  \n\t\t\twindowsNode-&gt;LinkEndChild( window );  \n\t\t\twindow-&gt;SetAttribute(\"name\", w.name.c_str());\n\t\t\twindow-&gt;SetAttribute(\"x\", w.x);\n\t\t\twindow-&gt;SetAttribute(\"y\", w.y);\n\t\t\twindow-&gt;SetAttribute(\"w\", w.w);\n\t\t\twindow-&gt;SetAttribute(\"h\", w.h);\n\t\t}\n\t}\n\n\t// block: connection\n\t{\n\t\tTiXmlElement * cxn = new TiXmlElement( \"Connection\" );  \n\t\troot-&gt;LinkEndChild( cxn );  \n\t\tcxn-&gt;SetAttribute(\"ip\", m_connection.ip.c_str());\n\t\tcxn-&gt;SetDoubleAttribute(\"timeout\", m_connection.timeout); \n\t}\n\n\tdoc.SaveFile(pFilename);  \n}\n</pre></div><p>Running this with the modified main produces this file:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n&lt;?xml version=\"1.0\" ?&gt;\n&lt;HitchHikerApp&gt;\n    &lt;!-- Settings for HitchHikerApp --&gt;\n    &lt;Messages&gt;\n        &lt;Farewell&gt;Thanks for all the fish&lt;/Farewell&gt;\n        &lt;Welcome&gt;Don&amp;apos;t Panic&lt;/Welcome&gt;\n    &lt;/Messages&gt;\n    &lt;Windows&gt;\n        &lt;Window name=\"BookFrame\" x=\"15\" y=\"25\" w=\"300\" h=\"250\" /&gt;\n    &lt;/Windows&gt;\n    &lt;Connection ip=\"192.168.0.77\" timeout=\"42.000000\" /&gt;\n&lt;/HitchHikerApp&gt;\n</pre></div><h2>Decoding state from XML </h2>\n<p>As with encoding objects, there are a number of approaches to decoding XML into your own C++ object structure. The following approach uses TiXmlHandles.</p>\n<div class=\"fragment\"><pre class=\"fragment\">\nvoid AppSettings::load(const char* pFilename)\n{\n\tTiXmlDocument doc(pFilename);\n\tif (!doc.LoadFile()) return;\n\n\tTiXmlHandle hDoc(&amp;doc);\n\tTiXmlElement* pElem;\n\tTiXmlHandle hRoot(0);\n\n\t// block: name\n\t{\n\t\tpElem=hDoc.FirstChildElement().Element();\n\t\t// should always have a valid root but handle gracefully if it does\n\t\tif (!pElem) return;\n\t\tm_name=pElem-&gt;Value();\n\n\t\t// save this for later\n\t\thRoot=TiXmlHandle(pElem);\n\t}\n\n\t// block: string table\n\t{\n\t\tm_messages.clear(); // trash existing table\n\n\t\tpElem=hRoot.FirstChild( \"Messages\" ).FirstChild().Element();\n\t\tfor( pElem; pElem; pElem=pElem-&gt;NextSiblingElement())\n\t\t{\n\t\t\tconst char *pKey=pElem-&gt;Value();\n\t\t\tconst char *pText=pElem-&gt;GetText();\n\t\t\tif (pKey &amp;&amp; pText) \n\t\t\t{\n\t\t\t\tm_messages[pKey]=pText;\n\t\t\t}\n\t\t}\n\t}\n\n\t// block: windows\n\t{\n\t\tm_windows.clear(); // trash existing list\n\n\t\tTiXmlElement* pWindowNode=hRoot.FirstChild( \"Windows\" ).FirstChild().Element();\n\t\tfor( pWindowNode; pWindowNode; pWindowNode=pWindowNode-&gt;NextSiblingElement())\n\t\t{\n\t\t\tWindowSettings w;\n\t\t\tconst char *pName=pWindowNode-&gt;Attribute(\"name\");\n\t\t\tif (pName) w.name=pName;\n\t\t\t\n\t\t\tpWindowNode-&gt;QueryIntAttribute(\"x\", &amp;w.x); // If this fails, original value is left as-is\n\t\t\tpWindowNode-&gt;QueryIntAttribute(\"y\", &amp;w.y);\n\t\t\tpWindowNode-&gt;QueryIntAttribute(\"w\", &amp;w.w);\n\t\t\tpWindowNode-&gt;QueryIntAttribute(\"hh\", &amp;w.h);\n\n\t\t\tm_windows.push_back(w);\n\t\t}\n\t}\n\n\t// block: connection\n\t{\n\t\tpElem=hRoot.FirstChild(\"Connection\").Element();\n\t\tif (pElem)\n\t\t{\n\t\t\tm_connection.ip=pElem-&gt;Attribute(\"ip\");\n\t\t\tpElem-&gt;QueryDoubleAttribute(\"timeout\",&amp;m_connection.timeout);\n\t\t}\n\t}\n}\n</pre></div><h1>Full listing for dump_to_stdout </h1>\n<p>Below is a copy-and-paste demo program for loading arbitrary XML files and dumping the structure to STDOUT using the recursive traversal listed above.</p>\n<div class=\"fragment\"><pre class=\"fragment\">\n// tutorial demo program\n#include \"stdafx.h\"\n#include \"tinyxml.h\"\n\n// ----------------------------------------------------------------------\n// STDOUT dump and indenting utility functions\n// ----------------------------------------------------------------------\nconst unsigned int NUM_INDENTS_PER_SPACE=2;\n\nconst char * getIndent( unsigned int numIndents )\n{\n\tstatic const char * pINDENT=\"                                      + \";\n\tstatic const unsigned int LENGTH=strlen( pINDENT );\n\tunsigned int n=numIndents*NUM_INDENTS_PER_SPACE;\n\tif ( n &gt; LENGTH ) n = LENGTH;\n\n\treturn &amp;pINDENT[ LENGTH-n ];\n}\n\n// same as getIndent but no \"+\" at the end\nconst char * getIndentAlt( unsigned int numIndents )\n{\n\tstatic const char * pINDENT=\"                                        \";\n\tstatic const unsigned int LENGTH=strlen( pINDENT );\n\tunsigned int n=numIndents*NUM_INDENTS_PER_SPACE;\n\tif ( n &gt; LENGTH ) n = LENGTH;\n\n\treturn &amp;pINDENT[ LENGTH-n ];\n}\n\nint dump_attribs_to_stdout(TiXmlElement* pElement, unsigned int indent)\n{\n\tif ( !pElement ) return 0;\n\n\tTiXmlAttribute* pAttrib=pElement-&gt;FirstAttribute();\n\tint i=0;\n\tint ival;\n\tdouble dval;\n\tconst char* pIndent=getIndent(indent);\n\tprintf(\"\\n\");\n\twhile (pAttrib)\n\t{\n\t\tprintf( \"%s%s: value=[%s]\", pIndent, pAttrib-&gt;Name(), pAttrib-&gt;Value());\n\n\t\tif (pAttrib-&gt;QueryIntValue(&amp;ival)==TIXML_SUCCESS)    printf( \" int=%d\", ival);\n\t\tif (pAttrib-&gt;QueryDoubleValue(&amp;dval)==TIXML_SUCCESS) printf( \" d=%1.1f\", dval);\n\t\tprintf( \"\\n\" );\n\t\ti++;\n\t\tpAttrib=pAttrib-&gt;Next();\n\t}\n\treturn i;\t\n}\n\nvoid dump_to_stdout( TiXmlNode* pParent, unsigned int indent = 0 )\n{\n\tif ( !pParent ) return;\n\n\tTiXmlNode* pChild;\n\tTiXmlText* pText;\n\tint t = pParent-&gt;Type();\n\tprintf( \"%s\", getIndent(indent));\n\tint num;\n\n\tswitch ( t )\n\t{\n\tcase TiXmlNode::TINYXML_DOCUMENT:\n\t\tprintf( \"Document\" );\n\t\tbreak;\n\n\tcase TiXmlNode::TINYXML_ELEMENT:\n\t\tprintf( \"Element [%s]\", pParent-&gt;Value() );\n\t\tnum=dump_attribs_to_stdout(pParent-&gt;ToElement(), indent+1);\n\t\tswitch(num)\n\t\t{\n\t\t\tcase 0:  printf( \" (No attributes)\"); break;\n\t\t\tcase 1:  printf( \"%s1 attribute\", getIndentAlt(indent)); break;\n\t\t\tdefault: printf( \"%s%d attributes\", getIndentAlt(indent), num); break;\n\t\t}\n\t\tbreak;\n\n\tcase TiXmlNode::TINYXML_COMMENT:\n\t\tprintf( \"Comment: [%s]\", pParent-&gt;Value());\n\t\tbreak;\n\n\tcase TiXmlNode::TINYXML_UNKNOWN:\n\t\tprintf( \"Unknown\" );\n\t\tbreak;\n\n\tcase TiXmlNode::TINYXML_TEXT:\n\t\tpText = pParent-&gt;ToText();\n\t\tprintf( \"Text: [%s]\", pText-&gt;Value() );\n\t\tbreak;\n\n\tcase TiXmlNode::TINYXML_DECLARATION:\n\t\tprintf( \"Declaration\" );\n\t\tbreak;\n\tdefault:\n\t\tbreak;\n\t}\n\tprintf( \"\\n\" );\n\tfor ( pChild = pParent-&gt;FirstChild(); pChild != 0; pChild = pChild-&gt;NextSibling()) \n\t{\n\t\tdump_to_stdout( pChild, indent+1 );\n\t}\n}\n\n// load the named file and dump its structure to STDOUT\nvoid dump_to_stdout(const char* pFilename)\n{\n\tTiXmlDocument doc(pFilename);\n\tbool loadOkay = doc.LoadFile();\n\tif (loadOkay)\n\t{\n\t\tprintf(\"\\n%s:\\n\", pFilename);\n\t\tdump_to_stdout( &amp;doc ); // defined later in the tutorial\n\t}\n\telse\n\t{\n\t\tprintf(\"Failed to load file \\\"%s\\\"\\n\", pFilename);\n\t}\n}\n\n// ----------------------------------------------------------------------\n// main() for printing files named on the command line\n// ----------------------------------------------------------------------\nint main(int argc, char* argv[])\n{\n\tfor (int i=1; i&lt;argc; i++)\n\t{\n\t\tdump_to_stdout(argv[i]);\n\t}\n\treturn 0;\n}\n</pre></div><p>Run this from the command line or a DOS window, e.g.:</p>\n<div class=\"fragment\"><pre class=\"fragment\">\nC:\\dev\\tinyxml&gt; Debug\\tinyxml_1.exe example1.xml\n\nexample1.xml:\nDocument\n+ Declaration\n+ Element [Hello]\n (No attributes)\n  + Text: [World]\n</pre></div><p><em> Authors and Changes </p>\n<ul>\n<li>\nWritten by Ellers, April, May, June 2005  </li>\n<li>\nMinor edits and integration into doc system, Lee Thomason September 2005  </li>\n<li>\nUpdated by Ellers, October 2005  </li>\n</ul>\n<p></em> </p>\n</div>\n<hr size=\"1\"/><address style=\"text-align: right;\"><small>Generated by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.6.2 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "external/tinyxml/readme.txt",
    "content": "/** @mainpage\n\n<h1> TinyXML </h1>\n\nTinyXML is a simple, small, C++ XML parser that can be easily \nintegrated into other programs.\n\n<h2> What it does. </h2>\n\t\nIn brief, TinyXML parses an XML document, and builds from that a \nDocument Object Model (DOM) that can be read, modified, and saved.\n\nXML stands for \"eXtensible Markup Language.\" It allows you to create \nyour own document markups. Where HTML does a very good job of marking \ndocuments for browsers, XML allows you to define any kind of document \nmarkup, for example a document that describes a \"to do\" list for an \norganizer application. XML is a very structured and convenient format.\nAll those random file formats created to store application data can \nall be replaced with XML. One parser for everything.\n\nThe best place for the complete, correct, and quite frankly hard to\nread spec is at <a href=\"http://www.w3.org/TR/2004/REC-xml-20040204/\">\nhttp://www.w3.org/TR/2004/REC-xml-20040204/</a>. An intro to XML\n(that I really like) can be found at \n<a href=\"http://skew.org/xml/tutorial/\">http://skew.org/xml/tutorial</a>.\n\nThere are different ways to access and interact with XML data.\nTinyXML uses a Document Object Model (DOM), meaning the XML data is parsed\ninto a C++ objects that can be browsed and manipulated, and then \nwritten to disk or another output stream. You can also construct an XML document \nfrom scratch with C++ objects and write this to disk or another output\nstream.\n\nTinyXML is designed to be easy and fast to learn. It is two headers \nand four cpp files. Simply add these to your project and off you go. \nThere is an example file - xmltest.cpp - to get you started. \n\nTinyXML is released under the ZLib license, \nso you can use it in open source or commercial code. The details\nof the license are at the top of every source file.\n\nTinyXML attempts to be a flexible parser, but with truly correct and\ncompliant XML output. TinyXML should compile on any reasonably C++\ncompliant system. It does not rely on exceptions or RTTI. It can be \ncompiled with or without STL support. TinyXML fully supports\nthe UTF-8 encoding, and the first 64k character entities.\n\n\n<h2> What it doesn't do. </h2>\n\nTinyXML doesn't parse or use DTDs (Document Type Definitions) or XSLs\n(eXtensible Stylesheet Language.) There are other parsers out there \n(check out www.sourceforge.org, search for XML) that are much more fully\nfeatured. But they are also much bigger, take longer to set up in\nyour project, have a higher learning curve, and often have a more\nrestrictive license. If you are working with browsers or have more\ncomplete XML needs, TinyXML is not the parser for you.\n\nThe following DTD syntax will not parse at this time in TinyXML:\n\n@verbatim\n\t<!DOCTYPE Archiv [\n\t <!ELEMENT Comment (#PCDATA)>\n\t]>\n@endverbatim\n\nbecause TinyXML sees this as a !DOCTYPE node with an illegally \nembedded !ELEMENT node. This may be addressed in the future.\n\n<h2> Tutorials. </h2>\n\nFor the impatient, here is a tutorial to get you going. A great way to get started, \nbut it is worth your time to read this (very short) manual completely.\n\n- @subpage tutorial0\n\n<h2> Code Status.  </h2>\n\nTinyXML is mature, tested code. It is very stable. If you find\nbugs, please file a bug report on the sourceforge web site\n(www.sourceforge.net/projects/tinyxml). We'll get them straightened \nout as soon as possible.\n\nThere are some areas of improvement; please check sourceforge if you are\ninterested in working on TinyXML.\n\n<h2> Related Projects </h2>\n\nTinyXML projects you may find useful! (Descriptions provided by the projects.)\n\n<ul>\n<li> <b>TinyXPath</b> (http://tinyxpath.sourceforge.net). TinyXPath is a small footprint \n     XPath syntax decoder, written in C++.</li>\n<li> <b>TinyXML++</b> (http://code.google.com/p/ticpp/). TinyXML++ is a completely new \n     interface to TinyXML that uses MANY of the C++ strengths. Templates, \n\t exceptions, and much better error handling.</li>\n</ul>\n\n<h2> Features </h2>\n\n<h3> Using STL </h3>\n\nTinyXML can be compiled to use or not use STL. When using STL, TinyXML\nuses the std::string class, and fully supports std::istream, std::ostream,\noperator<<, and operator>>. Many API methods have both 'const char*' and\n'const std::string&' forms.\n\nWhen STL support is compiled out, no STL files are included whatsoever. All\nthe string classes are implemented by TinyXML itself. API methods\nall use the 'const char*' form for input.\n\nUse the compile time #define:\n\n\tTIXML_USE_STL\n\nto compile one version or the other. This can be passed by the compiler,\nor set as the first line of \"tinyxml.h\".\n\nNote: If compiling the test code in Linux, setting the environment\nvariable TINYXML_USE_STL=YES/NO will control STL compilation. In the\nWindows project file, STL and non STL targets are provided. In your project,\nIt's probably easiest to add the line \"#define TIXML_USE_STL\" as the first\nline of tinyxml.h.\n\n<h3> UTF-8 </h3>\n\nTinyXML supports UTF-8 allowing to manipulate XML files in any language. TinyXML\nalso supports \"legacy mode\" - the encoding used before UTF-8 support and\nprobably best described as \"extended ascii\".\n\nNormally, TinyXML will try to detect the correct encoding and use it. However,\nby setting the value of TIXML_DEFAULT_ENCODING in the header file, TinyXML\ncan be forced to always use one encoding.\n\nTinyXML will assume Legacy Mode until one of the following occurs:\n<ol>\n\t<li> If the non-standard but common \"UTF-8 lead bytes\" (0xef 0xbb 0xbf)\n\t\t begin the file or data stream, TinyXML will read it as UTF-8. </li>\n\t<li> If the declaration tag is read, and it has an encoding=\"UTF-8\", then\n\t\t TinyXML will read it as UTF-8. </li>\n\t<li> If the declaration tag is read, and it has no encoding specified, then TinyXML will \n\t\t read it as UTF-8. </li>\n\t<li> If the declaration tag is read, and it has an encoding=\"something else\", then TinyXML \n\t\t will read it as Legacy Mode. In legacy mode, TinyXML will work as it did before. It's \n\t\t not clear what that mode does exactly, but old content should keep working.</li>\n\t<li> Until one of the above criteria is met, TinyXML runs in Legacy Mode.</li>\n</ol>\n\nWhat happens if the encoding is incorrectly set or detected? TinyXML will try\nto read and pass through text seen as improperly encoded. You may get some strange results or \nmangled characters. You may want to force TinyXML to the correct mode.\n\nYou may force TinyXML to Legacy Mode by using LoadFile( TIXML_ENCODING_LEGACY ) or\nLoadFile( filename, TIXML_ENCODING_LEGACY ). You may force it to use legacy mode all\nthe time by setting TIXML_DEFAULT_ENCODING = TIXML_ENCODING_LEGACY. Likewise, you may \nforce it to TIXML_ENCODING_UTF8 with the same technique.\n\nFor English users, using English XML, UTF-8 is the same as low-ASCII. You\ndon't need to be aware of UTF-8 or change your code in any way. You can think\nof UTF-8 as a \"superset\" of ASCII.\n\nUTF-8 is not a double byte format - but it is a standard encoding of Unicode!\nTinyXML does not use or directly support wchar, TCHAR, or Microsoft's _UNICODE at this time. \nIt is common to see the term \"Unicode\" improperly refer to UTF-16, a wide byte encoding\nof unicode. This is a source of confusion.\n\nFor \"high-ascii\" languages - everything not English, pretty much - TinyXML can\nhandle all languages, at the same time, as long as the XML is encoded\nin UTF-8. That can be a little tricky, older programs and operating systems\ntend to use the \"default\" or \"traditional\" code page. Many apps (and almost all\nmodern ones) can output UTF-8, but older or stubborn (or just broken) ones\nstill output text in the default code page. \n\nFor example, Japanese systems traditionally use SHIFT-JIS encoding. \nText encoded as SHIFT-JIS can not be read by TinyXML. \nA good text editor can import SHIFT-JIS and then save as UTF-8.\n\nThe <a href=\"http://skew.org/xml/tutorial/\">Skew.org link</a> does a great\njob covering the encoding issue.\n\nThe test file \"utf8test.xml\" is an XML containing English, Spanish, Russian,\nand Simplified Chinese. (Hopefully they are translated correctly). The file\n\"utf8test.gif\" is a screen capture of the XML file, rendered in IE. Note that\nif you don't have the correct fonts (Simplified Chinese or Russian) on your\nsystem, you won't see output that matches the GIF file even if you can parse\nit correctly. Also note that (at least on my Windows machine) console output\nis in a Western code page, so that Print() or printf() cannot correctly display\nthe file. This is not a bug in TinyXML - just an OS issue. No data is lost or \ndestroyed by TinyXML. The console just doesn't render UTF-8.\n\n\n<h3> Entities </h3>\nTinyXML recognizes the pre-defined \"character entities\", meaning special\ncharacters. Namely:\n\n@verbatim\n\t&amp;\t&\n\t&lt;\t<\n\t&gt;\t>\n\t&quot;\t\"\n\t&apos;\t'\n@endverbatim\n\nThese are recognized when the XML document is read, and translated to there\nUTF-8 equivalents. For instance, text with the XML of:\n\n@verbatim\n\tFar &amp; Away\n@endverbatim\n\nwill have the Value() of \"Far & Away\" when queried from the TiXmlText object,\nand will be written back to the XML stream/file as an ampersand. Older versions\nof TinyXML \"preserved\" character entities, but the newer versions will translate\nthem into characters.\n\nAdditionally, any character can be specified by its Unicode code point:\nThe syntax \"&#xA0;\" or \"&#160;\" are both to the non-breaking space characher.\n\n<h3> Printing </h3>\nTinyXML can print output in several different ways that all have strengths and limitations.\n\n- Print( FILE* ). Output to a std-C stream, which includes all C files as well as stdout.\n\t- \"Pretty prints\", but you don't have control over printing options.\n\t- The output is streamed directly to the FILE object, so there is no memory overhead\n\t  in the TinyXML code.\n\t- used by Print() and SaveFile()\n\n- operator<<. Output to a c++ stream.\n\t- Integrates with standart C++ iostreams.\n\t- Outputs in \"network printing\" mode without line breaks. Good for network transmission\n\t  and moving XML between C++ objects, but hard for a human to read.\n\n- TiXmlPrinter. Output to a std::string or memory buffer.\n\t- API is less concise\n\t- Future printing options will be put here.\n\t- Printing may change slightly in future versions as it is refined and expanded.\n\n<h3> Streams </h3>\nWith TIXML_USE_STL on TinyXML supports C++ streams (operator <<,>>) streams as well\nas C (FILE*) streams. There are some differences that you may need to be aware of.\n\nC style output:\n\t- based on FILE*\n\t- the Print() and SaveFile() methods\n\n\tGenerates formatted output, with plenty of white space, intended to be as \n\thuman-readable as possible. They are very fast, and tolerant of ill formed \n\tXML documents. For example, an XML document that contains 2 root elements \n\tand 2 declarations, will still print.\n\nC style input:\n\t- based on FILE*\n\t- the Parse() and LoadFile() methods\n\n\tA fast, tolerant read. Use whenever you don't need the C++ streams.\n\nC++ style output:\n\t- based on std::ostream\n\t- operator<<\n\n\tGenerates condensed output, intended for network transmission rather than\n\treadability. Depending on your system's implementation of the ostream class,\n\tthese may be somewhat slower. (Or may not.) Not tolerant of ill formed XML:\n\ta document should contain the correct one root element. Additional root level\n\telements will not be streamed out.\n\nC++ style input:\n\t- based on std::istream\n\t- operator>>\n\n\tReads XML from a stream, making it useful for network transmission. The tricky\n\tpart is knowing when the XML document is complete, since there will almost\n\tcertainly be other data in the stream. TinyXML will assume the XML data is\n\tcomplete after it reads the root element. Put another way, documents that\n\tare ill-constructed with more than one root element will not read correctly.\n\tAlso note that operator>> is somewhat slower than Parse, due to both \n\timplementation of the STL and limitations of TinyXML.\n\n<h3> White space </h3>\nThe world simply does not agree on whether white space should be kept, or condensed.\nFor example, pretend the '_' is a space, and look at \"Hello____world\". HTML, and \nat least some XML parsers, will interpret this as \"Hello_world\". They condense white\nspace. Some XML parsers do not, and will leave it as \"Hello____world\". (Remember\nto keep pretending the _ is a space.) Others suggest that __Hello___world__ should become\nHello___world.\n\nIt's an issue that hasn't been resolved to my satisfaction. TinyXML supports the\nfirst 2 approaches. Call TiXmlBase::SetCondenseWhiteSpace( bool ) to set the desired behavior.\nThe default is to condense white space.\n\nIf you change the default, you should call TiXmlBase::SetCondenseWhiteSpace( bool )\nbefore making any calls to Parse XML data, and I don't recommend changing it after\nit has been set.\n\n\n<h3> Handles </h3>\n\nWhere browsing an XML document in a robust way, it is important to check\nfor null returns from method calls. An error safe implementation can\ngenerate a lot of code like:\n\n@verbatim\nTiXmlElement* root = document.FirstChildElement( \"Document\" );\nif ( root )\n{\n\tTiXmlElement* element = root->FirstChildElement( \"Element\" );\n\tif ( element )\n\t{\n\t\tTiXmlElement* child = element->FirstChildElement( \"Child\" );\n\t\tif ( child )\n\t\t{\n\t\t\tTiXmlElement* child2 = child->NextSiblingElement( \"Child\" );\n\t\t\tif ( child2 )\n\t\t\t{\n\t\t\t\t// Finally do something useful.\n@endverbatim\n\nHandles have been introduced to clean this up. Using the TiXmlHandle class,\nthe previous code reduces to:\n\n@verbatim\nTiXmlHandle docHandle( &document );\nTiXmlElement* child2 = docHandle.FirstChild( \"Document\" ).FirstChild( \"Element\" ).Child( \"Child\", 1 ).ToElement();\nif ( child2 )\n{\n\t// do something useful\n@endverbatim\n\nWhich is much easier to deal with. See TiXmlHandle for more information.\n\n\n<h3> Row and Column tracking </h3>\nBeing able to track nodes and attributes back to their origin location\nin source files can be very important for some applications. Additionally,\nknowing where parsing errors occured in the original source can be very\ntime saving.\n\nTinyXML can tracks the row and column origin of all nodes and attributes\nin a text file. The TiXmlBase::Row() and TiXmlBase::Column() methods return\nthe origin of the node in the source text. The correct tabs can be \nconfigured in TiXmlDocument::SetTabSize().\n\n\n<h2> Using and Installing </h2>\n\nTo Compile and Run xmltest:\n\nA Linux Makefile and a Windows Visual C++ .dsw file is provided. \nSimply compile and run. It will write the file demotest.xml to your \ndisk and generate output on the screen. It also tests walking the\nDOM by printing out the number of nodes found using different \ntechniques.\n\nThe Linux makefile is very generic and runs on many systems - it \nis currently tested on mingw and\nMacOSX. You do not need to run 'make depend'. The dependecies have been\nhard coded.\n\n<h3>Windows project file for VC6</h3>\n<ul>\n<li>tinyxml:\t\ttinyxml library, non-STL </li>\n<li>tinyxmlSTL:\t\ttinyxml library, STL </li>\n<li>tinyXmlTest:\ttest app, non-STL </li>\n<li>tinyXmlTestSTL: test app, STL </li>\n</ul>\n\n<h3>Makefile</h3>\nAt the top of the makefile you can set:\n\nPROFILE, DEBUG, and TINYXML_USE_STL. Details (such that they are) are in\nthe makefile.\n\nIn the tinyxml directory, type \"make clean\" then \"make\". The executable\nfile 'xmltest' will be created.\n\n\n\n<h3>To Use in an Application:</h3>\n\nAdd tinyxml.cpp, tinyxml.h, tinyxmlerror.cpp, tinyxmlparser.cpp, tinystr.cpp, and tinystr.h to your\nproject or make file. That's it! It should compile on any reasonably\ncompliant C++ system. You do not need to enable exceptions or\nRTTI for TinyXML.\n\n\n<h2> How TinyXML works.  </h2>\n\nAn example is probably the best way to go. Take:\n@verbatim\n\t<?xml version=\"1.0\" standalone=no>\n\t<!-- Our to do list data -->\n\t<ToDo>\n\t\t<Item priority=\"1\"> Go to the <bold>Toy store!</bold></Item>\n\t\t<Item priority=\"2\"> Do bills</Item>\n\t</ToDo>\n@endverbatim\n\nIts not much of a To Do list, but it will do. To read this file \n(say \"demo.xml\") you would create a document, and parse it in:\n@verbatim\n\tTiXmlDocument doc( \"demo.xml\" );\n\tdoc.LoadFile();\n@endverbatim\n\nAnd its ready to go. Now lets look at some lines and how they \nrelate to the DOM.\n\n@verbatim\n<?xml version=\"1.0\" standalone=no>\n@endverbatim\n\n\tThe first line is a declaration, and gets turned into the\n\tTiXmlDeclaration class. It will be the first child of the\n\tdocument node.\n\t\n\tThis is the only directive/special tag parsed by TinyXML.\n\tGenerally directive tags are stored in TiXmlUnknown so the \n\tcommands wont be lost when it is saved back to disk.\n\n@verbatim\n<!-- Our to do list data -->\n@endverbatim\n\n\tA comment. Will become a TiXmlComment object.\n\n@verbatim\n<ToDo>\n@endverbatim\n\n\tThe \"ToDo\" tag defines a TiXmlElement object. This one does not have \n\tany attributes, but does contain 2 other elements.\n\n@verbatim\n<Item priority=\"1\"> \n@endverbatim\n\n\tCreates another TiXmlElement which is a child of the \"ToDo\" element. \n\tThis element has 1 attribute, with the name \"priority\" and the value \n\t\"1\".\n\n@verbatim\nGo to the\n@endverbatim \n\n\tA TiXmlText. This is a leaf node and cannot contain other nodes. \n\tIt is a child of the \"Item\" TiXmlElement.\n\n@verbatim\n<bold>\n@endverbatim\n\n\t\n\tAnother TiXmlElement, this one a child of the \"Item\" element.\n\nEtc.\n\nLooking at the entire object tree, you end up with:\n@verbatim\nTiXmlDocument\t\t\t\t\t\"demo.xml\"\n\tTiXmlDeclaration\t\t\t\"version='1.0'\" \"standalone=no\"\n\tTiXmlComment\t\t\t\t\" Our to do list data\"\n\tTiXmlElement\t\t\t\t\"ToDo\"\n\t\tTiXmlElement\t\t\t\"Item\" Attribtutes: priority = 1\n\t\t\tTiXmlText\t\t\t\"Go to the \"\n\t\t\tTiXmlElement\t\t\"bold\"\n\t\t\t\tTiXmlText\t\t\"Toy store!\"\n\t\tTiXmlElement\t\t\t\"Item\" Attributes: priority=2\n\t\t\tTiXmlText\t\t\t\"Do bills\"\n@endverbatim\n\n<h2> Documentation </h2>\n\nThe documentation is build with Doxygen, using the 'dox' \nconfiguration file.\n\n<h2> License </h2>\n\nTinyXML is released under the zlib license:\n\nThis software is provided 'as-is', without any express or implied \nwarranty. In no event will the authors be held liable for any \ndamages arising from the use of this software.\n\nPermission is granted to anyone to use this software for any \npurpose, including commercial applications, and to alter it and \nredistribute it freely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must \nnot claim that you wrote the original software. If you use this \nsoftware in a product, an acknowledgment in the product documentation \nwould be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and \nmust not be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source \ndistribution.\n\n<h2> References  </h2>\n\nThe World Wide Web Consortium is the definitive standard body for \nXML, and their web pages contain huge amounts of information. \n\nThe definitive spec: <a href=\"http://www.w3.org/TR/2004/REC-xml-20040204/\">\nhttp://www.w3.org/TR/2004/REC-xml-20040204/</a>\n\nI also recommend \"XML Pocket Reference\" by Robert Eckstein and published by \nOReilly...the book that got the whole thing started.\n\n<h2> Contributors, Contacts, and a Brief History </h2>\n\nThanks very much to everyone who sends suggestions, bugs, ideas, and \nencouragement. It all helps, and makes this project fun. A special thanks\nto the contributors on the web pages that keep it lively.\n\nSo many people have sent in bugs and ideas, that rather than list here \nwe try to give credit due in the \"changes.txt\" file.\n\nTinyXML was originally written by Lee Thomason. (Often the \"I\" still\nin the documentation.) Lee reviews changes and releases new versions,\nwith the help of Yves Berquin, Andrew Ellerton, and the tinyXml community.\n\nWe appreciate your suggestions, and would love to know if you \nuse TinyXML. Hopefully you will enjoy it and find it useful. \nPlease post questions, comments, file bugs, or contact us at:\n\nwww.sourceforge.net/projects/tinyxml\n\nLee Thomason, Yves Berquin, Andrew Ellerton\n*/\n"
  },
  {
    "path": "external/tinyxml/tinyXmlTest.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{34719950-09E8-457E-BE23-8F1CE3A1F1F6}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseOfMfc>false</UseOfMfc>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseOfMfc>false</UseOfMfc>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n    <Import Project=\"$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n    <Import Project=\"$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup>\r\n    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</LinkIncremental>\r\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)$(Configuration)$(ProjectName)\\</OutDir>\r\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)$(Configuration)$(ProjectName)\\</IntDir>\r\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\r\n    <IncludePath Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(IncludePath)</IncludePath>\r\n    <LibraryPath Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(LibraryPath)</LibraryPath>\r\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)$(Configuration)$(ProjectName)\\</IntDir>\r\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)$(Configuration)$(ProjectName)\\</OutDir>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Midl>\r\n      <TypeLibraryName>.\\tinyXmlTest___Win32_Debug/tinyXmlTest.tlb</TypeLibraryName>\r\n      <HeaderFileName>\r\n      </HeaderFileName>\r\n    </Midl>\r\n    <ClCompile>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TUNE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <MinimalRebuild>true</MinimalRebuild>\r\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n      <BrowseInformation>true</BrowseInformation>\r\n      <WarningLevel>Level4</WarningLevel>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r\n    </ClCompile>\r\n    <ResourceCompile>\r\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <Culture>0x0409</Culture>\r\n    </ResourceCompile>\r\n    <Link>\r\n      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <SubSystem>Console</SubSystem>\r\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r\n      <DataExecutionPrevention>\r\n      </DataExecutionPrevention>\r\n      <TargetMachine>MachineX86</TargetMachine>\r\n    </Link>\r\n    <Bscmake>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n    </Bscmake>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Midl>\r\n      <TypeLibraryName>.\\tinyXmlTest___Win32_Release/tinyXmlTest.tlb</TypeLibraryName>\r\n      <HeaderFileName>\r\n      </HeaderFileName>\r\n    </Midl>\r\n    <ClCompile>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <StringPooling>true</StringPooling>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <BrowseInformation>true</BrowseInformation>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n    </ClCompile>\r\n    <ResourceCompile>\r\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <Culture>0x0409</Culture>\r\n    </ResourceCompile>\r\n    <Link>\r\n      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n      <SubSystem>Console</SubSystem>\r\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r\n      <DataExecutionPrevention>\r\n      </DataExecutionPrevention>\r\n      <TargetMachine>MachineX86</TargetMachine>\r\n    </Link>\r\n    <Bscmake>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n    </Bscmake>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"xmltest.cpp\">\r\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n    </ClCompile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"tinyxml_lib.vcxproj\">\r\n      <Project>{c406daec-0886-4771-8dea-9d7329b46cc1}</Project>\r\n      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "external/tinyxml/tinyXmlTestSTL.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{53ED5965-5BCA-47B5-9EB0-EDD20882F22F}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseOfMfc>false</UseOfMfc>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseOfMfc>false</UseOfMfc>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n    <Import Project=\"$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n    <Import Project=\"$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup>\r\n    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\r\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\r\n    <IncludePath Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(IncludePath)</IncludePath>\r\n    <LibraryPath Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(LibraryPath)</LibraryPath>\r\n    <IncludePath Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(IncludePath)</IncludePath>\r\n    <LibraryPath Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(LibraryPath)</LibraryPath>\r\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)$(Configuration)$(ProjectName)\\</IntDir>\r\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)$(Configuration)$(ProjectName)\\</OutDir>\r\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)$(Configuration)$(ProjectName)\\</OutDir>\r\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)$(Configuration)$(ProjectName)\\</IntDir>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Midl>\r\n      <TypeLibraryName>.\\tinyXmlTestSTL___Win32_Debug/tinyXmlTestSTL.tlb</TypeLibraryName>\r\n      <HeaderFileName>\r\n      </HeaderFileName>\r\n    </Midl>\r\n    <ClCompile>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TIXML_USE_STL;TUNE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <MinimalRebuild>true</MinimalRebuild>\r\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n      <BrowseInformation>true</BrowseInformation>\r\n      <WarningLevel>Level4</WarningLevel>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r\n    </ClCompile>\r\n    <ResourceCompile>\r\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <Culture>0x0409</Culture>\r\n    </ResourceCompile>\r\n    <Link>\r\n      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <SubSystem>Console</SubSystem>\r\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r\n      <DataExecutionPrevention>\r\n      </DataExecutionPrevention>\r\n      <TargetMachine>MachineX86</TargetMachine>\r\n    </Link>\r\n    <Bscmake>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n    </Bscmake>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Midl>\r\n      <TypeLibraryName>.\\tinyXmlTestSTL___Win32_Release/tinyXmlTestSTL.tlb</TypeLibraryName>\r\n      <HeaderFileName>\r\n      </HeaderFileName>\r\n    </Midl>\r\n    <ClCompile>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;TIXML_USE_STL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <StringPooling>true</StringPooling>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n    </ClCompile>\r\n    <ResourceCompile>\r\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <Culture>0x0409</Culture>\r\n    </ResourceCompile>\r\n    <Link>\r\n      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n      <SubSystem>Console</SubSystem>\r\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r\n      <DataExecutionPrevention>\r\n      </DataExecutionPrevention>\r\n      <TargetMachine>MachineX86</TargetMachine>\r\n    </Link>\r\n    <Bscmake>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n    </Bscmake>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"xmltest.cpp\">\r\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n    </ClCompile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"tinyxmlSTL.vcxproj\">\r\n      <Project>{a3a84737-5017-4577-b8a2-79429a25b8b6}</Project>\r\n      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "external/tinyxml/tinystr.cpp",
    "content": "/*\nwww.sourceforge.net/projects/tinyxml\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any\ndamages arising from the use of this software.\n\nPermission is granted to anyone to use this software for any\npurpose, including commercial applications, and to alter it and\nredistribute it freely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must\nnot claim that you wrote the original software. If you use this\nsoftware in a product, an acknowledgment in the product documentation\nwould be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and\nmust not be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\ndistribution.\n*/\n\n\n#ifndef TIXML_USE_STL\n\n#include \"tinystr.h\"\n\n// Error value for find primitive\nconst TiXmlString::size_type TiXmlString::npos = static_cast< TiXmlString::size_type >(-1);\n\n\n// Null rep.\nTiXmlString::Rep TiXmlString::nullrep_ = { 0, 0, { '\\0' } };\n\n\nvoid TiXmlString::reserve (size_type cap)\n{\n\tif (cap > capacity())\n\t{\n\t\tTiXmlString tmp;\n\t\ttmp.init(length(), cap);\n\t\tmemcpy(tmp.start(), data(), length());\n\t\tswap(tmp);\n\t}\n}\n\n\nTiXmlString& TiXmlString::assign(const char* str, size_type len)\n{\n\tsize_type cap = capacity();\n\tif (len > cap || cap > 3*(len + 8))\n\t{\n\t\tTiXmlString tmp;\n\t\ttmp.init(len);\n\t\tmemcpy(tmp.start(), str, len);\n\t\tswap(tmp);\n\t}\n\telse\n\t{\n\t\tmemmove(start(), str, len);\n\t\tset_size(len);\n\t}\n\treturn *this;\n}\n\n\nTiXmlString& TiXmlString::append(const char* str, size_type len)\n{\n\tsize_type newsize = length() + len;\n\tif (newsize > capacity())\n\t{\n\t\treserve (newsize + capacity());\n\t}\n\tmemmove(finish(), str, len);\n\tset_size(newsize);\n\treturn *this;\n}\n\n\nTiXmlString operator + (const TiXmlString & a, const TiXmlString & b)\n{\n\tTiXmlString tmp;\n\ttmp.reserve(a.length() + b.length());\n\ttmp += a;\n\ttmp += b;\n\treturn tmp;\n}\n\nTiXmlString operator + (const TiXmlString & a, const char* b)\n{\n\tTiXmlString tmp;\n\tTiXmlString::size_type b_len = static_cast<TiXmlString::size_type>( strlen(b) );\n\ttmp.reserve(a.length() + b_len);\n\ttmp += a;\n\ttmp.append(b, b_len);\n\treturn tmp;\n}\n\nTiXmlString operator + (const char* a, const TiXmlString & b)\n{\n\tTiXmlString tmp;\n\tTiXmlString::size_type a_len = static_cast<TiXmlString::size_type>( strlen(a) );\n\ttmp.reserve(a_len + b.length());\n\ttmp.append(a, a_len);\n\ttmp += b;\n\treturn tmp;\n}\n\n\n#endif\t// TIXML_USE_STL\n"
  },
  {
    "path": "external/tinyxml/tinystr.h",
    "content": "/*\nwww.sourceforge.net/projects/tinyxml\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any\ndamages arising from the use of this software.\n\nPermission is granted to anyone to use this software for any\npurpose, including commercial applications, and to alter it and\nredistribute it freely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must\nnot claim that you wrote the original software. If you use this\nsoftware in a product, an acknowledgment in the product documentation\nwould be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and\nmust not be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\ndistribution.\n*/\n\n\n#ifndef TIXML_USE_STL\n\n#ifndef TIXML_STRING_INCLUDED\n#define TIXML_STRING_INCLUDED\n\n#include <assert.h>\n#include <string.h>\n\n/*\tThe support for explicit isn't that universal, and it isn't really\n\trequired - it is used to check that the TiXmlString class isn't incorrectly\n\tused. Be nice to old compilers and macro it here:\n*/\n#if defined(_MSC_VER) && (_MSC_VER >= 1200 )\n\t// Microsoft visual studio, version 6 and higher.\n\t#define TIXML_EXPLICIT explicit\n#elif defined(__GNUC__) && (__GNUC__ >= 3 )\n\t// GCC version 3 and higher.s\n\t#define TIXML_EXPLICIT explicit\n#else\n\t#define TIXML_EXPLICIT\n#endif\n\n\n/*\n   TiXmlString is an emulation of a subset of the std::string template.\n   Its purpose is to allow compiling TinyXML on compilers with no or poor STL support.\n   Only the member functions relevant to the TinyXML project have been implemented.\n   The buffer allocation is made by a simplistic power of 2 like mechanism : if we increase\n   a string and there's no more room, we allocate a buffer twice as big as we need.\n*/\nclass TiXmlString\n{\n  public :\n\t// The size type used\n  \ttypedef size_t size_type;\n\n\t// Error value for find primitive\n\tstatic const size_type npos; // = -1;\n\n\n\t// TiXmlString empty constructor\n\tTiXmlString () : rep_(&nullrep_)\n\t{\n\t}\n\n\t// TiXmlString copy constructor\n\tTiXmlString ( const TiXmlString & copy) : rep_(0)\n\t{\n\t\tinit(copy.length());\n\t\tmemcpy(start(), copy.data(), length());\n\t}\n\n\t// TiXmlString constructor, based on a string\n\tTIXML_EXPLICIT TiXmlString ( const char * copy) : rep_(0)\n\t{\n\t\tinit( static_cast<size_type>( strlen(copy) ));\n\t\tmemcpy(start(), copy, length());\n\t}\n\n\t// TiXmlString constructor, based on a string\n\tTIXML_EXPLICIT TiXmlString ( const char * str, size_type len) : rep_(0)\n\t{\n\t\tinit(len);\n\t\tmemcpy(start(), str, len);\n\t}\n\n\t// TiXmlString destructor\n\t~TiXmlString ()\n\t{\n\t\tquit();\n\t}\n\n\tTiXmlString& operator = (const char * copy)\n\t{\n\t\treturn assign( copy, (size_type)strlen(copy));\n\t}\n\n\tTiXmlString& operator = (const TiXmlString & copy)\n\t{\n\t\treturn assign(copy.start(), copy.length());\n\t}\n\n\n\t// += operator. Maps to append\n\tTiXmlString& operator += (const char * suffix)\n\t{\n\t\treturn append(suffix, static_cast<size_type>( strlen(suffix) ));\n\t}\n\n\t// += operator. Maps to append\n\tTiXmlString& operator += (char single)\n\t{\n\t\treturn append(&single, 1);\n\t}\n\n\t// += operator. Maps to append\n\tTiXmlString& operator += (const TiXmlString & suffix)\n\t{\n\t\treturn append(suffix.data(), suffix.length());\n\t}\n\n\n\t// Convert a TiXmlString into a null-terminated char *\n\tconst char * c_str () const { return rep_->str; }\n\n\t// Convert a TiXmlString into a char * (need not be null terminated).\n\tconst char * data () const { return rep_->str; }\n\n\t// Return the length of a TiXmlString\n\tsize_type length () const { return rep_->size; }\n\n\t// Alias for length()\n\tsize_type size () const { return rep_->size; }\n\n\t// Checks if a TiXmlString is empty\n\tbool empty () const { return rep_->size == 0; }\n\n\t// Return capacity of string\n\tsize_type capacity () const { return rep_->capacity; }\n\n\n\t// single char extraction\n\tconst char& at (size_type index) const\n\t{\n\t\tassert( index < length() );\n\t\treturn rep_->str[ index ];\n\t}\n\n\t// [] operator\n\tchar& operator [] (size_type index) const\n\t{\n\t\tassert( index < length() );\n\t\treturn rep_->str[ index ];\n\t}\n\n\t// find a char in a string. Return TiXmlString::npos if not found\n\tsize_type find (char lookup) const\n\t{\n\t\treturn find(lookup, 0);\n\t}\n\n\t// find a char in a string from an offset. Return TiXmlString::npos if not found\n\tsize_type find (char tofind, size_type offset) const\n\t{\n\t\tif (offset >= length()) return npos;\n\n\t\tfor (const char* p = c_str() + offset; *p != '\\0'; ++p)\n\t\t{\n\t\t   if (*p == tofind) return static_cast< size_type >( p - c_str() );\n\t\t}\n\t\treturn npos;\n\t}\n\n\tvoid clear ()\n\t{\n\t\t//Lee:\n\t\t//The original was just too strange, though correct:\n\t\t//\tTiXmlString().swap(*this);\n\t\t//Instead use the quit & re-init:\n\t\tquit();\n\t\tinit(0,0);\n\t}\n\n\t/*\tFunction to reserve a big amount of data when we know we'll need it. Be aware that this\n\t\tfunction DOES NOT clear the content of the TiXmlString if any exists.\n\t*/\n\tvoid reserve (size_type cap);\n\n\tTiXmlString& assign (const char* str, size_type len);\n\n\tTiXmlString& append (const char* str, size_type len);\n\n\tvoid swap (TiXmlString& other)\n\t{\n\t\tRep* r = rep_;\n\t\trep_ = other.rep_;\n\t\tother.rep_ = r;\n\t}\n\n  private:\n\n\tvoid init(size_type sz) { init(sz, sz); }\n\tvoid set_size(size_type sz) { rep_->str[ rep_->size = sz ] = '\\0'; }\n\tchar* start() const { return rep_->str; }\n\tchar* finish() const { return rep_->str + rep_->size; }\n\n\tstruct Rep\n\t{\n\t\tsize_type size, capacity;\n\t\tchar str[1];\n\t};\n\n\tvoid init(size_type sz, size_type cap)\n\t{\n\t\tif (cap)\n\t\t{\n\t\t\t// Lee: the original form:\n\t\t\t//\trep_ = static_cast<Rep*>(operator new(sizeof(Rep) + cap));\n\t\t\t// doesn't work in some cases of new being overloaded. Switching\n\t\t\t// to the normal allocation, although use an 'int' for systems\n\t\t\t// that are overly picky about structure alignment.\n\t\t\tconst size_type bytesNeeded = sizeof(Rep) + cap;\n\t\t\tconst size_type intsNeeded = ( bytesNeeded + sizeof(int) - 1 ) / sizeof( int ); \n\t\t\trep_ = reinterpret_cast<Rep*>( new int[ intsNeeded ] );\n\n\t\t\trep_->str[ rep_->size = sz ] = '\\0';\n\t\t\trep_->capacity = cap;\n\t\t}\n\t\telse\n\t\t{\n\t\t\trep_ = &nullrep_;\n\t\t}\n\t}\n\n\tvoid quit()\n\t{\n\t\tif (rep_ != &nullrep_)\n\t\t{\n\t\t\t// The rep_ is really an array of ints. (see the allocator, above).\n\t\t\t// Cast it back before delete, so the compiler won't incorrectly call destructors.\n\t\t\tdelete [] ( reinterpret_cast<int*>( rep_ ) );\n\t\t}\n\t}\n\n\tRep * rep_;\n\tstatic Rep nullrep_;\n\n} ;\n\n\ninline bool operator == (const TiXmlString & a, const TiXmlString & b)\n{\n\treturn    ( a.length() == b.length() )\t\t\t\t// optimization on some platforms\n\t       && ( strcmp(a.c_str(), b.c_str()) == 0 );\t// actual compare\n}\ninline bool operator < (const TiXmlString & a, const TiXmlString & b)\n{\n\treturn strcmp(a.c_str(), b.c_str()) < 0;\n}\n\ninline bool operator != (const TiXmlString & a, const TiXmlString & b) { return !(a == b); }\ninline bool operator >  (const TiXmlString & a, const TiXmlString & b) { return b < a; }\ninline bool operator <= (const TiXmlString & a, const TiXmlString & b) { return !(b < a); }\ninline bool operator >= (const TiXmlString & a, const TiXmlString & b) { return !(a < b); }\n\ninline bool operator == (const TiXmlString & a, const char* b) { return strcmp(a.c_str(), b) == 0; }\ninline bool operator == (const char* a, const TiXmlString & b) { return b == a; }\ninline bool operator != (const TiXmlString & a, const char* b) { return !(a == b); }\ninline bool operator != (const char* a, const TiXmlString & b) { return !(b == a); }\n\nTiXmlString operator + (const TiXmlString & a, const TiXmlString & b);\nTiXmlString operator + (const TiXmlString & a, const char* b);\nTiXmlString operator + (const char* a, const TiXmlString & b);\n\n\n/*\n   TiXmlOutStream is an emulation of std::ostream. It is based on TiXmlString.\n   Only the operators that we need for TinyXML have been developped.\n*/\nclass TiXmlOutStream : public TiXmlString\n{\npublic :\n\n\t// TiXmlOutStream << operator.\n\tTiXmlOutStream & operator << (const TiXmlString & in)\n\t{\n\t\t*this += in;\n\t\treturn *this;\n\t}\n\n\t// TiXmlOutStream << operator.\n\tTiXmlOutStream & operator << (const char * in)\n\t{\n\t\t*this += in;\n\t\treturn *this;\n\t}\n\n} ;\n\n#endif\t// TIXML_STRING_INCLUDED\n#endif\t// TIXML_USE_STL\n"
  },
  {
    "path": "external/tinyxml/tinyxml.cpp",
    "content": "/*\nwww.sourceforge.net/projects/tinyxml\nOriginal code by Lee Thomason (www.grinninglizard.com)\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any\ndamages arising from the use of this software.\n\nPermission is granted to anyone to use this software for any\npurpose, including commercial applications, and to alter it and\nredistribute it freely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must\nnot claim that you wrote the original software. If you use this\nsoftware in a product, an acknowledgment in the product documentation\nwould be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and\nmust not be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\ndistribution.\n*/\n\n#include <ctype.h>\n\n#ifdef TIXML_USE_STL\n#include <sstream>\n#include <iostream>\n#endif\n\n#include \"tinyxml.h\"\n\nFILE* TiXmlFOpen( const char* filename, const char* mode );\n\nbool TiXmlBase::condenseWhiteSpace = true;\n\n// Microsoft compiler security\nFILE* TiXmlFOpen( const char* filename, const char* mode )\n{\n\t#if defined(_MSC_VER) && (_MSC_VER >= 1400 )\n\t\tFILE* fp = 0;\n\t\terrno_t err = fopen_s( &fp, filename, mode );\n\t\tif ( !err && fp )\n\t\t\treturn fp;\n\t\treturn 0;\n\t#else\n\t\treturn fopen( filename, mode );\n\t#endif\n}\n\nvoid TiXmlBase::EncodeString( const TIXML_STRING& str, TIXML_STRING* outString )\n{\n\tint i=0;\n\n\twhile( i<(int)str.length() )\n\t{\n\t\tunsigned char c = (unsigned char) str[i];\n\n\t\tif (    c == '&' \n\t\t     && i < ( (int)str.length() - 2 )\n\t\t\t && str[i+1] == '#'\n\t\t\t && str[i+2] == 'x' )\n\t\t{\n\t\t\t// Hexadecimal character reference.\n\t\t\t// Pass through unchanged.\n\t\t\t// &#xA9;\t-- copyright symbol, for example.\n\t\t\t//\n\t\t\t// The -1 is a bug fix from Rob Laveaux. It keeps\n\t\t\t// an overflow from happening if there is no ';'.\n\t\t\t// There are actually 2 ways to exit this loop -\n\t\t\t// while fails (error case) and break (semicolon found).\n\t\t\t// However, there is no mechanism (currently) for\n\t\t\t// this function to return an error.\n\t\t\twhile ( i<(int)str.length()-1 )\n\t\t\t{\n\t\t\t\toutString->append( str.c_str() + i, 1 );\n\t\t\t\t++i;\n\t\t\t\tif ( str[i] == ';' )\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\telse if ( c == '&' )\n\t\t{\n\t\t\toutString->append( entity[0].str, entity[0].strLength );\n\t\t\t++i;\n\t\t}\n\t\telse if ( c == '<' )\n\t\t{\n\t\t\toutString->append( entity[1].str, entity[1].strLength );\n\t\t\t++i;\n\t\t}\n\t\telse if ( c == '>' )\n\t\t{\n\t\t\toutString->append( entity[2].str, entity[2].strLength );\n\t\t\t++i;\n\t\t}\n\t\telse if ( c == '\\\"' )\n\t\t{\n\t\t\toutString->append( entity[3].str, entity[3].strLength );\n\t\t\t++i;\n\t\t}\n\t\telse if ( c == '\\'' )\n\t\t{\n\t\t\toutString->append( entity[4].str, entity[4].strLength );\n\t\t\t++i;\n\t\t}\n\t\telse if ( c < 32 )\n\t\t{\n\t\t\t// Easy pass at non-alpha/numeric/symbol\n\t\t\t// Below 32 is symbolic.\n\t\t\tchar buf[ 32 ];\n\t\t\t\n\t\t\t#if defined(TIXML_SNPRINTF)\t\t\n\t\t\t\tTIXML_SNPRINTF( buf, sizeof(buf), \"&#x%02X;\", (unsigned) ( c & 0xff ) );\n\t\t\t#else\n\t\t\t\tsprintf( buf, \"&#x%02X;\", (unsigned) ( c & 0xff ) );\n\t\t\t#endif\t\t\n\n\t\t\t//*ME:\twarning C4267: convert 'size_t' to 'int'\n\t\t\t//*ME:\tInt-Cast to make compiler happy ...\n\t\t\toutString->append( buf, (int)strlen( buf ) );\n\t\t\t++i;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t//char realc = (char) c;\n\t\t\t//outString->append( &realc, 1 );\n\t\t\t*outString += (char) c;\t// somewhat more efficient function call.\n\t\t\t++i;\n\t\t}\n\t}\n}\n\n\nTiXmlNode::TiXmlNode( NodeType _type ) : TiXmlBase()\n{\n\tparent = 0;\n\ttype = _type;\n\tfirstChild = 0;\n\tlastChild = 0;\n\tprev = 0;\n\tnext = 0;\n}\n\n\nTiXmlNode::~TiXmlNode()\n{\n\tTiXmlNode* node = firstChild;\n\tTiXmlNode* temp = 0;\n\n\twhile ( node )\n\t{\n\t\ttemp = node;\n\t\tnode = node->next;\n\t\tdelete temp;\n\t}\t\n}\n\n\nvoid TiXmlNode::CopyTo( TiXmlNode* target ) const\n{\n\ttarget->SetValue (value.c_str() );\n\ttarget->userData = userData; \n\ttarget->location = location;\n}\n\n\nvoid TiXmlNode::Clear()\n{\n\tTiXmlNode* node = firstChild;\n\tTiXmlNode* temp = 0;\n\n\twhile ( node )\n\t{\n\t\ttemp = node;\n\t\tnode = node->next;\n\t\tdelete temp;\n\t}\t\n\n\tfirstChild = 0;\n\tlastChild = 0;\n}\n\n\nTiXmlNode* TiXmlNode::LinkEndChild( TiXmlNode* node )\n{\n\tassert( node->parent == 0 || node->parent == this );\n\tassert( node->GetDocument() == 0 || node->GetDocument() == this->GetDocument() );\n\n\tif ( node->Type() == TiXmlNode::TINYXML_DOCUMENT )\n\t{\n\t\tdelete node;\n\t\tif ( GetDocument() ) \n\t\t\tGetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN );\n\t\treturn 0;\n\t}\n\n\tnode->parent = this;\n\n\tnode->prev = lastChild;\n\tnode->next = 0;\n\n\tif ( lastChild )\n\t\tlastChild->next = node;\n\telse\n\t\tfirstChild = node;\t\t\t// it was an empty list.\n\n\tlastChild = node;\n\treturn node;\n}\n\n\nTiXmlNode* TiXmlNode::InsertEndChild( const TiXmlNode& addThis )\n{\n\tif ( addThis.Type() == TiXmlNode::TINYXML_DOCUMENT )\n\t{\n\t\tif ( GetDocument() ) \n\t\t\tGetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN );\n\t\treturn 0;\n\t}\n\tTiXmlNode* node = addThis.Clone();\n\tif ( !node )\n\t\treturn 0;\n\n\treturn LinkEndChild( node );\n}\n\n\nTiXmlNode* TiXmlNode::InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis )\n{\t\n\tif ( !beforeThis || beforeThis->parent != this ) {\n\t\treturn 0;\n\t}\n\tif ( addThis.Type() == TiXmlNode::TINYXML_DOCUMENT )\n\t{\n\t\tif ( GetDocument() ) \n\t\t\tGetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN );\n\t\treturn 0;\n\t}\n\n\tTiXmlNode* node = addThis.Clone();\n\tif ( !node )\n\t\treturn 0;\n\tnode->parent = this;\n\n\tnode->next = beforeThis;\n\tnode->prev = beforeThis->prev;\n\tif ( beforeThis->prev )\n\t{\n\t\tbeforeThis->prev->next = node;\n\t}\n\telse\n\t{\n\t\tassert( firstChild == beforeThis );\n\t\tfirstChild = node;\n\t}\n\tbeforeThis->prev = node;\n\treturn node;\n}\n\n\nTiXmlNode* TiXmlNode::InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis )\n{\n\tif ( !afterThis || afterThis->parent != this ) {\n\t\treturn 0;\n\t}\n\tif ( addThis.Type() == TiXmlNode::TINYXML_DOCUMENT )\n\t{\n\t\tif ( GetDocument() ) \n\t\t\tGetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN );\n\t\treturn 0;\n\t}\n\n\tTiXmlNode* node = addThis.Clone();\n\tif ( !node )\n\t\treturn 0;\n\tnode->parent = this;\n\n\tnode->prev = afterThis;\n\tnode->next = afterThis->next;\n\tif ( afterThis->next )\n\t{\n\t\tafterThis->next->prev = node;\n\t}\n\telse\n\t{\n\t\tassert( lastChild == afterThis );\n\t\tlastChild = node;\n\t}\n\tafterThis->next = node;\n\treturn node;\n}\n\n\nTiXmlNode* TiXmlNode::ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis )\n{\n\tif ( !replaceThis )\n\t\treturn 0;\n\n\tif ( replaceThis->parent != this )\n\t\treturn 0;\n\n\tif ( withThis.ToDocument() ) {\n\t\t// A document can never be a child.\tThanks to Noam.\n\t\tTiXmlDocument* document = GetDocument();\n\t\tif ( document ) \n\t\t\tdocument->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN );\n\t\treturn 0;\n\t}\n\n\tTiXmlNode* node = withThis.Clone();\n\tif ( !node )\n\t\treturn 0;\n\n\tnode->next = replaceThis->next;\n\tnode->prev = replaceThis->prev;\n\n\tif ( replaceThis->next )\n\t\treplaceThis->next->prev = node;\n\telse\n\t\tlastChild = node;\n\n\tif ( replaceThis->prev )\n\t\treplaceThis->prev->next = node;\n\telse\n\t\tfirstChild = node;\n\n\tdelete replaceThis;\n\tnode->parent = this;\n\treturn node;\n}\n\n\nbool TiXmlNode::RemoveChild( TiXmlNode* removeThis )\n{\n\tif ( !removeThis ) {\n\t\treturn false;\n\t}\n\n\tif ( removeThis->parent != this )\n\t{\t\n\t\tassert( 0 );\n\t\treturn false;\n\t}\n\n\tif ( removeThis->next )\n\t\tremoveThis->next->prev = removeThis->prev;\n\telse\n\t\tlastChild = removeThis->prev;\n\n\tif ( removeThis->prev )\n\t\tremoveThis->prev->next = removeThis->next;\n\telse\n\t\tfirstChild = removeThis->next;\n\n\tdelete removeThis;\n\treturn true;\n}\n\nconst TiXmlNode* TiXmlNode::FirstChild( const char * _value ) const\n{\n\tconst TiXmlNode* node;\n\tfor ( node = firstChild; node; node = node->next )\n\t{\n\t\tif ( strcmp( node->Value(), _value ) == 0 )\n\t\t\treturn node;\n\t}\n\treturn 0;\n}\n\n\nconst TiXmlNode* TiXmlNode::LastChild( const char * _value ) const\n{\n\tconst TiXmlNode* node;\n\tfor ( node = lastChild; node; node = node->prev )\n\t{\n\t\tif ( strcmp( node->Value(), _value ) == 0 )\n\t\t\treturn node;\n\t}\n\treturn 0;\n}\n\n\nconst TiXmlNode* TiXmlNode::IterateChildren( const TiXmlNode* previous ) const\n{\n\tif ( !previous )\n\t{\n\t\treturn FirstChild();\n\t}\n\telse\n\t{\n\t\tassert( previous->parent == this );\n\t\treturn previous->NextSibling();\n\t}\n}\n\n\nconst TiXmlNode* TiXmlNode::IterateChildren( const char * val, const TiXmlNode* previous ) const\n{\n\tif ( !previous )\n\t{\n\t\treturn FirstChild( val );\n\t}\n\telse\n\t{\n\t\tassert( previous->parent == this );\n\t\treturn previous->NextSibling( val );\n\t}\n}\n\n\nconst TiXmlNode* TiXmlNode::NextSibling( const char * _value ) const \n{\n\tconst TiXmlNode* node;\n\tfor ( node = next; node; node = node->next )\n\t{\n\t\tif ( strcmp( node->Value(), _value ) == 0 )\n\t\t\treturn node;\n\t}\n\treturn 0;\n}\n\n\nconst TiXmlNode* TiXmlNode::PreviousSibling( const char * _value ) const\n{\n\tconst TiXmlNode* node;\n\tfor ( node = prev; node; node = node->prev )\n\t{\n\t\tif ( strcmp( node->Value(), _value ) == 0 )\n\t\t\treturn node;\n\t}\n\treturn 0;\n}\n\n\nvoid TiXmlElement::RemoveAttribute( const char * name )\n{\n    #ifdef TIXML_USE_STL\n\tTIXML_STRING str( name );\n\tTiXmlAttribute* node = attributeSet.Find( str );\n\t#else\n\tTiXmlAttribute* node = attributeSet.Find( name );\n\t#endif\n\tif ( node )\n\t{\n\t\tattributeSet.Remove( node );\n\t\tdelete node;\n\t}\n}\n\nconst TiXmlElement* TiXmlNode::FirstChildElement() const\n{\n\tconst TiXmlNode* node;\n\n\tfor (\tnode = FirstChild();\n\t\t\tnode;\n\t\t\tnode = node->NextSibling() )\n\t{\n\t\tif ( node->ToElement() )\n\t\t\treturn node->ToElement();\n\t}\n\treturn 0;\n}\n\n\nconst TiXmlElement* TiXmlNode::FirstChildElement( const char * _value ) const\n{\n\tconst TiXmlNode* node;\n\n\tfor (\tnode = FirstChild( _value );\n\t\t\tnode;\n\t\t\tnode = node->NextSibling( _value ) )\n\t{\n\t\tif ( node->ToElement() )\n\t\t\treturn node->ToElement();\n\t}\n\treturn 0;\n}\n\n\nconst TiXmlElement* TiXmlNode::NextSiblingElement() const\n{\n\tconst TiXmlNode* node;\n\n\tfor (\tnode = NextSibling();\n\t\t\tnode;\n\t\t\tnode = node->NextSibling() )\n\t{\n\t\tif ( node->ToElement() )\n\t\t\treturn node->ToElement();\n\t}\n\treturn 0;\n}\n\n\nconst TiXmlElement* TiXmlNode::NextSiblingElement( const char * _value ) const\n{\n\tconst TiXmlNode* node;\n\n\tfor (\tnode = NextSibling( _value );\n\t\t\tnode;\n\t\t\tnode = node->NextSibling( _value ) )\n\t{\n\t\tif ( node->ToElement() )\n\t\t\treturn node->ToElement();\n\t}\n\treturn 0;\n}\n\n\nconst TiXmlDocument* TiXmlNode::GetDocument() const\n{\n\tconst TiXmlNode* node;\n\n\tfor( node = this; node; node = node->parent )\n\t{\n\t\tif ( node->ToDocument() )\n\t\t\treturn node->ToDocument();\n\t}\n\treturn 0;\n}\n\n\nTiXmlElement::TiXmlElement (const char * _value)\n\t: TiXmlNode( TiXmlNode::TINYXML_ELEMENT )\n{\n\tfirstChild = lastChild = 0;\n\tvalue = _value;\n}\n\n\n#ifdef TIXML_USE_STL\nTiXmlElement::TiXmlElement( const std::string& _value ) \n\t: TiXmlNode( TiXmlNode::TINYXML_ELEMENT )\n{\n\tfirstChild = lastChild = 0;\n\tvalue = _value;\n}\n#endif\n\n\nTiXmlElement::TiXmlElement( const TiXmlElement& copy)\n\t: TiXmlNode( TiXmlNode::TINYXML_ELEMENT )\n{\n\tfirstChild = lastChild = 0;\n\tcopy.CopyTo( this );\t\n}\n\n\nTiXmlElement& TiXmlElement::operator=( const TiXmlElement& base )\n{\n\tClearThis();\n\tbase.CopyTo( this );\n\treturn *this;\n}\n\n\nTiXmlElement::~TiXmlElement()\n{\n\tClearThis();\n}\n\n\nvoid TiXmlElement::ClearThis()\n{\n\tClear();\n\twhile( attributeSet.First() )\n\t{\n\t\tTiXmlAttribute* node = attributeSet.First();\n\t\tattributeSet.Remove( node );\n\t\tdelete node;\n\t}\n}\n\n\nconst char* TiXmlElement::Attribute( const char* name ) const\n{\n\tconst TiXmlAttribute* node = attributeSet.Find( name );\n\tif ( node )\n\t\treturn node->Value();\n\treturn 0;\n}\n\n\n#ifdef TIXML_USE_STL\nconst std::string* TiXmlElement::Attribute( const std::string& name ) const\n{\n\tconst TiXmlAttribute* attrib = attributeSet.Find( name );\n\tif ( attrib )\n\t\treturn &attrib->ValueStr();\n\treturn 0;\n}\n#endif\n\n\nconst char* TiXmlElement::Attribute( const char* name, int* i ) const\n{\n\tconst TiXmlAttribute* attrib = attributeSet.Find( name );\n\tconst char* result = 0;\n\n\tif ( attrib ) {\n\t\tresult = attrib->Value();\n\t\tif ( i ) {\n\t\t\tattrib->QueryIntValue( i );\n\t\t}\n\t}\n\treturn result;\n}\n\n\n#ifdef TIXML_USE_STL\nconst std::string* TiXmlElement::Attribute( const std::string& name, int* i ) const\n{\n\tconst TiXmlAttribute* attrib = attributeSet.Find( name );\n\tconst std::string* result = 0;\n\n\tif ( attrib ) {\n\t\tresult = &attrib->ValueStr();\n\t\tif ( i ) {\n\t\t\tattrib->QueryIntValue( i );\n\t\t}\n\t}\n\treturn result;\n}\n#endif\n\n\nconst char* TiXmlElement::Attribute( const char* name, double* d ) const\n{\n\tconst TiXmlAttribute* attrib = attributeSet.Find( name );\n\tconst char* result = 0;\n\n\tif ( attrib ) {\n\t\tresult = attrib->Value();\n\t\tif ( d ) {\n\t\t\tattrib->QueryDoubleValue( d );\n\t\t}\n\t}\n\treturn result;\n}\n\n\n#ifdef TIXML_USE_STL\nconst std::string* TiXmlElement::Attribute( const std::string& name, double* d ) const\n{\n\tconst TiXmlAttribute* attrib = attributeSet.Find( name );\n\tconst std::string* result = 0;\n\n\tif ( attrib ) {\n\t\tresult = &attrib->ValueStr();\n\t\tif ( d ) {\n\t\t\tattrib->QueryDoubleValue( d );\n\t\t}\n\t}\n\treturn result;\n}\n#endif\n\n\nint TiXmlElement::QueryIntAttribute( const char* name, int* ival ) const\n{\n\tconst TiXmlAttribute* attrib = attributeSet.Find( name );\n\tif ( !attrib )\n\t\treturn TIXML_NO_ATTRIBUTE;\n\treturn attrib->QueryIntValue( ival );\n}\n\n\nint TiXmlElement::QueryUnsignedAttribute( const char* name, unsigned* value ) const\n{\n\tconst TiXmlAttribute* node = attributeSet.Find( name );\n\tif ( !node )\n\t\treturn TIXML_NO_ATTRIBUTE;\n\n\tint ival = 0;\n\tint result = node->QueryIntValue( &ival );\n\t*value = (unsigned)ival;\n\treturn result;\n}\n\n\nint TiXmlElement::QueryBoolAttribute( const char* name, bool* bval ) const\n{\n\tconst TiXmlAttribute* node = attributeSet.Find( name );\n\tif ( !node )\n\t\treturn TIXML_NO_ATTRIBUTE;\n\t\n\tint result = TIXML_WRONG_TYPE;\n\tif (    StringEqual( node->Value(), \"true\", true, TIXML_ENCODING_UNKNOWN ) \n\t\t || StringEqual( node->Value(), \"yes\", true, TIXML_ENCODING_UNKNOWN ) \n\t\t || StringEqual( node->Value(), \"1\", true, TIXML_ENCODING_UNKNOWN ) ) \n\t{\n\t\t*bval = true;\n\t\tresult = TIXML_SUCCESS;\n\t}\n\telse if (    StringEqual( node->Value(), \"false\", true, TIXML_ENCODING_UNKNOWN ) \n\t\t\t  || StringEqual( node->Value(), \"no\", true, TIXML_ENCODING_UNKNOWN ) \n\t\t\t  || StringEqual( node->Value(), \"0\", true, TIXML_ENCODING_UNKNOWN ) ) \n\t{\n\t\t*bval = false;\n\t\tresult = TIXML_SUCCESS;\n\t}\n\treturn result;\n}\n\n\n\n#ifdef TIXML_USE_STL\nint TiXmlElement::QueryIntAttribute( const std::string& name, int* ival ) const\n{\n\tconst TiXmlAttribute* attrib = attributeSet.Find( name );\n\tif ( !attrib )\n\t\treturn TIXML_NO_ATTRIBUTE;\n\treturn attrib->QueryIntValue( ival );\n}\n#endif\n\n\nint TiXmlElement::QueryDoubleAttribute( const char* name, double* dval ) const\n{\n\tconst TiXmlAttribute* attrib = attributeSet.Find( name );\n\tif ( !attrib )\n\t\treturn TIXML_NO_ATTRIBUTE;\n\treturn attrib->QueryDoubleValue( dval );\n}\n\n\n#ifdef TIXML_USE_STL\nint TiXmlElement::QueryDoubleAttribute( const std::string& name, double* dval ) const\n{\n\tconst TiXmlAttribute* attrib = attributeSet.Find( name );\n\tif ( !attrib )\n\t\treturn TIXML_NO_ATTRIBUTE;\n\treturn attrib->QueryDoubleValue( dval );\n}\n#endif\n\n\nvoid TiXmlElement::SetAttribute( const char * name, int val )\n{\t\n\tTiXmlAttribute* attrib = attributeSet.FindOrCreate( name );\n\tif ( attrib ) {\n\t\tattrib->SetIntValue( val );\n\t}\n}\n\n\n#ifdef TIXML_USE_STL\nvoid TiXmlElement::SetAttribute( const std::string& name, int val )\n{\t\n\tTiXmlAttribute* attrib = attributeSet.FindOrCreate( name );\n\tif ( attrib ) {\n\t\tattrib->SetIntValue( val );\n\t}\n}\n#endif\n\n\nvoid TiXmlElement::SetDoubleAttribute( const char * name, double val )\n{\t\n\tTiXmlAttribute* attrib = attributeSet.FindOrCreate( name );\n\tif ( attrib ) {\n\t\tattrib->SetDoubleValue( val );\n\t}\n}\n\n\n#ifdef TIXML_USE_STL\nvoid TiXmlElement::SetDoubleAttribute( const std::string& name, double val )\n{\t\n\tTiXmlAttribute* attrib = attributeSet.FindOrCreate( name );\n\tif ( attrib ) {\n\t\tattrib->SetDoubleValue( val );\n\t}\n}\n#endif \n\n\nvoid TiXmlElement::SetAttribute( const char * cname, const char * cvalue )\n{\n\tTiXmlAttribute* attrib = attributeSet.FindOrCreate( cname );\n\tif ( attrib ) {\n\t\tattrib->SetValue( cvalue );\n\t}\n}\n\n\n#ifdef TIXML_USE_STL\nvoid TiXmlElement::SetAttribute( const std::string& _name, const std::string& _value )\n{\n\tTiXmlAttribute* attrib = attributeSet.FindOrCreate( _name );\n\tif ( attrib ) {\n\t\tattrib->SetValue( _value );\n\t}\n}\n#endif\n\n\nvoid TiXmlElement::Print( FILE* cfile, int depth ) const\n{\n\tint i;\n\tassert( cfile );\n\tfor ( i=0; i<depth; i++ ) {\n\t\tfprintf( cfile, \"    \" );\n\t}\n\n\tfprintf( cfile, \"<%s\", value.c_str() );\n\n\tconst TiXmlAttribute* attrib;\n\tfor ( attrib = attributeSet.First(); attrib; attrib = attrib->Next() )\n\t{\n\t\tfprintf( cfile, \" \" );\n\t\tattrib->Print( cfile, depth );\n\t}\n\n\t// There are 3 different formatting approaches:\n\t// 1) An element without children is printed as a <foo /> node\n\t// 2) An element with only a text child is printed as <foo> text </foo>\n\t// 3) An element with children is printed on multiple lines.\n\tTiXmlNode* node;\n\tif ( !firstChild )\n\t{\n\t\tfprintf( cfile, \" />\" );\n\t}\n\telse if ( firstChild == lastChild && firstChild->ToText() )\n\t{\n\t\tfprintf( cfile, \">\" );\n\t\tfirstChild->Print( cfile, depth + 1 );\n\t\tfprintf( cfile, \"</%s>\", value.c_str() );\n\t}\n\telse\n\t{\n\t\tfprintf( cfile, \">\" );\n\n\t\tfor ( node = firstChild; node; node=node->NextSibling() )\n\t\t{\n\t\t\tif ( !node->ToText() )\n\t\t\t{\n\t\t\t\tfprintf( cfile, \"\\n\" );\n\t\t\t}\n\t\t\tnode->Print( cfile, depth+1 );\n\t\t}\n\t\tfprintf( cfile, \"\\n\" );\n\t\tfor( i=0; i<depth; ++i ) {\n\t\t\tfprintf( cfile, \"    \" );\n\t\t}\n\t\tfprintf( cfile, \"</%s>\", value.c_str() );\n\t}\n}\n\n\nvoid TiXmlElement::CopyTo( TiXmlElement* target ) const\n{\n\t// superclass:\n\tTiXmlNode::CopyTo( target );\n\n\t// Element class: \n\t// Clone the attributes, then clone the children.\n\tconst TiXmlAttribute* attribute = 0;\n\tfor(\tattribute = attributeSet.First();\n\tattribute;\n\tattribute = attribute->Next() )\n\t{\n\t\ttarget->SetAttribute( attribute->Name(), attribute->Value() );\n\t}\n\n\tTiXmlNode* node = 0;\n\tfor ( node = firstChild; node; node = node->NextSibling() )\n\t{\n\t\ttarget->LinkEndChild( node->Clone() );\n\t}\n}\n\nbool TiXmlElement::Accept( TiXmlVisitor* visitor ) const\n{\n\tif ( visitor->VisitEnter( *this, attributeSet.First() ) ) \n\t{\n\t\tfor ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() )\n\t\t{\n\t\t\tif ( !node->Accept( visitor ) )\n\t\t\t\tbreak;\n\t\t}\n\t}\n\treturn visitor->VisitExit( *this );\n}\n\n\nTiXmlNode* TiXmlElement::Clone() const\n{\n\tTiXmlElement* clone = new TiXmlElement( Value() );\n\tif ( !clone )\n\t\treturn 0;\n\n\tCopyTo( clone );\n\treturn clone;\n}\n\n\nconst char* TiXmlElement::GetText() const\n{\n\tconst TiXmlNode* child = this->FirstChild();\n\tif ( child ) {\n\t\tconst TiXmlText* childText = child->ToText();\n\t\tif ( childText ) {\n\t\t\treturn childText->Value();\n\t\t}\n\t}\n\treturn 0;\n}\n\n\nTiXmlDocument::TiXmlDocument() : TiXmlNode( TiXmlNode::TINYXML_DOCUMENT )\n{\n\ttabsize = 4;\n\tuseMicrosoftBOM = false;\n\tClearError();\n}\n\nTiXmlDocument::TiXmlDocument( const char * documentName ) : TiXmlNode( TiXmlNode::TINYXML_DOCUMENT )\n{\n\ttabsize = 4;\n\tuseMicrosoftBOM = false;\n\tvalue = documentName;\n\tClearError();\n}\n\n\n#ifdef TIXML_USE_STL\nTiXmlDocument::TiXmlDocument( const std::string& documentName ) : TiXmlNode( TiXmlNode::TINYXML_DOCUMENT )\n{\n\ttabsize = 4;\n\tuseMicrosoftBOM = false;\n    value = documentName;\n\tClearError();\n}\n#endif\n\n\nTiXmlDocument::TiXmlDocument( const TiXmlDocument& copy ) : TiXmlNode( TiXmlNode::TINYXML_DOCUMENT )\n{\n\tcopy.CopyTo( this );\n}\n\n\nTiXmlDocument& TiXmlDocument::operator=( const TiXmlDocument& copy )\n{\n\tClear();\n\tcopy.CopyTo( this );\n\treturn *this;\n}\n\n\nbool TiXmlDocument::LoadFile( TiXmlEncoding encoding )\n{\n\treturn LoadFile( Value(), encoding );\n}\n\n\nbool TiXmlDocument::SaveFile() const\n{\n\treturn SaveFile( Value() );\n}\n\nbool TiXmlDocument::LoadFile( const char* _filename, TiXmlEncoding encoding )\n{\n\tTIXML_STRING filename( _filename );\n\tvalue = filename;\n\n\t// reading in binary mode so that tinyxml can normalize the EOL\n\tFILE* file = TiXmlFOpen( value.c_str (), \"rb\" );\t\n\n\tif ( file )\n\t{\n\t\tbool result = LoadFile( file, encoding );\n\t\tfclose( file );\n\t\treturn result;\n\t}\n\telse\n\t{\n\t\tSetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN );\n\t\treturn false;\n\t}\n}\n\nbool TiXmlDocument::LoadFile( FILE* file, TiXmlEncoding encoding )\n{\n\tif ( !file ) \n\t{\n\t\tSetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN );\n\t\treturn false;\n\t}\n\n\t// Delete the existing data:\n\tClear();\n\tlocation.Clear();\n\n\t// Get the file size, so we can pre-allocate the string. HUGE speed impact.\n\tlong length = 0;\n\tfseek( file, 0, SEEK_END );\n\tlength = ftell( file );\n\tfseek( file, 0, SEEK_SET );\n\n\t// Strange case, but good to handle up front.\n\tif ( length <= 0 )\n\t{\n\t\tSetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN );\n\t\treturn false;\n\t}\n\n\t// Subtle bug here. TinyXml did use fgets. But from the XML spec:\n\t// 2.11 End-of-Line Handling\n\t// <snip>\n\t// <quote>\n\t// ...the XML processor MUST behave as if it normalized all line breaks in external \n\t// parsed entities (including the document entity) on input, before parsing, by translating \n\t// both the two-character sequence #xD #xA and any #xD that is not followed by #xA to \n\t// a single #xA character.\n\t// </quote>\n\t//\n\t// It is not clear fgets does that, and certainly isn't clear it works cross platform. \n\t// Generally, you expect fgets to translate from the convention of the OS to the c/unix\n\t// convention, and not work generally.\n\n\t/*\n\twhile( fgets( buf, sizeof(buf), file ) )\n\t{\n\t\tdata += buf;\n\t}\n\t*/\n\n\tchar* buf = new char[ length+1 ];\n\tbuf[0] = 0;\n\n\tif ( fread( buf, length, 1, file ) != 1 ) {\n\t\tdelete [] buf;\n\t\tSetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN );\n\t\treturn false;\n\t}\n\n\t// Process the buffer in place to normalize new lines. (See comment above.)\n\t// Copies from the 'p' to 'q' pointer, where p can advance faster if\n\t// a newline-carriage return is hit.\n\t//\n\t// Wikipedia:\n\t// Systems based on ASCII or a compatible character set use either LF  (Line feed, '\\n', 0x0A, 10 in decimal) or \n\t// CR (Carriage return, '\\r', 0x0D, 13 in decimal) individually, or CR followed by LF (CR+LF, 0x0D 0x0A)...\n\t//\t\t* LF:    Multics, Unix and Unix-like systems (GNU/Linux, AIX, Xenix, Mac OS X, FreeBSD, etc.), BeOS, Amiga, RISC OS, and others\n    //\t\t* CR+LF: DEC RT-11 and most other early non-Unix, non-IBM OSes, CP/M, MP/M, DOS, OS/2, Microsoft Windows, Symbian OS\n    //\t\t* CR:    Commodore 8-bit machines, Apple II family, Mac OS up to version 9 and OS-9\n\n\tconst char* p = buf;\t// the read head\n\tchar* q = buf;\t\t\t// the write head\n\tconst char CR = 0x0d;\n\tconst char LF = 0x0a;\n\n\tbuf[length] = 0;\n\twhile( *p ) {\n\t\tassert( p < (buf+length) );\n\t\tassert( q <= (buf+length) );\n\t\tassert( q <= p );\n\n\t\tif ( *p == CR ) {\n\t\t\t*q++ = LF;\n\t\t\tp++;\n\t\t\tif ( *p == LF ) {\t\t// check for CR+LF (and skip LF)\n\t\t\t\tp++;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t*q++ = *p++;\n\t\t}\n\t}\n\tassert( q <= (buf+length) );\n\t*q = 0;\n\n\tParse( buf, 0, encoding );\n\n\tdelete [] buf;\n\treturn !Error();\n}\n\n\nbool TiXmlDocument::SaveFile( const char * filename ) const\n{\n\t// The old c stuff lives on...\n\tFILE* fp = TiXmlFOpen( filename, \"w\" );\n\tif ( fp )\n\t{\n\t\tbool result = SaveFile( fp );\n\t\tfclose( fp );\n\t\treturn result;\n\t}\n\treturn false;\n}\n\n\nbool TiXmlDocument::SaveFile( FILE* fp ) const\n{\n\tif ( useMicrosoftBOM ) \n\t{\n\t\tconst unsigned char TIXML_UTF_LEAD_0 = 0xefU;\n\t\tconst unsigned char TIXML_UTF_LEAD_1 = 0xbbU;\n\t\tconst unsigned char TIXML_UTF_LEAD_2 = 0xbfU;\n\n\t\tfputc( TIXML_UTF_LEAD_0, fp );\n\t\tfputc( TIXML_UTF_LEAD_1, fp );\n\t\tfputc( TIXML_UTF_LEAD_2, fp );\n\t}\n\tPrint( fp, 0 );\n\treturn (ferror(fp) == 0);\n}\n\n\nvoid TiXmlDocument::CopyTo( TiXmlDocument* target ) const\n{\n\tTiXmlNode::CopyTo( target );\n\n\ttarget->error = error;\n\ttarget->errorId = errorId;\n\ttarget->errorDesc = errorDesc;\n\ttarget->tabsize = tabsize;\n\ttarget->errorLocation = errorLocation;\n\ttarget->useMicrosoftBOM = useMicrosoftBOM;\n\n\tTiXmlNode* node = 0;\n\tfor ( node = firstChild; node; node = node->NextSibling() )\n\t{\n\t\ttarget->LinkEndChild( node->Clone() );\n\t}\t\n}\n\n\nTiXmlNode* TiXmlDocument::Clone() const\n{\n\tTiXmlDocument* clone = new TiXmlDocument();\n\tif ( !clone )\n\t\treturn 0;\n\n\tCopyTo( clone );\n\treturn clone;\n}\n\n\nvoid TiXmlDocument::Print( FILE* cfile, int depth ) const\n{\n\tassert( cfile );\n\tfor ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() )\n\t{\n\t\tnode->Print( cfile, depth );\n\t\tfprintf( cfile, \"\\n\" );\n\t}\n}\n\n\nbool TiXmlDocument::Accept( TiXmlVisitor* visitor ) const\n{\n\tif ( visitor->VisitEnter( *this ) )\n\t{\n\t\tfor ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() )\n\t\t{\n\t\t\tif ( !node->Accept( visitor ) )\n\t\t\t\tbreak;\n\t\t}\n\t}\n\treturn visitor->VisitExit( *this );\n}\n\n\nconst TiXmlAttribute* TiXmlAttribute::Next() const\n{\n\t// We are using knowledge of the sentinel. The sentinel\n\t// have a value or name.\n\tif ( next->value.empty() && next->name.empty() )\n\t\treturn 0;\n\treturn next;\n}\n\n/*\nTiXmlAttribute* TiXmlAttribute::Next()\n{\n\t// We are using knowledge of the sentinel. The sentinel\n\t// have a value or name.\n\tif ( next->value.empty() && next->name.empty() )\n\t\treturn 0;\n\treturn next;\n}\n*/\n\nconst TiXmlAttribute* TiXmlAttribute::Previous() const\n{\n\t// We are using knowledge of the sentinel. The sentinel\n\t// have a value or name.\n\tif ( prev->value.empty() && prev->name.empty() )\n\t\treturn 0;\n\treturn prev;\n}\n\n/*\nTiXmlAttribute* TiXmlAttribute::Previous()\n{\n\t// We are using knowledge of the sentinel. The sentinel\n\t// have a value or name.\n\tif ( prev->value.empty() && prev->name.empty() )\n\t\treturn 0;\n\treturn prev;\n}\n*/\n\nvoid TiXmlAttribute::Print( FILE* cfile, int /*depth*/, TIXML_STRING* str ) const\n{\n\tTIXML_STRING n, v;\n\n\tEncodeString( name, &n );\n\tEncodeString( value, &v );\n\n\tif (value.find ('\\\"') == TIXML_STRING::npos) {\n\t\tif ( cfile ) {\n\t\t\tfprintf (cfile, \"%s=\\\"%s\\\"\", n.c_str(), v.c_str() );\n\t\t}\n\t\tif ( str ) {\n\t\t\t(*str) += n; (*str) += \"=\\\"\"; (*str) += v; (*str) += \"\\\"\";\n\t\t}\n\t}\n\telse {\n\t\tif ( cfile ) {\n\t\t\tfprintf (cfile, \"%s='%s'\", n.c_str(), v.c_str() );\n\t\t}\n\t\tif ( str ) {\n\t\t\t(*str) += n; (*str) += \"='\"; (*str) += v; (*str) += \"'\";\n\t\t}\n\t}\n}\n\n\nint TiXmlAttribute::QueryIntValue( int* ival ) const\n{\n\tif ( TIXML_SSCANF( value.c_str(), \"%d\", ival ) == 1 )\n\t\treturn TIXML_SUCCESS;\n\treturn TIXML_WRONG_TYPE;\n}\n\nint TiXmlAttribute::QueryDoubleValue( double* dval ) const\n{\n\tif ( TIXML_SSCANF( value.c_str(), \"%lf\", dval ) == 1 )\n\t\treturn TIXML_SUCCESS;\n\treturn TIXML_WRONG_TYPE;\n}\n\nvoid TiXmlAttribute::SetIntValue( int _value )\n{\n\tchar buf [64];\n\t#if defined(TIXML_SNPRINTF)\t\t\n\t\tTIXML_SNPRINTF(buf, sizeof(buf), \"%d\", _value);\n\t#else\n\t\tsprintf (buf, \"%d\", _value);\n\t#endif\n\tSetValue (buf);\n}\n\nvoid TiXmlAttribute::SetDoubleValue( double _value )\n{\n\tchar buf [256];\n\t#if defined(TIXML_SNPRINTF)\t\t\n\t\tTIXML_SNPRINTF( buf, sizeof(buf), \"%g\", _value);\n\t#else\n\t\tsprintf (buf, \"%g\", _value);\n\t#endif\n\tSetValue (buf);\n}\n\nint TiXmlAttribute::IntValue() const\n{\n\treturn atoi (value.c_str ());\n}\n\ndouble  TiXmlAttribute::DoubleValue() const\n{\n\treturn atof (value.c_str ());\n}\n\n\nTiXmlComment::TiXmlComment( const TiXmlComment& copy ) : TiXmlNode( TiXmlNode::TINYXML_COMMENT )\n{\n\tcopy.CopyTo( this );\n}\n\n\nTiXmlComment& TiXmlComment::operator=( const TiXmlComment& base )\n{\n\tClear();\n\tbase.CopyTo( this );\n\treturn *this;\n}\n\n\nvoid TiXmlComment::Print( FILE* cfile, int depth ) const\n{\n\tassert( cfile );\n\tfor ( int i=0; i<depth; i++ )\n\t{\n\t\tfprintf( cfile,  \"    \" );\n\t}\n\tfprintf( cfile, \"<!--%s-->\", value.c_str() );\n}\n\n\nvoid TiXmlComment::CopyTo( TiXmlComment* target ) const\n{\n\tTiXmlNode::CopyTo( target );\n}\n\n\nbool TiXmlComment::Accept( TiXmlVisitor* visitor ) const\n{\n\treturn visitor->Visit( *this );\n}\n\n\nTiXmlNode* TiXmlComment::Clone() const\n{\n\tTiXmlComment* clone = new TiXmlComment();\n\n\tif ( !clone )\n\t\treturn 0;\n\n\tCopyTo( clone );\n\treturn clone;\n}\n\n\nvoid TiXmlText::Print( FILE* cfile, int depth ) const\n{\n\tassert( cfile );\n\tif ( cdata )\n\t{\n\t\tint i;\n\t\tfprintf( cfile, \"\\n\" );\n\t\tfor ( i=0; i<depth; i++ ) {\n\t\t\tfprintf( cfile, \"    \" );\n\t\t}\n\t\tfprintf( cfile, \"<![CDATA[%s]]>\\n\", value.c_str() );\t// unformatted output\n\t}\n\telse\n\t{\n\t\tTIXML_STRING buffer;\n\t\tEncodeString( value, &buffer );\n\t\tfprintf( cfile, \"%s\", buffer.c_str() );\n\t}\n}\n\n\nvoid TiXmlText::CopyTo( TiXmlText* target ) const\n{\n\tTiXmlNode::CopyTo( target );\n\ttarget->cdata = cdata;\n}\n\n\nbool TiXmlText::Accept( TiXmlVisitor* visitor ) const\n{\n\treturn visitor->Visit( *this );\n}\n\n\nTiXmlNode* TiXmlText::Clone() const\n{\t\n\tTiXmlText* clone = 0;\n\tclone = new TiXmlText( \"\" );\n\n\tif ( !clone )\n\t\treturn 0;\n\n\tCopyTo( clone );\n\treturn clone;\n}\n\n\nTiXmlDeclaration::TiXmlDeclaration( const char * _version,\n\t\t\t\t\t\t\t\t\tconst char * _encoding,\n\t\t\t\t\t\t\t\t\tconst char * _standalone )\n\t: TiXmlNode( TiXmlNode::TINYXML_DECLARATION )\n{\n\tversion = _version;\n\tencoding = _encoding;\n\tstandalone = _standalone;\n}\n\n\n#ifdef TIXML_USE_STL\nTiXmlDeclaration::TiXmlDeclaration(\tconst std::string& _version,\n\t\t\t\t\t\t\t\t\tconst std::string& _encoding,\n\t\t\t\t\t\t\t\t\tconst std::string& _standalone )\n\t: TiXmlNode( TiXmlNode::TINYXML_DECLARATION )\n{\n\tversion = _version;\n\tencoding = _encoding;\n\tstandalone = _standalone;\n}\n#endif\n\n\nTiXmlDeclaration::TiXmlDeclaration( const TiXmlDeclaration& copy )\n\t: TiXmlNode( TiXmlNode::TINYXML_DECLARATION )\n{\n\tcopy.CopyTo( this );\t\n}\n\n\nTiXmlDeclaration& TiXmlDeclaration::operator=( const TiXmlDeclaration& copy )\n{\n\tClear();\n\tcopy.CopyTo( this );\n\treturn *this;\n}\n\n\nvoid TiXmlDeclaration::Print( FILE* cfile, int /*depth*/, TIXML_STRING* str ) const\n{\n\tif ( cfile ) fprintf( cfile, \"<?xml \" );\n\tif ( str )\t (*str) += \"<?xml \";\n\n\tif ( !version.empty() ) {\n\t\tif ( cfile ) fprintf (cfile, \"version=\\\"%s\\\" \", version.c_str ());\n\t\tif ( str ) { (*str) += \"version=\\\"\"; (*str) += version; (*str) += \"\\\" \"; }\n\t}\n\tif ( !encoding.empty() ) {\n\t\tif ( cfile ) fprintf (cfile, \"encoding=\\\"%s\\\" \", encoding.c_str ());\n\t\tif ( str ) { (*str) += \"encoding=\\\"\"; (*str) += encoding; (*str) += \"\\\" \"; }\n\t}\n\tif ( !standalone.empty() ) {\n\t\tif ( cfile ) fprintf (cfile, \"standalone=\\\"%s\\\" \", standalone.c_str ());\n\t\tif ( str ) { (*str) += \"standalone=\\\"\"; (*str) += standalone; (*str) += \"\\\" \"; }\n\t}\n\tif ( cfile ) fprintf( cfile, \"?>\" );\n\tif ( str )\t (*str) += \"?>\";\n}\n\n\nvoid TiXmlDeclaration::CopyTo( TiXmlDeclaration* target ) const\n{\n\tTiXmlNode::CopyTo( target );\n\n\ttarget->version = version;\n\ttarget->encoding = encoding;\n\ttarget->standalone = standalone;\n}\n\n\nbool TiXmlDeclaration::Accept( TiXmlVisitor* visitor ) const\n{\n\treturn visitor->Visit( *this );\n}\n\n\nTiXmlNode* TiXmlDeclaration::Clone() const\n{\t\n\tTiXmlDeclaration* clone = new TiXmlDeclaration();\n\n\tif ( !clone )\n\t\treturn 0;\n\n\tCopyTo( clone );\n\treturn clone;\n}\n\n\nvoid TiXmlUnknown::Print( FILE* cfile, int depth ) const\n{\n\tfor ( int i=0; i<depth; i++ )\n\t\tfprintf( cfile, \"    \" );\n\tfprintf( cfile, \"<%s>\", value.c_str() );\n}\n\n\nvoid TiXmlUnknown::CopyTo( TiXmlUnknown* target ) const\n{\n\tTiXmlNode::CopyTo( target );\n}\n\n\nbool TiXmlUnknown::Accept( TiXmlVisitor* visitor ) const\n{\n\treturn visitor->Visit( *this );\n}\n\n\nTiXmlNode* TiXmlUnknown::Clone() const\n{\n\tTiXmlUnknown* clone = new TiXmlUnknown();\n\n\tif ( !clone )\n\t\treturn 0;\n\n\tCopyTo( clone );\n\treturn clone;\n}\n\n\nTiXmlAttributeSet::TiXmlAttributeSet()\n{\n\tsentinel.next = &sentinel;\n\tsentinel.prev = &sentinel;\n}\n\n\nTiXmlAttributeSet::~TiXmlAttributeSet()\n{\n\tassert( sentinel.next == &sentinel );\n\tassert( sentinel.prev == &sentinel );\n}\n\n\nvoid TiXmlAttributeSet::Add( TiXmlAttribute* addMe )\n{\n    #ifdef TIXML_USE_STL\n\tassert( !Find( TIXML_STRING( addMe->Name() ) ) );\t// Shouldn't be multiply adding to the set.\n\t#else\n\tassert( !Find( addMe->Name() ) );\t// Shouldn't be multiply adding to the set.\n\t#endif\n\n\taddMe->next = &sentinel;\n\taddMe->prev = sentinel.prev;\n\n\tsentinel.prev->next = addMe;\n\tsentinel.prev      = addMe;\n}\n\nvoid TiXmlAttributeSet::Remove( TiXmlAttribute* removeMe )\n{\n\tTiXmlAttribute* node;\n\n\tfor( node = sentinel.next; node != &sentinel; node = node->next )\n\t{\n\t\tif ( node == removeMe )\n\t\t{\n\t\t\tnode->prev->next = node->next;\n\t\t\tnode->next->prev = node->prev;\n\t\t\tnode->next = 0;\n\t\t\tnode->prev = 0;\n\t\t\treturn;\n\t\t}\n\t}\n\tassert( 0 );\t\t// we tried to remove a non-linked attribute.\n}\n\n\n#ifdef TIXML_USE_STL\nTiXmlAttribute* TiXmlAttributeSet::Find( const std::string& name ) const\n{\n\tfor( TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next )\n\t{\n\t\tif ( node->name == name )\n\t\t\treturn node;\n\t}\n\treturn 0;\n}\n\nTiXmlAttribute* TiXmlAttributeSet::FindOrCreate( const std::string& _name )\n{\n\tTiXmlAttribute* attrib = Find( _name );\n\tif ( !attrib ) {\n\t\tattrib = new TiXmlAttribute();\n\t\tAdd( attrib );\n\t\tattrib->SetName( _name );\n\t}\n\treturn attrib;\n}\n#endif\n\n\nTiXmlAttribute* TiXmlAttributeSet::Find( const char* name ) const\n{\n\tfor( TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next )\n\t{\n\t\tif ( strcmp( node->name.c_str(), name ) == 0 )\n\t\t\treturn node;\n\t}\n\treturn 0;\n}\n\n\nTiXmlAttribute* TiXmlAttributeSet::FindOrCreate( const char* _name )\n{\n\tTiXmlAttribute* attrib = Find( _name );\n\tif ( !attrib ) {\n\t\tattrib = new TiXmlAttribute();\n\t\tAdd( attrib );\n\t\tattrib->SetName( _name );\n\t}\n\treturn attrib;\n}\n\n\n#ifdef TIXML_USE_STL\t\nstd::istream& operator>> (std::istream & in, TiXmlNode & base)\n{\n\tTIXML_STRING tag;\n\ttag.reserve( 8 * 1000 );\n\tbase.StreamIn( &in, &tag );\n\n\tbase.Parse( tag.c_str(), 0, TIXML_DEFAULT_ENCODING );\n\treturn in;\n}\n#endif\n\n\n#ifdef TIXML_USE_STL\t\nstd::ostream& operator<< (std::ostream & out, const TiXmlNode & base)\n{\n\tTiXmlPrinter printer;\n\tprinter.SetStreamPrinting();\n\tbase.Accept( &printer );\n\tout << printer.Str();\n\n\treturn out;\n}\n\n\nstd::string& operator<< (std::string& out, const TiXmlNode& base )\n{\n\tTiXmlPrinter printer;\n\tprinter.SetStreamPrinting();\n\tbase.Accept( &printer );\n\tout.append( printer.Str() );\n\n\treturn out;\n}\n#endif\n\n\nTiXmlHandle TiXmlHandle::FirstChild() const\n{\n\tif ( node )\n\t{\n\t\tTiXmlNode* child = node->FirstChild();\n\t\tif ( child )\n\t\t\treturn TiXmlHandle( child );\n\t}\n\treturn TiXmlHandle( 0 );\n}\n\n\nTiXmlHandle TiXmlHandle::FirstChild( const char * value ) const\n{\n\tif ( node )\n\t{\n\t\tTiXmlNode* child = node->FirstChild( value );\n\t\tif ( child )\n\t\t\treturn TiXmlHandle( child );\n\t}\n\treturn TiXmlHandle( 0 );\n}\n\n\nTiXmlHandle TiXmlHandle::FirstChildElement() const\n{\n\tif ( node )\n\t{\n\t\tTiXmlElement* child = node->FirstChildElement();\n\t\tif ( child )\n\t\t\treturn TiXmlHandle( child );\n\t}\n\treturn TiXmlHandle( 0 );\n}\n\n\nTiXmlHandle TiXmlHandle::FirstChildElement( const char * value ) const\n{\n\tif ( node )\n\t{\n\t\tTiXmlElement* child = node->FirstChildElement( value );\n\t\tif ( child )\n\t\t\treturn TiXmlHandle( child );\n\t}\n\treturn TiXmlHandle( 0 );\n}\n\n\nTiXmlHandle TiXmlHandle::Child( int count ) const\n{\n\tif ( node )\n\t{\n\t\tint i;\n\t\tTiXmlNode* child = node->FirstChild();\n\t\tfor (\ti=0;\n\t\t\t\tchild && i<count;\n\t\t\t\tchild = child->NextSibling(), ++i )\n\t\t{\n\t\t\t// nothing\n\t\t}\n\t\tif ( child )\n\t\t\treturn TiXmlHandle( child );\n\t}\n\treturn TiXmlHandle( 0 );\n}\n\n\nTiXmlHandle TiXmlHandle::Child( const char* value, int count ) const\n{\n\tif ( node )\n\t{\n\t\tint i;\n\t\tTiXmlNode* child = node->FirstChild( value );\n\t\tfor (\ti=0;\n\t\t\t\tchild && i<count;\n\t\t\t\tchild = child->NextSibling( value ), ++i )\n\t\t{\n\t\t\t// nothing\n\t\t}\n\t\tif ( child )\n\t\t\treturn TiXmlHandle( child );\n\t}\n\treturn TiXmlHandle( 0 );\n}\n\n\nTiXmlHandle TiXmlHandle::ChildElement( int count ) const\n{\n\tif ( node )\n\t{\n\t\tint i;\n\t\tTiXmlElement* child = node->FirstChildElement();\n\t\tfor (\ti=0;\n\t\t\t\tchild && i<count;\n\t\t\t\tchild = child->NextSiblingElement(), ++i )\n\t\t{\n\t\t\t// nothing\n\t\t}\n\t\tif ( child )\n\t\t\treturn TiXmlHandle( child );\n\t}\n\treturn TiXmlHandle( 0 );\n}\n\n\nTiXmlHandle TiXmlHandle::ChildElement( const char* value, int count ) const\n{\n\tif ( node )\n\t{\n\t\tint i;\n\t\tTiXmlElement* child = node->FirstChildElement( value );\n\t\tfor (\ti=0;\n\t\t\t\tchild && i<count;\n\t\t\t\tchild = child->NextSiblingElement( value ), ++i )\n\t\t{\n\t\t\t// nothing\n\t\t}\n\t\tif ( child )\n\t\t\treturn TiXmlHandle( child );\n\t}\n\treturn TiXmlHandle( 0 );\n}\n\n\nbool TiXmlPrinter::VisitEnter( const TiXmlDocument& )\n{\n\treturn true;\n}\n\nbool TiXmlPrinter::VisitExit( const TiXmlDocument& )\n{\n\treturn true;\n}\n\nbool TiXmlPrinter::VisitEnter( const TiXmlElement& element, const TiXmlAttribute* firstAttribute )\n{\n\tDoIndent();\n\tbuffer += \"<\";\n\tbuffer += element.Value();\n\n\tfor( const TiXmlAttribute* attrib = firstAttribute; attrib; attrib = attrib->Next() )\n\t{\n\t\tbuffer += \" \";\n\t\tattrib->Print( 0, 0, &buffer );\n\t}\n\n\tif ( !element.FirstChild() ) \n\t{\n\t\tbuffer += \" />\";\n\t\tDoLineBreak();\n\t}\n\telse \n\t{\n\t\tbuffer += \">\";\n\t\tif (    element.FirstChild()->ToText()\n\t\t\t  && element.LastChild() == element.FirstChild()\n\t\t\t  && element.FirstChild()->ToText()->CDATA() == false )\n\t\t{\n\t\t\tsimpleTextPrint = true;\n\t\t\t// no DoLineBreak()!\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDoLineBreak();\n\t\t}\n\t}\n\t++depth;\t\n\treturn true;\n}\n\n\nbool TiXmlPrinter::VisitExit( const TiXmlElement& element )\n{\n\t--depth;\n\tif ( !element.FirstChild() ) \n\t{\n\t\t// nothing.\n\t}\n\telse \n\t{\n\t\tif ( simpleTextPrint )\n\t\t{\n\t\t\tsimpleTextPrint = false;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDoIndent();\n\t\t}\n\t\tbuffer += \"</\";\n\t\tbuffer += element.Value();\n\t\tbuffer += \">\";\n\t\tDoLineBreak();\n\t}\n\treturn true;\n}\n\n\nbool TiXmlPrinter::Visit( const TiXmlText& text )\n{\n\tif ( text.CDATA() )\n\t{\n\t\tDoIndent();\n\t\tbuffer += \"<![CDATA[\";\n\t\tbuffer += text.Value();\n\t\tbuffer += \"]]>\";\n\t\tDoLineBreak();\n\t}\n\telse if ( simpleTextPrint )\n\t{\n\t\tTIXML_STRING str;\n\t\tTiXmlBase::EncodeString( text.ValueTStr(), &str );\n\t\tbuffer += str;\n\t}\n\telse\n\t{\n\t\tDoIndent();\n\t\tTIXML_STRING str;\n\t\tTiXmlBase::EncodeString( text.ValueTStr(), &str );\n\t\tbuffer += str;\n\t\tDoLineBreak();\n\t}\n\treturn true;\n}\n\n\nbool TiXmlPrinter::Visit( const TiXmlDeclaration& declaration )\n{\n\tDoIndent();\n\tdeclaration.Print( 0, 0, &buffer );\n\tDoLineBreak();\n\treturn true;\n}\n\n\nbool TiXmlPrinter::Visit( const TiXmlComment& comment )\n{\n\tDoIndent();\n\tbuffer += \"<!--\";\n\tbuffer += comment.Value();\n\tbuffer += \"-->\";\n\tDoLineBreak();\n\treturn true;\n}\n\n\nbool TiXmlPrinter::Visit( const TiXmlUnknown& unknown )\n{\n\tDoIndent();\n\tbuffer += \"<\";\n\tbuffer += unknown.Value();\n\tbuffer += \">\";\n\tDoLineBreak();\n\treturn true;\n}\n\n"
  },
  {
    "path": "external/tinyxml/tinyxml.h",
    "content": "/*\nwww.sourceforge.net/projects/tinyxml\nOriginal code by Lee Thomason (www.grinninglizard.com)\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any\ndamages arising from the use of this software.\n\nPermission is granted to anyone to use this software for any\npurpose, including commercial applications, and to alter it and\nredistribute it freely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must\nnot claim that you wrote the original software. If you use this\nsoftware in a product, an acknowledgment in the product documentation\nwould be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and\nmust not be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\ndistribution.\n*/\n\n\n#ifndef TINYXML_INCLUDED\n#define TINYXML_INCLUDED\n\n#ifdef _MSC_VER\n#pragma warning( push )\n#pragma warning( disable : 4530 )\n#pragma warning( disable : 4786 )\n#endif\n\n#include <ctype.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <assert.h>\n\n// Help out windows:\n#if defined( _DEBUG ) && !defined( DEBUG )\n#define DEBUG\n#endif\n\n#ifdef TIXML_USE_STL\n\t#include <string>\n \t#include <iostream>\n\t#include <sstream>\n\t#define TIXML_STRING\t\tstd::string\n#else\n\t#include \"tinystr.h\"\n\t#define TIXML_STRING\t\tTiXmlString\n#endif\n\n// Deprecated library function hell. Compilers want to use the\n// new safe versions. This probably doesn't fully address the problem,\n// but it gets closer. There are too many compilers for me to fully\n// test. If you get compilation troubles, undefine TIXML_SAFE\n#define TIXML_SAFE\n\n#ifdef TIXML_SAFE\n\t#if defined(_MSC_VER) && (_MSC_VER >= 1400 )\n\t\t// Microsoft visual studio, version 2005 and higher.\n\t\t#define TIXML_SNPRINTF _snprintf_s\n\t\t#define TIXML_SSCANF   sscanf_s\n\t#elif defined(_MSC_VER) && (_MSC_VER >= 1200 )\n\t\t// Microsoft visual studio, version 6 and higher.\n\t\t//#pragma message( \"Using _sn* functions.\" )\n\t\t#define TIXML_SNPRINTF _snprintf\n\t\t#define TIXML_SSCANF   sscanf\n\t#elif defined(__GNUC__) && (__GNUC__ >= 3 )\n\t\t// GCC version 3 and higher.s\n\t\t//#warning( \"Using sn* functions.\" )\n\t\t#define TIXML_SNPRINTF snprintf\n\t\t#define TIXML_SSCANF   sscanf\n\t#else\n\t\t#define TIXML_SNPRINTF snprintf\n\t\t#define TIXML_SSCANF   sscanf\n\t#endif\n#endif\t\n\nclass TiXmlDocument;\nclass TiXmlElement;\nclass TiXmlComment;\nclass TiXmlUnknown;\nclass TiXmlAttribute;\nclass TiXmlText;\nclass TiXmlDeclaration;\nclass TiXmlParsingData;\n\nconst int TIXML_MAJOR_VERSION = 2;\nconst int TIXML_MINOR_VERSION = 6;\nconst int TIXML_PATCH_VERSION = 2;\n\n/*\tInternal structure for tracking location of items \n\tin the XML file.\n*/\nstruct TiXmlCursor\n{\n\tTiXmlCursor()\t\t{ Clear(); }\n\tvoid Clear()\t\t{ row = col = -1; }\n\n\tint row;\t// 0 based.\n\tint col;\t// 0 based.\n};\n\n\n/**\n\tImplements the interface to the \"Visitor pattern\" (see the Accept() method.)\n\tIf you call the Accept() method, it requires being passed a TiXmlVisitor\n\tclass to handle callbacks. For nodes that contain other nodes (Document, Element)\n\tyou will get called with a VisitEnter/VisitExit pair. Nodes that are always leaves\n\tare simply called with Visit().\n\n\tIf you return 'true' from a Visit method, recursive parsing will continue. If you return\n\tfalse, <b>no children of this node or its sibilings</b> will be Visited.\n\n\tAll flavors of Visit methods have a default implementation that returns 'true' (continue \n\tvisiting). You need to only override methods that are interesting to you.\n\n\tGenerally Accept() is called on the TiXmlDocument, although all nodes suppert Visiting.\n\n\tYou should never change the document from a callback.\n\n\t@sa TiXmlNode::Accept()\n*/\nclass TiXmlVisitor\n{\npublic:\n\tvirtual ~TiXmlVisitor() {}\n\n\t/// Visit a document.\n\tvirtual bool VisitEnter( const TiXmlDocument& /*doc*/ )\t\t\t{ return true; }\n\t/// Visit a document.\n\tvirtual bool VisitExit( const TiXmlDocument& /*doc*/ )\t\t\t{ return true; }\n\n\t/// Visit an element.\n\tvirtual bool VisitEnter( const TiXmlElement& /*element*/, const TiXmlAttribute* /*firstAttribute*/ )\t{ return true; }\n\t/// Visit an element.\n\tvirtual bool VisitExit( const TiXmlElement& /*element*/ )\t\t{ return true; }\n\n\t/// Visit a declaration\n\tvirtual bool Visit( const TiXmlDeclaration& /*declaration*/ )\t{ return true; }\n\t/// Visit a text node\n\tvirtual bool Visit( const TiXmlText& /*text*/ )\t\t\t\t\t{ return true; }\n\t/// Visit a comment node\n\tvirtual bool Visit( const TiXmlComment& /*comment*/ )\t\t\t{ return true; }\n\t/// Visit an unknown node\n\tvirtual bool Visit( const TiXmlUnknown& /*unknown*/ )\t\t\t{ return true; }\n};\n\n// Only used by Attribute::Query functions\nenum \n{ \n\tTIXML_SUCCESS,\n\tTIXML_NO_ATTRIBUTE,\n\tTIXML_WRONG_TYPE\n};\n\n\n// Used by the parsing routines.\nenum TiXmlEncoding\n{\n\tTIXML_ENCODING_UNKNOWN,\n\tTIXML_ENCODING_UTF8,\n\tTIXML_ENCODING_LEGACY\n};\n\nconst TiXmlEncoding TIXML_DEFAULT_ENCODING = TIXML_ENCODING_UNKNOWN;\n\n/** TiXmlBase is a base class for every class in TinyXml.\n\tIt does little except to establish that TinyXml classes\n\tcan be printed and provide some utility functions.\n\n\tIn XML, the document and elements can contain\n\tother elements and other types of nodes.\n\n\t@verbatim\n\tA Document can contain:\tElement\t(container or leaf)\n\t\t\t\t\t\t\tComment (leaf)\n\t\t\t\t\t\t\tUnknown (leaf)\n\t\t\t\t\t\t\tDeclaration( leaf )\n\n\tAn Element can contain:\tElement (container or leaf)\n\t\t\t\t\t\t\tText\t(leaf)\n\t\t\t\t\t\t\tAttributes (not on tree)\n\t\t\t\t\t\t\tComment (leaf)\n\t\t\t\t\t\t\tUnknown (leaf)\n\n\tA Decleration contains: Attributes (not on tree)\n\t@endverbatim\n*/\nclass TiXmlBase\n{\n\tfriend class TiXmlNode;\n\tfriend class TiXmlElement;\n\tfriend class TiXmlDocument;\n\npublic:\n\tTiXmlBase()\t:\tuserData(0)\t\t{}\n\tvirtual ~TiXmlBase()\t\t\t{}\n\n\t/**\tAll TinyXml classes can print themselves to a filestream\n\t\tor the string class (TiXmlString in non-STL mode, std::string\n\t\tin STL mode.) Either or both cfile and str can be null.\n\t\t\n\t\tThis is a formatted print, and will insert \n\t\ttabs and newlines.\n\t\t\n\t\t(For an unformatted stream, use the << operator.)\n\t*/\n\tvirtual void Print( FILE* cfile, int depth ) const = 0;\n\n\t/**\tThe world does not agree on whether white space should be kept or\n\t\tnot. In order to make everyone happy, these global, static functions\n\t\tare provided to set whether or not TinyXml will condense all white space\n\t\tinto a single space or not. The default is to condense. Note changing this\n\t\tvalue is not thread safe.\n\t*/\n\tstatic void SetCondenseWhiteSpace( bool condense )\t\t{ condenseWhiteSpace = condense; }\n\n\t/// Return the current white space setting.\n\tstatic bool IsWhiteSpaceCondensed()\t\t\t\t\t\t{ return condenseWhiteSpace; }\n\n\t/** Return the position, in the original source file, of this node or attribute.\n\t\tThe row and column are 1-based. (That is the first row and first column is\n\t\t1,1). If the returns values are 0 or less, then the parser does not have\n\t\ta row and column value.\n\n\t\tGenerally, the row and column value will be set when the TiXmlDocument::Load(),\n\t\tTiXmlDocument::LoadFile(), or any TiXmlNode::Parse() is called. It will NOT be set\n\t\twhen the DOM was created from operator>>.\n\n\t\tThe values reflect the initial load. Once the DOM is modified programmatically\n\t\t(by adding or changing nodes and attributes) the new values will NOT update to\n\t\treflect changes in the document.\n\n\t\tThere is a minor performance cost to computing the row and column. Computation\n\t\tcan be disabled if TiXmlDocument::SetTabSize() is called with 0 as the value.\n\n\t\t@sa TiXmlDocument::SetTabSize()\n\t*/\n\tint Row() const\t\t\t{ return location.row + 1; }\n\tint Column() const\t\t{ return location.col + 1; }\t///< See Row()\n\n\tvoid  SetUserData( void* user )\t\t\t{ userData = user; }\t///< Set a pointer to arbitrary user data.\n\tvoid* GetUserData()\t\t\t\t\t\t{ return userData; }\t///< Get a pointer to arbitrary user data.\n\tconst void* GetUserData() const \t\t{ return userData; }\t///< Get a pointer to arbitrary user data.\n\n\t// Table that returs, for a given lead byte, the total number of bytes\n\t// in the UTF-8 sequence.\n\tstatic const int utf8ByteTable[256];\n\n\tvirtual const char* Parse(\tconst char* p, \n\t\t\t\t\t\t\t\tTiXmlParsingData* data, \n\t\t\t\t\t\t\t\tTiXmlEncoding encoding /*= TIXML_ENCODING_UNKNOWN */ ) = 0;\n\n\t/** Expands entities in a string. Note this should not contian the tag's '<', '>', etc, \n\t\tor they will be transformed into entities!\n\t*/\n\tstatic void EncodeString( const TIXML_STRING& str, TIXML_STRING* out );\n\n\tenum\n\t{\n\t\tTIXML_NO_ERROR = 0,\n\t\tTIXML_ERROR,\n\t\tTIXML_ERROR_OPENING_FILE,\n\t\tTIXML_ERROR_PARSING_ELEMENT,\n\t\tTIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME,\n\t\tTIXML_ERROR_READING_ELEMENT_VALUE,\n\t\tTIXML_ERROR_READING_ATTRIBUTES,\n\t\tTIXML_ERROR_PARSING_EMPTY,\n\t\tTIXML_ERROR_READING_END_TAG,\n\t\tTIXML_ERROR_PARSING_UNKNOWN,\n\t\tTIXML_ERROR_PARSING_COMMENT,\n\t\tTIXML_ERROR_PARSING_DECLARATION,\n\t\tTIXML_ERROR_DOCUMENT_EMPTY,\n\t\tTIXML_ERROR_EMBEDDED_NULL,\n\t\tTIXML_ERROR_PARSING_CDATA,\n\t\tTIXML_ERROR_DOCUMENT_TOP_ONLY,\n\n\t\tTIXML_ERROR_STRING_COUNT\n\t};\n\nprotected:\n\n\tstatic const char* SkipWhiteSpace( const char*, TiXmlEncoding encoding );\n\n\tinline static bool IsWhiteSpace( char c )\t\t\n\t{ \n\t\treturn ( isspace( (unsigned char) c ) || c == '\\n' || c == '\\r' ); \n\t}\n\tinline static bool IsWhiteSpace( int c )\n\t{\n\t\tif ( c < 256 )\n\t\t\treturn IsWhiteSpace( (char) c );\n\t\treturn false;\t// Again, only truly correct for English/Latin...but usually works.\n\t}\n\n\t#ifdef TIXML_USE_STL\n\tstatic bool\tStreamWhiteSpace( std::istream * in, TIXML_STRING * tag );\n\tstatic bool StreamTo( std::istream * in, int character, TIXML_STRING * tag );\n\t#endif\n\n\t/*\tReads an XML name into the string provided. Returns\n\t\ta pointer just past the last character of the name,\n\t\tor 0 if the function has an error.\n\t*/\n\tstatic const char* ReadName( const char* p, TIXML_STRING* name, TiXmlEncoding encoding );\n\n\t/*\tReads text. Returns a pointer past the given end tag.\n\t\tWickedly complex options, but it keeps the (sensitive) code in one place.\n\t*/\n\tstatic const char* ReadText(\tconst char* in,\t\t\t\t// where to start\n\t\t\t\t\t\t\t\t\tTIXML_STRING* text,\t\t\t// the string read\n\t\t\t\t\t\t\t\t\tbool ignoreWhiteSpace,\t\t// whether to keep the white space\n\t\t\t\t\t\t\t\t\tconst char* endTag,\t\t\t// what ends this text\n\t\t\t\t\t\t\t\t\tbool ignoreCase,\t\t\t// whether to ignore case in the end tag\n\t\t\t\t\t\t\t\t\tTiXmlEncoding encoding );\t// the current encoding\n\n\t// If an entity has been found, transform it into a character.\n\tstatic const char* GetEntity( const char* in, char* value, int* length, TiXmlEncoding encoding );\n\n\t// Get a character, while interpreting entities.\n\t// The length can be from 0 to 4 bytes.\n\tinline static const char* GetChar( const char* p, char* _value, int* length, TiXmlEncoding encoding )\n\t{\n\t\tassert( p );\n\t\tif ( encoding == TIXML_ENCODING_UTF8 )\n\t\t{\n\t\t\t*length = utf8ByteTable[ *((const unsigned char*)p) ];\n\t\t\tassert( *length >= 0 && *length < 5 );\n\t\t}\n\t\telse\n\t\t{\n\t\t\t*length = 1;\n\t\t}\n\n\t\tif ( *length == 1 )\n\t\t{\n\t\t\tif ( *p == '&' )\n\t\t\t\treturn GetEntity( p, _value, length, encoding );\n\t\t\t*_value = *p;\n\t\t\treturn p+1;\n\t\t}\n\t\telse if ( *length )\n\t\t{\n\t\t\t//strncpy( _value, p, *length );\t// lots of compilers don't like this function (unsafe),\n\t\t\t\t\t\t\t\t\t\t\t\t// and the null terminator isn't needed\n\t\t\tfor( int i=0; p[i] && i<*length; ++i ) {\n\t\t\t\t_value[i] = p[i];\n\t\t\t}\n\t\t\treturn p + (*length);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Not valid text.\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\t// Return true if the next characters in the stream are any of the endTag sequences.\n\t// Ignore case only works for english, and should only be relied on when comparing\n\t// to English words: StringEqual( p, \"version\", true ) is fine.\n\tstatic bool StringEqual(\tconst char* p,\n\t\t\t\t\t\t\t\tconst char* endTag,\n\t\t\t\t\t\t\t\tbool ignoreCase,\n\t\t\t\t\t\t\t\tTiXmlEncoding encoding );\n\n\tstatic const char* errorString[ TIXML_ERROR_STRING_COUNT ];\n\n\tTiXmlCursor location;\n\n    /// Field containing a generic user pointer\n\tvoid*\t\t\tuserData;\n\t\n\t// None of these methods are reliable for any language except English.\n\t// Good for approximation, not great for accuracy.\n\tstatic int IsAlpha( unsigned char anyByte, TiXmlEncoding encoding );\n\tstatic int IsAlphaNum( unsigned char anyByte, TiXmlEncoding encoding );\n\tinline static int ToLower( int v, TiXmlEncoding encoding )\n\t{\n\t\tif ( encoding == TIXML_ENCODING_UTF8 )\n\t\t{\n\t\t\tif ( v < 128 ) return tolower( v );\n\t\t\treturn v;\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn tolower( v );\n\t\t}\n\t}\n\tstatic void ConvertUTF32ToUTF8( unsigned long input, char* output, int* length );\n\nprivate:\n\tTiXmlBase( const TiXmlBase& );\t\t\t\t// not implemented.\n\tvoid operator=( const TiXmlBase& base );\t// not allowed.\n\n\tstruct Entity\n\t{\n\t\tconst char*     str;\n\t\tunsigned int\tstrLength;\n\t\tchar\t\t    chr;\n\t};\n\tenum\n\t{\n\t\tNUM_ENTITY = 5,\n\t\tMAX_ENTITY_LENGTH = 6\n\n\t};\n\tstatic Entity entity[ NUM_ENTITY ];\n\tstatic bool condenseWhiteSpace;\n};\n\n\n/** The parent class for everything in the Document Object Model.\n\t(Except for attributes).\n\tNodes have siblings, a parent, and children. A node can be\n\tin a document, or stand on its own. The type of a TiXmlNode\n\tcan be queried, and it can be cast to its more defined type.\n*/\nclass TiXmlNode : public TiXmlBase\n{\n\tfriend class TiXmlDocument;\n\tfriend class TiXmlElement;\n\npublic:\n\t#ifdef TIXML_USE_STL\t\n\n\t    /** An input stream operator, for every class. Tolerant of newlines and\n\t\t    formatting, but doesn't expect them.\n\t    */\n\t    friend std::istream& operator >> (std::istream& in, TiXmlNode& base);\n\n\t    /** An output stream operator, for every class. Note that this outputs\n\t\t    without any newlines or formatting, as opposed to Print(), which\n\t\t    includes tabs and new lines.\n\n\t\t    The operator<< and operator>> are not completely symmetric. Writing\n\t\t    a node to a stream is very well defined. You'll get a nice stream\n\t\t    of output, without any extra whitespace or newlines.\n\t\t    \n\t\t    But reading is not as well defined. (As it always is.) If you create\n\t\t    a TiXmlElement (for example) and read that from an input stream,\n\t\t    the text needs to define an element or junk will result. This is\n\t\t    true of all input streams, but it's worth keeping in mind.\n\n\t\t    A TiXmlDocument will read nodes until it reads a root element, and\n\t\t\tall the children of that root element.\n\t    */\t\n\t    friend std::ostream& operator<< (std::ostream& out, const TiXmlNode& base);\n\n\t\t/// Appends the XML node or attribute to a std::string.\n\t\tfriend std::string& operator<< (std::string& out, const TiXmlNode& base );\n\n\t#endif\n\n\t/** The types of XML nodes supported by TinyXml. (All the\n\t\t\tunsupported types are picked up by UNKNOWN.)\n\t*/\n\tenum NodeType\n\t{\n\t\tTINYXML_DOCUMENT,\n\t\tTINYXML_ELEMENT,\n\t\tTINYXML_COMMENT,\n\t\tTINYXML_UNKNOWN,\n\t\tTINYXML_TEXT,\n\t\tTINYXML_DECLARATION,\n\t\tTINYXML_TYPECOUNT\n\t};\n\n\tvirtual ~TiXmlNode();\n\n\t/** The meaning of 'value' changes for the specific type of\n\t\tTiXmlNode.\n\t\t@verbatim\n\t\tDocument:\tfilename of the xml file\n\t\tElement:\tname of the element\n\t\tComment:\tthe comment text\n\t\tUnknown:\tthe tag contents\n\t\tText:\t\tthe text string\n\t\t@endverbatim\n\n\t\tThe subclasses will wrap this function.\n\t*/\n\tconst char *Value() const { return value.c_str (); }\n\n    #ifdef TIXML_USE_STL\n\t/** Return Value() as a std::string. If you only use STL,\n\t    this is more efficient than calling Value().\n\t\tOnly available in STL mode.\n\t*/\n\tconst std::string& ValueStr() const { return value; }\n\t#endif\n\n\tconst TIXML_STRING& ValueTStr() const { return value; }\n\n\t/** Changes the value of the node. Defined as:\n\t\t@verbatim\n\t\tDocument:\tfilename of the xml file\n\t\tElement:\tname of the element\n\t\tComment:\tthe comment text\n\t\tUnknown:\tthe tag contents\n\t\tText:\t\tthe text string\n\t\t@endverbatim\n\t*/\n\tvoid SetValue(const char * _value) { value = _value;}\n\n    #ifdef TIXML_USE_STL\n\t/// STL std::string form.\n\tvoid SetValue( const std::string& _value )\t{ value = _value; }\n\t#endif\n\n\t/// Delete all the children of this node. Does not affect 'this'.\n\tvoid Clear();\n\n\t/// One step up the DOM.\n\tTiXmlNode* Parent()\t\t\t\t\t\t\t{ return parent; }\n\tconst TiXmlNode* Parent() const\t\t\t\t{ return parent; }\n\n\tconst TiXmlNode* FirstChild()\tconst\t\t{ return firstChild; }\t///< The first child of this node. Will be null if there are no children.\n\tTiXmlNode* FirstChild()\t\t\t\t\t\t{ return firstChild; }\n\tconst TiXmlNode* FirstChild( const char * value ) const;\t\t\t///< The first child of this node with the matching 'value'. Will be null if none found.\n\t/// The first child of this node with the matching 'value'. Will be null if none found.\n\tTiXmlNode* FirstChild( const char * _value ) {\n\t\t// Call through to the const version - safe since nothing is changed. Exiting syntax: cast this to a const (always safe)\n\t\t// call the method, cast the return back to non-const.\n\t\treturn const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->FirstChild( _value ));\n\t}\n\tconst TiXmlNode* LastChild() const\t{ return lastChild; }\t\t/// The last child of this node. Will be null if there are no children.\n\tTiXmlNode* LastChild()\t{ return lastChild; }\n\t\n\tconst TiXmlNode* LastChild( const char * value ) const;\t\t\t/// The last child of this node matching 'value'. Will be null if there are no children.\n\tTiXmlNode* LastChild( const char * _value ) {\n\t\treturn const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->LastChild( _value ));\n\t}\n\n    #ifdef TIXML_USE_STL\n\tconst TiXmlNode* FirstChild( const std::string& _value ) const\t{\treturn FirstChild (_value.c_str ());\t}\t///< STL std::string form.\n\tTiXmlNode* FirstChild( const std::string& _value )\t\t\t\t{\treturn FirstChild (_value.c_str ());\t}\t///< STL std::string form.\n\tconst TiXmlNode* LastChild( const std::string& _value ) const\t{\treturn LastChild (_value.c_str ());\t}\t///< STL std::string form.\n\tTiXmlNode* LastChild( const std::string& _value )\t\t\t\t{\treturn LastChild (_value.c_str ());\t}\t///< STL std::string form.\n\t#endif\n\n\t/** An alternate way to walk the children of a node.\n\t\tOne way to iterate over nodes is:\n\t\t@verbatim\n\t\t\tfor( child = parent->FirstChild(); child; child = child->NextSibling() )\n\t\t@endverbatim\n\n\t\tIterateChildren does the same thing with the syntax:\n\t\t@verbatim\n\t\t\tchild = 0;\n\t\t\twhile( child = parent->IterateChildren( child ) )\n\t\t@endverbatim\n\n\t\tIterateChildren takes the previous child as input and finds\n\t\tthe next one. If the previous child is null, it returns the\n\t\tfirst. IterateChildren will return null when done.\n\t*/\n\tconst TiXmlNode* IterateChildren( const TiXmlNode* previous ) const;\n\tTiXmlNode* IterateChildren( const TiXmlNode* previous ) {\n\t\treturn const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( previous ) );\n\t}\n\n\t/// This flavor of IterateChildren searches for children with a particular 'value'\n\tconst TiXmlNode* IterateChildren( const char * value, const TiXmlNode* previous ) const;\n\tTiXmlNode* IterateChildren( const char * _value, const TiXmlNode* previous ) {\n\t\treturn const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( _value, previous ) );\n\t}\n\n    #ifdef TIXML_USE_STL\n\tconst TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) const\t{\treturn IterateChildren (_value.c_str (), previous);\t}\t///< STL std::string form.\n\tTiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) {\treturn IterateChildren (_value.c_str (), previous);\t}\t///< STL std::string form.\n\t#endif\n\n\t/** Add a new node related to this. Adds a child past the LastChild.\n\t\tReturns a pointer to the new object or NULL if an error occured.\n\t*/\n\tTiXmlNode* InsertEndChild( const TiXmlNode& addThis );\n\n\n\t/** Add a new node related to this. Adds a child past the LastChild.\n\n\t\tNOTE: the node to be added is passed by pointer, and will be\n\t\thenceforth owned (and deleted) by tinyXml. This method is efficient\n\t\tand avoids an extra copy, but should be used with care as it\n\t\tuses a different memory model than the other insert functions.\n\n\t\t@sa InsertEndChild\n\t*/\n\tTiXmlNode* LinkEndChild( TiXmlNode* addThis );\n\n\t/** Add a new node related to this. Adds a child before the specified child.\n\t\tReturns a pointer to the new object or NULL if an error occured.\n\t*/\n\tTiXmlNode* InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis );\n\n\t/** Add a new node related to this. Adds a child after the specified child.\n\t\tReturns a pointer to the new object or NULL if an error occured.\n\t*/\n\tTiXmlNode* InsertAfterChild(  TiXmlNode* afterThis, const TiXmlNode& addThis );\n\n\t/** Replace a child of this node.\n\t\tReturns a pointer to the new object or NULL if an error occured.\n\t*/\n\tTiXmlNode* ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis );\n\n\t/// Delete a child of this node.\n\tbool RemoveChild( TiXmlNode* removeThis );\n\n\t/// Navigate to a sibling node.\n\tconst TiXmlNode* PreviousSibling() const\t\t\t{ return prev; }\n\tTiXmlNode* PreviousSibling()\t\t\t\t\t\t{ return prev; }\n\n\t/// Navigate to a sibling node.\n\tconst TiXmlNode* PreviousSibling( const char * ) const;\n\tTiXmlNode* PreviousSibling( const char *_prev ) {\n\t\treturn const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->PreviousSibling( _prev ) );\n\t}\n\n    #ifdef TIXML_USE_STL\n\tconst TiXmlNode* PreviousSibling( const std::string& _value ) const\t{\treturn PreviousSibling (_value.c_str ());\t}\t///< STL std::string form.\n\tTiXmlNode* PreviousSibling( const std::string& _value ) \t\t\t{\treturn PreviousSibling (_value.c_str ());\t}\t///< STL std::string form.\n\tconst TiXmlNode* NextSibling( const std::string& _value) const\t\t{\treturn NextSibling (_value.c_str ());\t}\t///< STL std::string form.\n\tTiXmlNode* NextSibling( const std::string& _value) \t\t\t\t\t{\treturn NextSibling (_value.c_str ());\t}\t///< STL std::string form.\n\t#endif\n\n\t/// Navigate to a sibling node.\n\tconst TiXmlNode* NextSibling() const\t\t\t\t{ return next; }\n\tTiXmlNode* NextSibling()\t\t\t\t\t\t\t{ return next; }\n\n\t/// Navigate to a sibling node with the given 'value'.\n\tconst TiXmlNode* NextSibling( const char * ) const;\n\tTiXmlNode* NextSibling( const char* _next ) {\n\t\treturn const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->NextSibling( _next ) );\n\t}\n\n\t/** Convenience function to get through elements.\n\t\tCalls NextSibling and ToElement. Will skip all non-Element\n\t\tnodes. Returns 0 if there is not another element.\n\t*/\n\tconst TiXmlElement* NextSiblingElement() const;\n\tTiXmlElement* NextSiblingElement() {\n\t\treturn const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement() );\n\t}\n\n\t/** Convenience function to get through elements.\n\t\tCalls NextSibling and ToElement. Will skip all non-Element\n\t\tnodes. Returns 0 if there is not another element.\n\t*/\n\tconst TiXmlElement* NextSiblingElement( const char * ) const;\n\tTiXmlElement* NextSiblingElement( const char *_next ) {\n\t\treturn const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement( _next ) );\n\t}\n\n    #ifdef TIXML_USE_STL\n\tconst TiXmlElement* NextSiblingElement( const std::string& _value) const\t{\treturn NextSiblingElement (_value.c_str ());\t}\t///< STL std::string form.\n\tTiXmlElement* NextSiblingElement( const std::string& _value)\t\t\t\t{\treturn NextSiblingElement (_value.c_str ());\t}\t///< STL std::string form.\n\t#endif\n\n\t/// Convenience function to get through elements.\n\tconst TiXmlElement* FirstChildElement()\tconst;\n\tTiXmlElement* FirstChildElement() {\n\t\treturn const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement() );\n\t}\n\n\t/// Convenience function to get through elements.\n\tconst TiXmlElement* FirstChildElement( const char * _value ) const;\n\tTiXmlElement* FirstChildElement( const char * _value ) {\n\t\treturn const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement( _value ) );\n\t}\n\n    #ifdef TIXML_USE_STL\n\tconst TiXmlElement* FirstChildElement( const std::string& _value ) const\t{\treturn FirstChildElement (_value.c_str ());\t}\t///< STL std::string form.\n\tTiXmlElement* FirstChildElement( const std::string& _value )\t\t\t\t{\treturn FirstChildElement (_value.c_str ());\t}\t///< STL std::string form.\n\t#endif\n\n\t/** Query the type (as an enumerated value, above) of this node.\n\t\tThe possible types are: TINYXML_DOCUMENT, TINYXML_ELEMENT, TINYXML_COMMENT,\n\t\t\t\t\t\t\t\tTINYXML_UNKNOWN, TINYXML_TEXT, and TINYXML_DECLARATION.\n\t*/\n\tint Type() const\t{ return type; }\n\n\t/** Return a pointer to the Document this node lives in.\n\t\tReturns null if not in a document.\n\t*/\n\tconst TiXmlDocument* GetDocument() const;\n\tTiXmlDocument* GetDocument() {\n\t\treturn const_cast< TiXmlDocument* >( (const_cast< const TiXmlNode* >(this))->GetDocument() );\n\t}\n\n\t/// Returns true if this node has no children.\n\tbool NoChildren() const\t\t\t\t\t\t{ return !firstChild; }\n\n\tvirtual const TiXmlDocument*    ToDocument()    const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type.\n\tvirtual const TiXmlElement*     ToElement()     const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type.\n\tvirtual const TiXmlComment*     ToComment()     const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type.\n\tvirtual const TiXmlUnknown*     ToUnknown()     const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type.\n\tvirtual const TiXmlText*        ToText()        const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type.\n\tvirtual const TiXmlDeclaration* ToDeclaration() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type.\n\n\tvirtual TiXmlDocument*          ToDocument()    { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type.\n\tvirtual TiXmlElement*           ToElement()\t    { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type.\n\tvirtual TiXmlComment*           ToComment()     { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type.\n\tvirtual TiXmlUnknown*           ToUnknown()\t    { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type.\n\tvirtual TiXmlText*\t            ToText()        { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type.\n\tvirtual TiXmlDeclaration*       ToDeclaration() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type.\n\n\t/** Create an exact duplicate of this node and return it. The memory must be deleted\n\t\tby the caller. \n\t*/\n\tvirtual TiXmlNode* Clone() const = 0;\n\n\t/** Accept a hierchical visit the nodes in the TinyXML DOM. Every node in the \n\t\tXML tree will be conditionally visited and the host will be called back\n\t\tvia the TiXmlVisitor interface.\n\n\t\tThis is essentially a SAX interface for TinyXML. (Note however it doesn't re-parse\n\t\tthe XML for the callbacks, so the performance of TinyXML is unchanged by using this\n\t\tinterface versus any other.)\n\n\t\tThe interface has been based on ideas from:\n\n\t\t- http://www.saxproject.org/\n\t\t- http://c2.com/cgi/wiki?HierarchicalVisitorPattern \n\n\t\tWhich are both good references for \"visiting\".\n\n\t\tAn example of using Accept():\n\t\t@verbatim\n\t\tTiXmlPrinter printer;\n\t\ttinyxmlDoc.Accept( &printer );\n\t\tconst char* xmlcstr = printer.CStr();\n\t\t@endverbatim\n\t*/\n\tvirtual bool Accept( TiXmlVisitor* visitor ) const = 0;\n\nprotected:\n\tTiXmlNode( NodeType _type );\n\n\t// Copy to the allocated object. Shared functionality between Clone, Copy constructor,\n\t// and the assignment operator.\n\tvoid CopyTo( TiXmlNode* target ) const;\n\n\t#ifdef TIXML_USE_STL\n\t    // The real work of the input operator.\n\tvirtual void StreamIn( std::istream* in, TIXML_STRING* tag ) = 0;\n\t#endif\n\n\t// Figure out what is at *p, and parse it. Returns null if it is not an xml node.\n\tTiXmlNode* Identify( const char* start, TiXmlEncoding encoding );\n\n\tTiXmlNode*\t\tparent;\n\tNodeType\t\ttype;\n\n\tTiXmlNode*\t\tfirstChild;\n\tTiXmlNode*\t\tlastChild;\n\n\tTIXML_STRING\tvalue;\n\n\tTiXmlNode*\t\tprev;\n\tTiXmlNode*\t\tnext;\n\nprivate:\n\tTiXmlNode( const TiXmlNode& );\t\t\t\t// not implemented.\n\tvoid operator=( const TiXmlNode& base );\t// not allowed.\n};\n\n\n/** An attribute is a name-value pair. Elements have an arbitrary\n\tnumber of attributes, each with a unique name.\n\n\t@note The attributes are not TiXmlNodes, since they are not\n\t\t  part of the tinyXML document object model. There are other\n\t\t  suggested ways to look at this problem.\n*/\nclass TiXmlAttribute : public TiXmlBase\n{\n\tfriend class TiXmlAttributeSet;\n\npublic:\n\t/// Construct an empty attribute.\n\tTiXmlAttribute() : TiXmlBase()\n\t{\n\t\tdocument = 0;\n\t\tprev = next = 0;\n\t}\n\n\t#ifdef TIXML_USE_STL\n\t/// std::string constructor.\n\tTiXmlAttribute( const std::string& _name, const std::string& _value )\n\t{\n\t\tname = _name;\n\t\tvalue = _value;\n\t\tdocument = 0;\n\t\tprev = next = 0;\n\t}\n\t#endif\n\n\t/// Construct an attribute with a name and value.\n\tTiXmlAttribute( const char * _name, const char * _value )\n\t{\n\t\tname = _name;\n\t\tvalue = _value;\n\t\tdocument = 0;\n\t\tprev = next = 0;\n\t}\n\n\tconst char*\t\tName()  const\t\t{ return name.c_str(); }\t\t///< Return the name of this attribute.\n\tconst char*\t\tValue() const\t\t{ return value.c_str(); }\t\t///< Return the value of this attribute.\n\t#ifdef TIXML_USE_STL\n\tconst std::string& ValueStr() const\t{ return value; }\t\t\t\t///< Return the value of this attribute.\n\t#endif\n\tint\t\t\t\tIntValue() const;\t\t\t\t\t\t\t\t\t///< Return the value of this attribute, converted to an integer.\n\tdouble\t\t\tDoubleValue() const;\t\t\t\t\t\t\t\t///< Return the value of this attribute, converted to a double.\n\n\t// Get the tinyxml string representation\n\tconst TIXML_STRING& NameTStr() const { return name; }\n\n\t/** QueryIntValue examines the value string. It is an alternative to the\n\t\tIntValue() method with richer error checking.\n\t\tIf the value is an integer, it is stored in 'value' and \n\t\tthe call returns TIXML_SUCCESS. If it is not\n\t\tan integer, it returns TIXML_WRONG_TYPE.\n\n\t\tA specialized but useful call. Note that for success it returns 0,\n\t\twhich is the opposite of almost all other TinyXml calls.\n\t*/\n\tint QueryIntValue( int* _value ) const;\n\t/// QueryDoubleValue examines the value string. See QueryIntValue().\n\tint QueryDoubleValue( double* _value ) const;\n\n\tvoid SetName( const char* _name )\t{ name = _name; }\t\t\t\t///< Set the name of this attribute.\n\tvoid SetValue( const char* _value )\t{ value = _value; }\t\t\t\t///< Set the value.\n\n\tvoid SetIntValue( int _value );\t\t\t\t\t\t\t\t\t\t///< Set the value from an integer.\n\tvoid SetDoubleValue( double _value );\t\t\t\t\t\t\t\t///< Set the value from a double.\n\n    #ifdef TIXML_USE_STL\n\t/// STL std::string form.\n\tvoid SetName( const std::string& _name )\t{ name = _name; }\t\n\t/// STL std::string form.\t\n\tvoid SetValue( const std::string& _value )\t{ value = _value; }\n\t#endif\n\n\t/// Get the next sibling attribute in the DOM. Returns null at end.\n\tconst TiXmlAttribute* Next() const;\n\tTiXmlAttribute* Next() {\n\t\treturn const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Next() ); \n\t}\n\n\t/// Get the previous sibling attribute in the DOM. Returns null at beginning.\n\tconst TiXmlAttribute* Previous() const;\n\tTiXmlAttribute* Previous() {\n\t\treturn const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Previous() ); \n\t}\n\n\tbool operator==( const TiXmlAttribute& rhs ) const { return rhs.name == name; }\n\tbool operator<( const TiXmlAttribute& rhs )\t const { return name < rhs.name; }\n\tbool operator>( const TiXmlAttribute& rhs )  const { return name > rhs.name; }\n\n\t/*\tAttribute parsing starts: first letter of the name\n\t\t\t\t\t\t returns: the next char after the value end quote\n\t*/\n\tvirtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding );\n\n\t// Prints this Attribute to a FILE stream.\n\tvirtual void Print( FILE* cfile, int depth ) const {\n\t\tPrint( cfile, depth, 0 );\n\t}\n\tvoid Print( FILE* cfile, int depth, TIXML_STRING* str ) const;\n\n\t// [internal use]\n\t// Set the document pointer so the attribute can report errors.\n\tvoid SetDocument( TiXmlDocument* doc )\t{ document = doc; }\n\nprivate:\n\tTiXmlAttribute( const TiXmlAttribute& );\t\t\t\t// not implemented.\n\tvoid operator=( const TiXmlAttribute& base );\t// not allowed.\n\n\tTiXmlDocument*\tdocument;\t// A pointer back to a document, for error reporting.\n\tTIXML_STRING name;\n\tTIXML_STRING value;\n\tTiXmlAttribute*\tprev;\n\tTiXmlAttribute*\tnext;\n};\n\n\n/*\tA class used to manage a group of attributes.\n\tIt is only used internally, both by the ELEMENT and the DECLARATION.\n\t\n\tThe set can be changed transparent to the Element and Declaration\n\tclasses that use it, but NOT transparent to the Attribute\n\twhich has to implement a next() and previous() method. Which makes\n\tit a bit problematic and prevents the use of STL.\n\n\tThis version is implemented with circular lists because:\n\t\t- I like circular lists\n\t\t- it demonstrates some independence from the (typical) doubly linked list.\n*/\nclass TiXmlAttributeSet\n{\npublic:\n\tTiXmlAttributeSet();\n\t~TiXmlAttributeSet();\n\n\tvoid Add( TiXmlAttribute* attribute );\n\tvoid Remove( TiXmlAttribute* attribute );\n\n\tconst TiXmlAttribute* First()\tconst\t{ return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; }\n\tTiXmlAttribute* First()\t\t\t\t\t{ return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; }\n\tconst TiXmlAttribute* Last() const\t\t{ return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; }\n\tTiXmlAttribute* Last()\t\t\t\t\t{ return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; }\n\n\tTiXmlAttribute*\tFind( const char* _name ) const;\n\tTiXmlAttribute* FindOrCreate( const char* _name );\n\n#\tifdef TIXML_USE_STL\n\tTiXmlAttribute*\tFind( const std::string& _name ) const;\n\tTiXmlAttribute* FindOrCreate( const std::string& _name );\n#\tendif\n\n\nprivate:\n\t//*ME:\tBecause of hidden/disabled copy-construktor in TiXmlAttribute (sentinel-element),\n\t//*ME:\tthis class must be also use a hidden/disabled copy-constructor !!!\n\tTiXmlAttributeSet( const TiXmlAttributeSet& );\t// not allowed\n\tvoid operator=( const TiXmlAttributeSet& );\t// not allowed (as TiXmlAttribute)\n\n\tTiXmlAttribute sentinel;\n};\n\n\n/** The element is a container class. It has a value, the element name,\n\tand can contain other elements, text, comments, and unknowns.\n\tElements also contain an arbitrary number of attributes.\n*/\nclass TiXmlElement : public TiXmlNode\n{\npublic:\n\t/// Construct an element.\n\tTiXmlElement (const char * in_value);\n\n\t#ifdef TIXML_USE_STL\n\t/// std::string constructor.\n\tTiXmlElement( const std::string& _value );\n\t#endif\n\n\tTiXmlElement( const TiXmlElement& );\n\n\tTiXmlElement& operator=( const TiXmlElement& base );\n\n\tvirtual ~TiXmlElement();\n\n\t/** Given an attribute name, Attribute() returns the value\n\t\tfor the attribute of that name, or null if none exists.\n\t*/\n\tconst char* Attribute( const char* name ) const;\n\n\t/** Given an attribute name, Attribute() returns the value\n\t\tfor the attribute of that name, or null if none exists.\n\t\tIf the attribute exists and can be converted to an integer,\n\t\tthe integer value will be put in the return 'i', if 'i'\n\t\tis non-null.\n\t*/\n\tconst char* Attribute( const char* name, int* i ) const;\n\n\t/** Given an attribute name, Attribute() returns the value\n\t\tfor the attribute of that name, or null if none exists.\n\t\tIf the attribute exists and can be converted to an double,\n\t\tthe double value will be put in the return 'd', if 'd'\n\t\tis non-null.\n\t*/\n\tconst char* Attribute( const char* name, double* d ) const;\n\n\t/** QueryIntAttribute examines the attribute - it is an alternative to the\n\t\tAttribute() method with richer error checking.\n\t\tIf the attribute is an integer, it is stored in 'value' and \n\t\tthe call returns TIXML_SUCCESS. If it is not\n\t\tan integer, it returns TIXML_WRONG_TYPE. If the attribute\n\t\tdoes not exist, then TIXML_NO_ATTRIBUTE is returned.\n\t*/\t\n\tint QueryIntAttribute( const char* name, int* _value ) const;\n\t/// QueryUnsignedAttribute examines the attribute - see QueryIntAttribute().\n\tint QueryUnsignedAttribute( const char* name, unsigned* _value ) const;\n\t/** QueryBoolAttribute examines the attribute - see QueryIntAttribute(). \n\t\tNote that '1', 'true', or 'yes' are considered true, while '0', 'false'\n\t\tand 'no' are considered false.\n\t*/\n\tint QueryBoolAttribute( const char* name, bool* _value ) const;\n\t/// QueryDoubleAttribute examines the attribute - see QueryIntAttribute().\n\tint QueryDoubleAttribute( const char* name, double* _value ) const;\n\t/// QueryFloatAttribute examines the attribute - see QueryIntAttribute().\n\tint QueryFloatAttribute( const char* name, float* _value ) const {\n\t\tdouble d;\n\t\tint result = QueryDoubleAttribute( name, &d );\n\t\tif ( result == TIXML_SUCCESS ) {\n\t\t\t*_value = (float)d;\n\t\t}\n\t\treturn result;\n\t}\n\n    #ifdef TIXML_USE_STL\n\t/// QueryStringAttribute examines the attribute - see QueryIntAttribute().\n\tint QueryStringAttribute( const char* name, std::string* _value ) const {\n\t\tconst char* cstr = Attribute( name );\n\t\tif ( cstr ) {\n\t\t\t*_value = std::string( cstr );\n\t\t\treturn TIXML_SUCCESS;\n\t\t}\n\t\treturn TIXML_NO_ATTRIBUTE;\n\t}\n\n\t/** Template form of the attribute query which will try to read the\n\t\tattribute into the specified type. Very easy, very powerful, but\n\t\tbe careful to make sure to call this with the correct type.\n\t\t\n\t\tNOTE: This method doesn't work correctly for 'string' types that contain spaces.\n\n\t\t@return TIXML_SUCCESS, TIXML_WRONG_TYPE, or TIXML_NO_ATTRIBUTE\n\t*/\n\ttemplate< typename T > int QueryValueAttribute( const std::string& name, T* outValue ) const\n\t{\n\t\tconst TiXmlAttribute* node = attributeSet.Find( name );\n\t\tif ( !node )\n\t\t\treturn TIXML_NO_ATTRIBUTE;\n\n\t\tstd::stringstream sstream( node->ValueStr() );\n\t\tsstream >> *outValue;\n\t\tif ( !sstream.fail() )\n\t\t\treturn TIXML_SUCCESS;\n\t\treturn TIXML_WRONG_TYPE;\n\t}\n\n\tint QueryValueAttribute( const std::string& name, std::string* outValue ) const\n\t{\n\t\tconst TiXmlAttribute* node = attributeSet.Find( name );\n\t\tif ( !node )\n\t\t\treturn TIXML_NO_ATTRIBUTE;\n\t\t*outValue = node->ValueStr();\n\t\treturn TIXML_SUCCESS;\n\t}\n\t#endif\n\n\t/** Sets an attribute of name to a given value. The attribute\n\t\twill be created if it does not exist, or changed if it does.\n\t*/\n\tvoid SetAttribute( const char* name, const char * _value );\n\n    #ifdef TIXML_USE_STL\n\tconst std::string* Attribute( const std::string& name ) const;\n\tconst std::string* Attribute( const std::string& name, int* i ) const;\n\tconst std::string* Attribute( const std::string& name, double* d ) const;\n\tint QueryIntAttribute( const std::string& name, int* _value ) const;\n\tint QueryDoubleAttribute( const std::string& name, double* _value ) const;\n\n\t/// STL std::string form.\n\tvoid SetAttribute( const std::string& name, const std::string& _value );\n\t///< STL std::string form.\n\tvoid SetAttribute( const std::string& name, int _value );\n\t///< STL std::string form.\n\tvoid SetDoubleAttribute( const std::string& name, double value );\n\t#endif\n\n\t/** Sets an attribute of name to a given value. The attribute\n\t\twill be created if it does not exist, or changed if it does.\n\t*/\n\tvoid SetAttribute( const char * name, int value );\n\n\t/** Sets an attribute of name to a given value. The attribute\n\t\twill be created if it does not exist, or changed if it does.\n\t*/\n\tvoid SetDoubleAttribute( const char * name, double value );\n\n\t/** Deletes an attribute with the given name.\n\t*/\n\tvoid RemoveAttribute( const char * name );\n    #ifdef TIXML_USE_STL\n\tvoid RemoveAttribute( const std::string& name )\t{\tRemoveAttribute (name.c_str ());\t}\t///< STL std::string form.\n\t#endif\n\n\tconst TiXmlAttribute* FirstAttribute() const\t{ return attributeSet.First(); }\t\t///< Access the first attribute in this element.\n\tTiXmlAttribute* FirstAttribute() \t\t\t\t{ return attributeSet.First(); }\n\tconst TiXmlAttribute* LastAttribute()\tconst \t{ return attributeSet.Last(); }\t\t///< Access the last attribute in this element.\n\tTiXmlAttribute* LastAttribute()\t\t\t\t\t{ return attributeSet.Last(); }\n\n\t/** Convenience function for easy access to the text inside an element. Although easy\n\t\tand concise, GetText() is limited compared to getting the TiXmlText child\n\t\tand accessing it directly.\n\t\n\t\tIf the first child of 'this' is a TiXmlText, the GetText()\n\t\treturns the character string of the Text node, else null is returned.\n\n\t\tThis is a convenient method for getting the text of simple contained text:\n\t\t@verbatim\n\t\t<foo>This is text</foo>\n\t\tconst char* str = fooElement->GetText();\n\t\t@endverbatim\n\n\t\t'str' will be a pointer to \"This is text\". \n\t\t\n\t\tNote that this function can be misleading. If the element foo was created from\n\t\tthis XML:\n\t\t@verbatim\n\t\t<foo><b>This is text</b></foo> \n\t\t@endverbatim\n\n\t\tthen the value of str would be null. The first child node isn't a text node, it is\n\t\tanother element. From this XML:\n\t\t@verbatim\n\t\t<foo>This is <b>text</b></foo> \n\t\t@endverbatim\n\t\tGetText() will return \"This is \".\n\n\t\tWARNING: GetText() accesses a child node - don't become confused with the \n\t\t\t\t similarly named TiXmlHandle::Text() and TiXmlNode::ToText() which are \n\t\t\t\t safe type casts on the referenced node.\n\t*/\n\tconst char* GetText() const;\n\n\t/// Creates a new Element and returns it - the returned element is a copy.\n\tvirtual TiXmlNode* Clone() const;\n\t// Print the Element to a FILE stream.\n\tvirtual void Print( FILE* cfile, int depth ) const;\n\n\t/*\tAttribtue parsing starts: next char past '<'\n\t\t\t\t\t\t returns: next char past '>'\n\t*/\n\tvirtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding );\n\n\tvirtual const TiXmlElement*     ToElement()     const { return this; } ///< Cast to a more defined type. Will return null not of the requested type.\n\tvirtual TiXmlElement*           ToElement()\t          { return this; } ///< Cast to a more defined type. Will return null not of the requested type.\n\n\t/** Walk the XML tree visiting this node and all of its children. \n\t*/\n\tvirtual bool Accept( TiXmlVisitor* visitor ) const;\n\nprotected:\n\n\tvoid CopyTo( TiXmlElement* target ) const;\n\tvoid ClearThis();\t// like clear, but initializes 'this' object as well\n\n\t// Used to be public [internal use]\n\t#ifdef TIXML_USE_STL\n\tvirtual void StreamIn( std::istream * in, TIXML_STRING * tag );\n\t#endif\n\t/*\t[internal use]\n\t\tReads the \"value\" of the element -- another element, or text.\n\t\tThis should terminate with the current end tag.\n\t*/\n\tconst char* ReadValue( const char* in, TiXmlParsingData* prevData, TiXmlEncoding encoding );\n\nprivate:\n\tTiXmlAttributeSet attributeSet;\n};\n\n\n/**\tAn XML comment.\n*/\nclass TiXmlComment : public TiXmlNode\n{\npublic:\n\t/// Constructs an empty comment.\n\tTiXmlComment() : TiXmlNode( TiXmlNode::TINYXML_COMMENT ) {}\n\t/// Construct a comment from text.\n\tTiXmlComment( const char* _value ) : TiXmlNode( TiXmlNode::TINYXML_COMMENT ) {\n\t\tSetValue( _value );\n\t}\n\tTiXmlComment( const TiXmlComment& );\n\tTiXmlComment& operator=( const TiXmlComment& base );\n\n\tvirtual ~TiXmlComment()\t{}\n\n\t/// Returns a copy of this Comment.\n\tvirtual TiXmlNode* Clone() const;\n\t// Write this Comment to a FILE stream.\n\tvirtual void Print( FILE* cfile, int depth ) const;\n\n\t/*\tAttribtue parsing starts: at the ! of the !--\n\t\t\t\t\t\t returns: next char past '>'\n\t*/\n\tvirtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding );\n\n\tvirtual const TiXmlComment*  ToComment() const\t{ return this; } ///< Cast to a more defined type. Will return null not of the requested type.\n\tvirtual\t\t  TiXmlComment*  ToComment()\t\t{ return this; } ///< Cast to a more defined type. Will return null not of the requested type.\n\n\t/** Walk the XML tree visiting this node and all of its children. \n\t*/\n\tvirtual bool Accept( TiXmlVisitor* visitor ) const;\n\nprotected:\n\tvoid CopyTo( TiXmlComment* target ) const;\n\n\t// used to be public\n\t#ifdef TIXML_USE_STL\n\tvirtual void StreamIn( std::istream * in, TIXML_STRING * tag );\n\t#endif\n//\tvirtual void StreamOut( TIXML_OSTREAM * out ) const;\n\nprivate:\n\n};\n\n\n/** XML text. A text node can have 2 ways to output the next. \"normal\" output \n\tand CDATA. It will default to the mode it was parsed from the XML file and\n\tyou generally want to leave it alone, but you can change the output mode with \n\tSetCDATA() and query it with CDATA().\n*/\nclass TiXmlText : public TiXmlNode\n{\n\tfriend class TiXmlElement;\npublic:\n\t/** Constructor for text element. By default, it is treated as \n\t\tnormal, encoded text. If you want it be output as a CDATA text\n\t\telement, set the parameter _cdata to 'true'\n\t*/\n\tTiXmlText (const char * initValue ) : TiXmlNode (TiXmlNode::TINYXML_TEXT)\n\t{\n\t\tSetValue( initValue );\n\t\tcdata = false;\n\t}\n\tvirtual ~TiXmlText() {}\n\n\t#ifdef TIXML_USE_STL\n\t/// Constructor.\n\tTiXmlText( const std::string& initValue ) : TiXmlNode (TiXmlNode::TINYXML_TEXT)\n\t{\n\t\tSetValue( initValue );\n\t\tcdata = false;\n\t}\n\t#endif\n\n\tTiXmlText( const TiXmlText& copy ) : TiXmlNode( TiXmlNode::TINYXML_TEXT )\t{ copy.CopyTo( this ); }\n\tTiXmlText& operator=( const TiXmlText& base )\t\t\t\t\t\t\t \t{ base.CopyTo( this ); return *this; }\n\n\t// Write this text object to a FILE stream.\n\tvirtual void Print( FILE* cfile, int depth ) const;\n\n\t/// Queries whether this represents text using a CDATA section.\n\tbool CDATA() const\t\t\t\t{ return cdata; }\n\t/// Turns on or off a CDATA representation of text.\n\tvoid SetCDATA( bool _cdata )\t{ cdata = _cdata; }\n\n\tvirtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding );\n\n\tvirtual const TiXmlText* ToText() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type.\n\tvirtual TiXmlText*       ToText()       { return this; } ///< Cast to a more defined type. Will return null not of the requested type.\n\n\t/** Walk the XML tree visiting this node and all of its children. \n\t*/\n\tvirtual bool Accept( TiXmlVisitor* content ) const;\n\nprotected :\n\t///  [internal use] Creates a new Element and returns it.\n\tvirtual TiXmlNode* Clone() const;\n\tvoid CopyTo( TiXmlText* target ) const;\n\n\tbool Blank() const;\t// returns true if all white space and new lines\n\t// [internal use]\n\t#ifdef TIXML_USE_STL\n\tvirtual void StreamIn( std::istream * in, TIXML_STRING * tag );\n\t#endif\n\nprivate:\n\tbool cdata;\t\t\t// true if this should be input and output as a CDATA style text element\n};\n\n\n/** In correct XML the declaration is the first entry in the file.\n\t@verbatim\n\t\t<?xml version=\"1.0\" standalone=\"yes\"?>\n\t@endverbatim\n\n\tTinyXml will happily read or write files without a declaration,\n\thowever. There are 3 possible attributes to the declaration:\n\tversion, encoding, and standalone.\n\n\tNote: In this version of the code, the attributes are\n\thandled as special cases, not generic attributes, simply\n\tbecause there can only be at most 3 and they are always the same.\n*/\nclass TiXmlDeclaration : public TiXmlNode\n{\npublic:\n\t/// Construct an empty declaration.\n\tTiXmlDeclaration()   : TiXmlNode( TiXmlNode::TINYXML_DECLARATION ) {}\n\n#ifdef TIXML_USE_STL\n\t/// Constructor.\n\tTiXmlDeclaration(\tconst std::string& _version,\n\t\t\t\t\t\tconst std::string& _encoding,\n\t\t\t\t\t\tconst std::string& _standalone );\n#endif\n\n\t/// Construct.\n\tTiXmlDeclaration(\tconst char* _version,\n\t\t\t\t\t\tconst char* _encoding,\n\t\t\t\t\t\tconst char* _standalone );\n\n\tTiXmlDeclaration( const TiXmlDeclaration& copy );\n\tTiXmlDeclaration& operator=( const TiXmlDeclaration& copy );\n\n\tvirtual ~TiXmlDeclaration()\t{}\n\n\t/// Version. Will return an empty string if none was found.\n\tconst char *Version() const\t\t\t{ return version.c_str (); }\n\t/// Encoding. Will return an empty string if none was found.\n\tconst char *Encoding() const\t\t{ return encoding.c_str (); }\n\t/// Is this a standalone document?\n\tconst char *Standalone() const\t\t{ return standalone.c_str (); }\n\n\t/// Creates a copy of this Declaration and returns it.\n\tvirtual TiXmlNode* Clone() const;\n\t// Print this declaration to a FILE stream.\n\tvirtual void Print( FILE* cfile, int depth, TIXML_STRING* str ) const;\n\tvirtual void Print( FILE* cfile, int depth ) const {\n\t\tPrint( cfile, depth, 0 );\n\t}\n\n\tvirtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding );\n\n\tvirtual const TiXmlDeclaration* ToDeclaration() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type.\n\tvirtual TiXmlDeclaration*       ToDeclaration()       { return this; } ///< Cast to a more defined type. Will return null not of the requested type.\n\n\t/** Walk the XML tree visiting this node and all of its children. \n\t*/\n\tvirtual bool Accept( TiXmlVisitor* visitor ) const;\n\nprotected:\n\tvoid CopyTo( TiXmlDeclaration* target ) const;\n\t// used to be public\n\t#ifdef TIXML_USE_STL\n\tvirtual void StreamIn( std::istream * in, TIXML_STRING * tag );\n\t#endif\n\nprivate:\n\n\tTIXML_STRING version;\n\tTIXML_STRING encoding;\n\tTIXML_STRING standalone;\n};\n\n\n/** Any tag that tinyXml doesn't recognize is saved as an\n\tunknown. It is a tag of text, but should not be modified.\n\tIt will be written back to the XML, unchanged, when the file\n\tis saved.\n\n\tDTD tags get thrown into TiXmlUnknowns.\n*/\nclass TiXmlUnknown : public TiXmlNode\n{\npublic:\n\tTiXmlUnknown() : TiXmlNode( TiXmlNode::TINYXML_UNKNOWN )\t{}\n\tvirtual ~TiXmlUnknown() {}\n\n\tTiXmlUnknown( const TiXmlUnknown& copy ) : TiXmlNode( TiXmlNode::TINYXML_UNKNOWN )\t\t{ copy.CopyTo( this ); }\n\tTiXmlUnknown& operator=( const TiXmlUnknown& copy )\t\t\t\t\t\t\t\t\t\t{ copy.CopyTo( this ); return *this; }\n\n\t/// Creates a copy of this Unknown and returns it.\n\tvirtual TiXmlNode* Clone() const;\n\t// Print this Unknown to a FILE stream.\n\tvirtual void Print( FILE* cfile, int depth ) const;\n\n\tvirtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding );\n\n\tvirtual const TiXmlUnknown*     ToUnknown()     const\t{ return this; } ///< Cast to a more defined type. Will return null not of the requested type.\n\tvirtual TiXmlUnknown*           ToUnknown()\t\t\t\t{ return this; } ///< Cast to a more defined type. Will return null not of the requested type.\n\n\t/** Walk the XML tree visiting this node and all of its children. \n\t*/\n\tvirtual bool Accept( TiXmlVisitor* content ) const;\n\nprotected:\n\tvoid CopyTo( TiXmlUnknown* target ) const;\n\n\t#ifdef TIXML_USE_STL\n\tvirtual void StreamIn( std::istream * in, TIXML_STRING * tag );\n\t#endif\n\nprivate:\n\n};\n\n\n/** Always the top level node. A document binds together all the\n\tXML pieces. It can be saved, loaded, and printed to the screen.\n\tThe 'value' of a document node is the xml file name.\n*/\nclass TiXmlDocument : public TiXmlNode\n{\npublic:\n\t/// Create an empty document, that has no name.\n\tTiXmlDocument();\n\t/// Create a document with a name. The name of the document is also the filename of the xml.\n\tTiXmlDocument( const char * documentName );\n\n\t#ifdef TIXML_USE_STL\n\t/// Constructor.\n\tTiXmlDocument( const std::string& documentName );\n\t#endif\n\n\tTiXmlDocument( const TiXmlDocument& copy );\n\tTiXmlDocument& operator=( const TiXmlDocument& copy );\n\n\tvirtual ~TiXmlDocument() {}\n\n\t/** Load a file using the current document value.\n\t\tReturns true if successful. Will delete any existing\n\t\tdocument data before loading.\n\t*/\n\tbool LoadFile( TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );\n\t/// Save a file using the current document value. Returns true if successful.\n\tbool SaveFile() const;\n\t/// Load a file using the given filename. Returns true if successful.\n\tbool LoadFile( const char * filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );\n\t/// Save a file using the given filename. Returns true if successful.\n\tbool SaveFile( const char * filename ) const;\n\t/** Load a file using the given FILE*. Returns true if successful. Note that this method\n\t\tdoesn't stream - the entire object pointed at by the FILE*\n\t\twill be interpreted as an XML file. TinyXML doesn't stream in XML from the current\n\t\tfile location. Streaming may be added in the future.\n\t*/\n\tbool LoadFile( FILE*, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );\n\t/// Save a file using the given FILE*. Returns true if successful.\n\tbool SaveFile( FILE* ) const;\n\n\t#ifdef TIXML_USE_STL\n\tbool LoadFile( const std::string& filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING )\t\t\t///< STL std::string version.\n\t{\n\t\treturn LoadFile( filename.c_str(), encoding );\n\t}\n\tbool SaveFile( const std::string& filename ) const\t\t///< STL std::string version.\n\t{\n\t\treturn SaveFile( filename.c_str() );\n\t}\n\t#endif\n\n\t/** Parse the given null terminated block of xml data. Passing in an encoding to this\n\t\tmethod (either TIXML_ENCODING_LEGACY or TIXML_ENCODING_UTF8 will force TinyXml\n\t\tto use that encoding, regardless of what TinyXml might otherwise try to detect.\n\t*/\n\tvirtual const char* Parse( const char* p, TiXmlParsingData* data = 0, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );\n\n\t/** Get the root element -- the only top level element -- of the document.\n\t\tIn well formed XML, there should only be one. TinyXml is tolerant of\n\t\tmultiple elements at the document level.\n\t*/\n\tconst TiXmlElement* RootElement() const\t\t{ return FirstChildElement(); }\n\tTiXmlElement* RootElement()\t\t\t\t\t{ return FirstChildElement(); }\n\n\t/** If an error occurs, Error will be set to true. Also,\n\t\t- The ErrorId() will contain the integer identifier of the error (not generally useful)\n\t\t- The ErrorDesc() method will return the name of the error. (very useful)\n\t\t- The ErrorRow() and ErrorCol() will return the location of the error (if known)\n\t*/\t\n\tbool Error() const\t\t\t\t\t\t{ return error; }\n\n\t/// Contains a textual (english) description of the error if one occurs.\n\tconst char * ErrorDesc() const\t{ return errorDesc.c_str (); }\n\n\t/** Generally, you probably want the error string ( ErrorDesc() ). But if you\n\t\tprefer the ErrorId, this function will fetch it.\n\t*/\n\tint ErrorId()\tconst\t\t\t\t{ return errorId; }\n\n\t/** Returns the location (if known) of the error. The first column is column 1, \n\t\tand the first row is row 1. A value of 0 means the row and column wasn't applicable\n\t\t(memory errors, for example, have no row/column) or the parser lost the error. (An\n\t\terror in the error reporting, in that case.)\n\n\t\t@sa SetTabSize, Row, Column\n\t*/\n\tint ErrorRow() const\t{ return errorLocation.row+1; }\n\tint ErrorCol() const\t{ return errorLocation.col+1; }\t///< The column where the error occured. See ErrorRow()\n\n\t/** SetTabSize() allows the error reporting functions (ErrorRow() and ErrorCol())\n\t\tto report the correct values for row and column. It does not change the output\n\t\tor input in any way.\n\t\t\n\t\tBy calling this method, with a tab size\n\t\tgreater than 0, the row and column of each node and attribute is stored\n\t\twhen the file is loaded. Very useful for tracking the DOM back in to\n\t\tthe source file.\n\n\t\tThe tab size is required for calculating the location of nodes. If not\n\t\tset, the default of 4 is used. The tabsize is set per document. Setting\n\t\tthe tabsize to 0 disables row/column tracking.\n\n\t\tNote that row and column tracking is not supported when using operator>>.\n\n\t\tThe tab size needs to be enabled before the parse or load. Correct usage:\n\t\t@verbatim\n\t\tTiXmlDocument doc;\n\t\tdoc.SetTabSize( 8 );\n\t\tdoc.Load( \"myfile.xml\" );\n\t\t@endverbatim\n\n\t\t@sa Row, Column\n\t*/\n\tvoid SetTabSize( int _tabsize )\t\t{ tabsize = _tabsize; }\n\n\tint TabSize() const\t{ return tabsize; }\n\n\t/** If you have handled the error, it can be reset with this call. The error\n\t\tstate is automatically cleared if you Parse a new XML block.\n\t*/\n\tvoid ClearError()\t\t\t\t\t\t{\terror = false; \n\t\t\t\t\t\t\t\t\t\t\t\terrorId = 0; \n\t\t\t\t\t\t\t\t\t\t\t\terrorDesc = \"\"; \n\t\t\t\t\t\t\t\t\t\t\t\terrorLocation.row = errorLocation.col = 0; \n\t\t\t\t\t\t\t\t\t\t\t\t//errorLocation.last = 0; \n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t/** Write the document to standard out using formatted printing (\"pretty print\"). */\n\tvoid Print() const\t\t\t\t\t\t{ Print( stdout, 0 ); }\n\n\t/* Write the document to a string using formatted printing (\"pretty print\"). This\n\t\twill allocate a character array (new char[]) and return it as a pointer. The\n\t\tcalling code pust call delete[] on the return char* to avoid a memory leak.\n\t*/\n\t//char* PrintToMemory() const; \n\n\t/// Print this Document to a FILE stream.\n\tvirtual void Print( FILE* cfile, int depth = 0 ) const;\n\t// [internal use]\n\tvoid SetError( int err, const char* errorLocation, TiXmlParsingData* prevData, TiXmlEncoding encoding );\n\n\tvirtual const TiXmlDocument*    ToDocument()    const { return this; } ///< Cast to a more defined type. Will return null not of the requested type.\n\tvirtual TiXmlDocument*          ToDocument()          { return this; } ///< Cast to a more defined type. Will return null not of the requested type.\n\n\t/** Walk the XML tree visiting this node and all of its children. \n\t*/\n\tvirtual bool Accept( TiXmlVisitor* content ) const;\n\nprotected :\n\t// [internal use]\n\tvirtual TiXmlNode* Clone() const;\n\t#ifdef TIXML_USE_STL\n\tvirtual void StreamIn( std::istream * in, TIXML_STRING * tag );\n\t#endif\n\nprivate:\n\tvoid CopyTo( TiXmlDocument* target ) const;\n\n\tbool error;\n\tint  errorId;\n\tTIXML_STRING errorDesc;\n\tint tabsize;\n\tTiXmlCursor errorLocation;\n\tbool useMicrosoftBOM;\t\t// the UTF-8 BOM were found when read. Note this, and try to write.\n};\n\n\n/**\n\tA TiXmlHandle is a class that wraps a node pointer with null checks; this is\n\tan incredibly useful thing. Note that TiXmlHandle is not part of the TinyXml\n\tDOM structure. It is a separate utility class.\n\n\tTake an example:\n\t@verbatim\n\t<Document>\n\t\t<Element attributeA = \"valueA\">\n\t\t\t<Child attributeB = \"value1\" />\n\t\t\t<Child attributeB = \"value2\" />\n\t\t</Element>\n\t<Document>\n\t@endverbatim\n\n\tAssuming you want the value of \"attributeB\" in the 2nd \"Child\" element, it's very \n\teasy to write a *lot* of code that looks like:\n\n\t@verbatim\n\tTiXmlElement* root = document.FirstChildElement( \"Document\" );\n\tif ( root )\n\t{\n\t\tTiXmlElement* element = root->FirstChildElement( \"Element\" );\n\t\tif ( element )\n\t\t{\n\t\t\tTiXmlElement* child = element->FirstChildElement( \"Child\" );\n\t\t\tif ( child )\n\t\t\t{\n\t\t\t\tTiXmlElement* child2 = child->NextSiblingElement( \"Child\" );\n\t\t\t\tif ( child2 )\n\t\t\t\t{\n\t\t\t\t\t// Finally do something useful.\n\t@endverbatim\n\n\tAnd that doesn't even cover \"else\" cases. TiXmlHandle addresses the verbosity\n\tof such code. A TiXmlHandle checks for null\tpointers so it is perfectly safe \n\tand correct to use:\n\n\t@verbatim\n\tTiXmlHandle docHandle( &document );\n\tTiXmlElement* child2 = docHandle.FirstChild( \"Document\" ).FirstChild( \"Element\" ).Child( \"Child\", 1 ).ToElement();\n\tif ( child2 )\n\t{\n\t\t// do something useful\n\t@endverbatim\n\n\tWhich is MUCH more concise and useful.\n\n\tIt is also safe to copy handles - internally they are nothing more than node pointers.\n\t@verbatim\n\tTiXmlHandle handleCopy = handle;\n\t@endverbatim\n\n\tWhat they should not be used for is iteration:\n\n\t@verbatim\n\tint i=0; \n\twhile ( true )\n\t{\n\t\tTiXmlElement* child = docHandle.FirstChild( \"Document\" ).FirstChild( \"Element\" ).Child( \"Child\", i ).ToElement();\n\t\tif ( !child )\n\t\t\tbreak;\n\t\t// do something\n\t\t++i;\n\t}\n\t@endverbatim\n\n\tIt seems reasonable, but it is in fact two embedded while loops. The Child method is \n\ta linear walk to find the element, so this code would iterate much more than it needs \n\tto. Instead, prefer:\n\n\t@verbatim\n\tTiXmlElement* child = docHandle.FirstChild( \"Document\" ).FirstChild( \"Element\" ).FirstChild( \"Child\" ).ToElement();\n\n\tfor( child; child; child=child->NextSiblingElement() )\n\t{\n\t\t// do something\n\t}\n\t@endverbatim\n*/\nclass TiXmlHandle\n{\npublic:\n\t/// Create a handle from any node (at any depth of the tree.) This can be a null pointer.\n\tTiXmlHandle( TiXmlNode* _node )\t\t\t\t\t{ this->node = _node; }\n\t/// Copy constructor\n\tTiXmlHandle( const TiXmlHandle& ref )\t\t\t{ this->node = ref.node; }\n\tTiXmlHandle operator=( const TiXmlHandle& ref ) { if ( &ref != this ) this->node = ref.node; return *this; }\n\n\t/// Return a handle to the first child node.\n\tTiXmlHandle FirstChild() const;\n\t/// Return a handle to the first child node with the given name.\n\tTiXmlHandle FirstChild( const char * value ) const;\n\t/// Return a handle to the first child element.\n\tTiXmlHandle FirstChildElement() const;\n\t/// Return a handle to the first child element with the given name.\n\tTiXmlHandle FirstChildElement( const char * value ) const;\n\n\t/** Return a handle to the \"index\" child with the given name. \n\t\tThe first child is 0, the second 1, etc.\n\t*/\n\tTiXmlHandle Child( const char* value, int index ) const;\n\t/** Return a handle to the \"index\" child. \n\t\tThe first child is 0, the second 1, etc.\n\t*/\n\tTiXmlHandle Child( int index ) const;\n\t/** Return a handle to the \"index\" child element with the given name. \n\t\tThe first child element is 0, the second 1, etc. Note that only TiXmlElements\n\t\tare indexed: other types are not counted.\n\t*/\n\tTiXmlHandle ChildElement( const char* value, int index ) const;\n\t/** Return a handle to the \"index\" child element. \n\t\tThe first child element is 0, the second 1, etc. Note that only TiXmlElements\n\t\tare indexed: other types are not counted.\n\t*/\n\tTiXmlHandle ChildElement( int index ) const;\n\n\t#ifdef TIXML_USE_STL\n\tTiXmlHandle FirstChild( const std::string& _value ) const\t\t\t\t{ return FirstChild( _value.c_str() ); }\n\tTiXmlHandle FirstChildElement( const std::string& _value ) const\t\t{ return FirstChildElement( _value.c_str() ); }\n\n\tTiXmlHandle Child( const std::string& _value, int index ) const\t\t\t{ return Child( _value.c_str(), index ); }\n\tTiXmlHandle ChildElement( const std::string& _value, int index ) const\t{ return ChildElement( _value.c_str(), index ); }\n\t#endif\n\n\t/** Return the handle as a TiXmlNode. This may return null.\n\t*/\n\tTiXmlNode* ToNode() const\t\t\t{ return node; } \n\t/** Return the handle as a TiXmlElement. This may return null.\n\t*/\n\tTiXmlElement* ToElement() const\t\t{ return ( ( node && node->ToElement() ) ? node->ToElement() : 0 ); }\n\t/**\tReturn the handle as a TiXmlText. This may return null.\n\t*/\n\tTiXmlText* ToText() const\t\t\t{ return ( ( node && node->ToText() ) ? node->ToText() : 0 ); }\n\t/** Return the handle as a TiXmlUnknown. This may return null.\n\t*/\n\tTiXmlUnknown* ToUnknown() const\t\t{ return ( ( node && node->ToUnknown() ) ? node->ToUnknown() : 0 ); }\n\n\t/** @deprecated use ToNode. \n\t\tReturn the handle as a TiXmlNode. This may return null.\n\t*/\n\tTiXmlNode* Node() const\t\t\t{ return ToNode(); } \n\t/** @deprecated use ToElement. \n\t\tReturn the handle as a TiXmlElement. This may return null.\n\t*/\n\tTiXmlElement* Element() const\t{ return ToElement(); }\n\t/**\t@deprecated use ToText()\n\t\tReturn the handle as a TiXmlText. This may return null.\n\t*/\n\tTiXmlText* Text() const\t\t\t{ return ToText(); }\n\t/** @deprecated use ToUnknown()\n\t\tReturn the handle as a TiXmlUnknown. This may return null.\n\t*/\n\tTiXmlUnknown* Unknown() const\t{ return ToUnknown(); }\n\nprivate:\n\tTiXmlNode* node;\n};\n\n\n/** Print to memory functionality. The TiXmlPrinter is useful when you need to:\n\n\t-# Print to memory (especially in non-STL mode)\n\t-# Control formatting (line endings, etc.)\n\n\tWhen constructed, the TiXmlPrinter is in its default \"pretty printing\" mode.\n\tBefore calling Accept() you can call methods to control the printing\n\tof the XML document. After TiXmlNode::Accept() is called, the printed document can\n\tbe accessed via the CStr(), Str(), and Size() methods.\n\n\tTiXmlPrinter uses the Visitor API.\n\t@verbatim\n\tTiXmlPrinter printer;\n\tprinter.SetIndent( \"\\t\" );\n\n\tdoc.Accept( &printer );\n\tfprintf( stdout, \"%s\", printer.CStr() );\n\t@endverbatim\n*/\nclass TiXmlPrinter : public TiXmlVisitor\n{\npublic:\n\tTiXmlPrinter() : depth( 0 ), simpleTextPrint( false ),\n\t\t\t\t\t buffer(), indent( \"    \" ), lineBreak( \"\\n\" ) {}\n\n\tvirtual bool VisitEnter( const TiXmlDocument& doc );\n\tvirtual bool VisitExit( const TiXmlDocument& doc );\n\n\tvirtual bool VisitEnter( const TiXmlElement& element, const TiXmlAttribute* firstAttribute );\n\tvirtual bool VisitExit( const TiXmlElement& element );\n\n\tvirtual bool Visit( const TiXmlDeclaration& declaration );\n\tvirtual bool Visit( const TiXmlText& text );\n\tvirtual bool Visit( const TiXmlComment& comment );\n\tvirtual bool Visit( const TiXmlUnknown& unknown );\n\n\t/** Set the indent characters for printing. By default 4 spaces\n\t\tbut tab (\\t) is also useful, or null/empty string for no indentation.\n\t*/\n\tvoid SetIndent( const char* _indent )\t\t\t{ indent = _indent ? _indent : \"\" ; }\n\t/// Query the indention string.\n\tconst char* Indent()\t\t\t\t\t\t\t{ return indent.c_str(); }\n\t/** Set the line breaking string. By default set to newline (\\n). \n\t\tSome operating systems prefer other characters, or can be\n\t\tset to the null/empty string for no indenation.\n\t*/\n\tvoid SetLineBreak( const char* _lineBreak )\t\t{ lineBreak = _lineBreak ? _lineBreak : \"\"; }\n\t/// Query the current line breaking string.\n\tconst char* LineBreak()\t\t\t\t\t\t\t{ return lineBreak.c_str(); }\n\n\t/** Switch over to \"stream printing\" which is the most dense formatting without \n\t\tlinebreaks. Common when the XML is needed for network transmission.\n\t*/\n\tvoid SetStreamPrinting()\t\t\t\t\t\t{ indent = \"\";\n\t\t\t\t\t\t\t\t\t\t\t\t\t  lineBreak = \"\";\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\t\n\t/// Return the result.\n\tconst char* CStr()\t\t\t\t\t\t\t\t{ return buffer.c_str(); }\n\t/// Return the length of the result string.\n\tsize_t Size()\t\t\t\t\t\t\t\t\t{ return buffer.size(); }\n\n\t#ifdef TIXML_USE_STL\n\t/// Return the result.\n\tconst std::string& Str()\t\t\t\t\t\t{ return buffer; }\n\t#endif\n\nprivate:\n\tvoid DoIndent()\t{\n\t\tfor( int i=0; i<depth; ++i )\n\t\t\tbuffer += indent;\n\t}\n\tvoid DoLineBreak() {\n\t\tbuffer += lineBreak;\n\t}\n\n\tint depth;\n\tbool simpleTextPrint;\n\tTIXML_STRING buffer;\n\tTIXML_STRING indent;\n\tTIXML_STRING lineBreak;\n};\n\n\n#ifdef _MSC_VER\n#pragma warning( pop )\n#endif\n\n#endif\n"
  },
  {
    "path": "external/tinyxml/tinyxml.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 11.00\r\n# Visual C++ Express 2010\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"tinyXmlTest\", \"tinyXmlTest.vcxproj\", \"{34719950-09E8-457E-BE23-8F1CE3A1F1F6}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"tinyXmlTestSTL\", \"tinyXmlTestSTL.vcxproj\", \"{53ED5965-5BCA-47B5-9EB0-EDD20882F22F}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"tinyxml\", \"tinyxml_lib.vcxproj\", \"{C406DAEC-0886-4771-8DEA-9D7329B46CC1}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"tinyxmlSTL\", \"tinyxmlSTL.vcxproj\", \"{A3A84737-5017-4577-B8A2-79429A25B8B6}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tRelease|Win32 = Release|Win32\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{34719950-09E8-457E-BE23-8F1CE3A1F1F6}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{34719950-09E8-457E-BE23-8F1CE3A1F1F6}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{34719950-09E8-457E-BE23-8F1CE3A1F1F6}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{34719950-09E8-457E-BE23-8F1CE3A1F1F6}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{53ED5965-5BCA-47B5-9EB0-EDD20882F22F}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{53ED5965-5BCA-47B5-9EB0-EDD20882F22F}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{53ED5965-5BCA-47B5-9EB0-EDD20882F22F}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{53ED5965-5BCA-47B5-9EB0-EDD20882F22F}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{C406DAEC-0886-4771-8DEA-9D7329B46CC1}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{C406DAEC-0886-4771-8DEA-9D7329B46CC1}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{C406DAEC-0886-4771-8DEA-9D7329B46CC1}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{C406DAEC-0886-4771-8DEA-9D7329B46CC1}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{A3A84737-5017-4577-B8A2-79429A25B8B6}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{A3A84737-5017-4577-B8A2-79429A25B8B6}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{A3A84737-5017-4577-B8A2-79429A25B8B6}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{A3A84737-5017-4577-B8A2-79429A25B8B6}.Release|Win32.Build.0 = Release|Win32\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "external/tinyxml/tinyxmlSTL.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{A3A84737-5017-4577-B8A2-79429A25B8B6}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseOfMfc>false</UseOfMfc>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseOfMfc>false</UseOfMfc>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n    <Import Project=\"$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n    <Import Project=\"$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup>\r\n    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r\n    <IncludePath Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(IncludePath)</IncludePath>\r\n    <LibraryPath Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(LibraryPath)</LibraryPath>\r\n    <IncludePath Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(IncludePath)</IncludePath>\r\n    <LibraryPath Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(LibraryPath)</LibraryPath>\r\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)$(Configuration)$(ProjectName)\\</IntDir>\r\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)$(Configuration)$(ProjectName)\\</OutDir>\r\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)$(Configuration)$(ProjectName)\\</OutDir>\r\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)$(Configuration)$(ProjectName)\\</IntDir>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;TIXML_USE_STL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <MinimalRebuild>true</MinimalRebuild>\r\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n      <BrowseInformation>true</BrowseInformation>\r\n      <WarningLevel>Level4</WarningLevel>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r\n    </ClCompile>\r\n    <ResourceCompile>\r\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <Culture>0x0409</Culture>\r\n    </ResourceCompile>\r\n    <Lib>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n    </Lib>\r\n    <Bscmake>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n    </Bscmake>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;TIXML_USE_STL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <StringPooling>true</StringPooling>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <BrowseInformation>true</BrowseInformation>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n    </ClCompile>\r\n    <ResourceCompile>\r\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <Culture>0x0409</Culture>\r\n    </ResourceCompile>\r\n    <Lib>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n    </Lib>\r\n    <Bscmake>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n    </Bscmake>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"tinystr.cpp\">\r\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n    </ClCompile>\r\n    <ClCompile Include=\"tinyxml.cpp\">\r\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n    </ClCompile>\r\n    <ClCompile Include=\"tinyxmlerror.cpp\">\r\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n    </ClCompile>\r\n    <ClCompile Include=\"tinyxmlparser.cpp\">\r\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n    </ClCompile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"tinystr.h\" />\r\n    <ClInclude Include=\"tinyxml.h\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"changes.txt\" />\r\n    <None Include=\"readme.txt\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "external/tinyxml/tinyxml_lib.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectName>tinyxml</ProjectName>\r\n    <ProjectGuid>{C406DAEC-0886-4771-8DEA-9D7329B46CC1}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseOfMfc>false</UseOfMfc>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseOfMfc>false</UseOfMfc>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n    <Import Project=\"$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n    <Import Project=\"$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup>\r\n    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r\n    <IncludePath Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(IncludePath)</IncludePath>\r\n    <LibraryPath Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(LibraryPath)</LibraryPath>\r\n    <IncludePath Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(IncludePath)</IncludePath>\r\n    <LibraryPath Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(LibraryPath)</LibraryPath>\r\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)$(Configuration)$(ProjectName)\\</IntDir>\r\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)$(Configuration)$(ProjectName)\\</OutDir>\r\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)$(Configuration)$(ProjectName)\\</OutDir>\r\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)$(Configuration)$(ProjectName)\\</IntDir>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <StringPooling>true</StringPooling>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n    </ClCompile>\r\n    <ResourceCompile>\r\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <Culture>0x0407</Culture>\r\n    </ResourceCompile>\r\n    <Lib>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n    </Lib>\r\n    <Bscmake>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n    </Bscmake>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <MinimalRebuild>true</MinimalRebuild>\r\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n      <BrowseInformation>true</BrowseInformation>\r\n      <WarningLevel>Level4</WarningLevel>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r\n    </ClCompile>\r\n    <ResourceCompile>\r\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <Culture>0x0407</Culture>\r\n    </ResourceCompile>\r\n    <Lib>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n    </Lib>\r\n    <Bscmake>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n    </Bscmake>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"tinystr.cpp\">\r\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n    </ClCompile>\r\n    <ClCompile Include=\"tinyxml.cpp\">\r\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n    </ClCompile>\r\n    <ClCompile Include=\"tinyxmlerror.cpp\">\r\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n    </ClCompile>\r\n    <ClCompile Include=\"tinyxmlparser.cpp\">\r\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n    </ClCompile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"tinystr.h\" />\r\n    <ClInclude Include=\"tinyxml.h\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"changes.txt\" />\r\n    <None Include=\"readme.txt\" />\r\n    <None Include=\"tutorial_gettingStarted.txt\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "external/tinyxml/tinyxmlerror.cpp",
    "content": "/*\nwww.sourceforge.net/projects/tinyxml\nOriginal code (2.0 and earlier )copyright (c) 2000-2006 Lee Thomason (www.grinninglizard.com)\n\nThis software is provided 'as-is', without any express or implied \nwarranty. In no event will the authors be held liable for any \ndamages arising from the use of this software.\n\nPermission is granted to anyone to use this software for any \npurpose, including commercial applications, and to alter it and \nredistribute it freely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must\nnot claim that you wrote the original software. If you use this\nsoftware in a product, an acknowledgment in the product documentation\nwould be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and\nmust not be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\ndistribution.\n*/\n\n#include \"tinyxml.h\"\n\n// The goal of the seperate error file is to make the first\n// step towards localization. tinyxml (currently) only supports\n// english error messages, but the could now be translated.\n//\n// It also cleans up the code a bit.\n//\n\nconst char* TiXmlBase::errorString[ TiXmlBase::TIXML_ERROR_STRING_COUNT ] =\n{\n\t\"No error\",\n\t\"Error\",\n\t\"Failed to open file\",\n\t\"Error parsing Element.\",\n\t\"Failed to read Element name\",\n\t\"Error reading Element value.\",\n\t\"Error reading Attributes.\",\n\t\"Error: empty tag.\",\n\t\"Error reading end tag.\",\n\t\"Error parsing Unknown.\",\n\t\"Error parsing Comment.\",\n\t\"Error parsing Declaration.\",\n\t\"Error document empty.\",\n\t\"Error null (0) or unexpected EOF found in input stream.\",\n\t\"Error parsing CDATA.\",\n\t\"Error when TiXmlDocument added to document, because TiXmlDocument can only be at the root.\",\n};\n"
  },
  {
    "path": "external/tinyxml/tinyxmlparser.cpp",
    "content": "/*\nwww.sourceforge.net/projects/tinyxml\nOriginal code by Lee Thomason (www.grinninglizard.com)\n\nThis software is provided 'as-is', without any express or implied \nwarranty. In no event will the authors be held liable for any \ndamages arising from the use of this software.\n\nPermission is granted to anyone to use this software for any \npurpose, including commercial applications, and to alter it and \nredistribute it freely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must \nnot claim that you wrote the original software. If you use this\nsoftware in a product, an acknowledgment in the product documentation\nwould be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and \nmust not be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source \ndistribution.\n*/\n\n#include <ctype.h>\n#include <stddef.h>\n\n#include \"tinyxml.h\"\n\n//#define DEBUG_PARSER\n#if defined( DEBUG_PARSER )\n#\tif defined( DEBUG ) && defined( _MSC_VER )\n#\t\tinclude <windows.h>\n#\t\tdefine TIXML_LOG OutputDebugString\n#\telse\n#\t\tdefine TIXML_LOG printf\n#\tendif\n#endif\n\n// Note tha \"PutString\" hardcodes the same list. This\n// is less flexible than it appears. Changing the entries\n// or order will break putstring.\t\nTiXmlBase::Entity TiXmlBase::entity[ TiXmlBase::NUM_ENTITY ] = \n{\n\t{ \"&amp;\",  5, '&' },\n\t{ \"&lt;\",   4, '<' },\n\t{ \"&gt;\",   4, '>' },\n\t{ \"&quot;\", 6, '\\\"' },\n\t{ \"&apos;\", 6, '\\'' }\n};\n\n// Bunch of unicode info at:\n//\t\thttp://www.unicode.org/faq/utf_bom.html\n// Including the basic of this table, which determines the #bytes in the\n// sequence from the lead byte. 1 placed for invalid sequences --\n// although the result will be junk, pass it through as much as possible.\n// Beware of the non-characters in UTF-8:\t\n//\t\t\t\tef bb bf (Microsoft \"lead bytes\")\n//\t\t\t\tef bf be\n//\t\t\t\tef bf bf \n\nconst unsigned char TIXML_UTF_LEAD_0 = 0xefU;\nconst unsigned char TIXML_UTF_LEAD_1 = 0xbbU;\nconst unsigned char TIXML_UTF_LEAD_2 = 0xbfU;\n\nconst int TiXmlBase::utf8ByteTable[256] = \n{\n\t//\t0\t1\t2\t3\t4\t5\t6\t7\t8\t9\ta\tb\tc\td\te\tf\n\t\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t// 0x00\n\t\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t// 0x10\n\t\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t// 0x20\n\t\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t// 0x30\n\t\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t// 0x40\n\t\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t// 0x50\n\t\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t// 0x60\n\t\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t// 0x70\tEnd of ASCII range\n\t\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t// 0x80 0x80 to 0xc1 invalid\n\t\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t// 0x90 \n\t\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t// 0xa0 \n\t\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t// 0xb0 \n\t\t1,\t1,\t2,\t2,\t2,\t2,\t2,\t2,\t2,\t2,\t2,\t2,\t2,\t2,\t2,\t2,\t// 0xc0 0xc2 to 0xdf 2 byte\n\t\t2,\t2,\t2,\t2,\t2,\t2,\t2,\t2,\t2,\t2,\t2,\t2,\t2,\t2,\t2,\t2,\t// 0xd0\n\t\t3,\t3,\t3,\t3,\t3,\t3,\t3,\t3,\t3,\t3,\t3,\t3,\t3,\t3,\t3,\t3,\t// 0xe0 0xe0 to 0xef 3 byte\n\t\t4,\t4,\t4,\t4,\t4,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1,\t1\t// 0xf0 0xf0 to 0xf4 4 byte, 0xf5 and higher invalid\n};\n\n\nvoid TiXmlBase::ConvertUTF32ToUTF8( unsigned long input, char* output, int* length )\n{\n\tconst unsigned long BYTE_MASK = 0xBF;\n\tconst unsigned long BYTE_MARK = 0x80;\n\tconst unsigned long FIRST_BYTE_MARK[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };\n\n\tif (input < 0x80) \n\t\t*length = 1;\n\telse if ( input < 0x800 )\n\t\t*length = 2;\n\telse if ( input < 0x10000 )\n\t\t*length = 3;\n\telse if ( input < 0x200000 )\n\t\t*length = 4;\n\telse\n\t\t{ *length = 0; return; }\t// This code won't covert this correctly anyway.\n\n\toutput += *length;\n\n\t// Scary scary fall throughs.\n\tswitch (*length) \n\t{\n\t\tcase 4:\n\t\t\t--output; \n\t\t\t*output = (char)((input | BYTE_MARK) & BYTE_MASK); \n\t\t\tinput >>= 6;\n\t\tcase 3:\n\t\t\t--output; \n\t\t\t*output = (char)((input | BYTE_MARK) & BYTE_MASK); \n\t\t\tinput >>= 6;\n\t\tcase 2:\n\t\t\t--output; \n\t\t\t*output = (char)((input | BYTE_MARK) & BYTE_MASK); \n\t\t\tinput >>= 6;\n\t\tcase 1:\n\t\t\t--output; \n\t\t\t*output = (char)(input | FIRST_BYTE_MARK[*length]);\n\t}\n}\n\n\n/*static*/ int TiXmlBase::IsAlpha( unsigned char anyByte, TiXmlEncoding /*encoding*/ )\n{\n\t// This will only work for low-ascii, everything else is assumed to be a valid\n\t// letter. I'm not sure this is the best approach, but it is quite tricky trying\n\t// to figure out alhabetical vs. not across encoding. So take a very \n\t// conservative approach.\n\n//\tif ( encoding == TIXML_ENCODING_UTF8 )\n//\t{\n\t\tif ( anyByte < 127 )\n\t\t\treturn isalpha( anyByte );\n\t\telse\n\t\t\treturn 1;\t// What else to do? The unicode set is huge...get the english ones right.\n//\t}\n//\telse\n//\t{\n//\t\treturn isalpha( anyByte );\n//\t}\n}\n\n\n/*static*/ int TiXmlBase::IsAlphaNum( unsigned char anyByte, TiXmlEncoding /*encoding*/ )\n{\n\t// This will only work for low-ascii, everything else is assumed to be a valid\n\t// letter. I'm not sure this is the best approach, but it is quite tricky trying\n\t// to figure out alhabetical vs. not across encoding. So take a very \n\t// conservative approach.\n\n//\tif ( encoding == TIXML_ENCODING_UTF8 )\n//\t{\n\t\tif ( anyByte < 127 )\n\t\t\treturn isalnum( anyByte );\n\t\telse\n\t\t\treturn 1;\t// What else to do? The unicode set is huge...get the english ones right.\n//\t}\n//\telse\n//\t{\n//\t\treturn isalnum( anyByte );\n//\t}\n}\n\n\nclass TiXmlParsingData\n{\n\tfriend class TiXmlDocument;\n  public:\n\tvoid Stamp( const char* now, TiXmlEncoding encoding );\n\n\tconst TiXmlCursor& Cursor() const\t{ return cursor; }\n\n  private:\n\t// Only used by the document!\n\tTiXmlParsingData( const char* start, int _tabsize, int row, int col )\n\t{\n\t\tassert( start );\n\t\tstamp = start;\n\t\ttabsize = _tabsize;\n\t\tcursor.row = row;\n\t\tcursor.col = col;\n\t}\n\n\tTiXmlCursor\t\tcursor;\n\tconst char*\t\tstamp;\n\tint\t\t\t\ttabsize;\n};\n\n\nvoid TiXmlParsingData::Stamp( const char* now, TiXmlEncoding encoding )\n{\n\tassert( now );\n\n\t// Do nothing if the tabsize is 0.\n\tif ( tabsize < 1 )\n\t{\n\t\treturn;\n\t}\n\n\t// Get the current row, column.\n\tint row = cursor.row;\n\tint col = cursor.col;\n\tconst char* p = stamp;\n\tassert( p );\n\n\twhile ( p < now )\n\t{\n\t\t// Treat p as unsigned, so we have a happy compiler.\n\t\tconst unsigned char* pU = (const unsigned char*)p;\n\n\t\t// Code contributed by Fletcher Dunn: (modified by lee)\n\t\tswitch (*pU) {\n\t\t\tcase 0:\n\t\t\t\t// We *should* never get here, but in case we do, don't\n\t\t\t\t// advance past the terminating null character, ever\n\t\t\t\treturn;\n\n\t\t\tcase '\\r':\n\t\t\t\t// bump down to the next line\n\t\t\t\t++row;\n\t\t\t\tcol = 0;\t\t\t\t\n\t\t\t\t// Eat the character\n\t\t\t\t++p;\n\n\t\t\t\t// Check for \\r\\n sequence, and treat this as a single character\n\t\t\t\tif (*p == '\\n') {\n\t\t\t\t\t++p;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase '\\n':\n\t\t\t\t// bump down to the next line\n\t\t\t\t++row;\n\t\t\t\tcol = 0;\n\n\t\t\t\t// Eat the character\n\t\t\t\t++p;\n\n\t\t\t\t// Check for \\n\\r sequence, and treat this as a single\n\t\t\t\t// character.  (Yes, this bizarre thing does occur still\n\t\t\t\t// on some arcane platforms...)\n\t\t\t\tif (*p == '\\r') {\n\t\t\t\t\t++p;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase '\\t':\n\t\t\t\t// Eat the character\n\t\t\t\t++p;\n\n\t\t\t\t// Skip to next tab stop\n\t\t\t\tcol = (col / tabsize + 1) * tabsize;\n\t\t\t\tbreak;\n\n\t\t\tcase TIXML_UTF_LEAD_0:\n\t\t\t\tif ( encoding == TIXML_ENCODING_UTF8 )\n\t\t\t\t{\n\t\t\t\t\tif ( *(p+1) && *(p+2) )\n\t\t\t\t\t{\n\t\t\t\t\t\t// In these cases, don't advance the column. These are\n\t\t\t\t\t\t// 0-width spaces.\n\t\t\t\t\t\tif ( *(pU+1)==TIXML_UTF_LEAD_1 && *(pU+2)==TIXML_UTF_LEAD_2 )\n\t\t\t\t\t\t\tp += 3;\t\n\t\t\t\t\t\telse if ( *(pU+1)==0xbfU && *(pU+2)==0xbeU )\n\t\t\t\t\t\t\tp += 3;\t\n\t\t\t\t\t\telse if ( *(pU+1)==0xbfU && *(pU+2)==0xbfU )\n\t\t\t\t\t\t\tp += 3;\t\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{ p +=3; ++col; }\t// A normal character.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t++p;\n\t\t\t\t\t++col;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tif ( encoding == TIXML_ENCODING_UTF8 )\n\t\t\t\t{\n\t\t\t\t\t// Eat the 1 to 4 byte utf8 character.\n\t\t\t\t\tint step = TiXmlBase::utf8ByteTable[*((const unsigned char*)p)];\n\t\t\t\t\tif ( step == 0 )\n\t\t\t\t\t\tstep = 1;\t\t// Error case from bad encoding, but handle gracefully.\n\t\t\t\t\tp += step;\n\n\t\t\t\t\t// Just advance one column, of course.\n\t\t\t\t\t++col;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t++p;\n\t\t\t\t\t++col;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tcursor.row = row;\n\tcursor.col = col;\n\tassert( cursor.row >= -1 );\n\tassert( cursor.col >= -1 );\n\tstamp = p;\n\tassert( stamp );\n}\n\n\nconst char* TiXmlBase::SkipWhiteSpace( const char* p, TiXmlEncoding encoding )\n{\n\tif ( !p || !*p )\n\t{\n\t\treturn 0;\n\t}\n\tif ( encoding == TIXML_ENCODING_UTF8 )\n\t{\n\t\twhile ( *p )\n\t\t{\n\t\t\tconst unsigned char* pU = (const unsigned char*)p;\n\t\t\t\n\t\t\t// Skip the stupid Microsoft UTF-8 Byte order marks\n\t\t\tif (\t*(pU+0)==TIXML_UTF_LEAD_0\n\t\t\t\t && *(pU+1)==TIXML_UTF_LEAD_1 \n\t\t\t\t && *(pU+2)==TIXML_UTF_LEAD_2 )\n\t\t\t{\n\t\t\t\tp += 3;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\telse if(*(pU+0)==TIXML_UTF_LEAD_0\n\t\t\t\t && *(pU+1)==0xbfU\n\t\t\t\t && *(pU+2)==0xbeU )\n\t\t\t{\n\t\t\t\tp += 3;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\telse if(*(pU+0)==TIXML_UTF_LEAD_0\n\t\t\t\t && *(pU+1)==0xbfU\n\t\t\t\t && *(pU+2)==0xbfU )\n\t\t\t{\n\t\t\t\tp += 3;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( IsWhiteSpace( *p ) )\t\t// Still using old rules for white space.\n\t\t\t\t++p;\n\t\t\telse\n\t\t\t\tbreak;\n\t\t}\n\t}\n\telse\n\t{\n\t\twhile ( *p && IsWhiteSpace( *p ) )\n\t\t\t++p;\n\t}\n\n\treturn p;\n}\n\n#ifdef TIXML_USE_STL\n/*static*/ bool TiXmlBase::StreamWhiteSpace( std::istream * in, TIXML_STRING * tag )\n{\n\tfor( ;; )\n\t{\n\t\tif ( !in->good() ) return false;\n\n\t\tint c = in->peek();\n\t\t// At this scope, we can't get to a document. So fail silently.\n\t\tif ( !IsWhiteSpace( c ) || c <= 0 )\n\t\t\treturn true;\n\n\t\t*tag += (char) in->get();\n\t}\n}\n\n/*static*/ bool TiXmlBase::StreamTo( std::istream * in, int character, TIXML_STRING * tag )\n{\n\t//assert( character > 0 && character < 128 );\t// else it won't work in utf-8\n\twhile ( in->good() )\n\t{\n\t\tint c = in->peek();\n\t\tif ( c == character )\n\t\t\treturn true;\n\t\tif ( c <= 0 )\t\t// Silent failure: can't get document at this scope\n\t\t\treturn false;\n\n\t\tin->get();\n\t\t*tag += (char) c;\n\t}\n\treturn false;\n}\n#endif\n\n// One of TinyXML's more performance demanding functions. Try to keep the memory overhead down. The\n// \"assign\" optimization removes over 10% of the execution time.\n//\nconst char* TiXmlBase::ReadName( const char* p, TIXML_STRING * name, TiXmlEncoding encoding )\n{\n\t// Oddly, not supported on some comilers,\n\t//name->clear();\n\t// So use this:\n\t*name = \"\";\n\tassert( p );\n\n\t// Names start with letters or underscores.\n\t// Of course, in unicode, tinyxml has no idea what a letter *is*. The\n\t// algorithm is generous.\n\t//\n\t// After that, they can be letters, underscores, numbers,\n\t// hyphens, or colons. (Colons are valid ony for namespaces,\n\t// but tinyxml can't tell namespaces from names.)\n\tif (    p && *p \n\t\t && ( IsAlpha( (unsigned char) *p, encoding ) || *p == '_' ) )\n\t{\n\t\tconst char* start = p;\n\t\twhile(\t\tp && *p\n\t\t\t\t&&\t(\t\tIsAlphaNum( (unsigned char ) *p, encoding ) \n\t\t\t\t\t\t || *p == '_'\n\t\t\t\t\t\t || *p == '-'\n\t\t\t\t\t\t || *p == '.'\n\t\t\t\t\t\t || *p == ':' ) )\n\t\t{\n\t\t\t//(*name) += *p; // expensive\n\t\t\t++p;\n\t\t}\n\t\tif ( p-start > 0 ) {\n\t\t\tname->assign( start, p-start );\n\t\t}\n\t\treturn p;\n\t}\n\treturn 0;\n}\n\nconst char* TiXmlBase::GetEntity( const char* p, char* value, int* length, TiXmlEncoding encoding )\n{\n\t// Presume an entity, and pull it out.\n    TIXML_STRING ent;\n\tint i;\n\t*length = 0;\n\n\tif ( *(p+1) && *(p+1) == '#' && *(p+2) )\n\t{\n\t\tunsigned long ucs = 0;\n\t\tptrdiff_t delta = 0;\n\t\tunsigned mult = 1;\n\n\t\tif ( *(p+2) == 'x' )\n\t\t{\n\t\t\t// Hexadecimal.\n\t\t\tif ( !*(p+3) ) return 0;\n\n\t\t\tconst char* q = p+3;\n\t\t\tq = strchr( q, ';' );\n\n\t\t\tif ( !q || !*q ) return 0;\n\n\t\t\tdelta = q-p;\n\t\t\t--q;\n\n\t\t\twhile ( *q != 'x' )\n\t\t\t{\n\t\t\t\tif ( *q >= '0' && *q <= '9' )\n\t\t\t\t\tucs += mult * (*q - '0');\n\t\t\t\telse if ( *q >= 'a' && *q <= 'f' )\n\t\t\t\t\tucs += mult * (*q - 'a' + 10);\n\t\t\t\telse if ( *q >= 'A' && *q <= 'F' )\n\t\t\t\t\tucs += mult * (*q - 'A' + 10 );\n\t\t\t\telse \n\t\t\t\t\treturn 0;\n\t\t\t\tmult *= 16;\n\t\t\t\t--q;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Decimal.\n\t\t\tif ( !*(p+2) ) return 0;\n\n\t\t\tconst char* q = p+2;\n\t\t\tq = strchr( q, ';' );\n\n\t\t\tif ( !q || !*q ) return 0;\n\n\t\t\tdelta = q-p;\n\t\t\t--q;\n\n\t\t\twhile ( *q != '#' )\n\t\t\t{\n\t\t\t\tif ( *q >= '0' && *q <= '9' )\n\t\t\t\t\tucs += mult * (*q - '0');\n\t\t\t\telse \n\t\t\t\t\treturn 0;\n\t\t\t\tmult *= 10;\n\t\t\t\t--q;\n\t\t\t}\n\t\t}\n\t\tif ( encoding == TIXML_ENCODING_UTF8 )\n\t\t{\n\t\t\t// convert the UCS to UTF-8\n\t\t\tConvertUTF32ToUTF8( ucs, value, length );\n\t\t}\n\t\telse\n\t\t{\n\t\t\t*value = (char)ucs;\n\t\t\t*length = 1;\n\t\t}\n\t\treturn p + delta + 1;\n\t}\n\n\t// Now try to match it.\n\tfor( i=0; i<NUM_ENTITY; ++i )\n\t{\n\t\tif ( strncmp( entity[i].str, p, entity[i].strLength ) == 0 )\n\t\t{\n\t\t\tassert( strlen( entity[i].str ) == entity[i].strLength );\n\t\t\t*value = entity[i].chr;\n\t\t\t*length = 1;\n\t\t\treturn ( p + entity[i].strLength );\n\t\t}\n\t}\n\n\t// So it wasn't an entity, its unrecognized, or something like that.\n\t*value = *p;\t// Don't put back the last one, since we return it!\n\t//*length = 1;\t// Leave unrecognized entities - this doesn't really work.\n\t\t\t\t\t// Just writes strange XML.\n\treturn p+1;\n}\n\n\nbool TiXmlBase::StringEqual( const char* p,\n\t\t\t\t\t\t\t const char* tag,\n\t\t\t\t\t\t\t bool ignoreCase,\n\t\t\t\t\t\t\t TiXmlEncoding encoding )\n{\n\tassert( p );\n\tassert( tag );\n\tif ( !p || !*p )\n\t{\n\t\tassert( 0 );\n\t\treturn false;\n\t}\n\n\tconst char* q = p;\n\n\tif ( ignoreCase )\n\t{\n\t\twhile ( *q && *tag && ToLower( *q, encoding ) == ToLower( *tag, encoding ) )\n\t\t{\n\t\t\t++q;\n\t\t\t++tag;\n\t\t}\n\n\t\tif ( *tag == 0 )\n\t\t\treturn true;\n\t}\n\telse\n\t{\n\t\twhile ( *q && *tag && *q == *tag )\n\t\t{\n\t\t\t++q;\n\t\t\t++tag;\n\t\t}\n\n\t\tif ( *tag == 0 )\t\t// Have we found the end of the tag, and everything equal?\n\t\t\treturn true;\n\t}\n\treturn false;\n}\n\nconst char* TiXmlBase::ReadText(\tconst char* p, \n\t\t\t\t\t\t\t\t\tTIXML_STRING * text, \n\t\t\t\t\t\t\t\t\tbool trimWhiteSpace, \n\t\t\t\t\t\t\t\t\tconst char* endTag, \n\t\t\t\t\t\t\t\t\tbool caseInsensitive,\n\t\t\t\t\t\t\t\t\tTiXmlEncoding encoding )\n{\n    *text = \"\";\n\tif (    !trimWhiteSpace\t\t\t// certain tags always keep whitespace\n\t\t || !condenseWhiteSpace )\t// if true, whitespace is always kept\n\t{\n\t\t// Keep all the white space.\n\t\twhile (\t   p && *p\n\t\t\t\t&& !StringEqual( p, endTag, caseInsensitive, encoding )\n\t\t\t  )\n\t\t{\n\t\t\tint len;\n\t\t\tchar cArr[4] = { 0, 0, 0, 0 };\n\t\t\tp = GetChar( p, cArr, &len, encoding );\n\t\t\ttext->append( cArr, len );\n\t\t}\n\t}\n\telse\n\t{\n\t\tbool whitespace = false;\n\n\t\t// Remove leading white space:\n\t\tp = SkipWhiteSpace( p, encoding );\n\t\twhile (\t   p && *p\n\t\t\t\t&& !StringEqual( p, endTag, caseInsensitive, encoding ) )\n\t\t{\n\t\t\tif ( *p == '\\r' || *p == '\\n' )\n\t\t\t{\n\t\t\t\twhitespace = true;\n\t\t\t\t++p;\n\t\t\t}\n\t\t\telse if ( IsWhiteSpace( *p ) )\n\t\t\t{\n\t\t\t\twhitespace = true;\n\t\t\t\t++p;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// If we've found whitespace, add it before the\n\t\t\t\t// new character. Any whitespace just becomes a space.\n\t\t\t\tif ( whitespace )\n\t\t\t\t{\n\t\t\t\t\t(*text) += ' ';\n\t\t\t\t\twhitespace = false;\n\t\t\t\t}\n\t\t\t\tint len;\n\t\t\t\tchar cArr[4] = { 0, 0, 0, 0 };\n\t\t\t\tp = GetChar( p, cArr, &len, encoding );\n\t\t\t\tif ( len == 1 )\n\t\t\t\t\t(*text) += cArr[0];\t// more efficient\n\t\t\t\telse\n\t\t\t\t\ttext->append( cArr, len );\n\t\t\t}\n\t\t}\n\t}\n\tif ( p && *p )\n\t\tp += strlen( endTag );\n\treturn ( p && *p ) ? p : 0;\n}\n\n#ifdef TIXML_USE_STL\n\nvoid TiXmlDocument::StreamIn( std::istream * in, TIXML_STRING * tag )\n{\n\t// The basic issue with a document is that we don't know what we're\n\t// streaming. Read something presumed to be a tag (and hope), then\n\t// identify it, and call the appropriate stream method on the tag.\n\t//\n\t// This \"pre-streaming\" will never read the closing \">\" so the\n\t// sub-tag can orient itself.\n\n\tif ( !StreamTo( in, '<', tag ) ) \n\t{\n\t\tSetError( TIXML_ERROR_PARSING_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN );\n\t\treturn;\n\t}\n\n\twhile ( in->good() )\n\t{\n\t\tint tagIndex = (int) tag->length();\n\t\twhile ( in->good() && in->peek() != '>' )\n\t\t{\n\t\t\tint c = in->get();\n\t\t\tif ( c <= 0 )\n\t\t\t{\n\t\t\t\tSetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t(*tag) += (char) c;\n\t\t}\n\n\t\tif ( in->good() )\n\t\t{\n\t\t\t// We now have something we presume to be a node of \n\t\t\t// some sort. Identify it, and call the node to\n\t\t\t// continue streaming.\n\t\t\tTiXmlNode* node = Identify( tag->c_str() + tagIndex, TIXML_DEFAULT_ENCODING );\n\n\t\t\tif ( node )\n\t\t\t{\n\t\t\t\tnode->StreamIn( in, tag );\n\t\t\t\tbool isElement = node->ToElement() != 0;\n\t\t\t\tdelete node;\n\t\t\t\tnode = 0;\n\n\t\t\t\t// If this is the root element, we're done. Parsing will be\n\t\t\t\t// done by the >> operator.\n\t\t\t\tif ( isElement )\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tSetError( TIXML_ERROR, 0, 0, TIXML_ENCODING_UNKNOWN );\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\t// We should have returned sooner.\n\tSetError( TIXML_ERROR, 0, 0, TIXML_ENCODING_UNKNOWN );\n}\n\n#endif\n\nconst char* TiXmlDocument::Parse( const char* p, TiXmlParsingData* prevData, TiXmlEncoding encoding )\n{\n\tClearError();\n\n\t// Parse away, at the document level. Since a document\n\t// contains nothing but other tags, most of what happens\n\t// here is skipping white space.\n\tif ( !p || !*p )\n\t{\n\t\tSetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN );\n\t\treturn 0;\n\t}\n\n\t// Note that, for a document, this needs to come\n\t// before the while space skip, so that parsing\n\t// starts from the pointer we are given.\n\tlocation.Clear();\n\tif ( prevData )\n\t{\n\t\tlocation.row = prevData->cursor.row;\n\t\tlocation.col = prevData->cursor.col;\n\t}\n\telse\n\t{\n\t\tlocation.row = 0;\n\t\tlocation.col = 0;\n\t}\n\tTiXmlParsingData data( p, TabSize(), location.row, location.col );\n\tlocation = data.Cursor();\n\n\tif ( encoding == TIXML_ENCODING_UNKNOWN )\n\t{\n\t\t// Check for the Microsoft UTF-8 lead bytes.\n\t\tconst unsigned char* pU = (const unsigned char*)p;\n\t\tif (\t*(pU+0) && *(pU+0) == TIXML_UTF_LEAD_0\n\t\t\t && *(pU+1) && *(pU+1) == TIXML_UTF_LEAD_1\n\t\t\t && *(pU+2) && *(pU+2) == TIXML_UTF_LEAD_2 )\n\t\t{\n\t\t\tencoding = TIXML_ENCODING_UTF8;\n\t\t\tuseMicrosoftBOM = true;\n\t\t}\n\t}\n\n    p = SkipWhiteSpace( p, encoding );\n\tif ( !p )\n\t{\n\t\tSetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN );\n\t\treturn 0;\n\t}\n\n\twhile ( p && *p )\n\t{\n\t\tTiXmlNode* node = Identify( p, encoding );\n\t\tif ( node )\n\t\t{\n\t\t\tp = node->Parse( p, &data, encoding );\n\t\t\tLinkEndChild( node );\n\t\t}\n\t\telse\n\t\t{\n\t\t\tbreak;\n\t\t}\n\n\t\t// Did we get encoding info?\n\t\tif (    encoding == TIXML_ENCODING_UNKNOWN\n\t\t\t && node->ToDeclaration() )\n\t\t{\n\t\t\tTiXmlDeclaration* dec = node->ToDeclaration();\n\t\t\tconst char* enc = dec->Encoding();\n\t\t\tassert( enc );\n\n\t\t\tif ( *enc == 0 )\n\t\t\t\tencoding = TIXML_ENCODING_UTF8;\n\t\t\telse if ( StringEqual( enc, \"UTF-8\", true, TIXML_ENCODING_UNKNOWN ) )\n\t\t\t\tencoding = TIXML_ENCODING_UTF8;\n\t\t\telse if ( StringEqual( enc, \"UTF8\", true, TIXML_ENCODING_UNKNOWN ) )\n\t\t\t\tencoding = TIXML_ENCODING_UTF8;\t// incorrect, but be nice\n\t\t\telse \n\t\t\t\tencoding = TIXML_ENCODING_LEGACY;\n\t\t}\n\n\t\tp = SkipWhiteSpace( p, encoding );\n\t}\n\n\t// Was this empty?\n\tif ( !firstChild ) {\n\t\tSetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, encoding );\n\t\treturn 0;\n\t}\n\n\t// All is well.\n\treturn p;\n}\n\nvoid TiXmlDocument::SetError( int err, const char* pError, TiXmlParsingData* data, TiXmlEncoding encoding )\n{\t\n\t// The first error in a chain is more accurate - don't set again!\n\tif ( error )\n\t\treturn;\n\n\tassert( err > 0 && err < TIXML_ERROR_STRING_COUNT );\n\terror   = true;\n\terrorId = err;\n\terrorDesc = errorString[ errorId ];\n\n\terrorLocation.Clear();\n\tif ( pError && data )\n\t{\n\t\tdata->Stamp( pError, encoding );\n\t\terrorLocation = data->Cursor();\n\t}\n}\n\n\nTiXmlNode* TiXmlNode::Identify( const char* p, TiXmlEncoding encoding )\n{\n\tTiXmlNode* returnNode = 0;\n\n\tp = SkipWhiteSpace( p, encoding );\n\tif( !p || !*p || *p != '<' )\n\t{\n\t\treturn 0;\n\t}\n\n\tp = SkipWhiteSpace( p, encoding );\n\n\tif ( !p || !*p )\n\t{\n\t\treturn 0;\n\t}\n\n\t// What is this thing? \n\t// - Elements start with a letter or underscore, but xml is reserved.\n\t// - Comments: <!--\n\t// - Decleration: <?xml\n\t// - Everthing else is unknown to tinyxml.\n\t//\n\n\tconst char* xmlHeader = { \"<?xml\" };\n\tconst char* commentHeader = { \"<!--\" };\n\tconst char* dtdHeader = { \"<!\" };\n\tconst char* cdataHeader = { \"<![CDATA[\" };\n\n\tif ( StringEqual( p, xmlHeader, true, encoding ) )\n\t{\n\t\t#ifdef DEBUG_PARSER\n\t\t\tTIXML_LOG( \"XML parsing Declaration\\n\" );\n\t\t#endif\n\t\treturnNode = new TiXmlDeclaration();\n\t}\n\telse if ( StringEqual( p, commentHeader, false, encoding ) )\n\t{\n\t\t#ifdef DEBUG_PARSER\n\t\t\tTIXML_LOG( \"XML parsing Comment\\n\" );\n\t\t#endif\n\t\treturnNode = new TiXmlComment();\n\t}\n\telse if ( StringEqual( p, cdataHeader, false, encoding ) )\n\t{\n\t\t#ifdef DEBUG_PARSER\n\t\t\tTIXML_LOG( \"XML parsing CDATA\\n\" );\n\t\t#endif\n\t\tTiXmlText* text = new TiXmlText( \"\" );\n\t\ttext->SetCDATA( true );\n\t\treturnNode = text;\n\t}\n\telse if ( StringEqual( p, dtdHeader, false, encoding ) )\n\t{\n\t\t#ifdef DEBUG_PARSER\n\t\t\tTIXML_LOG( \"XML parsing Unknown(1)\\n\" );\n\t\t#endif\n\t\treturnNode = new TiXmlUnknown();\n\t}\n\telse if (    IsAlpha( *(p+1), encoding )\n\t\t\t  || *(p+1) == '_' )\n\t{\n\t\t#ifdef DEBUG_PARSER\n\t\t\tTIXML_LOG( \"XML parsing Element\\n\" );\n\t\t#endif\n\t\treturnNode = new TiXmlElement( \"\" );\n\t}\n\telse\n\t{\n\t\t#ifdef DEBUG_PARSER\n\t\t\tTIXML_LOG( \"XML parsing Unknown(2)\\n\" );\n\t\t#endif\n\t\treturnNode = new TiXmlUnknown();\n\t}\n\n\tif ( returnNode )\n\t{\n\t\t// Set the parent, so it can report errors\n\t\treturnNode->parent = this;\n\t}\n\treturn returnNode;\n}\n\n#ifdef TIXML_USE_STL\n\nvoid TiXmlElement::StreamIn (std::istream * in, TIXML_STRING * tag)\n{\n\t// We're called with some amount of pre-parsing. That is, some of \"this\"\n\t// element is in \"tag\". Go ahead and stream to the closing \">\"\n\twhile( in->good() )\n\t{\n\t\tint c = in->get();\n\t\tif ( c <= 0 )\n\t\t{\n\t\t\tTiXmlDocument* document = GetDocument();\n\t\t\tif ( document )\n\t\t\t\tdocument->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN );\n\t\t\treturn;\n\t\t}\n\t\t(*tag) += (char) c ;\n\t\t\n\t\tif ( c == '>' )\n\t\t\tbreak;\n\t}\n\n\tif ( tag->length() < 3 ) return;\n\n\t// Okay...if we are a \"/>\" tag, then we're done. We've read a complete tag.\n\t// If not, identify and stream.\n\n\tif (    tag->at( tag->length() - 1 ) == '>' \n\t\t && tag->at( tag->length() - 2 ) == '/' )\n\t{\n\t\t// All good!\n\t\treturn;\n\t}\n\telse if ( tag->at( tag->length() - 1 ) == '>' )\n\t{\n\t\t// There is more. Could be:\n\t\t//\t\ttext\n\t\t//\t\tcdata text (which looks like another node)\n\t\t//\t\tclosing tag\n\t\t//\t\tanother node.\n\t\tfor ( ;; )\n\t\t{\n\t\t\tStreamWhiteSpace( in, tag );\n\n\t\t\t// Do we have text?\n\t\t\tif ( in->good() && in->peek() != '<' ) \n\t\t\t{\n\t\t\t\t// Yep, text.\n\t\t\t\tTiXmlText text( \"\" );\n\t\t\t\ttext.StreamIn( in, tag );\n\n\t\t\t\t// What follows text is a closing tag or another node.\n\t\t\t\t// Go around again and figure it out.\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// We now have either a closing tag...or another node.\n\t\t\t// We should be at a \"<\", regardless.\n\t\t\tif ( !in->good() ) return;\n\t\t\tassert( in->peek() == '<' );\n\t\t\tint tagIndex = (int) tag->length();\n\n\t\t\tbool closingTag = false;\n\t\t\tbool firstCharFound = false;\n\n\t\t\tfor( ;; )\n\t\t\t{\n\t\t\t\tif ( !in->good() )\n\t\t\t\t\treturn;\n\n\t\t\t\tint c = in->peek();\n\t\t\t\tif ( c <= 0 )\n\t\t\t\t{\n\t\t\t\t\tTiXmlDocument* document = GetDocument();\n\t\t\t\t\tif ( document )\n\t\t\t\t\t\tdocument->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif ( c == '>' )\n\t\t\t\t\tbreak;\n\n\t\t\t\t*tag += (char) c;\n\t\t\t\tin->get();\n\n\t\t\t\t// Early out if we find the CDATA id.\n\t\t\t\tif ( c == '[' && tag->size() >= 9 )\n\t\t\t\t{\n\t\t\t\t\tsize_t len = tag->size();\n\t\t\t\t\tconst char* start = tag->c_str() + len - 9;\n\t\t\t\t\tif ( strcmp( start, \"<![CDATA[\" ) == 0 ) {\n\t\t\t\t\t\tassert( !closingTag );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( !firstCharFound && c != '<' && !IsWhiteSpace( c ) )\n\t\t\t\t{\n\t\t\t\t\tfirstCharFound = true;\n\t\t\t\t\tif ( c == '/' )\n\t\t\t\t\t\tclosingTag = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If it was a closing tag, then read in the closing '>' to clean up the input stream.\n\t\t\t// If it was not, the streaming will be done by the tag.\n\t\t\tif ( closingTag )\n\t\t\t{\n\t\t\t\tif ( !in->good() )\n\t\t\t\t\treturn;\n\n\t\t\t\tint c = in->get();\n\t\t\t\tif ( c <= 0 )\n\t\t\t\t{\n\t\t\t\t\tTiXmlDocument* document = GetDocument();\n\t\t\t\t\tif ( document )\n\t\t\t\t\t\tdocument->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tassert( c == '>' );\n\t\t\t\t*tag += (char) c;\n\n\t\t\t\t// We are done, once we've found our closing tag.\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// If not a closing tag, id it, and stream.\n\t\t\t\tconst char* tagloc = tag->c_str() + tagIndex;\n\t\t\t\tTiXmlNode* node = Identify( tagloc, TIXML_DEFAULT_ENCODING );\n\t\t\t\tif ( !node )\n\t\t\t\t\treturn;\n\t\t\t\tnode->StreamIn( in, tag );\n\t\t\t\tdelete node;\n\t\t\t\tnode = 0;\n\n\t\t\t\t// No return: go around from the beginning: text, closing tag, or node.\n\t\t\t}\n\t\t}\n\t}\n}\n#endif\n\nconst char* TiXmlElement::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding )\n{\n\tp = SkipWhiteSpace( p, encoding );\n\tTiXmlDocument* document = GetDocument();\n\n\tif ( !p || !*p )\n\t{\n\t\tif ( document ) document->SetError( TIXML_ERROR_PARSING_ELEMENT, 0, 0, encoding );\n\t\treturn 0;\n\t}\n\n\tif ( data )\n\t{\n\t\tdata->Stamp( p, encoding );\n\t\tlocation = data->Cursor();\n\t}\n\n\tif ( *p != '<' )\n\t{\n\t\tif ( document ) document->SetError( TIXML_ERROR_PARSING_ELEMENT, p, data, encoding );\n\t\treturn 0;\n\t}\n\n\tp = SkipWhiteSpace( p+1, encoding );\n\n\t// Read the name.\n\tconst char* pErr = p;\n\n    p = ReadName( p, &value, encoding );\n\tif ( !p || !*p )\n\t{\n\t\tif ( document )\tdocument->SetError( TIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME, pErr, data, encoding );\n\t\treturn 0;\n\t}\n\n    TIXML_STRING endTag (\"</\");\n\tendTag += value;\n\n\t// Check for and read attributes. Also look for an empty\n\t// tag or an end tag.\n\twhile ( p && *p )\n\t{\n\t\tpErr = p;\n\t\tp = SkipWhiteSpace( p, encoding );\n\t\tif ( !p || !*p )\n\t\t{\n\t\t\tif ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, pErr, data, encoding );\n\t\t\treturn 0;\n\t\t}\n\t\tif ( *p == '/' )\n\t\t{\n\t\t\t++p;\n\t\t\t// Empty tag.\n\t\t\tif ( *p  != '>' )\n\t\t\t{\n\t\t\t\tif ( document ) document->SetError( TIXML_ERROR_PARSING_EMPTY, p, data, encoding );\t\t\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\treturn (p+1);\n\t\t}\n\t\telse if ( *p == '>' )\n\t\t{\n\t\t\t// Done with attributes (if there were any.)\n\t\t\t// Read the value -- which can include other\n\t\t\t// elements -- read the end tag, and return.\n\t\t\t++p;\n\t\t\tp = ReadValue( p, data, encoding );\t\t// Note this is an Element method, and will set the error if one happens.\n\t\t\tif ( !p || !*p ) {\n\t\t\t\t// We were looking for the end tag, but found nothing.\n\t\t\t\t// Fix for [ 1663758 ] Failure to report error on bad XML\n\t\t\t\tif ( document ) document->SetError( TIXML_ERROR_READING_END_TAG, p, data, encoding );\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\t// We should find the end tag now\n\t\t\t// note that:\n\t\t\t// </foo > and\n\t\t\t// </foo> \n\t\t\t// are both valid end tags.\n\t\t\tif ( StringEqual( p, endTag.c_str(), false, encoding ) )\n\t\t\t{\n\t\t\t\tp += endTag.length();\n\t\t\t\tp = SkipWhiteSpace( p, encoding );\n\t\t\t\tif ( p && *p && *p == '>' ) {\n\t\t\t\t\t++p;\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t\tif ( document ) document->SetError( TIXML_ERROR_READING_END_TAG, p, data, encoding );\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif ( document ) document->SetError( TIXML_ERROR_READING_END_TAG, p, data, encoding );\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Try to read an attribute:\n\t\t\tTiXmlAttribute* attrib = new TiXmlAttribute();\n\t\t\tif ( !attrib )\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tattrib->SetDocument( document );\n\t\t\tpErr = p;\n\t\t\tp = attrib->Parse( p, data, encoding );\n\n\t\t\tif ( !p || !*p )\n\t\t\t{\n\t\t\t\tif ( document ) document->SetError( TIXML_ERROR_PARSING_ELEMENT, pErr, data, encoding );\n\t\t\t\tdelete attrib;\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\t// Handle the strange case of double attributes:\n\t\t\t#ifdef TIXML_USE_STL\n\t\t\tTiXmlAttribute* node = attributeSet.Find( attrib->NameTStr() );\n\t\t\t#else\n\t\t\tTiXmlAttribute* node = attributeSet.Find( attrib->Name() );\n\t\t\t#endif\n\t\t\tif ( node )\n\t\t\t{\n\t\t\t\tif ( document ) document->SetError( TIXML_ERROR_PARSING_ELEMENT, pErr, data, encoding );\n\t\t\t\tdelete attrib;\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tattributeSet.Add( attrib );\n\t\t}\n\t}\n\treturn p;\n}\n\n\nconst char* TiXmlElement::ReadValue( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding )\n{\n\tTiXmlDocument* document = GetDocument();\n\n\t// Read in text and elements in any order.\n\tconst char* pWithWhiteSpace = p;\n\tp = SkipWhiteSpace( p, encoding );\n\n\twhile ( p && *p )\n\t{\n\t\tif ( *p != '<' )\n\t\t{\n\t\t\t// Take what we have, make a text element.\n\t\t\tTiXmlText* textNode = new TiXmlText( \"\" );\n\n\t\t\tif ( !textNode )\n\t\t\t{\n\t\t\t    return 0;\n\t\t\t}\n\n\t\t\tif ( TiXmlBase::IsWhiteSpaceCondensed() )\n\t\t\t{\n\t\t\t\tp = textNode->Parse( p, data, encoding );\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// Special case: we want to keep the white space\n\t\t\t\t// so that leading spaces aren't removed.\n\t\t\t\tp = textNode->Parse( pWithWhiteSpace, data, encoding );\n\t\t\t}\n\n\t\t\tif ( !textNode->Blank() )\n\t\t\t\tLinkEndChild( textNode );\n\t\t\telse\n\t\t\t\tdelete textNode;\n\t\t} \n\t\telse \n\t\t{\n\t\t\t// We hit a '<'\n\t\t\t// Have we hit a new element or an end tag? This could also be\n\t\t\t// a TiXmlText in the \"CDATA\" style.\n\t\t\tif ( StringEqual( p, \"</\", false, encoding ) )\n\t\t\t{\n\t\t\t\treturn p;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tTiXmlNode* node = Identify( p, encoding );\n\t\t\t\tif ( node )\n\t\t\t\t{\n\t\t\t\t\tp = node->Parse( p, data, encoding );\n\t\t\t\t\tLinkEndChild( node );\n\t\t\t\t}\t\t\t\t\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tpWithWhiteSpace = p;\n\t\tp = SkipWhiteSpace( p, encoding );\n\t}\n\n\tif ( !p )\n\t{\n\t\tif ( document ) document->SetError( TIXML_ERROR_READING_ELEMENT_VALUE, 0, 0, encoding );\n\t}\t\n\treturn p;\n}\n\n\n#ifdef TIXML_USE_STL\nvoid TiXmlUnknown::StreamIn( std::istream * in, TIXML_STRING * tag )\n{\n\twhile ( in->good() )\n\t{\n\t\tint c = in->get();\t\n\t\tif ( c <= 0 )\n\t\t{\n\t\t\tTiXmlDocument* document = GetDocument();\n\t\t\tif ( document )\n\t\t\t\tdocument->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN );\n\t\t\treturn;\n\t\t}\n\t\t(*tag) += (char) c;\n\n\t\tif ( c == '>' )\n\t\t{\n\t\t\t// All is well.\n\t\t\treturn;\t\t\n\t\t}\n\t}\n}\n#endif\n\n\nconst char* TiXmlUnknown::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding )\n{\n\tTiXmlDocument* document = GetDocument();\n\tp = SkipWhiteSpace( p, encoding );\n\n\tif ( data )\n\t{\n\t\tdata->Stamp( p, encoding );\n\t\tlocation = data->Cursor();\n\t}\n\tif ( !p || !*p || *p != '<' )\n\t{\n\t\tif ( document ) document->SetError( TIXML_ERROR_PARSING_UNKNOWN, p, data, encoding );\n\t\treturn 0;\n\t}\n\t++p;\n    value = \"\";\n\n\twhile ( p && *p && *p != '>' )\n\t{\n\t\tvalue += *p;\n\t\t++p;\n\t}\n\n\tif ( !p )\n\t{\n\t\tif ( document )\t\n\t\t\tdocument->SetError( TIXML_ERROR_PARSING_UNKNOWN, 0, 0, encoding );\n\t}\n\tif ( p && *p == '>' )\n\t\treturn p+1;\n\treturn p;\n}\n\n#ifdef TIXML_USE_STL\nvoid TiXmlComment::StreamIn( std::istream * in, TIXML_STRING * tag )\n{\n\twhile ( in->good() )\n\t{\n\t\tint c = in->get();\t\n\t\tif ( c <= 0 )\n\t\t{\n\t\t\tTiXmlDocument* document = GetDocument();\n\t\t\tif ( document )\n\t\t\t\tdocument->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN );\n\t\t\treturn;\n\t\t}\n\n\t\t(*tag) += (char) c;\n\n\t\tif ( c == '>' \n\t\t\t && tag->at( tag->length() - 2 ) == '-'\n\t\t\t && tag->at( tag->length() - 3 ) == '-' )\n\t\t{\n\t\t\t// All is well.\n\t\t\treturn;\t\t\n\t\t}\n\t}\n}\n#endif\n\n\nconst char* TiXmlComment::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding )\n{\n\tTiXmlDocument* document = GetDocument();\n\tvalue = \"\";\n\n\tp = SkipWhiteSpace( p, encoding );\n\n\tif ( data )\n\t{\n\t\tdata->Stamp( p, encoding );\n\t\tlocation = data->Cursor();\n\t}\n\tconst char* startTag = \"<!--\";\n\tconst char* endTag   = \"-->\";\n\n\tif ( !StringEqual( p, startTag, false, encoding ) )\n\t{\n\t\tif ( document )\n\t\t\tdocument->SetError( TIXML_ERROR_PARSING_COMMENT, p, data, encoding );\n\t\treturn 0;\n\t}\n\tp += strlen( startTag );\n\n\t// [ 1475201 ] TinyXML parses entities in comments\n\t// Oops - ReadText doesn't work, because we don't want to parse the entities.\n\t// p = ReadText( p, &value, false, endTag, false, encoding );\n\t//\n\t// from the XML spec:\n\t/*\n\t [Definition: Comments may appear anywhere in a document outside other markup; in addition, \n\t              they may appear within the document type declaration at places allowed by the grammar. \n\t\t\t\t  They are not part of the document's character data; an XML processor MAY, but need not, \n\t\t\t\t  make it possible for an application to retrieve the text of comments. For compatibility, \n\t\t\t\t  the string \"--\" (double-hyphen) MUST NOT occur within comments.] Parameter entity \n\t\t\t\t  references MUST NOT be recognized within comments.\n\n\t\t\t\t  An example of a comment:\n\n\t\t\t\t  <!-- declarations for <head> & <body> -->\n\t*/\n\n    value = \"\";\n\t// Keep all the white space.\n\twhile (\tp && *p && !StringEqual( p, endTag, false, encoding ) )\n\t{\n\t\tvalue.append( p, 1 );\n\t\t++p;\n\t}\n\tif ( p && *p ) \n\t\tp += strlen( endTag );\n\n\treturn p;\n}\n\n\nconst char* TiXmlAttribute::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding )\n{\n\tp = SkipWhiteSpace( p, encoding );\n\tif ( !p || !*p ) return 0;\n\n\tif ( data )\n\t{\n\t\tdata->Stamp( p, encoding );\n\t\tlocation = data->Cursor();\n\t}\n\t// Read the name, the '=' and the value.\n\tconst char* pErr = p;\n\tp = ReadName( p, &name, encoding );\n\tif ( !p || !*p )\n\t{\n\t\tif ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, pErr, data, encoding );\n\t\treturn 0;\n\t}\n\tp = SkipWhiteSpace( p, encoding );\n\tif ( !p || !*p || *p != '=' )\n\t{\n\t\tif ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding );\n\t\treturn 0;\n\t}\n\n\t++p;\t// skip '='\n\tp = SkipWhiteSpace( p, encoding );\n\tif ( !p || !*p )\n\t{\n\t\tif ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding );\n\t\treturn 0;\n\t}\n\t\n\tconst char* end;\n\tconst char SINGLE_QUOTE = '\\'';\n\tconst char DOUBLE_QUOTE = '\\\"';\n\n\tif ( *p == SINGLE_QUOTE )\n\t{\n\t\t++p;\n\t\tend = \"\\'\";\t\t// single quote in string\n\t\tp = ReadText( p, &value, false, end, false, encoding );\n\t}\n\telse if ( *p == DOUBLE_QUOTE )\n\t{\n\t\t++p;\n\t\tend = \"\\\"\";\t\t// double quote in string\n\t\tp = ReadText( p, &value, false, end, false, encoding );\n\t}\n\telse\n\t{\n\t\t// All attribute values should be in single or double quotes.\n\t\t// But this is such a common error that the parser will try\n\t\t// its best, even without them.\n\t\tvalue = \"\";\n\t\twhile (    p && *p\t\t\t\t\t\t\t\t\t\t\t// existence\n\t\t\t\t&& !IsWhiteSpace( *p )\t\t\t\t\t\t\t\t// whitespace\n\t\t\t\t&& *p != '/' && *p != '>' )\t\t\t\t\t\t\t// tag end\n\t\t{\n\t\t\tif ( *p == SINGLE_QUOTE || *p == DOUBLE_QUOTE ) {\n\t\t\t\t// [ 1451649 ] Attribute values with trailing quotes not handled correctly\n\t\t\t\t// We did not have an opening quote but seem to have a \n\t\t\t\t// closing one. Give up and throw an error.\n\t\t\t\tif ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding );\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tvalue += *p;\n\t\t\t++p;\n\t\t}\n\t}\n\treturn p;\n}\n\n#ifdef TIXML_USE_STL\nvoid TiXmlText::StreamIn( std::istream * in, TIXML_STRING * tag )\n{\n\twhile ( in->good() )\n\t{\n\t\tint c = in->peek();\t\n\t\tif ( !cdata && (c == '<' ) ) \n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tif ( c <= 0 )\n\t\t{\n\t\t\tTiXmlDocument* document = GetDocument();\n\t\t\tif ( document )\n\t\t\t\tdocument->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN );\n\t\t\treturn;\n\t\t}\n\n\t\t(*tag) += (char) c;\n\t\tin->get();\t// \"commits\" the peek made above\n\n\t\tif ( cdata && c == '>' && tag->size() >= 3 ) {\n\t\t\tsize_t len = tag->size();\n\t\t\tif ( (*tag)[len-2] == ']' && (*tag)[len-3] == ']' ) {\n\t\t\t\t// terminator of cdata.\n\t\t\t\treturn;\n\t\t\t}\n\t\t}    \n\t}\n}\n#endif\n\nconst char* TiXmlText::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding )\n{\n\tvalue = \"\";\n\tTiXmlDocument* document = GetDocument();\n\n\tif ( data )\n\t{\n\t\tdata->Stamp( p, encoding );\n\t\tlocation = data->Cursor();\n\t}\n\n\tconst char* const startTag = \"<![CDATA[\";\n\tconst char* const endTag   = \"]]>\";\n\n\tif ( cdata || StringEqual( p, startTag, false, encoding ) )\n\t{\n\t\tcdata = true;\n\n\t\tif ( !StringEqual( p, startTag, false, encoding ) )\n\t\t{\n\t\t\tif ( document )\n\t\t\t\tdocument->SetError( TIXML_ERROR_PARSING_CDATA, p, data, encoding );\n\t\t\treturn 0;\n\t\t}\n\t\tp += strlen( startTag );\n\n\t\t// Keep all the white space, ignore the encoding, etc.\n\t\twhile (\t   p && *p\n\t\t\t\t&& !StringEqual( p, endTag, false, encoding )\n\t\t\t  )\n\t\t{\n\t\t\tvalue += *p;\n\t\t\t++p;\n\t\t}\n\n\t\tTIXML_STRING dummy; \n\t\tp = ReadText( p, &dummy, false, endTag, false, encoding );\n\t\treturn p;\n\t}\n\telse\n\t{\n\t\tbool ignoreWhite = true;\n\n\t\tconst char* end = \"<\";\n\t\tp = ReadText( p, &value, ignoreWhite, end, false, encoding );\n\t\tif ( p && *p )\n\t\t\treturn p-1;\t// don't truncate the '<'\n\t\treturn 0;\n\t}\n}\n\n#ifdef TIXML_USE_STL\nvoid TiXmlDeclaration::StreamIn( std::istream * in, TIXML_STRING * tag )\n{\n\twhile ( in->good() )\n\t{\n\t\tint c = in->get();\n\t\tif ( c <= 0 )\n\t\t{\n\t\t\tTiXmlDocument* document = GetDocument();\n\t\t\tif ( document )\n\t\t\t\tdocument->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN );\n\t\t\treturn;\n\t\t}\n\t\t(*tag) += (char) c;\n\n\t\tif ( c == '>' )\n\t\t{\n\t\t\t// All is well.\n\t\t\treturn;\n\t\t}\n\t}\n}\n#endif\n\nconst char* TiXmlDeclaration::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding _encoding )\n{\n\tp = SkipWhiteSpace( p, _encoding );\n\t// Find the beginning, find the end, and look for\n\t// the stuff in-between.\n\tTiXmlDocument* document = GetDocument();\n\tif ( !p || !*p || !StringEqual( p, \"<?xml\", true, _encoding ) )\n\t{\n\t\tif ( document ) document->SetError( TIXML_ERROR_PARSING_DECLARATION, 0, 0, _encoding );\n\t\treturn 0;\n\t}\n\tif ( data )\n\t{\n\t\tdata->Stamp( p, _encoding );\n\t\tlocation = data->Cursor();\n\t}\n\tp += 5;\n\n\tversion = \"\";\n\tencoding = \"\";\n\tstandalone = \"\";\n\n\twhile ( p && *p )\n\t{\n\t\tif ( *p == '>' )\n\t\t{\n\t\t\t++p;\n\t\t\treturn p;\n\t\t}\n\n\t\tp = SkipWhiteSpace( p, _encoding );\n\t\tif ( StringEqual( p, \"version\", true, _encoding ) )\n\t\t{\n\t\t\tTiXmlAttribute attrib;\n\t\t\tp = attrib.Parse( p, data, _encoding );\t\t\n\t\t\tversion = attrib.Value();\n\t\t}\n\t\telse if ( StringEqual( p, \"encoding\", true, _encoding ) )\n\t\t{\n\t\t\tTiXmlAttribute attrib;\n\t\t\tp = attrib.Parse( p, data, _encoding );\t\t\n\t\t\tencoding = attrib.Value();\n\t\t}\n\t\telse if ( StringEqual( p, \"standalone\", true, _encoding ) )\n\t\t{\n\t\t\tTiXmlAttribute attrib;\n\t\t\tp = attrib.Parse( p, data, _encoding );\t\t\n\t\t\tstandalone = attrib.Value();\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Read over whatever it is.\n\t\t\twhile( p && *p && *p != '>' && !IsWhiteSpace( *p ) )\n\t\t\t\t++p;\n\t\t}\n\t}\n\treturn 0;\n}\n\nbool TiXmlText::Blank() const\n{\n\tfor ( unsigned i=0; i<value.length(); i++ )\n\t\tif ( !IsWhiteSpace( value[i] ) )\n\t\t\treturn false;\n\treturn true;\n}\n\n"
  },
  {
    "path": "external/tinyxml/utf8test.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document>\n    <English name=\"name\" value=\"value\">The world has many languages</English>\n    <Russian name=\"название(имя)\" value=\"ценность\">Мир имеет много языков</Russian>\n    <Spanish name=\"el nombre\" value=\"el valor\">el mundo tiene muchos idiomas</Spanish>\n    <SimplifiedChinese name=\"名字\" value=\"价值\">世界有很多语言</SimplifiedChinese>\n    <Русский название=\"name\" ценность=\"value\">&lt;имеет&gt;</Русский>\n    <汉语 名字=\"name\" 价值=\"value\">世界有很多语言</汉语>\n    <Heavy>\"M&#x0eB;t&#230;l!\"</Heavy>\n    <ä>Umlaut Element</ä>\n</document>\n"
  },
  {
    "path": "external/tinyxml/utf8testverify.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<document>\n    <English name=\"name\" value=\"value\">The world has many languages</English>\n    <Russian name=\"название(имя)\" value=\"ценность\">Мир имеет много языков</Russian>\n    <Spanish name=\"el nombre\" value=\"el valor\">el mundo tiene muchos idiomas</Spanish>\n    <SimplifiedChinese name=\"名字\" value=\"价值\">世界有很多语言</SimplifiedChinese>\n    <Русский название=\"name\" ценность=\"value\">&lt;имеет&gt;</Русский>\n    <汉语 名字=\"name\" 价值=\"value\">世界有很多语言</汉语>\n    <Heavy>&quot;Mëtæl!&quot;</Heavy>\n    <ä>Umlaut Element</ä>\n</document>\n"
  },
  {
    "path": "external/tinyxml/xmltest.cpp",
    "content": "/*\n   Test program for TinyXML.\n*/\n\n\n#ifdef TIXML_USE_STL\n\t#include <iostream>\n\t#include <sstream>\n\tusing namespace std;\n#else\n\t#include <stdio.h>\n#endif\n\n#if defined( WIN32 ) && defined( TUNE )\n\t#include <crtdbg.h>\n\t_CrtMemState startMemState;\n\t_CrtMemState endMemState;\n#endif\n\n#include \"tinyxml.h\"\n\nbool XmlTest (const char* testString, const char* expected, const char* found, bool noEcho = false);\nbool XmlTest( const char* testString, int expected, int found, bool noEcho = false );\n\nstatic int gPass = 0;\nstatic int gFail = 0;\n\n\n\nbool XmlTest (const char* testString, const char* expected, const char* found, bool noEcho )\n{\n\tbool pass = !strcmp( expected, found );\n\tif ( pass )\n\t\tprintf (\"[pass]\");\n\telse\n\t\tprintf (\"[fail]\");\n\n\tif ( noEcho )\n\t\tprintf (\" %s\\n\", testString);\n\telse\n\t\tprintf (\" %s [%s][%s]\\n\", testString, expected, found);\n\n\tif ( pass )\n\t\t++gPass;\n\telse\n\t\t++gFail;\n\treturn pass;\n}\n\n\nbool XmlTest( const char* testString, int expected, int found, bool noEcho )\n{\n\tbool pass = ( expected == found );\n\tif ( pass )\n\t\tprintf (\"[pass]\");\n\telse\n\t\tprintf (\"[fail]\");\n\n\tif ( noEcho )\n\t\tprintf (\" %s\\n\", testString);\n\telse\n\t\tprintf (\" %s [%d][%d]\\n\", testString, expected, found);\n\n\tif ( pass )\n\t\t++gPass;\n\telse\n\t\t++gFail;\n\treturn pass;\n}\n\n\nvoid NullLineEndings( char* p )\n{\n\twhile( p && *p ) {\n\t\tif ( *p == '\\n' || *p == '\\r' ) {\n\t\t\t*p = 0;\n\t\t\treturn;\n\t\t}\n\t\t++p;\n\t}\n}\n\n//\n// This file demonstrates some basic functionality of TinyXml.\n// Note that the example is very contrived. It presumes you know\n// what is in the XML file. But it does test the basic operations,\n// and show how to add and remove nodes.\n//\n\nint main()\n{\n\n\t//\n\t// We start with the 'demoStart' todo list. Process it. And\n\t// should hopefully end up with the todo list as illustrated.\n\t//\n\tconst char* demoStart =\n\t\t\"<?xml version=\\\"1.0\\\"  standalone='no' >\\n\"\n\t\t\"<!-- Our to do list data -->\"\n\t\t\"<ToDo>\\n\"\n\t\t\"<!-- Do I need a secure PDA? -->\\n\"\n\t\t\"<Item priority=\\\"1\\\" distance='close'> Go to the <bold>Toy store!</bold></Item>\"\n\t\t\"<Item priority=\\\"2\\\" distance='none'> Do bills   </Item>\"\n\t\t\"<Item priority=\\\"2\\\" distance='far &amp; back'> Look for Evil Dinosaurs! </Item>\"\n\t\t\"</ToDo>\";\n\t\t\n\t{\n\n\t#ifdef TIXML_USE_STL\n\t\t//\tWhat the todo list should look like after processing.\n\t\t// In stream (no formatting) representation.\n\t\tconst char* demoEnd =\n\t\t\t\"<?xml version=\\\"1.0\\\" standalone=\\\"no\\\" ?>\"\n\t\t\t\"<!-- Our to do list data -->\"\n\t\t\t\"<ToDo>\"\n\t\t\t\"<!-- Do I need a secure PDA? -->\"\n\t\t\t\"<Item priority=\\\"2\\\" distance=\\\"close\\\">Go to the\"\n\t\t\t\"<bold>Toy store!\"\n\t\t\t\"</bold>\"\n\t\t\t\"</Item>\"\n\t\t\t\"<Item priority=\\\"1\\\" distance=\\\"far\\\">Talk to:\"\n\t\t\t\"<Meeting where=\\\"School\\\">\"\n\t\t\t\"<Attendee name=\\\"Marple\\\" position=\\\"teacher\\\" />\"\n\t\t\t\"<Attendee name=\\\"Voel\\\" position=\\\"counselor\\\" />\"\n\t\t\t\"</Meeting>\"\n\t\t\t\"<Meeting where=\\\"Lunch\\\" />\"\n\t\t\t\"</Item>\"\n\t\t\t\"<Item priority=\\\"2\\\" distance=\\\"here\\\">Do bills\"\n\t\t\t\"</Item>\"\n\t\t\t\"</ToDo>\";\n\t#endif\n\n\t\t// The example parses from the character string (above):\n\t\t#if defined( WIN32 ) && defined( TUNE )\n\t\t_CrtMemCheckpoint( &startMemState );\n\t\t#endif\t\n\n\t\t{\n\t\t\t// Write to a file and read it back, to check file I/O.\n\n\t\t\tTiXmlDocument doc( \"demotest.xml\" );\n\t\t\tdoc.Parse( demoStart );\n\n\t\t\tif ( doc.Error() )\n\t\t\t{\n\t\t\t\tprintf( \"Error in %s: %s\\n\", doc.Value(), doc.ErrorDesc() );\n\t\t\t\texit( 1 );\n\t\t\t}\n\t\t\tdoc.SaveFile();\n\t\t}\n\n\t\tTiXmlDocument doc( \"demotest.xml\" );\n\t\tbool loadOkay = doc.LoadFile();\n\n\t\tif ( !loadOkay )\n\t\t{\n\t\t\tprintf( \"Could not load test file 'demotest.xml'. Error='%s'. Exiting.\\n\", doc.ErrorDesc() );\n\t\t\texit( 1 );\n\t\t}\n\n\t\tprintf( \"** Demo doc read from disk: ** \\n\\n\" );\n\t\tprintf( \"** Printing via doc.Print **\\n\" );\n\t\tdoc.Print( stdout );\n\n\t\t{\n\t\t\tprintf( \"** Printing via TiXmlPrinter **\\n\" );\n\t\t\tTiXmlPrinter printer;\n\t\t\tdoc.Accept( &printer );\n\t\t\tfprintf( stdout, \"%s\", printer.CStr() );\n\t\t}\n\t\t#ifdef TIXML_USE_STL\t\n\t\t{\n\t\t\tprintf( \"** Printing via operator<< **\\n\" );\n\t\t\tstd::cout << doc;\n\t\t}\n\t\t#endif\n\t\tTiXmlNode* node = 0;\n\t\tTiXmlElement* todoElement = 0;\n\t\tTiXmlElement* itemElement = 0;\n\n\n\t\t// --------------------------------------------------------\n\t\t// An example of changing existing attributes, and removing\n\t\t// an element from the document.\n\t\t// --------------------------------------------------------\n\n\t\t// Get the \"ToDo\" element.\n\t\t// It is a child of the document, and can be selected by name.\n\t\tnode = doc.FirstChild( \"ToDo\" );\n\t\tassert( node );\n\t\ttodoElement = node->ToElement();\n\t\tassert( todoElement  );\n\n\t\t// Going to the toy store is now our second priority...\n\t\t// So set the \"priority\" attribute of the first item in the list.\n\t\tnode = todoElement->FirstChildElement();\t// This skips the \"PDA\" comment.\n\t\tassert( node );\n\t\titemElement = node->ToElement();\n\t\tassert( itemElement  );\n\t\titemElement->SetAttribute( \"priority\", 2 );\n\n\t\t// Change the distance to \"doing bills\" from\n\t\t// \"none\" to \"here\". It's the next sibling element.\n\t\titemElement = itemElement->NextSiblingElement();\n\t\tassert( itemElement );\n\t\titemElement->SetAttribute( \"distance\", \"here\" );\n\n\t\t// Remove the \"Look for Evil Dinosaurs!\" item.\n\t\t// It is 1 more sibling away. We ask the parent to remove\n\t\t// a particular child.\n\t\titemElement = itemElement->NextSiblingElement();\n\t\ttodoElement->RemoveChild( itemElement );\n\n\t\titemElement = 0;\n\n\t\t// --------------------------------------------------------\n\t\t// What follows is an example of created elements and text\n\t\t// nodes and adding them to the document.\n\t\t// --------------------------------------------------------\n\n\t\t// Add some meetings.\n\t\tTiXmlElement item( \"Item\" );\n\t\titem.SetAttribute( \"priority\", \"1\" );\n\t\titem.SetAttribute( \"distance\", \"far\" );\n\n\t\tTiXmlText text( \"Talk to:\" );\n\n\t\tTiXmlElement meeting1( \"Meeting\" );\n\t\tmeeting1.SetAttribute( \"where\", \"School\" );\n\n\t\tTiXmlElement meeting2( \"Meeting\" );\n\t\tmeeting2.SetAttribute( \"where\", \"Lunch\" );\n\n\t\tTiXmlElement attendee1( \"Attendee\" );\n\t\tattendee1.SetAttribute( \"name\", \"Marple\" );\n\t\tattendee1.SetAttribute( \"position\", \"teacher\" );\n\n\t\tTiXmlElement attendee2( \"Attendee\" );\n\t\tattendee2.SetAttribute( \"name\", \"Voel\" );\n\t\tattendee2.SetAttribute( \"position\", \"counselor\" );\n\n\t\t// Assemble the nodes we've created:\n\t\tmeeting1.InsertEndChild( attendee1 );\n\t\tmeeting1.InsertEndChild( attendee2 );\n\n\t\titem.InsertEndChild( text );\n\t\titem.InsertEndChild( meeting1 );\n\t\titem.InsertEndChild( meeting2 );\n\n\t\t// And add the node to the existing list after the first child.\n\t\tnode = todoElement->FirstChild( \"Item\" );\n\t\tassert( node );\n\t\titemElement = node->ToElement();\n\t\tassert( itemElement );\n\n\t\ttodoElement->InsertAfterChild( itemElement, item );\n\n\t\tprintf( \"\\n** Demo doc processed: ** \\n\\n\" );\n\t\tdoc.Print( stdout );\n\n\n\t#ifdef TIXML_USE_STL\n\t\tprintf( \"** Demo doc processed to stream: ** \\n\\n\" );\n\t\tcout << doc << endl << endl;\n\t#endif\n\n\t\t// --------------------------------------------------------\n\t\t// Different tests...do we have what we expect?\n\t\t// --------------------------------------------------------\n\n\t\tint count = 0;\n\t\tTiXmlElement*\telement;\n\n\t\t//////////////////////////////////////////////////////\n\n\t#ifdef TIXML_USE_STL\n\t\tcout << \"** Basic structure. **\\n\";\n\t\tostringstream outputStream( ostringstream::out );\n\t\toutputStream << doc;\n\t\tXmlTest( \"Output stream correct.\",\tstring( demoEnd ).c_str(),\n\t\t\t\t\t\t\t\t\t\t\toutputStream.str().c_str(), true );\n\t#endif\n\n\t\tnode = doc.RootElement();\n\t\tassert( node );\n\t\tXmlTest( \"Root element exists.\", true, ( node != 0 && node->ToElement() ) );\n\t\tXmlTest ( \"Root element value is 'ToDo'.\", \"ToDo\",  node->Value());\n\n\t\tnode = node->FirstChild();\n\t\tXmlTest( \"First child exists & is a comment.\", true, ( node != 0 && node->ToComment() ) );\n\t\tnode = node->NextSibling();\n\t\tXmlTest( \"Sibling element exists & is an element.\", true, ( node != 0 && node->ToElement() ) );\n\t\tXmlTest ( \"Value is 'Item'.\", \"Item\", node->Value() );\n\n\t\tnode = node->FirstChild();\n\t\tXmlTest ( \"First child exists.\", true, ( node != 0 && node->ToText() ) );\n\t\tXmlTest ( \"Value is 'Go to the'.\", \"Go to the\", node->Value() );\n\n\n\t\t//////////////////////////////////////////////////////\n\t\tprintf (\"\\n** Iterators. **\\n\");\n\n\t\t// Walk all the top level nodes of the document.\n\t\tcount = 0;\n\t\tfor( node = doc.FirstChild();\n\t\t\t node;\n\t\t\t node = node->NextSibling() )\n\t\t{\n\t\t\tcount++;\n\t\t}\n\t\tXmlTest( \"Top level nodes, using First / Next.\", 3, count );\n\n\t\tcount = 0;\n\t\tfor( node = doc.LastChild();\n\t\t\t node;\n\t\t\t node = node->PreviousSibling() )\n\t\t{\n\t\t\tcount++;\n\t\t}\n\t\tXmlTest( \"Top level nodes, using Last / Previous.\", 3, count );\n\n\t\t// Walk all the top level nodes of the document,\n\t\t// using a different syntax.\n\t\tcount = 0;\n\t\tfor( node = doc.IterateChildren( 0 );\n\t\t\t node;\n\t\t\t node = doc.IterateChildren( node ) )\n\t\t{\n\t\t\tcount++;\n\t\t}\n\t\tXmlTest( \"Top level nodes, using IterateChildren.\", 3, count );\n\n\t\t// Walk all the elements in a node.\n\t\tcount = 0;\n\t\tfor( element = todoElement->FirstChildElement();\n\t\t\t element;\n\t\t\t element = element->NextSiblingElement() )\n\t\t{\n\t\t\tcount++;\n\t\t}\n\t\tXmlTest( \"Children of the 'ToDo' element, using First / Next.\",\n\t\t\t3, count );\n\n\t\t// Walk all the elements in a node by value.\n\t\tcount = 0;\n\t\tfor( node = todoElement->FirstChild( \"Item\" );\n\t\t\t node;\n\t\t\t node = node->NextSibling( \"Item\" ) )\n\t\t{\n\t\t\tcount++;\n\t\t}\n\t\tXmlTest( \"'Item' children of the 'ToDo' element, using First/Next.\", 3, count );\n\n\t\tcount = 0;\n\t\tfor( node = todoElement->LastChild( \"Item\" );\n\t\t\t node;\n\t\t\t node = node->PreviousSibling( \"Item\" ) )\n\t\t{\n\t\t\tcount++;\n\t\t}\n\t\tXmlTest( \"'Item' children of the 'ToDo' element, using Last/Previous.\", 3, count );\n\n\t#ifdef TIXML_USE_STL\n\t\t{\n\t\t\tcout << \"\\n** Parsing. **\\n\";\n\t\t\tistringstream parse0( \"<Element0 attribute0='foo0' attribute1= noquotes attribute2 = '&gt;' />\" );\n\t\t\tTiXmlElement element0( \"default\" );\n\t\t\tparse0 >> element0;\n\n\t\t\tXmlTest ( \"Element parsed, value is 'Element0'.\", \"Element0\", element0.Value() );\n\t\t\tXmlTest ( \"Reads attribute 'attribute0=\\\"foo0\\\"'.\", \"foo0\", element0.Attribute( \"attribute0\" ));\n\t\t\tXmlTest ( \"Reads incorrectly formatted 'attribute1=noquotes'.\", \"noquotes\", element0.Attribute( \"attribute1\" ) );\n\t\t\tXmlTest ( \"Read attribute with entity value '>'.\", \">\", element0.Attribute( \"attribute2\" ) );\n\t\t}\n\t#endif\n\n\t\t{\n\t\t\tconst char* error =\t\"<?xml version=\\\"1.0\\\" standalone=\\\"no\\\" ?>\\n\"\n\t\t\t\t\t\t\t\t\"<passages count=\\\"006\\\" formatversion=\\\"20020620\\\">\\n\"\n\t\t\t\t\t\t\t\t\"    <wrong error>\\n\"\n\t\t\t\t\t\t\t\t\"</passages>\";\n\n\t\t\tTiXmlDocument docTest;\n\t\t\tdocTest.Parse( error );\n\t\t\tXmlTest( \"Error row\", docTest.ErrorRow(), 3 );\n\t\t\tXmlTest( \"Error column\", docTest.ErrorCol(), 17 );\n\t\t\t//printf( \"error=%d id='%s' row %d col%d\\n\", (int) doc.Error(), doc.ErrorDesc(), doc.ErrorRow()+1, doc.ErrorCol() + 1 );\n\n\t\t}\n\n\t#ifdef TIXML_USE_STL\n\t\t{\n\t\t\t//////////////////////////////////////////////////////\n\t\t\tcout << \"\\n** Streaming. **\\n\";\n\n\t\t\t// Round trip check: stream in, then stream back out to verify. The stream\n\t\t\t// out has already been checked, above. We use the output\n\n\t\t\tistringstream inputStringStream( outputStream.str() );\n\t\t\tTiXmlDocument document0;\n\n\t\t\tinputStringStream >> document0;\n\n\t\t\tostringstream outputStream0( ostringstream::out );\n\t\t\toutputStream0 << document0;\n\n\t\t\tXmlTest( \"Stream round trip correct.\",\tstring( demoEnd ).c_str(), \n\t\t\t\t\t\t\t\t\t\t\t\t\toutputStream0.str().c_str(), true );\n\n\t\t\tstd::string str;\n\t\t\tstr << document0;\n\n\t\t\tXmlTest( \"String printing correct.\", string( demoEnd ).c_str(), \n\t\t\t\t\t\t\t\t\t\t\t\t str.c_str(), true );\n\t\t}\n\t#endif\n\t}\n\n\t{\n\t\tconst char* str = \"<doc attr0='1' attr1='2.0' attr2='foo' />\";\n\n\t\tTiXmlDocument doc;\n\t\tdoc.Parse( str );\n\n\t\tTiXmlElement* ele = doc.FirstChildElement();\n\n\t\tint iVal, result;\n\t\tdouble dVal;\n\n\t\tresult = ele->QueryDoubleAttribute( \"attr0\", &dVal );\n\t\tXmlTest( \"Query attribute: int as double\", result, TIXML_SUCCESS );\n\t\tXmlTest( \"Query attribute: int as double\", (int)dVal, 1 );\n\t\tresult = ele->QueryDoubleAttribute( \"attr1\", &dVal );\n\t\tXmlTest( \"Query attribute: double as double\", (int)dVal, 2 );\n\t\tresult = ele->QueryIntAttribute( \"attr1\", &iVal );\n\t\tXmlTest( \"Query attribute: double as int\", result, TIXML_SUCCESS );\n\t\tXmlTest( \"Query attribute: double as int\", iVal, 2 );\n\t\tresult = ele->QueryIntAttribute( \"attr2\", &iVal );\n\t\tXmlTest( \"Query attribute: not a number\", result, TIXML_WRONG_TYPE );\n\t\tresult = ele->QueryIntAttribute( \"bar\", &iVal );\n\t\tXmlTest( \"Query attribute: does not exist\", result, TIXML_NO_ATTRIBUTE );\n\t}\n\n\t{\n\t\tconst char* str = \"<doc/>\";\n\n\t\tTiXmlDocument doc;\n\t\tdoc.Parse( str );\n\n\t\tTiXmlElement* ele = doc.FirstChildElement();\n\n\t\tint iVal;\n\t\tdouble dVal;\n\n\t\tele->SetAttribute( \"str\", \"strValue\" );\n\t\tele->SetAttribute( \"int\", 1 );\n\t\tele->SetDoubleAttribute( \"double\", -1.0 );\n\n\t\tconst char* cStr = ele->Attribute( \"str\" );\n\t\tele->QueryIntAttribute( \"int\", &iVal );\n\t\tele->QueryDoubleAttribute( \"double\", &dVal );\n\n\t\tXmlTest( \"Attribute round trip. c-string.\", \"strValue\", cStr );\n\t\tXmlTest( \"Attribute round trip. int.\", 1, iVal );\n\t\tXmlTest( \"Attribute round trip. double.\", -1, (int)dVal );\n\t}\n\t\n\t{\n\t\tconst char* str =\t\"\\t<?xml version=\\\"1.0\\\" standalone=\\\"no\\\" ?>\\t<room doors='2'>\\n\"\n\t\t\t\t\t\t\t\"</room>\";\n\n\t\tTiXmlDocument doc;\n\t\tdoc.SetTabSize( 8 );\n\t\tdoc.Parse( str );\n\n\t\tTiXmlHandle docHandle( &doc );\n\t\tTiXmlHandle roomHandle = docHandle.FirstChildElement( \"room\" );\n\n\t\tassert( docHandle.Node() );\n\t\tassert( roomHandle.Element() );\n\n\t\tTiXmlElement* room = roomHandle.Element();\n\t\tassert( room );\n\t\tTiXmlAttribute* doors = room->FirstAttribute();\n\t\tassert( doors );\n\n\t\tXmlTest( \"Location tracking: Tab 8: room row\", room->Row(), 1 );\n\t\tXmlTest( \"Location tracking: Tab 8: room col\", room->Column(), 49 );\n\t\tXmlTest( \"Location tracking: Tab 8: doors row\", doors->Row(), 1 );\n\t\tXmlTest( \"Location tracking: Tab 8: doors col\", doors->Column(), 55 );\n\t}\n\t\n\t{\n\t\tconst char* str =\t\"\\t<?xml version=\\\"1.0\\\" standalone=\\\"no\\\" ?>\\t<room doors='2'>\\n\"\n\t\t\t\t\t\t\t\"  <!-- Silly example -->\\n\"\n\t\t\t\t\t\t\t\"    <door wall='north'>A great door!</door>\\n\"\n\t\t\t\t\t\t\t\"\\t<door wall='east'/>\"\n\t\t\t\t\t\t\t\"</room>\";\n\n\t\tTiXmlDocument doc;\n\t\tdoc.Parse( str );\n\n\t\tTiXmlHandle docHandle( &doc );\n\t\tTiXmlHandle roomHandle = docHandle.FirstChildElement( \"room\" );\n\t\tTiXmlHandle commentHandle = docHandle.FirstChildElement( \"room\" ).FirstChild();\n\t\tTiXmlHandle textHandle = docHandle.FirstChildElement( \"room\" ).ChildElement( \"door\", 0 ).FirstChild();\n\t\tTiXmlHandle door0Handle = docHandle.FirstChildElement( \"room\" ).ChildElement( 0 );\n\t\tTiXmlHandle door1Handle = docHandle.FirstChildElement( \"room\" ).ChildElement( 1 );\n\n\t\tassert( docHandle.Node() );\n\t\tassert( roomHandle.Element() );\n\t\tassert( commentHandle.Node() );\n\t\tassert( textHandle.Text() );\n\t\tassert( door0Handle.Element() );\n\t\tassert( door1Handle.Element() );\n\n\t\tTiXmlDeclaration* declaration = doc.FirstChild()->ToDeclaration();\n\t\tassert( declaration );\n\t\tTiXmlElement* room = roomHandle.Element();\n\t\tassert( room );\n\t\tTiXmlAttribute* doors = room->FirstAttribute();\n\t\tassert( doors );\n\t\tTiXmlText* text = textHandle.Text();\n\t\tTiXmlComment* comment = commentHandle.Node()->ToComment();\n\t\tassert( comment );\n\t\tTiXmlElement* door0 = door0Handle.Element();\n\t\tTiXmlElement* door1 = door1Handle.Element();\n\n\t\tXmlTest( \"Location tracking: Declaration row\", declaration->Row(), 1 );\n\t\tXmlTest( \"Location tracking: Declaration col\", declaration->Column(), 5 );\n\t\tXmlTest( \"Location tracking: room row\", room->Row(), 1 );\n\t\tXmlTest( \"Location tracking: room col\", room->Column(), 45 );\n\t\tXmlTest( \"Location tracking: doors row\", doors->Row(), 1 );\n\t\tXmlTest( \"Location tracking: doors col\", doors->Column(), 51 );\n\t\tXmlTest( \"Location tracking: Comment row\", comment->Row(), 2 );\n\t\tXmlTest( \"Location tracking: Comment col\", comment->Column(), 3 );\n\t\tXmlTest( \"Location tracking: text row\", text->Row(), 3 ); \n\t\tXmlTest( \"Location tracking: text col\", text->Column(), 24 );\n\t\tXmlTest( \"Location tracking: door0 row\", door0->Row(), 3 );\n\t\tXmlTest( \"Location tracking: door0 col\", door0->Column(), 5 );\n\t\tXmlTest( \"Location tracking: door1 row\", door1->Row(), 4 );\n\t\tXmlTest( \"Location tracking: door1 col\", door1->Column(), 5 );\n\t}\n\n\n\t// --------------------------------------------------------\n\t// UTF-8 testing. It is important to test:\n\t//\t1. Making sure name, value, and text read correctly\n\t//\t2. Row, Col functionality\n\t//\t3. Correct output\n\t// --------------------------------------------------------\n\tprintf (\"\\n** UTF-8 **\\n\");\n\t{\n\t\tTiXmlDocument doc( \"utf8test.xml\" );\n\t\tdoc.LoadFile();\n\t\tif ( doc.Error() && doc.ErrorId() == TiXmlBase::TIXML_ERROR_OPENING_FILE ) {\n\t\t\tprintf( \"WARNING: File 'utf8test.xml' not found.\\n\"\n\t\t\t\t\t\"(Are you running the test from the wrong directory?)\\n\"\n\t\t\t\t    \"Could not test UTF-8 functionality.\\n\" );\n\t\t}\n\t\telse\n\t\t{\n\t\t\tTiXmlHandle docH( &doc );\n\t\t\t// Get the attribute \"value\" from the \"Russian\" element and check it.\n\t\t\tTiXmlElement* element = docH.FirstChildElement( \"document\" ).FirstChildElement( \"Russian\" ).Element();\n\t\t\tconst unsigned char correctValue[] = {\t0xd1U, 0x86U, 0xd0U, 0xb5U, 0xd0U, 0xbdU, 0xd0U, 0xbdU, \n\t\t\t\t\t\t\t\t\t\t\t\t\t0xd0U, 0xbeU, 0xd1U, 0x81U, 0xd1U, 0x82U, 0xd1U, 0x8cU, 0 };\n\n\t\t\tXmlTest( \"UTF-8: Russian value.\", (const char*)correctValue, element->Attribute( \"value\" ), true );\n\t\t\tXmlTest( \"UTF-8: Russian value row.\", 4, element->Row() );\n\t\t\tXmlTest( \"UTF-8: Russian value column.\", 5, element->Column() );\n\n\t\t\tconst unsigned char russianElementName[] = {\t0xd0U, 0xa0U, 0xd1U, 0x83U,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t0xd1U, 0x81U, 0xd1U, 0x81U,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t0xd0U, 0xbaU, 0xd0U, 0xb8U,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t0xd0U, 0xb9U, 0 };\n\t\t\tconst char russianText[] = \"<\\xD0\\xB8\\xD0\\xBC\\xD0\\xB5\\xD0\\xB5\\xD1\\x82>\";\n\n\t\t\tTiXmlText* text = docH.FirstChildElement( \"document\" ).FirstChildElement( (const char*) russianElementName ).Child( 0 ).Text();\n\t\t\tXmlTest( \"UTF-8: Browsing russian element name.\",\n\t\t\t\t\t russianText,\n\t\t\t\t\t text->Value(),\n\t\t\t\t\t true );\n\t\t\tXmlTest( \"UTF-8: Russian element name row.\", 7, text->Row() );\n\t\t\tXmlTest( \"UTF-8: Russian element name column.\", 47, text->Column() );\n\n\t\t\tTiXmlDeclaration* dec = docH.Child( 0 ).Node()->ToDeclaration();\n\t\t\tXmlTest( \"UTF-8: Declaration column.\", 1, dec->Column() );\n\t\t\tXmlTest( \"UTF-8: Document column.\", 1, doc.Column() );\n\n\t\t\t// Now try for a round trip.\n\t\t\tdoc.SaveFile( \"utf8testout.xml\" );\n\n\t\t\t// Check the round trip.\n\t\t\tchar savedBuf[256];\n\t\t\tchar verifyBuf[256];\n\t\t\tint okay = 1;\n\n\t\t\tFILE* saved  = fopen( \"utf8testout.xml\", \"r\" );\n\t\t\tFILE* verify = fopen( \"utf8testverify.xml\", \"r\" );\n\n\t\t\t//bool firstLineBOM=true;\n\t\t\tif ( saved && verify )\n\t\t\t{\n\t\t\t\twhile ( fgets( verifyBuf, 256, verify ) )\n\t\t\t\t{\n\t\t\t\t\tfgets( savedBuf, 256, saved );\n\t\t\t\t\tNullLineEndings( verifyBuf );\n\t\t\t\t\tNullLineEndings( savedBuf );\n\n\t\t\t\t\tif ( /*!firstLineBOM && */ strcmp( verifyBuf, savedBuf ) )\n\t\t\t\t\t{\n\t\t\t\t\t\tprintf( \"verify:%s<\\n\", verifyBuf );\n\t\t\t\t\t\tprintf( \"saved :%s<\\n\", savedBuf );\n\t\t\t\t\t\tokay = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t//firstLineBOM = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( saved )\n\t\t\t\tfclose( saved );\n\t\t\tif ( verify )\n\t\t\t\tfclose( verify );\n\t\t\tXmlTest( \"UTF-8: Verified multi-language round trip.\", 1, okay );\n\n\t\t\t// On most Western machines, this is an element that contains\n\t\t\t// the word \"resume\" with the correct accents, in a latin encoding.\n\t\t\t// It will be something else completely on non-wester machines,\n\t\t\t// which is why TinyXml is switching to UTF-8.\n\t\t\tconst char latin[] = \"<element>r\\x82sum\\x82</element>\";\n\n\t\t\tTiXmlDocument latinDoc;\n\t\t\tlatinDoc.Parse( latin, 0, TIXML_ENCODING_LEGACY );\n\n\t\t\ttext = latinDoc.FirstChildElement()->FirstChild()->ToText();\n\t\t\tXmlTest( \"Legacy encoding: Verify text element.\", \"r\\x82sum\\x82\", text->Value() );\n\t\t}\n\t}\t\t\n\n\t//////////////////////\n\t// Copy and assignment\n\t//////////////////////\n\tprintf (\"\\n** Copy and Assignment **\\n\");\n\t{\n\t\tTiXmlElement element( \"foo\" );\n\t\telement.Parse( \"<element name='value' />\", 0, TIXML_ENCODING_UNKNOWN );\n\n\t\tTiXmlElement elementCopy( element );\n\t\tTiXmlElement elementAssign( \"foo\" );\n\t\telementAssign.Parse( \"<incorrect foo='bar'/>\", 0, TIXML_ENCODING_UNKNOWN );\n\t\telementAssign = element;\n\n\t\tXmlTest( \"Copy/Assign: element copy #1.\", \"element\", elementCopy.Value() );\n\t\tXmlTest( \"Copy/Assign: element copy #2.\", \"value\", elementCopy.Attribute( \"name\" ) );\n\t\tXmlTest( \"Copy/Assign: element assign #1.\", \"element\", elementAssign.Value() );\n\t\tXmlTest( \"Copy/Assign: element assign #2.\", \"value\", elementAssign.Attribute( \"name\" ) );\n\t\tXmlTest( \"Copy/Assign: element assign #3.\", true, ( 0 == elementAssign.Attribute( \"foo\" )) );\n\n\t\tTiXmlComment comment;\n\t\tcomment.Parse( \"<!--comment-->\", 0, TIXML_ENCODING_UNKNOWN );\n\t\tTiXmlComment commentCopy( comment );\n\t\tTiXmlComment commentAssign;\n\t\tcommentAssign = commentCopy;\n\t\tXmlTest( \"Copy/Assign: comment copy.\", \"comment\", commentCopy.Value() );\n\t\tXmlTest( \"Copy/Assign: comment assign.\", \"comment\", commentAssign.Value() );\n\n\t\tTiXmlUnknown unknown;\n\t\tunknown.Parse( \"<[unknown]>\", 0, TIXML_ENCODING_UNKNOWN );\n\t\tTiXmlUnknown unknownCopy( unknown );\n\t\tTiXmlUnknown unknownAssign;\n\t\tunknownAssign.Parse( \"incorrect\", 0, TIXML_ENCODING_UNKNOWN );\n\t\tunknownAssign = unknownCopy;\n\t\tXmlTest( \"Copy/Assign: unknown copy.\", \"[unknown]\", unknownCopy.Value() );\n\t\tXmlTest( \"Copy/Assign: unknown assign.\", \"[unknown]\", unknownAssign.Value() );\n\t\t\n\t\tTiXmlText text( \"TextNode\" );\n\t\tTiXmlText textCopy( text );\n\t\tTiXmlText textAssign( \"incorrect\" );\n\t\ttextAssign = text;\n\t\tXmlTest( \"Copy/Assign: text copy.\", \"TextNode\", textCopy.Value() );\n\t\tXmlTest( \"Copy/Assign: text assign.\", \"TextNode\", textAssign.Value() );\n\n\t\tTiXmlDeclaration dec;\n\t\tdec.Parse( \"<?xml version='1.0' encoding='UTF-8'?>\", 0, TIXML_ENCODING_UNKNOWN );\n\t\tTiXmlDeclaration decCopy( dec );\n\t\tTiXmlDeclaration decAssign;\n\t\tdecAssign = dec;\n\n\t\tXmlTest( \"Copy/Assign: declaration copy.\", \"UTF-8\", decCopy.Encoding() );\n\t\tXmlTest( \"Copy/Assign: text assign.\", \"UTF-8\", decAssign.Encoding() );\n\n\t\tTiXmlDocument doc;\n\t\telementCopy.InsertEndChild( textCopy );\n\t\tdoc.InsertEndChild( decAssign );\n\t\tdoc.InsertEndChild( elementCopy );\n\t\tdoc.InsertEndChild( unknownAssign );\n\n\t\tTiXmlDocument docCopy( doc );\n\t\tTiXmlDocument docAssign;\n\t\tdocAssign = docCopy;\n\n\t\t#ifdef TIXML_USE_STL\n\t\tstd::string original, copy, assign;\n\t\toriginal << doc;\n\t\tcopy << docCopy;\n\t\tassign << docAssign;\n\t\tXmlTest( \"Copy/Assign: document copy.\", original.c_str(), copy.c_str(), true );\n\t\tXmlTest( \"Copy/Assign: document assign.\", original.c_str(), assign.c_str(), true );\n\n\t\t#endif\n\t}\t\n\n\t//////////////////////////////////////////////////////\n#ifdef TIXML_USE_STL\n\tprintf (\"\\n** Parsing, no Condense Whitespace **\\n\");\n\tTiXmlBase::SetCondenseWhiteSpace( false );\n\t{\n\t\tistringstream parse1( \"<start>This  is    \\ntext</start>\" );\n\t\tTiXmlElement text1( \"text\" );\n\t\tparse1 >> text1;\n\n\t\tXmlTest ( \"Condense white space OFF.\", \"This  is    \\ntext\",\n\t\t\t\t\ttext1.FirstChild()->Value(),\n\t\t\t\t\ttrue );\n\t}\n\tTiXmlBase::SetCondenseWhiteSpace( true );\n#endif\n\n\t//////////////////////////////////////////////////////\n\t// GetText();\n\t{\n\t\tconst char* str = \"<foo>This is text</foo>\";\n\t\tTiXmlDocument doc;\n\t\tdoc.Parse( str );\n\t\tconst TiXmlElement* element = doc.RootElement();\n\n\t\tXmlTest( \"GetText() normal use.\", \"This is text\", element->GetText() );\n\n\t\tstr = \"<foo><b>This is text</b></foo>\";\n\t\tdoc.Clear();\n\t\tdoc.Parse( str );\n\t\telement = doc.RootElement();\n\n\t\tXmlTest( \"GetText() contained element.\", element->GetText() == 0, true );\n\n\t\tstr = \"<foo>This is <b>text</b></foo>\";\n\t\tdoc.Clear();\n\t\tTiXmlBase::SetCondenseWhiteSpace( false );\n\t\tdoc.Parse( str );\n\t\tTiXmlBase::SetCondenseWhiteSpace( true );\n\t\telement = doc.RootElement();\n\n\t\tXmlTest( \"GetText() partial.\", \"This is \", element->GetText() );\n\t}\n\n\n\t//////////////////////////////////////////////////////\n\t// CDATA\n\t{\n\t\tconst char* str =\t\"<xmlElement>\"\n\t\t\t\t\t\t\t\t\"<![CDATA[\"\n\t\t\t\t\t\t\t\t\t\"I am > the rules!\\n\"\n\t\t\t\t\t\t\t\t\t\"...since I make symbolic puns\"\n\t\t\t\t\t\t\t\t\"]]>\"\n\t\t\t\t\t\t\t\"</xmlElement>\";\n\t\tTiXmlDocument doc;\n\t\tdoc.Parse( str );\n\t\tdoc.Print();\n\n\t\tXmlTest( \"CDATA parse.\", doc.FirstChildElement()->FirstChild()->Value(), \n\t\t\t\t\t\t\t\t \"I am > the rules!\\n...since I make symbolic puns\",\n\t\t\t\t\t\t\t\t true );\n\n\t\t#ifdef TIXML_USE_STL\n\t\t//cout << doc << '\\n';\n\n\t\tdoc.Clear();\n\n\t\tistringstream parse0( str );\n\t\tparse0 >> doc;\n\t\t//cout << doc << '\\n';\n\n\t\tXmlTest( \"CDATA stream.\", doc.FirstChildElement()->FirstChild()->Value(), \n\t\t\t\t\t\t\t\t \"I am > the rules!\\n...since I make symbolic puns\",\n\t\t\t\t\t\t\t\t true );\n\t\t#endif\n\n\t\tTiXmlDocument doc1 = doc;\n\t\t//doc.Print();\n\n\t\tXmlTest( \"CDATA copy.\", doc1.FirstChildElement()->FirstChild()->Value(), \n\t\t\t\t\t\t\t\t \"I am > the rules!\\n...since I make symbolic puns\",\n\t\t\t\t\t\t\t\t true );\n\t}\n\t{\n\t\t// [ 1482728 ] Wrong wide char parsing\n\t\tchar buf[256];\n\t\tbuf[255] = 0;\n\t\tfor( int i=0; i<255; ++i ) {\n\t\t\tbuf[i] = (char)((i>=32) ? i : 32);\n\t\t}\n\t\tTIXML_STRING str( \"<xmlElement><![CDATA[\" );\n\t\tstr += buf;\n\t\tstr += \"]]></xmlElement>\";\n\n\t\tTiXmlDocument doc;\n\t\tdoc.Parse( str.c_str() );\n\n\t\tTiXmlPrinter printer;\n\t\tprinter.SetStreamPrinting();\n\t\tdoc.Accept( &printer );\n\n\t\tXmlTest( \"CDATA with all bytes #1.\", str.c_str(), printer.CStr(), true );\n\n\t\t#ifdef TIXML_USE_STL\n\t\tdoc.Clear();\n\t\tistringstream iss( printer.Str() );\n\t\tiss >> doc;\n\t\tstd::string out;\n\t\tout << doc;\n\t\tXmlTest( \"CDATA with all bytes #2.\", out.c_str(), printer.CStr(), true );\n\t\t#endif\n\t}\n\t{\n\t\t// [ 1480107 ] Bug-fix for STL-streaming of CDATA that contains tags\n\t\t// CDATA streaming had a couple of bugs, that this tests for.\n\t\tconst char* str =\t\"<xmlElement>\"\n\t\t\t\t\t\t\t\t\"<![CDATA[\"\n\t\t\t\t\t\t\t\t\t\"<b>I am > the rules!</b>\\n\"\n\t\t\t\t\t\t\t\t\t\"...since I make symbolic puns\"\n\t\t\t\t\t\t\t\t\"]]>\"\n\t\t\t\t\t\t\t\"</xmlElement>\";\n\t\tTiXmlDocument doc;\n\t\tdoc.Parse( str );\n\t\tdoc.Print();\n\n\t\tXmlTest( \"CDATA parse. [ 1480107 ]\", doc.FirstChildElement()->FirstChild()->Value(), \n\t\t\t\t\t\t\t\t \"<b>I am > the rules!</b>\\n...since I make symbolic puns\",\n\t\t\t\t\t\t\t\t true );\n\n\t\t#ifdef TIXML_USE_STL\n\n\t\tdoc.Clear();\n\n\t\tistringstream parse0( str );\n\t\tparse0 >> doc;\n\n\t\tXmlTest( \"CDATA stream. [ 1480107 ]\", doc.FirstChildElement()->FirstChild()->Value(), \n\t\t\t\t\t\t\t\t \"<b>I am > the rules!</b>\\n...since I make symbolic puns\",\n\t\t\t\t\t\t\t\t true );\n\t\t#endif\n\n\t\tTiXmlDocument doc1 = doc;\n\t\t//doc.Print();\n\n\t\tXmlTest( \"CDATA copy. [ 1480107 ]\", doc1.FirstChildElement()->FirstChild()->Value(), \n\t\t\t\t\t\t\t\t \"<b>I am > the rules!</b>\\n...since I make symbolic puns\",\n\t\t\t\t\t\t\t\t true );\n\t}\n\t//////////////////////////////////////////////////////\n\t// Visit()\n\n\n\n\t//////////////////////////////////////////////////////\n\tprintf( \"\\n** Fuzzing... **\\n\" );\n\n\tconst int FUZZ_ITERATION = 300;\n\n\t// The only goal is not to crash on bad input.\n\tint len = (int) strlen( demoStart );\n\tfor( int i=0; i<FUZZ_ITERATION; ++i ) \n\t{\n\t\tchar* demoCopy = new char[ len+1 ];\n\t\tstrcpy( demoCopy, demoStart );\n\n\t\tdemoCopy[ i%len ] = (char)((i+1)*3);\n\t\tdemoCopy[ (i*7)%len ] = '>';\n\t\tdemoCopy[ (i*11)%len ] = '<';\n\n\t\tTiXmlDocument xml;\n\t\txml.Parse( demoCopy );\n\n\t\tdelete [] demoCopy;\n\t}\n\tprintf( \"** Fuzzing Complete. **\\n\" );\n\t\n\t//////////////////////////////////////////////////////\n\tprintf (\"\\n** Bug regression tests **\\n\");\n\n\t// InsertBeforeChild and InsertAfterChild causes crash.\n\t{\n\t\tTiXmlElement parent( \"Parent\" );\n\t\tTiXmlElement childText0( \"childText0\" );\n\t\tTiXmlElement childText1( \"childText1\" );\n\t\tTiXmlNode* childNode0 = parent.InsertEndChild( childText0 );\n\t\tTiXmlNode* childNode1 = parent.InsertBeforeChild( childNode0, childText1 );\n\n\t\tXmlTest( \"Test InsertBeforeChild on empty node.\", ( childNode1 == parent.FirstChild() ), true );\n\t}\n\n\t{\n\t\t// InsertBeforeChild and InsertAfterChild causes crash.\n\t\tTiXmlElement parent( \"Parent\" );\n\t\tTiXmlElement childText0( \"childText0\" );\n\t\tTiXmlElement childText1( \"childText1\" );\n\t\tTiXmlNode* childNode0 = parent.InsertEndChild( childText0 );\n\t\tTiXmlNode* childNode1 = parent.InsertAfterChild( childNode0, childText1 );\n\n\t\tXmlTest( \"Test InsertAfterChild on empty node. \", ( childNode1 == parent.LastChild() ), true );\n\t}\n\n\t// Reports of missing constructors, irregular string problems.\n\t{\n\t\t// Missing constructor implementation. No test -- just compiles.\n\t\tTiXmlText text( \"Missing\" );\n\n\t\t#ifdef TIXML_USE_STL\n\t\t\t// Missing implementation:\n\t\t\tTiXmlDocument doc;\n\t\t\tstring name = \"missing\";\n\t\t\tdoc.LoadFile( name );\n\n\t\t\tTiXmlText textSTL( name );\n\t\t#else\n\t\t\t// verifying some basic string functions:\n\t\t\tTiXmlString a;\n\t\t\tTiXmlString b( \"Hello\" );\n\t\t\tTiXmlString c( \"ooga\" );\n\n\t\t\tc = \" World!\";\n\t\t\ta = b;\n\t\t\ta += c;\n\t\t\ta = a;\n\n\t\t\tXmlTest( \"Basic TiXmlString test. \", \"Hello World!\", a.c_str() );\n\t\t#endif\n \t}\n\n\t// Long filenames crashing STL version\n\t{\n\t\tTiXmlDocument doc( \"midsummerNightsDreamWithAVeryLongFilenameToConfuseTheStringHandlingRoutines.xml\" );\n\t\tbool loadOkay = doc.LoadFile();\n\t\tloadOkay = true;\t// get rid of compiler warning.\n\t\t// Won't pass on non-dev systems. Just a \"no crash\" check.\n\t\t//XmlTest( \"Long filename. \", true, loadOkay );\n\t}\n\n\t{\n\t\t// Entities not being written correctly.\n\t\t// From Lynn Allen\n\n\t\tconst char* passages =\n\t\t\t\"<?xml version=\\\"1.0\\\" standalone=\\\"no\\\" ?>\"\n\t\t\t\"<passages count=\\\"006\\\" formatversion=\\\"20020620\\\">\"\n\t\t\t\t\"<psg context=\\\"Line 5 has &quot;quotation marks&quot; and &apos;apostrophe marks&apos;.\"\n\t\t\t\t\" It also has &lt;, &gt;, and &amp;, as well as a fake copyright &#xA9;.\\\"> </psg>\"\n\t\t\t\"</passages>\";\n\n\t\tTiXmlDocument doc( \"passages.xml\" );\n\t\tdoc.Parse( passages );\n\t\tTiXmlElement* psg = doc.RootElement()->FirstChildElement();\n\t\tconst char* context = psg->Attribute( \"context\" );\n\t\tconst char* expected = \"Line 5 has \\\"quotation marks\\\" and 'apostrophe marks'. It also has <, >, and &, as well as a fake copyright \\xC2\\xA9.\";\n\n\t\tXmlTest( \"Entity transformation: read. \", expected, context, true );\n\n\t\tFILE* textfile = fopen( \"textfile.txt\", \"w\" );\n\t\tif ( textfile )\n\t\t{\n\t\t\tpsg->Print( textfile, 0 );\n\t\t\tfclose( textfile );\n\t\t}\n\t\ttextfile = fopen( \"textfile.txt\", \"r\" );\n\t\tassert( textfile );\n\t\tif ( textfile )\n\t\t{\n\t\t\tchar buf[ 1024 ];\n\t\t\tfgets( buf, 1024, textfile );\n\t\t\tXmlTest( \"Entity transformation: write. \",\n\t\t\t\t\t \"<psg context=\\'Line 5 has &quot;quotation marks&quot; and &apos;apostrophe marks&apos;.\"\n\t\t\t\t\t \" It also has &lt;, &gt;, and &amp;, as well as a fake copyright \\xC2\\xA9.' />\",\n\t\t\t\t\t buf,\n\t\t\t\t\t true );\n\t\t}\n\t\tfclose( textfile );\n\t}\n\n    {\n\t\tFILE* textfile = fopen( \"test5.xml\", \"w\" );\n\t\tif ( textfile )\n\t\t{\n            fputs(\"<?xml version='1.0'?><a.elem xmi.version='2.0'/>\", textfile);\n            fclose(textfile);\n\n\t\t\tTiXmlDocument doc;\n            doc.LoadFile( \"test5.xml\" );\n            XmlTest( \"dot in element attributes and names\", doc.Error(), 0);\n\t\t}\n    }\n\n\t{\n\t\tFILE* textfile = fopen( \"test6.xml\", \"w\" );\n\t\tif ( textfile )\n\t\t{\n            fputs(\"<element><Name>1.1 Start easy ignore fin thickness&#xA;</Name></element>\", textfile );\n            fclose(textfile);\n\n            TiXmlDocument doc;\n            bool result = doc.LoadFile( \"test6.xml\" );\n            XmlTest( \"Entity with one digit.\", result, true );\n\n\t\t\tTiXmlText* text = doc.FirstChildElement()->FirstChildElement()->FirstChild()->ToText();\n\t\t\tXmlTest( \"Entity with one digit.\",\n\t\t\t\t\t\ttext->Value(), \"1.1 Start easy ignore fin thickness\\n\" );\n\t\t}\n    }\n\n\t{\n\t\t// DOCTYPE not preserved (950171)\n\t\t// \n\t\tconst char* doctype =\n\t\t\t\"<?xml version=\\\"1.0\\\" ?>\"\n\t\t\t\"<!DOCTYPE PLAY SYSTEM 'play.dtd'>\"\n\t\t\t\"<!ELEMENT title (#PCDATA)>\"\n\t\t\t\"<!ELEMENT books (title,authors)>\"\n\t\t\t\"<element />\";\n\n\t\tTiXmlDocument doc;\n\t\tdoc.Parse( doctype );\n\t\tdoc.SaveFile( \"test7.xml\" );\n\t\tdoc.Clear();\n\t\tdoc.LoadFile( \"test7.xml\" );\n\t\t\n\t\tTiXmlHandle docH( &doc );\n\t\tTiXmlUnknown* unknown = docH.Child( 1 ).Unknown();\n\t\tXmlTest( \"Correct value of unknown.\", \"!DOCTYPE PLAY SYSTEM 'play.dtd'\", unknown->Value() );\n\t\t#ifdef TIXML_USE_STL\n\t\tTiXmlNode* node = docH.Child( 2 ).Node();\n\t\tstd::string str;\n\t\tstr << (*node);\n\t\tXmlTest( \"Correct streaming of unknown.\", \"<!ELEMENT title (#PCDATA)>\", str.c_str() );\n\t\t#endif\n\t}\n\n\t{\n\t\t// [ 791411 ] Formatting bug\n\t\t// Comments do not stream out correctly.\n\t\tconst char* doctype = \n\t\t\t\"<!-- Somewhat<evil> -->\";\n\t\tTiXmlDocument doc;\n\t\tdoc.Parse( doctype );\n\n\t\tTiXmlHandle docH( &doc );\n\t\tTiXmlComment* comment = docH.Child( 0 ).Node()->ToComment();\n\n\t\tXmlTest( \"Comment formatting.\", \" Somewhat<evil> \", comment->Value() );\n\t\t#ifdef TIXML_USE_STL\n\t\tstd::string str;\n\t\tstr << (*comment);\n\t\tXmlTest( \"Comment streaming.\", \"<!-- Somewhat<evil> -->\", str.c_str() );\n\t\t#endif\n\t}\n\n\t{\n\t\t// [ 870502 ] White space issues\n\t\tTiXmlDocument doc;\n\t\tTiXmlText* text;\n\t\tTiXmlHandle docH( &doc );\n\t\n\t\tconst char* doctype0 = \"<element> This has leading and trailing space </element>\";\n\t\tconst char* doctype1 = \"<element>This has  internal space</element>\";\n\t\tconst char* doctype2 = \"<element> This has leading, trailing, and  internal space </element>\";\n\n\t\tTiXmlBase::SetCondenseWhiteSpace( false );\n\t\tdoc.Clear();\n\t\tdoc.Parse( doctype0 );\n\t\ttext = docH.FirstChildElement( \"element\" ).Child( 0 ).Text();\n\t\tXmlTest( \"White space kept.\", \" This has leading and trailing space \", text->Value() );\n\n\t\tdoc.Clear();\n\t\tdoc.Parse( doctype1 );\n\t\ttext = docH.FirstChildElement( \"element\" ).Child( 0 ).Text();\n\t\tXmlTest( \"White space kept.\", \"This has  internal space\", text->Value() );\n\n\t\tdoc.Clear();\n\t\tdoc.Parse( doctype2 );\n\t\ttext = docH.FirstChildElement( \"element\" ).Child( 0 ).Text();\n\t\tXmlTest( \"White space kept.\", \" This has leading, trailing, and  internal space \", text->Value() );\n\n\t\tTiXmlBase::SetCondenseWhiteSpace( true );\n\t\tdoc.Clear();\n\t\tdoc.Parse( doctype0 );\n\t\ttext = docH.FirstChildElement( \"element\" ).Child( 0 ).Text();\n\t\tXmlTest( \"White space condensed.\", \"This has leading and trailing space\", text->Value() );\n\n\t\tdoc.Clear();\n\t\tdoc.Parse( doctype1 );\n\t\ttext = docH.FirstChildElement( \"element\" ).Child( 0 ).Text();\n\t\tXmlTest( \"White space condensed.\", \"This has internal space\", text->Value() );\n\n\t\tdoc.Clear();\n\t\tdoc.Parse( doctype2 );\n\t\ttext = docH.FirstChildElement( \"element\" ).Child( 0 ).Text();\n\t\tXmlTest( \"White space condensed.\", \"This has leading, trailing, and internal space\", text->Value() );\n\t}\n\n\t{\n\t\t// Double attributes\n\t\tconst char* doctype = \"<element attr='red' attr='blue' />\";\n\n\t\tTiXmlDocument doc;\n\t\tdoc.Parse( doctype );\n\t\t\n\t\tXmlTest( \"Parsing repeated attributes.\", true, doc.Error() );\t// is an  error to tinyxml (didn't use to be, but caused issues)\n\t\t//XmlTest( \"Parsing repeated attributes.\", \"blue\", doc.FirstChildElement( \"element\" )->Attribute( \"attr\" ) );\n\t}\n\n\t{\n\t\t// Embedded null in stream.\n\t\tconst char* doctype = \"<element att\\0r='red' attr='blue' />\";\n\n\t\tTiXmlDocument doc;\n\t\tdoc.Parse( doctype );\n\t\tXmlTest( \"Embedded null throws error.\", true, doc.Error() );\n\n\t\t#ifdef TIXML_USE_STL\n\t\tistringstream strm( doctype );\n\t\tdoc.Clear();\n\t\tdoc.ClearError();\n\t\tstrm >> doc;\n\t\tXmlTest( \"Embedded null throws error.\", true, doc.Error() );\n\t\t#endif\n\t}\n\n    {\n            // Legacy mode test. (This test may only pass on a western system)\n            const char* str =\n                        \"<?xml version=\\\"1.0\\\" encoding=\\\"ISO-8859-1\\\"?>\"\n                        \"<>\"\n                        \"Cntnt\"\n                        \"</>\";\n\n            TiXmlDocument doc;\n            doc.Parse( str );\n\n            TiXmlHandle docHandle( &doc );\n            TiXmlHandle aHandle = docHandle.FirstChildElement( \"\" );\n            TiXmlHandle tHandle = aHandle.Child( 0 );\n            assert( aHandle.Element() );\n            assert( tHandle.Text() );\n            XmlTest( \"ISO-8859-1 Parsing.\", \"Cntnt\", tHandle.Text()->Value() );\n    }\n\n\t{\n\t\t// Empty documents should return TIXML_ERROR_PARSING_EMPTY, bug 1070717\n\t\tconst char* str = \"    \";\n\t\tTiXmlDocument doc;\n\t\tdoc.Parse( str );\n\t\tXmlTest( \"Empty document error TIXML_ERROR_DOCUMENT_EMPTY\", TiXmlBase::TIXML_ERROR_DOCUMENT_EMPTY, doc.ErrorId() );\n\t}\n\t#ifndef TIXML_USE_STL\n\t{\n\t\t// String equality. [ 1006409 ] string operator==/!= no worky in all cases\n\t\tTiXmlString temp;\n\t\tXmlTest( \"Empty tinyxml string compare equal\", ( temp == \"\" ), true );\n\n\t\tTiXmlString    foo;\n\t\tTiXmlString    bar( \"\" );\n\t\tXmlTest( \"Empty tinyxml string compare equal\", ( foo == bar ), true );\n\t}\n\n\t#endif\n\t{\n\t\t// Bug [ 1195696 ] from marlonism\n\t\tTiXmlBase::SetCondenseWhiteSpace(false); \n\t\tTiXmlDocument xml; \n\t\txml.Parse(\"<text><break/>This hangs</text>\"); \n\t\tXmlTest( \"Test safe error return.\", xml.Error(), false );\n\t}\n\n\t{\n\t\t// Bug [ 1243992 ] - another infinite loop\n\t\tTiXmlDocument doc;\n\t\tdoc.SetCondenseWhiteSpace(false);\n\t\tdoc.Parse(\"<p><pb></pb>test</p>\");\n\t} \n\t{\n\t\t// Low entities\n\t\tTiXmlDocument xml;\n\t\txml.Parse( \"<test>&#x0e;</test>\" );\n\t\tconst char result[] = { 0x0e, 0 };\n\t\tXmlTest( \"Low entities.\", xml.FirstChildElement()->GetText(), result );\n\t\txml.Print();\n\t}\n\t{\n\t\t// Bug [ 1451649 ] Attribute values with trailing quotes not handled correctly\n\t\tTiXmlDocument xml;\n\t\txml.Parse( \"<foo attribute=bar\\\" />\" );\n\t\tXmlTest( \"Throw error with bad end quotes.\", xml.Error(), true );\n\t}\n\t#ifdef TIXML_USE_STL\n\t{\n\t\t// Bug [ 1449463 ] Consider generic query\n\t\tTiXmlDocument xml;\n\t\txml.Parse( \"<foo bar='3' barStr='a string'/>\" );\n\n\t\tTiXmlElement* ele = xml.FirstChildElement();\n\t\tdouble d;\n\t\tint i;\n\t\tfloat f;\n\t\tbool b;\n\t\tstd::string str;\n\n\t\tXmlTest( \"QueryValueAttribute\", ele->QueryValueAttribute( \"bar\", &d ), TIXML_SUCCESS );\n\t\tXmlTest( \"QueryValueAttribute\", ele->QueryValueAttribute( \"bar\", &i ), TIXML_SUCCESS );\n\t\tXmlTest( \"QueryValueAttribute\", ele->QueryValueAttribute( \"bar\", &f ), TIXML_SUCCESS );\n\t\tXmlTest( \"QueryValueAttribute\", ele->QueryValueAttribute( \"bar\", &b ), TIXML_WRONG_TYPE );\n\t\tXmlTest( \"QueryValueAttribute\", ele->QueryValueAttribute( \"nobar\", &b ), TIXML_NO_ATTRIBUTE );\n\t\tXmlTest( \"QueryValueAttribute\", ele->QueryValueAttribute( \"barStr\", &str ), TIXML_SUCCESS );\n\n\t\tXmlTest( \"QueryValueAttribute\", (d==3.0), true );\n\t\tXmlTest( \"QueryValueAttribute\", (i==3), true );\n\t\tXmlTest( \"QueryValueAttribute\", (f==3.0f), true );\n\t\tXmlTest( \"QueryValueAttribute\", (str==std::string( \"a string\" )), true );\n\t}\n\t#endif\n\n\t#ifdef TIXML_USE_STL\n\t{\n\t\t// [ 1505267 ] redundant malloc in TiXmlElement::Attribute\n\t\tTiXmlDocument xml;\n\t\txml.Parse( \"<foo bar='3' />\" );\n\t\tTiXmlElement* ele = xml.FirstChildElement();\n\t\tdouble d;\n\t\tint i;\n\n\t\tstd::string bar = \"bar\";\n\n\t\tconst std::string* atrrib = ele->Attribute( bar );\n\t\tele->Attribute( bar, &d );\n\t\tele->Attribute( bar, &i );\n\n\t\tXmlTest( \"Attribute\", atrrib->empty(), false );\n\t\tXmlTest( \"Attribute\", (d==3.0), true );\n\t\tXmlTest( \"Attribute\", (i==3), true );\n\t}\n\t#endif\n\n\t{\n\t\t// [ 1356059 ] Allow TiXMLDocument to only be at the top level\n\t\tTiXmlDocument xml, xml2;\n\t\txml.InsertEndChild( xml2 );\n\t\tXmlTest( \"Document only at top level.\", xml.Error(), true );\n\t\tXmlTest( \"Document only at top level.\", xml.ErrorId(), TiXmlBase::TIXML_ERROR_DOCUMENT_TOP_ONLY );\n\t}\n\n\t{\n\t\t// [ 1663758 ] Failure to report error on bad XML\n\t\tTiXmlDocument xml;\n\t\txml.Parse(\"<x>\");\n\t\tXmlTest(\"Missing end tag at end of input\", xml.Error(), true);\n\t\txml.Parse(\"<x> \");\n\t\tXmlTest(\"Missing end tag with trailing whitespace\", xml.Error(), true);\n\t} \n\n\t{\n\t\t// [ 1635701 ] fail to parse files with a tag separated into two lines\n\t\t// I'm not sure this is a bug. Marked 'pending' for feedback.\n\t\tTiXmlDocument xml;\n\t\txml.Parse( \"<title><p>text</p\\n><title>\" );\n\t\t//xml.Print();\n\t\t//XmlTest( \"Tag split by newline\", xml.Error(), false );\n\t}\n\n\t#ifdef TIXML_USE_STL\n\t{\n\t\t// [ 1475201 ] TinyXML parses entities in comments\n\t\tTiXmlDocument xml;\n\t\tistringstream parse1( \"<!-- declarations for <head> & <body> -->\"\n\t\t\t\t\t\t      \"<!-- far &amp; away -->\" );\n\t\tparse1 >> xml;\n\n\t\tTiXmlNode* e0 = xml.FirstChild();\n\t\tTiXmlNode* e1 = e0->NextSibling();\n\t\tTiXmlComment* c0 = e0->ToComment();\n\t\tTiXmlComment* c1 = e1->ToComment();\n\n\t\tXmlTest( \"Comments ignore entities.\", \" declarations for <head> & <body> \", c0->Value(), true );\n\t\tXmlTest( \"Comments ignore entities.\", \" far &amp; away \", c1->Value(), true );\n\t}\n\t#endif\n\n\t{\n\t\t// [ 1475201 ] TinyXML parses entities in comments\n\t\tTiXmlDocument xml;\n\t\txml.Parse(\"<!-- declarations for <head> & <body> -->\"\n\t\t\t\t  \"<!-- far &amp; away -->\" );\n\n\t\tTiXmlNode* e0 = xml.FirstChild();\n\t\tTiXmlNode* e1 = e0->NextSibling();\n\t\tTiXmlComment* c0 = e0->ToComment();\n\t\tTiXmlComment* c1 = e1->ToComment();\n\n\t\tXmlTest( \"Comments ignore entities.\", \" declarations for <head> & <body> \", c0->Value(), true );\n\t\tXmlTest( \"Comments ignore entities.\", \" far &amp; away \", c1->Value(), true );\n\t}\n\n\t{\n\t\tTiXmlDocument xml;\n\t\txml.Parse( \"<Parent>\"\n\t\t\t\t\t\t\"<child1 att=''/>\"\n\t\t\t\t\t\t\"<!-- With this comment, child2 will not be parsed! -->\"\n\t\t\t\t\t\t\"<child2 att=''/>\"\n\t\t\t\t\t\"</Parent>\" );\n\t\tint count = 0;\n\n\t\tTiXmlNode* ele = 0;\n\t\twhile ( (ele = xml.FirstChildElement( \"Parent\" )->IterateChildren( ele ) ) != 0 ) {\n\t\t\t++count;\n\t\t}\n\t\tXmlTest( \"Comments iterate correctly.\", 3, count );\n\t}\n\n\t{\n\t\t// trying to repro ]1874301]. If it doesn't go into an infinite loop, all is well.\n\t\tunsigned char buf[] = \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><feed><![CDATA[Test XMLblablablalblbl\";\n\t\tbuf[60] = 239;\n\t\tbuf[61] = 0;\n\n\t\tTiXmlDocument doc;\n\t\tdoc.Parse( (const char*)buf);\n\t} \n\n\n\t{\n\t\t// bug 1827248 Error while parsing a little bit malformed file\n\t\t// Actually not malformed - should work.\n\t\tTiXmlDocument xml;\n\t\txml.Parse( \"<attributelist> </attributelist >\" );\n\t\tXmlTest( \"Handle end tag whitespace\", false, xml.Error() );\n\t}\n\n\t{\n\t\t// This one must not result in an infinite loop\n\t\tTiXmlDocument xml;\n\t\txml.Parse( \"<infinite>loop\" );\n\t\tXmlTest( \"Infinite loop test.\", true, true );\n\t}\n\n\t{\n\t\t// 1709904 - can not repro the crash\n\t\t{\n\t\t\tTiXmlDocument xml;\n\t\t\txml.Parse( \"<tag>/</tag>\" );\n\t\t\tXmlTest( \"Odd XML parsing.\", xml.FirstChild()->Value(), \"tag\" );\n\t\t}\n\t\t/* Could not repro. {\n\t\t\tTiXmlDocument xml;\n\t\t\txml.LoadFile( \"EQUI_Inventory.xml\" );\n\t\t\t//XmlTest( \"Odd XML parsing.\", xml.FirstChildElement()->Value(), \"XML\" );\n\t\t\tTiXmlPrinter printer;\n\t\t\txml.Accept( &printer );\n\t\t\tfprintf( stdout, \"%s\", printer.CStr() );\n\t\t}*/\n\t}\n\n\t/*  1417717 experiment\n\t{\n\t\tTiXmlDocument xml;\n\t\txml.Parse(\"<text>Dan & Tracie</text>\");\n\t\txml.Print(stdout);\n\t}\n\t{\n\t\tTiXmlDocument xml;\n\t\txml.Parse(\"<text>Dan &foo; Tracie</text>\");\n\t\txml.Print(stdout);\n\t}\n\t*/\n\n\t#if defined( WIN32 ) && defined( TUNE )\n\t_CrtMemCheckpoint( &endMemState );\n\t//_CrtMemDumpStatistics( &endMemState );\n\n\t_CrtMemState diffMemState;\n\t_CrtMemDifference( &diffMemState, &startMemState, &endMemState );\n\t_CrtMemDumpStatistics( &diffMemState );\n\t#endif\n\n\tprintf (\"\\nPass %d, Fail %d\\n\", gPass, gFail);\n\treturn gFail;\n}\n"
  },
  {
    "path": "external/verpatch/src/ReadMe.txt",
    "content": "Verpatch - a tool to patch win32 version resources on .exe or .dll files,\n\nVersion: 01-Nov-2009 (rev. #7 for CodeProject)\n\nVerpatch is a command line tool for adding and editing the version information\nof Windows executable files (applications, DLLs, kernel drivers)\nwithout rebuilding the executable.\n\nIt can also add or replace Win32 (native) resources, and do some other\nmodifications of executable files.\n\nVerpatch sets ERRORLEVEL 0 on success, otherwise errorlevel is non-zero.\nVerpatch modifies files in place, so please make copies of precious files.\n\n\nCommand line syntax\n===================\n\nverpatch filename [version] [/options]\n\nThe filename is the executable file (exe, dll, sys, ocx...) to edit.\nNOTE: the file will be modified; please make backup copies of precious files.\n  \nThe version argument is one to four decimal numbers, separated by dots.\nThe version argument can also have additional text after the numbers; see examples below.\n\n\nCommon Options:\n\n/s name \"value\" - add any version resource string attribute\n  The name can be either a full attribute name or alias; see below.\n/sc \"comment\" - add or replace Comments string (same as /s Comments \"comment\")\n/pv <version>   - specify Product version\n    where <version> arg has same form as the file version (1.2.3.4 or \"1.2.3.4 text\")\n/vft2 num - specify driver subtype (VFT2_xxx value, see winver.h)\n\tThe application type (VFT_xxx) is retained from the existing version resource of the file,\n\tor filled automatically, based on the filename extension.\n/fn - preserves Original filename, Internal name in the existing version resource of the file.\n/va - creates a version resource. Use when the file has no version resource at all.\n     If this option not specified, verpatch will read and parse the version resourse from the file.\n/vo - outputs the version info in RC format to stdout.\n\tThis can be used with /xi to import a version resource from another file.\n\tOutput of /vo (text from #ifdef RC_INVOKED to #endif) can be saved to a .rc file and compiled with rc.\n\nOther options:\n\n/xi- test mode. does all operations but does not modify the file\n/xlb - test mode. Re-parses the version resource after modification.\n/rpdb - remove path of the .pdb file in debug information.\n/rf #id file - add or replace a raw binary resource from file (see below)\n/noed - do not check for extra data appended to exe file\n\n\nExamples\n========\n\nverpatch d:\\foo.dll 1.2.33.44\n\t- replaces only the file version, all 4 numbers, \n\tthe Original file name and Internal name strings are set to \"foo.dll\".\n\nverpatch d:\\foo.dll 33.44  /sc \"a comment\"\n\t- replaces only two last numbers of the file version and adds a comment.\n\nverpatch d:\\foo.dll \"33.44 special release\" /sc \"a comment\"\n\t- same as previous, with additional text in the version argument.\n\nverpatch d:\\foo.dll \"1.2.33.44\" /va /s FileDescription \"foo.dll\"\n     /s CompanyName \"company\" /s LegalCopyright \"(c) 2009\"\n   - adds a version resource to foo.dll, specify several string values.\n   ( this should be one line)\n\nverpatch d:\\foo.dll /vo /xi\n\t- dumps the version resource in RC format, does not update the file.\n\n\n\t\nRemarks\n=======\n\nVerpatch replaces the version number in existing file version info resource\nwith the values given on the command line.\n\nIn \"patch\" mode (no /va option), the PE file should have a version resource,\nwhich is parsed, and then parameters specified on the command line are applied.\n\nIf the file has no version resource, use /va to create it.\nAll nesessary strings can be specified with the /s option.\nThe command line can become very long, so you may want to use\na batch file or script.\nSee the example batch files, how to create a version resource and\nspecify all parameters with /va.\n\nVerpatch can be run on same PE file any number of times.\n\nThe Version argument can be specified as 1 to 4 dot separated decimal numbers,\nor as quoted string containing additional text after the numbers.\nIf less than 4 numbers are given, they are considered as lower numbers.\nThe higher version parts are retained from existing version resource.\nFor example, if the existing version info has version number 1.2.3.4\nand 55.66 specified on the command line, the result will be 1.2.55.66.\n\nThe quotes surrounding string arguments are needed for the command line shell (cmd.exe), \nfor any argument that contains spaces.\n\nThe program ensures that the version numbers in the binary part\nof the version structure and in the string part (as text) are same.\n\nBy default, Original File Name and Internal File Name are replaced to the actual filename.\nUse /fn to preserve existing values in the version resource.\n\nFor option /s, specify *invariant* string names, not translations\n( example: PrivateBuild, not \"Private Build Description\" ).\nSee below for the list of known string names and aliases.\nNull values can be specified as \"\".\n\nStrings for File version and Product version parameters are handled in a special way, \nthe /s switch can not be used to set them:\n - File version can be specified as the 2nd positional argument of the command\n - Product version can be specified using /pv switch\n\nThe /rf switch adds a resource from a file, or replaces a resource with same type and id.\nThe file is added as opaque binary chunk; the size is rounded up to 4 bytes.\nThe argument \"#id\" is a 32-bit hex number, prefixed with #.\nLow 16 bits of this value are resource id; can not be 0.\nNext 8 bits are resource type: one of RT_xxx symbols in winuser.h, or user defined.\nHigh 8 bits of the #id arg are reserved0.\nIf the type value is 0, RT_RCDATA (10) is assumed.\nThe language code of resources added by this switch is 0 (Neutral).\nNamed resource types and ids are not implemented.\n\nThe program detects extra data appended to executable files, saves it and appends \nagain after modifying resources.\nSuch extra data is used by some installers, self-extracting archives and other applications.\nHowever, the way we restore the data may be not compatible with these applications.\nPlease, verify that executable files that contain extra data work correctly after modification.\nCommand switch /noed disables checking for extra data.\n\n\n====================================================================\nKnown string keys in VS_VERSION_INFO resource\n====================================================================\n\nThe aliases are for use with the /s switch (case insensitive).\n\n-------------------+----+-------------------------------+------------\nInvariant name     |note| English translation           | Alias\n-------------------+----+-------------------------------+------------\nComments                    Comments                      comment\nCompanyName           E     Company                       company\nFileDescription       E     Description                   description, desc\nFileVersion           *1    File version\nInternalName                Internal Name                 title\n                      *2    Language\nLegalCopyright        E     Copyright                     copyright, (c)\nLegalTrademarks       E      Legal Trademarks              tm, (tm)\nOriginalFilename            Original File Name\nProductName                 Product Name                  product\nProductVersion        *1    Product Version               productver, prodver\nPrivateBuild                Private Build Description     pb\nSpecialBuild                Special Build  Description    sb, build\nOleSelfRegister       A     - \nAssemblyVersion       N\n\nNotes\n*1: FileVersion, ProductVersion values:\nCan be any text. Windows Explorer displays the version numbers from the binary header. \nTo avoid confusion, should begin with same v1.v2.v3.v4 version number as in the binary header.\n\n*2: The \"Language\" value is the name of the language code specified in the header of the string block\nof VS_VERSION_INFO resource.  (or taken from VarFileInfo block?)\nIt is not a string in the string version data.\n\nE: Displayed by Windows Explorer in Vista+\nA: Intended for some API (OleSelfRegister is used in COM object registration)\nN: Added by some .NET compilers. This version number is not contained in the\n    binary part of the version struct and can differ from the file version.\n    To change it, just use switch /s AssemblyVersion [value]\n\n====================================================================\n\n\n\nKnown issues and TO DO's:\n=========================\n\n - Currenly implemented only US English and Language Neutral Unicode version resources.\n   MUI resource configuration manifests not checked.\n   New version resource will be created as Language Neutral.\n   Version info in other languages will be erroneously rewritten as English or Language Neutral- TO DO\n   \n   A second (language neutral) version resource may be added to a file\n   that already has a version resource in other language. Switch /va won't help.\n   TO DO: ensure that a file has only one version resource!\n   \n - When verpatch is invoked from command prompt, or batch file, the string\n   arguments can contain only ANSI characters, because cmd.exe batch files cannot be \n   in Uncode format. If you need to include characters not in current locale,\n   use other shell languages that fully support Unicode (PowerShell, vbs, js).\n   \n - TO DO: In RC source output (/vo), special characters in strings are not quoted;\n   so /vo may produce invalid RC input\n   \n - The parser of binary version resources handles only the most common type of structure.\n   If the parser breaks because of unhandled structure format, try /va switch to\n   skip reading existing version resource and re-create it from scratch.\n   Consider using WINE or other open source implementations?\n   \n - option to add extra 0 after version strings : \"string\\0\"\n   (tentative, requiested by a reader for some old VB code) \n\n - For files with extra data, checksum is not re-calculated. Revise.\n\n\nSource code \n============\nThe source is provided as a Visual C++ 2005 project, it can be compiled with VC 2008 Express.\nIt demonstrates use of the UpdateResource and imagehlp.dll API.\nIt does not demonstrate use of c++, good coding manners or anything else.\nDependencies on C++ libraries available only with the full Visual C 2008 have been removed.\n\n\nLICENSE TERMS: CPOL (CodeProject Open License)\nhttp://www.codeproject.com/info/licenses.aspx\n\n~~\n"
  },
  {
    "path": "external/verpatch/src/peExtras.cpp",
    "content": "//\n// PE image related utils\n//\n\n#include \"stdafx.h\"\n#include \"peExtras.h\"\n#include \"relstamp.h\"\n#include <imagehlp.h>\n#pragma comment(lib, \"imagehlp\")\n\n#if UNICODE\n// only non-unicode form of MapAndLoad exists in imagehlp. Grr.\nBOOL MapAndLoadW(\n    __in PCWSTR ImageName,\n    __in_opt PCWSTR DllPath,\n    __out PLOADED_IMAGE LoadedImage,\n    __in BOOL DotDll,\n    __in BOOL ReadOnly\n    );\n#define MapAndLoadT MapAndLoadW\n#else\n#define MapAndLoadT MapAndLoad\n#endif\n\nBOOL getFileExtraData(LPCTSTR fname, PVOID *extraData, LPDWORD dwSize)\n{\n\t*dwSize = 0;\n\t*extraData = NULL;\n\n\tBOOL r;\n\tLOADED_IMAGE im;\n\n\tr = ::MapAndLoadT(\n\t\tfname,\n\t\t_T(\"\\\\no-implicit-paths\"),\n\t\t&im,\n\t\tFALSE, // .exe by default\n\t\tTRUE // readonly\n\t\t);\n\n\tif (!r) {\n\t\tdprint(\"err open file for reading extra data %d\\n\", GetLastError() );\n\t\treturn FALSE;\n\t}\n\n\tULONG endOfImage = 0;\n\n\tfor (ULONG i = 0; i < im.NumberOfSections; i++)\n\t{\n\t\tif (endOfImage < im.Sections[i].PointerToRawData + im.Sections[i].SizeOfRawData)\n\t\t\tendOfImage = im.Sections[i].PointerToRawData + im.Sections[i].SizeOfRawData;\n\t}\n\n\tif (im.SizeOfImage > endOfImage)\n\t{\n\t\t*dwSize = im.SizeOfImage - endOfImage;\n\t\t*extraData = malloc(*dwSize);\n\t\tASSERT(*extraData);\n\t\tmemcpy(*extraData, &im.MappedAddress[endOfImage], *dwSize);\n\t}\n\n\tr = ::UnMapAndLoad( &im );\n\tif (!r) {\n\t\tdprint(\"err unloading file %d\\n\", GetLastError() );\n\t\treturn FALSE;\n\t}\n\n\treturn TRUE;\n}\n\nBOOL appendFileExtraData( PCTSTR fname, PVOID extraData, DWORD dwSize)\n{\n\tDWORD bytesWritten = 0;\n\n\tif (extraData == NULL)\n\t\treturn TRUE;\n\n\tHANDLE fh = CreateFile(fname, GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, NULL);\n\n\tif (INVALID_HANDLE_VALUE == fh ) {\n\t\tdtprint(_T(\"Error opening executable %s err=%d\\n\"), fname, GetLastError());\n\t\treturn false;\n\t}\n\n\tDWORD pos = SetFilePointer(fh, 0, NULL, FILE_END);\n\tif ( INVALID_SET_FILE_POINTER == pos ) {\n\t\tdtprint(_T(\"Error seeking executable %s err=%d\\n\"), fname, GetLastError());\n\t\tCloseHandle(fh);\n\t\treturn false;\n\t}\n\n\tif ( !WriteFile(fh, extraData, dwSize, &bytesWritten, NULL) || (bytesWritten != dwSize) ) {\n\t\tdtprint(_T(\"Error writing extra data %s err=%d\\n\"), fname, GetLastError());\n\t\tCloseHandle(fh);\n\t\treturn false;\n\t}\n\n\tCloseHandle(fh);\n\treturn TRUE;\n}\n"
  },
  {
    "path": "external/verpatch/src/peExtras.h",
    "content": "#pragma once\n\nextern BOOL getFileExtraData(PCTSTR fname, PVOID *extraData, PDWORD dwSize);\nextern BOOL appendFileExtraData(PCTSTR fname, PVOID extraData, DWORD size);\n"
  },
  {
    "path": "external/verpatch/src/peutils.cpp",
    "content": "//\n// PE image related utils\n//\n\n#include \"stdafx.h\"\n#include \"relstamp.h\"\n#include <imagehlp.h>\n#pragma comment(lib, \"imagehlp\")\n\n#if UNICODE\n// only non-unicode form of MapAndLoad exists in imagehlp. Grr.\nBOOL MapAndLoadW(\n    __in PCWSTR ImageName,\n    __in_opt PCWSTR DllPath,\n    __out PLOADED_IMAGE LoadedImage,\n    __in BOOL DotDll,\n    __in BOOL ReadOnly\n    );\n#define MapAndLoadT MapAndLoadW\n#else\n#define MapAndLoadT MapAndLoad\n#endif\n\n\nbool clearPdbPath( PLOADED_IMAGE pim )\n{\n\tbool ret = false;\n\n\t__try {\n\n\tPIMAGE_NT_HEADERS pnth = pim->FileHeader;\n\tPIMAGE_FILE_HEADER pfh = &(pnth->FileHeader);\n\tWORD mtype = pfh->Machine;\n\tPIMAGE_DEBUG_DIRECTORY pdebug;\n\tPIMAGE_DATA_DIRECTORY pd;\n\n\tswitch (mtype) {\n\t\tcase IMAGE_FILE_MACHINE_I386: {\n\t\t\tPIMAGE_OPTIONAL_HEADER32 pih = \n\t\t\t\t&(((PIMAGE_NT_HEADERS32)pnth)->OptionalHeader);\n\t\t\tpd = pih->DataDirectory;\n\t\t\tbreak;\n\t\t\t}\n\t\tcase IMAGE_FILE_MACHINE_AMD64: \t{\n\t\t\t// EXPERIMENTAL for x64 image mapped on x86 host:\n\t\t\tPIMAGE_OPTIONAL_HEADER64 pih = \n\t\t\t\t&(((PIMAGE_NT_HEADERS64)pnth)->OptionalHeader);\n\t\t\tpd = pih->DataDirectory;\n\t\t\tbreak;\n\t\t\t}\n\t\tcase IMAGE_FILE_MACHINE_IA64:\n\t\t\tdprint(\"not tested for IA64\\n\"); return false;\n\t\tdefault:\n\t\t\tdprint(\"Unsupported arch\\n\"); return false;\n\t}\n\n\tULONG32 adebug = pd[IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress;\n\tULONG i;\n\tfor ( i = 0; i < pim->NumberOfSections; i++ ) {\n\t\tPIMAGE_SECTION_HEADER sh = &pim->Sections[i];\n\t\tif ( (sh->VirtualAddress <= adebug) && \n\t\t\t(sh->SizeOfRawData + sh->VirtualAddress > adebug) ) {\n\t\t\t\tadebug -= sh->VirtualAddress;\n\t\t\t\tadebug += sh->PointerToRawData;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif ( i >= pim->NumberOfSections ) {\n\t\td2print(\"virt address %#x not found\\n\", adebug);\n\t\t__leave;\n\t}\n\tpdebug = (PIMAGE_DEBUG_DIRECTORY)( adebug + (PUCHAR)(pim->MappedAddress) );\n\n\tif ( pdebug->Type != IMAGE_DEBUG_TYPE_CODEVIEW /*2*/ )\n\t\t__leave;\n\tchar *pdd = pdebug->PointerToRawData + (char*)(pim->MappedAddress);\n\tif ( *((PULONG32)pdd) != 'SDSR' )\n\t\t__leave;\n\t\n\tunsigned dsize = pdebug->SizeOfData;\n\tif ( dsize <= 0x18 ) //?\n\t\t__leave;\n\tpdd += 0x18; //skip header to the pdb name string\n\tdsize -= 0x18;\n\tunsigned dsize2 = strnlen( pdd, dsize );\n\tif ( dsize2 == 0 || dsize2 >= dsize )\n\t\t__leave;\n\td2print(\"PDB path in image:[%hs]\\n\", pdd);\n\n\tchar * pdbname = strrchr( pdd, '\\\\' );\n\n\tif ( !pdbname || (pdbname - pdd) <= 4 || strchr( pdd, '\\\\' ) == pdbname ) {\n\t\td2print(\"PDB path too short, not changing\\n\");\n\t\tret = true; __leave;\n\t}\n\n\tmemcpy( pdd, \"\\\\x\\\\\", 3 );\n\tstrcpy_s( pdd + 3, dsize2 - 3, pdbname );\n\tchar *t = pdd + strlen(pdd);\n\tSecureZeroMemory( t, dsize2 - (t - pdd) );\n\n\tret = true;\n\n\t} __except( EXCEPTION_EXECUTE_HANDLER ) {\n\t\tret = false;\n\t\tdprint(\"%s - exception\\n\", __FUNCTION__);\n\t}\n\n\treturn ret;\n}\n\nBOOL updFileChecksum( LPCTSTR fname, bool fRemovePdbPath )\n{\n\tBOOL r;\n\tLOADED_IMAGE im;\n\n\tr = ::MapAndLoadT(\n\t\tfname,\n\t\t_T(\"\\\\no-implicit-paths\"),\n\t\t&im,\n\t\tFALSE, // .exe by default\n\t\tFALSE // readonly\n\t\t);\n\n\tif (!r) {\n\t\tdprint(\"err open file for rechecksum %d\\n\", GetLastError() );\n\t\treturn FALSE;\n\t}\n\n\tif ( !(im.Characteristics & IMAGE_FILE_EXECUTABLE_IMAGE) ) {\n\t\tdprint(\"error: the file not marked as executable (build errors?)\\n\");\n\t\t::UnMapAndLoad( &im );\n\t\treturn FALSE;\n\t}\n\n\t// begin image patches \n\tif ( fRemovePdbPath && !clearPdbPath( &im ) ) {\n\t\tdprint(\"error while editing pdb path\\n\");\n\t\t::UnMapAndLoad( &im );\n\t\treturn FALSE;\n\t}\n\t// end image patches\n\n\t// Checksum offset is same for IMAGE_OPTIONAL_HEADER32 and 64.\n\tDWORD old_sum, new_sum;\n\tPIMAGE_NT_HEADERS pimh = ::CheckSumMappedFile( im.MappedAddress, im.SizeOfImage, &old_sum, &new_sum );\n\tif (!pimh ) {\n\t\tdprint( \"err CheckSumMappedFile %d\\n\", GetLastError() );\n\t\t::UnMapAndLoad( &im );\n\t\treturn FALSE;\n\t}\n\n\t// d3print( \"old cksm=%4.4X new=%4.4X\\n\", old_sum, new_sum );\n\tpimh->OptionalHeader.CheckSum = new_sum;\n\n\tr = ::UnMapAndLoad( &im );\n\tif (!r) {\n\t\tdprint(\"err writing file back after patching %d\\n\", GetLastError() );\n\t\treturn FALSE;\n\t}\n\n\treturn TRUE;\n}\n\n#if UNICODE\n\nPSTR strFilePathDeUnicode( PCWSTR tstr );\n\n//---------------------------------------------------------------------------------\n// Only a non-unicode form of MapAndLoad exists in imagehlp. Grr.\n//---------------------------------------------------------------------------------\nBOOL \nMapAndLoadW( \n\t__in PCWSTR fname,\n\t__in_opt PCWSTR path,\n\t__out PLOADED_IMAGE LoadedImage, \n\tBOOL DotDll, \n\tBOOL Readonly ) \n{\n\tBOOL r;\n\tUNREFERENCED_PARAMETER(path); // fake this arg to not search, and not deunicode\n\t// Convert PWSTR to something acceptable for CreateFileA\n\t// Another way: Require the file *name* only be ascii, then path can be gibberish.\n\t//  => cd to the path and use ./filename form.\n\tPSTR a_fname = strFilePathDeUnicode(fname);\n\tif (!a_fname) {\n\t\tdprint(\"err opening file for rechecksum (unicode path)\\n\");\n\t\treturn FALSE;\n\t}\n\tr = MapAndLoad( a_fname, \"\\\\dont-search-path\", LoadedImage, DotDll, Readonly );\n\tfree( a_fname );\n\treturn r;\n}\n\n//---------------------------------------------------------------------------------\n// Convert unicode file path to something acceptable for non-unicode file APIs.\n// Caller should free returned pointer with free()\n//---------------------------------------------------------------------------------\nPSTR strFilePathDeUnicode( __in PCWSTR tstr)\n{\n\t//- dprint(\"orig. path [%ws]\\n\", tstr );\n\tDWORD r;\n\tPWSTR p = (PWSTR)calloc( MAX_PATH + 1, sizeof(WCHAR) );\n\tif ( !p )\n\t\treturn NULL;\n\n\tr = ::GetShortPathName( tstr, p, MAX_PATH );\n\tif ( r == 0 || r >= MAX_PATH ) {\n\t\tdprint(\"err GetShortPathName, gle=%d\\n\", GetLastError() );\n\t\tfree(p);\n\t\treturn NULL;\n\t}\n\t// now convert to single bytes\n\tfor (int i = 0; i < MAX_PATH; i++ ) {\n\t\tWCHAR w = p[i];\n\t\tif ( !w )\n\t\t\tbreak;\n\t\tif ( w > (WCHAR)0xFF ) {\n\t\t\tdprint(\"error: GetShortPathName returned unicode??\\n\");\n\t\t\tfree(p);\n\t\t\tSetLastError(ERROR_INVALID_NAME);\n\t\t\treturn NULL;\n\t\t}\n\t\tp[i] = 0;\n\t\t((PUCHAR)p)[i] = w & 0xFF;\n\t}\n\n\td3print(\"de-unicoded name [%ws]=[%hs]\\n\", tstr, p );\n\n\treturn (PSTR)p;\n}\n#endif //UNICODE\n\n"
  },
  {
    "path": "external/verpatch/src/relstamp.cpp",
    "content": "// relstamp.cpp\n//\n// pa04 fixed bug in productversion aliases (/pv)\n// pa03 fixed up for VC2008 Express\n\n#include \"stdafx.h\"\n#include \"relstamp.h\"\n#include \"vs_version.h\"\n#pragma comment(lib, \"version\")\n#include \"peExtras.h\"\n\n// Options\nstruct cmd_params {\n\tbool PatchMode;\t\t\t\t\t// true: patch version descr. of the input file. false: create and replace.\n\tbool DbgImportOnly;\t\t\t\t// debug: test import only, don't modify file\n\tbool DbgLoopbackTest;\t\t\t// reparse generated blob\n\t// For import & patch mode\n\tbool DumpImportVerAsRC;\t\t\t// dump input version info in RC format\n\tbool PreserveOriginalFilename;\t// false: set to actual filename\n\tbool PreserveInternalFilename;\t// false: set to actual filename\n\tbool PreserveStringVersionTail; // true: save appendix of fileversion, productversion strings\n\n\tbool fClearPdbPath;\n\tbool fNoPreserveExtraAppendedData;\t// true = do not check for extra data appended to end of file\n\n\tbool cmd_arg_parse( int argc, _TCHAR *argv[], PCTSTR *fname, struct file_ver_data_s *fvd ); \n//\tcmd_params() {} // ctor\n} g_params;\n\n// Struct to hold a resource:\nstruct ResDesc \n{\n\tPUCHAR m_data;\n\tDWORD m_cbdata;\n\tULONG_PTR m_type; // string ptr or numeric id\n\tULONG_PTR m_name; // string ptr or numeric id\n\tWORD m_language;\n\n\tResDesc() : m_data(0), m_cbdata(0) {}\n\n\tResDesc( void *data, unsigned cbData, ULONG_PTR typeId, \n\t\tULONG_PTR name_id, WORD langId = LANG_NEUTRAL ) \n\t\t: m_data((PUCHAR)data), m_cbdata(cbData), m_type(typeId), \n\t\t\tm_name(name_id), m_language(langId)\t{}\n\n\tfriend bool addResourceFromFile( PCTSTR resfile, UINT32 id_flags );\n};\n\nstatic \nResDesc *aRes[_A_MAX_N_RES + 1];\n\nstatic\nvoid addUpdRes( ResDesc *rd ) \n{\n\tfor (int i = 0; i < ARRAYSIZE(aRes) - 1; i++) {\n\t\tif ( NULL == aRes[i] ) {\n\t\t\taRes[i] = rd;\n\t\t\treturn;\n\t\t}\n\t}\n\tdprint(\"ERROR: Too many resources added\\n\");\n\tthrow \":TooManyRes\";\n\treturn;\n}\n\n\nBOOL fillCompanyInfo( __out file_ver_data_s *fvd )\n{\n\t// default\n\tfvd->addTwostr( L\"CompanyName\", DEF_COMPANY_NAME );\n\tfvd->addTwostr( L\"LegalCopyright\", DEF_COPYRGT ); //\"Copyright (c) 2009\"\n\treturn TRUE;\n}\n\n\nBOOL fillProductInfo( __out file_ver_data_s *fvd )\n{\n\t// default\n\tfvd->addTwostr( L\"ProductName\", DEF_PRODUCT_NAME );\n\tfvd->pv_1 = 1;\n\tfvd->pv_2 = 0;\n\tfvd->pv_3 = 0;\n\tfvd->pv_4 = 0;\n\treturn TRUE;\n}\n\n\n// callback class for ParseBinaryVersionResource()\nclass VerCallback1 : public IParseVerStrCallback\n{\n\tfile_ver_data_s *m_vd;\n\tint m_numcalled;\n\tpublic:\n\tVerCallback1(file_ver_data_s *fvd) : m_numcalled(0), m_vd(fvd) {};\n\tvoid callback( PCWSTR name, PCWSTR value ) override;\n};\n\n// Callback to import version strings\nvoid VerCallback1::callback( PCWSTR name, PCWSTR value )\n{\n\td3print( \"callback #%d [%ws]= [%ws]\\n\", m_numcalled, name, value );\n\t++m_numcalled;\n\n\t// filter off FileVersion, Product Version. always take from FIXED_INFO.\n\tif ( 0 == _wcsicmp(name, L\"FileVersion\") ) {\n\t\t// Optional tail: \"1.2.3.4 tail\"\n\t\tPCTSTR tail = wcschr(value, _T(' '));\n\t\tif ( tail ) {\n\t\t\twhile( *tail == _T(' ') ) tail++;\n\t\t\tif (*tail) m_vd->sFileVerTail = tail;\n\t\t}\n\t\treturn;\n\t}\n\n\tif ( 0 == _wcsicmp(name, L\"ProductVersion\") ) {\n\t\t// Optional tail: \"1.2.3.4 tail\"\n\t\tPCTSTR tail = wcschr(value, _T(' '));\n\t\tif ( tail ) {\n\t\t\twhile( *tail == _T(' ') ) tail++;\n\t\t\tif (*tail) m_vd->sProductVerTail = tail;\n\t\t}\n\t\treturn;\n\t}\n\n\tif ( 0 == _wcsicmp(name, L\"@LANG\") ) {\n\t\tstatic const WCHAR sigLangNeutral[] = L\"000004b0\"; /* LANG_NEUTRAL */\n\t\tstatic const WCHAR sigLangEng[] = L\"040904B0\"; /* LANG_ENGLISH/SUBLANG_ENGLISH_US, Unicode CP */\n\n\t\tif ( 0 == _wcsicmp( value, sigLangEng ) )\n\t\t\tm_vd->langid = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);\n\t\telse if ( 0 == _wcsicmp( value, sigLangNeutral ) )\n\t\t\tm_vd->langid = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL);\n\t\telse {\n\t\t\tdprint(\"Resource languages not supported yet! id=%ws\", value);\n\t\t\tm_vd->langid = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL);\n\t\t}\n\t\treturn;\n\t}\n\n\tm_vd->addTwostr( name, value );\n}\n\nBOOL fillFileInfo( __out file_ver_data_s *fvd, PCTSTR fpath )\n{\n\tUINT xname, xdot_ext;\n\tif ( !fileGetNameExtFromPath( fpath, &xname, &xdot_ext) ) {\n\t\tdtprint(_T(\"Error parsing the file name\\n\") );\n\t\treturn FALSE;\n\t}\n\n\tPCTSTR pfilename = (PCTSTR)( (PUCHAR)fpath + xname );\n\tPCTSTR pdot_ext  = (PCTSTR)( (PUCHAR)fpath + xdot_ext );\n\n\tif ( g_params.PatchMode ) \n\t{\n\t\t// Import version blob from the file\n\t\tPUCHAR verinfo = (PUCHAR)calloc( _MAX_VERS_SIZE_CB, 1 );\n\t\tASSERT(verinfo);\n\t\tif ( !fileReadVersionInfo( fpath, verinfo, _MAX_VERS_SIZE_CB ) ) {\n\t\t\tdprint(\"error reading version info from the file, err=%d\\n\", GetLastError());\n\t\t\tif (ERROR_RESOURCE_TYPE_NOT_FOUND == GetLastError() )\n\t\t\t\tdprint(\"The file does not have a version resource\\n\");\n\t\t\tif (ERROR_RESOURCE_DATA_NOT_FOUND == GetLastError() )\n\t\t\t\tdprint(\"The file could not be found or is not executable/dll\\n\");\n\t\t\tfree(verinfo);\n\t\t\treturn FALSE;\n\t\t}\n\n\t\tVS_FIXEDFILEINFO *fxi = NULL;\n\t\tVerCallback1 mycb(fvd);\n\t\tif ( !ParseBinaryVersionResource( verinfo, _MAX_VERS_SIZE_CB, \n\t\t\t&fxi, &mycb, g_params.DumpImportVerAsRC ) ) {\n\t\t\tdprint(\"error parsing version info from the file\\n\");\n\t\t\tfree(verinfo);\n\t\t\treturn FALSE;\n\t\t}\n\n\t\tfvd->v_1 = HIWORD(fxi->dwFileVersionMS);\n\t\tfvd->v_2 = LOWORD(fxi->dwFileVersionMS);\n\t\tfvd->v_3 = HIWORD(fxi->dwFileVersionLS); \n\t\tfvd->v_4 = LOWORD(fxi->dwFileVersionLS);\n\n\t\tfvd->pv_1 = HIWORD(fxi->dwProductVersionMS);\n\t\tfvd->pv_2 = LOWORD(fxi->dwProductVersionMS);\n\t\tfvd->pv_3 = HIWORD(fxi->dwProductVersionLS);\n\t\tfvd->pv_4 = LOWORD(fxi->dwProductVersionLS);\n\n\t\tfvd->dwFileFlags = (fxi->dwFileFlags & fxi->dwFileFlagsMask);\n\t\tfvd->dwFileType = fxi->dwFileType;\n\t\tfvd->dwFileSubType = fxi->dwFileSubtype;\n\n\t\tif (fxi->dwFileOS != VOS_NT_WINDOWS32 && fxi->dwFileOS != VOS__WINDOWS32 ) {\n\t\t\tdprint( \"warning: imported dwFileOS not WINDOWS32 (=%#x)\\n\", fxi->dwFileOS);\n\t\t}\n\n\t\tfree(verinfo);\n\t} // patch mode\n\n\tif ( !g_params.PreserveOriginalFilename ) {\n\t\tfvd->addTwostr(L\"OriginalFilename\", pfilename);\n\t}\n\n\tif ( !g_params.PreserveInternalFilename ) {\n\t\tfvd->addTwostr(L\"InternalName\", pfilename);\n\t}\n\n\t// Fill in per file info:\n\tif ( VFT_UNKNOWN == fvd->dwFileType ) {\n\t\td3tprint(_T(\"file ext=%s\\n\"), pdot_ext);\n\t\tif ( 0 == _tcsicmp( pdot_ext, _T(\".exe\") ))\n\t\t\tfvd->dwFileType = VFT_APP;\n\t\tif ( 0 == _tcsicmp( pdot_ext, _T(\".sys\") ))\n\t\t\tfvd->dwFileType = VFT_DRV;\n\t\tif (  0 == _tcsicmp( pdot_ext, _T(\".dll\") ))\n\t\t\tfvd->dwFileType = VFT_DLL;\n\t}\n\n\tif ( !fvd->getValStr(L\"FileDescription\") ) {\n\t\t// Use filename as default FileDescription\n\t\tfvd->addTwostr( L\"FileDescription\", pfilename );\n\t}\n\n\treturn TRUE;\n}\n\nBOOL parseFileVer( __out file_ver_data_s *fvd, PCTSTR arg )\n{\n\tunsigned n1=0,n2=0,n3=0,n4=0;\n\tint nf = _stscanf_s( arg, _T(\"%d.%d.%d.%d\"), &n1, &n2, &n3, &n4);\n\n\t// if less than 4 numbers given, they are minor\n\tswitch( nf ) {\n\t\tcase 1:\n\t\t\tfvd->v_4 = n1;\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tfvd->v_3 = n1; fvd->v_4 = n2;\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tfvd->v_2 = n1; fvd->v_3 = n2; fvd->v_4 = n3; \n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tfvd->v_1 = n1; fvd->v_2 = n2; fvd->v_3 = n3; fvd->v_4 = n4;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tdprint(\"error parsing version arg\\n\");\n\t\t\treturn FALSE;\n\t}\n\n\t// Optional tail: \"1.2.3.4 tail\"\n\t// If no tail found, don't replace existing.\n\tPCTSTR tail = _tcschr(arg, _T(' '));\n\tif ( tail ) {\n\t\twhile( *tail == _T(' ') ) tail++;\n\t\tfvd->sFileVerTail = (*tail) ? strUnEscape(tail) : NULL;\n\t}\n\n\treturn TRUE;\n}\n\nBOOL parseProductVer( __out file_ver_data_s *fvd, PCTSTR arg )\n{\n\tunsigned n1=0,n2=0,n3=0,n4=0;\n\tint nf = _stscanf_s( arg, _T(\"%d.%d.%d.%d\"), &n1, &n2, &n3, &n4);\n\n\t// if less than 4 numbers given, they are minor\n\tswitch( nf ) {\n\t\tcase 1:\n\t\t\tfvd->pv_4 = n1;\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tfvd->pv_3 = n1; fvd->pv_4 = n2;\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tfvd->pv_2 = n1; fvd->pv_3 = n2; fvd->pv_4 = n3; \n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tfvd->pv_1 = n1; fvd->pv_2 = n2; fvd->pv_3 = n3; fvd->pv_4 = n4;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tdprint(\"error parsing version arg\\n\");\n\t\t\treturn FALSE;\n\t}\n\n\t// Optional tail: \"1.2.3.4 tail\"\n\t// If no tail found, don't replace existing.\n\tPCTSTR tail = _tcschr(arg, _T(' '));\n\tif ( tail ) {\n\t\twhile( *tail == _T(' ') ) tail++;\n\t\tfvd->sProductVerTail = (*tail) ? strUnEscape(tail) : NULL;\n\t}\n\n\treturn TRUE;\n}\n\n\nBOOL updFileResources( LPCTSTR fname, __in ResDesc *ard[] )\n{\n\tif ( !ard[0] ) {\n\t\td2print(\"No resources to update\\n\");\n\t\treturn TRUE;\n\t}\n\n\t// open file, start update\n    BOOL bDeleteExistingResources = FALSE;\n\tBOOL ok = FALSE;\n\tint n_updated = 0;\n\tHANDLE rhandle = ::BeginUpdateResource( fname, bDeleteExistingResources );\n\tif ( !rhandle ) {\n\t\tdprint( \"Error opening file for update resources, err=%d\\n\", GetLastError() );\n\t\treturn FALSE;\n\t}\n\n\tfor (int i = 0; ; i++) {\n\t\tResDesc *rd = ard[i];\n\t\tif ( !rd )\n\t\t\tbreak;\n\n\t\tok = ::UpdateResource(\n\t\t\trhandle,\n\t\t\t(LPCTSTR)rd->m_type,\n\t\t\t(LPCTSTR)rd->m_name,\n\t\t\trd->m_language,\n\t\t\t(LPVOID)rd->m_data,\n\t\t\trd->m_cbdata\n\t\t\t);\n\n\t\tif (!ok) {\n\t\t\tdprint(\"UpdateResource #%d err=%d\\n\", i,  GetLastError());\n\t\t\tbreak;\n\t\t}\n\t\tn_updated++;\n\t}\n\n\td2print(\"Resources updated: %d\\n\", n_updated);\n\n\tBOOL r2 = ::EndUpdateResource( rhandle, !ok );\n\tif (!r2) {\n\t\tdprint(\"EndUpdateResource err=%d\\n\", GetLastError());\n\t\tok = FALSE;\n\t}\n\n\treturn ok;\n}\n\nlong parseFileSubType( PCTSTR ap )\n{\n\tif ( isdigit(*ap) )\n\t\treturn _tcstol( ap, NULL, 16 );\n\tif ( 0 == _tcsicmp(ap, _T(\"DRV_SYSTEM\")) ) \n\t\treturn VFT2_DRV_SYSTEM;\n\tif ( 0 == _tcsicmp(ap, _T(\"DRV_NETWORK\")) ) \n\t\treturn VFT2_DRV_NETWORK;\n\tif ( 0 == _tcsicmp(ap, _T(\"DRV_COMM\")) ) \n\t\t\treturn VFT2_DRV_COMM;\n\treturn 0;\n}\n\n\n////////////////////////////////////////////////////////////////////////\n// main\n////////////////////////////////////////////////////////////////////////\nint _tmain(int argc, _TCHAR* argv[])\n{\n\tstatic file_ver_data_s file_ver_data;\n\tPCTSTR fname;\n\tBOOL r;\n\n\tSetErrorMode( SEM_FAILCRITICALERRORS|SEM_NOOPENFILEERRORBOX );\n\tr = SetThreadLocale( LOCALE_INVARIANT );\n\n\tif ( !g_params.cmd_arg_parse( argc, argv, &fname, NULL ) ) {\n\t\treturn 1;\n\t}\n\n\td2tprint(_T(\"relstamp file=[%s]\\n\"), fname );\n\n\tr &= fillFileInfo( &file_ver_data, fname );\n\n\tif ( !g_params.PatchMode ) { // if not patch mode, read from INI\n\t\tr &= fillCompanyInfo( &file_ver_data );\n\t\tr &= fillProductInfo( &file_ver_data );\n\t}\n\n\t// Parse again, put the args into the data\n\tif ( !g_params.cmd_arg_parse( argc, argv, &fname, &file_ver_data ) ) {\n\t\tdprint(\"Error parsing command args 2 pass!\\n\");\n\t\tr = FALSE;\n\t}\n\n\tif ( !r ) {\n\t\tdprint(\"Some of actions failed, exiting\\n\");\n\t\treturn 1;\n\t}\n\n\tPUCHAR verdata = NULL;\n\tr = makeVersionResource( &file_ver_data, &verdata );\n\tif ( !r ) return 1;\n\n\tif ( g_params.DbgLoopbackTest )\n\t{\t// loopback test for vers res parser\n\t\tVS_FIXEDFILEINFO *fxi = NULL;\n\t\tVerCallback1 mycb(&file_ver_data);\n\t\tdprint(\"dbg: begin reparse\\n\");\n\t\tr = ParseBinaryVersionResource( verdata, _MAX_VERS_SIZE_CB, &fxi, &mycb, g_params.DumpImportVerAsRC );\n\t\tdprint(\"dbg: end reparse\\n\");\n\t}\n\n\t// Save extra data possibly appended to the exe file\n\tDWORD extrasSize = 0;\n\tvoid *extras;\n\tif ( !g_params.fNoPreserveExtraAppendedData ) {\n\t\tr = getFileExtraData(fname, &extras, &extrasSize);\n\t\tif ( !r ) {\n\t\t\tdprint(\"Failed to read extra data\\n\");\n\t\t\treturn 2;\n\t\t}\n\t\tif ( extrasSize ) {\n\t\t\td2print(\"Found extra %d bytes appended to the file\\n\", extrasSize);\n\t\t}\n\t}\n\n\tif( g_params.DbgImportOnly ) {\n\t\tdprint(\"read only, exiting\\n\");\n\t\treturn 0;\n\t}\n\n\t// Add the version to resources update:\n\taddUpdRes( \n\t\tnew ResDesc( \n\t\t\t(PVOID)verdata, \n\t\t\t*((PWORD)verdata), \n\t\t\t(ULONG_PTR)RT_VERSION, \n\t\t\t(ULONG_PTR)MAKEINTRESOURCE(VS_VERSION_INFO), \n\t\t\t file_ver_data.langid\n\t\t\t)\n\t);\n\n\tr = updFileResources( fname, &aRes[0] );\n\tif ( !r ) {\n\t\tdprint(\"Update file resources failed, the file may be damaged\\n\");\n\t\treturn 2;\n\t}\n\n\tif ( extrasSize ) {\n\n\t\t// Restore extra data appended to end of exec\n\t\tr = appendFileExtraData(fname, extras, extrasSize);\n\t\tif ( !r ) {\n\t\t\tdprint(\"Failed to restore extra data, the file may be damaged\\n\");\n\t\t\treturn 3;\n\t\t}\n\n\t} else {\n\n\t\t// Re-checksum\n\t\tr = updFileChecksum( fname, g_params.fClearPdbPath );\n\t\tif ( !r ) {\n\t\t\tdprint(\"Update file checksum failed, the file may be damaged\\n\");\n\t\t\treturn 3;\n\t\t}\n\n\t}\n\n\td2print(\"ok\\n\");\n\treturn 0;\n}\n\n\n// Check if the string key name is alias, return the correct invariant key name:\n// See ver-res.txt\nLPCTSTR aliasToStringKey( LPCTSTR key )\n{\n\tif ( 0 == _tcsicmp(key, _T(\"comment\"))) return _T(\"Comments\");\n\tif ( 0 == _tcsicmp(key, _T(\"company\"))) return _T(\"CompanyName\");\n\tif ( 0 == _tcsicmp(key, _T(\"description\"))) return _T(\"FileDescription\");\n\tif ( 0 == _tcsicmp(key, _T(\"desc\"))) return _T(\"FileDescription\");\n\tif ( 0 == _tcsicmp(key, _T(\"title\"))) return _T(\"InternalName\");\n\tif ( 0 == _tcsicmp(key, _T(\"copyright\"))) return _T(\"LegalCopyright\");\n\tif ( 0 == _tcsicmp(key, _T(\"(c)\"))) return _T(\"LegalCopyright\");\n\tif ( 0 == _tcsicmp(key, _T(\"trademarks\"))) return _T(\"LegalTrademarks\");\n\tif ( 0 == _tcsicmp(key, _T(\"(tm)\"))) return _T(\"LegalTrademarks\");\n\tif ( 0 == _tcsicmp(key, _T(\"tm\"))) return _T(\"LegalTrademarks\");\n\tif ( 0 == _tcsicmp(key, _T(\"product\"))) return _T(\"ProductName\");\n\tif ( 0 == _tcsicmp(key, _T(\"pb\"))) return _T(\"PrivateBuild\");\n\tif ( 0 == _tcsicmp(key, _T(\"sb\"))) return _T(\"SpecialBuild\");\n\tif ( 0 == _tcsicmp(key, _T(\"build\"))) return _T(\"SpecialBuild\");\n\n\tif ( 0 == _tcsicmp(key, _T(\"fileversion\"))) {\n\t\tdprint(\"do NOT use FileVersion with /s option, see usage!\\n\");\n\t}\n\n\tif ( 0 == _tcsicmp(key, _T(\"language\"))) {\n\t\tdprint(\"do NOT use Language with /s option, this won't work.\\n\");\n\t}\n\n\t//d3tprint(_T(\"alias not found %s\\n\"), key);\n\treturn key;\n}\n\n\n///////////////////////////////////////////////////////////////////////\n// Command args\n//\n//TODO: handle escapes in strings passed on command line\n//      mode without version res: only bin patches \n// \n///////////////////////////////////////////////////////////////////////\nbool cmd_params::cmd_arg_parse( int argc, _TCHAR *argv[], PCTSTR *fname, \n\t__out_opt struct file_ver_data_s *fvd ) \n{\n\tbool firstPass = false;\n\tstatic file_ver_data_s my_fvd;\n\tif ( !fvd ) {\n\t\tfirstPass = true;\n\t\tfvd = &my_fvd;\n\t}\n\n\tint pos_args = 0;\n\tint patch_actions = 0;\n\n\tPatchMode = true; //default mode -pa04\n\n\tfor( int i = 1; i < argc; i++ ) {\n\t\tPCTSTR ap = argv[i];\n\t\tif (!ap) \n\t\t\tbreak; //done\n\n\t\tif ( *ap == _T('/') || *ap == _T('-') ) {\n\t\t\tap++;\n\n\t\t\tif ( argmatch(_T(\"?\"), ap ) )\n\t\t\t\t{ showUsage(); return false; }\n\t\t\telse if ( argmatch(_T(\"fn\"), ap) )  // keep original filename\n\t\t\t\tPreserveInternalFilename = PreserveOriginalFilename = true;\n\t\t\telse if ( argmatch(_T(\"vo\"), ap) ) // dump input res. desc. as RC source\n\t\t\t\tDumpImportVerAsRC = true;\n\t\t\telse if ( argmatch(_T(\"xi\"), ap) ) {  // read only, don't patch\n\t\t\t\tDbgImportOnly = true;\t// dbg\n\t\t\t}\n\t\t\telse if ( argmatch(_T(\"xlb\"), ap) )  // reparse created res.desc. (self test)\n\t\t\t\tDbgLoopbackTest = true;  //dbg \n\t\t\telse if ( argmatch(_T(\"sc\"), ap) ) { // /sc \"comment\"\n\t\t\t\tap = argv[++i];\tASSERT(ap);\n\t\t\t\tpatch_actions++;\n\t\t\t\tif( !fvd->addTwostr( _T(\"Comments\"), strUnEscape(ap) ) ) {\n\t\t\t\t\tdtprint(_T(\"Error adding string:[%s]\\n\"), ap);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( argmatch(_T(\"s\"), ap) ) { \n\t\t\t\t//Add a string to version res: /s name \"comment\"\n\t\t\t\tPCTSTR ns = argv[++i];\tASSERT(ns);\n\t\t\t\tap = argv[++i];\tASSERT(ap);\n\t\t\t\tpatch_actions++;\n\n\t\t\t\tif( !fvd->addTwostr( aliasToStringKey(ns), strUnEscape(ap) ) ) {\n\t\t\t\t\tdtprint(_T(\"Error adding string:[%s]\\n\"), ap);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if( argmatch(_T(\"pv\"), ap) ||\n\t\t\t\t\targmatch(_T(\"prodver\"), ap)  ||\n\t\t\t\t\targmatch(_T(\"productver\"), ap)  ||\n\t\t\t\t\targmatch(_T(\"productversion\"), ap) ) {\n\t\t\t\t// product version string has same form as the file version arg (positional)\n\t\t\t\tap = argv[++i];\tASSERT(ap);\n\t\t\t\tif ( !parseProductVer( fvd, ap ) ) {\n\t\t\t\t\tdprint(\"bad product version arg, see usage (/?)\\n\");\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tpatch_actions++;\n\t\t\t}\n\t\t\telse if (argmatch(_T(\"vft2\"), ap) ) { // version subtype\n\t\t\t\tap = argv[++i];\tASSERT(ap);\n\t\t\t\tlong n = parseFileSubType(ap);\n\t\t\t\tif ( !(n >= 0 && n <= 0xFFFF) ) {\n\t\t\t\t\tdtprint(_T(\"Bad subtype \\\"%s\\\". For usage: /?\\n\"), ap);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tfvd->dwFileSubType = (USHORT)n;\n\t\t\t\tpatch_actions++;\n\t\t\t}\n\t\t\telse if ( argmatch(_T(\"rpdb\"), ap) ) {\n\t\t\t\tg_params.fClearPdbPath = true;\n\t\t\t\tpatch_actions++;\n\t\t\t}\n\t\t\telse if ( argmatch(_T(\"va\"), ap) ) { // auto generate version desc.\n\t\t\t\tPatchMode = false;\n\t\t\t\tpatch_actions++;\n\t\t\t}\n\t\t\telse if ( argmatch(_T(\"rf\"), ap) ) {\n\t\t\t\t// Add a resource from file: /rf #<number> filename\n\t\t\t\t// For now, use numeric ids only. High 16 bits can be used for type, etc.\n\t\t\t\tULONG res_id = 0;\n\t\t\t\tap = argv[++i];\tASSERT(ap);\n\t\t\t\tif ( *ap++ != _T('#') || 0 == (res_id = _tcstol( ap, NULL, 16 )) ) {\n\t\t\t\t\tdtprint(_T(\"Resource id must be #hex_number\\n\"), ap);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tap = argv[++i];\tASSERT( ap && *ap != _T('/') && *ap != _T('-') );\n\t\t\t\t// only during 2nd pass:\n\t\t\t\tif ( !firstPass && !addResourceFromFile( ap, res_id ) ) {\n\t\t\t\t\tdtprint(_T(\"Error adding resource file [%s] id=%#X\\n\"), ap, res_id);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( argmatch(_T(\"noed\"), ap) ) {\n\t\t\t\t// Do not check for extra data appended to exe file\n\t\t\t\tg_params.fNoPreserveExtraAppendedData = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdtprint(_T(\"Unknown option \\\"%s\\\". For usage: /?\\n\"), ap);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else {\n\t\t\t// position args:\n\t\t\tswitch(pos_args++) {\n\t\t\t\tcase 0:\n\t\t\t\t\t*fname = ap; //ex d:/stuff/foo.sys\n\t\t\t\t\tbreak; \n\t\t\t\tcase 1:\n\t\t\t\t\tif ( parseFileVer( fvd, ap ) ) {\n\t\t\t\t\t\tpatch_actions++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdprint(\"bad version arg, see usage (/?)\\n\");\n\t\t\t\t\treturn false;\n\t\t\t\tdefault:\n\t\t\t\t\tdprint(\"Too many args, see usage (/?)\\n\");\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( 0 == pos_args ) {\n\t\tshowUsage();\n\t\treturn false;\n\t}\n\n\tif ( 0 == patch_actions )\n\t\tDbgImportOnly = true; //dbg\n\n\t// flags: SpecialBuild fVerBeta fVerDebug?\n\n\treturn true;\n}\n\n////////////////////////////////////////////////////////////////////////\n// misc. utils\n////////////////////////////////////////////////////////////////////////\n\n\nLPWSTR stralloc( __in PCSTR s )\n{\n\tASSERT(s);\n\tsize_t n = strlen(s);\n\tASSERT( n < (256));\n\tLPWSTR p = (LPWSTR)malloc( (n + 1) * sizeof(WCHAR) );\n\tASSERT( p );\n\tfor ( size_t i = 0; i <= n; i++ )\n\t\tp[i] = s[i];\n\treturn p;\n}\n\nLPWSTR stralloc( __in PCWSTR s )\n{\n\tASSERT(s);\n\tPWSTR p = _wcsdup(s);\n\tASSERT(p);\n\treturn p;\n}\n\n// return byte offset to name and .ext parts of filename\nBOOL fileGetNameExtFromPath( __in PCTSTR path, __out PUINT pname, __out PUINT pext )\n{\n\tASSERT(path);\n\tPTSTR name = (PTSTR)calloc( 2*MAX_PATH, sizeof(TCHAR));\n\tASSERT(name);\n\tPTSTR ext = name + MAX_PATH;\n\n\terrno_t e;\n\te = _tsplitpath_s(path, NULL, 0 , NULL, 0, name, MAX_PATH, ext, 10);\n\tif ( e == ERROR_SUCCESS ) {\n\t\tsize_t lname = _tcslen(name);\n\t\tsize_t lext = _tcslen(ext);\n\t\t*pname = (UINT)(_tcslen(path) - lname - lext) * sizeof(TCHAR);\n\t\t*pext = *pname + (lname * sizeof(TCHAR));\n\t} else {\n\t\tdtprint(_T(\"Error parsing filename: err=%d path=[%s]\\n\"), e, path);\n\t}\n\n\tif ( name ) free( name );\n\n\treturn e == ERROR_SUCCESS;\n}\n\n// Read VS_VERSION resource blob from a file by name\nBOOL fileReadVersionInfo( __in PCTSTR fname, __out PUCHAR buf, __in unsigned size)\n{\n\tBOOL r;\n\tr = GetFileVersionInfo(  fname, NULL /*reserved*/, (DWORD)size, (LPVOID)buf );\n\treturn r;\n}\n\n// Format a string escaped for RC: quotes, symbols (R) (C) and so on\nPCWSTR strEscape( __in PCWSTR ws )\n{\n\tif ( !ws || !*ws ) {\n\t\treturn (PCWSTR)L\"\\\\0\";\n\t}\n\treturn ws; //$$$ TODO. for now, unescaped text will be printed, edit manually\n}\n\n// Unescape a string escaped for RC: quotes, symbols (R) (C) and so on\nPCWSTR strUnEscape( __in PCWSTR ws )\n{\n\treturn ws; //$$$ TODO\n}\n\nbool argmatch(PCTSTR sw, PCTSTR cmp )\n{\n\tif ( 0 == _tcsicmp(sw, cmp) ) return true;\n\treturn false;\n}\n\n\n//////////////////////////////////////////////////////////////////////////\n// Add raw binary resource from file.\n// Low 16 bit of id_flags = resource ID. Bitmask FF0000 = type (0=RCDATA). High byte reserved.\n//////////////////////////////////////////////////////////////////////////\nbool addResourceFromFile( PCTSTR resfile, UINT32 id_flags )\n{\n\tUINT64 xFileSize;\n\tHANDLE fh = CreateFile(resfile, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, NULL);\n\n\tif (INVALID_HANDLE_VALUE == fh ) {\n\t\tdtprint(_T(\"Error opening res. file %s err=%d\\n\"), resfile, GetLastError());\n\t\treturn false;\n\t}\n\n\tif ( !GetFileSizeEx( fh, (PLARGE_INTEGER)&xFileSize ) ) {\n\t\tdtprint(_T(\"Error get file size %s\\n\"), resfile);\n\t\tCloseHandle(fh);\n\t\treturn false;\n\t}\n\n\tif ( xFileSize > _A_MAX_RES_CB ) {\n\t\tdtprint(_T(\"Error: file size too large %s %I64d K\\n\"), resfile, (xFileSize/1024));\n\t\tCloseHandle(fh);\n\t\treturn false;\n\t}\n\n\tDWORD dwFileSize = (DWORD)xFileSize;\n\tPUCHAR dp = (PUCHAR)calloc( dwFileSize + 4, 1 ); // round up to 4 bytes\n\tASSERT(dp);\n\tDWORD cbread;\n\tif ( !ReadFile( fh, (LPVOID)dp, dwFileSize, &cbread, NULL ) || cbread != dwFileSize ) {\n\t\tdtprint(_T(\"Error reading file %s\\n\"), resfile);\n\t\tCloseHandle(fh);\n\t\tfree(dp);\n\t\treturn false;\n\t}\n\n\tCloseHandle(fh);\n\n\t// round up to 4 bytes\n\tdwFileSize = (dwFileSize + 3) & ~3; \n\n\tULONG restype = (id_flags >> 16) & 0xFF;\n\tif ( 0 == restype ) restype = (ULONG)RT_RCDATA;\n\n\taddUpdRes( new ResDesc( dp, dwFileSize, restype, id_flags & 0xFFFF ) );\n\n\treturn true;\t\n}\n\n\n#if 1\n// Get a resource (pointer and size)\n// hm: module handle. 0 is the exe file\nbool getResource( HMODULE hm, DWORD rtype, DWORD rid, __out LPCVOID *p, __out PDWORD size )\n{\n\tHRSRC hrs = FindResourceEx( hm, (LPCTSTR)rtype, (LPCTSTR)rid, 0 /*MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)*/ );\n\tif ( !hrs ) {\n\t\td2print(\"cannot find res. %#x, err=%d\\n\", rid, GetLastError());\n\t\treturn false;\n\t}\n\n\tDWORD rsize = SizeofResource(hm, hrs);\n\tif ( rsize < sizeof (DWORD) ) {\n\t\td2print(\"res. size = 0??\\n\");\n\t\treturn false;\n\t}\n\n\tHGLOBAL hg = LoadResource( hm, hrs );\n\tif ( !hg ) {\n\t\td2print(\"err LoadResource %d\\n\", GetLastError() );\n\t\treturn false;\n\t}\n\t\n\t*p = LockResource( hg );\n\t*size = rsize;\n\treturn !!(*p) ;\n}\n\n\n////////////////////////////////////////////////////////////////////////////////\n// USAGE\n// How to add the help text:\n// - Put the text in a file (ex. usage.txt)\n// - make a copy of this exe file\n// - use /rf #64 <file.txt> to attach this text file to the copy of the program\n// See ver-self.cmd for a working example (this is also a kind of unit test :)\n////////////////////////////////////////////////////////////////////////////////\nvoid showUsage()\n{\n\tconst ULONG usage_txt_id = 0x64; //100\n\tconst ULONG usage_txt_type = (ULONG)(ULONG_PTR)RT_RCDATA;\n\tconst void *p;\n\tDWORD len;\n\tif ( !getResource( 0, usage_txt_type, usage_txt_id, &p, &len ) ) {\n\t\tdprint(\"No usage text! See readme.txt for instructions how to add it.\\n\");\n\t\treturn;\n\t}\n\tfwrite(p, len, 1, stderr);\n}\n\n#else\nvoid showUsage()\n{\n\tdprint(\"verpatch r2 (2009/05/31)\\n\");\n\tdprint(\"Usage: verpatch filename [version] [/options]\\n\");\n\tdprint(\"\\nOptions:\\n\");\n\tdprint(\" /sc \\\"comment\\\"\\t- add Comments string\\n\"); // todo: escapes\n\tdprint(\" /s name \\\"value\\\"\\t- add/replace any version resource string\\n\"); // todo: escapes\n\tdprint(\" /va\\t- create a default version resource\\n\");\n\tdprint(\" /vft2 num\\t- specify driver type (VFT2_xxx, see winver.h)\\n\");\n\tdprint(\" /fn\\t- preserve Original filename, Internal name in the file version info\\n\");\n\tdprint(\" /vo\\t- output the file version info in RC format\\n\");\n\tdprint(\" /xi\\t- test mode, do not patch the file\\n\");\n\tdprint(\" /rpdb\\t- remove path to .pdb in debug information\\n\");\n\tdprint(\" /rf #hex-id file - add a resource from file (see readme)\\n\");\n\tdprint(\"\\n\\nExamples:\\n\");\n\tdprint(\"  verpatch d:\\\\foo.dll 1.2.33.44 /sc \\\"holy cow, it works!\\\"\\n\");\n\tdprint(\"  verpatch d:\\\\foo.sys \\\"33.44 release\\\" /fn\\n\");\n\tdprint(\"  verpatch d:\\\\foo.exe 1.2.3.4 /rf #9 driver.sys\\n\");\n}\n#endif\n"
  },
  {
    "path": "external/verpatch/src/relstamp.h",
    "content": "// relstamp R2\n\n#pragma once\n\n// Defs for Windows version resource\n// http://msdn.microsoft.com/en-us/library/ms646997(VS.85).aspx\n#define _MAX_VERS_SIZE_CB 4096\n#define _MAX_VER_STRING_LEN_CCH 255\n#define _MAX_VER_CUSTOM_STRINGS 16\n#define _A_MAX_N_RES 8\n#define _A_MAX_RES_CB (500*1024)\n\n#if ( 1 && !defined(DEF_COMPANY_NAME) )\n#define DEF_COMPANY_NAME\t_T(\" \")\n#define DEF_COPYRGT\t\t\t_T(\"Copyright (c) 2009\")\n#define DEF_PRODUCT_NAME\t_T(\" \")\n#endif\n\n#define dprint(fmt, ...) printf(fmt, __VA_ARGS__)\n#define dtprint(tfmt, ...) _tprintf(tfmt, __VA_ARGS__)\n\n#ifdef NDEBUG\n#undef NDEBUG\n#endif\n#define ASSERT assert\n\n#ifndef _A_NOISE_DBG\n#define _A_NOISE_DBG 1\n#endif\n\n#if _A_NOISE_DBG\n#define d2print(fmt, ...) dprint(fmt, __VA_ARGS__)\n#define d2tprint(tfmt, ...) dtprint(tfmt,  __VA_ARGS__)\n#else\n#define d2print(fmt, ...) __noop(fmt, __VA_ARGS__)\n#define d2tprint(tfmt, ...) __noop(tfmt, __VA_ARGS__)\n#endif //_A_NOISE_DBG\n\n#if ( _A_NOISE_DBG > 1 )\n#define d3print d2print\n#define d3tprint d2tprint\n#else\n#define d3print(fmt, ...) __noop(fmt, __VA_ARGS__)\n#define d3tprint(tfmt, ...) __noop(tfmt, __VA_ARGS__)\n#endif //_A_NOISE_DBG\n\n// Format a string escaped for RC: quotes, (R), (C) and so on\nPCWSTR strEscape( __in PCWSTR ws );\nPCWSTR strUnEscape( __in PCWSTR ws );\n\n// strdup likes: \nLPWSTR stralloc( __in PCSTR s );\nLPWSTR stralloc( __in PCWSTR s );\n// Get name, ext from full filename\nBOOL fileGetNameExtFromPath( __in PCTSTR path, __out PUINT pname, __out PUINT pext );\nBOOL fileReadVersionInfo( __in PCTSTR fname, __out PUCHAR buf, __in unsigned size);\n\n// 3state flag:\nenum f3state { F3NOTSET, F3FALSE, F3TRUE };\n\nvoid showUsage();\nbool argmatch(__in PCTSTR sw, __in PCTSTR cmp );\n\nBOOL updFileChecksum( LPCTSTR fname, bool fRemovePdbPath = false );\n"
  },
  {
    "path": "external/verpatch/src/stdafx.cpp",
    "content": "// stdafx.cpp : source file that includes just the standard includes\n// relstamp.pch will be the pre-compiled header\n// stdafx.obj will contain the pre-compiled type information\n\n#include \"stdafx.h\"\n\n// TODO: reference any additional headers you need in STDAFX.H\n// and not in this file\n"
  },
  {
    "path": "external/verpatch/src/stdafx.h",
    "content": "// stdafx.h : include file for standard system include files,\n// or project specific include files that are used frequently, but\n// are changed infrequently\n//\n\n#pragma once\n\n#include \"targetver.h\"\n\n#define WIN32_LEAN_AND_MEAN 1\n\n#include <windows.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <tchar.h>\n#include <malloc.h>\n#include <string.h>\n#include <assert.h>\n#include <strsafe.h>\n\n\n// TODO: reference additional headers your program requires here\n"
  },
  {
    "path": "external/verpatch/src/targetver.h",
    "content": "#pragma once\n\n// The following macros define the minimum required platform.  The minimum required platform\n// is the earliest version of Windows, Internet Explorer etc. that has the necessary features to run \n// your application.  The macros work by enabling all features available on platform versions up to and \n// including the version specified.\n\n// Modify the following defines if you have to target a platform prior to the ones specified below.\n// Refer to MSDN for the latest info on corresponding values for different platforms.\n#ifndef _WIN32_WINNT\n#define _WIN32_WINNT 0x0501 //XP\n#endif\n\n"
  },
  {
    "path": "external/verpatch/src/usage.txt",
    "content": "verpatch r8 (2011-04-25)\nUsage: verpatch filename [version] [/options]\nOptions:\n /s name \"value\" - add or replace any version resource string.\n                   name: a string attribute. See readme.txt for reference.\n /sc \"comment\" - add Comments string (same as /s comment \"comment\")\n /va - create the version resource (use when the file has no version info, or to replace it)\n /pv <version> - specify Product version\n           /prodver, /productversion - same as /pv\n /fn - preserve Original Filename, Internal Name in the file version info\n /vo - output the file version info in RC format\n /xi - test mode, does not modify the file\n /vft2 num - specify driver type (one of VFT2_ values defined in winver.h)\n /rpdb - remove path to .pdb in debug information\n /rf #hex-id file - add a raw binary resource from file (see readme)\n /noed - discard any extra data attached at the end of file\n\nExamples:\n  verpatch d:\\foo.dll 1.2.33.44 /s comment \"fixed this and that\"\n  verpatch d:\\foo.dll \"33.44 released on %date%\"\n  verpatch d:\\foo.exe /va 1.2.3.4 /s desc \"my program\"\n  verpatch d:\\foo.exe 1.2.3.4 /rf #9 embedded-dll.dll\n"
  },
  {
    "path": "external/verpatch/src/ver-self.cmd",
    "content": ": Add version info resource with some strings and a resource file to verpatch.exe\n: (also kind of self test)\n\n: Run this in Release or Debug dir\n:\nset _ver=\"1.0.1.9 [%date%]\"\nset _s1=/s desc \"Version patcher tool\" /s copyright \"(C) 1998-2011, pavel_a\"\nset _s1=%_s1% /s pb \"pa\"\nset _s1=%_s1% /pv \"1.0.0.1 (free)\" \n\nset _resfile=/rf #64 ..\\usage.txt\n\n: Run a copy of verpatch on itself:\n\ncopy verpatch.exe v.exe || exit /b 1\n\nv.exe verpatch.exe /va %_ver% %_s1% %_s2% %_resfile% \n\n@echo Errorlevel=%errorlevel%\n"
  },
  {
    "path": "external/verpatch/src/verpatch-ReadMe.txt",
    "content": "\nVerpatch - a tool to patch win32 version resources on .exe or .dll files,\n\nVersion: 01-Nov-2009 (rev. #7 for CodeProject) edited\n\nVerpatch is a command line tool for adding and editing the version information\nof Windows executable files (applications, DLLs, kernel drivers)\nwithout rebuilding the executable.\n\nIt can also add or replace Win32 (native) resources, and do some other\nmodifications of executable files.\n\nVerpatch sets ERRORLEVEL 0 on success, otherwise errorlevel is non-zero.\nVerpatch modifies files in place, so please make copies of precious files.\n\n\nCommand line syntax\n===================\n\nverpatch filename [version] [/options]\n\nWhere\n - filename : any Windows PE file (exe, dll, sys, ocx...) that can have native resources\n - version : one to four decimal numbers, separated by dots, ex.: 1.2.3.4\n   Additional text can follow the numbers; see examples below. Ex.: \"1.2.3.4 extra text\"\n - options: see below\n\nCommon Options:\n\n/va - creates a version resource. Use when the file has no version resource at all,\n     or existing version resource should be replaced.\n     If this option not specified, verpatch will patch the version resourse found in the file.\n/s name \"value\" - add a version resource string attribute\n     The name can be either a full attribute name or alias; see below.\n/sc \"comment\" - add or replace Comments string (shortcut for /s Comments \"comment\")\n/pv <version>   - specify Product version\n    where <version> arg has same form as the file version (1.2.3.4 or \"1.2.3.4 text\")\n/fn - preserves Original filename, Internal name in the existing version resource of the file.\n\n\nOther options:\n\n/vo - outputs the version info in RC format to stdout.\n      This can be used with /xi to import a version resource from another file.\n      Output of /vo (text from #ifdef RC_INVOKED to #endif) can be saved to a .rc file and compiled with rc.\n/xi- test mode. does all operations but does not modify the file\n/xlb - test mode. Re-parses the version resource after modification.\n/rpdb - removes path to the .pdb file in debug information; leaves only file name.\n/rf #id file - add or replace a raw binary resource from file (see below)\n/noed - do not check for extra data appended to exe file\n/vft2 num - specify driver subtype (VFT2_xxx value, see winver.h)\n     The application type (VFT_xxx) is retained from the existing version resource of the file,\n     or filled automatically, based on the filename extension (exe->app, sys->driver, anything else->dll)\n\n\nExamples\n========\n\nverpatch d:\\foo.dll 1.2.33.44\n\t- replaces only the file version, all 4 numbers, \n\tthe Original file name and Internal name strings are set to \"foo.dll\".\n        File foo.dll should already have a version resource.\n\nverpatch d:\\foo.dll 33.44  /s comment \"a comment\"\n\t- replaces only two last numbers of the file version and adds a comment.\n        File foo.dll should already have a version resource.\n\nverpatch d:\\foo.dll \"33.44 special release\" /sc \"a comment\"\n\t- same as previous, with additional text in the version argument.\n\nverpatch d:\\foo.dll \"1.2.33.44\" /va /s description \"foo.dll\"\n     /s company \"My Company\" /s copyright \"(c) 2009\"\n   - adds or replaces version resource to foo.dll, with several string values.\n     ( all options should be one line)\n\nverpatch d:\\foo.dll /vo /xi\n\t- dumps the version resource in RC format, does not update the file.\n\n\n\t\nRemarks\n=======\n\nVerpatch replaces the version number in existing file version info resource\nwith the values given on the command line.\n\nIn \"patch\" mode (no /va option), the PE file should have a version resource,\nwhich is parsed, and then parameters specified on the command line are applied.\n\nIf the file has no version resource, or you want to discard the existing resource, use /va switch.\nAll nesessary strings can be specified with the /s option.\n\nThe command line can become very long, so you may want to use a batch file or script.\nSee the example batch files, how to create a version resource and\nspecify all parameters with /va.\n\nVerpatch can be run on same PE file any number of times.\n\nThe Version argument can be specified as 1 to 4 dot separated decimal numbers,\nor as quoted string containing additional text after the numbers.\nIf less than 4 numbers are given, they are considered as minor numbers.\nThe higher version parts are retained from existing version resource.\nFor example, if the existing version info has version number 1.2.3.4\nand 55.66 specified on the command line, the result will be 1.2.55.66.\n\nThe quotes surrounding string arguments are needed for the command shell (cmd.exe), \nfor any argument that contains spaces.\n\nThe program ensures that the version numbers in the binary part\nof the version structure and in the string part (as text) are same.\n\nBy default, Original File Name and Internal File Name are replaced to the actual filename.\nUse /fn to preserve existing values in the version resource.\n\nFor option /s, specify language-neutral string names, not translations\n( example: PrivateBuild, not \"Private Build Description\" ).\nNull values can be specified as empty string (\"\").\nSee below for the list of known string keys names and their aliases.\nThe examples above use the aliases.\n\nStrings for File version and Product version parameters are handled in a special way, \nthe /s switch can not be used to set them:\n - File version can be specified only as the 2nd positional argument\n - Product version can be specified using /pv switch\n\nThe /rf switch adds a resource from a file, or replaces a resource with same type and id.\nThe argument \"#id\" is a 32-bit hex number, prefixed with #.\nLow 16 bits of this value are resource id; can not be 0.\nNext 8 bits are resource type: one of RT_xxx symbols in winuser.h, or user defined.\nIf the type value is 0, RT_RCDATA (10) is assumed.\nHigh 8 bits of the #id arg are reserved0.\nThe language code of resources added by this switch is 0 (Neutral).\nNamed resource types and ids are not implemented.\nThe file is added as opaque binary chunk; the resource size is rounded up to 4 bytes\nand padded with zero bytes.\n\nThe program detects extra data appended to executable files, saves it and appends \nagain after modifying resources.\nSuch extra data is used by some installers, self-extracting archives and other applications.\nHowever, the way we restore the data may be not compatible with these applications.\nPlease, verify that executable files that contain extra data work correctly after modification.\nCommand switch /noed disables checking for extra data.\n\n\n====================================================================\nKnown string keys in VS_VERSION_INFO resource\n====================================================================\n\nThe aliases are for use with the /s switch, and are not case sensitive.\n\n-------------------+----+-------------------------------+------------\nInvariant(LN) name |note| English translation           | Alias\n-------------------+----+-------------------------------+------------\nComments                    Comments                      comment\nCompanyName           E     Company                       company\nFileDescription       E     Description                   description, desc\nFileVersion           *1    File version\nInternalName                Internal Name                 title\n                      *2    Language\nLegalCopyright        E     Copyright                     copyright, (c)\nLegalTrademarks       E      Legal Trademarks              tm, (tm)\nOriginalFilename            Original File Name\nProductName                 Product Name                  product\nProductVersion        *1    Product Version               productver, prodver\nPrivateBuild                Private Build Description     pb\nSpecialBuild                Special Build  Description    sb, build\nOleSelfRegister       A     - \nAssemblyVersion       N\n\nNotes\n*1: FileVersion, ProductVersion values should begin with same 1.2.3.4 version number as in the binary header.\nCan be any text. Windows Explorer displays the version numbers from the binary header. \n\n*2: The \"Language\" value is the name of the language code specified in the header of the string block of VS_VERSION_INFO resource.\n(or taken from VarFileInfo block?)\nIt is displayed by Windows Explorer, but is not contained in the version data.\n\nE: Displayed by Windows Explorer in Vista+\nA: Intended for some API (OleSelfRegister is used in COM object registration)\nN: Added by some .NET compilers. This version number is not contained in the\n    binary part of the version struct and can differ from the file version.\n    To change it, just use switch /s AssemblyVersion [value]\n\n====================================================================\n\n\n\nKnown issues and TO DO's:\n=========================\n\n - Does not work on old PE files that have link version 5.x (before VC6?)\n   No known workaround; this seems to be limitation of Windows UpdateResource API.\n\n - Does not work on signed files (TO DO)\n\n - Currenly implemented only US English and Language Neutral Unicode version resources.\n   MUI resource configuration manifests not checked.\n   New version resource will be created as Language Neutral.\n   Version info in other languages will be erroneously rewritten as English or Language Neutral- TO DO\n   \n   A second (language neutral) version resource may be added to a file\n   that already has a version resource in other language. Switch /va won't help.\n   TO DO: ensure that a file has only one version resource!\n   \n - When verpatch is invoked from command prompt, or batch file, the string\n   arguments can contain only ANSI characters, because cmd.exe batch files cannot be \n   in Uncode format. If you need to use arbitrary character sets,\n   use other shells that fully support Unicode (PowerShell, vbs, js).\n   \n - TO DO: In RC source output (/vo), special characters in strings are not quoted;\n   so /vo may produce invalid RC input\n   \n - The parser of binary version resources handles only the most common type of structure.\n   If the parser breaks because of unhandled structure format, try /va switch to\n   skip reading existing version resource and re-create it from scratch.\n   TODO: Consider using WINE or other open source implementations?\n   \n - option to add extra 0 after version strings : \"string\\0\"\n   (requiested by one reader for some old VB code) \n\n\n\nSource code \n============\nThe source is provided as a Visual C++ 2005 project, it can be compiled with VC 2008 Express.\nIt demonstrates use of the UpdateResource and imagehlp.dll API.\nIt does not demonstrate use of c++, good coding manners or anything else.\nDependencies on C++ libraries available only with the full Visual C 2008 have been removed.\n\n\nLICENSE TERMS: CPOL (CodeProject Open License)\nhttp://www.codeproject.com/info/licenses.aspx\n\n~~\n"
  },
  {
    "path": "external/verpatch/src/verpatch.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 10.00\n# Visual C++ Express 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"verpatch\", \"verpatch.vcproj\", \"{E08F11BD-35BC-4496-82BB-1CFD56BB044C}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{E08F11BD-35BC-4496-82BB-1CFD56BB044C}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{E08F11BD-35BC-4496-82BB-1CFD56BB044C}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{E08F11BD-35BC-4496-82BB-1CFD56BB044C}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{E08F11BD-35BC-4496-82BB-1CFD56BB044C}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(SubversionScc) = preSolution\n\t\tSvn-Managed = True\n\t\tManager = AnkhSVN - Subversion Support for Visual Studio\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/verpatch/src/verpatch.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"verpatch\"\n\tProjectGUID=\"{E08F11BD-35BC-4496-82BB-1CFD56BB044C}\"\n\tRootNamespace=\"relstamp\"\n\tKeyword=\"Win32Proj\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\"$(SolutionDir)$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"3\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tOutputFile=\"$(OutDir)\\verpatch.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tLargeAddressAware=\"1\"\n\t\t\t\tTerminalServerAware=\"1\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\"$(SolutionDir)$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\tWholeProgramOptimization=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tEnableIntrinsicFunctions=\"true\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;_A_NOISE_DBG=0\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tOutputFile=\"$(OutDir)\\verpatch.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tLargeAddressAware=\"1\"\n\t\t\t\tTerminalServerAware=\"1\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx\"\n\t\t\tUniqueIdentifier=\"{4FC737F1-C7A5-4376-A066-2A32D752A2FF}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\peExtras.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\peutils.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\relstamp.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\stdafx.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tUsePrecompiledHeader=\"1\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tUsePrecompiledHeader=\"1\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\vs_version.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl;inc;xsd\"\n\t\t\tUniqueIdentifier=\"{93995380-89BD-4b04-88EB-625FBE52EBFB}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\peExtras.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\relstamp.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\stdafx.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\targetver.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\vs_version.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Etc\"\n\t\t\tUniqueIdentifier=\"DOCUM\"\n\t\t\tParseFiles=\"false\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\ReadMe.txt\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\usage.txt\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\ver-self.cmd\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"CodeProjectFiles\"\n\t\t\tParseFiles=\"false\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\codeproj\\codeproject_vp.html\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\codeproj\\ver-vista.png\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\codeproj\\ver-winxp.png\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\codeproj\\verpatch-update.html\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/verpatch/src/verpatch.vcproj.BUILD-WINDOWS.build.user",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioUserFile\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tShowAllFiles=\"false\"\n\t>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\t>\n\t\t\t<DebugSettings\n\t\t\t\tCommand=\"$(TargetPath)\"\n\t\t\t\tWorkingDirectory=\"\"\n\t\t\t\tCommandArguments=\"\"\n\t\t\t\tAttach=\"false\"\n\t\t\t\tDebuggerType=\"3\"\n\t\t\t\tRemote=\"1\"\n\t\t\t\tRemoteMachine=\"BUILD-WINDOWS\"\n\t\t\t\tRemoteCommand=\"\"\n\t\t\t\tHttpUrl=\"\"\n\t\t\t\tPDBPath=\"\"\n\t\t\t\tSQLDebugging=\"\"\n\t\t\t\tEnvironment=\"\"\n\t\t\t\tEnvironmentMerge=\"true\"\n\t\t\t\tDebuggerFlavor=\"\"\n\t\t\t\tMPIRunCommand=\"\"\n\t\t\t\tMPIRunArguments=\"\"\n\t\t\t\tMPIRunWorkingDirectory=\"\"\n\t\t\t\tApplicationCommand=\"\"\n\t\t\t\tApplicationArguments=\"\"\n\t\t\t\tShimCommand=\"\"\n\t\t\t\tMPIAcceptMode=\"\"\n\t\t\t\tMPIAcceptFilter=\"\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\t>\n\t\t\t<DebugSettings\n\t\t\t\tCommand=\"$(TargetPath)\"\n\t\t\t\tWorkingDirectory=\"\"\n\t\t\t\tCommandArguments=\"\"\n\t\t\t\tAttach=\"false\"\n\t\t\t\tDebuggerType=\"3\"\n\t\t\t\tRemote=\"1\"\n\t\t\t\tRemoteMachine=\"BUILD-WINDOWS\"\n\t\t\t\tRemoteCommand=\"\"\n\t\t\t\tHttpUrl=\"\"\n\t\t\t\tPDBPath=\"\"\n\t\t\t\tSQLDebugging=\"\"\n\t\t\t\tEnvironment=\"\"\n\t\t\t\tEnvironmentMerge=\"true\"\n\t\t\t\tDebuggerFlavor=\"\"\n\t\t\t\tMPIRunCommand=\"\"\n\t\t\t\tMPIRunArguments=\"\"\n\t\t\t\tMPIRunWorkingDirectory=\"\"\n\t\t\t\tApplicationCommand=\"\"\n\t\t\t\tApplicationArguments=\"\"\n\t\t\t\tShimCommand=\"\"\n\t\t\t\tMPIAcceptMode=\"\"\n\t\t\t\tMPIAcceptFilter=\"\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n</VisualStudioUserFile>\n"
  },
  {
    "path": "external/verpatch/src/vs_version.cpp",
    "content": "//\n// Code for VS_VERSION resource\n//\n#include \"stdafx.h\"\n#include \"relstamp.h\"\n#include \"vs_version.h\"\n\n/// Make version resource\nBOOL makeVersionResource( __in file_ver_data_s const * fvd, __out PUCHAR *retp )\n{\n\tPUCHAR palloc = (PUCHAR)calloc(_MAX_VERS_SIZE_CB, 1);\n\tyybuf vbuf( palloc, _MAX_VERS_SIZE_CB );\n\tunsigned cbWritten = 0;\n\tBOOL ok = FALSE;\n\tPCWSTR sigLang = L\"040904B0\"; /* LANG_ENGLISH/SUBLANG_ENGLISH_US, Unicode CP */\n\tWORD vtransl[2] = {0x0409, 0x04B0};\n\tWCHAR temps[_MAX_VER_STRING_LEN_CCH + 1];\n\n\tif ( fvd->langid == LANG_NEUTRAL ) {\n\t\t//TODO support any language. currently tested only with en or neutral\n\t\tvtransl[0] = LANG_NEUTRAL;\n\t\tsigLang = L\"000004b0\";\n\t}\n\n\ttry {\n\n\t\t// Fill the res header\n//\t\tstruct VS_VERSIONINFO { \n//\t\tWORD  wLength; \n//\t\tWORD  wValueLength; \n//\t\tWORD  wType; \n//\t\tWCHAR szKey[]; \n//\t\tWORD  Padding1[]; \n//\t\tVS_FIXEDFILEINFO Value; \n//\t\tWORD  Padding2[]; \n//\t\tWORD  Children[]; \n//\t\t};\n\n\t\tPWORD pTotalLen = vbuf.marksize(); // FIXUP LATER\n\t\tvbuf.pushw(~0); // FIXUP LATER\n\t\tvbuf.pushw( sizeof(VS_FIXEDFILEINFO) ); //0x34\n\t\tvbuf.pushw( 0 ); //type\n\t\tvbuf.pushstr( L\"VS_VERSION_INFO\" );\n\n\t\t// Fixed info\n\t\tVS_FIXEDFILEINFO *fxi = (VS_FIXEDFILEINFO *)vbuf.getptr();\n\t\tfxi->dwSignature = 0xfeef04bd; // magic\n\t\tfxi->dwStrucVersion = VS_FFI_STRUCVERSION; //0x00010000\n\t\tfxi->dwFileVersionMS = MAKELONG( fvd->v_2, fvd->v_1 );\n\t\tfxi->dwFileVersionLS = MAKELONG( fvd->v_4, fvd->v_3 );\n\t\tfxi->dwProductVersionMS = MAKELONG( fvd->pv_2, fvd->pv_1 );\n\t\tfxi->dwProductVersionLS = MAKELONG( fvd->pv_4, fvd->pv_3 );\n\t\tfxi->dwFileFlagsMask = VS_FFI_FILEFLAGSMASK; //0x3F;\n\t\tfxi->dwFileFlags = fvd->dwFileFlags;\n\t\tfxi->dwFileOS = VOS_NT_WINDOWS32;\n\t\tfxi->dwFileType = fvd->dwFileType;\n\t\tfxi->dwFileSubtype = fvd->dwFileSubType;\n\t\tif ( 0 == fxi->dwFileType && 0 != fxi->dwFileSubtype )\n\t\t\tfxi->dwFileType = VFT_DRV;\n\t\tfxi->dwFileDateLS = 0; //unused?\n\t\tfxi->dwFileDateMS = 0; //\n\t\tvbuf.incptr( sizeof(VS_FIXEDFILEINFO) );\n\t\tvbuf.align4();\n\n\t\t// String File Info\n\n\t\tPWORD stringStart = vbuf.marksize();\n\t\tvbuf.pushw(~0); //wLength FIXUP LATER\n\t\tvbuf.pushw(0); //wValueLength\n\t\tvbuf.pushw(1); //wType\n\t\tvbuf.pushstr( L\"StringFileInfo\" );\n\n\t\tPWORD stringTableStart = vbuf.marksize();\n\t\tvbuf.pushw(~0); //wLength FIXUP LATER\n\t\tvbuf.pushw(0); // ?\n\t\tvbuf.pushw(1); //wType\n\t\tvbuf.pushstr( sigLang );\n\n\t\t// File version as string. Not shown by Vista, Win7.\n\t\tHRESULT hr = ::StringCbPrintf( &temps[0], sizeof(temps), _T(\"%d.%d.%d.%d\"),\n\t\t\tfvd->v_1, fvd->v_2, fvd->v_3, fvd->v_4 );\n\t\tif ( !SUCCEEDED(hr) ) temps[0] = 0;\n\t\tif ( fvd->sFileVerTail ) {\n\t\t\thr = ::StringCbCatW(&temps[0], sizeof(temps), L\" \");\n\t\t\thr = ::StringCbCatW(&temps[0], sizeof(temps), fvd->sFileVerTail);\n\t\t\tif ( !SUCCEEDED(hr) ) temps[0] = 0;\n\t\t}\n\t\tvbuf.pushTwostr( L\"FileVersion\", &temps[0] );\n\n\t\thr = ::StringCbPrintf( &temps[0], sizeof(temps), _T(\"%d.%d.%d.%d\"),\n\t\t\tfvd->pv_1, fvd->pv_2, fvd->pv_3, fvd->pv_4 );\n\t\tif ( !SUCCEEDED(hr) ) temps[0] = 0;\n\t\tif ( fvd->sProductVerTail ) {\n\t\t\thr = ::StringCbCatW(&temps[0], sizeof(temps), L\" \");\n\t\t\thr = ::StringCbCatW(&temps[0], sizeof(temps), fvd->sProductVerTail);\n\t\t\tif ( !SUCCEEDED(hr) ) temps[0] = 0;\n\t\t}\n\t\tvbuf.pushTwostr( L\"ProductVersion\", &temps[0] );\n\n\t\t// Strings\n\t\tfor ( int k = 0; k < ARRAYSIZE(fvd->CustomStrNames); k++ ) {\n\t\t\tif ( fvd->CustomStrNames[k] != NULL ) {\n\n\t\t\t\tvbuf.pushTwostr( fvd->CustomStrNames[k], fvd->CustomStrVals[k] );\n\t\t\t\t\n\t\t\t\tif ( 0 == _wcsicmp( L\"SpecialBuild\", fvd->CustomStrNames[k] ) )\n\t\t\t\t\tfxi->dwFileFlags |= VS_FF_SPECIALBUILD;\n\t\t\t\tif ( 0 == _wcsicmp( L\"PrivateBuild\",fvd->CustomStrNames[k] ) )\n\t\t\t\t\tfxi->dwFileFlags |= VS_FF_PRIVATEBUILD;\n\t\t\t}\n\t\t}\n\n\t\tvbuf.patchsize( stringTableStart );\n\t\tvbuf.patchsize( stringStart );\n\t\tvbuf.align4();\n\n\t\t// Var info\n//struct VarFileInfo { \n//  WORD  wLength; \n//  WORD  wValueLength; \n//  WORD  wType; \n//  WCHAR szKey[]; \n//  WORD  Padding[]; \n//  Var   Children[]; \n\t\tPWORD varStart = vbuf.marksize();\n\t\tvbuf.pushw(~0); // size, patch\n\t\tvbuf.pushw(0);\n\t\tvbuf.pushw(1);\n\t\tvbuf.pushstr( L\"VarFileInfo\" );\n\n\t\tvbuf.pushw(0x24);\n\t\tvbuf.pushw(0x04);\n\t\tvbuf.pushw(0x00);\n\t\tvbuf.pushstr( L\"Translation\" );\n\t\tvbuf.pushw( vtransl[0] );\n\t\tvbuf.pushw( vtransl[1] );\n\t\tvbuf.patchsize( varStart );\n\n\t\t/////////////////////////////\n\t\tvbuf.patchsize(pTotalLen);\n\t\tvbuf.checkspace(); \n\n\t\tok = TRUE;\n\t} catch(...) {\n\t\tok = FALSE;\n\t}\n\n\tif (ok) {\n\t\td3print(\"ver size= %d\\n\", vbuf.cbwritten() );\n\t\t*retp = palloc;\n\t} else {\n\t\tdprint(\"error in %s\\n\", __FUNCTION__);\n\t\tfree( palloc );\n\t}\n\n\treturn ok;\n}\n\n\n///////////////////////////////////////////////////////////////////////////\n// Simple parser for binary version resource\n///////////////////////////////////////////////////////////////////////////\n\n\nBOOL ParseBinaryVersionResource( \n\t__in const PUCHAR verres,\n\tunsigned size,\n\t__out VS_FIXEDFILEINFO **pfxi,\n\tIParseVerStrCallback *strCallback,\n\tbool b_dump_rc \n\t)\n{\n\tBOOL ok = FALSE;\n\txybuf vbuf( verres, size );\n\tWCHAR sigLang[8+1];\n\n\ttry {\n\n\t// Res header\n\tPWORD pTotalLen = vbuf.marksize();\n\t\n\tvbuf.chkword( sizeof(VS_FIXEDFILEINFO) ); //0x34\n\tvbuf.chkword(0); //type\n\tvbuf.chkstr(L\"VS_VERSION_INFO\");\n\t// Fixed info\n\tVS_FIXEDFILEINFO *fxi = (VS_FIXEDFILEINFO *)vbuf.getptr();\n\tif ( fxi->dwSignature != 0xfeef04bd )\n\t\tthrow \":fxi.sig\";\n\tif ( fxi->dwStrucVersion > 0x00010000 || (fxi->dwStrucVersion == 0) )\n\t\tthrow \":fxi.version\";\n\n\t*pfxi = fxi;\n\n\tif (b_dump_rc) {\n\t\t// Dump in RC format:\n\t\tdtprint( _T(\"#ifdef RC_INVOKED\\n\\n\"));\n\t\tdtprint( _T(\"1\\tVERSIONINFO\\n\"));\n\t\tdtprint( _T(\"FILEVERSION\\t%u,%u,%u,%u\\n\"), \n\t\t\tHIWORD(fxi->dwFileVersionMS), LOWORD(fxi->dwFileVersionMS), HIWORD(fxi->dwFileVersionLS), LOWORD(fxi->dwFileVersionLS) );\n\t\tdtprint( _T(\"PRODUCTVERSION\\t%u,%u,%u,%u\\n\"),\n\t\t\tHIWORD(fxi->dwProductVersionMS), LOWORD(fxi->dwProductVersionMS), HIWORD(fxi->dwProductVersionLS), LOWORD(fxi->dwProductVersionLS) );\n\t\tdtprint( _T(\"FILEFLAGSMASK\\t%#XL\\n\"),  fxi->dwFileFlagsMask);\n\t\tdtprint( _T(\"FILEFLAGS\\t%#XL\\n\"),  fxi->dwFileFlags);\n\t\tdtprint( _T(\"FILEOS\\t\\t%#XL\\n\"),  fxi->dwFileOS);\n\t\tdtprint( _T(\"FILETYPE\\t%#X\\n\"),  fxi->dwFileType);\n\t\tdtprint( _T(\"FILESUBTYPE\\t%#X\\n\"),  fxi->dwFileSubtype);\n\t}\n\n\tvbuf.incptr( sizeof(VS_FIXEDFILEINFO) );\n\tvbuf.align4();\n\n\t// String File Info\n\tPWORD stringStart = vbuf.marksize();\n\tvbuf.chkword(0); //wValueLength\n\tvbuf.chkword(1); //wType\n\n\ttry {\n\t\tvbuf.chkstr(L\"StringFileInfo\");\n\t} catch( char *exs ) {\n\t\t// !!! VarFileInfo can go before StringFileInfo!\n\t\tvbuf.chkstr(L\"VarFileInfo\");\n\t\t// ok so here is \"VarFileInfo\". Skip it and resync at StringFileInfo\n\t\tvbuf.checkspace(0x40);\n\t\tPUCHAR q = (PUCHAR)memchr( vbuf.getptr(), 'S', 0x30 );\n\t\tif ( !q ) throw(\":parse_err2\");\n\t\tvbuf.incptr( q - vbuf.getptr() - 3 *sizeof(WORD));\n\t\t// Retry:\n\t\tstringStart = vbuf.marksize();\n\t\tvbuf.chkword(0); //wValueLength\n\t\tvbuf.chkword(1); //wType\n\t\tvbuf.chkstr(L\"StringFileInfo\");\n\t}\n\n\tPWORD stringTableStart = vbuf.marksize();\n\tvbuf.chkword(0); // ?\n\tvbuf.chkword(1); //wType\n\n\t// Language string: ex. \"040904B0\"\n\tvbuf.checkspace( 10 * sizeof(WCHAR) );\n\tWORD n = wcslen( (PCWSTR)vbuf.getptr() );\n\tif (n != 8)\n\t\tthrow(\":bad_lang_str\");\n\tmemcpy( sigLang, vbuf.getptr(), 9*sizeof(WCHAR) ); //incl term. 0\n\tvbuf.incptr( (n + 1) * sizeof(WCHAR) );\n\tvbuf.align4();\n\n\tstrCallback->callback( L\"@LANG\", sigLang ); // revise\n\t\n\tif (b_dump_rc) {\n\t\t// Dump in RC format:\n\t\tdtprint(_T(\"BEGIN\\n\"));\n\t\tdtprint(_T(\"\\tBLOCK \\\"StringFileInfo\\\"\\n\"));\n\t\tdtprint(_T(\"\\tBEGIN\\n\"));\n\t\tdtprint(_T(\"\\t\\tBLOCK \\\"%ws\\\"\\n\"), sigLang);\n\t\tdtprint(_T(\"\\t\\tBEGIN\\n\"));\n\t}\n\n\t// Loop for strings:\n\tint cntstrings = 0;\n\tdo {\n\t\tPCWSTR wsname, wsval;\n\t\tvbuf.pullTwoStr( &wsname, &wsval );\n\t\tcntstrings++;\n\t\t//- dprint(\" str#%d [%ws]=[%ws]\\n\", cntstrings, wsname, wsval);\n\t\tif (b_dump_rc) {\n\t\t\tdtprint(_T(\"\\t\\t\\tVALUE \\\"%ws\\\", \\\"%ws\\\"\\n\"), wsname, strEscape(wsval));\n\t\t}\n\t\tstrCallback->callback( wsname, wsval );\t\n\t} while( vbuf.getptr() < ((PUCHAR)stringStart + *stringStart) );\n\t\n\tvbuf.align4();\n\td3print(\"strings counted:%d\\n\", cntstrings);\n\n\tif (b_dump_rc) {\n\t\tdtprint(_T(\"\\t\\tEND\\n\"));\n\t\tdtprint(_T(\"\\tEND\\n\"));\n\t\t// VarFileInfo.....\n\t\tdtprint(_T(\"\\tBLOCK \\\"VarFileInfo\\\"\\n\"));\n\t\tdtprint(_T(\"\\tBEGIN\\n\"));\n\t\tdtprint(_T(\"\\t\\tVALUE \\\"Translation\\\", 0x%4.4ws, 0x%4.4ws\\n\"), &sigLang[0], &sigLang[4]);\n\t\tdtprint(_T(\"\\tEND\\n\"));\n\t\tdtprint(_T(\"END\\n\\n\"));\n\t\tdtprint( _T(\"#endif /*RC_INVOKED*/\\n\\n\"));\n\t}\n\n\tok = TRUE;\n\n\t} catch(...) {\n\t\tdprint(\"Exception in %s\\n\", __FUNCTION__);\n\t}\n\n\tif (!ok) dprint(\"Error in %s\\n\", __FUNCTION__);\n\n\treturn ok;\t\n}\n"
  },
  {
    "path": "external/verpatch/src/vs_version.h",
    "content": "//\n// Code for VS_VERSION resource\n//\n\n#pragma once\n\n// Stupid helper classes for the version struct\nclass yybuf \n{\n\tPUCHAR m_startptr;\n\tPUCHAR m_curptr;\n\tint m_inisize;\n\n\tpublic:\n\tyybuf( PUCHAR start, unsigned size )\n\t\t: m_startptr(start), m_inisize(size), m_curptr(start)\n\t{\n\t\tASSERT(((ULONG_PTR)start & 3) == 0); // must be aligned on 4\n\t}\n\n\tvoid align4() { \n\t\tPULONG_PTR x = (PULONG_PTR)&m_curptr;\n\t\t*x += 3;\n\t\t*x &= ~(ULONG_PTR)3;\n\t}\n\n\tint cbwritten(void) { return m_curptr - m_startptr; }\n\n\tvoid checkspace( int n = 8 ) { \n\t\tif ( cbwritten() + n > m_inisize )\n\t\t\t__debugbreak();\n\t}\n\n\tvoid pushw( WORD v ) {\n\t\t*(PWORD)m_curptr = v;\n\t\tm_curptr += sizeof(WORD);\n\t}\n\n\tvoid pushd( DWORD v ) {\n\t\t*(PDWORD)m_curptr = v;\n\t\tm_curptr += sizeof(DWORD);\n\t}\n\n\tvoid pushstr( __in LPCWSTR ws, bool b_align = TRUE ) {\n\t\tif ( !ws ) return;\n\t\tWORD n = wcslen( ws );\n\t\tASSERT( n < _MAX_VER_STRING_LEN_CCH );\n\t\tn = (n + 1) * sizeof(WCHAR);\n\t\tcheckspace(n + sizeof(DWORD));\n\t\tmemcpy( m_curptr, ws, n );\n\t\tm_curptr += n;\n\t\tif (b_align)\n\t\t\talign4();\n\t}\n\n\tPUCHAR getptr() { return m_curptr;}\n\n\tvoid incptr( int n ) { checkspace(n); m_curptr += n; }\n\n\tPWORD marksize() { return (PWORD)m_curptr; }\n\n\tvoid patchsize ( PWORD mp ) { \n\t\tWORD cb = getptr() - (PUCHAR)mp;\n\t\t*mp = cb;\n\t};\n\n\tvoid yybuf::pushTwostr( __in LPCWSTR name, __in LPCWSTR val )\n\t{\n\t//struct String { \n\t//  WORD   wLength; \n\t//  WORD   wValueLength; \n\t//  WORD   wType; \n\t//  WCHAR  szKey[]; \n\t//  WORD   Padding[]; \n\t//  WORD   Value[]; \n\t//};\n\t\tWORD wValueLength = val ? (WORD)wcslen(val) : 0;\n\t\tif (wValueLength)\n\t\t\twValueLength = (wValueLength + 1) * sizeof(WCHAR);\n\t\tWORD wNameLength = (WORD)((wcslen(name) + 1 ) * sizeof(WCHAR));\n\t\tASSERT(wNameLength > sizeof(WCHAR));\n\n\t\tcheckspace( wValueLength + wNameLength + 5*sizeof(WORD));\n\n\t\tPUCHAR porig = m_curptr;\n\t\tpushw(-1); //length, patch\n\t\tpushw( wValueLength );\n\t\tpushw( 1 ); //type\n\t\tpushstr( name ); // with align\n\t\tif ( wValueLength )\n\t\t\tpushstr( val, false ); // don't align yet\n\t\t*(PWORD)porig = (WORD)(m_curptr - porig);\n\t\talign4();\n\t}\n\n}; // class\n\nclass xybuf \n{\n\tPUCHAR m_startptr;\n\tPUCHAR m_curptr;\n\tint m_inisize;\n\n\tpublic:\n\txybuf( PUCHAR start, unsigned size )\n\t\t: m_startptr(start), m_inisize(size), m_curptr(start)\n\t{ \n\t\tASSERT(((ULONG_PTR)start & 3) == 0); // must be aligned on 4\n\t}\n\n\tvoid align4() { \n\t\tPULONG_PTR x = (PULONG_PTR)&m_curptr;\n\t\t*x += 3;\n\t\t*x &= ~(ULONG_PTR)3;\n\t}\n\n\tint cbread(void) { return m_curptr - m_startptr; }\n\n\tvoid checkspace( int n = 8 ) { \n\t\tif ( cbread() + n > m_inisize )\n\t\t\tthrow \":overrun read\";\n\t}\n\n\tPUCHAR getptr() { return m_curptr;}\n\n\tvoid incptr( int n ) { checkspace(n); m_curptr += n; }\n\n\tPWORD marksize() { PWORD p = (PWORD)m_curptr; m_curptr += sizeof(WORD); return p; }\n\n\tBOOL chksize( PWORD mp, bool b_nothrow = false ) { \n\t\t// check size of block is correct\n\t\tWORD cb = getptr() - (PUCHAR)mp;\n\t\tif (*mp != cb ) {\n\t\t\tif ( !b_nothrow ) throw \":chksize\";\n\t\t\treturn FALSE;\n\t\t}\n\t\treturn TRUE;\n\t};\n\n\tvoid chkword( WORD v ) {\n\t\tif (*(PWORD)m_curptr != v)\n\t\t\tthrow \":chkword\";\n\t\tm_curptr += sizeof(WORD);\n\t}\n\n\tvoid chkdword( DWORD v ) {\n\t\tif (*(PDWORD)m_curptr != v)\n\t\t\tthrow \":chkdword\";\n\t\tm_curptr += sizeof(DWORD);\n\t}\n\n\tvoid chkstr( __in LPCWSTR ws, bool b_align = TRUE ) {\n\t\tWORD n = wcslen( ws );\n\t\tASSERT ( n );\n\t\tASSERT( n < _MAX_VER_STRING_LEN_CCH );\n\t\tcheckspace((n + 1) * sizeof(WCHAR) + sizeof(DWORD));\n\n\t\tfor (int i = 0; i <= n; i++ ) { // incl. term. 0\n\t\t\tif ( *(PWCHAR)m_curptr != *ws &&\n\t\t\t\t *(PWCHAR)m_curptr != (*ws ^ 0x20) )\n\t\t\t\tthrow \":chkstr\";\n\t\t\tm_curptr += sizeof(WCHAR);\n\t\t\tws++;\n\t\t}\n\n\t\tif (b_align)\n\t\t\talign4();\n\t}\n\n\tvoid pullTwoStr( __out LPCWSTR *wsname, __out LPCWSTR *wsval )\n\t{\n\t\t//struct String { \n\t\t//  WORD   wLength; \n\t\t//  WORD   wValueLength; \n\t\t//  WORD   wType; \n\t\t//  WCHAR  szKey[]; \n\t\t//  WORD   Padding[]; \n\t\t//  WORD   Value[]; \n\t\t//};\n\t\tcheckspace(5*sizeof(WORD));\n\t\tPWORD porig = marksize();\n\n\t\tWORD wLength = *porig;\n\t\tif ( wLength > 1024 || wLength < 5*sizeof(WORD))\n\t\t\tthrow \":string desc size bad\";\n\t\tcheckspace(5*sizeof(WORD) + wLength);\n\t\tWORD wValueLength = *((PWORD)m_curptr);\n\t\tincptr(2);\n\t\tchkword(1); //type\n\n\t\tsize_t nLength = wcsnlen( (LPWSTR)( getptr() ), wLength/sizeof(WCHAR) );\n\t\tif (nLength == 0 || nLength == (wLength/sizeof(WCHAR)) )\n\t\t\tthrow \":string name len bad\";\n\t\t*wsname = (LPCWSTR)getptr(); //should point to name\n\t\tunsigned bLength = (nLength + 1)*sizeof(WCHAR);\n\t\tincptr( bLength );\n\t\talign4(); //padding\n\n\t\tif ( getptr() >= (PUCHAR)porig + *porig ) {\n\t\t\t// null value\n\t\t\t*wsval = L\"\";\n\t\t\treturn;\n\t\t}\n\n\t\twLength -= bLength;\n\t\tnLength = wcsnlen( LPWSTR( getptr() ), wLength/sizeof(WCHAR) );\n\t\tif ( nLength == 0 || nLength == (wLength/sizeof(WCHAR)) )\n\t\t\tthrow \":string val name len bad\";\n\t\t\n\t\t*wsval = (LPCWSTR)getptr(); //should point to value\n\t\tbLength = (nLength + 1)*sizeof(WCHAR);\n\t\t// can be padded after 0 term\n\n\t\tm_curptr = (PUCHAR)porig + *porig;\n\t\talign4(); //padding\n\t}\n\n}; //class\n\n#if 1\n// a stupid string helper class.\n// this doesn't run 24*7, so allow memory leaks...\nclass _xpwstr {\n\tPWSTR m_str;\n\n\tpublic:\n\tvoid operator = (PCTSTR s ) {\n\t\tif ( m_str )\n\t\t\tfree( m_str );\n\t\tm_str = NULL;\n\t\tif (s)\n\t\t\tm_str = stralloc( s );\n\t}\n\n\toperator PCWSTR() const { return (PCWSTR)m_str; } \n\n\t_xpwstr() : m_str(NULL) { }\n\t~_xpwstr() { if (m_str) free( m_str ); }\n};\n\ntypedef _xpwstr ASTR;\n#else\ntypedef CString ASTR;\n#endif\n\n// Data for a vs_version resource\nstruct file_ver_data_s {\n\tUSHORT v_1, v_2, v_3, v_4;\t\t// Version components 1-4\n\tUSHORT pv_1, pv_2, pv_3, pv_4;  // Product Version components 1-4\n\tUINT32 dwFileType, dwFileSubType;\n\tUINT32 dwFileFlags;\n\tWORD langid;\t\t\t// language\n\tASTR sFileVerTail;\t\t// sometimes used - ex. WDK samples, common.ver\n\tASTR sProductVerTail;\t// same for product ver.\n\t// Strings\n\tASTR CustomStrNames[_MAX_VER_CUSTOM_STRINGS];\n\tASTR CustomStrVals[_MAX_VER_CUSTOM_STRINGS];\n\n\tbool addTwostr( __in_opt PCWSTR name, __in_opt PCWSTR val ) \n\t{\n\t\tif ( !name )\n\t\t\treturn false;\n\n\t\tint index = -1;\n\t\tfor (int i = 0; i < ARRAYSIZE(CustomStrNames); i++) {\n\t\t\tif ( !CustomStrNames[i] ) {\n\t\t\t\tif (index == -1) index = i;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif ( 0 == _wcsicmp( name, CustomStrNames[i] ) ) {\n\t\t\t\tindex = i;\n\t\t\t\td3print(\"replacing dup string in ver resource: %ws\\n\", (PCWSTR)name);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif ( index != -1 ) {\n\t\t\tCustomStrNames[index] = name;\n\t\t\tCustomStrVals[index] = val; // can be 0\n\t\t\treturn true;\n\t\t}\n\n\t\tdprint(\"Too many strings in ver resource! not added %ws\\n\", name);\n\t\treturn false;\n\t}\n\n\tPCWSTR getValStr( __in PCWSTR name )\n\t{\n\t\tfor (int i = 0; i < ARRAYSIZE(CustomStrNames); i++) {\n\t\t\tPCWSTR s = CustomStrNames[i];\n\t\t\tif ( s && (0 == _wcsicmp(name, s) ) )\n\t\t\t\treturn CustomStrVals[i];\n\t\t}\n\t\treturn NULL;\n\t}\n};\n\n// Interface for ParseBinaryVersionResource\nclass IParseVerStrCallback\n{\n\tpublic:\n\tvirtual void callback( __in PCWSTR name, __in_opt PCWSTR value ) = 0;\n};\n\nBOOL makeVersionResource( __in file_ver_data_s const * fvd, __out PUCHAR *retp );\n\nBOOL ParseBinaryVersionResource( \n\t__in const PUCHAR verres,\n\tunsigned size,\n\t__out VS_FIXEDFILEINFO **pfxi,\n\tIParseVerStrCallback *strCallback,\n\tbool b_dump_rc = false\n\t);\n"
  },
  {
    "path": "external/verpatch/verpatch-ReadMe.txt",
    "content": "\nVerpatch - a tool to patch win32 version resources on .exe or .dll files,\n\nVersion: 01-Nov-2009 (rev. #7 for CodeProject) edited\n\nVerpatch is a command line tool for adding and editing the version information\nof Windows executable files (applications, DLLs, kernel drivers)\nwithout rebuilding the executable.\n\nIt can also add or replace Win32 (native) resources, and do some other\nmodifications of executable files.\n\nVerpatch sets ERRORLEVEL 0 on success, otherwise errorlevel is non-zero.\nVerpatch modifies files in place, so please make copies of precious files.\n\n\nCommand line syntax\n===================\n\nverpatch filename [version] [/options]\n\nWhere\n - filename : any Windows PE file (exe, dll, sys, ocx...) that can have native resources\n - version : one to four decimal numbers, separated by dots, ex.: 1.2.3.4\n   Additional text can follow the numbers; see examples below. Ex.: \"1.2.3.4 extra text\"\n - options: see below\n\nCommon Options:\n\n/va - creates a version resource. Use when the file has no version resource at all,\n     or existing version resource should be replaced.\n     If this option not specified, verpatch will patch the version resourse found in the file.\n/s name \"value\" - add a version resource string attribute\n     The name can be either a full attribute name or alias; see below.\n/sc \"comment\" - add or replace Comments string (shortcut for /s Comments \"comment\")\n/pv <version>   - specify Product version\n    where <version> arg has same form as the file version (1.2.3.4 or \"1.2.3.4 text\")\n/fn - preserves Original filename, Internal name in the existing version resource of the file.\n\n\nOther options:\n\n/vo - outputs the version info in RC format to stdout.\n      This can be used with /xi to import a version resource from another file.\n      Output of /vo (text from #ifdef RC_INVOKED to #endif) can be saved to a .rc file and compiled with rc.\n/xi- test mode. does all operations but does not modify the file\n/xlb - test mode. Re-parses the version resource after modification.\n/rpdb - removes path to the .pdb file in debug information; leaves only file name.\n/rf #id file - add or replace a raw binary resource from file (see below)\n/noed - do not check for extra data appended to exe file\n/vft2 num - specify driver subtype (VFT2_xxx value, see winver.h)\n     The application type (VFT_xxx) is retained from the existing version resource of the file,\n     or filled automatically, based on the filename extension (exe->app, sys->driver, anything else->dll)\n\n\nExamples\n========\n\nverpatch d:\\foo.dll 1.2.33.44\n\t- replaces only the file version, all 4 numbers, \n\tthe Original file name and Internal name strings are set to \"foo.dll\".\n        File foo.dll should already have a version resource.\n\nverpatch d:\\foo.dll 33.44  /s comment \"a comment\"\n\t- replaces only two last numbers of the file version and adds a comment.\n        File foo.dll should already have a version resource.\n\nverpatch d:\\foo.dll \"33.44 special release\" /sc \"a comment\"\n\t- same as previous, with additional text in the version argument.\n\nverpatch d:\\foo.dll \"1.2.33.44\" /va /s description \"foo.dll\"\n     /s company \"My Company\" /s copyright \"(c) 2009\"\n   - adds or replaces version resource to foo.dll, with several string values.\n     ( all options should be one line)\n\nverpatch d:\\foo.dll /vo /xi\n\t- dumps the version resource in RC format, does not update the file.\n\n\n\t\nRemarks\n=======\n\nVerpatch replaces the version number in existing file version info resource\nwith the values given on the command line.\n\nIn \"patch\" mode (no /va option), the PE file should have a version resource,\nwhich is parsed, and then parameters specified on the command line are applied.\n\nIf the file has no version resource, or you want to discard the existing resource, use /va switch.\nAll nesessary strings can be specified with the /s option.\n\nThe command line can become very long, so you may want to use a batch file or script.\nSee the example batch files, how to create a version resource and\nspecify all parameters with /va.\n\nVerpatch can be run on same PE file any number of times.\n\nThe Version argument can be specified as 1 to 4 dot separated decimal numbers,\nor as quoted string containing additional text after the numbers.\nIf less than 4 numbers are given, they are considered as minor numbers.\nThe higher version parts are retained from existing version resource.\nFor example, if the existing version info has version number 1.2.3.4\nand 55.66 specified on the command line, the result will be 1.2.55.66.\n\nThe quotes surrounding string arguments are needed for the command shell (cmd.exe), \nfor any argument that contains spaces.\n\nThe program ensures that the version numbers in the binary part\nof the version structure and in the string part (as text) are same.\n\nBy default, Original File Name and Internal File Name are replaced to the actual filename.\nUse /fn to preserve existing values in the version resource.\n\nFor option /s, specify language-neutral string names, not translations\n( example: PrivateBuild, not \"Private Build Description\" ).\nNull values can be specified as empty string (\"\").\nSee below for the list of known string keys names and their aliases.\nThe examples above use the aliases.\n\nStrings for File version and Product version parameters are handled in a special way, \nthe /s switch can not be used to set them:\n - File version can be specified only as the 2nd positional argument\n - Product version can be specified using /pv switch\n\nThe /rf switch adds a resource from a file, or replaces a resource with same type and id.\nThe argument \"#id\" is a 32-bit hex number, prefixed with #.\nLow 16 bits of this value are resource id; can not be 0.\nNext 8 bits are resource type: one of RT_xxx symbols in winuser.h, or user defined.\nIf the type value is 0, RT_RCDATA (10) is assumed.\nHigh 8 bits of the #id arg are reserved0.\nThe language code of resources added by this switch is 0 (Neutral).\nNamed resource types and ids are not implemented.\nThe file is added as opaque binary chunk; the resource size is rounded up to 4 bytes\nand padded with zero bytes.\n\nThe program detects extra data appended to executable files, saves it and appends \nagain after modifying resources.\nSuch extra data is used by some installers, self-extracting archives and other applications.\nHowever, the way we restore the data may be not compatible with these applications.\nPlease, verify that executable files that contain extra data work correctly after modification.\nCommand switch /noed disables checking for extra data.\n\n\n====================================================================\nKnown string keys in VS_VERSION_INFO resource\n====================================================================\n\nThe aliases are for use with the /s switch, and are not case sensitive.\n\n-------------------+----+-------------------------------+------------\nInvariant(LN) name |note| English translation           | Alias\n-------------------+----+-------------------------------+------------\nComments                    Comments                      comment\nCompanyName           E     Company                       company\nFileDescription       E     Description                   description, desc\nFileVersion           *1    File version\nInternalName                Internal Name                 title\n                      *2    Language\nLegalCopyright        E     Copyright                     copyright, (c)\nLegalTrademarks       E      Legal Trademarks              tm, (tm)\nOriginalFilename            Original File Name\nProductName                 Product Name                  product\nProductVersion        *1    Product Version               productver, prodver\nPrivateBuild                Private Build Description     pb\nSpecialBuild                Special Build  Description    sb, build\nOleSelfRegister       A     - \nAssemblyVersion       N\n\nNotes\n*1: FileVersion, ProductVersion values should begin with same 1.2.3.4 version number as in the binary header.\nCan be any text. Windows Explorer displays the version numbers from the binary header. \n\n*2: The \"Language\" value is the name of the language code specified in the header of the string block of VS_VERSION_INFO resource.\n(or taken from VarFileInfo block?)\nIt is displayed by Windows Explorer, but is not contained in the version data.\n\nE: Displayed by Windows Explorer in Vista+\nA: Intended for some API (OleSelfRegister is used in COM object registration)\nN: Added by some .NET compilers. This version number is not contained in the\n    binary part of the version struct and can differ from the file version.\n    To change it, just use switch /s AssemblyVersion [value]\n\n====================================================================\n\n\n\nKnown issues and TO DO's:\n=========================\n\n - Does not work on old PE files that have link version 5.x (before VC6?)\n   No known workaround; this seems to be limitation of Windows UpdateResource API.\n\n - Does not work on signed files (TO DO)\n\n - Currenly implemented only US English and Language Neutral Unicode version resources.\n   MUI resource configuration manifests not checked.\n   New version resource will be created as Language Neutral.\n   Version info in other languages will be erroneously rewritten as English or Language Neutral- TO DO\n   \n   A second (language neutral) version resource may be added to a file\n   that already has a version resource in other language. Switch /va won't help.\n   TO DO: ensure that a file has only one version resource!\n   \n - When verpatch is invoked from command prompt, or batch file, the string\n   arguments can contain only ANSI characters, because cmd.exe batch files cannot be \n   in Uncode format. If you need to use arbitrary character sets,\n   use other shells that fully support Unicode (PowerShell, vbs, js).\n   \n - TO DO: In RC source output (/vo), special characters in strings are not quoted;\n   so /vo may produce invalid RC input\n   \n - The parser of binary version resources handles only the most common type of structure.\n   If the parser breaks because of unhandled structure format, try /va switch to\n   skip reading existing version resource and re-create it from scratch.\n   TODO: Consider using WINE or other open source implementations?\n   \n - option to add extra 0 after version strings : \"string\\0\"\n   (requiested by one reader for some old VB code) \n\n\n\nSource code \n============\nThe source is provided as a Visual C++ 2005 project, it can be compiled with VC 2008 Express.\nIt demonstrates use of the UpdateResource and imagehlp.dll API.\nIt does not demonstrate use of c++, good coding manners or anything else.\nDependencies on C++ libraries available only with the full Visual C 2008 have been removed.\n\n\nLICENSE TERMS: CPOL (CodeProject Open License)\nhttp://www.codeproject.com/info/licenses.aspx\n\n~~\n"
  },
  {
    "path": "external/win32cpp/3rd Party Software/ADO Class/About.TXT",
    "content": "This software provides a simple database catalog access using a set of ADOX classes.\nIt was written by Carlos Antollini. It was downloaded from CodeProject at:\nhttp://www.codeproject.com/KB/database/caaadoxclass.aspx\n\nThis software remains the property of Carlos Antollini. Refer to the original download \nsite to ensure your use of the software is consistant with any copyright or license.\n"
  },
  {
    "path": "external/win32cpp/3rd Party Software/About this folder.TXT",
    "content": "This folder contains a collection software written by other authors.\nThey are included here in the hope that they might prove a useful addition for \nWin32++ users.\n\nThe original authors retain all rights over their software. Each folder contains information\nregarding where the software was download from. Refer to the original download sites to\nensure your use of the software is consistant with any copyright or license.\n\n \n\n"
  },
  {
    "path": "external/win32cpp/3rd Party Software/GridControl/About.TXT",
    "content": "This software provides a DataGrid control.\nIt was written by Darkoman. It was downloaded from CodeProject at:\nhttp://www.codeproject.com/KB/miscctrl/DataGridControl.aspx\n\nThis software remains the property of the author (Darkoman). Refer to the \noriginal download  site to ensure your use of the software is consistant\nwith any copyright or license.\n"
  },
  {
    "path": "external/win32cpp/3rd Party Software/GridControl/Sample/About.TXT",
    "content": "This sample was kindly provided by Jianjun Wang."
  },
  {
    "path": "external/win32cpp/About these folders.txt",
    "content": "The contents of the folders within Win32++\n==========================================\n3rd Party Software\tContains software devloped by other authors\nhelp             \tContains the documentation of Win32++.\ninclude          \tContains the set of files that make up the Win32++ library.\nnew projects     \tA set of projects to be used in your new projects. \noutput           \tA directory which contains the output of some tools.\nsamples          \tA set of sample projects that demonstrate the various features of Win32++.\ntools            \tA set of useful batch files for Win32++.\ntutorials        \tThe code for the tutorials described in the Win32++ documentation.\nWCE samples      \tA set of sample projects that demonstrate using Win32++ on WinCE.\n\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Clean.bat",
    "content": "\n::A batch file to remove unnecessary files from\n:: each Visual Studio project\n\n::Remove directories\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\emulatorDbg\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\emulatorRel\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\ARMV4Dbg\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\ARMV4Rel\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\X86Dbg\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\X86Rel\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\_UpgradeReport_Files\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\\"Pocket PC 2003 (ARMV4)\"\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\\"Smartphone 2003 (ARMV4)\"\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\\"Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\"\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\\"Windows Mobile 5.0 Smartphone SDK (ARMV4I)\"\n\n::Remove files\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.vcb\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.vcl\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.vco\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.aps\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.XML\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.user\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.ncb\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.bak\"\nFOR /D %%f IN (\"*.\") DO DEL /Q /AH %%f\\\"*.suo\"\n\n\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Dialog/Dialog.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 9.00\n# Visual Studio 2005\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Dialog\", \"Dialog.vcproj\", \"{8559448A-4279-495E-B22B-CC35E87247E7}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Pocket PC 2003 (ARMV4) = Debug|Pocket PC 2003 (ARMV4)\n\t\tDebug|Smartphone 2003 (ARMV4) = Debug|Smartphone 2003 (ARMV4)\n\t\tRelease|Pocket PC 2003 (ARMV4) = Release|Pocket PC 2003 (ARMV4)\n\t\tRelease|Smartphone 2003 (ARMV4) = Release|Smartphone 2003 (ARMV4)\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Smartphone 2003 (ARMV4).Deploy.0 = Debug|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Smartphone 2003 (ARMV4).Deploy.0 = Release|Smartphone 2003 (ARMV4)\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Dialog/Dialog.vcp",
    "content": "# Microsoft eMbedded Visual Tools Project File - Name=\"Dialog\" - Package Owner=<4>\n# Microsoft eMbedded Visual Tools Generated Build File, Format Version 6.02\n# ** DO NOT EDIT **\n\n# TARGTYPE \"Win32 (WCE emulator) Application\" 0xa601\n\nCFG=Dialog - Win32 (WCE emulator) Debug\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\n!MESSAGE use the Export Makefile command and run\n!MESSAGE \n!MESSAGE NMAKE /f \"Dialog.vcn\".\n!MESSAGE \n!MESSAGE You can specify a configuration when running NMAKE\n!MESSAGE by defining the macro CFG on the command line. For example:\n!MESSAGE \n!MESSAGE NMAKE /f \"Dialog.vcn\" CFG=\"Dialog - Win32 (WCE emulator) Debug\"\n!MESSAGE \n!MESSAGE Possible choices for configuration are:\n!MESSAGE \n!MESSAGE \"Dialog - Win32 (WCE emulator) Release\" (based on \"Win32 (WCE emulator) Application\")\n!MESSAGE \"Dialog - Win32 (WCE emulator) Debug\" (based on \"Win32 (WCE emulator) Application\")\n!MESSAGE \n\n# Begin Project\n# PROP AllowPerConfigDependencies 0\n# PROP Scc_ProjName \"\"\n# PROP Scc_LocalPath \"\"\n# PROP ATL_Project 2\nCPP=cl.exe\nMTL=midl.exe\nRSC=rc.exe\n\n!IF  \"$(CFG)\" == \"Dialog - Win32 (WCE emulator) Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"emulatorRel\"\n# PROP BASE Intermediate_Dir \"emulatorRel\"\n# PROP BASE CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP BASE Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"emulatorRel\"\n# PROP Intermediate_Dir \"emulatorRel\"\n# PROP CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP Target_Dir \"\"\n# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"NDEBUG\" /d \"$(CePlatform)\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\n# ADD RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"NDEBUG\" /d \"$(CePlatform)\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\n# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /D \"NDEBUG\" /YX /Gs8192 /GF /O2 /c\n# ADD CPP /nologo /W3 /GX /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /D \"NDEBUG\" /YX /Gs8192 /GF /O2 /c\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /o \"NUL\" /win32\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /o \"NUL\" /win32\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n# ADD LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n\n!ELSEIF  \"$(CFG)\" == \"Dialog - Win32 (WCE emulator) Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"emulatorDbg\"\n# PROP BASE Intermediate_Dir \"emulatorDbg\"\n# PROP BASE CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP BASE Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"emulatorDbg\"\n# PROP Intermediate_Dir \"emulatorDbg\"\n# PROP CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE RSC /l 0x409 /d \"$(CePlatform)\" /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"DEBUG\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\n# ADD RSC /l 0x409 /d \"$(CePlatform)\" /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"DEBUG\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\n# ADD BASE CPP /nologo /W3 /Zi /Od /D \"DEBUG\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /YX /Gs8192 /GF /c\n# ADD CPP /nologo /W3 /GX /Zi /Od /D \"DEBUG\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /YX /Gs8192 /GF /c\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /o \"NUL\" /win32\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /o \"NUL\" /win32\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /debug /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n# ADD LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /debug /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n\n!ENDIF \n\n# Begin Target\n\n# Name \"Dialog - Win32 (WCE emulator) Release\"\n# Name \"Dialog - Win32 (WCE emulator) Debug\"\n# Begin Group \"Source Files\"\n\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n# Begin Source File\n\nSOURCE=.\\DialogApp.cpp\nDEP_CPP_DIALO=\\\n\t\"..\\..\\include\\Default_Resource.h\"\\\n\t\"..\\..\\include\\Dialog.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\DialogApp.h\"\\\n\t\".\\MyDialog.h\"\\\n\t\".\\resource.h\"\\\n\t\n# End Source File\n# Begin Source File\n\nSOURCE=.\\main.cpp\nDEP_CPP_MAIN_=\\\n\t\"..\\..\\include\\Default_Resource.h\"\\\n\t\"..\\..\\include\\Dialog.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\DialogApp.h\"\\\n\t\".\\MyDialog.h\"\\\n\t\".\\resource.h\"\\\n\t\n# End Source File\n# Begin Source File\n\nSOURCE=.\\MyDialog.cpp\nDEP_CPP_MYDIA=\\\n\t\"..\\..\\include\\Default_Resource.h\"\\\n\t\"..\\..\\include\\Dialog.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\MyDialog.h\"\\\n\t\".\\resource.h\"\\\n\t\n# End Source File\n# End Group\n# Begin Group \"Header Files\"\n\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\n# Begin Source File\n\nSOURCE=.\\DialogApp.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\MyDialog.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\resource.h\n# End Source File\n# End Group\n# Begin Group \"Resource Files\"\n\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n# Begin Source File\n\nSOURCE=.\\Resource.rc\n# End Source File\n# Begin Source File\n\nSOURCE=.\\res\\star.ico\n# End Source File\n# End Group\n# Begin Group \"Win32++\"\n\n# PROP Default_Filter \"\"\n# Begin Source File\n\nSOURCE=\"..\\..\\include\\Dialog.h\"\n# End Source File\n# Begin Source File\n\nSOURCE=\"..\\..\\include\\WinCore.h\"\n# End Source File\n# End Group\n# End Target\n# End Project\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Dialog/Dialog.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"8.00\"\n\tName=\"Dialog\"\n\tProjectGUID=\"{8559448A-4279-495E-B22B-CC35E87247E7}\"\n\tKeyword=\"Win32Proj\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Pocket PC 2003 (ARMV4)\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Smartphone 2003 (ARMV4)\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Windows Mobile 5.0 Smartphone SDK (ARMV4I)\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Pocket PC 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir); ..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Smartphone 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Pocket PC 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir); ..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Smartphone 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx\"\n\t\t\tUniqueIdentifier=\"{4FC737F1-C7A5-4376-A066-2A32D752A2FF}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\DialogApp.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\main.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\MyDialog.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl;inc;xsd\"\n\t\t\tUniqueIdentifier=\"{93995380-89BD-4b04-88EB-625FBE52EBFB}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\DialogApp.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\MyDialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\resource.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav\"\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\Resource.rc\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\Win32++\\Dialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\Win32++\\WCEstddef.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\Win32++\\WinCore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Dialog/Dialog.vcw",
    "content": "Microsoft eMbedded Visual Tools Workspace File, Format Version 4.00\n# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\n\n###############################################################################\n\nProject: \"Dialog\"=\".\\Dialog.vcp\" - Package Owner=<4>\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<4>\n{{{\n}}}\n\n###############################################################################\n\nGlobal:\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<3>\n{{{\n}}}\n\n###############################################################################\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Dialog/DialogApp.cpp",
    "content": "/////////////////////////////////////////////////\n//App.cpp -  Definitions for the CDialogApp class\n\n#include \"dialog.h\"\n#include \"resource.h\"\n#include \"DialogApp.h\"\n\n\nCDialogApp::CDialogApp() : MyDialog(IDD_DIALOG)\n{\n}\n\nBOOL CDialogApp::InitInstance()\n{\n\t//Display the Modal Dialog\n\tMyDialog.DoModal();\n\n\t//End the program\n\t::PostQuitMessage(0);\n\n\treturn TRUE;\n}\n\nCDialogApp::~CDialogApp()\n{\n}\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Dialog/DialogApp.h",
    "content": "//////////////////////////////////////////////////\n// DialogApp.h\n//  Declaration of the CDialogApp class\n\n#ifndef DIALOGAPP_H\n#define DIALOGAPP_H\n\n\n#include \"dialog.h\"\n#include \"MyDialog.h\"\n\n\nclass CDialogApp : public CWinApp\n{\npublic:\n\tCDialogApp();\n\tvirtual ~CDialogApp();\n\tvirtual BOOL InitInstance();\n\tCMyDialog& GetDialog() { return MyDialog; }\n\nprivate:\n\tCMyDialog MyDialog;\n};\n\n\n// returns a reference to the CDialogApp object\ninline CDialogApp& GetDlgApp() { return *((CDialogApp*)GetApp()); }\n\n\n#endif // define DIALOGAPP_H\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Dialog/MyDialog.cpp",
    "content": "\n#include \"MyDialog.h\"\n#include \"resource.h\"\n\n\n\nCMyDialog::CMyDialog(UINT nResID, CWnd* pParent)\n\t: CDialog(nResID, pParent)\n{\n}\n\nCMyDialog::~CMyDialog()\n{\n}\n\n\nBOOL CMyDialog::OnInitDialog()\n{\n\t// This function is called before the dialog is displayed.\n\n\n\t//Set the Icon\n\tSetIconLarge(IDW_MAIN);\n\tSetIconSmall(IDW_MAIN);\n\n\treturn true;\n}\n\nvoid CMyDialog::OnOK()\n{\n\t::MessageBox(NULL, TEXT(\"DONE Button Pressed.  Program will exit now.\"), TEXT(\"Button\"), MB_OK);\n\tCDialog::OnOK();\n}\n\nINT_PTR CMyDialog::DialogProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n// Add any messages to be handled inside the switch statement\n\n\n//\tswitch (uMsg)\n//\t{\n//\n//\t} // switch(uMsg)\n\t\n\treturn DialogProcDefault(uMsg, wParam, lParam);\n\t\n} // INT_PTR CALLBACK DialogProc(...)\n\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Dialog/MyDialog.h",
    "content": "#ifndef MYDIALOG_H\n#define MYDIALOG_H\n\n\n#include \"dialog.h\"\n#include \"resource.h\"\n\n\nclass CMyDialog : public CDialog\n{\npublic:\n\tCMyDialog(UINT nResID, CWnd* pParent = NULL);\n\tvirtual ~CMyDialog();\n\n\nprotected:\n\tvirtual BOOL OnInitDialog();\n\tvirtual INT_PTR DialogProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\tvirtual void OnOK();\n\n};\n\n#endif //MYDIALOG_H\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Dialog/main.cpp",
    "content": "///////////////////////////////////////\n// main.cpp\n\n#include \"DialogApp.h\"\n\n\nINT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int iCmdShow)\n{\n\tTCHAR szBuf[MAX_STRING_SIZE];\n\t::LoadString(hInstance, IDW_MAIN, szBuf, MAX_STRING_SIZE -1);\n\tHWND hWnd = FindWindow(szBuf, NULL);\n\n\t// If application is already running, restore it and quit\n\tif (hWnd)\n\t{\n\t\tSetForegroundWindow ((HWND)(((DWORD)hWnd) | 0x01));\n\t\tTRACE(_T(\"Application Already running\"));\n\t\treturn -1;\n\t}\n\n\t// The one and only CDialogApp object\n\tCDialogApp theApp;\n\n\t//Process the window messages\n\treturn theApp.Run();\n}\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Dialog/resource.h",
    "content": "//This file contains the resource ID definitions.\n\n\n// include the Resource IDs defined by Win32++\n#include \"default_resource.h\"\n\n\n//Resource IDs for the dialog\n#define IDD_DIALOG                      100\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Dialog/resource.rc",
    "content": "//Microsoft eMbedded Visual C++ generated resource script.\n//\n\n#include \"resource.h\"\n#include \"windows.h\"\n#include \"commctrl.h\"\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Icon\n//\n\n// Icon with lowest ID value placed first to ensure application icon\n// remains consistent on all systems.\nIDW_MAIN                ICON    DISCARDABLE     \"res\\\\star.ico\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Dialog\n//\n\nIDD_DIALOG DIALOG DISCARDABLE  0, 0, 160, 180\nSTYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE\nFONT 8, \"Tahoma\"\nBEGIN\n    PUSHBUTTON      \"Done\",IDOK,54,118,50,14\n    CTEXT           \"Dialog Application\",IDC_STATIC,33,63,90,13\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// String Table\n//\n\nSTRINGTABLE DISCARDABLE\nBEGIN\n    IDW_MAIN                \"Dialog Application\"\nEND\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DialogDemo/DialogApp.cpp",
    "content": "/////////////////////////////////////////////////\n//App.cpp -  Definitions for the CDialogApp class\n\n#include \"dialog.h\"\n#include \"resource.h\"\n#include \"DialogApp.h\"\n\n\nCDialogApp::CDialogApp() : MyDialog(IDD_COMCTLS)\n{\n}\n\nBOOL CDialogApp::InitInstance()\n{\n\t//Display the Modal Dialog\n\tMyDialog.DoModal();\n\n\t//End the program\n\t::PostQuitMessage(0);\n\n\treturn TRUE;\n}\n\nCDialogApp::~CDialogApp()\n{\n}\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DialogDemo/DialogApp.h",
    "content": "//////////////////////////////////////////////////\n// DialogApp.h\n//  Declaration of the CDialogApp class\n\n#ifndef DIALOGAPP_H\n#define DIALOGAPP_H\n\n\n#include \"dialog.h\"\n#include \"MyDialog.h\"\n\n\nclass CDialogApp : public CWinApp\n{\npublic:\n\tCDialogApp();\n\tvirtual ~CDialogApp();\n\tvirtual BOOL InitInstance();\n\tCMyDialog& GetDlg() { return MyDialog; }\n\nprivate:\n\tCMyDialog MyDialog;\n};\n\n\n// returns a reference to the CDialogApp object\ninline CDialogApp& GetDlgApp() { return *((CDialogApp*)GetApp()); }\n\n\n#endif // define DIALOGAPP_H\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DialogDemo/DialogDemo.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 9.00\n# Visual Studio 2005\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"DialogDemo\", \"DialogDemo.vcproj\", \"{8559448A-4279-495E-B22B-CC35E87247E7}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Pocket PC 2003 (ARMV4) = Debug|Pocket PC 2003 (ARMV4)\n\t\tDebug|Smartphone 2003 (ARMV4) = Debug|Smartphone 2003 (ARMV4)\n\t\tDebug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\tDebug|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\tRelease|Pocket PC 2003 (ARMV4) = Release|Pocket PC 2003 (ARMV4)\n\t\tRelease|Smartphone 2003 (ARMV4) = Release|Smartphone 2003 (ARMV4)\n\t\tRelease|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\tRelease|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Smartphone 2003 (ARMV4).Deploy.0 = Debug|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Smartphone 2003 (ARMV4).Deploy.0 = Release|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DialogDemo/DialogDemo.vcp",
    "content": "# Microsoft eMbedded Visual Tools Project File - Name=\"DialogDemo\" - Package Owner=<4>\n# Microsoft eMbedded Visual Tools Generated Build File, Format Version 6.02\n# ** DO NOT EDIT **\n\n# TARGTYPE \"Win32 (WCE emulator) Application\" 0xa601\n\nCFG=DialogDemo - Win32 (WCE emulator) Debug\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\n!MESSAGE use the Export Makefile command and run\n!MESSAGE \n!MESSAGE NMAKE /f \"DialogDemo.vcn\".\n!MESSAGE \n!MESSAGE You can specify a configuration when running NMAKE\n!MESSAGE by defining the macro CFG on the command line. For example:\n!MESSAGE \n!MESSAGE NMAKE /f \"DialogDemo.vcn\" CFG=\"DialogDemo - Win32 (WCE emulator) Debug\"\n!MESSAGE \n!MESSAGE Possible choices for configuration are:\n!MESSAGE \n!MESSAGE \"DialogDemo - Win32 (WCE emulator) Release\" (based on \"Win32 (WCE emulator) Application\")\n!MESSAGE \"DialogDemo - Win32 (WCE emulator) Debug\" (based on \"Win32 (WCE emulator) Application\")\n!MESSAGE \n\n# Begin Project\n# PROP AllowPerConfigDependencies 0\n# PROP Scc_ProjName \"\"\n# PROP Scc_LocalPath \"\"\n# PROP ATL_Project 2\nCPP=cl.exe\nMTL=midl.exe\nRSC=rc.exe\n\n!IF  \"$(CFG)\" == \"DialogDemo - Win32 (WCE emulator) Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"emulatorRel\"\n# PROP BASE Intermediate_Dir \"emulatorRel\"\n# PROP BASE CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP BASE Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"emulatorRel\"\n# PROP Intermediate_Dir \"emulatorRel\"\n# PROP CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP Target_Dir \"\"\n# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"NDEBUG\" /d \"$(CePlatform)\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\n# ADD RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"NDEBUG\" /d \"$(CePlatform)\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\n# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /D \"NDEBUG\" /YX /Gs8192 /GF /O2 /c\n# ADD CPP /nologo /W3 /GX /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /D \"NDEBUG\" /YX /Gs8192 /GF /O2 /c\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /o \"NUL\" /win32\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /o \"NUL\" /win32\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n# ADD LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n\n!ELSEIF  \"$(CFG)\" == \"DialogDemo - Win32 (WCE emulator) Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"emulatorDbg\"\n# PROP BASE Intermediate_Dir \"emulatorDbg\"\n# PROP BASE CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP BASE Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"emulatorDbg\"\n# PROP Intermediate_Dir \"emulatorDbg\"\n# PROP CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE RSC /l 0x409 /d \"$(CePlatform)\" /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"DEBUG\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\n# ADD RSC /l 0x409 /d \"$(CePlatform)\" /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"DEBUG\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\n# ADD BASE CPP /nologo /W3 /Zi /Od /D \"DEBUG\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /YX /Gs8192 /GF /c\n# ADD CPP /nologo /W3 /GX /Zi /Od /D \"DEBUG\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /YX /Gs8192 /GF /c\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /o \"NUL\" /win32\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /o \"NUL\" /win32\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /debug /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n# ADD LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /debug /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n\n!ENDIF \n\n# Begin Target\n\n# Name \"DialogDemo - Win32 (WCE emulator) Release\"\n# Name \"DialogDemo - Win32 (WCE emulator) Debug\"\n# Begin Group \"Source Files\"\n\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n# Begin Source File\n\nSOURCE=.\\DialogApp.cpp\nDEP_CPP_DIALO=\\\n\t\"..\\..\\include\\Default_Resource.h\"\\\n\t\"..\\..\\include\\dialog.h\"\\\n\t\"..\\..\\include\\WCEstddef.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\DialogApp.h\"\\\n\t\".\\MyDialog.h\"\\\n\t\".\\resource.h\"\\\n\t{$(INCLUDE)}\"ceconfig.h\"\\\n\t\nNODEP_CPP_DIALO=\\\n\t\"..\\..\\include\\DeviceResolutionAware.h\"\\\n\t\n# End Source File\n# Begin Source File\n\nSOURCE=.\\main.cpp\nDEP_CPP_MAIN_=\\\n\t\"..\\..\\include\\Default_Resource.h\"\\\n\t\"..\\..\\include\\dialog.h\"\\\n\t\"..\\..\\include\\WCEstddef.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\DialogApp.h\"\\\n\t\".\\MyDialog.h\"\\\n\t\".\\resource.h\"\\\n\t{$(INCLUDE)}\"ceconfig.h\"\\\n\t\nNODEP_CPP_MAIN_=\\\n\t\"..\\..\\include\\DeviceResolutionAware.h\"\\\n\t\n# End Source File\n# Begin Source File\n\nSOURCE=.\\MyDialog.cpp\nDEP_CPP_MYDIA=\\\n\t\"..\\..\\include\\Default_Resource.h\"\\\n\t\"..\\..\\include\\dialog.h\"\\\n\t\"..\\..\\include\\WCEstddef.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\MyDialog.h\"\\\n\t\".\\resource.h\"\\\n\t{$(INCLUDE)}\"ceconfig.h\"\\\n\t\nNODEP_CPP_MYDIA=\\\n\t\"..\\..\\include\\DeviceResolutionAware.h\"\\\n\t\n# End Source File\n# End Group\n# Begin Group \"Header Files\"\n\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\n# Begin Source File\n\nSOURCE=.\\DialogApp.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\MyDialog.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\resource.h\n# End Source File\n# End Group\n# Begin Group \"Resource Files\"\n\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n# Begin Source File\n\nSOURCE=.\\Resource.rc\n# End Source File\n# Begin Source File\n\nSOURCE=.\\res\\star.ico\n# End Source File\n# End Group\n# Begin Group \"Win32++\"\n\n# PROP Default_Filter \"\"\n# Begin Source File\n\nSOURCE=\"..\\..\\include\\DialogDemo.h\"\n# End Source File\n# Begin Source File\n\nSOURCE=\"..\\..\\include\\WinCore.h\"\n# End Source File\n# End Group\n# End Target\n# End Project\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DialogDemo/DialogDemo.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"8.00\"\n\tName=\"DialogDemo\"\n\tProjectGUID=\"{8559448A-4279-495E-B22B-CC35E87247E7}\"\n\tKeyword=\"Win32Proj\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Pocket PC 2003 (ARMV4)\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Smartphone 2003 (ARMV4)\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Windows Mobile 5.0 Smartphone SDK (ARMV4I)\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Pocket PC 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir); ..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Smartphone 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Pocket PC 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir); ..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Smartphone 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx\"\n\t\t\tUniqueIdentifier=\"{4FC737F1-C7A5-4376-A066-2A32D752A2FF}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\DialogApp.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\main.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\MyDialog.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl;inc;xsd\"\n\t\t\tUniqueIdentifier=\"{93995380-89BD-4b04-88EB-625FBE52EBFB}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\DialogApp.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\MyDialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\resource.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav\"\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\Resource.rc\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\Win32++\\Dialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\Win32++\\WCEstddef.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\Win32++\\WinCore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DialogDemo/DialogDemo.vcw",
    "content": "Microsoft eMbedded Visual Tools Workspace File, Format Version 4.00\n# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\n\n###############################################################################\n\nProject: \"DialogDemo\"=\".\\DialogDemo.vcp\" - Package Owner=<4>\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<4>\n{{{\n}}}\n\n###############################################################################\n\nGlobal:\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<3>\n{{{\n}}}\n\n###############################################################################\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DialogDemo/MyDialog.cpp",
    "content": "\n#include \"MyDialog.h\"\n#include \"resource.h\"\n#include \"windowsx.h\"\n\n\nCMyDialog::CMyDialog(UINT nResID, CWnd* pParent)\n\t: CDialog(nResID, pParent), m_nCounter(0)\n{\n}\n\nCMyDialog::~CMyDialog()\n{\n}\n\nvoid CMyDialog::AddToButton()\n{\n\t//get the control window\n\tHWND hwButton = ::GetDlgItem(m_hWnd, IDC_BUTTON1);\n\t\n\t//set text to show in control\n\tTCHAR szBufW[16];\n\twsprintf(szBufW, L\"Button %d\", m_nCounter);\n\t::Button_SetText(hwButton, szBufW);\n\treturn;\n}\n\nvoid CMyDialog::AddToComboBox()\n{\n\t//get the control window\n\tHWND hwComboBox = ::GetDlgItem(m_hWnd, IDC_COMBO1);\n\t\n\t//set text to show in control\n\tTCHAR szBufW[16];\n\twsprintf(szBufW, L\"ComboBox %d\", m_nCounter);\n\tif (m_nCounter)\n\t{\n\t\tComboBox_AddString(hwComboBox, szBufW);\n\t\t::ComboBox_SetText(hwComboBox, szBufW);\n\t\tComboBox_SetCurSel(hwComboBox, m_nCounter-1);\n\t}\n\telse \n\t{\n\t\tComboBox_ResetContent(hwComboBox); \n\t\tComboBox_ShowDropdown(hwComboBox, FALSE);\n\t}\n}\n\nvoid CMyDialog::AddToEdit()\n{\n\t//get the control window\n\tHWND hwEdit = ::GetDlgItem(m_hWnd, IDC_EDIT1 ); \n\t\n\t//set text to show in control\n\tTCHAR szBufW[16];\n\twsprintf(szBufW, L\"Edit %d\\r\\n\", m_nCounter);\n\tif (m_nCounter)\n\t\tEdit_ReplaceSel(hwEdit, szBufW); \n\telse\n\t\t::SetWindowText(hwEdit, L\"\"); \n}\n\nvoid CMyDialog::AddToListBox()\n{\n\t//get the control window\n\tHWND hwListBox = ::GetDlgItem(m_hWnd, IDC_LIST1 ); \n\t\n\t//set text to show in control\n\tTCHAR szBufW[16];\n\twsprintf(szBufW, L\"ListBox %d\", m_nCounter);\n\tif (m_nCounter)\n\t\tListBox_AddString(hwListBox, szBufW);\n\telse\n\t\tListBox_ResetContent(hwListBox); \n}\n\nvoid CMyDialog::AddToProgressBar()\n{\n\t//get the control window\n\tHWND hwProgressBar = ::GetDlgItem(m_hWnd, IDC_PROGRESS1);\n\t\n\t//set progress bar position\n\tSendMessage(hwProgressBar, PBM_SETPOS, (WPARAM)m_nCounter * 10, 0L);\n}\n\nvoid CMyDialog::AddToScrollBars()\n{\n\t//get the control window\n\tHWND hwScrollBarH = ::GetDlgItem(m_hWnd, IDC_SCROLLBAR1);\n\tHWND hwScrollBarV = ::GetDlgItem(m_hWnd, IDC_SCROLLBAR2);\n\t\n\t//set scroll bar range\n\tScrollBar_SetRange(hwScrollBarH, 0, 10, FALSE);\n\tScrollBar_SetRange(hwScrollBarV, 0, 10, FALSE);\n\t\n\t//set scroll bar position\n\tScrollBar_SetPos(hwScrollBarH, m_nCounter, TRUE);\n\tScrollBar_SetPos(hwScrollBarV, m_nCounter, TRUE);\n}\n\nvoid CMyDialog::AddToSlider()\n{\n\t//get the control window\n\tHWND hwSlider = ::GetDlgItem(m_hWnd, IDC_SLIDER1);\n\t\n\t//set slider position\n\tSendMessage(hwSlider, TBM_SETPOS, TRUE, (WPARAM)m_nCounter * 10);\n}\n\nBOOL CMyDialog::OnInitDialog()\n{\n\t//Set the Icon\n\tSetIconLarge(IDW_MAIN);\n\tSetIconSmall(IDW_MAIN);\n\n\t// Set a timer to animate the controls on the dialog window\n\tSetTimer(ID_TIMER, 500, NULL);\n\n\treturn true;\n}\n\nvoid CMyDialog::OnOK()\n{\n\t::MessageBox(NULL, TEXT(\"DONE Button Pressed.  Program will exit now.\"), TEXT(\"Button\"), MB_OK);\n\tCDialog::OnOK();\n}\n\nINT_PTR CMyDialog::DialogProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n    switch (uMsg)\n    {\n\tcase WM_TIMER:\n\t\tm_nCounter > 9 ? m_nCounter = 0 : m_nCounter++;\n\t\tAddToEdit();\n\t\tAddToListBox();\n\t\tAddToScrollBars();\n\t\tAddToProgressBar();\n\t\tAddToSlider();\n\t\tAddToComboBox();\n\t\tAddToButton();\n    break;\n\n    } // switch(uMsg)\n\t\n\treturn DialogProcDefault(uMsg, wParam, lParam);\n\t\n} // INT_PTR CALLBACK DialogProc(...)\n\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DialogDemo/MyDialog.h",
    "content": "#ifndef MYDIALOG_H\n#define MYDIALOG_H\n\n\n#include \"dialog.h\"\n#include \"resource.h\"\n\n\nclass CMyDialog : public CDialog\n{\npublic:\n\tCMyDialog(UINT nResID, CWnd* pParent = NULL);\n\tvirtual ~CMyDialog();\n\tvoid AddToEdit();\n\tvoid AddToListBox();\n\tvoid AddToProgressBar();\n\tvoid AddToScrollBars();\n\tvoid AddToSlider();\n\tvoid AddToComboBox();\n\tvoid AddToButton();\n\nprivate:\n\tvirtual BOOL OnInitDialog();\n\tvirtual INT_PTR DialogProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\tvirtual void OnOK();\n\n\tint m_nCounter;\n};\n\n#endif //MYDIALOG_H\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DialogDemo/main.cpp",
    "content": "///////////////////////////////////////\n// main.cpp\n\n#include \"DialogApp.h\"\n\n\nINT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int iCmdShow)\n{\n\tTCHAR szBuf[MAX_STRING_SIZE];\n\t::LoadString(hInstance, IDW_MAIN, szBuf, MAX_STRING_SIZE -1);\n\tHWND hWnd = FindWindow(szBuf, NULL);\n\n\t// If application is already running, restore it and quit\n\tif (hWnd)\n\t{\n\t\tSetForegroundWindow ((HWND)(((DWORD)hWnd) | 0x01));\n\t\tTRACE(_T(\"Application Already running\"));\n\t\treturn -1;\n\t}\n\n\t// The one and only CDialogApp object\n\tCDialogApp theApp;\n\n\t//Process the window messages\n\treturn theApp.Run();\n}\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DialogDemo/resource.h",
    "content": "//This file contains the resource ID definitions.\n\n\n// include the Resource IDs defined by Win32++\n#include \"default_resource.h\"\n\n\n//Resource IDs for the dialog\n#define IDD_COMCTLS                     100\n#define IDC_EDIT1                       101\n#define IDC_BUTTON1                     102\n#define IDC_COMBO1                      103\n#define IDC_LIST1                       104\n#define IDC_SCROLLBAR1                  105\n#define IDC_SCROLLBAR2                  106\n#define IDC_SPIN1                       107\n#define IDC_SLIDER1                     108\n#define IDC_PROGRESS1                   109\n\n#define ID_TIMER                        120\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DialogDemo/resource.rc",
    "content": "//Microsoft eMbedded Visual C++ generated resource script.\n//\n\n#include \"resource.h\"\n#include \"windows.h\"\n#include \"commctrl.h\"\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Icon\n//\n\n// Icon with lowest ID value placed first to ensure application icon\n// remains consistent on all systems.\nIDW_MAIN                ICON    DISCARDABLE     \"res\\\\star.ico\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Dialog\n//\n\nIDD_COMCTLS DIALOG DISCARDABLE  0, 0, 160, 180\nSTYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE\nFONT 8, \"Tahoma\"\nBEGIN\n    LTEXT           \"Static Text\",IDC_STATIC,2,2,48,8\n    CTEXT           \"Boxed Static Text\",IDC_STATIC,56,2,66,12,WS_BORDER\n    EDITTEXT        IDC_EDIT1,4,22,58,54,ES_MULTILINE | ES_AUTOVSCROLL |\n                    ES_WANTRETURN | WS_VSCROLL\n    PUSHBUTTON      \"Button1\",IDC_BUTTON1,66,22,46,14\n    COMBOBOX        IDC_COMBO1,66,52,64,53,CBS_DROPDOWN | CBS_SORT |\n                    CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP\n    LISTBOX         IDC_LIST1,4,88,58,42,LBS_SORT | WS_VSCROLL | WS_TABSTOP\n    LTEXT           \"Edit\",IDC_STATIC,2,12,48,8\n    LTEXT           \"Combo box\",IDC_STATIC,66,40,48,11\n    LTEXT           \"List box\",IDC_STATIC,2,78,48,8\n    SCROLLBAR       IDC_SCROLLBAR1,138,46,10,56,SBS_VERT\n    SCROLLBAR       IDC_SCROLLBAR2,66,108,86,8\n    CONTROL         \"Spin1\",IDC_SPIN1,\"msctls_updown32\",UDS_ARROWKEYS,140,2,\n                    11,18\n    CONTROL         \"Slider1\",IDC_SLIDER1,\"msctls_trackbar32\",TBS_BOTH |\n                    WS_TABSTOP,78,134,72,26\n    CONTROL         \"Progress1\",IDC_PROGRESS1,\"msctls_progress32\",WS_BORDER,\n                    2,140,72,12\n    LTEXT           \"Slider\",IDC_STATIC,78,124,48,8\n    LTEXT           \"Progress Bar\",IDC_STATIC,4,132,48,8\n    LTEXT           \"Vert and Horz Scrollbars\",IDC_STATIC,80,82,48,20\n    PUSHBUTTON      \"Done\",IDOK,54,162,50,14\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// String Table\n//\n\nSTRINGTABLE DISCARDABLE\nBEGIN\n    IDW_MAIN                \"Dialog Application\"\nEND\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DlgSubclass/Button.cpp",
    "content": "/////////////////////////////\n// Button.cpp\n\n#include \"DlgSubclassApp.h\"\n#include \"Button.h\"\n\nLRESULT CButton::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n\tCMyDialog& dialog = ((CDlgSubclassApp*) GetApp())->GetDialog();\n\tswitch (uMsg)\n\t{\n\tcase WM_MOUSEMOVE:\n\t\tTRACE(TEXT(\"CButton::WndProc - WM_MOUSEMOVE Message\\n\"));\n\t\tdialog.SetStatic(TEXT(\"WM_MOUSEMOVE\"));\n\t\tbreak;\n\tcase WM_SETCURSOR:\n\t\tTRACE(TEXT(\"CButton::WndProc - WM_SETCURSOR Message\\n\"));\n\t\tdialog.SetStatic(TEXT(\"WM_SETCURSOR\"));\n\t\tbreak;\n\tcase WM_LBUTTONDOWN:\n\t\tTRACE(TEXT(\"CButton::WndProc - WM_LBUTTONDOWN Message\\n\"));\n\t\tdialog.SetStatic(TEXT(\"WM_LBUTTONDOWN\"));\n\t\tbreak;\n\tcase WM_LBUTTONUP:\n\t\tTRACE(TEXT(\"CButton::WndProc - WM_LBUTTONUP Message\\n\"));\n\t\tdialog.SetStatic(TEXT(\"WM_LBUTTONUP\"));\n\t\tbreak;\n\n\tdefault:\n\t\tTRACE(TEXT(\"CButton::WndProc - Unspecified Message\\n\"));\n\t\tbreak;\n\t}\n\n\t// Pass unhandled messages on for default processing\n\treturn WndProcDefault(uMsg, wParam, lParam);\n}\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DlgSubclass/Button.h",
    "content": "/////////////////////////////\n// Button.h\n\n\n#ifndef BUTTON_H\n#define BUTTON_H\n\n#include \"wincore.h\"\n\n\nclass CButton : public CWnd\n{\npublic:\n\tCButton() {}\n\tvirtual ~CButton() {}\n\nprotected:\n\tvirtual LRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\n};\n\n\n\n#endif //BUTTON_H\n\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DlgSubclass/DlgSubclass.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 9.00\n# Visual Studio 2005\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"DlgSubclass\", \"DlgSubclass.vcproj\", \"{8559448A-4279-495E-B22B-CC35E87247E7}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Pocket PC 2003 (ARMV4) = Debug|Pocket PC 2003 (ARMV4)\n\t\tDebug|Smartphone 2003 (ARMV4) = Debug|Smartphone 2003 (ARMV4)\n\t\tDebug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\tDebug|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\tRelease|Pocket PC 2003 (ARMV4) = Release|Pocket PC 2003 (ARMV4)\n\t\tRelease|Smartphone 2003 (ARMV4) = Release|Smartphone 2003 (ARMV4)\n\t\tRelease|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\tRelease|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Smartphone 2003 (ARMV4).Deploy.0 = Debug|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Smartphone 2003 (ARMV4).Deploy.0 = Release|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DlgSubclass/DlgSubclass.vcp",
    "content": "# Microsoft eMbedded Visual Tools Project File - Name=\"DlgSubclass\" - Package Owner=<4>\n# Microsoft eMbedded Visual Tools Generated Build File, Format Version 6.02\n# ** DO NOT EDIT **\n\n# TARGTYPE \"Win32 (WCE ARMV4) Application\" 0xa301\n# TARGTYPE \"Win32 (WCE emulator) Application\" 0xa601\n\nCFG=DlgSubclass - Win32 (WCE emulator) Debug\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\n!MESSAGE use the Export Makefile command and run\n!MESSAGE \n!MESSAGE NMAKE /f \"DlgSubclass.vcn\".\n!MESSAGE \n!MESSAGE You can specify a configuration when running NMAKE\n!MESSAGE by defining the macro CFG on the command line. For example:\n!MESSAGE \n!MESSAGE NMAKE /f \"DlgSubclass.vcn\" CFG=\"DlgSubclass - Win32 (WCE emulator) Debug\"\n!MESSAGE \n!MESSAGE Possible choices for configuration are:\n!MESSAGE \n!MESSAGE \"DlgSubclass - Win32 (WCE emulator) Release\" (based on \"Win32 (WCE emulator) Application\")\n!MESSAGE \"DlgSubclass - Win32 (WCE emulator) Debug\" (based on \"Win32 (WCE emulator) Application\")\n!MESSAGE \"DlgSubclass - Win32 (WCE ARMV4) Release\" (based on \"Win32 (WCE ARMV4) Application\")\n!MESSAGE \"DlgSubclass - Win32 (WCE ARMV4) Debug\" (based on \"Win32 (WCE ARMV4) Application\")\n!MESSAGE \n\n# Begin Project\n# PROP AllowPerConfigDependencies 0\n# PROP Scc_ProjName \"\"\n# PROP Scc_LocalPath \"\"\n# PROP ATL_Project 2\n\n!IF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE emulator) Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"emulatorRel\"\n# PROP BASE Intermediate_Dir \"emulatorRel\"\n# PROP BASE CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP BASE Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"emulatorRel\"\n# PROP Intermediate_Dir \"emulatorRel\"\n# PROP CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\nRSC=rc.exe\n# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"NDEBUG\" /d \"$(CePlatform)\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\n# ADD RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"NDEBUG\" /d \"$(CePlatform)\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\nCPP=cl.exe\n# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /D \"NDEBUG\" /Yu\"stdafx.h\" /Gs8192 /GF /O2 /c\n# ADD CPP /nologo /W3 /GX /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /D \"NDEBUG\" /Gs8192 /F0x0 /GF /O2 /c\nMTL=midl.exe\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /o \"NUL\" /win32\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /o \"NUL\" /win32\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) aygshell.lib /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n# ADD LINK32 $(CEx86Corelibc) commctrl.lib coredll.lib /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n\n!ELSEIF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE emulator) Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"emulatorDbg\"\n# PROP BASE Intermediate_Dir \"emulatorDbg\"\n# PROP BASE CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP BASE Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"emulatorDbg\"\n# PROP Intermediate_Dir \"emulatorDbg\"\n# PROP CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\nRSC=rc.exe\n# ADD BASE RSC /l 0x409 /d \"$(CePlatform)\" /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"DEBUG\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\n# ADD RSC /l 0x409 /d \"$(CePlatform)\" /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"DEBUG\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\nCPP=cl.exe\n# ADD BASE CPP /nologo /W3 /Zi /Od /D \"DEBUG\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /Yu\"stdafx.h\" /Gs8192 /GF /c\n# ADD CPP /nologo /W3 /GX /Zi /Od /D \"DEBUG\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /Gs8192 /GF /c\nMTL=midl.exe\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /o \"NUL\" /win32\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /o \"NUL\" /win32\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) aygshell.lib /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /debug /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n# ADD LINK32 $(CEx86Corelibc) commctrl.lib coredll.lib /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /debug /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n\n!ELSEIF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE ARMV4) Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"ARMV4Rel\"\n# PROP BASE Intermediate_Dir \"ARMV4Rel\"\n# PROP BASE CPU_ID \"{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}\"\n# PROP BASE Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"ARMV4Rel\"\n# PROP Intermediate_Dir \"ARMV4Rel\"\n# PROP CPU_ID \"{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}\"\n# PROP Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\nRSC=rc.exe\n# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"NDEBUG\" /d \"UNICODE\" /d \"_UNICODE\" /d \"$(CePlatform)\" /d \"ARM\" /d \"_ARM_\" /d \"ARMV4\" /r\n# ADD RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"NDEBUG\" /d \"UNICODE\" /d \"_UNICODE\" /d \"$(CePlatform)\" /d \"ARM\" /d \"_ARM_\" /d \"ARMV4\" /r\nCPP=clarm.exe\n# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"ARM\" /D \"_ARM_\" /D \"ARMV4\" /D UNDER_CE=$(CEVersion) /D \"UNICODE\" /D \"_UNICODE\" /D \"NDEBUG\" /Yu\"stdafx.h\" /O2 /M$(CECrtMT) /c\n# ADD CPP /nologo /W3 /GX /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"ARM\" /D \"_ARM_\" /D \"ARMV4\" /D UNDER_CE=$(CEVersion) /D \"UNICODE\" /D \"_UNICODE\" /D \"NDEBUG\" /O2 /M$(CECrtMT) /c\nMTL=midl.exe\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /o \"NUL\" /win32\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /o \"NUL\" /win32\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 commctrl.lib coredll.lib aygshell.lib /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /nodefaultlib:\"$(CENoDefaultLib)\" /subsystem:$(CESubsystem) /align:\"4096\" /MACHINE:ARM\n# ADD LINK32 commctrl.lib coredll.lib /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /nodefaultlib:\"$(CENoDefaultLib)\" /subsystem:$(CESubsystem) /align:\"4096\" /MACHINE:ARM\n\n!ELSEIF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE ARMV4) Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"ARMV4Dbg\"\n# PROP BASE Intermediate_Dir \"ARMV4Dbg\"\n# PROP BASE CPU_ID \"{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}\"\n# PROP BASE Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"ARMV4Dbg\"\n# PROP Intermediate_Dir \"ARMV4Dbg\"\n# PROP CPU_ID \"{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}\"\n# PROP Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\nRSC=rc.exe\n# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"DEBUG\" /d \"UNICODE\" /d \"_UNICODE\" /d \"$(CePlatform)\" /d \"ARM\" /d \"_ARM_\" /d \"ARMV4\" /r\n# ADD RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"DEBUG\" /d \"UNICODE\" /d \"_UNICODE\" /d \"$(CePlatform)\" /d \"ARM\" /d \"_ARM_\" /d \"ARMV4\" /r\nCPP=clarm.exe\n# ADD BASE CPP /nologo /W3 /Zi /Od /D \"DEBUG\" /D \"ARM\" /D \"_ARM_\" /D \"ARMV4\" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"UNICODE\" /D \"_UNICODE\" /Yu\"stdafx.h\" /M$(CECrtMTDebug) /c\n# ADD CPP /nologo /W3 /GX /Zi /Od /D \"DEBUG\" /D \"ARM\" /D \"_ARM_\" /D \"ARMV4\" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"UNICODE\" /D \"_UNICODE\" /M$(CECrtMTDebug) /c\nMTL=midl.exe\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /o \"NUL\" /win32\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /o \"NUL\" /win32\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 commctrl.lib coredll.lib aygshell.lib /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /debug /nodefaultlib:\"$(CENoDefaultLib)\" /subsystem:$(CESubsystem) /align:\"4096\" /MACHINE:ARM\n# ADD LINK32 commctrl.lib coredll.lib /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /debug /nodefaultlib:\"$(CENoDefaultLib)\" /subsystem:$(CESubsystem) /align:\"4096\" /MACHINE:ARM\n\n!ENDIF \n\n# Begin Target\n\n# Name \"DlgSubclass - Win32 (WCE emulator) Release\"\n# Name \"DlgSubclass - Win32 (WCE emulator) Debug\"\n# Name \"DlgSubclass - Win32 (WCE ARMV4) Release\"\n# Name \"DlgSubclass - Win32 (WCE ARMV4) Debug\"\n# Begin Group \"Source Files\"\n\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n# Begin Source File\n\nSOURCE=.\\Button.cpp\n\n!IF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE emulator) Release\"\n\nDEP_CPP_BUTTO=\\\n\t\".\\Button.h\"\\\n\t\".\\DlgSubclassApp.h\"\\\n\t\".\\Hyperlink.h\"\\\n\t\".\\MyDialog.h\"\\\n\t\".\\resource.h\"\\\n\t\nNODEP_CPP_BUTTO=\\\n\t\"..\\WinCE++\\Default_Resource.h\"\\\n\t\"..\\WinCE++\\Dialog.h\"\\\n\t\"..\\WinCE++\\WinCore.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE emulator) Debug\"\n\nDEP_CPP_BUTTO=\\\n\t\"..\\..\\include\\Default_Resource.h\"\\\n\t\"..\\..\\include\\Dialog.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\Button.h\"\\\n\t\".\\DlgSubclassApp.h\"\\\n\t\".\\Hyperlink.h\"\\\n\t\".\\MyDialog.h\"\\\n\t\".\\resource.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE ARMV4) Release\"\n\nDEP_CPP_BUTTO=\\\n\t\".\\Button.h\"\\\n\t\".\\DlgSubclassApp.h\"\\\n\t\".\\Hyperlink.h\"\\\n\t\".\\MyDialog.h\"\\\n\t\".\\resource.h\"\\\n\t\nNODEP_CPP_BUTTO=\\\n\t\"..\\WinCE++\\Default_Resource.h\"\\\n\t\"..\\WinCE++\\Dialog.h\"\\\n\t\"..\\WinCE++\\WinCore.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE ARMV4) Debug\"\n\nDEP_CPP_BUTTO=\\\n\t\"..\\..\\include\\Default_Resource.h\"\\\n\t\"..\\..\\include\\Dialog.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\Button.h\"\\\n\t\".\\DlgSubclassApp.h\"\\\n\t\".\\Hyperlink.h\"\\\n\t\".\\MyDialog.h\"\\\n\t\".\\resource.h\"\\\n\t\n\n!ENDIF \n\n# End Source File\n# Begin Source File\n\nSOURCE=.\\DlgSubclassApp.cpp\n\n!IF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE emulator) Release\"\n\nDEP_CPP_DLGSU=\\\n\t\".\\Button.h\"\\\n\t\".\\DlgSubclassApp.h\"\\\n\t\".\\Hyperlink.h\"\\\n\t\".\\MyDialog.h\"\\\n\t\".\\resource.h\"\\\n\t\nNODEP_CPP_DLGSU=\\\n\t\"..\\WinCE++\\Default_Resource.h\"\\\n\t\"..\\WinCE++\\Dialog.h\"\\\n\t\"..\\WinCE++\\WinCore.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE emulator) Debug\"\n\nDEP_CPP_DLGSU=\\\n\t\"..\\..\\include\\Default_Resource.h\"\\\n\t\"..\\..\\include\\Dialog.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\Button.h\"\\\n\t\".\\DlgSubclassApp.h\"\\\n\t\".\\Hyperlink.h\"\\\n\t\".\\MyDialog.h\"\\\n\t\".\\resource.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE ARMV4) Release\"\n\nDEP_CPP_DLGSU=\\\n\t\".\\Button.h\"\\\n\t\".\\DlgSubclassApp.h\"\\\n\t\".\\Hyperlink.h\"\\\n\t\".\\MyDialog.h\"\\\n\t\".\\resource.h\"\\\n\t\nNODEP_CPP_DLGSU=\\\n\t\"..\\WinCE++\\Default_Resource.h\"\\\n\t\"..\\WinCE++\\Dialog.h\"\\\n\t\"..\\WinCE++\\WinCore.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE ARMV4) Debug\"\n\nDEP_CPP_DLGSU=\\\n\t\"..\\..\\include\\Default_Resource.h\"\\\n\t\"..\\..\\include\\Dialog.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\Button.h\"\\\n\t\".\\DlgSubclassApp.h\"\\\n\t\".\\Hyperlink.h\"\\\n\t\".\\MyDialog.h\"\\\n\t\".\\resource.h\"\\\n\t\n\n!ENDIF \n\n# End Source File\n# Begin Source File\n\nSOURCE=.\\Hyperlink.cpp\n\n!IF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE emulator) Release\"\n\nDEP_CPP_HYPER=\\\n\t\".\\Hyperlink.h\"\\\n\t\nNODEP_CPP_HYPER=\\\n\t\"..\\WinCE++\\Default_Resource.h\"\\\n\t\"..\\WinCE++\\WinCore.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE emulator) Debug\"\n\nDEP_CPP_HYPER=\\\n\t\"..\\..\\include\\Default_Resource.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\Hyperlink.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE ARMV4) Release\"\n\nDEP_CPP_HYPER=\\\n\t\".\\Hyperlink.h\"\\\n\t\nNODEP_CPP_HYPER=\\\n\t\"..\\WinCE++\\Default_Resource.h\"\\\n\t\"..\\WinCE++\\WinCore.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE ARMV4) Debug\"\n\nDEP_CPP_HYPER=\\\n\t\"..\\..\\include\\Default_Resource.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\Hyperlink.h\"\\\n\t\n\n!ENDIF \n\n# End Source File\n# Begin Source File\n\nSOURCE=.\\main.cpp\n\n!IF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE emulator) Release\"\n\nDEP_CPP_MAIN_=\\\n\t\".\\Button.h\"\\\n\t\".\\DlgSubclassApp.h\"\\\n\t\".\\Hyperlink.h\"\\\n\t\".\\MyDialog.h\"\\\n\t\".\\resource.h\"\\\n\t\nNODEP_CPP_MAIN_=\\\n\t\"..\\WinCE++\\Default_Resource.h\"\\\n\t\"..\\WinCE++\\Dialog.h\"\\\n\t\"..\\WinCE++\\WinCore.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE emulator) Debug\"\n\nDEP_CPP_MAIN_=\\\n\t\"..\\..\\include\\Default_Resource.h\"\\\n\t\"..\\..\\include\\Dialog.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\Button.h\"\\\n\t\".\\DlgSubclassApp.h\"\\\n\t\".\\Hyperlink.h\"\\\n\t\".\\MyDialog.h\"\\\n\t\".\\resource.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE ARMV4) Release\"\n\nDEP_CPP_MAIN_=\\\n\t\".\\Button.h\"\\\n\t\".\\DlgSubclassApp.h\"\\\n\t\".\\Hyperlink.h\"\\\n\t\".\\MyDialog.h\"\\\n\t\".\\resource.h\"\\\n\t\nNODEP_CPP_MAIN_=\\\n\t\"..\\WinCE++\\Default_Resource.h\"\\\n\t\"..\\WinCE++\\Dialog.h\"\\\n\t\"..\\WinCE++\\WinCore.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE ARMV4) Debug\"\n\nDEP_CPP_MAIN_=\\\n\t\"..\\..\\include\\Default_Resource.h\"\\\n\t\"..\\..\\include\\Dialog.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\Button.h\"\\\n\t\".\\DlgSubclassApp.h\"\\\n\t\".\\Hyperlink.h\"\\\n\t\".\\MyDialog.h\"\\\n\t\".\\resource.h\"\\\n\t\n\n!ENDIF \n\n# End Source File\n# Begin Source File\n\nSOURCE=.\\MyDialog.cpp\n\n!IF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE emulator) Release\"\n\nDEP_CPP_MYDIA=\\\n\t\".\\Button.h\"\\\n\t\".\\Hyperlink.h\"\\\n\t\".\\MyDialog.h\"\\\n\t\".\\resource.h\"\\\n\t\nNODEP_CPP_MYDIA=\\\n\t\"..\\WinCE++\\Default_Resource.h\"\\\n\t\"..\\WinCE++\\Dialog.h\"\\\n\t\"..\\WinCE++\\WinCore.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE emulator) Debug\"\n\nDEP_CPP_MYDIA=\\\n\t\"..\\..\\include\\Default_Resource.h\"\\\n\t\"..\\..\\include\\Dialog.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\Button.h\"\\\n\t\".\\Hyperlink.h\"\\\n\t\".\\MyDialog.h\"\\\n\t\".\\resource.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE ARMV4) Release\"\n\nDEP_CPP_MYDIA=\\\n\t\".\\Button.h\"\\\n\t\".\\Hyperlink.h\"\\\n\t\".\\MyDialog.h\"\\\n\t\".\\resource.h\"\\\n\t\nNODEP_CPP_MYDIA=\\\n\t\"..\\WinCE++\\Default_Resource.h\"\\\n\t\"..\\WinCE++\\Dialog.h\"\\\n\t\"..\\WinCE++\\WinCore.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE ARMV4) Debug\"\n\nDEP_CPP_MYDIA=\\\n\t\"..\\..\\include\\Default_Resource.h\"\\\n\t\"..\\..\\include\\Dialog.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\Button.h\"\\\n\t\".\\Hyperlink.h\"\\\n\t\".\\MyDialog.h\"\\\n\t\".\\resource.h\"\\\n\t\n\n!ENDIF \n\n# End Source File\n# Begin Source File\n\nSOURCE=.\\Resource.rc\n\n!IF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE emulator) Release\"\n\n!ELSEIF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE emulator) Debug\"\n\n!ELSEIF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE ARMV4) Release\"\n\n!ELSEIF  \"$(CFG)\" == \"DlgSubclass - Win32 (WCE ARMV4) Debug\"\n\n!ENDIF \n\n# End Source File\n# End Group\n# Begin Group \"Header Files\"\n\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\n# Begin Source File\n\nSOURCE=.\\Button.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\DlgSubclassApp.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\Hyperlink.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\MyDialog.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\resource.h\n# End Source File\n# End Group\n# Begin Group \"Resource Files\"\n\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n# Begin Source File\n\nSOURCE=.\\res\\Dialog.ico\n# End Source File\n# Begin Source File\n\nSOURCE=\".\\res\\Win32++.manifest\"\n# End Source File\n# End Group\n# Begin Group \"Win32++\"\n\n# PROP Default_Filter \"\"\n# Begin Source File\n\nSOURCE=\"..\\..\\include\\Default_Resource.h\"\n# End Source File\n# Begin Source File\n\nSOURCE=\"..\\..\\include\\Dialog.h\"\n# End Source File\n# Begin Source File\n\nSOURCE=\"..\\..\\include\\WinCore.h\"\n# End Source File\n# End Group\n# End Target\n# End Project\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DlgSubclass/DlgSubclass.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"8.00\"\n\tName=\"DlgSubclass\"\n\tProjectGUID=\"{8559448A-4279-495E-B22B-CC35E87247E7}\"\n\tKeyword=\"Win32Proj\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Pocket PC 2003 (ARMV4)\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Smartphone 2003 (ARMV4)\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Windows Mobile 5.0 Smartphone SDK (ARMV4I)\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Pocket PC 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir);..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Smartphone 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Pocket PC 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir);..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Smartphone 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx\"\n\t\t\tUniqueIdentifier=\"{4FC737F1-C7A5-4376-A066-2A32D752A2FF}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\Button.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\DlgSubclassApp.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\Hyperlink.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\main.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\MyDialog.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl;inc;xsd\"\n\t\t\tUniqueIdentifier=\"{93995380-89BD-4b04-88EB-625FBE52EBFB}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\Button.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\DlgSubclassApp.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\Hyperlink.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\MyDialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\resource.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav\"\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\Resource.rc\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\Win32++\\Dialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\Win32++\\WCEstddef.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\Win32++\\WinCore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DlgSubclass/DlgSubclass.vcw",
    "content": "Microsoft eMbedded Visual Tools Workspace File, Format Version 4.00\n# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\n\n###############################################################################\n\nProject: \"DlgSubclass\"=\".\\DlgSubclass.vcp\" - Package Owner=<4>\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<4>\n{{{\n}}}\n\n###############################################################################\n\nGlobal:\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<3>\n{{{\n}}}\n\n###############################################################################\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DlgSubclass/DlgSubclassApp.cpp",
    "content": "///////////////////////////////////////\n// DlgSubclassApp.cpp\n\n#include \"resource.h\"\n#include \"DlgSubclassApp.h\"\n\n\n// Definitions for the CDialogApp class\nCDlgSubclassApp::CDlgSubclassApp() : m_MyDialog(IDD_DIALOG1)\n{\n}\n\nBOOL CDlgSubclassApp::InitInstance()\n{\n\t//Display the Modal Dialog\n\tm_MyDialog.DoModal();\n\n\t//End the program\n\t::PostQuitMessage(0);\n\n\treturn TRUE;\n}\n\nCDlgSubclassApp::~CDlgSubclassApp()\n{\n}\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DlgSubclass/DlgSubclassApp.h",
    "content": "///////////////////////////////////////\n// DlgSubclassApp.h\n\n#ifndef DLGSUBCLASSAPP_H\n#define DLGSUBCLASSAPP_H\n\n#include \"MyDialog.h\"\n\n\n// Declaration of the CDialogApp class\nclass CDlgSubclassApp : public CWinApp\n{\npublic:\n\tCDlgSubclassApp();\n\tvirtual ~CDlgSubclassApp();\n\tvirtual BOOL InitInstance();\n\tCMyDialog& GetDialog() {return m_MyDialog;}\n\nprivate:\n\tCMyDialog m_MyDialog;\n};\n\n\n// returns a reference to the CDlgSubclassApp object\ninline CDlgSubclassApp& GetSubApp() { return *((CDlgSubclassApp*)GetApp()); }\n\n\n#endif // define DLGSUBCLASSAPP_H\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DlgSubclass/Hyperlink.cpp",
    "content": "/////////////////////////////\n// Hyperlink.cpp\n\n#include \"Hyperlink.h\"\n\nCHyperlink::CHyperlink() : m_bUrlVisited(FALSE), m_bClicked(FALSE), m_crVisited(RGB(128, 0, 128)),\n                            m_crNotVisited(RGB(0,0,255)), m_hUrlFont(NULL)\n{\n\t// Create the cursor\n\tm_hCursor = ::LoadCursor(NULL, IDC_HAND);\n\n\t// IDC_HAND is not available on Win95, so load a reasonable alternative\n\tif( !m_hCursor )\n\t\tm_hCursor = ::LoadCursor(NULL, IDC_ARROW);\n}\n\nCHyperlink::~CHyperlink()\n{\n\tif (m_hUrlFont)  ::DeleteObject(m_hUrlFont);\n}\n\nBOOL CHyperlink::AttachDlgItem(UINT nID, CWnd* pParent)\n{\n\tBOOL bSuccess = CWnd::AttachDlgItem(nID, pParent);;\n\n\tLOGFONT lf;\n\tm_hUrlFont = (HFONT)::SendMessage( m_hWnd, WM_GETFONT, 0L, 0L);\n\t::GetObject(m_hUrlFont, sizeof(LOGFONT), &lf);\n\tlf.lfUnderline = TRUE;\n\tm_hUrlFont = ::CreateFontIndirect(&lf);\n\n\treturn bSuccess;\n}\n\nvoid CHyperlink::OnLButtonDown()\n{\n\tSetCapture();\n\tm_bClicked = TRUE;\n}\n\nvoid CHyperlink::OnLButtonUp(LPARAM lParam)\n{\n\tReleaseCapture();\n\tif(m_bClicked)\n\t{\n\t\tm_bClicked = FALSE;\n\t\tPOINT pt;\n\t\tRECT rc;\n\t\tpt.x = (short)LOWORD(lParam);\n\t\tpt.y = (short)HIWORD(lParam);\n\t\t::ClientToScreen(m_hWnd, &pt);\n\t\t::GetWindowRect(m_hWnd, &rc);\n\n\t\tif(PtInRect(&rc, pt))\n\t\t\tOpenUrl();\n\t}\n}\n\nvoid CHyperlink::OpenUrl()\n{\n\tSHELLEXECUTEINFO ExecInfo = {0};;\n\tExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);\n\tExecInfo.lpVerb = TEXT(\"open\");\n\tExecInfo.lpFile = TEXT(\"iexplore.exe\");\n\tExecInfo.lpParameters = GetWindowText();\n\n\tif (ShellExecuteEx(&ExecInfo))\n\n\t{\n\t\tm_bUrlVisited = TRUE;\n\n\t\t// redraw the window to update the color\n\t\tInvalidate();\n\t}\n\telse\n\t\tTRACE(_T(\"ShellExecuteEx Failed\"));\n}\n\nLRESULT CHyperlink::OnMessageReflect(UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n\t// Messages such as WM_CTLCOLORSTATIC are reflected back to the CWnd object that created them.\n\tif (uMsg ==  WM_CTLCOLORSTATIC)\n\t{\n\t\tHDC hDC = (HDC)wParam;\n\n\t\t::SetTextColor(hDC, m_bUrlVisited? m_crVisited : m_crNotVisited);\n\t\t::SetBkMode(hDC, TRANSPARENT);\n\t\t::SelectObject(hDC, m_hUrlFont);\n\t\treturn (LRESULT)::GetSysColorBrush(COLOR_BTNFACE);\n\t}\n\treturn 0L;\n}\n\nLRESULT CHyperlink::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n\tswitch (uMsg)\n\t{\n\tcase WM_LBUTTONDOWN:\n\t\tOnLButtonDown();\n\t\tbreak;\n\n\tcase WM_LBUTTONUP:\n\t\tOnLButtonUp(lParam);\n\t\tbreak;\n\n\tcase WM_SETCURSOR:\n\t\t::SetCursor(m_hCursor);\n\t\treturn 1L;\n\n\t}\n\n\t// Pass unhandled messages on for default processing\n\treturn WndProcDefault( uMsg, wParam, lParam );\n}\n\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DlgSubclass/Hyperlink.h",
    "content": "/////////////////////////////\n// Hyperlink.h\n\n#ifndef HYPERLINK_H\n#define HYPERLINK_H\n\n#include \"wincore.h\"\n\n#ifndef IDC_HAND\n#define IDC_HAND  MAKEINTRESOURCE(32649)\n#endif\n\nclass CHyperlink :\tpublic CWnd\n{\npublic:\n\tCHyperlink();\n\tvirtual ~CHyperlink();\n\tvirtual BOOL AttachDlgItem(UINT nID, CWnd* pParent);\n\tvoid OnLButtonDown();\n\tvoid OnLButtonUp(LPARAM lParam);\n\nprotected:\n\tvirtual void OpenUrl();\n\tvirtual LRESULT OnMessageReflect(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\tvirtual LRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\nprivate:\n\tBOOL\tm_bUrlVisited;\n\tBOOL\tm_bClicked;\n\tCOLORREF m_crVisited;\n\tCOLORREF m_crNotVisited;\n\tHCURSOR m_hCursor;\n\tHFONT\tm_hUrlFont;\n};\n\n#endif // HYPERLINK_H\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DlgSubclass/MyDialog.cpp",
    "content": "///////////////////////////////////////\n// MyDialog.cpp\n\n#include \"MyDialog.h\"\n#include \"Hyperlink.h\"\n#include \"resource.h\"\n\n\n// Definitions for the CMyDialog class\nCMyDialog::CMyDialog(UINT nResID, CWnd* pParent)\n\t: CDialog(nResID, pParent)\n{\n}\n\nCMyDialog::CMyDialog(LPCTSTR lpszResName, CWnd* pParent)\n\t: CDialog(lpszResName, pParent)\n{\n}\n\nCMyDialog::~CMyDialog()\n{\n}\n\nINT_PTR CMyDialog::DialogProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n//\tswitch (uMsg)\n//\t{\n\t\t//Additional messages to be handled go here\n//\t}\n\n\n\t//Use the dialogframe default message handling for remaining messages\n\treturn DialogProcDefault(uMsg, wParam, lParam);\n}\n\nBOOL CMyDialog::OnCommand(UINT nID)\n{\n//\tswitch (nID)\n//   {\n\n//   } //switch (nID)\n\n\treturn TRUE;\n}\n\nBOOL CMyDialog::OnInitDialog()\n{\n\t// Set the Icon\n\tSetIconLarge(IDW_MAIN);\n\tSetIconSmall(IDW_MAIN);\n\n\t// Put some text in the edit boxes\n\t::SetDlgItemText(GetHwnd(), IDC_EDIT1, TEXT(\"Edit Control\"));\n\n\t// Turn our button into a MyButton object\n\tm_Button.AttachDlgItem(IDC_BUTTON2, this);\n\n\t// Turn our static control into a hyperlink\n\tm_Hyperlink.AttachDlgItem(IDC_STATIC4, this);\n\n\treturn true;\n}\n\nvoid CMyDialog::OnOK()\n{\n\t::MessageBox(NULL, TEXT(\"OK Button Pressed.  Program will exit now.\"), TEXT(\"Button\"), MB_OK);\n\tCDialog::OnOK();\n}\n\n\n\nvoid CMyDialog::SetStatic(LPCTSTR szString)\n{\n\t::SetDlgItemText(GetHwnd(), IDC_EDIT1, szString);\n}\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DlgSubclass/MyDialog.h",
    "content": "///////////////////////////////////////\n// MyDialog.h\n\n#ifndef MYDIALOG_H\n#define MYDIALOG_H\n\n#include \"dialog.h\"\n#include \"resource.h\"\n#include \"Button.h\"\n#include \"Hyperlink.h\"\n\n\n// Declaration of the CMyDialog class\nclass CMyDialog : public CDialog\n{\npublic:\n\tCMyDialog(UINT nResID, CWnd* pParent = NULL);\n\tCMyDialog(LPCTSTR lpszResName, CWnd* pParent = NULL);\n\tvoid SetStatic(LPCTSTR szString);\n\tvirtual ~CMyDialog();\n\nprotected:\n\tvirtual BOOL OnInitDialog();\n\tvirtual INT_PTR DialogProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\tvirtual BOOL OnCommand(UINT nID);\n\tvirtual void OnOK();\n\nprivate:\n\tCButton m_Button;\n\tCHyperlink m_Hyperlink;\n};\n\n#endif //MYDIALOG_H\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DlgSubclass/main.cpp",
    "content": "///////////////////////////////////////\n// main.cpp\n\n#include \"DlgSubclassApp.h\"\n\n\nINT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, int)\n{\n\tTCHAR szBuf[MAX_STRING_SIZE];\n\t::LoadString(hInstance, IDW_MAIN, szBuf, MAX_STRING_SIZE -1);\n\tHWND hWnd = FindWindow(szBuf, NULL);\n\n\t// If application is already running, restore it and quit\n\tif (hWnd)\n\t{\n\t\tSetForegroundWindow ((HWND)(((DWORD)hWnd) | 0x01));\n\t\tTRACE(_T(\"Application Already running\"));\n\t\treturn -1;\n\t}\n\n\t// Start Win32++\n\tCDlgSubclassApp theApp;\n\n\t// Process the window messages\n\treturn theApp.Run();\n}\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DlgSubclass/resource.h",
    "content": "///////////////////////////////////////////////////\n// resource.h\n// This file contains the resource ID definitions.\n\n// include the Resource IDs defined by Win32++\n#include \"default_resource.h\"\n\n//Resource IDs for the dialog\n#define IDD_DIALOG1                     101\n#define IDC_RADIO1\t\t\t\t\t\t110\n#define IDC_RADIO2\t\t\t\t\t\t111\n#define IDC_RADIO3\t\t\t\t\t\t112\n#define IDC_CHECK1\t\t\t\t\t\t113\n#define IDC_CHECK2\t\t\t\t\t\t114\n#define IDC_CHECK3\t\t\t\t\t\t115\n#define IDC_EDIT1\t\t\t\t\t\t120\n#define IDC_LIST1\t\t\t\t\t\t121\n#define IDC_BUTTON1\t\t\t\t\t\t122\n#define IDC_BUTTON2                     123\n#define IDC_RICHEDIT1\t\t\t\t\t124\n#define IDC_STATIC1                     130\n#define IDC_STATIC2                     131\n#define IDC_STATIC3                     132\n#define IDC_STATIC4  \t\t\t\t\t133\n#define IDC_HOTKEY1                     140\n#define IDB_BITMAP1                     150\n\n\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/DlgSubclass/resource.rc",
    "content": "//Microsoft eMbedded Visual C++ generated resource script.\n//\n\n#include \"windows.h\"\n#include \"resource.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Icon\n//\n\n// Icon with lowest ID value placed first to ensure application icon\n// remains consistent on all systems.\nID_MAIN                 ICON    DISCARDABLE     \"res\\\\Dialog.ico\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Bitmap\n//\n\nID_MAIN                 BITMAP  MOVEABLE PURE   \"res\\\\toolbar.bmp\"\nIDB_BITMAP1             BITMAP  MOVEABLE PURE   \"res\\\\Zapotec.bmp\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Dialog\n//\n\nIDD_DIALOG1 DIALOG DISCARDABLE  0, 0, 160, 166\nSTYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION\nCAPTION \"Hyperlink and Subclassed Button\"\nFONT 8, \"MS Shell Dlg\"\nBEGIN\n    DEFPUSHBUTTON   \"OK\",IDOK,52,111,50,16\n    PUSHBUTTON      \"Subclassed Button\",IDC_BUTTON2,39,9,81,45\n    LTEXT           \"https://sourceforge.net/projects/win32-framework\",IDC_STATIC4,\n                    11,149,136,11\n    EDITTEXT        IDC_EDIT1,21,73,114,15,ES_AUTOHSCROLL\nEND\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/PocketPCFrame/FrameApp.cpp",
    "content": "#include \"FrameApp.h\"\n\nCWceFrameApp::CWceFrameApp()\n{\n}\n\nBOOL CWceFrameApp::InitInstance()\n{\n\t//Create the Window\n    m_Frame.Create();\n\n\treturn TRUE;\n}\n"
  },
  {
    "path": "external/win32cpp/WCE samples/PocketPCFrame/FrameApp.h",
    "content": "#ifndef SIMPLEAPP_H\n#define SIMPLEAPP_H\n\n#include \"wincore.h\"\n#include \"MainFrm.h\"\n\n\nclass CWceFrameApp : public CWinApp\n{\npublic:\n    CWceFrameApp();\n    virtual ~CWceFrameApp() {}\n\tvirtual BOOL InitInstance();\n\tCMainFrame& GetMainFrame() { return m_Frame; }\n\nprivate:\n    CMainFrame m_Frame;\n};\n\n\n// returns a reference to the CWceFrameApp object\ninline CWceFrameApp& GetFrameApp() { return *((CWceFrameApp*)GetApp()); }\n\n\n#endif //SIMPLEAPP_H\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/PocketPCFrame/MainFrm.cpp",
    "content": "#include \"MainFrm.h\"\n#include \"resource.h\"\n\n\nCMainFrame::CMainFrame()\n{\n\t// Set the Resource IDs for the toolbar buttons\n\tAddToolBarButton( 0 );\t\t\t\t// Separator\n\tAddToolBarButton( IDM_BOLD  );\n\tAddToolBarButton( IDM_ITALIC);\n\tAddToolBarButton( IDM_UNDERLINE);\n}\n\nCMainFrame::~CMainFrame()\n{\n}\n\nBOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)\n{\n\t// Respond to menu and toolbar selections\n\tswitch (LOWORD(wParam))\n\t{\n\t// Respond to menu items\n\tcase IDM_EDIT_CUT:\n\t\tTRACE(TEXT(\"Cut ... Menu item\\n\"));\n\t\treturn TRUE;\n\tcase IDM_EDIT_COPY:\n\t\tTRACE(TEXT(\"Copy ... Menu item\\n\"));\n\t\treturn TRUE;\n    case IDM_EDIT_PASTE:\n\t\tTRACE(TEXT(\"PASTE ... Menu item\\n\"));\n\t\treturn TRUE;\n\tcase IDM_EDIT_CLEAR:\n\t\tTRACE(TEXT(\"CLEAR ... Menu item\\n\"));\n\t\treturn TRUE;\n\tcase IDM_HELP_ABOUT:\n\t\t{\n\t\t\tCDialog HelpDialog(IDW_ABOUT, this);\n\t\t\tHelpDialog.DoModal();\n\t\t}\n\t\treturn TRUE;\n\n\t// Respond to ToolBar buttons\n\tcase IDM_BOLD:\n\t\tTRACE(TEXT(\"Bold button pressed\\n\"));\n\t\treturn TRUE;\n\tcase IDM_ITALIC:\n\t\tTRACE(TEXT(\"Italic button pressed\\n\"));\n\t\treturn TRUE;\n\tcase IDM_UNDERLINE:\n\t\tTRACE(TEXT(\"Underline button pressed\\n\"));\n\t\treturn TRUE;\n\n\t// Respond to the accelerator key\n\tcase IDW_QUIT:\n\t\tSendMessage(WM_CLOSE, 0L, 0L);\n\t\treturn TRUE;\n\t}\n\n\treturn FALSE;\n}\n\nvoid CMainFrame::OnDraw(CDC* pDC)\n{\n\tCRect rc = GetViewRect();\n\ttString tsHello = LoadString(IDS_HELLO);\n\tpDC->DrawText(tsHello.c_str(), tsHello.length(), rc, DT_SINGLELINE | DT_VCENTER | DT_CENTER);\n}\n\n\nvoid CMainFrame::OnInitialUpdate()\n{\n\t// Startup code goes here\n\tTRACE(TEXT(\"Frame Created\\n\"));\n}\n\nLRESULT CMainFrame::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n//\tswitch (uMsg)\n//\t{\n//\n//\t}\n\n\t// Pass unhandled messages on for default processing\n\treturn WndProcDefault(uMsg, wParam, lParam);\n}\n"
  },
  {
    "path": "external/win32cpp/WCE samples/PocketPCFrame/MainFrm.h",
    "content": "#ifndef MAINFRM_H\n#define MAINFRM_H\n\n\n#include \"wincore.h\"\n#include \"wceframe.h\"\n#include \"dialog.h\"\n\n\nclass CMainFrame : public CWceFrame\n{\npublic:\n\tCMainFrame();\n\tvirtual ~CMainFrame();\n\tvirtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);\n\tvirtual void OnDraw(CDC* pDC);\t\n\tvirtual void OnInitialUpdate();\n\tvirtual LRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n};\n\n#endif   // MAINFRM_H\n"
  },
  {
    "path": "external/win32cpp/WCE samples/PocketPCFrame/PocketFrame.vcp",
    "content": "# Microsoft eMbedded Visual Tools Project File - Name=\"PocketFrame\" - Package Owner=<4>\n# Microsoft eMbedded Visual Tools Generated Build File, Format Version 6.02\n# ** DO NOT EDIT **\n\n# TARGTYPE \"Win32 (WCE ARMV4) Application\" 0xa301\n# TARGTYPE \"Win32 (WCE emulator) Application\" 0xa601\n\nCFG=PocketFrame - Win32 (WCE emulator) Debug\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\n!MESSAGE use the Export Makefile command and run\n!MESSAGE \n!MESSAGE NMAKE /f \"PocketFrame.vcn\".\n!MESSAGE \n!MESSAGE You can specify a configuration when running NMAKE\n!MESSAGE by defining the macro CFG on the command line. For example:\n!MESSAGE \n!MESSAGE NMAKE /f \"PocketFrame.vcn\" CFG=\"PocketFrame - Win32 (WCE emulator) Debug\"\n!MESSAGE \n!MESSAGE Possible choices for configuration are:\n!MESSAGE \n!MESSAGE \"PocketFrame - Win32 (WCE emulator) Release\" (based on \"Win32 (WCE emulator) Application\")\n!MESSAGE \"PocketFrame - Win32 (WCE emulator) Debug\" (based on \"Win32 (WCE emulator) Application\")\n!MESSAGE \"PocketFrame - Win32 (WCE ARMV4) Release\" (based on \"Win32 (WCE ARMV4) Application\")\n!MESSAGE \"PocketFrame - Win32 (WCE ARMV4) Debug\" (based on \"Win32 (WCE ARMV4) Application\")\n!MESSAGE \n\n# Begin Project\n# PROP AllowPerConfigDependencies 0\n# PROP Scc_ProjName \"\"\n# PROP Scc_LocalPath \"\"\n# PROP ATL_Project 2\n\n!IF  \"$(CFG)\" == \"PocketFrame - Win32 (WCE emulator) Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"emulatorRel\"\n# PROP BASE Intermediate_Dir \"emulatorRel\"\n# PROP BASE CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP BASE Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"emulatorRel\"\n# PROP Intermediate_Dir \"emulatorRel\"\n# PROP CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\nRSC=rc.exe\n# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"NDEBUG\" /d \"$(CePlatform)\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\n# ADD RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"NDEBUG\" /d \"$(CePlatform)\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\nCPP=cl.exe\n# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /D \"NDEBUG\" /Yu\"stdafx.h\" /Gs8192 /GF /O2 /c\n# ADD CPP /nologo /W3 /GX /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /D \"NDEBUG\" /FR /Gs8192 /GF /O2 /c\nMTL=midl.exe\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /o \"NUL\" /win32\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /o \"NUL\" /win32\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) aygshell.lib /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n# ADD LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n\n!ELSEIF  \"$(CFG)\" == \"PocketFrame - Win32 (WCE emulator) Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"emulatorDbg\"\n# PROP BASE Intermediate_Dir \"emulatorDbg\"\n# PROP BASE CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP BASE Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"emulatorDbg\"\n# PROP Intermediate_Dir \"emulatorDbg\"\n# PROP CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\nRSC=rc.exe\n# ADD BASE RSC /l 0x409 /d \"$(CePlatform)\" /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"DEBUG\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\n# ADD RSC /l 0x409 /d \"$(CePlatform)\" /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"DEBUG\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\nCPP=cl.exe\n# ADD BASE CPP /nologo /W3 /Zi /Od /D \"DEBUG\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /Yu\"stdafx.h\" /Gs8192 /GF /c\n# ADD CPP /nologo /W3 /GX /Zi /Od /D \"DEBUG\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /FR /Gs8192 /GF /c\nMTL=midl.exe\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /o \"NUL\" /win32\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /o \"NUL\" /win32\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) aygshell.lib /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /debug /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n# ADD LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /debug /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n\n!ELSEIF  \"$(CFG)\" == \"PocketFrame - Win32 (WCE ARMV4) Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"ARMV4Rel\"\n# PROP BASE Intermediate_Dir \"ARMV4Rel\"\n# PROP BASE CPU_ID \"{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}\"\n# PROP BASE Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"ARMV4Rel\"\n# PROP Intermediate_Dir \"ARMV4Rel\"\n# PROP CPU_ID \"{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}\"\n# PROP Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\nRSC=rc.exe\n# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"NDEBUG\" /d \"UNICODE\" /d \"_UNICODE\" /d \"$(CePlatform)\" /d \"ARM\" /d \"_ARM_\" /d \"ARMV4\" /r\n# ADD RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"NDEBUG\" /d \"UNICODE\" /d \"_UNICODE\" /d \"$(CePlatform)\" /d \"ARM\" /d \"_ARM_\" /d \"ARMV4\" /r\nCPP=clarm.exe\n# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"ARM\" /D \"_ARM_\" /D \"ARMV4\" /D UNDER_CE=$(CEVersion) /D \"UNICODE\" /D \"_UNICODE\" /D \"NDEBUG\" /Yu\"stdafx.h\" /O2 /M$(CECrtMT) /c\n# ADD CPP /nologo /W3 /GX /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"ARM\" /D \"_ARM_\" /D \"ARMV4\" /D UNDER_CE=$(CEVersion) /D \"UNICODE\" /D \"_UNICODE\" /D \"NDEBUG\" /O2 /M$(CECrtMT) /c\nMTL=midl.exe\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /o \"NUL\" /win32\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /o \"NUL\" /win32\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 commctrl.lib coredll.lib aygshell.lib /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /nodefaultlib:\"$(CENoDefaultLib)\" /subsystem:$(CESubsystem) /align:\"4096\" /MACHINE:ARM\n# ADD LINK32 commctrl.lib coredll.lib /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /nodefaultlib:\"$(CENoDefaultLib)\" /subsystem:$(CESubsystem) /align:\"4096\" /MACHINE:ARM\n\n!ELSEIF  \"$(CFG)\" == \"PocketFrame - Win32 (WCE ARMV4) Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"ARMV4Dbg\"\n# PROP BASE Intermediate_Dir \"ARMV4Dbg\"\n# PROP BASE CPU_ID \"{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}\"\n# PROP BASE Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"ARMV4Dbg\"\n# PROP Intermediate_Dir \"ARMV4Dbg\"\n# PROP CPU_ID \"{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}\"\n# PROP Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\nRSC=rc.exe\n# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"DEBUG\" /d \"UNICODE\" /d \"_UNICODE\" /d \"$(CePlatform)\" /d \"ARM\" /d \"_ARM_\" /d \"ARMV4\" /r\n# ADD RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"DEBUG\" /d \"UNICODE\" /d \"_UNICODE\" /d \"$(CePlatform)\" /d \"ARM\" /d \"_ARM_\" /d \"ARMV4\" /r\nCPP=clarm.exe\n# ADD BASE CPP /nologo /W3 /Zi /Od /D \"DEBUG\" /D \"ARM\" /D \"_ARM_\" /D \"ARMV4\" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"UNICODE\" /D \"_UNICODE\" /Yu\"stdafx.h\" /M$(CECrtMTDebug) /c\n# ADD CPP /nologo /W3 /GX /Zi /Od /D \"DEBUG\" /D \"ARM\" /D \"_ARM_\" /D \"ARMV4\" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"UNICODE\" /D \"_UNICODE\" /M$(CECrtMTDebug) /c\nMTL=midl.exe\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /o \"NUL\" /win32\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /o \"NUL\" /win32\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 commctrl.lib coredll.lib aygshell.lib /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /debug /nodefaultlib:\"$(CENoDefaultLib)\" /subsystem:$(CESubsystem) /align:\"4096\" /MACHINE:ARM\n# ADD LINK32 commctrl.lib coredll.lib /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /debug /nodefaultlib:\"$(CENoDefaultLib)\" /subsystem:$(CESubsystem) /align:\"4096\" /MACHINE:ARM\n\n!ENDIF \n\n# Begin Target\n\n# Name \"PocketFrame - Win32 (WCE emulator) Release\"\n# Name \"PocketFrame - Win32 (WCE emulator) Debug\"\n# Name \"PocketFrame - Win32 (WCE ARMV4) Release\"\n# Name \"PocketFrame - Win32 (WCE ARMV4) Debug\"\n# Begin Group \"Source Files\"\n\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n# Begin Source File\n\nSOURCE=.\\FrameApp.cpp\n\n!IF  \"$(CFG)\" == \"PocketFrame - Win32 (WCE emulator) Release\"\n\nDEP_CPP_FRAME=\\\n\t\".\\FrameApp.h\"\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_FRAME=\\\n\t\"..\\WinCE++\\Cmdbar.h\"\\\n\t\"..\\WinCE++\\Default_Resource.h\"\\\n\t\"..\\WinCE++\\Dialog.h\"\\\n\t\"..\\WinCE++\\SHMenubar.h\"\\\n\t\"..\\WinCE++\\WinCore.h\"\\\n\t\".\\hellsdk.h\"\\\n\t\".\\hsdkstc.h\"\\\n\t\".\\ipapi.h\"\\\n\t\".\\ygshell.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"PocketFrame - Win32 (WCE emulator) Debug\"\n\nDEP_CPP_FRAME=\\\n\t\"..\\..\\include\\Dialog.h\"\\\n\t\"..\\..\\include\\WCEframe.h\"\\\n\t\"..\\..\\include\\WCEstddef.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\FrameApp.h\"\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_FRAME=\\\n\t\"..\\..\\..\\..\\..\\..\\..\\..\\Program Files\\Windows CE Tools\\wce420\\POCKET PC 2003\\Include\\emulator\\vibrate.h\"\\\n\t\"..\\..\\include\\DeviceResolutionAware.h\"\\\n\t\".\\econfig.h\"\\\n\t\".\\inuserm.h\"\\\n\t\".\\ipapi.h\"\\\n\t\".\\ygshell.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"PocketFrame - Win32 (WCE ARMV4) Release\"\n\nDEP_CPP_FRAME=\\\n\t\".\\FrameApp.h\"\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_FRAME=\\\n\t\"..\\..\\..\\..\\..\\..\\..\\Program Files\\Windows CE Tools\\wce420\\POCKET PC 2003\\Include\\ARMV4\\vibrate.h\"\\\n\t\"..\\..\\include\\WCEControls.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\inuserm.h\"\\\n\t\".\\ipapi.h\"\\\n\t\".\\ygshell.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"PocketFrame - Win32 (WCE ARMV4) Debug\"\n\nDEP_CPP_FRAME=\\\n\t\"..\\..\\include\\Dialog.h\"\\\n\t\"..\\..\\include\\WCEframe.h\"\\\n\t\"..\\..\\include\\WCEstddef.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\FrameApp.h\"\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_FRAME=\\\n\t\"..\\..\\include\\DeviceResolutionAware.h\"\\\n\t\".\\econfig.h\"\\\n\t\n\n!ENDIF \n\n# End Source File\n# Begin Source File\n\nSOURCE=.\\main.cpp\n\n!IF  \"$(CFG)\" == \"PocketFrame - Win32 (WCE emulator) Release\"\n\nDEP_CPP_MAIN_=\\\n\t\".\\FrameApp.h\"\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_MAIN_=\\\n\t\"..\\WinCE++\\Cmdbar.h\"\\\n\t\"..\\WinCE++\\Default_Resource.h\"\\\n\t\"..\\WinCE++\\Dialog.h\"\\\n\t\"..\\WinCE++\\SHMenubar.h\"\\\n\t\"..\\WinCE++\\WinCore.h\"\\\n\t\".\\hellsdk.h\"\\\n\t\".\\hsdkstc.h\"\\\n\t\".\\ipapi.h\"\\\n\t\".\\ygshell.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"PocketFrame - Win32 (WCE emulator) Debug\"\n\nDEP_CPP_MAIN_=\\\n\t\"..\\..\\include\\Dialog.h\"\\\n\t\"..\\..\\include\\WCEframe.h\"\\\n\t\"..\\..\\include\\WCEstddef.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\FrameApp.h\"\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_MAIN_=\\\n\t\"..\\..\\..\\..\\..\\..\\..\\..\\Program Files\\Windows CE Tools\\wce420\\POCKET PC 2003\\Include\\emulator\\vibrate.h\"\\\n\t\"..\\..\\include\\DeviceResolutionAware.h\"\\\n\t\".\\econfig.h\"\\\n\t\".\\inuserm.h\"\\\n\t\".\\ipapi.h\"\\\n\t\".\\ygshell.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"PocketFrame - Win32 (WCE ARMV4) Release\"\n\nDEP_CPP_MAIN_=\\\n\t\".\\FrameApp.h\"\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_MAIN_=\\\n\t\"..\\..\\..\\..\\..\\..\\..\\Program Files\\Windows CE Tools\\wce420\\POCKET PC 2003\\Include\\ARMV4\\vibrate.h\"\\\n\t\"..\\..\\include\\WCEControls.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\inuserm.h\"\\\n\t\".\\ipapi.h\"\\\n\t\".\\ygshell.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"PocketFrame - Win32 (WCE ARMV4) Debug\"\n\nDEP_CPP_MAIN_=\\\n\t\"..\\..\\include\\Dialog.h\"\\\n\t\"..\\..\\include\\WCEframe.h\"\\\n\t\"..\\..\\include\\WCEstddef.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\FrameApp.h\"\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_MAIN_=\\\n\t\"..\\..\\include\\DeviceResolutionAware.h\"\\\n\t\".\\econfig.h\"\\\n\t\n\n!ENDIF \n\n# End Source File\n# Begin Source File\n\nSOURCE=.\\MainFrm.cpp\n\n!IF  \"$(CFG)\" == \"PocketFrame - Win32 (WCE emulator) Release\"\n\nDEP_CPP_MAINF=\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_MAINF=\\\n\t\"..\\WinCE++\\Cmdbar.h\"\\\n\t\"..\\WinCE++\\Default_Resource.h\"\\\n\t\"..\\WinCE++\\Dialog.h\"\\\n\t\"..\\WinCE++\\SHMenubar.h\"\\\n\t\"..\\WinCE++\\WinCore.h\"\\\n\t\".\\hellsdk.h\"\\\n\t\".\\hsdkstc.h\"\\\n\t\".\\ipapi.h\"\\\n\t\".\\ygshell.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"PocketFrame - Win32 (WCE emulator) Debug\"\n\nDEP_CPP_MAINF=\\\n\t\"..\\..\\include\\Dialog.h\"\\\n\t\"..\\..\\include\\WCEframe.h\"\\\n\t\"..\\..\\include\\WCEstddef.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_MAINF=\\\n\t\"..\\..\\..\\..\\..\\..\\..\\..\\Program Files\\Windows CE Tools\\wce420\\POCKET PC 2003\\Include\\emulator\\vibrate.h\"\\\n\t\"..\\..\\include\\DeviceResolutionAware.h\"\\\n\t\".\\econfig.h\"\\\n\t\".\\inuserm.h\"\\\n\t\".\\ipapi.h\"\\\n\t\".\\ygshell.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"PocketFrame - Win32 (WCE ARMV4) Release\"\n\nDEP_CPP_MAINF=\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_MAINF=\\\n\t\"..\\..\\..\\..\\..\\..\\..\\Program Files\\Windows CE Tools\\wce420\\POCKET PC 2003\\Include\\ARMV4\\vibrate.h\"\\\n\t\"..\\..\\include\\WCEControls.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\inuserm.h\"\\\n\t\".\\ipapi.h\"\\\n\t\".\\ygshell.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"PocketFrame - Win32 (WCE ARMV4) Debug\"\n\nDEP_CPP_MAINF=\\\n\t\"..\\..\\include\\Dialog.h\"\\\n\t\"..\\..\\include\\WCEframe.h\"\\\n\t\"..\\..\\include\\WCEstddef.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_MAINF=\\\n\t\"..\\..\\include\\DeviceResolutionAware.h\"\\\n\t\".\\econfig.h\"\\\n\t\n\n!ENDIF \n\n# End Source File\n# End Group\n# Begin Group \"Header Files\"\n\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\n# Begin Source File\n\nSOURCE=.\\FrameApp.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\MainFrm.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\newres.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\resource.h\n# End Source File\n# End Group\n# Begin Group \"Resource Files\"\n\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n# Begin Source File\n\nSOURCE=.\\Default.ico\n# End Source File\n# Begin Source File\n\nSOURCE=.\\res\\Default.ico\n# End Source File\n# Begin Source File\n\nSOURCE=.\\Resource.rc\n\n!IF  \"$(CFG)\" == \"PocketFrame - Win32 (WCE emulator) Release\"\n\n!ELSEIF  \"$(CFG)\" == \"PocketFrame - Win32 (WCE emulator) Debug\"\n\n!ELSEIF  \"$(CFG)\" == \"PocketFrame - Win32 (WCE ARMV4) Release\"\n\n!ELSEIF  \"$(CFG)\" == \"PocketFrame - Win32 (WCE ARMV4) Debug\"\n\n!ENDIF \n\n# End Source File\n# Begin Source File\n\nSOURCE=.\\toolbar.bmp\n# End Source File\n# End Group\n# Begin Group \"Win32++\"\n\n# PROP Default_Filter \"\"\n# Begin Source File\n\nSOURCE=\"..\\..\\include\\Default_Resource.h\"\n# End Source File\n# Begin Source File\n\nSOURCE=\"..\\..\\include\\Dialog.h\"\n# End Source File\n# Begin Source File\n\nSOURCE=\"..\\..\\include\\WCEframe.h\"\n# End Source File\n# Begin Source File\n\nSOURCE=\"..\\..\\include\\WCEstddef.h\"\n# End Source File\n# Begin Source File\n\nSOURCE=\"..\\..\\include\\WinCore.h\"\n# End Source File\n# End Group\n# End Target\n# End Project\n"
  },
  {
    "path": "external/win32cpp/WCE samples/PocketPCFrame/PocketFrame.vcw",
    "content": "Microsoft eMbedded Visual Tools Workspace File, Format Version 4.00\n# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\n\n###############################################################################\n\nProject: \"PocketFrame\"=\".\\PocketFrame.vcp\" - Package Owner=<4>\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<4>\n{{{\n}}}\n\n###############################################################################\n\nGlobal:\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<3>\n{{{\n}}}\n\n###############################################################################\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/PocketPCFrame/PocketPCFrame.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 9.00\n# Visual Studio 2005\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"PocketPCFrame\", \"PocketPCFrame.vcproj\", \"{8559448A-4279-495E-B22B-CC35E87247E7}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Pocket PC 2003 (ARMV4) = Debug|Pocket PC 2003 (ARMV4)\n\t\tDebug|Smartphone 2003 (ARMV4) = Debug|Smartphone 2003 (ARMV4)\n\t\tDebug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\tDebug|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\tRelease|Pocket PC 2003 (ARMV4) = Release|Pocket PC 2003 (ARMV4)\n\t\tRelease|Smartphone 2003 (ARMV4) = Release|Smartphone 2003 (ARMV4)\n\t\tRelease|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\tRelease|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Smartphone 2003 (ARMV4).Deploy.0 = Debug|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Smartphone 2003 (ARMV4).Deploy.0 = Release|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/WCE samples/PocketPCFrame/PocketPCFrame.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"8.00\"\n\tName=\"PocketPCFrame\"\n\tProjectGUID=\"{8559448A-4279-495E-B22B-CC35E87247E7}\"\n\tKeyword=\"Win32Proj\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Pocket PC 2003 (ARMV4)\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Smartphone 2003 (ARMV4)\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Windows Mobile 5.0 Smartphone SDK (ARMV4I)\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Pocket PC 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir);..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Smartphone 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Pocket PC 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir);..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Smartphone 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx\"\n\t\t\tUniqueIdentifier=\"{4FC737F1-C7A5-4376-A066-2A32D752A2FF}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\FrameApp.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\main.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\MainFrm.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl;inc;xsd\"\n\t\t\tUniqueIdentifier=\"{93995380-89BD-4b04-88EB-625FBE52EBFB}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\FrameApp.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\MainFrm.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\newres.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\resource.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav\"\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\Default.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\Resource.rc\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\toolbar.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\Win32++\\include\\dialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\Win32++\\include\\wceframe.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\Win32++\\include\\wincore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/WCE samples/PocketPCFrame/main.cpp",
    "content": "///////////////////////////////////////\n// main.cpp\n\n#include \"wincore.h\"\n#include \"resource.h\"\n#include \"FrameApp.h\"\n\n\n\nint WINAPI WinMain(\tHINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)\n{\n\tTCHAR szBuf[100];\n\t::LoadString(hInstance, IDW_MAIN, szBuf, 100);\n\tHWND hWnd = FindWindow(szBuf, NULL);\n\n\t// If application is already running, restore it and quit\n\tif (hWnd)\n\t{\n\t\tSetForegroundWindow ((HWND)(((DWORD)hWnd) | 0x01));\n\t\tTRACE(_T(\"Application Already running\"));\n\t\treturn -1;\n\t}\n\n\t//Start the framework\n    CWceFrameApp MyApp;\n\n    //Process the window messages\n    return MyApp.Run();\n}\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/PocketPCFrame/newres.h",
    "content": "#ifndef __NEWRES_H__\n#define __NEWRES_H__\n\n#if !defined(UNDER_CE)\n#define UNDER_CE _WIN32_WCE\n#endif\n\n#if defined(_WIN32_WCE)\n\t#if !defined(WCEOLE_ENABLE_DIALOGEX)\n\t\t#define DIALOGEX DIALOG DISCARDABLE\n\t#endif\n\t#include <commctrl.h>\n\t#define  SHMENUBAR RCDATA\n\t#if defined(WIN32_PLATFORM_PSPC) && (_WIN32_WCE >= 300)\n\t\t#include <aygshell.h>\n\t\t#define AFXCE_IDR_SCRATCH_SHMENU  28700\n\t#else\n\t\t#define I_IMAGENONE\t\t(-2)\n\t\t#define NOMENU\t\t\t0xFFFF\n\t\t#define IDS_SHNEW\t\t1\n\n\t\t#define IDM_SHAREDNEW        10\n\t\t#define IDM_SHAREDNEWDEFAULT 11\n\t#endif // _WIN32_WCE_PSPC\n\t#define AFXCE_IDD_SAVEMODIFIEDDLG 28701\n#endif // _WIN32_WCE\n\n#ifdef RC_INVOKED\n#ifndef _INC_WINDOWS\n#define _INC_WINDOWS\n\t#include \"winuser.h\"           // extract from windows header\n//\t#include \"winver.h\"   \n#endif\n#endif\n\n#ifdef IDC_STATIC\n#undef IDC_STATIC\n#endif\n#define IDC_STATIC      (-1)\n\n#endif //__NEWRES_H__\n"
  },
  {
    "path": "external/win32cpp/WCE samples/PocketPCFrame/resource.h",
    "content": "//{{NO_DEPENDENCIES}}\n// Microsoft eMbedded Visual C++ generated include file.\n//\n\n// include the Resource IDs defined by Win32++\n#include \"default_resource.h\"\n\n// String resource ID\n#define IDS_HELLO\t\t\t\t\t\t100\n\n// Button resource IDs\n#define IDM_BOLD                        110\n#define IDM_ITALIC                      111\n#define IDM_UNDERLINE                   112\n\n// Menu resource IDs\n#define IDM_MAIN_COMMAND1\t\t\t\t120\n#define IDM_MAIN_COMMAND2\t\t\t\t121\n#define IDM_MAIN_COMMAND3\t\t\t\t122\n#define IDM_NEW                         120 // Same as IDM_MAIN_COMMAND1\n#define IDM_EDIT                        140\n#define IDM_EDIT_CUT                    141\n#define IDM_EDIT_COPY                   142\n#define IDM_EDIT_PASTE                  143\n#define IDM_EDIT_CLEAR                  144\n#define IDM_TOOLS                       150\n#define IDM_HELP_ABOUT\t\t\t\t\t151\n\n// Next default values for new objects\n//\n#ifdef APSTUDIO_INVOKED\n#ifndef APSTUDIO_READONLY_SYMBOLS\n#define _APS_NEXT_RESOURCE_VALUE        201\n#define _APS_NEXT_COMMAND_VALUE         40001\n#define _APS_NEXT_CONTROL_VALUE         1001\n#define _APS_NEXT_SYMED_VALUE           201\n#endif\n#endif\n"
  },
  {
    "path": "external/win32cpp/WCE samples/PocketPCFrame/resource.rc",
    "content": "//Microsoft eMbedded Visual C++ generated resource script.\n//\n\n#include \"resource.h\"\n#include \"newres.h\"\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Icon\n//\n\n// Icon with lowest ID value placed first to ensure application icon\n// remains consistent on all systems.\nIDW_MAIN                ICON    DISCARDABLE     \"res\\\\Default.ICO\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Data\n//\n\nIDW_MAIN SHMENUBAR MOVEABLE PURE\nBEGIN\n    IDW_MAIN, 3,\n    I_IMAGENONE, IDM_MAIN_COMMAND1, TBSTATE_ENABLED, TBSTYLE_AUTOSIZE,\n    IDM_NEW, 0, NOMENU,\n    I_IMAGENONE, IDM_MAIN_COMMAND2, TBSTATE_ENABLED,\n    TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDM_EDIT, 0, 1,\n    I_IMAGENONE, IDM_MAIN_COMMAND3, TBSTATE_ENABLED,\n    TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDM_TOOLS, 0, 2,\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Menubar\n//\n\nIDW_MAIN MENU DISCARDABLE\nBEGIN\n    MENUITEM \"New\",                         IDM_NEW\n    POPUP \"Edit\"\n    BEGIN\n        MENUITEM \"Cut\",                         IDM_EDIT_CUT\n        MENUITEM \"Copy\",                        IDM_EDIT_COPY\n        MENUITEM \"Paste\",                       IDM_EDIT_PASTE\n        MENUITEM \"Clear\",                       IDM_EDIT_CLEAR\n    END\n    POPUP \"Tools\"\n    BEGIN\n        MENUITEM \"About\",                       IDM_HELP_ABOUT\n    END\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Dialog\n//\n\nIDW_ABOUT DIALOG DISCARDABLE  0, 0, 140, 57\nSTYLE WS_POPUP | WS_CAPTION\nEXSTYLE 0x80000000L\nCAPTION \"About Default\"\nBEGIN\n    ICON            IDW_MAIN,IDC_STATIC,11,17,20,20\n    LTEXT           \"Default Version 1.0\",IDC_STATIC,40,10,70,8,SS_NOPREFIX\n    LTEXT           \"Copyright (C) 2007\",IDC_STATIC,40,25,70,8\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Accelerator\n//\n\nIDW_MAIN ACCELERATORS DISCARDABLE\nBEGIN\n    \"A\",            IDM_HELP_ABOUT,         VIRTKEY, CONTROL, NOINVERT\n    \"Q\",            IDW_QUIT,               VIRTKEY, CONTROL, NOINVERT\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Bitmap\n//\n\nIDW_MAIN                BITMAP  DISCARDABLE     \"res\\\\toolbar.bmp\"\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// String Table\n//\n\nSTRINGTABLE DISCARDABLE\nBEGIN\n    IDW_MAIN                \"Pocket PC Frame\"\nEND\n\nSTRINGTABLE DISCARDABLE\nBEGIN\n    IDS_HELLO               \"Hello World!\"\nEND\n\nSTRINGTABLE DISCARDABLE\nBEGIN\n    IDM_NEW                 \"New\"\n    IDM_EDIT                \"Edit\"\nEND\n\nSTRINGTABLE DISCARDABLE\nBEGIN\n    IDM_TOOLS               \"Tools\"\nEND\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Scribble/FrameApp.cpp",
    "content": "#include \"FrameApp.h\"\n\nCWceFrameApp::CWceFrameApp()\n{\n}\n\nBOOL CWceFrameApp::InitInstance()\n{\n\t//Create the Window\n    m_Frame.Create();\n\n\treturn TRUE;\n}\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Scribble/FrameApp.h",
    "content": "#ifndef SIMPLEAPP_H\n#define SIMPLEAPP_H\n\n#include \"wincore.h\"\n#include \"MainFrm.h\"\n\n\nclass CWceFrameApp : public CWinApp\n{\npublic:\n    CWceFrameApp();\n    virtual ~CWceFrameApp() {}\n\tvirtual BOOL InitInstance();\n\tCMainFrame& GetMainFrame() { return m_Frame; }\n\nprivate:\n    CMainFrame m_Frame;\n};\n\n\n// returns a reference to the CWceFrameApp object\ninline CWceFrameApp& GetFrameApp() { return *((CWceFrameApp*)GetApp()); }\n\n\n#endif //SIMPLEAPP_H\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Scribble/MainFrm.cpp",
    "content": "#include \"MainFrm.h\"\n#include \"resource.h\"\n\n\n\nCMainFrame::CMainFrame() : m_PenColor(RGB(0,0,0))\n{\n\t// Set the Resource IDs for the toolbar buttons\n\tAddToolBarButton( 0 );\t\t\t// Separator\n\tAddToolBarButton( IDM_RED  );\n\tAddToolBarButton( IDM_BLUE );\n\tAddToolBarButton( IDM_GREEN );\n\tAddToolBarButton( IDM_BLACK );\n}\n\nvoid CMainFrame::DrawLine(short x, short y)\n{\n\tCDC* pDC = GetDC();\n\tpDC->CreatePen(PS_SOLID, 1, m_points.back().color);\n\tpDC->MoveTo(m_points.back().x, m_points.back().y);\n\tpDC->LineTo(x, y);\n}\n\nBOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM /*lParam*/)\n{\n\t// Respond to menu and toolbar selections\n\tswitch (LOWORD(wParam))\n\t{\n\t// Respond to menu items\n\tcase IDM_NEW:\n\t\tm_points.clear();\n\t\tInvalidate();\n\t\treturn TRUE;\n\tcase IDM_HELP_ABOUT:\n\t\t{\n\t\t\tCDialog HelpDialog(IDW_ABOUT, this);\n\t\t\tHelpDialog.DoModal();\n\t\t}\n\t\treturn TRUE;\n\n\t// Respond to ToolBar buttons\n\tcase IDM_RED:\n\t\tm_PenColor = RGB(255, 0, 0);\n\t\tTRACE(_T(\"Red Pen Selected \\n\"));\n\t\treturn TRUE;\n\tcase IDM_BLUE:\n\t\tm_PenColor = RGB(0, 0, 255);\n\t\tTRACE(_T(\"Blue Pen Selected \\n\"));\n\t\treturn TRUE;\n\tcase IDM_GREEN:\n\t\tm_PenColor = RGB(0, 191, 0);\n\t\tTRACE(_T(\"Green Pen Selected \\n\"));\n\t\treturn TRUE;\n\tcase IDM_BLACK:\n\t\tm_PenColor = RGB(0, 0, 0);\n\t\tTRACE(_T(\"Black Pen Selected \\n\"));\n\t\treturn TRUE;\n\n\t// Respond to the accelerator key\n\tcase IDW_QUIT:\n\t\tSendMessage(WM_CLOSE, 0L, 0L);\n\t\treturn TRUE; \n\t} \n\n\treturn FALSE;\n}\n\nvoid CMainFrame::OnDraw(CDC* pDC)\n{\n\t// Redraw our client area\n\tif (m_points.size() > 0)\n\t{\n\t\tbool bDraw = false;  //Start with the pen up\n\t\tfor (unsigned int i = 0 ; i < m_points.size(); i++)\n\t\t{\n\t\t\tpDC->CreatePen(PS_SOLID, 1, m_points[i].color);\n\t\t\tif (bDraw)\n\t\t\t\tpDC->LineTo(m_points[i].x, m_points[i].y);\n\t\t\telse\n\t\t\t\tpDC->MoveTo(m_points[i].x, m_points[i].y);\n\t\t\t\n\t\t\tbDraw = m_points[i].PenDown;\n\t\t}\n\t}\n}\n\nvoid CMainFrame::OnInitialUpdate()\n{\n\t// Startup code goes here\n}\n\nvoid CMainFrame::OnLButtonDown(WPARAM /*wParam*/, LPARAM lParam)\n{\n\t// Capture mouse input.\n\tSetCapture();\n\n\tStorePoint(LOWORD(lParam), HIWORD(lParam), true);\n}\n\nvoid CMainFrame::OnLButtonUp(WPARAM /*wParam*/, LPARAM lParam)\n{\n\t//Release the capture on the mouse\n\tReleaseCapture();\n\n\tStorePoint(LOWORD(lParam), HIWORD(lParam), false);\n}\n\nvoid CMainFrame::OnMouseMove(WPARAM wParam, LPARAM lParam)\n{\n\t// hold down the left mouse button and move mouse to draw lines.\n\tif (wParam & MK_LBUTTON)\n\t{\t\n\t\tTCHAR str[80];\n\t\t::wsprintf(str, TEXT(\"Draw Point:  %hd, %hd\\n\"), LOWORD(lParam), HIWORD(lParam));\n\t\tTRACE(str);\n\n\t\tDrawLine(LOWORD(lParam), HIWORD(lParam));\n\t\tStorePoint(LOWORD(lParam), HIWORD(lParam), true);\n\t}\n}\n\nvoid CMainFrame::SetPen(COLORREF color)\n{\n\tm_PenColor = color;\n}\n\nvoid CMainFrame::StorePoint(int x, int y, bool PenDown)\n{\n\tPlotPoint P1;\n\tP1.x = x;\n\tP1.y = y;\n\tP1.PenDown = PenDown;\n\tP1.color = m_PenColor;\n\n\tm_points.push_back(P1); //Add the point to the vector\n}\n\nLRESULT CMainFrame::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n\t// handle left mouse button up/down and mouse move messages\n\t// a seperate function for each case keeps the code tidy.\n\tswitch (uMsg)\n\t{\n\tcase WM_LBUTTONDOWN:\n\t\tOnLButtonDown(wParam, lParam);\n\t\tbreak;\n\n\tcase WM_MOUSEMOVE:\n\t\tOnMouseMove(wParam, lParam);\n        break;\n\n    case WM_LBUTTONUP:\n\t\tOnLButtonUp(wParam, lParam);\n\t\tbreak;\n\t}\n\n\t// Pass unhandled messages on to WndProcDefault\n\treturn WndProcDefault(uMsg, wParam, lParam);\n}\n\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Scribble/MainFrm.h",
    "content": "#ifndef VIEW_H\n#define VIEW_H\n\n\n#include \"wincore.h\"\n#include \"wceframe.h\"\n#include \"dialog.h\"\n#include <vector>\n\n\nclass CMainFrame : public CWceFrame\n{\npublic:\n\tCMainFrame();\n\tvirtual ~CMainFrame() {}\n\tvirtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);\n\tvirtual void OnInitialUpdate();\n\tvirtual void SetPen(COLORREF Color);\n\nprotected:\n\tvirtual void DrawLine(short x, short y);\n\tvirtual void OnDraw(CDC* pDC);\t\n\tvirtual void OnLButtonDown(WPARAM wParam, LPARAM lParam);\n\tvirtual void OnLButtonUp(WPARAM wParam, LPARAM lParam);\n\tvirtual void OnMouseMove(WPARAM wParam, LPARAM lParam);\n\tvirtual void StorePoint(int x, int y, bool PenDown);\n\tvirtual LRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\nprivate:\n\tstruct PlotPoint\n\t{\n\t\tshort x;\n\t\tshort y;\n\t\tbool PenDown;\n\t\tCOLORREF color;\n\t};\n\n\tstd::vector<PlotPoint> m_points;\t// Points of lines to draw\n\tCOLORREF m_PenColor;\n};\n\n#endif   //VIEW_H\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Scribble/Scribble.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 9.00\n# Visual Studio 2005\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Scribble\", \"Scribble.vcproj\", \"{8559448A-4279-495E-B22B-CC35E87247E7}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Pocket PC 2003 (ARMV4) = Debug|Pocket PC 2003 (ARMV4)\n\t\tDebug|Smartphone 2003 (ARMV4) = Debug|Smartphone 2003 (ARMV4)\n\t\tDebug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\tDebug|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\tRelease|Pocket PC 2003 (ARMV4) = Release|Pocket PC 2003 (ARMV4)\n\t\tRelease|Smartphone 2003 (ARMV4) = Release|Smartphone 2003 (ARMV4)\n\t\tRelease|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\tRelease|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Smartphone 2003 (ARMV4).Deploy.0 = Debug|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Smartphone 2003 (ARMV4).Deploy.0 = Release|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Scribble/Scribble.vcp",
    "content": "# Microsoft eMbedded Visual Tools Project File - Name=\"Scribble\" - Package Owner=<4>\n# Microsoft eMbedded Visual Tools Generated Build File, Format Version 6.02\n# ** DO NOT EDIT **\n\n# TARGTYPE \"Win32 (WCE ARMV4) Application\" 0xa301\n# TARGTYPE \"Win32 (WCE emulator) Application\" 0xa601\n\nCFG=Scribble - Win32 (WCE emulator) Debug\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\n!MESSAGE use the Export Makefile command and run\n!MESSAGE \n!MESSAGE NMAKE /f \"Scribble.vcn\".\n!MESSAGE \n!MESSAGE You can specify a configuration when running NMAKE\n!MESSAGE by defining the macro CFG on the command line. For example:\n!MESSAGE \n!MESSAGE NMAKE /f \"Scribble.vcn\" CFG=\"Scribble - Win32 (WCE emulator) Debug\"\n!MESSAGE \n!MESSAGE Possible choices for configuration are:\n!MESSAGE \n!MESSAGE \"Scribble - Win32 (WCE emulator) Release\" (based on \"Win32 (WCE emulator) Application\")\n!MESSAGE \"Scribble - Win32 (WCE emulator) Debug\" (based on \"Win32 (WCE emulator) Application\")\n!MESSAGE \"Scribble - Win32 (WCE ARMV4) Release\" (based on \"Win32 (WCE ARMV4) Application\")\n!MESSAGE \"Scribble - Win32 (WCE ARMV4) Debug\" (based on \"Win32 (WCE ARMV4) Application\")\n!MESSAGE \n\n# Begin Project\n# PROP AllowPerConfigDependencies 0\n# PROP Scc_ProjName \"\"\n# PROP Scc_LocalPath \"\"\n# PROP ATL_Project 2\n\n!IF  \"$(CFG)\" == \"Scribble - Win32 (WCE emulator) Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"emulatorRel\"\n# PROP BASE Intermediate_Dir \"emulatorRel\"\n# PROP BASE CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP BASE Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"emulatorRel\"\n# PROP Intermediate_Dir \"emulatorRel\"\n# PROP CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\nRSC=rc.exe\n# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"NDEBUG\" /d \"$(CePlatform)\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\n# ADD RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"NDEBUG\" /d \"$(CePlatform)\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\nCPP=cl.exe\n# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /D \"NDEBUG\" /Yu\"stdafx.h\" /Gs8192 /GF /O2 /c\n# ADD CPP /nologo /W3 /GX /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /D \"NDEBUG\" /FR /Gs8192 /GF /O2 /c\nMTL=midl.exe\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /o \"NUL\" /win32\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /o \"NUL\" /win32\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) aygshell.lib /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n# ADD LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n\n!ELSEIF  \"$(CFG)\" == \"Scribble - Win32 (WCE emulator) Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"emulatorDbg\"\n# PROP BASE Intermediate_Dir \"emulatorDbg\"\n# PROP BASE CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP BASE Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"emulatorDbg\"\n# PROP Intermediate_Dir \"emulatorDbg\"\n# PROP CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\nRSC=rc.exe\n# ADD BASE RSC /l 0x409 /d \"$(CePlatform)\" /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"DEBUG\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\n# ADD RSC /l 0x409 /d \"$(CePlatform)\" /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"DEBUG\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\nCPP=cl.exe\n# ADD BASE CPP /nologo /W3 /Zi /Od /D \"DEBUG\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /Yu\"stdafx.h\" /Gs8192 /GF /c\n# ADD CPP /nologo /W3 /GX /Zi /Od /D \"DEBUG\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /FR /Gs8192 /GF /c\nMTL=midl.exe\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /o \"NUL\" /win32\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /o \"NUL\" /win32\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) aygshell.lib /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /debug /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n# ADD LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /debug /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n\n!ELSEIF  \"$(CFG)\" == \"Scribble - Win32 (WCE ARMV4) Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"ARMV4Rel\"\n# PROP BASE Intermediate_Dir \"ARMV4Rel\"\n# PROP BASE CPU_ID \"{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}\"\n# PROP BASE Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"ARMV4Rel\"\n# PROP Intermediate_Dir \"ARMV4Rel\"\n# PROP CPU_ID \"{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}\"\n# PROP Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\nRSC=rc.exe\n# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"NDEBUG\" /d \"UNICODE\" /d \"_UNICODE\" /d \"$(CePlatform)\" /d \"ARM\" /d \"_ARM_\" /d \"ARMV4\" /r\n# ADD RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"NDEBUG\" /d \"UNICODE\" /d \"_UNICODE\" /d \"$(CePlatform)\" /d \"ARM\" /d \"_ARM_\" /d \"ARMV4\" /r\nCPP=clarm.exe\n# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"ARM\" /D \"_ARM_\" /D \"ARMV4\" /D UNDER_CE=$(CEVersion) /D \"UNICODE\" /D \"_UNICODE\" /D \"NDEBUG\" /Yu\"stdafx.h\" /O2 /M$(CECrtMT) /c\n# ADD CPP /nologo /W3 /GX /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"ARM\" /D \"_ARM_\" /D \"ARMV4\" /D UNDER_CE=$(CEVersion) /D \"UNICODE\" /D \"_UNICODE\" /D \"NDEBUG\" /O2 /M$(CECrtMT) /c\nMTL=midl.exe\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /o \"NUL\" /win32\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /o \"NUL\" /win32\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 commctrl.lib coredll.lib aygshell.lib /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /nodefaultlib:\"$(CENoDefaultLib)\" /subsystem:$(CESubsystem) /align:\"4096\" /MACHINE:ARM\n# ADD LINK32 commctrl.lib coredll.lib /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /nodefaultlib:\"$(CENoDefaultLib)\" /subsystem:$(CESubsystem) /align:\"4096\" /MACHINE:ARM\n\n!ELSEIF  \"$(CFG)\" == \"Scribble - Win32 (WCE ARMV4) Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"ARMV4Dbg\"\n# PROP BASE Intermediate_Dir \"ARMV4Dbg\"\n# PROP BASE CPU_ID \"{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}\"\n# PROP BASE Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"ARMV4Dbg\"\n# PROP Intermediate_Dir \"ARMV4Dbg\"\n# PROP CPU_ID \"{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}\"\n# PROP Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\nRSC=rc.exe\n# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"DEBUG\" /d \"UNICODE\" /d \"_UNICODE\" /d \"$(CePlatform)\" /d \"ARM\" /d \"_ARM_\" /d \"ARMV4\" /r\n# ADD RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"DEBUG\" /d \"UNICODE\" /d \"_UNICODE\" /d \"$(CePlatform)\" /d \"ARM\" /d \"_ARM_\" /d \"ARMV4\" /r\nCPP=clarm.exe\n# ADD BASE CPP /nologo /W3 /Zi /Od /D \"DEBUG\" /D \"ARM\" /D \"_ARM_\" /D \"ARMV4\" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"UNICODE\" /D \"_UNICODE\" /Yu\"stdafx.h\" /M$(CECrtMTDebug) /c\n# ADD CPP /nologo /W3 /GX /Zi /Od /D \"DEBUG\" /D \"ARM\" /D \"_ARM_\" /D \"ARMV4\" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"UNICODE\" /D \"_UNICODE\" /M$(CECrtMTDebug) /c\nMTL=midl.exe\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /o \"NUL\" /win32\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /o \"NUL\" /win32\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 commctrl.lib coredll.lib aygshell.lib /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /debug /nodefaultlib:\"$(CENoDefaultLib)\" /subsystem:$(CESubsystem) /align:\"4096\" /MACHINE:ARM\n# ADD LINK32 commctrl.lib coredll.lib /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /debug /nodefaultlib:\"$(CENoDefaultLib)\" /subsystem:$(CESubsystem) /align:\"4096\" /MACHINE:ARM\n\n!ENDIF \n\n# Begin Target\n\n# Name \"Scribble - Win32 (WCE emulator) Release\"\n# Name \"Scribble - Win32 (WCE emulator) Debug\"\n# Name \"Scribble - Win32 (WCE ARMV4) Release\"\n# Name \"Scribble - Win32 (WCE ARMV4) Debug\"\n# Begin Group \"Source Files\"\n\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n# Begin Source File\n\nSOURCE=.\\FrameApp.cpp\n\n!IF  \"$(CFG)\" == \"Scribble - Win32 (WCE emulator) Release\"\n\nDEP_CPP_FRAME=\\\n\t\".\\FrameApp.h\"\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_FRAME=\\\n\t\"..\\WinCE++\\Cmdbar.h\"\\\n\t\"..\\WinCE++\\Default_Resource.h\"\\\n\t\"..\\WinCE++\\Dialog.h\"\\\n\t\"..\\WinCE++\\SHMenubar.h\"\\\n\t\"..\\WinCE++\\WinCore.h\"\\\n\t\".\\hellsdk.h\"\\\n\t\".\\hsdkstc.h\"\\\n\t\".\\ipapi.h\"\\\n\t\".\\ygshell.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"Scribble - Win32 (WCE emulator) Debug\"\n\nDEP_CPP_FRAME=\\\n\t\"..\\..\\include\\Dialog.h\"\\\n\t\"..\\..\\include\\WCEframe.h\"\\\n\t\"..\\..\\include\\WCEstddef.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\FrameApp.h\"\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_FRAME=\\\n\t\"..\\..\\..\\..\\..\\..\\..\\..\\Program Files\\Windows CE Tools\\wce420\\POCKET PC 2003\\Include\\emulator\\vibrate.h\"\\\n\t\"..\\..\\include\\DeviceResolutionAware.h\"\\\n\t\".\\econfig.h\"\\\n\t\".\\inuserm.h\"\\\n\t\".\\ipapi.h\"\\\n\t\".\\ygshell.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"Scribble - Win32 (WCE ARMV4) Release\"\n\nDEP_CPP_FRAME=\\\n\t\".\\FrameApp.h\"\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_FRAME=\\\n\t\"..\\..\\..\\..\\..\\..\\..\\Program Files\\Windows CE Tools\\wce420\\POCKET PC 2003\\Include\\ARMV4\\vibrate.h\"\\\n\t\"..\\..\\include\\WCEControls.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\inuserm.h\"\\\n\t\".\\ipapi.h\"\\\n\t\".\\ygshell.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"Scribble - Win32 (WCE ARMV4) Debug\"\n\nDEP_CPP_FRAME=\\\n\t\"..\\..\\include\\Dialog.h\"\\\n\t\"..\\..\\include\\WCEframe.h\"\\\n\t\"..\\..\\include\\WCEstddef.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\FrameApp.h\"\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_FRAME=\\\n\t\"..\\..\\include\\DeviceResolutionAware.h\"\\\n\t\".\\econfig.h\"\\\n\t\n\n!ENDIF \n\n# End Source File\n# Begin Source File\n\nSOURCE=.\\main.cpp\n\n!IF  \"$(CFG)\" == \"Scribble - Win32 (WCE emulator) Release\"\n\nDEP_CPP_MAIN_=\\\n\t\".\\FrameApp.h\"\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_MAIN_=\\\n\t\"..\\WinCE++\\Cmdbar.h\"\\\n\t\"..\\WinCE++\\Default_Resource.h\"\\\n\t\"..\\WinCE++\\Dialog.h\"\\\n\t\"..\\WinCE++\\SHMenubar.h\"\\\n\t\"..\\WinCE++\\WinCore.h\"\\\n\t\".\\hellsdk.h\"\\\n\t\".\\hsdkstc.h\"\\\n\t\".\\ipapi.h\"\\\n\t\".\\ygshell.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"Scribble - Win32 (WCE emulator) Debug\"\n\nDEP_CPP_MAIN_=\\\n\t\"..\\..\\include\\Dialog.h\"\\\n\t\"..\\..\\include\\WCEframe.h\"\\\n\t\"..\\..\\include\\WCEstddef.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\FrameApp.h\"\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_MAIN_=\\\n\t\"..\\..\\..\\..\\..\\..\\..\\..\\Program Files\\Windows CE Tools\\wce420\\POCKET PC 2003\\Include\\emulator\\vibrate.h\"\\\n\t\"..\\..\\include\\DeviceResolutionAware.h\"\\\n\t\".\\econfig.h\"\\\n\t\".\\inuserm.h\"\\\n\t\".\\ipapi.h\"\\\n\t\".\\ygshell.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"Scribble - Win32 (WCE ARMV4) Release\"\n\nDEP_CPP_MAIN_=\\\n\t\".\\FrameApp.h\"\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_MAIN_=\\\n\t\"..\\..\\..\\..\\..\\..\\..\\Program Files\\Windows CE Tools\\wce420\\POCKET PC 2003\\Include\\ARMV4\\vibrate.h\"\\\n\t\"..\\..\\include\\WCEControls.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\inuserm.h\"\\\n\t\".\\ipapi.h\"\\\n\t\".\\ygshell.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"Scribble - Win32 (WCE ARMV4) Debug\"\n\nDEP_CPP_MAIN_=\\\n\t\"..\\..\\include\\Dialog.h\"\\\n\t\"..\\..\\include\\WCEframe.h\"\\\n\t\"..\\..\\include\\WCEstddef.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\FrameApp.h\"\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_MAIN_=\\\n\t\"..\\..\\include\\DeviceResolutionAware.h\"\\\n\t\".\\econfig.h\"\\\n\t\n\n!ENDIF \n\n# End Source File\n# Begin Source File\n\nSOURCE=.\\MainFrm.cpp\n\n!IF  \"$(CFG)\" == \"Scribble - Win32 (WCE emulator) Release\"\n\nDEP_CPP_MAINF=\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_MAINF=\\\n\t\"..\\WinCE++\\Cmdbar.h\"\\\n\t\"..\\WinCE++\\Default_Resource.h\"\\\n\t\"..\\WinCE++\\Dialog.h\"\\\n\t\"..\\WinCE++\\SHMenubar.h\"\\\n\t\"..\\WinCE++\\WinCore.h\"\\\n\t\".\\hellsdk.h\"\\\n\t\".\\hsdkstc.h\"\\\n\t\".\\ipapi.h\"\\\n\t\".\\ygshell.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"Scribble - Win32 (WCE emulator) Debug\"\n\nDEP_CPP_MAINF=\\\n\t\"..\\..\\include\\Dialog.h\"\\\n\t\"..\\..\\include\\WCEframe.h\"\\\n\t\"..\\..\\include\\WCEstddef.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_MAINF=\\\n\t\"..\\..\\..\\..\\..\\..\\..\\..\\Program Files\\Windows CE Tools\\wce420\\POCKET PC 2003\\Include\\emulator\\vibrate.h\"\\\n\t\"..\\..\\include\\DeviceResolutionAware.h\"\\\n\t\".\\econfig.h\"\\\n\t\".\\inuserm.h\"\\\n\t\".\\ipapi.h\"\\\n\t\".\\ygshell.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"Scribble - Win32 (WCE ARMV4) Release\"\n\nDEP_CPP_MAINF=\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_MAINF=\\\n\t\"..\\..\\..\\..\\..\\..\\..\\Program Files\\Windows CE Tools\\wce420\\POCKET PC 2003\\Include\\ARMV4\\vibrate.h\"\\\n\t\"..\\..\\include\\WCEControls.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\inuserm.h\"\\\n\t\".\\ipapi.h\"\\\n\t\".\\ygshell.h\"\\\n\t\n\n!ELSEIF  \"$(CFG)\" == \"Scribble - Win32 (WCE ARMV4) Debug\"\n\nDEP_CPP_MAINF=\\\n\t\"..\\..\\include\\Dialog.h\"\\\n\t\"..\\..\\include\\WCEframe.h\"\\\n\t\"..\\..\\include\\WCEstddef.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\MainFrm.h\"\\\n\t\nNODEP_CPP_MAINF=\\\n\t\"..\\..\\include\\DeviceResolutionAware.h\"\\\n\t\".\\econfig.h\"\\\n\t\n\n!ENDIF \n\n# End Source File\n# End Group\n# Begin Group \"Header Files\"\n\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\n# Begin Source File\n\nSOURCE=.\\FrameApp.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\MainFrm.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\newres.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\resource.h\n# End Source File\n# End Group\n# Begin Group \"Resource Files\"\n\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n# Begin Source File\n\nSOURCE=.\\Default.ico\n# End Source File\n# Begin Source File\n\nSOURCE=.\\res\\Default.ico\n# End Source File\n# Begin Source File\n\nSOURCE=.\\Resource.rc\n\n!IF  \"$(CFG)\" == \"Scribble - Win32 (WCE emulator) Release\"\n\n!ELSEIF  \"$(CFG)\" == \"Scribble - Win32 (WCE emulator) Debug\"\n\n!ELSEIF  \"$(CFG)\" == \"Scribble - Win32 (WCE ARMV4) Release\"\n\n!ELSEIF  \"$(CFG)\" == \"Scribble - Win32 (WCE ARMV4) Debug\"\n\n!ENDIF \n\n# End Source File\n# Begin Source File\n\nSOURCE=.\\toolbar.bmp\n# End Source File\n# End Group\n# Begin Group \"Win32++\"\n\n# PROP Default_Filter \"\"\n# Begin Source File\n\nSOURCE=\"..\\..\\include\\Default_Resource.h\"\n# End Source File\n# Begin Source File\n\nSOURCE=\"..\\..\\include\\Dialog.h\"\n# End Source File\n# Begin Source File\n\nSOURCE=\"..\\..\\include\\WCEframe.h\"\n# End Source File\n# Begin Source File\n\nSOURCE=\"..\\..\\include\\WCEstddef.h\"\n# End Source File\n# Begin Source File\n\nSOURCE=\"..\\..\\include\\WinCore.h\"\n# End Source File\n# End Group\n# End Target\n# End Project\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Scribble/Scribble.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"8.00\"\n\tName=\"Scribble\"\n\tProjectGUID=\"{8559448A-4279-495E-B22B-CC35E87247E7}\"\n\tKeyword=\"Win32Proj\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Pocket PC 2003 (ARMV4)\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Smartphone 2003 (ARMV4)\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Windows Mobile 5.0 Smartphone SDK (ARMV4I)\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Pocket PC 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir);..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Smartphone 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Pocket PC 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir);..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Smartphone 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx\"\n\t\t\tUniqueIdentifier=\"{4FC737F1-C7A5-4376-A066-2A32D752A2FF}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\FrameApp.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\main.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\MainFrm.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl;inc;xsd\"\n\t\t\tUniqueIdentifier=\"{93995380-89BD-4b04-88EB-625FBE52EBFB}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\FrameApp.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\MainFrm.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\newres.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\resource.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav\"\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\resource.rc\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\Win32++\\include\\dialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\gdi.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\Win32++\\include\\wceframe.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\Win32++\\include\\wincore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Scribble/Scribble.vcw",
    "content": "Microsoft eMbedded Visual Tools Workspace File, Format Version 4.00\n# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\n\n###############################################################################\n\nProject: \"Scribble\"=\".\\Scribble.vcp\" - Package Owner=<4>\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<4>\n{{{\n}}}\n\n###############################################################################\n\nGlobal:\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<3>\n{{{\n}}}\n\n###############################################################################\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Scribble/main.cpp",
    "content": "///////////////////////////////////////\n// main.cpp\n\n#include \"wincore.h\"\n#include \"resource.h\"\n#include \"FrameApp.h\"\n\n\nint WINAPI WinMain(\tHINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)\n{\n\tTCHAR szBuf[100];\n\t::LoadString(hInstance, IDW_MAIN, szBuf, 100);\n\tHWND hWnd = FindWindow(szBuf, NULL);\n\n\t// If application is already running, restore it and quit\n\tif (hWnd)\n\t{\n\t\tSetForegroundWindow ((HWND)(((DWORD)hWnd) | 0x01));\n\t\tTRACE(_T(\"Application Already running\"));\n\t\treturn -1;\n\t}\n\n\t//Start the framework\n    CWceFrameApp MyApp;\n\n    //Process the window messages\n    return MyApp.Run();\n}\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Scribble/newres.h",
    "content": "#ifndef __NEWRES_H__\n#define __NEWRES_H__\n\n#if !defined(UNDER_CE)\n#define UNDER_CE _WIN32_WCE\n#endif\n\n#if defined(_WIN32_WCE)\n\t#if !defined(WCEOLE_ENABLE_DIALOGEX)\n\t\t#define DIALOGEX DIALOG DISCARDABLE\n\t#endif\n\t#include <commctrl.h>\n\t#define  SHMENUBAR RCDATA\n\t#if defined(WIN32_PLATFORM_PSPC) && (_WIN32_WCE >= 300)\n\t\t#include <aygshell.h>\n\t\t#define AFXCE_IDR_SCRATCH_SHMENU  28700\n\t#else\n\t\t#define I_IMAGENONE\t\t(-2)\n\t\t#define NOMENU\t\t\t0xFFFF\n\t\t#define IDS_SHNEW\t\t1\n\n\t\t#define IDM_SHAREDNEW        10\n\t\t#define IDM_SHAREDNEWDEFAULT 11\n\t#endif // _WIN32_WCE_PSPC\n\t#define AFXCE_IDD_SAVEMODIFIEDDLG 28701\n#endif // _WIN32_WCE\n\n#ifdef RC_INVOKED\n#ifndef _INC_WINDOWS\n#define _INC_WINDOWS\n\t#include \"winuser.h\"           // extract from windows header\n//\t#include \"winver.h\"   \n#endif\n#endif\n\n#ifdef IDC_STATIC\n#undef IDC_STATIC\n#endif\n#define IDC_STATIC      (-1)\n\n#endif //__NEWRES_H__\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Scribble/resource.h",
    "content": "//{{NO_DEPENDENCIES}}\n// Microsoft eMbedded Visual C++ generated include file.\n// Used by DEFAULT.RC\n//\n\n#include \"default_resource.h\"\n\n// String resource IDs\n#define IDS_HELLO\t\t\t\t\t\t100\n\n// Button resource IDs\n#define IDM_BLUE                        110\n#define IDM_RED                         111\n#define IDM_GREEN                       112\n#define IDM_BLACK                       113\n\n// Menu resource IDs\n#define IDM_MAIN_COMMAND1\t\t\t\t120\n#define IDM_MAIN_COMMAND2\t\t\t\t121\n#define IDM_MAIN_COMMAND3\t\t\t\t122\n#define IDM_NEW                         120\t\t// Same as IDM_COMMAND1\n#define IDM_HELP                        150\n#define IDM_HELP_ABOUT\t\t\t\t\t151\n\n// Next default values for new objects\n//\n#ifdef APSTUDIO_INVOKED\n#ifndef APSTUDIO_READONLY_SYMBOLS\n#define _APS_NEXT_RESOURCE_VALUE        201\n#define _APS_NEXT_COMMAND_VALUE         40001\n#define _APS_NEXT_CONTROL_VALUE         1001\n#define _APS_NEXT_SYMED_VALUE           201\n#endif\n#endif\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Scribble/resource.rc",
    "content": "//Microsoft eMbedded Visual C++ generated resource script.\n//\n\n#include \"resource.h\"\n#include \"newres.h\"\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Icon\n//\n\n// Icon with lowest ID value placed first to ensure application icon\n// remains consistent on all systems.\nIDW_MAIN                ICON    DISCARDABLE     \"res\\\\Default.ICO\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Data\n//\n\nIDW_MAIN SHMENUBAR MOVEABLE PURE\nBEGIN\n    IDW_MAIN, 2,\n    I_IMAGENONE, IDM_MAIN_COMMAND1, TBSTATE_ENABLED, TBSTYLE_AUTOSIZE,\n    IDM_NEW, 0, NOMENU,\n    I_IMAGENONE, IDM_MAIN_COMMAND2, TBSTATE_ENABLED,\n    TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDM_HELP, 0, 1,\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Menubar\n//\n\nIDW_MAIN MENU DISCARDABLE\nBEGIN\n    MENUITEM \"New\",                         IDM_NEW\n    POPUP \"Help\"\n    BEGIN\n        MENUITEM \"About\",                       IDM_HELP_ABOUT\n    END\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Dialog\n//\n\nIDW_ABOUT DIALOG DISCARDABLE  0, 0, 140, 57\nSTYLE WS_POPUP | WS_CAPTION\nEXSTYLE 0x80000000L\nCAPTION \"About Default\"\nBEGIN\n    ICON            IDW_MAIN,IDC_STATIC,11,17,20,20\n    LTEXT           \"Scribble Application\",IDC_STATIC,40,10,70,8,SS_NOPREFIX\n    LTEXT           \"Copyright (C) 2007\",IDC_STATIC,40,25,70,8\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Accelerator\n//\n\nIDW_MAIN ACCELERATORS DISCARDABLE\nBEGIN\n    \"A\",            IDM_HELP_ABOUT,         VIRTKEY, CONTROL, NOINVERT\n    \"Q\",            IDW_QUIT,               VIRTKEY, CONTROL, NOINVERT\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Bitmap\n//\n\nIDW_MAIN                BITMAP  DISCARDABLE     \"res\\\\toolbar.bmp\"\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// String Table\n//\n\nSTRINGTABLE DISCARDABLE\nBEGIN\n    IDW_MAIN                \"WinCE Scribble App\"\n    IDM_NEW                 \"New\"\n    IDM_HELP                \"Help\"\nEND\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Simple/Simple.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 10.00\n# Visual Studio 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Simple\", \"Simple.vcproj\", \"{8559448A-4279-495E-B22B-CC35E87247E7}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Pocket PC 2003 (ARMV4) = Debug|Pocket PC 2003 (ARMV4)\n\t\tDebug|Smartphone 2003 (ARMV4) = Debug|Smartphone 2003 (ARMV4)\n\t\tDebug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\tDebug|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\tRelease|Pocket PC 2003 (ARMV4) = Release|Pocket PC 2003 (ARMV4)\n\t\tRelease|Smartphone 2003 (ARMV4) = Release|Smartphone 2003 (ARMV4)\n\t\tRelease|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\tRelease|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Smartphone 2003 (ARMV4).Deploy.0 = Debug|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Smartphone 2003 (ARMV4).Deploy.0 = Release|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Simple/Simple.vcp",
    "content": "# Microsoft eMbedded Visual Tools Project File - Name=\"Simple\" - Package Owner=<4>\n# Microsoft eMbedded Visual Tools Generated Build File, Format Version 6.02\n# ** DO NOT EDIT **\n\n# TARGTYPE \"Win32 (WCE emulator) Application\" 0xa601\n\nCFG=Simple - Win32 (WCE emulator) Debug\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\n!MESSAGE use the Export Makefile command and run\n!MESSAGE \n!MESSAGE NMAKE /f \"Simple.vcn\".\n!MESSAGE \n!MESSAGE You can specify a configuration when running NMAKE\n!MESSAGE by defining the macro CFG on the command line. For example:\n!MESSAGE \n!MESSAGE NMAKE /f \"Simple.vcn\" CFG=\"Simple - Win32 (WCE emulator) Debug\"\n!MESSAGE \n!MESSAGE Possible choices for configuration are:\n!MESSAGE \n!MESSAGE \"Simple - Win32 (WCE emulator) Release\" (based on \"Win32 (WCE emulator) Application\")\n!MESSAGE \"Simple - Win32 (WCE emulator) Debug\" (based on \"Win32 (WCE emulator) Application\")\n!MESSAGE \n\n# Begin Project\n# PROP AllowPerConfigDependencies 0\n# PROP Scc_ProjName \"\"\n# PROP Scc_LocalPath \"\"\n# PROP ATL_Project 2\nCPP=cl.exe\nMTL=midl.exe\nRSC=rc.exe\n\n!IF  \"$(CFG)\" == \"Simple - Win32 (WCE emulator) Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"emulatorRel\"\n# PROP BASE Intermediate_Dir \"emulatorRel\"\n# PROP BASE CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP BASE Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"emulatorRel\"\n# PROP Intermediate_Dir \"emulatorRel\"\n# PROP CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP Target_Dir \"\"\n# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"NDEBUG\" /d \"$(CePlatform)\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\n# ADD RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"NDEBUG\" /d \"$(CePlatform)\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\n# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /D \"NDEBUG\" /YX /Gs8192 /GF /O2 /c\n# ADD CPP /nologo /W3 /GX /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /D \"NDEBUG\" /YX /Gs8192 /GF /O2 /c\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /o \"NUL\" /win32\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /o \"NUL\" /win32\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n# ADD LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n\n!ELSEIF  \"$(CFG)\" == \"Simple - Win32 (WCE emulator) Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"emulatorDbg\"\n# PROP BASE Intermediate_Dir \"emulatorDbg\"\n# PROP BASE CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP BASE Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"emulatorDbg\"\n# PROP Intermediate_Dir \"emulatorDbg\"\n# PROP CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE RSC /l 0x409 /d \"$(CePlatform)\" /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"DEBUG\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\n# ADD RSC /l 0x409 /d \"$(CePlatform)\" /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"DEBUG\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\n# ADD BASE CPP /nologo /W3 /Zi /Od /D \"DEBUG\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /YX /Gs8192 /GF /c\n# ADD CPP /nologo /W3 /GX /Zi /Od /D \"_DEBUG\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /FR /YX /Gs8192 /GF /c\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /o \"NUL\" /win32\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /o \"NUL\" /win32\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /debug /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n# ADD LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /debug /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n\n!ENDIF \n\n# Begin Target\n\n# Name \"Simple - Win32 (WCE emulator) Release\"\n# Name \"Simple - Win32 (WCE emulator) Debug\"\n# Begin Group \"Source Files\"\n\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n# Begin Source File\n\nSOURCE=.\\main.cpp\nDEP_CPP_MAIN_=\\\n\t\"..\\..\\include\\WCEstddef.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\SimpleApp.h\"\\\n\t\".\\view.h\"\\\n\t{$(INCLUDE)}\"ceconfig.h\"\\\n\t\nNODEP_CPP_MAIN_=\\\n\t\"..\\..\\include\\DeviceResolutionAware.h\"\\\n\t\n# End Source File\n# Begin Source File\n\nSOURCE=.\\SimpleApp.cpp\nDEP_CPP_SIMPL=\\\n\t\"..\\..\\include\\WCEstddef.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\SimpleApp.h\"\\\n\t\".\\view.h\"\\\n\t{$(INCLUDE)}\"ceconfig.h\"\\\n\t\nNODEP_CPP_SIMPL=\\\n\t\"..\\..\\include\\DeviceResolutionAware.h\"\\\n\t\n# End Source File\n# Begin Source File\n\nSOURCE=.\\View.cpp\nDEP_CPP_VIEW_=\\\n\t\"..\\..\\include\\WCEstddef.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\view.h\"\\\n\t{$(INCLUDE)}\"ceconfig.h\"\\\n\t\nNODEP_CPP_VIEW_=\\\n\t\"..\\..\\include\\DeviceResolutionAware.h\"\\\n\t\n# End Source File\n# End Group\n# Begin Group \"Header Files\"\n\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\n# Begin Source File\n\nSOURCE=.\\SimpleApp.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\view.h\n# End Source File\n# End Group\n# Begin Group \"Resource Files\"\n\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n# End Group\n# Begin Group \"Win32++\"\n\n# PROP Default_Filter \"\"\n# Begin Source File\n\nSOURCE=\"..\\..\\..\\..\\..\\..\\..\\..\\Program Files\\Windows CE Tools\\wce400\\STANDARDSDK\\Include\\Emulator\\ceconfig.h\"\n# End Source File\n# Begin Source File\n\nSOURCE=\"..\\..\\include\\Default_Resource.h\"\n# End Source File\n# Begin Source File\n\nSOURCE=\"..\\..\\include\\WCEstddef.h\"\n# End Source File\n# Begin Source File\n\nSOURCE=\"..\\..\\include\\WinCore.h\"\n# End Source File\n# End Group\n# End Target\n# End Project\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Simple/Simple.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"Simple\"\n\tProjectGUID=\"{8559448A-4279-495E-B22B-CC35E87247E7}\"\n\tRootNamespace=\"Simple\"\n\tKeyword=\"Win32Proj\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Pocket PC 2003 (ARMV4)\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Smartphone 2003 (ARMV4)\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Windows Mobile 5.0 Smartphone SDK (ARMV4I)\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Pocket PC 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir); ..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Smartphone 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Pocket PC 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir); ..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Smartphone 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx\"\n\t\t\tUniqueIdentifier=\"{4FC737F1-C7A5-4376-A066-2A32D752A2FF}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\main.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\SimpleApp.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\View.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl;inc;xsd\"\n\t\t\tUniqueIdentifier=\"{93995380-89BD-4b04-88EB-625FBE52EBFB}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\resource.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\SimpleApp.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\view.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav\"\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\Resource.rc\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\Win32++\\Simple.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\Win32++\\WCEstddef.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\Win32++\\WinCore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Simple/Simple.vcw",
    "content": "Microsoft eMbedded Visual Tools Workspace File, Format Version 4.00\n# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\n\n###############################################################################\n\nProject: \"Simple\"=\".\\Simple.vcp\" - Package Owner=<4>\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<4>\n{{{\n}}}\n\n###############################################################################\n\nGlobal:\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<3>\n{{{\n}}}\n\n###############################################################################\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Simple/SimpleApp.cpp",
    "content": "#include \"SimpleApp.h\"\n\nCSimpleApp::CSimpleApp()\n{\n}\n\nBOOL CSimpleApp::InitInstance()\n{\n\t//Create the Window\n    m_View.Create();\n\n\treturn TRUE;\n}"
  },
  {
    "path": "external/win32cpp/WCE samples/Simple/SimpleApp.h",
    "content": "#ifndef SIMPLEAPP_H\n#define SIMPLEAPP_H\n\n#include \"wincore.h\"\n#include \"view.h\"\n\n\nclass CSimpleApp : public CWinApp\n{\npublic:\n    CSimpleApp();\n    virtual ~CSimpleApp() {}\n\tvirtual BOOL InitInstance();\n\tCView& GetView() { return m_View; }\n\nprivate:\n    CView m_View;\n};\n\n\n// returns a reference to the CSimpleApp object\ninline CSimpleApp& GetSimpleApp() { return *((CSimpleApp*)GetApp()); }\n\n\n#endif //SIMPLEAPP_H\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Simple/View.cpp",
    "content": "#include \"view.h\"\n#include \"resource.h\"\n\n\nvoid CView::OnDraw(CDC* pDC)\n{\n\t// Define a rectangle to contain some text\n\tCRect rc = GetClientRect();\n\trc.bottom = rc.bottom/2;\n\n\t// Draw some text in our rectangle\n\tLPCTSTR szString = TEXT(\"Use Debug mode. Click here\");\n\tpDC->DrawText(szString, lstrlen(szString), rc, DT_SINGLELINE | DT_VCENTER | DT_CENTER);\n}\n\n\nLRESULT CView::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n\tswitch (uMsg)\n\t{\n\t\tcase WM_DESTROY:\n\t \t\t// Terminate the application.\n\t\t\t::PostQuitMessage(0);\n\t\t\treturn 0;\n\t\tcase WM_LBUTTONDOWN:\n\t\t\t// NOTE: You must be in debug mode to see the trace output\n\t\t\tTRACE(TEXT(\"Left mouse button down message\\n\"));\n\t\t\tbreak;\n\t\tcase WM_LBUTTONUP:\n\t\t\t// NOTE: You must be in debug mode to see the trace output\n\t\t\tTRACE(TEXT(\"Left mouse button up message\\n\"));\n\t\t\tbreak;\n\t}\n\n\t// Pass unhandled messages on for default processing\n\treturn WndProcDefault(uMsg, wParam, lParam);\n}\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Simple/main.cpp",
    "content": "///////////////////////////////////////\n// main.cpp\n\n#include \"SimpleApp.h\"\n#include \"resource.h\"\n\n\nINT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, int)\n{\n\tTCHAR szBuf[MAX_STRING_SIZE];\n\t::LoadString(hInstance, IDW_MAIN, szBuf, MAX_STRING_SIZE -1);\n\tHWND hWnd = FindWindow(szBuf, NULL);\n\n\t// If application is already running, restore it and quit\n\tif (hWnd)\n\t{\n\t\tSetForegroundWindow ((HWND)(((DWORD)hWnd) | 0x01));\n\t\tTRACE(_T(\"Application Already running\"));\n\t\treturn -1;\n\t}\n\n\t//Start the framework\n    CSimpleApp MyApp;\n\n    //Process the window messages\n    return MyApp.Run();\n}\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Simple/resource.h",
    "content": "//{{NO_DEPENDENCIES}}\n// Microsoft eMbedded Visual C++ generated include file.\n//\n\n// include the Resource IDs defined by Win32++\n#include \"default_resource.h\"\n\n// String resource ID\n#define IDS_HELLO\t\t\t\t\t\t100\n\n\n// Next default values for new objects\n//\n#ifdef APSTUDIO_INVOKED\n#ifndef APSTUDIO_READONLY_SYMBOLS\n#define _APS_NEXT_RESOURCE_VALUE        201\n#define _APS_NEXT_COMMAND_VALUE         40001\n#define _APS_NEXT_CONTROL_VALUE         1001\n#define _APS_NEXT_SYMED_VALUE           201\n#endif\n#endif\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Simple/resource.rc",
    "content": "//Microsoft eMbedded Visual C++ generated resource script.\n//\n\n#include \"resource.h\"\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// String Table\n//\n\nSTRINGTABLE DISCARDABLE\nBEGIN\n    IDW_MAIN                \"Simple Window\"\nEND\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Accelerator\n//\n\nIDW_MAIN ACCELERATORS DISCARDABLE\nBEGIN\n    \"Q\",            IDW_QUIT,               VIRTKEY, CONTROL, NOINVERT\nEND\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Simple/view.h",
    "content": "#ifndef VIEW_H\n#define VIEW_H\n\n#include \"wincore.h\"\n\n\nclass CView : public CWnd\n{\npublic:\n\tCView() {}\n\tvirtual ~CView() {}\n\tvirtual void OnDraw(CDC* pDC);\n\tvirtual\tLRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n};\n\n#endif   //VIEW_H\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Subclass/Button.cpp",
    "content": "/////////////////////////////\n// Button.cpp\n\n\n#include \"Button.h\"\n\n\nCButton::~CButton()\n{\n}\n\nvoid CButton::PreCreate(CREATESTRUCT &cs)\n{\n\tcs.lpszClass = TEXT(\"BUTTON\");\n\tcs.style = WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON;\n\tcs.x = 10;\n\tcs.y = 10;\n\tcs.cx = 100;\n\tcs.cy = 100;\n\tcs.lpszName = TEXT(\"OK\");\n}\n\nLRESULT CButton::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n\tswitch (uMsg)\n\t{\n\tcase WM_MOUSEMOVE:\n\t\tTRACE(TEXT(\"WndProc - WM_MOUSEMOVE Message\\n\"));\n\t\tbreak;\n\tcase WM_SETCURSOR:\n\t\tTRACE(TEXT(\"WndProc - WM_SETCURSOR Message\\n\"));\n\t\tbreak;\n\tcase WM_LBUTTONDOWN:\n\t\tTRACE(TEXT(\"WndProc - WM_LBUTTONDOWN Message\\n\"));\n\t\tbreak;\n\tcase WM_LBUTTONUP:\n\t\tTRACE(TEXT(\"WndProc - WM_LBUTTONUP Message\\n\"));\n\t\tbreak;\n\tcase WM_PAINT:\n\t\tTRACE(TEXT(\"WndProc - WM_PAINT Message\\n\"));\n\t\tbreak;\n\n\tdefault:\n\t\tTRACE(TEXT(\"WndProc - Unspecified Message\\n\"));\n\t\tbreak;\n\t}\n\n\t// Pass unhandled messages on for default processing\n\treturn CWnd::WndProc(uMsg, wParam, lParam);\n}\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Subclass/Button.h",
    "content": "/////////////////////////////\n// Button.h\n\n\n#ifndef BUTTON_H\n#define BUTTON_H\n\n#include \"wincore.h\"\n\n\nclass CButton : public CWnd\n{\npublic:\n\tCButton() {}\n\tvirtual ~CButton();\n\tvirtual void PreCreate(CREATESTRUCT &cs);\n\nprotected:\n\tvirtual LRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\n};\n\n\n\n#endif //BUTTON_H\n\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Subclass/MainWin.cpp",
    "content": "//////////////////////////////\n// MainWin.Cpp\n\n#include \"MainWin.h\"\n\n\nCMainWin::CMainWin()\n{\n\t::InitCommonControls();\n}\n\nvoid CMainWin::OnCreate()\n{\n\tm_Button.Create(this);\n}\n\nLRESULT CMainWin::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n\tswitch (uMsg)\n\t{\n\t\tcase WM_DESTROY:\n\t \t\t// Terminate the application.\n\t\t\t::PostQuitMessage(0);\n\t\t\treturn 0L;\n\t}\n\n\t// Pass unhandled messages on for default processing\n\treturn WndProcDefault(uMsg, wParam, lParam);\n}\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Subclass/MainWin.h",
    "content": "///////////////////////////////\n// MainWin.h\n\n\n#ifndef MAINWIN_H\n#define MAINWIN_H\n\n\n#include \"Button.h\"\n\n\nclass CMainWin : public CWnd\n{\npublic:\n\tCMainWin();\n\t~CMainWin() {}\n\nprotected:\n\tLRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\tvoid OnCreate();\n\nprivate:\n\tCButton m_Button;\n};\n\n\n\n#endif //MAINWIN_H\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Subclass/Subclass.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 9.00\n# Visual Studio 2005\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Subclass\", \"Subclass.vcproj\", \"{8559448A-4279-495E-B22B-CC35E87247E7}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Pocket PC 2003 (ARMV4) = Debug|Pocket PC 2003 (ARMV4)\n\t\tDebug|Smartphone 2003 (ARMV4) = Debug|Smartphone 2003 (ARMV4)\n\t\tDebug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\tDebug|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\tRelease|Pocket PC 2003 (ARMV4) = Release|Pocket PC 2003 (ARMV4)\n\t\tRelease|Smartphone 2003 (ARMV4) = Release|Smartphone 2003 (ARMV4)\n\t\tRelease|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\tRelease|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Smartphone 2003 (ARMV4).Deploy.0 = Debug|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Smartphone 2003 (ARMV4).Deploy.0 = Release|Smartphone 2003 (ARMV4)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\t\t{8559448A-4279-495E-B22B-CC35E87247E7}.Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Subclass/Subclass.vcp",
    "content": "# Microsoft eMbedded Visual Tools Project File - Name=\"Subclass\" - Package Owner=<4>\n# Microsoft eMbedded Visual Tools Generated Build File, Format Version 6.02\n# ** DO NOT EDIT **\n\n# TARGTYPE \"Win32 (WCE emulator) Application\" 0xa601\n\nCFG=Subclass - Win32 (WCE emulator) Debug\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\n!MESSAGE use the Export Makefile command and run\n!MESSAGE \n!MESSAGE NMAKE /f \"Subclass.vcn\".\n!MESSAGE \n!MESSAGE You can specify a configuration when running NMAKE\n!MESSAGE by defining the macro CFG on the command line. For example:\n!MESSAGE \n!MESSAGE NMAKE /f \"Subclass.vcn\" CFG=\"Subclass - Win32 (WCE emulator) Debug\"\n!MESSAGE \n!MESSAGE Possible choices for configuration are:\n!MESSAGE \n!MESSAGE \"Subclass - Win32 (WCE emulator) Release\" (based on \"Win32 (WCE emulator) Application\")\n!MESSAGE \"Subclass - Win32 (WCE emulator) Debug\" (based on \"Win32 (WCE emulator) Application\")\n!MESSAGE \n\n# Begin Project\n# PROP AllowPerConfigDependencies 0\n# PROP Scc_ProjName \"\"\n# PROP Scc_LocalPath \"\"\n# PROP ATL_Project 2\nCPP=cl.exe\nMTL=midl.exe\nRSC=rc.exe\n\n!IF  \"$(CFG)\" == \"Subclass - Win32 (WCE emulator) Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"emulatorRel\"\n# PROP BASE Intermediate_Dir \"emulatorRel\"\n# PROP BASE CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP BASE Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"emulatorRel\"\n# PROP Intermediate_Dir \"emulatorRel\"\n# PROP CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP Target_Dir \"\"\n# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"NDEBUG\" /d \"$(CePlatform)\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\n# ADD RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"NDEBUG\" /d \"$(CePlatform)\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\n# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /D \"NDEBUG\" /YX /Gs8192 /GF /O2 /c\n# ADD CPP /nologo /W3 /GX /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /D \"NDEBUG\" /YX /Gs8192 /GF /O2 /c\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /o \"NUL\" /win32\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /o \"NUL\" /win32\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n# ADD LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n\n!ELSEIF  \"$(CFG)\" == \"Subclass - Win32 (WCE emulator) Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"emulatorDbg\"\n# PROP BASE Intermediate_Dir \"emulatorDbg\"\n# PROP BASE CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP BASE Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"emulatorDbg\"\n# PROP Intermediate_Dir \"emulatorDbg\"\n# PROP CPU_ID \"{32E52003-403E-442D-BE48-DE10F8C6131D}\"\n# PROP Platform_ID \"{8A9A2F80-6887-11D3-842E-005004848CBA}\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE RSC /l 0x409 /d \"$(CePlatform)\" /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"DEBUG\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\n# ADD RSC /l 0x409 /d \"$(CePlatform)\" /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d \"UNICODE\" /d \"_UNICODE\" /d \"DEBUG\" /d \"_X86_\" /d \"x86\" /d \"_i386_\" /r\n# ADD BASE CPP /nologo /W3 /Zi /Od /D \"DEBUG\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /YX /Gs8192 /GF /c\n# ADD CPP /nologo /W3 /GX /Zi /Od /D \"_DEBUG\" /D \"_i386_\" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D \"$(CePlatform)\" /D \"i_386_\" /D \"UNICODE\" /D \"_UNICODE\" /D \"_X86_\" /D \"x86\" /FR /YX /Gs8192 /GF /c\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /o \"NUL\" /win32\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /o \"NUL\" /win32\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /debug /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n# ADD LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:\"0x00010000\" /stack:0x10000,0x1000 /entry:\"WinMainCRTStartup\" /debug /nodefaultlib:\"OLDNAMES.lib\" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86\n\n!ENDIF \n\n# Begin Target\n\n# Name \"Subclass - Win32 (WCE emulator) Release\"\n# Name \"Subclass - Win32 (WCE emulator) Debug\"\n# Begin Group \"Source Files\"\n\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n# Begin Source File\n\nSOURCE=.\\Button.cpp\nDEP_CPP_BUTTO=\\\n\t\"..\\..\\include\\WCEstddef.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\Button.h\"\\\n\t{$(INCLUDE)}\"ceconfig.h\"\\\n\t\nNODEP_CPP_BUTTO=\\\n\t\"..\\..\\include\\DeviceResolutionAware.h\"\\\n\t\n# End Source File\n# Begin Source File\n\nSOURCE=.\\main.cpp\nDEP_CPP_MAIN_=\\\n\t\"..\\..\\include\\WCEstddef.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\Button.h\"\\\n\t\".\\MainWin.h\"\\\n\t\".\\SubclassApp.h\"\\\n\t{$(INCLUDE)}\"ceconfig.h\"\\\n\t\nNODEP_CPP_MAIN_=\\\n\t\"..\\..\\include\\DeviceResolutionAware.h\"\\\n\t\n# End Source File\n# Begin Source File\n\nSOURCE=.\\MainWin.cpp\nDEP_CPP_MAINW=\\\n\t\"..\\..\\include\\WCEstddef.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\Button.h\"\\\n\t\".\\MainWin.h\"\\\n\t{$(INCLUDE)}\"ceconfig.h\"\\\n\t\nNODEP_CPP_MAINW=\\\n\t\"..\\..\\include\\DeviceResolutionAware.h\"\\\n\t\n# End Source File\n# Begin Source File\n\nSOURCE=.\\Resource.rc\n# End Source File\n# Begin Source File\n\nSOURCE=.\\SubclassApp.cpp\nDEP_CPP_SUBCL=\\\n\t\"..\\..\\include\\WCEstddef.h\"\\\n\t\"..\\..\\include\\WinCore.h\"\\\n\t\".\\Button.h\"\\\n\t\".\\MainWin.h\"\\\n\t\".\\SubclassApp.h\"\\\n\t{$(INCLUDE)}\"ceconfig.h\"\\\n\t\nNODEP_CPP_SUBCL=\\\n\t\"..\\..\\include\\DeviceResolutionAware.h\"\\\n\t\n# End Source File\n# End Group\n# Begin Group \"Header Files\"\n\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\n# Begin Source File\n\nSOURCE=.\\Button.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\MainWin.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\resource.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\SubclassApp.h\n# End Source File\n# End Group\n# Begin Group \"Resource Files\"\n\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n# End Group\n# Begin Group \"Win32++\"\n\n# PROP Default_Filter \"\"\n# Begin Source File\n\nSOURCE=\"..\\..\\..\\..\\..\\..\\..\\..\\Program Files\\Windows CE Tools\\wce400\\STANDARDSDK\\Include\\Emulator\\ceconfig.h\"\n# End Source File\n# Begin Source File\n\nSOURCE=\"..\\..\\include\\Default_Resource.h\"\n# End Source File\n# Begin Source File\n\nSOURCE=\"..\\..\\include\\WCEstddef.h\"\n# End Source File\n# Begin Source File\n\nSOURCE=\"..\\..\\include\\WinCore.h\"\n# End Source File\n# End Group\n# End Target\n# End Project\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Subclass/Subclass.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"8.00\"\n\tName=\"Subclass\"\n\tProjectGUID=\"{8559448A-4279-495E-B22B-CC35E87247E7}\"\n\tKeyword=\"Win32Proj\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Pocket PC 2003 (ARMV4)\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Smartphone 2003 (ARMV4)\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Windows Mobile 5.0 Smartphone SDK (ARMV4I)\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Pocket PC 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir); ..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Smartphone 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Pocket PC 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir); ..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Smartphone 2003 (ARMV4)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;POCKETPC2003_UI_MODEL;POCKETPC2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)\"\n\t\t\tOutputDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(PlatformName)\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tExecutionBucket=\"7\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;SMARTPHONE2003_UI_MODEL;SMARTPHONE2003_UI_MODEL\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES)\"\n\t\t\t\tCulture=\"1033\"\n\t\t\t\tAdditionalIncludeDirectories=\"$(IntDir)\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\" /subsystem:windowsce,5.01\"\n\t\t\t\tOutputFile=\"$(OutDir)/Starter.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tDelayLoadDLLs=\"$(NOINHERIT)\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/Starter.pdb\"\n\t\t\t\tSubSystem=\"0\"\n\t\t\t\tStackReserveSize=\"65536\"\n\t\t\t\tStackCommitSize=\"4096\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCodeSignTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t\t<DeploymentTool\n\t\t\t\tForceDirty=\"-1\"\n\t\t\t\tRemoteDirectory=\"\"\n\t\t\t\tRegisterOutput=\"0\"\n\t\t\t\tAdditionalFiles=\"\"\n\t\t\t/>\n\t\t\t<DebuggerTool\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx\"\n\t\t\tUniqueIdentifier=\"{4FC737F1-C7A5-4376-A066-2A32D752A2FF}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\Button.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\main.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\MainWin.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\SubclassApp.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl;inc;xsd\"\n\t\t\tUniqueIdentifier=\"{93995380-89BD-4b04-88EB-625FBE52EBFB}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\Button.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\MainWin.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\resource.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\SubclassApp.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav\"\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\Resource.rc\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\Win32++\\WCEstddef.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\Win32++\\WinCore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Subclass/Subclass.vcw",
    "content": "Microsoft eMbedded Visual Tools Workspace File, Format Version 4.00\n# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\n\n###############################################################################\n\nProject: \"Subclass\"=\".\\Subclass.vcp\" - Package Owner=<4>\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<4>\n{{{\n}}}\n\n###############################################################################\n\nGlobal:\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<3>\n{{{\n}}}\n\n###############################################################################\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Subclass/SubclassApp.cpp",
    "content": "///////////////////////////////////////////////\n//SubclassApp.cpp -  Definitions for the CSubclassApp class\n\n\n#include \"SubclassApp.h\"\n\n\nCSubclassApp::CSubclassApp()\n{\n}\n\nBOOL CSubclassApp::InitInstance()\n{\n\tTRACE(TEXT(\"Move the mouse over the button to see messages\"));\n\n\t//Create the Outer Window\n\tm_Win.Create();\n\n\treturn TRUE;\n}\n\nCSubclassApp::~CSubclassApp()\n{\n}\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Subclass/SubclassApp.h",
    "content": "//////////////////////////////////////////////////\n// SubclassApp.h\n//  Declaration of the CSubApp class\n\n#ifndef SUBCLASSAPP_H\n#define SUBCLASSAPP_H\n\n#include \"MainWin.h\"\n\n\nclass CSubclassApp : public CWinApp\n{\npublic:\n\tCSubclassApp();\n\tvirtual ~CSubclassApp();\n\tvirtual BOOL InitInstance();\n\tCMainWin& GetWin() { return m_Win; }\n\nprivate:\n\tCMainWin m_Win;\n};\n\n\n// returns a reference to the CSubclassApp object\ninline CSubclassApp& GetSubApp() { return *((CSubclassApp*)GetApp()); }\n\n\n#endif // define SUBCLASSAPP_H\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Subclass/main.cpp",
    "content": "///////////////////////////////////////\n// main.cpp\n\n#include \"SubclassApp.h\"\n#include \"resource.h\"\n\nINT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, int)\n{\n\tTCHAR szBuf[MAX_STRING_SIZE];\n\t::LoadString(hInstance, IDW_MAIN, szBuf, MAX_STRING_SIZE -1);\n\tHWND hWnd = FindWindow(szBuf, NULL);\n\n\t// If application is already running, restore it and quit\n\tif (hWnd)\n\t{\n\t\tSetForegroundWindow ((HWND)(((DWORD)hWnd) | 0x01));\n\t\tTRACE(_T(\"Application Already running\"));\n\t\treturn -1;\n\t}\n\n\t// Start Win32++\n\tCSubclassApp theApp;\n\n\t// Process the window messages\n\treturn theApp.Run();\n}\n\n\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Subclass/resource.h",
    "content": "//{{NO_DEPENDENCIES}}\n// Microsoft eMbedded Visual C++ generated include file.\n//\n\n// include the Resource IDs defined by Win32++\n#include \"default_resource.h\"\n\n// String resource ID\n#define IDS_HELLO\t\t\t\t\t\t100\n\n// Button resource IDs\n#define IDM_BOLD                        110\n#define IDM_ITALIC                      111\n#define IDM_UNDERLINE                   112\n\n// Menu resource IDs\n#define IDM_MAIN_COMMAND1\t\t\t\t120\n#define IDM_MAIN_COMMAND2\t\t\t\t121\n#define IDM_MAIN_COMMAND3\t\t\t\t122\n#define IDM_NEW                         130\n#define IDM_EDIT                        140\n#define IDM_EDIT_CUT                    141\n#define IDM_EDIT_COPY                   142\n#define IDM_EDIT_PASTE                  143\n#define IDM_EDIT_CLEAR                  144\n#define IDM_TOOLS                       150\n#define IDM_HELP_ABOUT\t\t\t\t\t151\n\n// Next default values for new objects\n//\n#ifdef APSTUDIO_INVOKED\n#ifndef APSTUDIO_READONLY_SYMBOLS\n#define _APS_NEXT_RESOURCE_VALUE        201\n#define _APS_NEXT_COMMAND_VALUE         40001\n#define _APS_NEXT_CONTROL_VALUE         1001\n#define _APS_NEXT_SYMED_VALUE           201\n#endif\n#endif\n"
  },
  {
    "path": "external/win32cpp/WCE samples/Subclass/resource.rc",
    "content": "//Microsoft eMbedded Visual C++ generated resource script.\n//\n\n#include \"resource.h\"\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// String Table\n//\n\nSTRINGTABLE DISCARDABLE\nBEGIN\n    IDW_MAIN                \"WinCE subclass example\"\nEND\n\n\n\n"
  },
  {
    "path": "external/win32cpp/help/Readme.TXT",
    "content": "Some .CHM files may not render properly on Windows XP, Windows Vista and Windows 7.\n\nWhen attempting to open a Compiled HTML Help (.CHM) file, the file may open but display one of the following messages instead of the expected content:\n\n  * Navigation to the webpage was canceled.\n  * Action canceled.\n\t\nTo resolve this issue, carry out the following steps:\n\n  1. Right-click the .CHM file and choose Properties\n  2. On the General tab, click the button labeled \"Unblock\"\n  3. Click OK\n\nFor further information in this issue, refer to the following Microsoft articles.   \n\nFor Windows XP\nhttp://support.microsoft.com/kb/902225\n\nFor Windows Vista and Windows 7\nhttp://support.microsoft.com/kb/2021383"
  },
  {
    "path": "external/win32cpp/include/changes.txt",
    "content": "Version 7.2\n===========\n\nNew Features and Enhancements\n-----------------------------\n* Added CString class\n   The CString class is intended to provide much of the same functionality\n   as the CString class provided with MFC/ATL.\n* Added CMenu\n\tThe CMenu class is intended to provide much of the same functionality\n    as the CMenu class provided with MFC. The library now standardises on\n    using pointers to CMenu, instead of HMENU.\t\n* Added CFile\n\tThis class provides a convenient wrapper for functions dealing with files.\n* Added Idle processing.\n\tThe Idle processing is used by the Win32++ library for some internal \n\tprocessing. It is also available for use by users, and is used in much the\n\tsame way as OnIdle processing in MFC.\n* Enhanced the CDC class, and added CWindowDC, CClientDC, CMemDC, CPaintDC\n   and CMetaFileDC. The creation of the various different types of CDCs has\n   been simplified, and the CDC functions now use CDC pointers instead of\n   HDCs. These changes improve the compatibility between Win32++ and MFC.\n* Enhanced the various GDI object classes, namely CBitmap, CBrush, CFont, \n   CPalette, CPen and CRgn, and added CGDIObject. The library now standardises\n   on using pointers to theses classes instead of raw GDI handles (like HPEN).\n   These changes improve the compatibility between Win32++ and MFC.\n\nChanges in detail\n-----------------\n- Added CustomControl sample\n- Added CMenu\n- Added CString\n- Added CFile\n- Added CClientDC\n- Added CMemDC\n- Added CPaintDC\n- Added CWindowDC\n- Added CMetaFileDC\n- Added BSTR2A\n- Added BSTR2T\n- Added BSTR2W\n- Added FromHandle. Several global functions. They return pointers for:\n    - CBitmap\n\t- CBrush\n\t- CFont\n\t- CPalette\n    - CPen\n    - CDC\n\t- CMenu\n\t- CWnd\n- Added CDC::Destroy\n- Added CDC::GetDCBrushColor\n- Added CDC::SetDCBrushColor\n- Added CDC::SelectObject    (several versions)\n- Added CDC::SelectPalete\n- Added CDC::SelectClipRgn\n- Added CDC::SelectStockObject\n- Added CDocker::GetActiveDocker\n- Added CDocker::SetCaptionColors\n- Added CTab::SetTabIcon\n- Added CWinApp::GetAccelerators\n- Added CWinApp::OnIdle\n- Added CWinApp::PreTranslateMessage\n- Added CWinException::GetError\n- Added CWnd::ChildWindowFromPoint\n- Added CWnd::WindowFromPoint\n- Modified LoadString \t\t\t\t\tnow returns CString\n- Modified CBrush::CreatePatternBrush\tnow accepts a CBitmap pointer\n- Modified CDC::BitBlt\t\t\t\t\tnow accepts a CDC pointer\n- Modified CDC::CreateCompatibleDC\t\tnow accepts a CDC pointer and attaches the DC\n- Modified CDC::CreateDC\t\t\t\tnow attaches the DC\t\t\t\t\t\t\t\n- Modified CDC::CreateIC            \tnow attaches the DC\n- Modified CDC::CreateCompatibleBitmap\tnow accepts a CDC pointer\n- Modified CDC::CreateDIBitmap\t\t\tnow accepts a CDC pointer\n- Modified CDC::CreateDIBSection\t\tnow accepts a CDC pointer\n- Modified CDC::StretchBlt\t\t\t\tnow accepts a CDC pointer\n- Modified CDocker::IsChildOfDocker \tnow accepts a CWnd pointer instead of HWND\n- Modified CDocker::IsRelated \t\t\tnow accepts a CWnd pointer instead of HWND\n- Modified CWnd::CreateEx               now accepts a CMenu pointer\n- Modified CWnd::GetAncestor\t\t\tnow accepts a gaFlags parameter\n- Modified CWnd::GetFont\t\t\t\tnow returns a CFont pointer\n- Modified CWnd::GetMenu                now accepts a CMenu pointer\n- Modified CWnd::GetNextDlgGroupItem    now accepts a CWnd pointer\n- Modified CWnd::GetNextDlgTabItem      now accepts a CWnd pointer\n- Modified CWnd::GetSystemMenu          now accepts a CMenu pointer\n- Modified CWnd::GetUpdateRgn           now accepts a CRgn pointer\n- Modified CWnd::GetWindowDC            now returns a CDC pointer\n- Modified CWnd::HiliteMenuItem         now accepts a CMenu pointer\n- Modified CWnd::InvalidateRgn          now accepts a CRgn pointer\n- Modified CWnd::OnEraseBkgnd\t\t\tnow accepts a CDC pointer\n- Modified CWnd::RedrawWindow           now accepts a CRgn pointer\n- Modified CWnd::ReleaseDC              now accepts a CDC pointer\n- Modified CWnd::ScrollWindowEx         now accepts a CRgn pointer\n- Modified CWnd::SetFont                now accepts a CFont pointer\n- Modified CWnd::SetMenu                now accepts a CMenu pointer\n- Modified CWnd::SetWindowRgn           now accepts a CRgn pointer\n- Modified CResizer::AddChild\t\t\tnow accepts a CWnd pointer\n- Removed CLoadString\n- Removed CDC::AttachBitmap\n- Removed CDC::AttachBrush\n- Removed CDC::AttachFont\n- Removed CDC::AttachPalette\n- Removed CDC::AttachPen\n- Removed CDC::DetachBitmap\n- Removed CDC::DetachBrush\n- Removed CDC::DetachFont\n- Removed CDC::DetachPalette\n- Removed CDC::DetachPen\n- Removed CTab::SetTabImage\n- Removed GetWindowType for all CWnd classes\n- Renamed CDocker::GetDockTopLevel to CDocker::GetTopmostDocker\n- Renamed CWnd::OnPaint to CWnd::OnDraw\n\n- Extended the help documentation to describe the new features.\n- Added an index to the help documentation.\n\n\nIncompatibilities with previous versions\n----------------------------------------\n* The Win32++ now uses Run Time Type Information (RTTI). Older Microsoft\n  compilers (Visual Studio 2003 and earlier) may need to enable the option to\n  support RTTI.\n* LoadString now returns a CString.\n* CWnd::OnEraseBkgnd has changed. This function now uses a CDC pointer instead\n   of a CDC reference. This change will need to be made for any function that\n   overrides OnEraseBkgnd in order for it to get called.\n* CWnd::OnPaint has been removed and replaced with OnPaint.  Code that previously \n   overrode OnPaint will now need to override OnPaint instead. OnPaint uses a \n   CDC pointer, not a CDC reference.\n* Changes made to the CDC class (and the addition of CClientDC, CWindowDC, CMemDC,\n   etc.) are rather likely to affect existing code.\n    - CDC functions now use a CDC pointer argument instead of a HDC.\n\t- CWnd functions like GetDC return a pointer to a CDC instead of a HDC.\n\t- use CClientDC for client window DCs instead of CDC MyDC = GetDC().\n\t- use CWindowDC for window DCs instead of CDC MyDC = GetWindowDC().\n\t- use CMemDC for memory DCs instead of CDC MyDC = CreateCompatibleDC(dc).\n\t- use CDC::FromHandle to conveniently convert a HDC provided to us by say \n\t   CustomDraw to a CDC pointer.\n\n\tCoding example:\n\t  CClientDC dcClient(this);\t\t\t// Create a client window DC for this CWnd\n      CMemDC dcMem(&dcClient);\t\t\t// Create a Memory DC from the Client DC.\n      CMemDC.CreatePen(PS_SOLID, 1, RGB(255,0,0);\n\t  CMemDC.MoveTo(0, 0);\n      CMemDC.LineTo(50, 50);\n\t  dcClient.BitBlt(0, 0, cx, cy, &CMemDC, 0, 0); \n\t\nVersion 7.1.3\n=============\nThis version has some additional bug fixes:\n* Fixed a thread safety issue in CWinApp::SetTLSIndex introduced in version 7.1.2.\n* Added CWinApp::PreTranslateMessage to simplify overloading CWinApp::MessageLoop.\n* The Explorer sample now ends without throwing an exeption on Win2000.\n* CResizer now preserves the tab order in a dialog.\n\nVersion 7.1.2\n=============\nThis version has some additional bug fixes: \n* CDC Attach and CDC(HDC hDC) now succeed when the HDC is already attached to another CDC.\n* Fixed a resource leak in CTab::Paint which affected CTab, CTabbedMDI and CDockContainer\n* Tabs without owner draw now display their icons.\n* A CDC can now be reused after its HDC has been detached.\n* CBrush::CBrush(COLORREF crColor) now works as expected.                 \n* CResize now supports controls that issue WM_HSCROLL and WM_VSCROLL messages.\n\nVersion 7.1.1\n=============\nVersion 7.1.1 has some minor bug fixes for 7.1, namely:\n* Corrected an incorrect dock size when docking a docker.\n* Corrected a drawing error in the tutorials and scribble sample which occurred when \n  dragging the mouse over the view window with the left button down.\n* Added a missing typedef for BSTR2T.\n\nVersion 7.1\n===========\nNew Features and Enhancements\n-----------------------------\n* Added support for Task Dialogs\n* Added the following set of GDI classes: CBitmap, CBrush, CFont, CPalette, \n   CPen and CRgn. These work in cooperation with the existing CDC class.\n* Added a set of new Text conversion functions based on classes.\n   The complete set of functions are:\n\tA2BSTR\t\tANSI  to BSTR\n\tA2OLE\t\tANSI  to OLE\n\tA2T\t\t\tANSI  to TCHAR\n\tA2W\t\t\tANSI  to WCHAR\n\tOLE2A\t\tOLE   to ANSI\n\tOLE2T\t\tOLE   to TCHAR\n\tOLE2W\t\tOLE   to WCHAR\n\tT2A\t\t\tTCHAR to ANSI\n\tT2BSTR\t\tTCHAR to BSTR\n\tT2OLE       TCHAR to OLE\n\tT2W\t\t\tTCHAR to Wide\n\tW2A\t\t\tWCHAR to ANSI\n\tW2BSTR\t\tWCHAR to BSTR\n\tW2OLE\t\tWCHAR to OLE\n\tW2T\t\t\tWCHAR to TCHAR\n   Refer to the help documentation for instructions on using these functions.\n* Added CLoadString (and LoadString) to return a string resource. \n* OnEraseBkgnd is now called automatically when a CWnd's background needs\n   erasing. Return TRUE to prevent default erasure.\n* Scribble Tutorial now demonstrates the use of command line arguments\n* Enhanced CResizer.\n   - The anchor points are now fixed instead of proportional\n   - Scrollbars are now added when required.\n   - Added the DialogResizing sample to demonstrate CResizer's new features.\n* Create now use a CWnd pointer instead of a HWND when specifying the \n   parent window.\n* Dialogs and Property Sheets now use a CWnd pointer instead of a HWND\n   when specifying the parent window.\n* CTab has been enhanced. The TCS_FIXEDWIDTH and TCS_OWNERDRAWFIXED styles\n   are now optional.   \n* Extended the CSize, CPoint and CRect classes\n* Extended CMDIFrame and CMDIChild. CMDIChild::SetHandles is now used to set\n   the MDI child's menu and accelerator table. \n* A docker can now be resized while docked using CDocker::SetDockSize.\n* Extended the \"Using Win32++ section of the Win32++ help documentation.\n\nChanges in detail\n-----------------\n- Added CBitmap\n- Added CBrush\n- Added CFont\n- Added CPalette\n- Added CPen\n- Added CRgn\n- Added CTaskDialog\n- Added CLoadString \n- Added LoadString \t\t\t   \t(uses CLoadString, replaces CWnd::LoadString)\n- Added tStringStream typedef  \t(a TCHAR stringstream)\n- Added\tA2BSTR\t\n- Added\tA2OLE\t\n- Added\tA2T\t\t\n- Added\tA2W\t\t\n- Added\tOLE2A\t\n- Added\tOLE2T\t\n- Added\tOLE2W\t\n- Added\tT2A\t\t\n- Added\tT2BSTR\t\n- Added\tT2OLE   \n- Added\tT2W\t\t\n- Added\tW2A\t\t\n- Added\tW2BSTR\t\n- Added\tW2OLE\t\n- Added\tW2T\n- Added CDC::AttachPalette\n- Added CDC::CreatePalette\n- Added CDC::CreateHalftonePalette\n- Added CDC::DetachPalette\n- Added CDC::GetBitmap\n- Added CDC::GetBitmapInfo\n- Added CDC::GetBrusg\n- Added CDC::GetBrushInfo\n- Added CDC::GetFont\n- Added CDC::GetFontInfo\n- Added CDC::GetPen\n- Added CDC::GetPenInfo\n- Added CDC::ExtSelectClipRgn\n- Added CDC::ExcludeClipRect\n- Added CDC::GetClipBox\t\n- Added CDC::GetClipRgn\n- Added CDC::GetRgn\t\t\n- Added CDC::IntersectClipRect\n- Added CDC::OffsetClipRgn\n- Added CDC::PtVisible\n- Added CDC::RectVisible\n- Added CDC::SelectClipRgn\n- Added CDialog::AttachItem\n- Added CDockContainer::SetActiveContainer\n- Added CDocker::Close\n- Added CDocker::SetCaptionHeight\n- Added CFrame::GetFrameAccel\n- Added CFrame::ShowMenu\n- Added CMDIChild::GetMDIFrame\n- Added CMDIChild::SetHandles\n- Added CMDIFrame::GetMDIClient\n- Added CMDIFrame::MDICascade\n- Added CMDIFrame::MDIIconArrange\n- Added CMDIFrame::MDIMaximize\n- Added CMDIFrame::MDINext\n- Added CMDIFrame::MDIPrev\n- Added CMDIFrame::MDIRestore\n- Added CMDIFrame::MDITile\n- Added CResizer::GetMaxRect\n- Added CResizer::GetMinRect\n- Added CResizer::HandleMessage\n- Added CTab::GetListMenu\n- Added CTab::SetFixedWidth\n- Added CTab::SetOwnerDraw\n- Added CTabbedMDI::GetListMenu\n- Added CWinApp::SetAccelerators\n- Added CWnd::BeginPaint\n- Added CWnd::ClientToScreen\n- Added CWnd::CheckRadioButton\n- Added CWnd::DlgDirList\n- Added CWnd::DlgDirListComboBox\n- Added CWnd::DlgDirSelectEx\n- Added CWnd::DlgDirSelectComboBoxEx\n- Added CWnd::DrawAnimatedRects\n- Added CWnd::DrawCaption\n- Added CWnd::EndPaint\n- Added CWnd::GetDesktopWindow\n- Added CWnd::GetNextDlgGroupItem\n- Added CWnd::GetNextDlgTabItem\n- Added CWnd::GetSystemMenu\n- Added CWnd::GetUpdateRect\n- Added CWnd::GetUpdateRgn\n- Added CWnd::HiliteMenuItem\n- Added CWnd::IsDialogMessage\n- Added CWnd::IsDlgButtonChecked\n- Added CWnd::MapWindowPoints\n- Added CWnd::OnEraseBkgnd\n- Added CWnd::Print\n- Added CWnd::ScreenToClient\n- Added CWnd::SendNotifyMessage\n- Modified CDialog \t\t\t\t\tnow takes a CWnd pointer instead of HWND\n- Modified CResizer::AddChild\t\tnow takes a CWnd reference\n- Modified CWnd::Create \t\t\tnow takes a CWnd pointer instead of HWND\n- Modified CWnd::CreateEx       \tnow takes a CWnd pointer instead of HWND\n- Moved CWnd::LoadBitmap to LoadBitmap\n- Removed CDC::AttachClipRgn\n- Removed CDC::DetachClipRgn\n- Removed CMDIChild::SetChildMenu\n- Renamed CDocker::GetDockWidth to CDocker::GetDockSize\n- Renamed CDocker::SetDockWidth to CDocker::SetDockSize\n- Renamed CDC::AttachClipRegion to CDC::AttachClipRgn\n- Renamed CDC::DetachClipRegion to CDC::DetachClipRgn\n- Replaced CharToWide  with A2W\n- Replaced CharToTChar with A2T\n- Replaced TCharToChar with T2A\n- Replaced TCharToWide with T2W\n- Replaced WideToChar  with W2A\n- Replaced WideToTChar with W2T\n- Replaced CWnd::LoadString with CLoadString (and ::LoadString)\n- Added several functions to CPoint\n- Added several functions to CSize\n- Added many functions to CRect \n  \nThe problem with the previous the text functions\n------------------------------------------------\nWhile the previous text conversion functions generally worked well, there were\nambiguities about usage, and corner cases where they produced undesirable \nresults. For example:\n// Problem 1\n// This worked well\n   ExampleFunction(CharToTChar(pAnsi1));\n\n// But this failed to produce expected results\n   ExampleFunction(CharToTChar(pAnsi1), CharToTChar(pAnsi2));\n\nProblem 2\n// This worked as expected\n   LPCTSTR pStr = CharToTChar(pAnsi1);\n\n// But this fails to work as expected\n   LPCTSTR pStr1 = CharToTChar(pAnsi1);\n   LPCTSTR pStr2 = CharToTChar(pAnsi2);\n\nThe new text conversion functions (classes) resolve problem 1 and render all of\nproblem 2's usage invalid (making usage less ambiguous).   \n\nRefer to the \"Text Conversions\" topic in the \"Using Win32++\" section of the \nhelp documentation that ships with Win32++ for information on how to use the\nnew functions. \n\nIncompatibilities with previous versions\n----------------------------------------\n* The old text conversion functions have been replaced with a set of new functions\n   which look and behave more like the functions used in MFC, ATL and WTL.\n* Windows, dialogs and property sheets now use a CWnd pointer instead of a HWND\n   to specify the parent window.\n* CTab defaults to not using the CS_FIXEDWIDTH and TCS_OWNERDRAWFIXED styles. \n   The SetFixedWidth and SetOwnerDraw functions can be used to change these\n   styles.\n* Users of Borland's C++ compiler version 5.5 will need to install the \n   compiler's service pack 2 for stringsteam support.\n* MDI Children use SetHandles instead of SetChildMenu to set the menu. SetHandles\n   also sets the MDI child's accelerator table (if any).\n* LoadString now returns a tString instead of a LPCTSTR.   \n\nVersion 7.0.2\n=============\n* Fix for a memory leak in CDC\n* Fix for accelerators in WinCE\n* Fix for menu check marks when themes are disabled\n* Fix for OnMessageReflect in dialogs\n\nVersion 7.0.1\n=============\n* Supports the latest version of MinGW compiler\n* DialogProc now returns INT_PTR instead of BOOL\n* Fixed several x64 warnings\n* Fixed DragAcceptFiles error when WIN32_LEAN_AND_MEAN is defined\n* Added OnPaint to CDialog and CPropertyPage\n* Minor update to the documentation\n* Added targetver.h to samples\n* Supports VS2010's resource editor\n\nIncompatibilities with previous versions\n----------------------------------------\nDialogProc now returns INT_PTR instead of BOOL. This change will be required\nin user code as well.\n\n\nVersion 7.0\n===========\n\nNew Features and Enhancements\n-----------------------------\n* The following function now return CWnd* instead of HWND:\n   GetActiveWindow, GetAncestor, GetCapture, GetFocus, GetDlgItem, GetWindow,\n   GetLastAtivePopup, GetParent, GetTopWindow, SetActiveWindow, SetCapture, \n   SetFocus, and SetParent.  This helps the framework to be more object\n   orientated, by allowing the programmer to work more directly with CWnds.\n   It also reduces the need to convert between CWnds and HWNDs in user code.\n   If a CWnd object for the HWND doesn't already exist, Win32++ creates a \n   temporary CWnd. The pointers returned by these functions should not be\n   stored and used later, as they might not be valid then.\n* Added CThread class to simplify the task of using threads and creating\n   windows in different threads. CThread can be used for both worker threads\n   and GUI threads. Refer to the Thread and DirectX samples for examples of \n   how to use CThread to create windows in a different thread. The DirectX\n   sample also uses a customized message loop for the thread.   \n* Added the following control wrappers: CAnimation, CComboBox, CComboBoxEx,\n   CProgressBar, CScrollBar, CSlider, and CSpinButton.\n* Renamed CToolbar to CToolBar, CStatusbar to CStatusBar, CRebar to CReBar\n   and CMenubar to CMenuBar. This matches the MFC names, and is also more \n   consistent with Win32++'s naming conventions.   \n* Added support for re-sizable dialogs. The CResizer class has been added\n   to dialog.h to facilitate dialog resizing. Refer to the forms sample for\n   an example of how to put CResizer to use.\n* Added IPv6 support to CSocket. The network samples have been updated to\n   take advantage of IPv6 support. IP version 6 is supported on Vista \n   operating systems and newer.\n* Added Shared_Ptr class. Note that a \"shared_ptr\" will be available for the\n   updated C++ standard. It is already available with some modern compilers,\n   and also for users of the Boost library. The \"Shared_Ptr\" class is intended\n   as an alternative for those users who would like to use a \"shared_ptr\", but\n   don't have access to one yet. Unlike auto-ptr's, shared_ptr's can be used\n   to safely store pointers in vectors and other STL containers.\n* Extended the CToolbar class.\n* Added the GDIPlus sample to demonstrate how to use the GDIPlus library \n   provided with modern Windows operating systems (XP and above).\n* Win32++ can now be run from inside a DLL. The \"DLL\" sample demonstrates how to\n   put a Win32++ dialog in a dll, and run it from a test program.  \n* Dialogs and Property Sheets now use DWLP_MSGRESULT to automatically handle the \n   value returned by notifications in their message handling. This allows a \n   dialog's controls to use custom draw.\n* Improved the appearance of frames without themes. The frame sample demonstrates\n   how override CMainFrame::OnCreate to customize the frame's appearance.\n* Asserts are used more liberally to test for programming errors. Any message\n   sent to a non-existent window, for example, will now assert. More asserts \n   are intended to help users write code that is more robust. Note that asserts\n   are only evaluated in Debug mode, and have no effect in Release mode.\n* Exceptions are thrown less often. They are now thrown to indicate a critical\n   problem, outside the programmer's control. Throwing fewer exceptions results \n   in slightly smaller executables, and gives users more flexibility and \n   control over their own exception methodology. They are thrown when:\n   - a window creation fails.\n   - a critical dll cannot be loaded.\n   - a window message cannot be routed to a CWnd object.\n   - an attempt to read from or write to the registry fails unexpectedly.\n* Vectors are now used as a replacement for all dynamically allocated arrays, \n   ensuring the arrays are automatically deleted when they go out of scope.\n   Creating an array with \"new\" runs the risk of causing a memory leak,\n   particularly when an exception is thrown. Using a vector to create the\n   array guarantees that it will be deleted properly under all circumstances.\n* The OnPaint function now uses a CDC reference as its argument instead of a \n   HDC. This simplifies the task of using a CDC when overriding OnPaint.\n* Extended the help documentation.   \n\nChanges in detail\n-----------------\nAdded CAnimation\nAdded CComboBox  \nAdded CComboBoxEx\nAdded CProgressBar \nAdded CResizer \nAdded CScrollBar \nAdded CSlider \nAdded CSpinButton\nAdded Shared_Ptr\nAdded CThread \nUpdated CSocket to support IPv6\nAdded CMDIChild::MDIActivate\nAdded CMDIChild::MDIDestroy\nAdded CMDIChild::MDIMaximize\nAdded CMDIChild::Restore\nAdded CPropertySheet::SetIcon\nAdded CPropertyPage::SetWizardButtons\nAdded CPropertyPage::QuerySiblings\nAdded CRebar::SizeToRect\nAdded CSocket::IsIPV6Supported\nAdded CSocket::FreeAddrInfo\nAdded CSocket::GetAddrInfo\nAdded CSocket::GetLastError\nAdded CTabbedMDI::SetActiveMDITab\nAdded CToolBar::AddButtons\nAdded CToolBar::AddString\nAdded CToolBar::AutoSize\nAdded CToolBar::CheckButton \nAdded CToolBar::DeleteButton   \nAdded CToolBar::GetButton\nAdded CToolBar::GetButtonSize\nAdded CToolBar::GetButtonText\nAdded CToolBar::GetDisabledImageList\nAdded CToolBar::GetHotItem\nAdded CToolBar::GetImageList\nAdded CToolBar::GetPadding\nAdded CToolBar::GetRect\nAdded CToolBar::GetRows\nAdded CToolBar::GetTextRows\nAdded CToolBar::GetToolTips\nAdded CToolBar::HideButton\nAdded CToolBar::Indeterminate\nAdded CToolBar::InsertButton\nAdded CToolBar::IsButtonHidden\nAdded CToolBar::IsButtonHighlighted\nAdded CToolBar::IsButtonIndeterminate\nAdded CToolBar::IsButtonPressed\nAdded CToolBar::MapAccelerator\nAdded CToolBar::MarkButton\nAdded CToolBar::MoveButton\nAdded CToolBar::PressButton\nAdded CToolBar::SaveRestore\nAdded CToolBar::SetDisabledImageList\nAdded CToolBar::SetDrawTextFlags\nAdded CToolBar::SetExtendedStyle\nAdded CToolBar::SetHotImageList\nAdded CToolBar::SetHotItem\nAdded CToolBar::SetImageList\nAdded CToolBar::SetIndent\nAdded CToolBar::SetMaxTextRows\nAdded CToolBar::SetPadding\nAdded CToolBar::SetToolTips\nAdded CWinException::what\nAdded CWnd::DragAcceptFiles\nAdded CWnd::GetActiveWindow\nAdded CWnd::GetCapture\nAdded CWnd::GetFocus\nAdded CWnd::GetFont\nAdded CWnd::GetIcon\nAdded CWnd::GetLastActivePopup\nAdded CWnd::GetTopWindow\nAdded CWnd::GetWindowTextLength\nAdded CWnd::OpenIcon\nAdded CWnd::SetFont\nAdded CWnd::SetIcon\nAdded CWnd::SetWindowTheme\nAdded CWnd::ShowOwnedPopups\nAdded CWnd::ShowWindowAsync\nAdded CWnd::WindowFromDC\nAdded ::IsAeroThemed\nModified CPropertyPage::Apply\t\t\tnow returns int\nModified CPropertyPage::OnKillActive\tnow returns BOOL\nModified CPropertyPage::OnOK\t\t\tnow returns int\nModified CPropertyPage::OnSetActive\t\tnow returns int\nModified CPropertyPage::OnWizardBack \tnow returns int\nModified CPropertyPage::OnFinish\t\tnow returns BOOL\nModified CPropertyPage::OnWizardBack \tnow returns int\nModified CPropertyPage::OnWizardFinish\tnow returns BOOL\nModified CPropertyPage::OnWizardNext\tnow returns int\nModified CSocket::Bind          \tnow uses TCHAR instead of char\nModified CSocket::Connect       \tnow uses TCHAR instead of char\nModified CSocket::Receive       \tnow uses TCHAR instead of char\nModified CSocket::ReceiveFrom   \tnow uses TCHAR instead of char\nModified CSocket::Send          \tnow uses TCHAR instead of char\nModified CSocket::SentTo        \tnow uses TCHAR instead of char\nModified CWinException::what  \t\tnow outputs text to debugger\nModified CWnd::OnPaint              now takes a CDC& argument instead of HDC\nRenamed CMenubar to CMenuBar\nRenamed CRebar to CReBar\nRenamed CStatusbar to CStatusBar\nRenamed CToolbar to CToolBar\nRenamed RebarTheme to ReBarTheme\nRenamed ToolbarTheme to ToolBarTheme\nRenamed CToolBar::AddToolbarButton to CToolBar::AddButton\nMoved CWnd::CharToTChar to ::CharToTChar\nMoved CWnd::CharToWide  to ::CharToWide\nMoved CWnd::TCharToChar to ::TCharToChar\nMoved CWnd::TCharToWide to ::TCharToWide\nMoved CWnd::WideToChar  to ::WideToChar\nMoved CWnd::WideToTChar to ::WideToTChar\nRemoved CWinException::MessageBox\nRemoved CPropertySheet::QuerySiblings\n\nAdded DS_NO_CLOSE style to suppress the closing of docked dockers\nAdded DS_FIXED_RESIZE style to perform a fixed (not proportional) resize\n                       on dock children\nAdded WM_PAINT handler to CDialog::DialogProcDefault\nAdded WM_PAINT handler to CPropertyPage::DialogProcDefault\n\nAdded GDIPlus sample\nUpdated Network samples\nUpdated FormDemo sample\n\nIncompatibilities with previous versions\n----------------------------------------\n* The OnPaint function definition has changed to:\n    virtual void OnPaint(CDC& dc); \n  The older OnPaint function will be ignored.\t\n* The stricter testing with asserts might reveal previously hidden errors in \n   user's code.\n* Some CSocket functions take TCHAR as an argument instead of char.\n* CFrame::LoadRegistrySettings, CFrame::LoadRegistryMRUSettings and \n   CFrame::SaveRegistrySettings return BOOL.\n* CPropertySheet.m_PSH is now private. Use SetIcon to set the icon.\n* CPropertyPage change the return types of several functions.\n* Replace all instances of \"Menubar\" with \"MenuBar\"\n* Replace all instances of \"Rebar\" with \"ReBar\"\n* Replace all instances of \"Statusbar\" with \"StatusBar\"\n* Replace all instances of \"Toolbar\" with \"ToolBar\"\n* The following functions now return a CWnd pointer instead of a HWND:\n   GetActiveWindow, GetAncestor, GetCapture, GetFocus, GetDlgItem, GetWindow,\n   GetLastAtivePopup, GetParent, GetTopWindow, SetActiveWindow, SetCapture, \n   SetFocus, and SetParent.\n   \n\nVersion 6.9\n===========\n\nNew Features and Enhancements\n-----------------------------\n* Added a WebBrowser class called CWebBrowser.  This class provides a web \n   browser in a window. This class can be used as a view window anywhere \n   view windows are used, such as in frames, dockers, MDI Children, \n   Tabbed MDIs etc.  It has no dependence on ATL, greatly simplifying the \n   approach to adding a browser window to any application.  It can be compiled\n   by any of the supported compilers including Dev-C++, MinGW and the Borland \n   compilers as well as the compilers from Microsoft.  \n* Added an ActiveX host class called CAXWindow.\n* The CTab, CMDITab, CDocker and CDockContainer classes are now flicker free,\n   providing a more professional look during resizing and docker moving.\n* Improved the dock targeting and dock hinting.   \n* Introduced a new set of text conversion functions to convert between Ansi, \n   Unicode and Wide characters.\n* CWnd objects can now report their type with GetWindowType.\n* Modified the Browser sample to use the new CWebBrowser class. It also \n   demonstrates how to use an event sink to get notification of browser events.\n* Added a Tray sample which demonstrates how to create an application \n   which can be minimised to the system tray, and restored.\n* The visual editor that ships with VS2008 and VS2010 can now be used to\n   modify the resource files (Resource.rc and resource.h) without mangling them.   \n\nChanges in detail\n-----------------\nAdded CAXWindow\nAdded CWebBrowser\nAdded CWnd::CharToWide\nAdded CWnd::WideToChar\nAdded CWnd::TCharToWide\nAdded CWnd::WideToTChar\nAdded CWnd::CharToTChar\nAdded CWnd::TCharToChar\nAdded CWnd::GetClassName\nAdded CWnd::GetDlgItemText\nAdded CWnd::GetWindowText\nAdded CWnd::GetWindowType\nAdded CWnd::KillTimer\nAdded CWnd::SetTimer\nAdded GetSizeofMenuItemInfo\nRemoved CharToTString\nRemoved TCharToString\nRemoved TCharToWide\nRemoved CWnd::GetWindowString\nRemoved CWnd::GetClassString\nRemoved CWnd::GetDlgItemString\nRemoved CWnd::IsContainer\nRemoved CWnd::IsDocker\nRemoved CWnd::IsFrame\nRemoved CWnd::IsMenubar\nRemoved CWnd::IsMDIChild\nRemoved CWnd::IsMDIFrame\nRemoved CWnd::IsRebar\nRemoved CWnd::IsStatusbar\nRemoved CWnd::IsTab\nRemoved CWnd::IsTabbedMDI\nRemoved CWnd::IsToolbar\nRenamed CContainer to CDockContainer\n\nModified Browser Sample\nAdded MDIFrameSplitter demo\nAdded Tray demo\n\n\nIncompatibilities with previous versions\n----------------------------------------\n* CContainer has been renamed to CDockContainer\n* The global string functions CharToTString, TCharToString and TCharToWide have\n   been replaced with CWnd::CharToWide, CWnd::WideToChar, CWnd::TCharToWide,\n   CWnd::WideToTChar, CWnd::CharToTChar and CWnd::TCharToChar.\n\n\nVersion 6.8\n===========\n\nNew Features\n------------\n* Support has been added for the Windows Ribbon Framework available on \n   Windows 7 operating systems. The RibbonFrame and RibbonSimple samples \n   demonstrates how to implement the ribbon. RibbonFrame reverts back to \n   using the traditional Toolbar and Menubar if the operating system doesn't\n   support the ribbon framework.\n   \n* Helper classes have been added for the standard controls, namely the Button,\n   Edit, Listbox, and Static controls.\n   \n* Dockers can now be hidden and unhidden. Refer to the Splitter sample for a\n   demonstration of this feature.\n   \n* Modal dialogs now support pretranslated messages.          \n\n\nChanges\n-------\nAdded CButton class\nAdded CEdit class\nAdded CListBox class\nAdded CRibbon class\nAdded CRibbonFrame class\nAdded CStatic class\nRemoved CSplitter class\n\nAdded CDocker::Dock\nAdded CDocker::DockInContainer\nAdded CDocker::Hide\nAdded CDocker::Undock\nAdded CDocker::UndockContainer\nAdded CFrame::GetRebarTheme\nAdded CFrame::GetToolbarTheme\nAdded CFrame::GetMRUEntries\nRenamed ThemeMenu to MenuTheme\nRenamed ThemeRebar to RebarTheme\nRenamed ThemeToolbar to ToolbarTheme\nRenamed CFrame::GetThemeMenu to CFrame::GetMenuTheme\n\nAdded UWM_GETMENUTHEME     message\nAdded UWM_GETREBARTHEME    message \nAdded UWM_GETTOOLBARTHEME  message\n\nAdded RibbonFrame sample\nAdded RibbonSimple sample\n\nAdded 'Compile VS2005 Express'  tool\nAdded 'Compile VS2008 Express'  tool\nAdded 'Compile VS2010 Express'  tool\n\nAdded PreTranslate Message support for modal dialogs\n\nBug Fixes\n---------\n- Fixed TCharToString\n- Dockers can now be used as the view for CMDIChild\n\nVersion 6.7\n===========\nBug fixes:\n- Fixed dialog destruction              \n- Fixed thread safety when creating multi-threaded windows simultaneously\n- Fixed TintBitmap for 16 bit colours\n- The close button on docked dockers now works.\n- Fixed PreTranslateMessage \n\nChanges\n-------\n* The directory layout of Win32++ has changed. It now contains the following\n  folders:\n   help             The help for Win32++\n   include          The Win32++ library for typical use\n   lib              The static library files when they are build\n   Library Projects The project files used to build the static library\n   new projects     A set of projects to be used in your new projects \n   src              The Win32++ library for building the static library\n   tests            A directory which contains the output of some tools\n   tools            A set of useful batch files for Win32++ \n\n* The Win32++ include directory is specified within the project rather than\n   hard coded into the source files. To specify a different location for the\n   Win32++ files in a project, specify the \"Additional Include Directories\" for\n   both \"C/C++\" and \"Resources\". \n\n* The projects now provide the option of compiling with a static library or\n   directly from the file in Win32++\\include. To build the static libraries,\n   see below. \n   \n* A set of projects have been supplied to build the Win32++ into a static \n   library. These projects are contained within the Win32++\\Library Projects \n   folder. The lib file created is placed within the lib directory.\n\n* The projects are now configured to take advantage of precompiled headers.\n   \n* A set of tools is now provided in the tools folder. They include a set of \n   batch files for compiling the examples and batch files to \"clean\" them.\n     \n* The CDC class has been extended. Several functions have been added, and\n  CDC::GetDC has been renamed to CDC::GetHDC.\n             \n* Support has been added for Right to Left languages which include Hebrew and \n   Arabic. The CFrame and CDocker classes now honour the WS_EX_LAYOUTRTL \n   extended style used by these languages. To take advantage of this feature,\n   use PreCreate to set this extended when using CFrame, CMDIFrame, CTab, \n   CTabbedMDI, and CDocker.\n   \n* OnInitialUpdate is now called after Attach or AttachDlgItem.\n\n* IsChild now takes a HWND argument.\n \n* Win32++ is now available as a single download, rather than a collection of\n   files.\n\n* Each program example now has a Readme.txt file which describes what it does,\n   and the features it demonstrates.   \n\n\nVersion 6.6\n===========\nChanges\n-------\n* The number of arguments have changed for WndProc and WndProcDefault.\n  - The HWND parameter has been dropped in both of these functions. It's\n    presence was redundant and possibly confusing. Users will need to modify\n    their WndProc and WndProc functions accordingly. If needed, the m_hWnd \n    member variable can be used in place of hwnd within the WndProc function.\n* The number of arguments have changed for DialogProc and DialogProcDefault.\n  - The HWND parameter has been dropped in both of these functions. It's\n    presence was redundant and possibly confusing. Users will need to modify\n    their WndProc and WndProc functions accordingly. If needed, the m_hWnd \n    member variable can be used in place of hwnd in the WndProc function.  \n* Enhancements to docking, containers and tabs.\n  - By default the dockers are immediately resized while the splitter bar is \n     being dragged. To defer resizing until the splitter bar is released, use\n     SetDragAutoResize(FALSE).\n  - The close and list buttons now indicate when they are hot and pressed.\n  - Added SetTabText, SetTabImage and SwapTabs to the CTab class.\n  - Minor improvements to the painting of tabs, containers and dockers.\n* Enhancements to GDI graphics support.\n  - The CDC class has been extended. It now includes wrapper functions for \n     the Device Context related functions.\n  - Added the CBitmapInfoPtr class. This simplifies the use of the BITMAPINFO\n     structure in functions like GetDIBits and SetDIBits.\n  - Added GrayScaleBitmap function to gdi.h. It converts a colored bitmap to\n     to gray-scale.     \n* Automated menu updating.\n  - When a menu is about to be displayed, OnUpdateMenu is called to provide\n     an opportunity to modify the check state of the menu items.\n* Enhancements to frames\n  - The style of the rebarband is now specified in AddToolbarBand. This \n     facilities saving and restoring toolbar settings from the registry (as \n     demonstrated in the Themes example.)  \n  - The Frame's ShowToolbar and ShowStatusbar states are now saved in the\n     registry.\n* Modification to CRect class\n  - The various function now use references instead of naked pointers.    \n* Updated the Themes example.\n  - Added check boxes for the various rebar theme option\n  - Added Hide/Show option for the additional toolbars\n  - Save/Load the theme options in the registry\n  - Save/Load the rebar band positions and styles in the registry\n* Replaced the Form example with the DocViewForm example.\n  - This example now demonstrates a form using a Doc/View architecture, much\n     like the traditional Doc/View of MFC. \n  - Added OnUpdateMenu handling. \n* Updated the FastGDI example.\n  - Added gray-scale transformation\n  - Added file save.\n  - Added Scroll bars.\n* Updated the picture example.\n  - Added Scroll bars.  \n* Updated the DockContainer and DockTabbedMDI examples    \n  - These examples now demonstrate how to theme a container's toolbar.   \n   \n      \nIncompatibilities with previous versions\n----------------------------------------\n- WndProc now takes 3 arguments, not 4:\n   WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n- WndProcDefault now takes 3 arguments, not 4:\n   WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);\n- DialogProc now takes 3 arguements, not 4:\n   DialogProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n- DialogProcDefault now takes 3 arguements, not 4:\n   DialogProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);\n- CFrame::AddToolbarBand now requires three arguements\n- The various CRect functions use references to RECT rather than pointers\n- CWnd::IsVisable has been renamed to CWnd::IsWindowVisible\n- CWnd::IsEnabled has been renamed to CWnd::IsWindowEnabled\n\nVersion 6.5\n===========\nMajor Changes\n-------------\n* Added StaticLibrary example\n   This example has the code to build Win32++ into a a static library, and also\n   demonstrates the use of Precompiled Headers. More experienced users might\n   prefer this approach as it provides for much faster compile times.\n* Added CTab class. \n   This class is used by CContainer and CTabbedMDI, and can also be used as a\n   view window.\n* Added TabDemo example.\n   Refer to the TabDemo example for a demonstration of how CTab class is\n   used as a view window in a frame. TabDialogDemo also uses CTab. \n* Added CTabbedMDI class.\n   A TabbedMDI can be used as a view window for a Frame or a Dockable. As the \n   name suggests, it provides tabs for a MDI window. \n* Added TabbedMDI example within docking.\n   Refer to the docking TabbedMDI example for a demonstration of how CTabbedMDI\n   class is used.   \n* Enhancements to docking.\n   - Dockers can now be docked into, and undocked from all other dockers, \n     including those that are undocked. \n   - Containers can also be docked into and undocked all from containers,\n      including those that are undocked.\n   - Containers can display their tabs at the top or bottom of the window.\n   - Containers can also display a tab list button.\n   - Docker and container objects are destroyed when their window is closed.\n   - CContainer::SetupToolbar can be used to specify the toolbar's resource IDs.\n   - Dockers and containers can save their layout in and load their layout from\n      the registry.     \n* Improvements to toolbars\n   - Resource IDs should be specified in SetupToolbar, rather than CMainFrame's\n      constructor.\n   - Other configurations for the toolbar such as disabled buttons and alternate\n      bitmaps should be specified in SetupToolbar, rather than in OnCreate.\n   - Configuration of additional toolbars if any should also be done in\n      SetupToolbar.  Refer to the Themes example for a demonstration of this.\n   - CToolbar now holds the vector of Resource IDs, which can be retrieved\n      with the GetToolbarData function. There is no need to specify a vector\n      when adding additional toolbars.\n   - There is now no need to specify the number of toolbar buttons in the\n      AddBitmap, ReplaceBitmap, SetBitmap and SetImages functions.\n   - The AddToolbarButton can now add a toolbar button which is initially\n      disabled.\n   - There is no need to call SetButtons when adding additional toolbars.\n   - Tooltips for all toolbars in the rebar are now displayed.      \n* MIN and MAX macros have been defined and can be used in place of min and max.\n   This avoids incompatibilities between the way different compliers support\n   these macros. It also avoids clashes between the macro definitions of \n   min and max, and the STL definitions of min and max.\n   \nAll Changes\n-----------\nAdded CTab class\nAdded CTabbedMDI class\nAdded TabDemo example\nAdded Docking TabbedMDI example\nAdded CFrame::SetupToolbar\nAdded CFrame::m_bUseToolbar\nAdded CContainer::SetupToolbar\nAdded CDocker::GetDockTopLevel\nAdded CDocker::GetContainer\nAdded CDocker::GetTabbedMDI\nAdded CDocker::IsRelated\nAdded CDocker::LoadRegistrySettings\nAdded CDocker::NewDockerFromID\nAdded CDocker::SaveRegistrySettings\nAdded CToolbar::GetToolbarData\nAdded CWnd::GetClassString\nAdded CWnd::IsFrame\nAdded CWnd::IsMenubar\nAdded CWnd::IsRebar\nAdded CWnd::IsTabbedMDI\nAdded CWnd::IsToolbar\nChanged CFrame::SetToolbarImages\nChanged CToolbar::SetImages\nChanged CToolbar::SetBitmap\nChanged CToolbar::AddBitmap\nChanged CToolbar::ReplaceBitmap\nRenamed CDockable to CDocker\nRenamed CDocker::CheckDockables       to CDocker::VerifyDockers\nRenamed CFrame::OnFrameDrawItem       to CFrame::OnDrawItem\nRenamed CFrame::OnFrameExitMenuLoop   to CFrame::OnExitMenuLoop\nRenamed CFrame::OnFrameInitMenuPopup  to CFrame::OnInitMenuPopup\nRenamed CFrame::OnFrameMeasureItem    to CFrame::OnMeasureItem\nRenamed CFrame::OnFrameClose          to CFrame::OnClose\nRenamed CFrame::OnFrameNotify         to CFrame::OnNotify\nRenamed CFrame::OnFrameSetFocus       to CFrame::OnSetFocus\nRenamed CFrame::OnFrameSysColorChange to CFrame::OnSysColorChange\nRenamed CFrame::OnFrameTimer          to CFrame::OnTimer\nRemoved\tOnFrameCommand\n\nIncompatiblities with previous versions\n---------------------------------------\n- Many of the functions associated with adding toolbars to frames have changed.\n  CFrame::SetupToolbar should be overridden to perform toolbar configuration.\n  Refer to the Themes example for a demonstration of how to add multiple toolbars\n  to a frame.\n- The renaming of the CFrame::OnXXXX may affect overloading. Calling the base\n  function may now be required particularly for CFrame::OnNotify.\n- The OnCommand handlers for OnViewStatusbar and OnViewToolbar have been removed\n  from CFrame, and should be added to CMainFrame::OnCommand if required.\n- CDocker has been renamed to CDocker\n- dockable.h has been renamed to docking.h      \n   \nVersion 6.4.1\n=============\nThis release has the following bug fixes:\n- Assertions in CContainer reported by VS2005(express) and VS2008(express)\n- Definition of OPENFILENAME_SIZE_VERSION_400 added for VS6 \n\nVersion 6.4\n===========\n\nMajor Changes\n------------\n* Docking:\n  - Added tabbed docking container with optional toolbar\n  - Added close button to the caption of docked windows\n  - Added 'outer' docking  ie. docking at the side of the frame rather \n      than inside another Docker.\n  - Added a second docking example demonstrating containers\n  - Added save/restore dock layout to docking examples\n  - Added Close All Dockables and Default Dock Layout to docking examples\n  - Added Win98 and WinME support for docking. \n* Added Region support to CDC class.\n* Notepad example enhancements:\n  - Now capable of handling Unicode text\n* Themes example now demonstrates a ComboBoxEx control in its toolbar  \n \n\nFixes\n-----\nVarious fixes to docking, including:\n - Fixed Z order of undocked windows\n - Fixed focus for child windows\n - Improved undocking\n - Reduced flicker\n - Better sizing of docked windows\n \nIncompatibilities with previous versions\n----------------------------------------\n* CWnd::m_hWndParent has been removed. Use GetParent() in its place.\n* Some functions have been added to CWnd which have the same name as their \n   Win32 counterparts. Prefix functions with the global scope specifier '::' \n   to use the original Win32 API function instead of the Win32++ version.\n* CSplitter has been superseded by CDocker. Use a CDocker with the\n   DS_NO_UNDOCK and DS_NO_CAPTION styles to duplicate the behaviour of \n   CSplitter. CSplitter will be retained for backwards compatibility, as\n   well as for those who require its 'immediate' mode.\n   \nMore About Docking Containers\n-----------------------------\nA container can be used is a view window for a frame, MDI child, dockable etc.\nIt has a tab control, and is capable of containing and displaying other\ncontainers. Each container will in turn have a view window of its own. The view \nfor each container as well as it's toolbar (if any) is displayed in the tab's \npage. When used as the view window of a dockable, the container also permits\n docking and undocking of it's containers.  \n\nIn Summary:\n* Any CWnd object inherited from CContainer is capable of containing other CWnd\n   objects inherrited from CContainer. There is no theoretical limit as to the\n   number of containers that can be contained.\n* A child container (a container contained within another) can not in turn\n   contain other containers.   \n* Containers have a View window, just like Frames, MDI children and dockables.\n* Containers can set an icon and text for the tab, as well as text for the \n   docking caption.\n* Containers can optionally include a toolbar.\n* When a container contains other containers, each container's view is displayed\n   in a separate tab.\n* When a container is the view  window for a dockable, any container children\n   can be individually undocked from their parent container.\n* When used a the view for a docker, a container with child containers can be\n   undocked as a group.\n* An undocked container group (container with children) can be docked as a\n   group inside another docked container. \n\n\nVersion 6.3\n===========\n\nMajor Changes\n-------------\n* Added support for docking. See below for more information on Docking  \n   - Note: CDocker is now recommended over CSplitter for splitter apps.     \n* Added the Fast GDI demo. This demonstrates the use of the TintBitmap function.\n* MDI child windows now require a view window. The use of a view window is \n   now the same for Frames, MDI children, and dockables. The MDI demo example\n   has been extended to include ListView and TreeView views.\n* Added message translation. This allows modeless dialogs and propertysheets\n    to process the tab (and other) keys.\n* Added a CWnd::Destroy function. This returns a CWnd back to its default\n    state ready to be reused.\n* SetView can now be used to change the frame's view from one CWnd to \n    another.\n* The Frame now stores which child window had focus before it is de-activated,\n    and returns focus to this child when the frame application is reactivated.    \n    \n    \nFixes\n-----    \n* CFrame now supports Extra Large fonts in the menu and status bar. Also, font\n    size can be changed while the application is running.\n* 16Bit colours (and grey-scale) are now rendered properly\n* Tabbing now works for modeless dialogs and property sheets\n   (uses PreTranslateMessage).            \n\n\nIncompatibilities with previous versions\n----------------------------------------\n* MDI Child windows now require a view. Refer to the MDI Demo example for an\n   example of how to add views to a MDI child.\n* Some functions have been added to CWnd which have the same name as their \n   Win32 counterparts. Prefix functions with the global scope specifier '::' \n   to use the original Win32 API function instead of the Win32++ version.\n\n\nMore About Docking\n------------------\n* Any CWnd object inherited from CDocker is capable of docking other CWnd\n    objects inherrited from CDocker.\n* Dockables can be docked in any of the 4 sides. Any number of windows can be \n   docked on a side.\n* A dockable could be docked inside another dockable which in turn is docked\n   inside another. There is no theoretical limit as to depth of dockables \n   within dockables.\n* Dockables have a View window, just like the Frame, and MDI children.\n* Dockables are separated by a movable splitter bar.\n* Dockables use a modern style of dock targeting and dock hinting (the same\n    as Visual Studio 2005 and 2008).\n* Dockables can have styles including:\n  - DS_NOTDOCKED\t\t\t   \n  - DS_DOCKED_LEFT\t   \n  - DS_DOCKED_RIGHT   \n  - DS_DOCKED_TOP\t\t   \n  - DS_DOCKED_BOTTOM  \n  - DS_NODOCKCHILD_LEFT\t \t\n  - DS_NODOCKCHILD_RIGHT\t \t\n  - DS_NODOCKCHILD_TOP\t \n  - DS_NODOCKCHILD_BOTTOM\t \t\n  - DS_NO_RESIZE\t\t\t\t \n  - DS_NO_CAPTION\t\t \n  - DS_NO_UNDOCK\n* CDocker is now the recommended alternative to CSplitter (being much simpler\n    to implement - see the example below). The DS_NO_CAPTION and DS_NO_UNDOCK\n    styles should be specified if docking and undocking are not required.\n\nExample of how to dock 8 dockables inside a dockable view:\n----------------------------------------------------------\nvoid CMainFrame::OnInitialUpdate()\n{\n    // CTextDockable in inherited from CDocker\n\tCDocker* pDockLeft   = m_DockView.AddDockedChild(new CTextDockable, DS_DOCKED_LEFT, 100);\n\tCDocker* pDockRight  = m_DockView.AddDockedChild(new CTextDockable, DS_DOCKED_RIGHT, 100);\n\tCDocker* pDockTop    = m_DockView.AddDockedChild(new CTextDockable, DS_DOCKED_TOP, 100);\n\tCDocker* pDockBottom = m_DockView.AddDockedChild(new CTextDockable, DS_DOCKED_BOTTOM, 100);\n\n\t// Dock 4 dockables inside other dockables\n    pDockLeft->AddDockedChild(new CTextDockable, DS_DOCKED_BOTTOM, 100);\n\tpDockRight->AddDockedChild(new CTextDockable, DS_DOCKED_BOTTOM, 100);\n\tpDockTop->AddDockedChild(new CTextDockable, DS_DOCKED_RIGHT, 100);\n\tpDockBottom->AddDockedChild(new CTextDockable, DS_DOCKED_RIGHT, 100);\n}      \t\t\t   \n\n(Refer to the Docking example for an example of to use CDocker.)    \n\n\nVersion 6.2\n===========\n\nChanges\n-------\n* The default colour scheme has been changed from blue to grey. \n  The blue, olive and silver colour schemes continue to be used on Windows XP\n  with themes enabled. \n\nNew Features\n------------\n* Frame applications now store the window size and position in the registry.\nTo enable this, set the m_KeyName member variable in CMainFrame's constructor.\nThis member variable can be used to reflect the company name and application\nname, for example:\n  m_KeyName = _T(\"SomeCompany\\\\SomeApp\");\n  \n* Frame applications now provide a Most Recently Used (MRU) list. This list is \nstored in the registry.\n\n* Extended CWnd\nCWnd now includes functions which wrap many of the Windows API functions that \naffect to windows. \n\n\nVersion 6.1\n===========\n\nNew Features\n------------\n* All Win32++ code has been moved to header files.\nThis simplifies the use of Win32++. To add Win32++ to a project, simply \ninclude the appropriate Win32++ header files in your code. There is no longer\nany need to add the Win32++ files to the project, although doing so may\nstill prove useful under some circumstances. Depending on the compiler/IDE\nused, adding the Win32++ header files to the project may add the various \nWin32++ classes to the class view.\n \n* Added CListView class.\nThis class encapsulates the various messages and macros used by the Win32/64 \nAPI to manage the List-View common control. You can inherit from this class\nwhen creating your own List-View control in a window, or attaching a \nList-View control from a dialog.\n\n* Added CTreeView class.\nThis class encapsulates the various messages and macros used by the Win32/64 \nAPI to manage the Tree-View common control. You can inherit from this class\nwhen creating your own Tree-View control in a window, or attaching a \nTree-View control from a dialog.\n\n* Added CPoint CRect and CSize classes\nThe CPoint, CRect and CSize classes can be used anywhere a POINT, RECT\nor CSize struct can be used respectively. In addition:\n- The constructors ensure that members are set to reasonable values.\n  They also allow a default value to be set when the class is used as a \n  function argument.\n- The classes have additional member functions, including operator==\n  and operator!= .   \n- These classes makes porting code from MFC or WTL a little easier.\n\n* Extended the CRebar, CToolbar and CStatusbar classes.\n\n\nVersion 6.0.2\n=============\n\nNew Features\n------------\n* Added support for x64 applications.\n\nWin32++ can now be used to build 64 bit applications. The manifest file has \nbeen modified to support both 32bit and 64bit applications. The new manifest\nshould be used for any 64 bit applications that use common controls.\n\nUsers are encouraged to use the modern Win64 API functions like:\nGetWindowLongPtr, SetWindowLongPtr, GetClassLongPtr and SetClassLongPtr.\nWin32++ will convert these back to their Win32 API counterparts if required.\n\n\nVersion 6.0.1\n=============\nAdded    CFrame::SetMenuIcons\nAdded    CFrame::SetToolbarImages\nRemoved  CToolbar::SetToolbarImageList\nAdded    CToolbar::SetBitmap\nMoved    CreateDisabledImageList to CFrame::CreateDisabledImageList\nModified CFrame::AddMenuIcons\n\nNew Features:\n------------\n* 32 bit bitmaps are now supported for toolbars (requires XP or Vista)\n* SetMenuIcons and AddMenuIcons now also accept a bitmap for disabled icons\n   in addition to the bitmap for normal icons.\n\n\nVersion 6.0\n===========\n\nNew Features\n------------\n* Win32++ now also directly supports the Windows CE operating systems. \n   Windows CE is the operating system used on such things as Pocket PCs, \n   embedded systems and SmartPhones. The Win32++ examples for Windows CE\n   include the project files for eMbedded Visual C++ 4.0, and Visual \n   Studio 2005.\n   \n* Added Networking support. Win32++ now includes a CSocket class which\n   encapsulates much of the Winsock API. This class is capable of monitoring\n   network events, such as connection requests from clients, and notification\n   that the socket has data ready to be received. Command line and dialog\n   examples are provide to demonstrate how the class can be used to create\n   TCP/IP (and UDP/IP) servers and clients.\n  \n* Added a CDC class. This class simplifies the drawing to device contexts. \n   This class can be used anywhere we would normally use a handle to a \n   device context (HDC). Its features include:\n   - Automates the selection of GDI objects into the device context.\n   - Automates the destruction of GDI objects.\n   - Automates the deletion or release of the device contexts.\n   \n* PreRegisterClass can now be used to set the WNDCLASS parameters before the\n   window class is registered. This provides a convenient way to set a window's \n   background brush or cursor.\n   \n* Improvements to tracing. It now uses OutputDebugString to send the trace\n   output the debug/output pane of the various IDE's. This is now also \n   compatible with debuggers, should you choose to use them. Previously the \n   tracing created a separate window to display text.\n\n* Added an immediate mode to CSplitter. There is now the choice of resizing\n   the panes while the splitter bar is being dragged, or defer the resizing\n   until the splitter bar drag is complete (as before). CSplitter's \n   constructor now requires no arguments, making the class simpler to use.\n   \n* Automatically detects the XP theme used (Default, Silver or Olive), and\n   adjusts the theme colors accordingly.\n   \n* Added project files for Borland's Turbo C++ 2006. This is a free compiler\n   available from Borland. It can be downloaded here: \n   http://www.codegear.com/downloads/free/turbo\n\n* Enhanced the tutorial. It now also demonstrates file operations and printing.\n\n  \nVersion 5.6\n===========\n* Property Sheets are now supported. The files PropertySheet.cpp and \n   PropertySheet.h have been added to Win32++. These files define\n   the CPropertySheet and CPropertyPage classes. The Property sheet generic \n   demonstrates the following:\n  - Modal property sheets.\n  - Modeless property sheets.\n  - Wizards.    \n\n\nVersion 5.5\n===========\n* Added Menubar theme support\n  - Gradient background for hot buttons (any two colors)\n  - Gradient background for pressed buttons (any two colors)\n  - Gradient Sidebar for menu items based on pressed button colors.\n  - A border color for Menubar buttons and selected menu items\n\n\nVersion 5.4\n===========\n* Added Rebar themes, including:\n  - Gradient background for the rebar control (any two colors)\n  - Gradient background for the rebar bands (any two colors)\n  - The Menubar can be locked in place.\n  - The bands can be kept left.\n  - Short bands\n  - Bands can have rounded borders\n  - Bands with rounded borders can have a flat style\n* Added Toolbar themes, including:\n  - Gradient background for hot buttons (any two colors)\n  - Gradient background for pressed buttons (any two colors)\n  - Colored outline for hot and pressed buttons (any color)\n* Built in support for multiple toolbars (in rebars) with AddToolbarBand\n* Added Forms example\n* Added Themes example\n\n\nVersion 5.3\n===========\n* Owner drawn drop down menu items with icons.  CMenubar::SetIcons is\n   used to determine which menu items display an icon. By default, the\n   framework uses the toolbar's bitmap and resource IDs for displaying \n   icons. Override CFrame::SetButtons to change this behavior.\n* Automatic subclassing for windows using Windows API defined window classes.\n   Now when a window is based on predefined window classes, like the \n   common controls (e.g. list-view, tree-view, richedit), the window is\n   automatically subclassed. There is now no need to call the subclass\n   function in user code.   \n\n\nVersion 5.2\n===========\n* Added a separate HINSTANCE for resources. This provides for multilingual\n   support, when resources are loaded via a DLL.\n* Added the Internet Browser example. It demonstrates how to host an ActiveX\n   control in a Win32++ window. It requires ATL.\n* Added the Performance example. This program now also conducts a simple \n   performance test to measure the efficiency of the message handling. \n\n   \nVersion 5.1\n===========\n* Existing windows can be subclassed and converted to CWnd objects using Attach\n* Dialog items can be sublcassed and converted to CWnd objects, using \n   AttachDlgItem.\n* Improvements to CToolbar. The toolbar uses image lists which support using \n  separate bitmaps for normal, hot and disabled buttons. Text can be added\n  to toolbar buttons, and the style can be set.\n* Improvements to CStatusbar.  \n* Notifications from common controls are reflected back to the CWnd object that\n  generated them. \n* Messages from old style common controls are reflected back to the CWnd object\n  that generated them.\n  \n\nVersion 5.0\n===========\n* Added rebars to the frame window\n* Added a menubar to the frame window\n* Added MDI frame support\n* Added splitter window support\n\n\nVersion 4\n=========\n* Changed the method of associating the Window's handle (HWND) and \n   the CWnd pointer.  Previously SetWindowLong was used to store the \n   CWin pointer in the windows data area. Now std::map is used to \n   associate a CWnd pointer with the HWND (i.e. the window's handle).   \n* Added the lpParam parameter to both versions of the CWnd::CreateEx\n   function.  Users are now free to use lpParam for their own \n   purposes. This parameter defaults to NULL for backwards \n   compatibility.\n        \n\nVersion 3\n=========\n* Added Tracing. To use tracing, ensure that you are in Debug mode, \n   i.e. the variable _DEBUG is defined, and use the TRACE(\"xxxxx\")\n   function to send trace messages.  The first TRACE(...) creates \n   the Trace output window.   \n* Enhanced the error reporting in the event of an exception. The \n   GetLastError information is now decoded and displayed if it \n   provides any additional information.\n* Added support for multi-threaded applications.    \n    \n\nVersion 2\n=========\n* The code is now Unicode compliant.\n* Added CWinApp class to start Win32++.\n* Added CDialog class to support modal and modeless dialogs as well\n   as indirect dialogs (dialogs created from a dialog template in\n   memory).\n* Added the Create function to simplify window creation.\n    \n\nVersion 1.0\n===========\nInitial Release"
  },
  {
    "path": "external/win32cpp/include/controls.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n\n////////////////////////////////////////////////////////\n// controls.h\n//  Declaration of the following classes:\n//  CAnimation, CComboBox, CComboBoxEx, CProgressBar,\n//  CScrollBar, CSlider, CSpinButton\n\n\n#ifndef _WIN32XX_CONTROLS_H_\n#define _WIN32XX_CONTROLS_H_\n\n#include \"wincore.h\"\n\nnamespace Win32xx\n{\n\tclass CAnimation : public CWnd\n\t{\n\tpublic:\n\t\tCAnimation() {}\n\t\tvirtual ~CAnimation() {}\n\n\t\tBOOL Close() const;\n\t\tBOOL Open(LPTSTR lpszName) const;\n\t\tBOOL Play(UINT wFrom, UINT wTo, UINT cRepeat) const;\n\t\tBOOL Seek(UINT wFrame) const;\n\t\tBOOL Stop() const;\n\n\tprotected:\n\t\t// Overridables\n\t\tvirtual void PreRegisterClass(WNDCLASS &wc) { wc.lpszClassName = ANIMATE_CLASS; }\n\t};\n\n\n\tclass CComboBox : public CWnd\n\t{\n\tpublic:\n\t\tCComboBox() {}\n\t\tvirtual ~CComboBox() {}\n\n\t\tint   AddString(LPCTSTR lpszString) const;\n\t\tvoid  Clear() const;\n\t\tvoid  Copy() const;\n\t\tvoid  Cut() const;\n\t\tint   DeleteString(int nIndex) const;\n\t\tint   Dir(UINT attr, LPCTSTR lpszWildCard ) const;\n\t\tint   FindString(int nIndexStart, LPCTSTR lpszString) const;\n\t\tint   FindStringExact(int nIndexStart, LPCTSTR lpszString) const;\n\t\tint   GetCount() const;\n\t\tint   GetCurSel() const;\n\t\tCRect GetDroppedControlRect() const;\n\t\tBOOL  GetDroppedState() const;\n\t\tint   GetDroppedWidth() const;\n\t\tDWORD GetEditSel() const;\n\t\tBOOL  GetExtendedUI() const;\n\t\tint   GetHorizontalExtent() const;\n\t\tDWORD GetItemData(int nIndex) const;\n\t\tint   GetItemHeight(int nIndex) const;\n\t\tint   GetLBText(int nIndex, LPTSTR lpszText) const;\n\t\tint   GetLBTextLen(int nIndex) const;\n\t\tLCID  GetLocale() const;\n\t\tint   GetTopIndex() const;\n\t\tint   InitStorage(int nItems, int nBytes) const;\n\t\tint   InsertString(int nIndex, LPCTSTR lpszString) const;\n\t\tvoid  LimitText(int nMaxChars) const;\n\t\tvoid  Paste() const;\t\t\n\t\tvoid  ResetContent() const;\n\t\tint   SelectString(int nStartAfter, LPCTSTR lpszString) const;\n\t\tint   SetCurSel(int nIndex) const;\n\t\tint   SetDroppedWidth(int nWidth) const;\n\t\tBOOL  SetEditSel(int nStartChar, int nEndChar) const;\n\t\tint   SetExtendedUI(BOOL bExtended = TRUE) const;\n\t\tvoid  SetHorizontalExtent(UINT nExtent ) const;\n\t\tint   SetItemData(int nIndex, DWORD dwItemData) const;\n\t\tint   SetItemHeight(int nIndex, UINT cyItemHeight) const;\n\t\tLCID  SetLocale( LCID NewLocale ) const;\n\t\tint   SetTopIndex(int nIndex) const;\n\t\tvoid  ShowDropDown(BOOL bShow = TRUE) const;\n\n\tprotected:\n\t\t// Overridables\n\t\tvirtual void PreRegisterClass(WNDCLASS &wc) { wc.lpszClassName = _T(\"ComboBox\"); }\n\t};\n\n\n\tclass CComboBoxEx : public CWnd\n\t{\n\tpublic:\n\t\tCComboBoxEx() {}\n\t\tvirtual ~CComboBoxEx() {}\n\n\t\tint  \tDeleteItem(int nIndex ) const;\n\t\tCWnd* \tGetComboBoxCtrl() const;\n\t\tCWnd* \tGetEditCtrl() const;\n\t\tDWORD \tGetExtendedStyle() const;\n\t\tHIMAGELIST GetImageList() const;\n\t\tBOOL \tGetItem(COMBOBOXEXITEM* pCBItem) const;\n\t\tBOOL \tHasEditChanged () const;\n\t\tint     InsertItem(COMBOBOXEXITEM* lpcCBItem) const;\n\t\tDWORD \tSetExtendedStyle(DWORD dwExMask, DWORD dwExStyles ) const;\n\t\tHIMAGELIST SetImageList(HIMAGELIST himl) const;\n\t\tBOOL \tSetItem(PCOMBOBOXEXITEM lpcCBItem) const;\n\n\tprotected:\n\t\t// Overridables\n\t\tvirtual void PreRegisterClass(WNDCLASS &wc) { wc.lpszClassName = WC_COMBOBOXEX; }\n\t};\n\n\n\tclass CProgressBar : public CWnd\n\t{\n\tpublic:\n\t\tCProgressBar() {}\n\t\tvirtual ~CProgressBar() {}\n\n\t\tint  GetPos() const;\n\t\tint  GetRange(BOOL fWhichLimit, PPBRANGE ppBRange) const;\n\t\tint  OffsetPos(int nIncrement) const;\n\t\tint  SetPos(int nNewPos) const;\n\t\tint  SetRange(short nMinRange, short nMaxRange) const;\n\t\tint  SetStep(int nStepInc) const;\n\t\tint  StepIt() const;\n\n\tprotected:\n\t\t// Overridables\n\t\tvirtual void PreRegisterClass(WNDCLASS &wc) { wc.lpszClassName = PROGRESS_CLASS; }\n\t};\n\n\n\tclass CScrollBar : public CWnd\n\t{\n\tpublic:\n\t\tCScrollBar() {}\n\t\tvirtual ~CScrollBar() {}\n\n\t\tBOOL EnableScrollBar( UINT nArrowFlags = ESB_ENABLE_BOTH )  const;\n\t\tBOOL GetScrollInfo(LPSCROLLINFO lpsi)  const;\n\t\tint  GetScrollPos()  const;\n\t\tBOOL GetScrollRange(LPINT lpMinPos, LPINT lpMaxPos )  const;\n\t\tBOOL SetScrollInfo(LPSCROLLINFO lpsi, BOOL bRedraw = TRUE )  const;\n\t\tint  SetScrollPos(int nPos, BOOL bRedraw)  const;\n\t\tBOOL SetScrollRange( int nMinPos, int nMaxPos, BOOL bRedraw = TRUE )  const;\n\t\tBOOL ShowScrollBar(BOOL bShow)  const;\n\n\tprotected:\n\t\t// Overridables\n\t\tvirtual void PreRegisterClass(WNDCLASS &wc) { wc.lpszClassName = _T(\"SCROLLBAR\"); ; }\n\t};\n\n\n\tclass CSlider : public CWnd\n\t{\n\tpublic:\n\t\tCSlider() {}\n\t\tvirtual ~CSlider() {}\n\n\t\tvoid ClearSel() const;\n\t\tvoid ClearTics(BOOL bRedraw = FALSE ) const;\n\t\tCWnd* GetBuddy(BOOL fLocation = TRUE ) const;\n\t\tCRect GetChannelRect() const;\n\t\tint  GetLineSize() const;\n\t\tint  GetNumTics() const;\n\t\tint  GetPageSize() const;\n\t\tint  GetPos() const;\n\t\tint  GetRangeMax() const;\n\t\tint  GetRangeMin() const;\n\t\tint  GetSelEnd() const;\n\t\tint  GetSelStart() const;\n\t\tint  GetThumbLength() const;\n\t\tCRect GetThumbRect() const;\n\t\tint  GetTic(int nTic ) const;\n\t\tint  GetTicPos(int nTic) const;\n\t\tCWnd* GetToolTips() const;\n\t\tCWnd* SetBuddy(CWnd* pBuddy, BOOL fLocation = TRUE ) const;\n\t\tint  SetLineSize(int nSize) const;\n\t\tint  SetPageSize(int nSize) const;\n\t\tvoid SetPos(int nPos, BOOL bRedraw = FALSE) const;\n\t\tvoid SetRangeMax(int nMax, BOOL bRedraw = FALSE) const;\n\t\tvoid SetRangeMin(int nMax, BOOL bRedraw = FALSE) const;\n\t\tvoid SetSelection(int nMin, int nMax, BOOL bRedraw = FALSE) const;\n\t\tBOOL SetTic(int nTic) const;\n\t\tvoid SetTicFreq(int nFreq)  const;\n\t\tint  SetTipSide(int nLocation) const;\n\t\tvoid SetToolTips(CWnd* pToolTip) const;\n\n\tprotected:\n\t\t// Overridables\n\t\tvirtual void PreRegisterClass(WNDCLASS &wc) { wc.lpszClassName = TRACKBAR_CLASS; }\n\t};\n\n\n\t// Also known as an Up/Down control\n\tclass CSpinButton : public CWnd\n\t{\n\tpublic:\n\t\tCSpinButton() {}\n\t\tvirtual ~CSpinButton() {}\n\n\t\tint  GetAccel(int cAccels, LPUDACCEL paAccels) const;\n\t\tint  GetBase() const;\n\t\tCWnd* GetBuddy() const;\n\t\tint  GetPos() const;\n\t\tDWORD GetRange() const;\n\t\tBOOL SetAccel(int cAccels, LPUDACCEL paAccels) const;\n\t\tint  SetBase(int nBase) const;\n\t\tCWnd* SetBuddy(CWnd* hwndBuddy) const;\n\t\tint  SetPos(int nPos) const;\n\t\tvoid SetRange(int nLower, int nUpper) const;\n\n\tprotected:\n\t\t// Overridables\n\t\tvirtual void PreCreate(CREATESTRUCT &cs);\n\t\tvirtual void PreRegisterClass(WNDCLASS &wc);\n\t};\n\n} // namespace Win32xx\n\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nnamespace Win32xx\n{\n\n\t////////////////////////////////////////\n\t// Definitions for the CAnimation class\n\t//\n\tinline BOOL CAnimation::Close() const\n\t// Closes an AVI clip.\n\t{\n\t\tassert(IsWindow());\n\t\treturn Animate_Close(m_hWnd);\n\t}\n\n\tinline BOOL CAnimation::Open(LPTSTR lpszName) const\n\t// Opens an AVI clip and displays its first frame in an animation control.\n\t{\n\t\tassert(IsWindow());\n\t\treturn Animate_Open(m_hWnd, lpszName);\n\t}\n\n\tinline BOOL CAnimation::Play(UINT wFrom, UINT wTo, UINT cRepeat) const\n\t// Plays an AVI clip in an animation control. The control plays the clip\n\t//\tin the background while the thread continues executing.\n\t{\n\t\tassert(IsWindow());\n\t\treturn Animate_Play(m_hWnd, wFrom, wTo, cRepeat);\n\t}\n\n\tinline BOOL CAnimation::Seek(UINT wFrame) const\n\t// Directs an animation control to display a particular frame of an AVI clip. \n\t// The control displays the clip in the background while the thread continues executing.\n\t{\n\t\tassert(IsWindow());\n\t\treturn Animate_Seek(m_hWnd, wFrame);\n\t}\n\n\tinline BOOL CAnimation::Stop() const\n\t// Stops playing an AVI clip in an animation control.\n\t{\n\t\tassert(IsWindow());\n\t\treturn Animate_Stop(m_hWnd);\n\t}\n\n\n\t////////////////////////////////////////\n\t// Definitions for the CComboBox class\n\t//\n\tinline int  CComboBox::AddString(LPCTSTR lpszString) const\n\t// Adds a string to the list box of a combo box. If the combo box does not \n\t// have the CBS_SORT style, the string is added to the end of the list. \n\t// Otherwise, the string is inserted into the list, and the list is sorted.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CB_ADDSTRING, 0, (LPARAM)lpszString);\n\t}\n\n\tinline void CComboBox::Clear() const\n\t// Deletes the current selection, if any, from the combo box's edit control.\n\t{\n\t\tassert(IsWindow());\n\t\tSendMessage(WM_CLEAR, 0, 0);\n\t}\n\n\tinline void CComboBox::Copy() const\n\t// Copies the current selection to the clipboard in CF_TEXT format.\n\t{\n\t\tassert(IsWindow());\n\t\tSendMessage(WM_COPY, 0, 0);\n\t}\n\n\tinline void CComboBox::Cut() const\n\t// Deletes the current selection, if any, in the edit control and copies \n\t// the deleted text to the clipboard in CF_TEXT format.\n\t{\n\t\tassert(IsWindow());\n\t\tSendMessage(WM_CUT, 0, 0);\n\t}\n\n\tinline int  CComboBox::DeleteString(int nIndex) const\n\t// Deletes a string in the list box of a combo box. \n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CB_DELETESTRING, (WPARAM)nIndex, 0);\n\t}\n\n\tinline int  CComboBox::Dir(UINT attr, LPCTSTR lpszWildCard ) const\n\t// Adds the names of directories and files that match a specified string \n\t// and set of file attributes.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CB_DIR, (WPARAM)attr, (LPARAM)lpszWildCard);\n\t}\n\n\tinline int  CComboBox::FindString(int nIndexStart, LPCTSTR lpszString) const\n\t// Search the list box of a combo box for an item beginning with the \n\t// characters in a specified string.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CB_FINDSTRING, (WPARAM)nIndexStart, (LPARAM)lpszString);\n\t}\n\n\tinline int  CComboBox::FindStringExact(int nIndexStart, LPCTSTR lpszString) const\n\t// Find the first list box string in a combo box that matches the string specified in lpszString. \n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CB_FINDSTRINGEXACT, (WPARAM)nIndexStart, (LPARAM)lpszString);\n\t}\n\n\tinline int  CComboBox::GetCount() const\n\t// Retrieves the number of items in the list box of the combo box.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CB_GETCOUNT, 0,0);\n\t}\n\n\tinline int  CComboBox::GetCurSel() const\n\t// Retrieves the index of the currently selected item, if any, in the list box of the combo box. \n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CB_GETCURSEL, 0,0);\n\t}\n\n\tinline CRect CComboBox::GetDroppedControlRect() const\n\t// Retrieves the screen coordinates of the combo box in its dropped-down state. \n\t{\n\t\tassert(IsWindow());\n\t\tCRect rc;\n\t\tSendMessage(CB_GETDROPPEDCONTROLRECT, 0, (LPARAM)&rc);\n\t\treturn rc;\n\t}\n\n\tinline BOOL CComboBox::GetDroppedState() const\n\t// Determines whether the list box of the combo box is dropped down.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (BOOL)SendMessage(CB_GETDROPPEDSTATE, 0, 0);\n\t}\n\n\tinline int  CComboBox::GetDroppedWidth() const\n\t// Retrieves the minimum allowable width, in pixels, of the list box of the combo box \n\t// with the CBS_DROPDOWN or CBS_DROPDOWNLIST style.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CB_GETDROPPEDWIDTH, 0, 0);\n\t}\n\n\tinline DWORD CComboBox::GetEditSel() const\n\t// Gets the starting and ending character positions of the current selection \n\t// in the edit control of the combo box. \n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CB_GETEDITSEL, 0, 0);\n\t}\n\n\tinline BOOL CComboBox::GetExtendedUI() const\n\t// Determines whether the combo box has the default user interface or the extended user interface.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (BOOL)SendMessage(CB_GETEXTENDEDUI, 0, 0);\n\t}\n\n\tinline int  CComboBox::GetHorizontalExtent() const\n\t// Retrieve from the combo box the width, in pixels, by which the list box can \n\t// be scrolled horizontally (the scrollable width).\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CB_GETHORIZONTALEXTENT, 0, 0);\n\t}\n\n\tinline DWORD CComboBox::GetItemData(int nIndex) const\n\t// Retrieves the application-supplied value associated with the specified item in the combo box.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (DWORD)SendMessage(CB_GETITEMDATA, (WPARAM)nIndex, 0);\n\t}\n\n\tinline int  CComboBox::GetItemHeight(int nIndex) const\n\t// Determines the height of list items or the selection field in the combo box.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CB_GETITEMHEIGHT, (WPARAM)nIndex, 0);\n\t}\n\n\tinline int  CComboBox::GetLBText(int nIndex, LPTSTR lpszText) const\n\t//  Retrieves a string from the list of the combo box.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CB_GETLBTEXT, (WPARAM)nIndex, (LPARAM)lpszText);\n\t}\n\n\tinline int  CComboBox::GetLBTextLen(int nIndex) const\n\t// Retrieves the length, in characters, of a string in the list of the combo box.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CB_GETLBTEXTLEN, (WPARAM)nIndex, 0);\n\t}\n\n\tinline LCID CComboBox::GetLocale() const\n\t// Retrieves the current locale of the combo box.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (LCID)SendMessage(CB_GETLOCALE, 0, 0);\n\t}\n\n\tinline int  CComboBox::GetTopIndex() const\n\t// Retrieves the zero-based index of the first visible item in the list box portion of the combo box.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CB_GETTOPINDEX, 0, 0);\n\t}\n\n\tinline int  CComboBox::InitStorage(int nItems, int nBytes) const\n\t// Allocates memory for storing list box items. Use this before adding a \n\t// large number of items to the list box portion of a combo box.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CB_INITSTORAGE, (WPARAM)nItems, (LPARAM)nBytes);\n\t}\n\n\tinline int  CComboBox::InsertString(int nIndex, LPCTSTR lpszString) const\n\t// Inserts a string into the list box of the combo box. Unlike the AddString, \n\t// a list with the CBS_SORT style is not sorted.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CB_INSERTSTRING, (WPARAM)nIndex, (LPARAM)lpszString);\n\t}\n\n\tinline void CComboBox::Paste() const\n\t// Copies the current content of the clipboard to the combo box's edit control at the current caret position.\n\t{\n\t\tassert(IsWindow());\n\t\tSendMessage(WM_PASTE, 0, 0);\n\t}\n\n\tinline void CComboBox::LimitText(int nMaxChars) const\n\t// Limits the length of the text the user may type into the edit control of the combo box.\n\t{\n\t\tassert(IsWindow());\n\t\tSendMessage(CB_LIMITTEXT, (WPARAM)nMaxChars, 0);\n\t}\n\n\tinline void CComboBox::ResetContent() const\n\t// Removes all items from the list box and edit control of the combo box.\n\t{\n\t\tassert(IsWindow());\n\t\tSendMessage(CB_RESETCONTENT, 0, 0);\n\t}\n\n\tinline int  CComboBox::SelectString(int nStartAfter, LPCTSTR lpszString) const\n\t// Searches the list of a combo box for an item that begins with the characters in a\n\t// specified string. If a matching item is found, it is selected and copied to the edit control.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CB_SELECTSTRING, (WPARAM)nStartAfter, (LPARAM)lpszString);\n\t}\n\n\tinline int  CComboBox::SetCurSel(int nIndex) const\n\t// Selects a string in the list of the combo box. If necessary, the list scrolls the string into view.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CB_SETCURSEL, (WPARAM)nIndex, 0);\n\t}\n\n\tinline int  CComboBox::SetDroppedWidth(int nWidth) const\n\t// Sets the maximum allowable width, in pixels, of the list box of the combo box with\n\t// the CBS_DROPDOWN or CBS_DROPDOWNLIST style.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CB_SETDROPPEDWIDTH, (WPARAM)nWidth, 0);\n\t}\n\n\tinline BOOL CComboBox::SetEditSel(int nStartChar, int nEndChar) const\n\t// Selects characters in the edit control of the combo box.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (BOOL)SendMessage(CB_SETEDITSEL, 0, (LPARAM)MAKELONG(nStartChar,nEndChar));\n\t}\n\n\tinline int  CComboBox::SetExtendedUI(BOOL bExtended) const\n\t// Selects either the default user interface or the extended user interface for the combo box that \n\t// has the CBS_DROPDOWN or CBS_DROPDOWNLIST style.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CB_SETEXTENDEDUI, (WPARAM)bExtended, 0);\n\t}\n\n\tinline void CComboBox::SetHorizontalExtent(UINT nExtent ) const\n\t// Sets the width, in pixels, by which the list box can be scrolled horizontally (the scrollable width).\n\t{\n\t\tassert(IsWindow());\n\t\tSendMessage(CB_SETHORIZONTALEXTENT, (WPARAM)nExtent, 0);\n\t}\n\n\tinline int  CComboBox::SetItemData(int nIndex, DWORD dwItemData) const\n\t// Sets the value associated with the specified item in the combo box.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CB_SETITEMDATA, (WPARAM)nIndex, (LPARAM)dwItemData);\n\t}\n\n\tinline int  CComboBox::SetItemHeight(int nIndex, UINT cyItemHeight) const\n\t// Sets the height of list items or the selection field in the combo box.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CB_SETITEMHEIGHT, (WPARAM)nIndex, (LPARAM)cyItemHeight);\n\t}\n\n\tinline LCID CComboBox::SetLocale( LCID NewLocale ) const\n\t// Sets the current locale of the combo box.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (LCID)SendMessage(CB_SETLOCALE, (WPARAM)NewLocale, 0);\n\t}\n\n\tinline int  CComboBox::SetTopIndex(int nIndex) const\n\t// Ensure that a particular item is visible in the list box of the combo box.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CB_SETTOPINDEX, (WPARAM)nIndex, 0);\n\t}\n\n\tinline void CComboBox::ShowDropDown(BOOL bShow) const\n\t// Shows or hides the list box of the combo box that has the CBS_DROPDOWN or CBS_DROPDOWNLIST style.\n\t{\n\t\tassert(IsWindow());\n\t\tSendMessage(CB_SHOWDROPDOWN, (WPARAM)bShow, 0);\n\t}\n\n\n\t////////////////////////////////////////\n\t// Definitions for the CComboBoxEx class\n\t//\n\tinline int  CComboBoxEx::DeleteItem(int nIndex ) const\n\t// Removes an item from the ComboBoxEx control.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CBEM_DELETEITEM, (WPARAM)nIndex, 0);\n\t}\n\n\tinline CWnd* CComboBoxEx::GetComboBoxCtrl() const\n\t// Retrieves the handle to the child combo box control.\n\t{\n\t\tassert(IsWindow());\n\t\treturn FromHandle((HWND)SendMessage(CBEM_GETCOMBOCONTROL, 0, 0));\n\t}\n\n\tinline CWnd* CComboBoxEx::GetEditCtrl() const\n\t// Retrieves the handle to the edit control portion of the ComboBoxEx control.\n\t{\n\t\tassert(IsWindow());\n\t\treturn FromHandle((HWND)SendMessage(CBEM_GETEDITCONTROL, 0, 0));\n\t}\n\n\tinline DWORD CComboBoxEx::GetExtendedStyle() const\n\t// Retrieves the extended styles that are in use for the ComboBoxEx control.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (DWORD)SendMessage(CBEM_GETEXTENDEDSTYLE, 0, 0);\n\t}\n\n\tinline HIMAGELIST CComboBoxEx::GetImageList() const\n\t// Retrieves the handle to an image list assigned to the ComboBoxEx control.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (HIMAGELIST)SendMessage(CBEM_GETIMAGELIST, 0, 0);\n\t}\n\n\tinline BOOL CComboBoxEx::GetItem(COMBOBOXEXITEM* pCBItem) const\n\t// Retrieves item information for the given ComboBoxEx item.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (BOOL)SendMessage(CBEM_GETITEM, 0, (LPARAM)pCBItem);\n\t}\n\n\tinline BOOL CComboBoxEx::HasEditChanged () const\n\t// Determines whether or not the user has changed the text of the ComboBoxEx edit control.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (BOOL)SendMessage(CBEM_HASEDITCHANGED, 0, 0);\n\t}\n\n\tinline int CComboBoxEx::InsertItem(COMBOBOXEXITEM* lpcCBItem) const\n\t// Inserts a new item in the ComboBoxEx control. \n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(CBEM_INSERTITEM, 0, (LPARAM)lpcCBItem);\n\t}\n\n\tinline DWORD CComboBoxEx::SetExtendedStyle(DWORD dwExMask, DWORD dwExStyles ) const\n\t// Sets extended styles within the ComboBoxEx control.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (DWORD)SendMessage(CBEM_SETEXTENDEDSTYLE, (WPARAM)dwExMask, (LPARAM)dwExStyles);\n\t}\n\n\tinline HIMAGELIST CComboBoxEx::SetImageList(HIMAGELIST himl) const\n\t// Sets an image list for the ComboBoxEx control.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (HIMAGELIST)SendMessage(CBEM_SETIMAGELIST, 0, (LPARAM)himl);\n\t}\n\n\tinline BOOL CComboBoxEx::SetItem(PCOMBOBOXEXITEM lpcCBItem) const\n\t// Sets the attributes for an item in the ComboBoxEx control.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (BOOL)SendMessage(CBEM_SETITEM, 0, (LPARAM)lpcCBItem);\n\t}\n\n\n\t////////////////////////////////////////\n\t// Definitions for the CProgressBar class\n\t//\n\tinline int CProgressBar::GetPos() const\n\t// Retrieves the current position of the progress bar.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(PBM_GETPOS, 0, 0);\n\t}\n\n\tinline int CProgressBar::GetRange(BOOL fWhichLimit, PPBRANGE ppBRange) const\n\t// Retrieves information about the current high and low limits of the progress bar control.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(PBM_GETRANGE, (WPARAM)fWhichLimit, (LPARAM) (PPBRANGE) ppBRange);\n\t}\n\n\tinline int CProgressBar::OffsetPos(int nIncrement) const\n\t// Advances the current position of the progress bar by a specified increment and redraws\n\t// the bar to reflect the new position.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(PBM_DELTAPOS, (WPARAM)nIncrement, 0);\n\t}\n\n\tinline int CProgressBar::SetPos(int nNewPos) const\n\t// Sets the current position for the progress bar and redraws the bar to reflect the new position.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(PBM_SETPOS, (WPARAM)nNewPos, 0);\n\t}\n\n\tinline int CProgressBar::SetRange(short nMinRange, short nMaxRange) const\n\t// Sets the minimum and maximum values for the progress bar and redraws the bar to reflect the new range.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(PBM_SETRANGE, 0, (LPARAM) MAKELPARAM (nMinRange, nMaxRange));\n\t}\n\n\tinline int CProgressBar::SetStep(int nStepInc) const\n\t// Specifies the step increment for the progress bar.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(PBM_SETSTEP, (WPARAM)nStepInc, 0);\n\t}\n\t\n\tinline int CProgressBar::StepIt() const\n\t// Advances the current position for a progress bar by the step increment and \n\t// redraws the bar to reflect the new position.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(PBM_STEPIT, 0, 0);\n\t}\n\n\n\t////////////////////////////////////////\n\t// Definitions for the CScrollBar class\n\t//\n\tinline BOOL CScrollBar::EnableScrollBar( UINT nArrowFlags )  const\n\t// Enables or disables the scroll bar arrows.\n\t{\n\t\tassert(IsWindow());\n\t\treturn ::EnableScrollBar(m_hWnd, SB_CTL, nArrowFlags);\n\t}\n\n\tinline BOOL CScrollBar::GetScrollInfo(LPSCROLLINFO lpsi)  const\n\t// Retrieves the parameters of a scroll bar, including the minimum and maximum \n\t// scrolling positions, the page size, and the position of the scroll box (thumb).\n\t{\n\t\tassert(IsWindow());\n\t\treturn ::GetScrollInfo(m_hWnd, SB_CTL, lpsi);\n\t}\n\n\tinline int CScrollBar::GetScrollPos()  const\n\t// Retrieves the current position of the scroll box (thumb) in the scroll bar.\n\t{\n\t\tassert(IsWindow());\n\t\treturn ::GetScrollPos(m_hWnd, SB_CTL);\n\t}\n\n\tinline BOOL CScrollBar::GetScrollRange(LPINT lpMinPos, LPINT lpMaxPos )  const\n\t// Retrieves the current minimum and maximum scroll box (thumb) positions for the scroll bar. \n\t{\n\t\tassert(IsWindow());\n\t\treturn ::GetScrollRange(m_hWnd, SB_CTL, lpMinPos, lpMaxPos);\n\t}\n\n\tinline BOOL CScrollBar::SetScrollInfo(LPSCROLLINFO lpsi, BOOL bRedraw )  const\n\t// Sets the parameters of the scroll bar, including the minimum and maximum scrolling positions, \n\t// the page size, and the position of the scroll box (thumb).\n\t{\n\t\tassert(IsWindow());\n\t\treturn ::SetScrollInfo(m_hWnd, SB_CTL, lpsi, bRedraw);\n\t}\n\n\tinline int CScrollBar::SetScrollPos(int nPos, BOOL bRedraw)  const\n\t// Sets the position of the scroll box (thumb) in the scroll bar and, if requested, \n\t// redraws the scroll bar to reflect the new position of the scroll box.\n\t{\n\t\tassert(IsWindow());\n\t\treturn ::SetScrollPos(m_hWnd, SB_CTL, nPos, bRedraw);\n\t}\n\n\tinline BOOL CScrollBar::SetScrollRange( int nMinPos, int nMaxPos, BOOL bRedraw )  const\n\t// Sets the minimum and maximum scroll box positions for the scroll bar.\n\t{\n\t\tassert(IsWindow());\n\t\treturn ::SetScrollRange(m_hWnd, SB_CTL, nMinPos, nMaxPos, bRedraw);\n\t}\n\n\tinline BOOL CScrollBar::ShowScrollBar(BOOL bShow)  const\n\t// Shows or hides the scroll bar.\n\t{\n\t\tassert(IsWindow());\n\t\treturn ::ShowScrollBar(m_hWnd, SB_CTL, bShow);\n\t}\n\n\t////////////////////////////////////////\n\t// Definitions for the CSlider class\n\t//\n\tinline void CSlider::ClearSel() const\n\t// Clears the current selection range in the trackbar.\n\t{\n\t\tassert(IsWindow());\n\t\tSendMessage(TBM_CLEARSEL, 0, 0);\n\t}\n\n\tinline void CSlider::ClearTics(BOOL bRedraw) const\n\t// Removes the current tick marks from the trackbar.\n\t{\n\t\tassert(IsWindow());\n\t\tSendMessage(TBM_CLEARTICS, (WPARAM)bRedraw, 0);\n\t}\n\n\tinline CWnd* CSlider::GetBuddy(BOOL fLocation) const\n\t// Retrieves the handle to the trackbar control buddy window at a given location.\n\t{\n\t\tassert(IsWindow());\n\t\treturn FromHandle((HWND)SendMessage(TBM_GETBUDDY, (WPARAM)fLocation, 0));\n\t}\n\n\tinline CRect CSlider::GetChannelRect() const\n\t// Retrieves the size and position of the bounding rectangle for the trackbar's channel.\n\t{\n\t\tassert(IsWindow());\n\t\tCRect rc;\n\t\tSendMessage(TBM_GETCHANNELRECT, 0, (LPARAM)&rc);\n\t\treturn rc;\n\t}\n\n\tinline int  CSlider::GetLineSize() const\n\t// Retrieves the number of logical positions the trackbar's slider moves in response\n\t// to keyboard input from the arrow keys.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(TBM_GETLINESIZE, 0, 0);\n\t}\n\n\tinline int  CSlider::GetNumTics() const\n\t// Retrieves the number of tick marks in the trackbar.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(TBM_GETNUMTICS, 0, 0);\n\t}\n\n\tinline int  CSlider::GetPageSize() const\n\t// Retrieves the number of logical positions the trackbar's slider moves in response to \n\t// keyboard input, or mouse input, such as clicks in the trackbar's channel.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(TBM_GETPAGESIZE, 0, 0);\n\t}\n\n\tinline int  CSlider::GetPos() const\n\t// Retrieves the current logical position of the slider in the trackbar.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(TBM_GETPOS, 0, 0);\n\t}\n\n\tinline int  CSlider::GetRangeMax() const\n\t// Retrieves the maximum position for the slider in the trackbar.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(TBM_GETRANGEMAX, 0, 0);\n\t}\n\n\tinline int  CSlider::GetRangeMin() const\n\t// Retrieves the minimum position for the slider in the trackbar. \n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(TBM_GETRANGEMIN, 0, 0);\n\t}\n\n\tinline int  CSlider::GetSelEnd() const\n\t// Retrieves the ending position of the current selection range in the trackbar. \n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(TBM_GETSELEND, 0, 0);\n\t}\n\n\tinline int  CSlider::GetSelStart() const\n\t// Retrieves the starting position of the current selection range in the trackbar.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(TBM_GETSELSTART, 0, 0);\n\t}\n\n\tinline int  CSlider::GetThumbLength() const\n\t// Retrieves the length of the slider in the trackbar.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(TBM_GETTHUMBLENGTH, 0, 0);\n\t}\n\n\tinline CRect CSlider::GetThumbRect() const\n\t// Retrieves the size and position of the bounding rectangle for the slider in the trackbar. \n\t{\n\t\tCRect rc;\n\t\tSendMessage(TBM_GETTHUMBRECT, 0, (LPARAM)&rc);\n\t\treturn rc;\n\t}\n\n\tinline int CSlider::GetTic(int nTic ) const\n\t// Retrieves the logical position of a tick mark in the trackbar.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(TBM_GETTIC, (WPARAM)nTic, 0);\n\t}\n\n\tinline int  CSlider::GetTicPos(int nTic) const\n\t// Retrieves the current physical position of a tick mark in the trackbar.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(TBM_GETTICPOS, (WPARAM)nTic, 0);\n\t}\n\n\tinline CWnd* CSlider::GetToolTips() const\n\t// Retrieves the handle to the ToolTip control assigned to the trackbar, if any.\n\t{\n\t\tassert(IsWindow());\n\t\treturn FromHandle((HWND)SendMessage(TBM_GETTOOLTIPS, 0, 0));\n\t}\n\n\tinline CWnd* CSlider::SetBuddy(CWnd* pBuddy, BOOL fLocation /*= TRUE*/ ) const\n\t// Assigns a window as the buddy window for the trackbar control.\n\t{\n\t\tassert(IsWindow());\n\t\treturn FromHandle((HWND)SendMessage(TBM_SETBUDDY, (WPARAM)fLocation, (LPARAM)pBuddy->GetHwnd()));\n\t}\n\n\tinline int  CSlider::SetLineSize(int nSize) const\n\t// Sets the number of logical positions the trackbar's slider moves in response to \n\t// keyboard input from the arrow keys.\n\t{\n\t\tassert(IsWindow());\n\t\treturn(int)SendMessage(TBM_SETLINESIZE, 0, (LPARAM)nSize);\n\t}\n\n\tinline int  CSlider::SetPageSize(int nSize) const\n\t// Sets the number of logical positions the trackbar's slider moves in response to \n\t// keyboard input, or mouse input such as clicks in the trackbar's channel.\n\t{\n\t\tassert(IsWindow());\n\t\treturn(int)SendMessage(TBM_SETPAGESIZE, 0, (LPARAM)nSize);\n\t}\n\n\tinline void CSlider::SetPos(int nPos, BOOL bRedraw) const\n\t// Sets the current logical position of the slider in the trackbar.\n\t{\n\t\tassert(IsWindow());\n\t\tSendMessage(TBM_SETPOS, (WPARAM)bRedraw, (LPARAM)nPos);\n\t}\n\n\tinline void CSlider::SetRangeMax(int nMax, BOOL bRedraw) const\n\t// Sets the maximum logical position for the slider in the trackbar.\n\t{\n\t\tassert(IsWindow());\n\t\tSendMessage(TBM_SETRANGEMAX, (WPARAM)bRedraw, (LPARAM)nMax);\n\t}\n\n\tinline void CSlider::SetRangeMin(int nMax, BOOL bRedraw) const\n\t// Sets the minimum logical position for the slider in the trackbar.\n\t{\n\t\tassert(IsWindow());\n\t\tSendMessage(TBM_SETRANGEMIN, (WPARAM)bRedraw, (LPARAM)nMax);\n\t}\n\n\tinline void CSlider::SetSelection(int nMin, int nMax, BOOL bRedraw) const\n\t// Sets the starting and ending positions for the available selection range in the trackbar.\n\t{\n\t\tassert(IsWindow());\n\t\tSendMessage(TBM_SETSEL, (WPARAM)bRedraw, (LPARAM)MAKELONG(nMax, nMin));\n\t}\n\n\tinline BOOL CSlider::SetTic(int nTic) const\n\t// Sets a tick mark in the trackbar at the specified logical position. \n\t{\n\t\tassert(IsWindow());\n\t\treturn (BOOL)SendMessage(TBM_SETTIC, 0, nTic);\n\t}\n\n\tinline void CSlider::SetTicFreq(int nFreq)  const\n\t// Sets the interval frequency for tick marks in the trackbar.\n\t{\n\t\tassert(IsWindow());\n\t\tSendMessage(TBM_SETTICFREQ, (WPARAM)nFreq, 0);\n\t}\n\n\tinline int  CSlider::SetTipSide(int nLocation) const\n\t// Positions a ToolTip control used by the trackbar control.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(TBM_SETTIPSIDE, (WPARAM)nLocation, 0);\n\t}\n\n\tinline void CSlider::SetToolTips(CWnd* pToolTip) const\n\t// Assigns a ToolTip control to the trackbar control.\n\t{\n\t\tassert(IsWindow());\n\t\tSendMessage(TBM_SETTOOLTIPS, (WPARAM)pToolTip->GetHwnd(), 0);\n\t}\n\n\t////////////////////////////////////////\n\t// Definitions for the CSpinButton class\n\t//\n\tinline int CSpinButton::GetAccel(int cAccels, LPUDACCEL paAccels) const\n\t// Retrieves acceleration information for the up-down control.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(UDM_GETACCEL, (WPARAM)cAccels, (LPARAM)paAccels);\n\t}\n\n\tinline int CSpinButton::GetBase() const\n\t// Retrieves the current radix base (that is, either base 10 or 16) for the up-down control.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(UDM_GETBASE, 0, 0);\n\t}\n\n\tinline CWnd* CSpinButton::GetBuddy() const\n\t// Retrieves the handle to the current buddy window.\n\t{\n\t\tassert(IsWindow());\n\t\treturn FromHandle((HWND)SendMessage(UDM_GETBUDDY, 0, 0));\n\t}\n\n\tinline int CSpinButton::GetPos() const\n\t// Retrieves the current position of the up-down control with 16-bit precision.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(UDM_GETPOS, 0, 0);\n\t}\n\n\tinline DWORD CSpinButton::GetRange() const\n\t// Retrieves the minimum and maximum positions (range) for the up-down control.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (DWORD)SendMessage(UDM_GETRANGE, 0, 0);\n\t}\n\t\n\tinline void CSpinButton::PreCreate(CREATESTRUCT &cs)\n    { \n\t\tcs.style = WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VISIBLE |UDS_SETBUDDYINT; \n\t}\n\t\n\tinline void CSpinButton::PreRegisterClass(WNDCLASS &wc)\n\t{\n\t\twc.lpszClassName = UPDOWN_CLASS;\n\t}\n\n\tinline BOOL CSpinButton::SetAccel(int cAccels, LPUDACCEL paAccels) const\n\t// Sets the acceleration for the up-down control.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (BOOL)SendMessage(UDM_SETACCEL, (WPARAM)cAccels, (LPARAM)paAccels);\n\t}\n\n\tinline int CSpinButton::SetBase(int nBase) const\n\t// Sets the radix base for the up-down control.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(UDM_SETBASE, (WPARAM)nBase, 0);\n\t}\n\n\tinline CWnd* CSpinButton::SetBuddy(CWnd* pBuddy) const\n\t// Sets the buddy window for the up-down control.\n\t{\n\t\tassert(IsWindow());\n\t\treturn FromHandle((HWND)SendMessage(UDM_SETBUDDY, (WPARAM)pBuddy->GetHwnd(), 0));\n\t}\n\n\tinline int CSpinButton::SetPos(int nPos) const\n\t// Sets the current position for the up-down control with 16-bit precision.\n\t{\n\t\tassert(IsWindow());\n\t\treturn (int)SendMessage(UDM_SETPOS, 0, (LPARAM)MAKELONG ((short) nPos, 0));\n\t}\n\n\tinline void CSpinButton::SetRange(int nLower, int nUpper) const\n\t// Sets the minimum and maximum positions (range) for the up-down control.\n\t{\n\t\tassert(IsWindow());\n\t\tSendMessage(UDM_SETRANGE, 0, (LPARAM)MAKELONG(nUpper, nLower));\n\t}\n\n} // namespace Win32xx\n\n#endif //  define _WIN32XX_CONTROLS_H_\n\n"
  },
  {
    "path": "external/win32cpp/include/copyright.txt",
    "content": "Win32++   Version 7.2\nReleased: 5th AUgust 2011\n\n     David Nash\n     email: dnash@bigpond.net.au\n     url: https://sourceforge.net/projects/win32-framework\n\n\nCopyright (c) 2005-2011  David Nash\n\nPermission is hereby granted, free of charge, to\nany person obtaining a copy of this software and\nassociated documentation files (the \"Software\"),\nto deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify,\nmerge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom\nthe Software is furnished to do so, subject to the\nfollowing conditions:\n\nThe above copyright notice and this permission notice\nshall be included in all copies or substantial portions\nof the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\nANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\nACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\nOR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "external/win32cpp/include/cstring.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n\n// Acknowledgements:\n// Thanks to Adam Szulc for his initial CString code.\n\n////////////////////////////////////////////////////////\n// cstring.h\n//  Declaration of the cstring.h\n\n// This class is intended to provide a simple alternative to the MFC/ATL \n// CString class that ships with Microsoft compilers. The CString class\n// specified here is compatible with other compilers such as Borland 5.5\n// and MinGW.\n\n// Differences between this class and the MFC/ATL CString class\n// ------------------------------------------------------------\n// 1) The constructors for this class accepts only TCHARs. The various text conversion\n//    functions can be used to convert from other character types to TCHARs.\n//\n// 2) This class is not reference counted, so these CStrings should be passed as \n//    references or const references when used as function arguments. As a result there \n//    is no need for functions like LockBuffer and UnLockBuffer.\n//\n// 3) The Format functions only accepts POD (Plain Old Data) arguments. It does not\n//    accept arguments which are class or struct objects. In particular it does not\n//    accept CString objects, unless these are cast to LPCTSTR.\n//    This is demonstrates valid and invalid usage:\n//      CString string1(_T(\"Hello World\"));\n//      CString string2;\n//\n//      // This is invalid, and produces undefined behaviour.\n//      string2.Format(_T(\"String1 is: %s\"), string1); // No! you can't do this\n//\n//      // This is ok\n//      string2.Format(_T(\"String1 is: %s\"), (LPCTSTR)string1); // Yes, this is correct\n//\n//    Note: The MFC/ATL CString class uses a non portable hack to make its CString class \n//          behave like a POD. Other compilers (such as the MinGW compiler) specifically\n//          prohibit the use of non POD types for functions with variable argument lists.\n//\n// 4) This class provides a few additional functions:\n//       b_str\t\t\tReturns a BSTR string. This an an alternative for casting to BSTR.\n//       c_str\t\t\tReturns a const TCHAR string. This is an alternative for casting to LPCTSTR.\n//       GetErrorString\tAssigns CString to the error string for the specified System Error Code \n//                      (from ::GetLastErrror() for example).\n//       GetString\t\tReturns a reference to the underlying std::basic_string<TCHAR>. This \n//\t\t\t\t\t\treference can be used to modify the string directly.\n\n\n\n#ifndef _WIN32XX_CSTRING_H_\n#define _WIN32XX_CSTRING_H_\n\n\n#include \"wincore.h\"\n\n\nnamespace Win32xx\n{\n\n\tclass CString \n\t{\n\t\t// friend functions allow the left hand side to be something other than CString\n\t\tfriend CString operator + (const CString& string1, const CString& string2);\n\t\tfriend CString operator + (const CString& string, LPCTSTR pszText);\t\n\t\tfriend CString operator + (const CString& string, TCHAR ch);\n\t\tfriend CString operator + (LPCTSTR pszText, const CString& string);\n\t\tfriend CString operator + (TCHAR ch, const CString& string);\t\t\n\n\tpublic:\n\t\tCString();\n\t\t~CString();\n\t\tCString(const CString& str);\n\t\tCString(LPCTSTR pszText);\n\t\tCString(TCHAR ch, int nLength = 1);\n\t\tCString(LPCTSTR pszText, int nLength);\n\n\t\tCString& operator = (const CString& str);\n\t\tCString& operator = (const TCHAR ch);\n\t\tCString& operator = (LPCTSTR pszText);\n\t\tBOOL     operator == (LPCTSTR pszText);\n\t\tBOOL     operator != (LPCTSTR pszText);\n\t\tBOOL\t operator < (LPCTSTR pszText);\n\t\tBOOL\t operator > (LPCTSTR pszText);\n\t\tBOOL\t operator <= (LPCTSTR pszText);\n\t\tBOOL\t operator >= (LPCTSTR pszText);\n\t\t\t\t operator LPCTSTR() const;\n\t\t\t\t operator BSTR() const;\n\t\tTCHAR&   operator [] (int nIndex);\n\t\tCString& operator += (const CString& str);\n\n\t\t// Attributes\n\t\tBSTR     b_str() const\t\t{ return T2W(m_str.c_str()); }\t// alternative for casting to BSTR\n\t\tLPCTSTR\t c_str() const\t\t{ return m_str.c_str(); }\t\t// alternative for casting to LPCTSTR\n\t\ttString& GetString()\t\t{ return m_str; }\t\t\t\t// returns a reference to the underlying std::basic_string<TCHAR>\n\t\tint      GetLength() const\t{ return (int)m_str.length(); }\t\t// returns the length in characters\n\n\t\t// Operations\n\t\tBSTR     AllocSysString() const;\n\t\tvoid\t AppendFormat(LPCTSTR pszFormat,...);\n\t\tvoid\t AppendFormat(UINT nFormatID, ...);\n\t\tint      Compare(LPCTSTR pszText) const;\n\t\tint      CompareNoCase(LPCTSTR pszText) const;\n\t\tint      Delete(int nIndex, int nCount = 1);\n\t\tint\t\t Find(TCHAR ch, int nIndex = 0 ) const;\n\t\tint      Find(LPCTSTR pszText, int nStart = 0) const;\n\t\tint\t\t FindOneOf(LPCTSTR pszText) const;\n\t\tvoid\t Format(UINT nID, ...);\n\t\tvoid     Format(LPCTSTR pszFormat,...);\n\t\tvoid     FormatV(LPCTSTR pszFormat, va_list args);\n\t\tvoid\t FormatMessage(LPCTSTR pszFormat,...);\n\t\tvoid\t FormatMessageV(LPCTSTR pszFormat, va_list args);\n\t\tTCHAR\t GetAt(int nIndex) const;\n\t\tLPTSTR\t GetBuffer(int nMinBufLength);\n\t\tvoid\t GetErrorString(DWORD dwError);\n\t\tvoid     Empty();\n\t\tint      Insert(int nIndex, TCHAR ch);\n\t\tint      Insert(int nIndex, const CString& str);\n\t\tBOOL     IsEmpty() const;\n\t\tCString  Left(int nCount) const;\n\t\tBOOL\t LoadString(UINT nID);\n\t\tvoid     MakeLower();\n\t\tvoid\t MakeReverse();\n\t\tvoid     MakeUpper();\n\t\tCString\t Mid(int nFirst) const;\n\t\tCString  Mid(int nFirst, int nCount) const;\n\t\tvoid\t ReleaseBuffer( int nNewLength = -1 );\n\t\tint      Remove(LPCTSTR pszText);\n\t\tint      Replace(TCHAR chOld, TCHAR chNew);\n\t\tint      Replace(const LPCTSTR pszOld, LPCTSTR pszNew);\n\t\tint      ReverseFind(LPCTSTR pszText, int nStart = -1) const;\n\t\tCString  Right(int nCount) const;\n\t\tvoid\t SetAt(int nIndex, TCHAR ch);\n\t\tBSTR\t SetSysString(BSTR* pBstr) const;\n\t\tCString\t SpanExcluding(LPCTSTR pszText) const;\n\t\tCString\t SpanIncluding(LPCTSTR pszText) const;\n\t\tCString\t Tokenize(LPCTSTR pszTokens, int& iStart) const;\n\t\tvoid\t Trim();\n\t\tvoid\t TrimLeft();\n\t\tvoid\t TrimLeft(TCHAR chTarget);\n\t\tvoid\t TrimLeft(LPCTSTR pszTargets);\n\t\tvoid\t TrimRight();\n\t\tvoid\t TrimRight(TCHAR chTarget);\n\t\tvoid\t TrimRight(LPCTSTR pszTargets);\n\t\tvoid     Truncate(int nNewLength);\n\n#ifndef _WIN32_WCE\n\t\tint      Collate(LPCTSTR pszText) const;\n\t\tint\t\t CollateNoCase(LPCTSTR pszText) const;\n\t\tBOOL\t GetEnvironmentVariable(LPCTSTR pszVar);\n#endif\n\n\tprivate:\n\t\ttString m_str;\n\t\tstd::vector<TCHAR> m_buf;\n\t};\n\n\tinline CString::CString()\n\t{\n\t}\n\n\tinline CString::~CString()\n\t{\n\t}\n\n\tinline CString::CString(const CString& str)\n\t{\n\t\tm_str.assign(str);\n\t}\n\n\tinline CString::CString(LPCTSTR pszText)\n\t{\n\t\tm_str.assign(pszText);\n\t}\n\n\tinline CString::CString(TCHAR ch, int nLength)\n\t{\n\t\tm_str.assign(nLength, ch);\n\t}\n\t\n\tinline CString::CString(LPCTSTR pszText, int nLength)\n\t{\n\t\tm_str.assign(pszText, nLength);\t\n\t}\n\n\tinline CString& CString::operator = (const CString& str)\n\t{\n\t\tm_str.assign(str);\n\t\treturn *this;\n\t}\n\n\tinline CString& CString::operator = (const TCHAR ch)\n\t{\n\t\tm_str.assign(1, ch);\n\t\treturn *this;\n\t}\n\n\tinline CString& CString::operator = (LPCTSTR pszText)\n\t{\n\t\tm_str.assign(pszText);\n\t\treturn *this;\n\t}\n\n\tinline BOOL CString::operator == (LPCTSTR pszText)\n\t// Returns TRUE if the strings have the same content\n\t{\n\t\tassert(pszText);\n\t\treturn (0 == Compare(pszText));\n\t}\n\n\tinline BOOL CString::operator != (LPCTSTR pszText)\n\t// Returns TRUE if the strings have a different content\n\t{\n\t\tassert(pszText);\n        return Compare(pszText) != 0;\n\t}\n\n\tinline BOOL CString::operator < (LPCTSTR pszText)\n\t{\n\t\tassert(pszText);\n\t\treturn Compare(pszText) < 0;\n\t}\n\n\tinline BOOL CString::operator > (LPCTSTR pszText)\n\t{\n\t\tassert(pszText);\n\t\treturn Compare(pszText) > 0;\n\t}\n\n\tinline BOOL CString::operator <= (LPCTSTR pszText)\n\t{\n\t\tassert(pszText);\n\t\treturn Compare(pszText) <= 0;\n\t}\n\n\tinline BOOL CString::operator >= (LPCTSTR pszText)\n\t{\n\t\tassert(pszText);\n\t\treturn Compare(pszText) >= 0;\n\t}\n\n\tinline CString::operator LPCTSTR() const\n\t{\n\t\treturn m_str.c_str();\n\t}\n\n\tinline TCHAR& CString::operator [] (int nIndex)\n\t{\n\t\tassert(nIndex >= 0);\n\t\tassert(nIndex < GetLength());\n\t\treturn m_str[nIndex];\n\t}\n\n\tinline CString& CString::operator += (const CString& str)\n\t{\n\t\tm_str.append(str);\n\t\treturn *this;\n\t}\n\n\tinline BSTR CString::AllocSysString() const\n\t// Allocates a BSTR from the CString content.\n\t{\n\t\treturn ::SysAllocStringLen(T2W(m_str.c_str()), (UINT)m_str.size());\n\t}\n\n\tinline void CString::AppendFormat(LPCTSTR pszFormat,...)\n\t// Appends formatted data to an the CString content.\n\t{\n\t\tCString str;\n\t\tstr.Format(pszFormat);\n\t\tm_str.append(str);\n\t}\n\n\tinline void CString::AppendFormat(UINT nFormatID, ...)\n\t// Appends formatted data to an the CString content.\n\t{\n\t\tCString str1;\n\t\tCString str2;\n\t\tif (str1.LoadString(nFormatID))\n\t\t{\n\t\t\tstr2.Format(str1);\n\t\t\tm_str.append(str2);\n\t\t}\n\t}\n\n#ifndef _WIN32_WCE\n\tinline int CString::Collate(LPCTSTR pszText) const\n\t// Performs a case sensitive comparison of the two strings using locale-specific information.\n\t{\n\t\tassert(pszText);\n\t\treturn _tcscoll(m_str.c_str(), pszText);\n\t}\n\n\tinline int CString::CollateNoCase(LPCTSTR pszText) const\n\t// Performs a case insensitive comparison of the two strings using locale-specific information.\n\t{\n\t\tassert(pszText);\n\t\treturn _tcsicoll(m_str.c_str(), pszText);\n\t}\n#endif\t// _WIN32_WCE\n\n\tinline int CString::Compare(LPCTSTR pszText) const\n\t// Performs a case sensitive comparison of the two strings.\n\t{\n\t\tassert(pszText);\n\t\treturn m_str.compare(pszText);\n\t}\n\n\tinline int CString::CompareNoCase(LPCTSTR pszText) const\n\t// Performs a case insensitive comparison of the two strings.\n\t{\n\t\tassert(pszText);\n\t\treturn _tcsicmp(m_str.data(), pszText);\n\t}\n\n\tinline int CString::Delete(int nIndex, int nCount /* = 1 */)\n\t// Deletes a character or characters from the string.\n\t{\n\t\tassert(nIndex >= 0);\n\t\tassert(nCount >= 0);\n\n\t\tm_str.erase(nIndex, nCount);\n\t\treturn (int)m_str.size();\n\t}\n\n\tinline void CString::Empty()\n\t// Erases the contents of the string.\n\t{\n\t\tm_str.erase();\n\t}\n\n\tinline int CString::Find(TCHAR ch, int nIndex /* = 0 */) const\n\t// Finds a character in the string.\n\t{\n\t\tassert(nIndex >= 0);\n\t\treturn (int)m_str.find(ch, nIndex);\n\t}\n\n\tinline int CString::Find(LPCTSTR pszText, int nIndex /* = 0 */) const\n\t// Finds a substring within the string. \n\t{\n\t\tassert(pszText);\n\t\tassert(nIndex >= 0);\n\t\treturn (int)m_str.find(pszText, nIndex);\n\t}\n\n\tinline int CString::FindOneOf(LPCTSTR pszText) const\n\t// Finds the first matching character from a set.\n\t{\n\t\tassert(pszText);\n\t\treturn (int)m_str.find_first_of(pszText);\n\t}\n\n\tinline void CString::Format(LPCTSTR pszFormat,...)\n\t// Formats the string as sprintf does.\n\t{\n\t\tva_list args;\n\t\tva_start(args, pszFormat);\n\t\tFormatV(pszFormat, args);\n\t\tva_end(args);\n\t}\n\n\tinline void CString::Format(UINT nID, ...)\n\t// Formats the string as sprintf does.\n\t{\n\t\tEmpty();\n\t\tCString str;\n\t\tif (str.LoadString(nID))\n\t\t\tFormat(str);\n\t}\n\n\tinline void CString::FormatV(LPCTSTR pszFormat, va_list args)\n\t// Formats the string using a variable list of arguments.\n\t{\n\t\tif (pszFormat)\n\t\t{\n\t\t\tint nResult = -1, nLength = 256;\n\n\t\t\t// A vector is used to store the TCHAR array\n\t\t\tstd::vector<TCHAR> vBuffer;( nLength+1, _T('\\0') );\n\n\t\t\twhile (-1 == nResult)\n\t\t\t{\n\t\t\t\tvBuffer.assign( nLength+1, _T('\\0') );\n\t\t\t\tnResult = _vsntprintf(&vBuffer[0], nLength, pszFormat, args);\n\t\t\t\tnLength *= 2;\n\t\t\t}\n\t\t\tm_str.assign(&vBuffer[0]);\n\t\t}\n\t}\n\n\tinline void CString::FormatMessage(LPCTSTR pszFormat,...)\n\t// Formats a message string.\n\t{\n\t\tva_list args;\n\t\tva_start(args, pszFormat);\n\t\tFormatMessageV(pszFormat, args);\n\t\tva_end(args);\n\t}\n\n\tinline void CString::FormatMessageV(LPCTSTR pszFormat, va_list args)\n\t// Formats a message string using a variable argument list.\n\t{\n\t\tLPTSTR pszTemp = 0;\n\t\tif (pszFormat)\n\t\t{\n\t\t\tDWORD dwResult = ::FormatMessage(FORMAT_MESSAGE_FROM_STRING|FORMAT_MESSAGE_ALLOCATE_BUFFER, pszFormat, 0, 0, pszTemp, 0, &args);\n\n\t\t\tif (0 == dwResult || 0 == pszTemp )\n\t\t\t\tthrow std::bad_alloc();\n\n\t\t\tm_str = pszTemp;\n\t\t\tLocalFree(pszTemp);\n\t\t}\n\t}\n\n\tinline TCHAR CString::GetAt(int nIndex) const\n\t// Returns the character at the specified location within the string.\n\t{\n\t\tassert(nIndex >= 0);\n\t\tassert(nIndex < GetLength());\n\t\treturn m_str[nIndex];\n\t}\n\n\tinline LPTSTR CString::GetBuffer(int nMinBufLength)\n\t// Creates a buffer of nMinBufLength charaters (+1 extra for NULL termination) and returns \n\t// a pointer to this buffer. This buffer can be used by any function which accepts a LPTSTR.\n\t// Care must be taken not to exceed the length of the buffer. Use ReleaseBuffer to safely \n\t// copy this buffer back to the CString object.\n\t//\n\t// Note: The buffer uses a vector. Vectors are required to be contiguous in memory under\n\t//       the current standard, whereas std::strings do not have this requirement.\n\t{\n\t\tassert (nMinBufLength >= 0);\n\t\t\n\t\tm_buf.assign(nMinBufLength + 1, _T('\\0'));\n\t\ttString::iterator it_end;\n\n\t\tif (m_str.length() >= (size_t)nMinBufLength)\n\t\t{\n\t\t\tit_end = m_str.begin();\n\t\t\tstd::advance(it_end, nMinBufLength);\n\t\t}\n\t\telse\n\t\t\tit_end = m_str.end();\n\t\t\n\t\tstd::copy(m_str.begin(), it_end, m_buf.begin());\n\n\t\treturn &m_buf[0];\n\t}\n\n#ifndef _WIN32_WCE\n\tinline BOOL CString::GetEnvironmentVariable(LPCTSTR pszVar)\n\t// Sets the string to the value of the specified environment variable.\n\t{\n\t\tassert(pszVar);\n\t\tEmpty();\n\n\t\tint nLength = ::GetEnvironmentVariable(pszVar, NULL, 0);\n\t\tif (nLength > 0)\n\t\t{\n\t\t\tstd::vector<TCHAR> vBuffer( nLength+1, _T('\\0') );\n\t\t\t::GetEnvironmentVariable(pszVar, &vBuffer[0], nLength);\n\t\t\tm_str = &vBuffer[0];\n\t\t}\n\n\t\treturn (BOOL)nLength;\n\t}\n#endif // _WIN32_WCE\n\n\tinline void CString::GetErrorString(DWORD dwError)\n\t// Returns the error string for the specified System Error Code (e.g from GetLastErrror).\n\t{\n\t\tm_str.erase();\n\t\t\n\t\tif (dwError != 0)\n\t\t{\n\t\t\tTCHAR* pTemp = 0;\n\t\t\tDWORD dwFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS;\n\t\t\t::FormatMessage(dwFlags, NULL, dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&pTemp, 1, NULL);\n\t\t\tm_str.assign(pTemp);\n\t\t\t::LocalFree(pTemp);\n\t\t}\n\t}\n\t\n\tinline int CString::Insert(int nIndex, TCHAR ch)\n\t// Inserts a single character or a substring at the given index within the string.\n\t{\n\t\tassert(nIndex >= 0);\n\t\tassert(ch);\n\n\t\tm_str.insert(nIndex, &ch, 1);\n\t\treturn (int)m_str.size();\n\t}\n\n\tinline int CString::Insert(int nIndex, const CString& str)\n\t// Inserts a single character or a substring at the given index within the string.\n\t{\n\t\tassert(nIndex >= 0);\n\n\t\tm_str.insert(nIndex, str);\n\t\treturn (int)m_str.size();\n\t}\n\n\tinline BOOL CString::IsEmpty() const\n\t// Returns TRUE if the string is empty\n\t{\n\t\treturn m_str.empty();\n\t}\n\n\tinline CString CString::Left(int nCount) const\n\t// Extracts the left part of a string.\n\t{\n\t\tassert(nCount >= 0);\n\n\t\tCString str;\n\t\tstr.m_str.assign(c_str(), 0, nCount);\n\t\treturn str;\n\t}\n\n\tinline BOOL CString::LoadString(UINT nID)\n\t// Loads the string from a Windows resource.\n\t{\n\t\tassert (GetApp());\n\n\t\tint nSize = 64;\n\t\tTCHAR* pTCharArray = 0;\n\t\tstd::vector<TCHAR> vString;\n\t\tint nTChars = nSize;\n\n\t\tEmpty();\n\n\t\t// Increase the size of our array in a loop until we load the entire string\n\t\t// The ANSI and _UNICODE versions of LoadString behave differently. This technique works for both.\n\t\twhile ( nSize-1 <= nTChars )\n\t\t{\n\t\t\tnSize = nSize * 4;\n\t\t\tvString.assign(nSize+1, _T('\\0'));\n\t\t\tpTCharArray = &vString[0];\n\t\t\tnTChars = ::LoadString (GetApp()->GetResourceHandle(), nID, pTCharArray, nSize);\n\t\t}\n\n\t\tif (nTChars > 0)\n\t\t\tm_str.assign(pTCharArray);\n\n\t\treturn (nTChars != 0);\n\t}\n\n\tinline void CString::MakeLower()\n\t// Converts all the characters in this string to lowercase characters.\n\t{\n\t\tstd::transform(m_str.begin(), m_str.end(), m_str.begin(), &::tolower);\n\t}\n\n\tinline void CString::MakeReverse()\n\t// Reverses the string.\n\t{\n\t\tstd::reverse(m_str.begin(), m_str.end());\n\t}\n\n\tinline void CString::MakeUpper()\n\t// Converts all the characters in this string to uppercase characters.\n\t{\n\t\tstd::transform(m_str.begin(), m_str.end(), m_str.begin(), &::toupper);\n\t}\n\n\tinline CString CString::Mid(int nFirst) const\n\t// Extracts the middle part of a string.\n\t{\n\t\treturn Mid(nFirst, GetLength());\n\t}\n\n\tinline CString CString::Mid(int nFirst, int nCount) const\n\t// Extracts the middle part of a string.\n\t{\n\t\tassert(nFirst >= 0);\n\t\tassert(nCount >= 0);\n\n\t\tCString str;\n\t\tstr.m_str.assign(c_str(), nFirst, nFirst + nCount);\n\t\treturn str;\n\t}\n\n\tinline int CString::ReverseFind(LPCTSTR pszText, int nIndex /* = -1 */) const\n\t// Search for a substring within the string, starting from the end.\n\t{\n\t\tassert(pszText);\n\t\treturn (int)m_str.rfind(pszText, nIndex);\n\t}\n\n\tinline void CString::SetAt(int nIndex, TCHAR ch)\n\t// Sets the character at the specificed position to the specified value.\n\t{\n\t\tassert(nIndex >= 0);\n\t\tassert(nIndex < GetLength());\n\t\tm_str[nIndex] = ch;\n\t}\n\n\tinline void CString::ReleaseBuffer( int nNewLength /*= -1*/ )\n\t// This copies the contents of the buffer (acquired by GetBuffer) to this CString,\n\t// and releases the contents of the buffer. The default length of -1 copies from the\n\t// buffer until a null terminator is reached. If the buffer doesn't contain a null\n\t// terminator, you must specify the buffer's length.\n\t{\n\t\tassert (nNewLength > 0 || -1 == nNewLength);\n\t\tassert (nNewLength < (int)m_buf.size());\n\n\t\tif (-1 == nNewLength)\n\t\t\tnNewLength = lstrlen(&m_buf[0]);\n\t\tm_str.assign(nNewLength+1, _T('\\0'));\n\n\t\tstd::vector<TCHAR>::iterator it_end = m_buf.begin();\n\t\tstd::advance(it_end, nNewLength);\n\t\t\n\t\tstd::copy(m_buf.begin(), it_end, m_str.begin());\n\t\tm_buf.clear();\n\t}\n\n\tinline int CString::Remove(LPCTSTR pszText)\n\t// Removes each occurrence of the specified substring from the string.\n\t{\n\t\tassert(pszText);\n\n\t\tint nCount = 0;\n\t\tsize_t pos = 0;\n\t\twhile ((pos = m_str.find(pszText, pos)) != std::string::npos)\n\t\t{\n\t\t\tm_str.erase(pos, lstrlen(pszText));\n\t\t\t++nCount;\n\t\t}\n\t\treturn nCount;\n\t}\n\n\tinline int CString::Replace(TCHAR chOld, TCHAR chNew)\n\t// Replaces each occurance of the old character with the new character.\n\t{\n\t\tint nCount = 0;\n\t\ttString::iterator it = m_str.begin();\n\t\twhile (it != m_str.end())\n\t\t{\n\t\t\tif (*it == chOld)\n\t\t\t{\n\t\t\t\t*it = chNew;\n\t\t\t\t++nCount;\n\t\t\t}\n\t\t\t++it;\n\t\t}\n\t\treturn nCount;\n\t}\n\n\tinline int CString::Replace(LPCTSTR pszOld, LPCTSTR pszNew)\n\t// Replaces each occurance of the old substring with the new substring.\n\t{\n\t\tassert(pszOld);\n\t\tassert(pszNew);\n\n\t\tint nCount = 0;\n\t\tsize_t pos = 0;\n\t\twhile ((pos = m_str.find(pszOld, pos)) != std::string::npos)\n\t\t{\n\t\t\tm_str.replace(pos, lstrlen(pszOld), pszNew);\n\t\t\tpos += lstrlen(pszNew);\n\t\t\t++nCount;\n\t\t}\n\t\treturn nCount;\n\t}\n\n\tinline CString CString::Right(int nCount) const\n\t// Extracts the right part of a string.\n\t{\n\t\tassert(nCount >= 0);\n\n\t\tCString str;\n\t\tstr.m_str.assign(c_str(), m_str.size() - nCount, nCount);\n\t\treturn str;\n\t}\n\n\tinline BSTR CString::SetSysString(BSTR* pBstr) const\n\t// Sets an existing BSTR object to the string.\n\t{\n\t\tassert(pBstr);\n\n\t\tif ( !::SysReAllocStringLen(pBstr, T2W(m_str.c_str()), (UINT)m_str.length()) )\n\t\t\tthrow std::bad_alloc();\n\n\t\treturn *pBstr;\n\t}\n\n\tinline CString CString::SpanExcluding(LPCTSTR pszText) const\n\t// Extracts characters from the string, starting with the first character, \n\t// that are not in the set of characters identified by pszCharSet.\n\t{\n\t\tassert (pszText);\n\n\t\tCString str;\n\t\tsize_t pos = 0;\n\n\t\twhile ((pos = m_str.find_first_not_of(pszText, pos)) != std::string::npos)\n\t\t{\n\t\t\tstr.m_str.append(1, m_str[pos++]);\n\t\t}\n\n\t\treturn str;\n\t}\n\n\tinline CString CString::SpanIncluding(LPCTSTR pszText) const\n\t// Extracts a substring that contains only the characters in a set.\n\t{\n\t\tassert (pszText);\n\n\t\tCString str;\n\t\tsize_t pos = 0;\n\n\t\twhile ((pos = m_str.find_first_of(pszText, pos)) != std::string::npos)\n\t\t{\n\t\t\tstr.m_str.append(1, m_str[pos++]);\n\t\t}\n\n\t\treturn str;\n\t}\n\n\tinline CString CString::Tokenize(LPCTSTR pszTokens, int& iStart) const\n\t// Extracts specified tokens in a target string.\n\t{\n\t\tassert(pszTokens);\n\t\tassert(iStart >= 0);\n\n\t\tCString str;\n\t\tsize_t pos1 = m_str.find_first_not_of(pszTokens, iStart);\n\t\tsize_t pos2 = m_str.find_first_of(pszTokens, pos1);\n\n\t\tiStart = (int)pos2 + 1;\n\t\tif (pos2 == m_str.npos)\n\t\t\tiStart = -1;\n\n\t\tif (pos1 != m_str.npos)\n\t\t\tstr.m_str = m_str.substr(pos1, pos2-pos1);\n\n\t\treturn str;\n\t}\n\n\tinline void CString::Trim()\n\t// Trims all leading and trailing whitespace characters from the string.\n\t{\n\t\tTrimLeft();\n\t\tTrimRight();\n\t}\n\n\tinline void CString::TrimLeft()\n\t// Trims leading whitespace characters from the string.\n\t{\n\t\t// This method is supported by the Borland 5.5 compiler\n\t\ttString::iterator iter;\n\t\tfor (iter = m_str.begin(); iter < m_str.end(); ++iter)\n\t\t{\n\t\t\tif (!isspace(*iter))\n\t\t\t\tbreak;\n\t\t}\n\n\t\tm_str.erase(m_str.begin(), iter);\n\t}\n\n\tinline void CString::TrimLeft(TCHAR chTarget)\n\t// Trims the specified character from the beginning of the string.\n\t{\n\t\tm_str.erase(0, m_str.find_first_not_of(chTarget));\n\t}\n\n\tinline void CString::TrimLeft(LPCTSTR pszTargets)\n\t// Trims the specified set of characters from the beginning of the string. \n\t{\n\t\tassert(pszTargets);\n\t\tm_str.erase(0, m_str.find_first_not_of(pszTargets));\n\t}\n\n\tinline void CString::TrimRight()\n\t// Trims trailing whitespace characters from the string.\n\t{\n\t\t// This method is supported by the Borland 5.5 compiler\n\t\ttString::reverse_iterator riter;\n\t\tfor (riter = m_str.rbegin(); riter < m_str.rend(); ++riter)\n\t\t{\n\t\t\tif (!isspace(*riter))\n\t\t\t\tbreak;\n\t\t}\n\n\t\tm_str.erase(riter.base(), m_str.end());\n\t}\n\n\tinline void CString::TrimRight(TCHAR chTarget)\n\t// Trims the specified character from the end of the string.\n\t{\n\t\tsize_t pos = m_str.find_last_not_of(chTarget);\n\t\tif (pos != std::string::npos)\n\t\t\tm_str.erase(++pos);\n\t}\n\n\tinline void CString::TrimRight(LPCTSTR pszTargets)\n\t// Trims the specified set of characters from the end of the string.\n\t{\n\t\tassert(pszTargets);\n\n\t\tsize_t pos = m_str.find_last_not_of(pszTargets);\n\t\tif (pos != std::string::npos)\n\t\t\tm_str.erase(++pos);\n\t}\n\n\tinline void CString::Truncate(int nNewLength)\n\t// Reduces the length of the string to the specified amount.\n\t{\n\t\tif (nNewLength < GetLength())\n\t\t{\n\t\t\tassert(nNewLength >= 0);\n\t\t\tm_str.erase(nNewLength);\n\t\t}\n\t}\n\n\t\n\t///////////////////////////////////\n\t// Global Functions\n\t//\n\n\t// friend functions of CString\n\tinline CString operator + (const CString& string1, const CString& string2)\n\t{\n\t\tCString str(string1);\n\t\tstr.m_str.append(string2.m_str);\n\t\treturn str;\n\t}\n\n\tinline CString operator + (const CString& string, LPCTSTR pszText)\n\t{\n\t\tCString str(string);\n\t\tstr.m_str.append(pszText);\n\t\treturn str;\n\t}\n\t\n\tinline CString operator + (const CString& string, TCHAR ch)\n\t{\n\t\tCString str(string);\n\t\tstr.m_str.append(1, ch);\n\t\treturn str;\n\t}\n\t\n\tinline CString operator + (LPCTSTR pszText, const CString& string)\n\t{\n\t\tCString str(pszText);\n\t\tstr.m_str.append(string);\n\t\treturn str;\n\t}\n\t\n\tinline CString operator + (TCHAR ch, const CString& string)\n\t{\n\t\tCString str(ch);\n\t\tstr.m_str.append(string);\n\t\treturn str;\n\t}\t\n\n\t// Global LoadString\n\tinline CString LoadString(UINT nID)\n\t{\n\t\tCString str;\n\t\tstr.LoadString(nID);\n\t\treturn str;\n\t}\n\n\n}\t// namespace Win32xx\n\n#endif//_WIN32XX_CSTRING_H_\n"
  },
  {
    "path": "external/win32cpp/include/default_resource.h",
    "content": "// This file contains the resource ID definitions for Win32++.\n\n\n// The resource ID for MENU, ICON, ToolBar Bitmap, Accelerator,\n//  and Window Caption\n#define IDW_MAIN                        51\n\n// Resource ID for the About dialog\n#define IDW_ABOUT                        52\n\n// Resource IDs for menu items\n#define IDW_VIEW_TOOLBAR                 53\n#define IDW_VIEW_STATUSBAR               54\n\n// Resource IDs for the Command Bands\n#define IDW_CMD_BANDS                    55\n#define IDW_MENUBAR                      56\n#define IDW_TOOLBAR                      57\n\n// Resource ID for the Accelerator key\n#define IDW_QUIT                         58\n\n// Resource IDs for MDI menu items\n#define IDW_MDI_CASCADE                  60\n#define IDW_MDI_TILE                     61\n#define IDW_MDI_ARRANGE                  62\n#define IDW_MDI_CLOSEALL                 63\n#define IDW_FIRSTCHILD                   64\n#define IDW_CHILD2                       65\n#define IDW_CHILD3                       66\n#define IDW_CHILD4                       67\n#define IDW_CHILD5                       68\n#define IDW_CHILD6                       69\n#define IDW_CHILD7                       70\n#define IDW_CHILD8                       71\n#define IDW_CHILD9                       72\n#define IDW_CHILD10                      73\n\n#define IDW_FILE_MRU_FILE1               75\n#define IDW_FILE_MRU_FILE2               76\n#define IDW_FILE_MRU_FILE3               77\n#define IDW_FILE_MRU_FILE4               78\n#define IDW_FILE_MRU_FILE5               79\n#define IDW_FILE_MRU_FILE6               80\n#define IDW_FILE_MRU_FILE7               81\n#define IDW_FILE_MRU_FILE8               82\n#define IDW_FILE_MRU_FILE9               83\n#define IDW_FILE_MRU_FILE10              84\n#define IDW_FILE_MRU_FILE11              85\n#define IDW_FILE_MRU_FILE12              86\n#define IDW_FILE_MRU_FILE13              87\n#define IDW_FILE_MRU_FILE14              88\n#define IDW_FILE_MRU_FILE15              89\n#define IDW_FILE_MRU_FILE16              90\n\n// Cursor Resources\n#define IDW_SPLITH                       91\n#define IDW_SPLITV                       92\n#define IDW_TRACK4WAY                    93\n\n// Docking Bitmap Resources\n#define IDW_SDBOTTOM                     94\n#define IDW_SDCENTER                     95\n#define IDW_SDLEFT                       96\n#define IDW_SDMIDDLE                     97\n#define IDW_SDRIGHT                      98\n#define IDW_SDTOP                        99\n\n\n// A generic ID for any static control\n#ifndef IDC_STATIC\n  #define IDC_STATIC                     -1\n#endif\n\n\n\n// Notes about Resource IDs\n// * In general, resource IDs can have values from 1 to 65535. Programs with\n//   resource IDs higher than 65535 aren't supported on Windows 95\n//\n// * CMenuBar uses resource IDs beginning from 0 for the top level menu items.\n//   Win32++ leaves resource IDs below 51 unallocated for top level menu items.\n//\n// * Windows uses the icon with the lowest resource ID as the application's\n//   icon. The application's icon is IDW_MAIN, which is the first resource ID\n//   defined by Win32++.\n//\n// * When more than one static control is used in a dialog, the controls should\n//   have a unique ID, unless a resource ID of -1 is used.\n//\n// * Users of Win32++ are advised to begin their resource IDs from 120 to\n//   allow for possible expansion of Win32++.\n\n\n"
  },
  {
    "path": "external/win32cpp/include/default_resource.rc",
    "content": "// An example of a resource file\n//\n\n#include \"resource.h\"\n#include \"windows.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// RT_MANIFEST\n//\n\n1                       24      DISCARDABLE      \"res/Win32++.manifest\"\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Menu\n//\n\n\nIDW_MAIN MENU\nBEGIN\n    POPUP \"&File\"\n    BEGIN\n        MENUITEM \"New &View\",                   IDM_FILE_NEWVIEW\n        MENUITEM SEPARATOR\n        MENUITEM \"Recent Files\",                IDW_FILE_MRU_FILE1, GRAYED\n        MENUITEM SEPARATOR\n        MENUITEM \"E&xit\",                       IDM_FILE_EXIT\n    END\n    POPUP \"&Edit\"\n    BEGIN\n        MENUITEM \"Undo\\tCtrl+Z\",                IDM_EDIT_UNDO\n        MENUITEM \"Redo\\tShift+Ctrl+Z\",          IDM_EDIT_REDO\n        MENUITEM SEPARATOR\n        MENUITEM \"Cut\\tCtrl+X\",                 IDM_EDIT_CUT\n        MENUITEM \"Copy\\tCtrl+C\",                IDM_EDIT_COPY\n        MENUITEM \"Paste\\tCtrl+V\",               IDM_EDIT_PASTE\n        MENUITEM \"Delete\\tDel\",                 IDM_EDIT_DELETE\n    END\n    POPUP \"&View\"\n    BEGIN\n        MENUITEM \"&Tool Bar\",                   IDW_VIEW_TOOLBAR, CHECKED\n        MENUITEM \"&Status Bar\",                 IDW_VIEW_STATUSBAR, CHECKED\n    END\n    POPUP \"&Help\"\n    BEGIN\n        MENUITEM \"&About\",                      IDM_HELP_ABOUT\n    END\nEND\n\nMDIMENUVIEW MENU\nBEGIN\n    POPUP \"&File\"\n    BEGIN\n        MENUITEM \"New &View\",                   IDM_FILE_NEWVIEW\n        MENUITEM \"&Close\",                      IDM_FILE_CLOSE\n        MENUITEM SEPARATOR\n        MENUITEM \"E&xit\",                       IDM_FILE_EXIT\n    END\n    POPUP \"&Edit\"\n    BEGIN\n        MENUITEM \"Undo\",                        IDM_EDIT_UNDO\n        MENUITEM \"Redo\",                        IDM_EDIT_REDO\n        MENUITEM SEPARATOR\n        MENUITEM \"Cu&t\",                        IDM_EDIT_CUT\n        MENUITEM \"&Copy\",                       IDM_EDIT_COPY\n        MENUITEM \"&Paste\",                      IDM_EDIT_PASTE\n        MENUITEM \"De&lete\",                     IDM_EDIT_DELETE\n    END\n    POPUP \"&View\"\n    BEGIN\n        MENUITEM \"Tool Bar\",                    IDW_VIEW_TOOLBAR, CHECKED\n        MENUITEM \"Status Bar\",                  IDW_VIEW_STATUSBAR, CHECKED\n    END\n    POPUP \"&Color\"\n    BEGIN\n        MENUITEM \"&Black\",                      IDM_COLOR_BLACK\n        MENUITEM \"&Red\",                        IDM_COLOR_RED\n        MENUITEM \"&Green\",                      IDM_COLOR_GREEN\n        MENUITEM \"B&lue\",                       IDM_COLOR_BLUE\n        MENUITEM \"&White\",                      IDM_COLOR_WHITE\n    END\n    POPUP \"&Window\"\n    BEGIN\n        MENUITEM \"&Cascade\\tShift+F5\",          IDW_WINDOW_CASCADE\n        MENUITEM \"&Tile\\tShift+F4\",             IDW_WINDOW_TILE\n        MENUITEM \"Arrange &Icons\",              IDW_WINDOW_ARRANGE\n        MENUITEM \"Close &All\",                  IDW_WINDOW_CLOSEALL\n    END\n    POPUP \"&Help\"\n    BEGIN\n        MENUITEM \"About\",                       IDM_HELP_ABOUT\n    END\nEND\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Icon\n//\n\n// Icon with lowest ID value placed first to ensure application icon\n// remains consistent on all systems.\nIDW_MAIN                 ICON                    \"res/mdi.ico\"\nIDI_VIEW                 ICON                    \"res/view.ico\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Bitmap\n//\n\nIDW_MAIN                 BITMAP                  \"res/toolbar.bmp\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Dialog\n//\n\nIDW_ABOUT DIALOGEX 0, 0, 186, 90\nSTYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |\n    WS_SYSMENU\nCAPTION \"About\"\nFONT 8, \"MS Shell Dlg\", 400, 0\nBEGIN\n    DEFPUSHBUTTON   \"OK\",IDOK,68,49,50,14\n    CTEXT           \"MDI Frame\",IDC_STATIC,60,22,64,11\n    ICON            IDW_MAIN,0,4,4,20,20\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Accelerator\n//\n\nIDW_MAIN ACCELERATORS\nBEGIN\n    \"N\",            IDM_FILE_NEW,           VIRTKEY, CONTROL, NOINVERT\n    \"O\",            IDM_FILE_OPEN,          VIRTKEY, CONTROL, NOINVERT\n    \"P\",            IDM_FILE_PRINT,         VIRTKEY, CONTROL, NOINVERT\n    \"S\",            IDM_FILE_SAVE,          VIRTKEY, CONTROL, NOINVERT\n    \"C\",            IDM_EDIT_COPY,          VIRTKEY, CONTROL, NOINVERT\n    \"X\",            IDM_EDIT_CUT,           VIRTKEY, CONTROL, NOINVERT\n    \"V\",            IDM_EDIT_PASTE,         VIRTKEY, CONTROL, NOINVERT\n    \"Z\",            IDM_EDIT_UNDO,          VIRTKEY, CONTROL, NOINVERT\n    \"Y\",            IDM_EDIT_REDO,          VIRTKEY, SHIFT, CONTROL, NOINVERT\n    VK_DELETE,      IDM_EDIT_DELETE,        VIRTKEY, NOINVERT\nEND\n\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// String Table\n//\n\nSTRINGTABLE\nBEGIN\n    IDW_MAIN                 \"MDI Frame\"\nEND\n\nSTRINGTABLE\nBEGIN\n    IDM_FILE_NEW            \"Create a New Document\"\n    IDM_FILE_OPEN           \"Open Existing Document\"\n    IDM_FILE_SAVE           \"Save the Document\"\n    IDM_FILE_SAVEAS         \"Save the Document with a new name\"\n    IDM_FILE_PRINT          \"Print the Document\"\n    IDM_FILE_EXIT           \"End the Program\"\nEND\n\nSTRINGTABLE\nBEGIN\n    IDM_EDIT_UNDO           \"Undo the last action\"\n    IDM_EDIT_REDO           \"Redo the previously undone action\"\n    IDM_EDIT_CUT            \"Cut the Selected Contents to the Clipboard\"\n    IDM_EDIT_COPY           \"Copy the Selected Contents to the Clipboard\"\n    IDM_EDIT_PASTE          \"Paste the Clipboard Contents to the Document\"\n    IDM_EDIT_DELETE         \"Erase the selected Contents\"\n    IDW_VIEW_TOOLBAR        \"Show or hide the tool bar\"\n    IDW_VIEW_STATUSBAR      \"Show or hide the status bar\"\nEND\n\nSTRINGTABLE\nBEGIN\n    IDM_HELP_ABOUT          \"Display Information about this program\"\nEND\n\nSTRINGTABLE\nBEGIN\n    IDW_FIRSTCHILD          \"Activate this window\"\n    IDW_CHILD2              \"Activate this window\"\n    IDW_CHILD3              \"Activate this window\"\n    IDW_CHILD4              \"Activate this window\"\n    IDW_CHILD5              \"Activate this window\"\n    IDW_CHILD6              \"Activate this window\"\n    IDW_CHILD7              \"Activate this window\"\n    IDW_CHILD8              \"Activate this window\"\n    IDW_CHILD9              \"Activate this window\"\n    IDW_CHILD10             \"Select a window\"\nEND\n\nSTRINGTABLE\nBEGIN\n    IDM_FILE_NEWVIEW        \"Create View MDI Child\"\n    IDM_FILE_CLOSE          \"Close MDI Window\"\n    IDM_COLOR_BLACK         \"Use Black Printing\"\n    IDM_COLOR_RED           \"Use Red Printing\"\n    IDM_COLOR_GREEN         \"Use Green Printing\"\n    IDM_COLOR_BLUE          \"Use Blue Printing\"\n    IDM_COLOR_WHITE         \"Use White Printing\"\n    IDW_WINDOW_CASCADE      \"Cascade MDI Windows\"\n    IDW_WINDOW_TILE         \"Tile MDI Windows\"\n    IDW_WINDOW_ARRANGE      \"Arrange Icons\"\n    IDW_WINDOW_CLOSEALL     \"Close All MDI Windows\"\nEND\n\nSTRINGTABLE\nBEGIN\n    SC_CLOSE                \"Close the Window\"\n    SC_MAXIMIZE             \"Maximize the Window\"\n    SC_MINIMIZE             \"Minimize the WIndow\"\n    SC_MOVE                 \"Move the Window\"\n    SC_NEXTWINDOW           \"Select Next Window\"\n    SC_PREVWINDOW           \"Select Previous Window\"\n    SC_RESTORE              \"Restore the Window\"\n    SC_SIZE                 \"Resize the Window\"\nEND\n\nSTRINGTABLE\nBEGIN\n    IDW_FILE_MRU_FILE1       \"Open this document\"\n    IDW_FILE_MRU_FILE2       \"Open this document\"\n    IDW_FILE_MRU_FILE3       \"Open this document\"\n    IDW_FILE_MRU_FILE4       \"Open this document\"\n    IDW_FILE_MRU_FILE5       \"Open this document\"\n    IDW_FILE_MRU_FILE6       \"Open this document\"\n    IDW_FILE_MRU_FILE7       \"Open this document\"\n    IDW_FILE_MRU_FILE8       \"Open this document\"\n    IDW_FILE_MRU_FILE9       \"Open this document\"\n    IDW_FILE_MRU_FILE10      \"Open this document\"\n    IDW_FILE_MRU_FILE11      \"Open this document\"\n    IDW_FILE_MRU_FILE12      \"Open this document\"\n    IDW_FILE_MRU_FILE13      \"Open this document\"\n    IDW_FILE_MRU_FILE14      \"Open this document\"\n    IDW_FILE_MRU_FILE15      \"Open this document\"\n    IDW_FILE_MRU_FILE16      \"Open this document\"\nEND\n\n\n"
  },
  {
    "path": "external/win32cpp/include/dialog.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n\n////////////////////////////////////////////////////////\n// dialog.h\n//  Declaration of the CDialog class\n\n// CDialog adds support for dialogs to Win32++. Dialogs are specialised\n// windows which are a parent window for common controls. Common controls\n// are special window types such as buttons, edit controls, tree views,\n// list views, static text etc.\n\n// The layout of a dialog is typically defined in a resource script file\n// (often Resource.rc). While this script file can be constructed manually,\n// it is often created using a resource editor. If your compiler doesn't\n// include a resource editor, you might find ResEdit useful. It is a free\n// resource editor available for download at:\n// http://www.resedit.net/\n\n// CDialog supports modal and modeless dialogs. It also supports the creation\n// of dialogs defined in a resource script file, as well as those defined in\n// a dialog template.\n\n// Use the Dialog generic program as the starting point for your own dialog\n// applications.\n// The DlgSubclass sample demonstrates how to use subclassing to customise\n// the behaviour of common controls in a dialog.\n\n\n#ifndef _WIN32XX_DIALOG_H_\n#define _WIN32XX_DIALOG_H_\n\n#include \"wincore.h\"\n\n#ifndef SWP_NOCOPYBITS\n\t#define SWP_NOCOPYBITS      0x0100\n#endif\n\nnamespace Win32xx\n{\n\n\tclass CDialog : public CWnd\n\t{\n\tpublic:\n\t\tCDialog(UINT nResID, CWnd* pParent = NULL);\n\t\tCDialog(LPCTSTR lpszResName, CWnd* pParent = NULL);\n\t\tCDialog(LPCDLGTEMPLATE lpTemplate, CWnd* pParent = NULL);\n\t\tvirtual ~CDialog();\n\n\t\t// You probably won't need to override these functions\n\t\tvirtual void AttachItem(int nID, CWnd& Wnd);\n\t\tvirtual HWND Create(CWnd* pParent = NULL);\n\t\tvirtual INT_PTR DoModal();\n\t\tvirtual HWND DoModeless();\n\t\tvirtual void SetDlgParent(CWnd* pParent);\n\t\tBOOL IsModal() const { return m_IsModal; }\n\t\tBOOL IsIndirect() const { return (NULL != m_lpTemplate); }\n\n\tprotected:\n\t\t// These are the functions you might wish to override\n\t\tvirtual INT_PTR DialogProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\t\tvirtual INT_PTR DialogProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\t\tvirtual void EndDialog(INT_PTR nResult);\n\t\tvirtual void OnCancel();\n\t\tvirtual BOOL OnInitDialog();\n\t\tvirtual void OnOK();\n\t\tvirtual BOOL PreTranslateMessage(MSG* pMsg);\n\n\t\t// Can't override these functions\n\t\tstatic INT_PTR CALLBACK StaticDialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);\n\n\t#ifndef _WIN32_WCE\n\t\tstatic LRESULT CALLBACK StaticMsgHook(int nCode, WPARAM wParam, LPARAM lParam);\n\t#endif\n\n\tprivate:\n\t\tCDialog(const CDialog&);\t\t\t  // Disable copy construction\n\t\tCDialog& operator = (const CDialog&); // Disable assignment operator\n\n\t\tBOOL m_IsModal;\t\t\t\t\t// a flag for modal dialogs\n\t\tLPCTSTR m_lpszResName;\t\t\t// the resource name for the dialog\n\t\tLPCDLGTEMPLATE m_lpTemplate;\t// the dialog template for indirect dialogs\n\t\tHWND m_hParent;\t\t\t\t\t// handle to the dialogs's parent window\n\t};\n\n\n#ifndef _WIN32_WCE\n\n    //////////////////////////////////////\n    // Declaration of the CResizer class\n    //\n    // The CResizer class can be used to rearrange a dialog's child\n    // windows when the dialog is resized.\n\n    // To use CResizer, follow the following steps:\n    // 1) Use Initialize to specify the dialog's CWnd, and min and max size.\n    // 3) Use AddChild for each child window\n    // 4) Call HandleMessage from within DialogProc.\n    //\n\n\t// Resize Dialog Styles\n#define RD_STRETCH_WIDTH\t\t0x0001\t// The item has a variable width\n#define RD_STRETCH_HEIGHT\t\t0x0002\t// The item has a variable height\n\n\t// Resize Dialog alignments\n\tenum Alignment { topleft, topright, bottomleft, bottomright };\n\n    class CResizer\n    {\n\tpublic:\n\t\tCResizer() : m_pParent(0), m_xScrollPos(0), m_yScrollPos(0) {}\n\t\tvirtual ~CResizer() {}\n\n        virtual void AddChild(CWnd* pWnd, Alignment corner, DWORD dwStyle);\n\t\tvirtual void AddChild(HWND hWnd, Alignment corner, DWORD dwStyle);\n\t\tvirtual void HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);\n    \tvirtual void Initialize(CWnd* pParent, RECT rcMin, RECT rcMax = CRect(0,0,0,0));\n\t\tvirtual void OnHScroll(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void OnVScroll(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void RecalcLayout();\n\t\tCRect GetMinRect() const { return m_rcMin; }\n\t\tCRect GetMaxRect() const { return m_rcMax; }\n\n\t\tstruct ResizeData\n\t\t{\n\t\t\tCRect rcInit;\n\t\t\tCRect rcOld;\n\t\t\tAlignment corner;\n\t\t\tBOOL bFixedWidth;\n\t\t\tBOOL bFixedHeight;\n    \t\tHWND hWnd;\n\t\t};\n\n    private:\n        CWnd* m_pParent;\n    \tstd::vector<ResizeData> m_vResizeData;\n\n    \tCRect m_rcInit;\n    \tCRect m_rcMin;\n    \tCRect m_rcMax;\n\n\t\tint m_xScrollPos;\n\t\tint m_yScrollPos;\n    };\n\n#endif\n\n}\n\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n\nnamespace Win32xx\n{\n    ////////////////////////////////////\n\t// Definitions for the CDialog class\n\t//\n\tinline CDialog::CDialog(LPCTSTR lpszResName, CWnd* pParent/* = NULL*/)\n\t\t: m_IsModal(TRUE), m_lpszResName(lpszResName), m_lpTemplate(NULL)\n\t{\n\t\tm_hParent = pParent? pParent->GetHwnd() : NULL;\n\t\t::InitCommonControls();\n\t}\n\n\tinline CDialog::CDialog(UINT nResID, CWnd* pParent/* = NULL*/)\n\t\t: m_IsModal(TRUE), m_lpszResName(MAKEINTRESOURCE (nResID)), m_lpTemplate(NULL)\n\t{\n\t\tm_hParent = pParent? pParent->GetHwnd() : NULL;\n\t\t::InitCommonControls();\n\t}\n\n\t//For indirect dialogs - created from a dialog box template in memory.\n\tinline CDialog::CDialog(LPCDLGTEMPLATE lpTemplate, CWnd* pParent/* = NULL*/)\n\t\t: m_IsModal(TRUE), m_lpszResName(NULL), m_lpTemplate(lpTemplate)\n\t{\n\t\tm_hParent = pParent? pParent->GetHwnd() : NULL;\n\t\t::InitCommonControls();\n\t}\n\n\tinline CDialog::~CDialog()\n\t{\n\t\tif (m_hWnd != NULL)\n\t\t{\n\t\t\tif (IsModal())\n\t\t\t\t::EndDialog(m_hWnd, 0);\n\t\t\telse\n\t\t\t\tDestroy();\n\t\t}\n\t}\n\n\tinline void CDialog::AttachItem(int nID, CWnd& Wnd)\n\t// Attach a dialog item to a CWnd\n\t{\n\t\tWnd.AttachDlgItem(nID, this);\n\t}\n\n\tinline HWND CDialog::Create(CWnd* pParent /* = NULL */)\n\t{\n\t\t// Allow a dialog to be used as a child window\n\n\t\tassert(GetApp());\n\t\tSetDlgParent(pParent);\n\t\treturn DoModeless();\n\t}\n\n\tinline INT_PTR CDialog::DialogProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\t// Override this function in your class derrived from CDialog if you wish to handle messages\n\t\t// A typical function might look like this:\n\n\t\t//\tswitch (uMsg)\n\t\t//\t{\n\t\t//\tcase MESSAGE1:\t\t// Some Windows API message\n\t\t//\t\tOnMessage1();\t// A user defined function\n\t\t//\t\tbreak;\t\t\t// Also do default processing\n\t\t//\tcase MESSAGE2:\n\t\t//\t\tOnMessage2();\n\t\t//\t\treturn x;\t\t// Don't do default processing, but instead return\n\t\t//\t\t\t\t\t\t//  a value recommended by the Windows API documentation\n\t\t//\t}\n\n\t\t// Always pass unhandled messages on to DialogProcDefault\n\t\treturn DialogProcDefault(uMsg, wParam, lParam);\n\t}\n\n\tinline INT_PTR CDialog::DialogProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t// All DialogProc functions should pass unhandled messages to this function\n\t{\n\t\tLRESULT lr = 0;\n\n\t\tswitch (uMsg)\n\t    {\n\t\tcase UWM_CLEANUPTEMPS:\n\t\t\t{\n\t\t\t\tTLSData* pTLSData = (TLSData*)TlsGetValue(GetApp()->GetTlsIndex());\n\t\t\t\tpTLSData->vTmpWnds.clear();\n\t\t\t}\n\t\t\tbreak;\n\t    case WM_INITDIALOG:\n\t\t\t{\n\t\t\t\t// Center the dialog\n\t\t\t\tCenterWindow();\n\t\t\t}\n\t\t    return OnInitDialog();\n\t    case WM_COMMAND:\n\t        switch (LOWORD (wParam))\n\t        {\n\t        case IDOK:\n\t\t\t\tOnOK();\n\t\t\t\treturn TRUE;\n\t\t\tcase IDCANCEL:\n\t\t\t\tOnCancel();\n\t\t\t\treturn TRUE;\n\t\t\tdefault:\n\t\t\t\t{\n\t\t\t\t\t// Refelect this message if it's from a control\n\t\t\t\t\tCWnd* pWnd = GetApp()->GetCWndFromMap((HWND)lParam);\n\t\t\t\t\tif (pWnd != NULL)\n\t\t\t\t\t\tlr = pWnd->OnCommand(wParam, lParam);\n\n\t\t\t\t\t// Handle user commands\n\t\t\t\t\tif (!lr)\n\t\t\t\t\t\tlr =  OnCommand(wParam, lParam);\n\n\t\t\t\t\tif (lr) return 0L;\n\t\t\t\t}\n\t\t\t\tbreak;  // Some commands require default processing\n\t        }\n\t        break;\n\n\t\tcase WM_NOTIFY:\n\t\t\t{\n\t\t\t\t// Do Notification reflection if it came from a CWnd object\n\t\t\t\tHWND hwndFrom = ((LPNMHDR)lParam)->hwndFrom;\n\t\t\t\tCWnd* pWndFrom = GetApp()->GetCWndFromMap(hwndFrom);\n\n\t\t\t\tif (pWndFrom != NULL)\n\t\t\t\t\tlr = pWndFrom->OnNotifyReflect(wParam, lParam);\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// Some controls (eg ListView) have child windows.\n\t\t\t\t\t// Reflect those notifications too.\n\t\t\t\t\tCWnd* pWndFromParent = GetApp()->GetCWndFromMap(::GetParent(hwndFrom));\n\t\t\t\t\tif (pWndFromParent != NULL)\n\t\t\t\t\t\tlr = pWndFromParent->OnNotifyReflect(wParam, lParam);\n\t\t\t\t}\n\t\n\t\t\t\t// Handle user notifications\n\t\t\t\tif (!lr) lr = OnNotify(wParam, lParam);\n\n\t\t\t\t// Set the return code for notifications\n\t\t\t\tif (IsWindow())\n\t\t\t\t\tSetWindowLongPtr(DWLP_MSGRESULT, (LONG_PTR)lr);\n\n\t\t\t\treturn (BOOL)lr;\n\t\t\t}\n\n\t\tcase WM_PAINT:\n\t\t\t{\n\t\t\t\tif (::GetUpdateRect(m_hWnd, NULL, FALSE))\n\t\t\t\t{\n\t\t\t\t\tCPaintDC dc(this);\n\t\t\t\t\tOnDraw(&dc);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t// RedrawWindow can require repainting without an update rect\n\t\t\t\t{\n\t\t\t\t\tCClientDC dc(this);\n\t\t\t\t\tOnDraw(&dc);\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\tcase WM_ERASEBKGND:\n\t\t\t{\n\t\t\t\tCDC dc((HDC)wParam);\n\t\t\t\tBOOL bResult = OnEraseBkgnd(&dc);\n\t\t\t\tdc.Detach();\n\t\t\t\tif (bResult) return TRUE;\n\t\t\t}\n\t\t\tbreak;\n\n\t\t// A set of messages to be reflected back to the control that generated them\n\t\tcase WM_CTLCOLORBTN:\n\t\tcase WM_CTLCOLOREDIT:\n\t\tcase WM_CTLCOLORDLG:\n\t\tcase WM_CTLCOLORLISTBOX:\n\t\tcase WM_CTLCOLORSCROLLBAR:\n\t\tcase WM_CTLCOLORSTATIC:\n\t\tcase WM_DRAWITEM:\n\t\tcase WM_MEASUREITEM:\n\t\tcase WM_DELETEITEM:\n\t\tcase WM_COMPAREITEM:\n\t\tcase WM_CHARTOITEM:\n\t\tcase WM_VKEYTOITEM:\n\t\tcase WM_HSCROLL:\n\t\tcase WM_VSCROLL:\n\t\tcase WM_PARENTNOTIFY:\n\t\t\treturn MessageReflect(m_hWnd, uMsg, wParam, lParam);\n\n\t    } // switch(uMsg)\n\t    return FALSE;\n\n\t} // INT_PTR CALLBACK CDialog::DialogProc(...)\n\n\tinline INT_PTR CDialog::DoModal()\n\t{\n\t\t// Create a modal dialog\n\t\t// A modal dialog box must be closed by the user before the application continues\n\n\t\tassert( GetApp() );\t\t// Test if Win32++ has been started\n\t\tassert(!::IsWindow(m_hWnd));\t// Only one window per CWnd instance allowed\n\n\t\tINT_PTR nResult = 0;\n\n\t\ttry\n\t\t{\n\t\t\tm_IsModal=TRUE;\n\n\t\t\t// Ensure this thread has the TLS index set\n\t\t\tTLSData* pTLSData = GetApp()->SetTlsIndex();\n\n\t\t#ifndef _WIN32_WCE\n\t\t\tBOOL IsHookedHere = FALSE;\n\t\t\tif (NULL == pTLSData->hHook )\n\t\t\t{\n\t\t\t\tpTLSData->hHook = ::SetWindowsHookEx(WH_MSGFILTER, (HOOKPROC)StaticMsgHook, NULL, ::GetCurrentThreadId());\n\t\t\t\tIsHookedHere = TRUE;\n\t\t\t}\n\t\t#endif\n\n\t\t\tHINSTANCE hInstance = GetApp()->GetInstanceHandle();\n\t\t\tpTLSData->pCWnd = this;\n\n\t\t\t// Create a modal dialog\n\t\t\tif (IsIndirect())\n\t\t\t\tnResult = ::DialogBoxIndirect(hInstance, m_lpTemplate, m_hParent, (DLGPROC)CDialog::StaticDialogProc);\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (::FindResource(GetApp()->GetResourceHandle(), m_lpszResName, RT_DIALOG))\n\t\t\t\t\thInstance = GetApp()->GetResourceHandle();\n\t\t\t\tnResult = ::DialogBox(hInstance, m_lpszResName, m_hParent, (DLGPROC)CDialog::StaticDialogProc);\n\t\t\t}\n\n\t\t\t// Tidy up\n\t\t\tm_hWnd = NULL;\n\t\t\tpTLSData->pCWnd = NULL;\n\t\t\tGetApp()->CleanupTemps();\n\n\t\t#ifndef _WIN32_WCE\n\t\t\tif (IsHookedHere)\n\t\t\t{\n\t\t\t\t::UnhookWindowsHookEx(pTLSData->hHook);\n\t\t\t\tpTLSData->hHook = NULL;\n\t\t\t}\n\t\t#endif\n\n\t\t\tif (nResult == -1)\n\t\t\t\tthrow CWinException(_T(\"Failed to create modal dialog box\"));\n\n\t\t}\n\n\t\tcatch (const CWinException &e)\n\t\t{\n\t\t\tTRACE(_T(\"\\n*** Failed to create dialog ***\\n\"));\n\t\t\te.what();\t// Display the last error message.\n\n\t\t\t// eat the exception (don't rethrow)\n\t\t}\n\n\t\treturn nResult;\n\t}\n\n\tinline HWND CDialog::DoModeless()\n\t{\n\t\tassert( GetApp() );\t\t// Test if Win32++ has been started\n\t\tassert(!::IsWindow(m_hWnd));\t// Only one window per CWnd instance allowed\n\n\t\ttry\n\t\t{\n\t\t\tm_IsModal=FALSE;\n\n\t\t\t// Ensure this thread has the TLS index set\n\t\t\tTLSData* pTLSData = GetApp()->SetTlsIndex();\n\n\t\t\t// Store the CWnd pointer in Thread Local Storage\n\t\t\tpTLSData->pCWnd = this;\n\n\t\t\tHINSTANCE hInstance = GetApp()->GetInstanceHandle();\n\n\t\t\t// Create a modeless dialog\n\t\t\tif (IsIndirect())\n\t\t\t\tm_hWnd = ::CreateDialogIndirect(hInstance, m_lpTemplate, m_hParent, (DLGPROC)CDialog::StaticDialogProc);\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (::FindResource(GetApp()->GetResourceHandle(), m_lpszResName, RT_DIALOG))\n\t\t\t\t\thInstance = GetApp()->GetResourceHandle();\n\n\t\t\t\tm_hWnd = ::CreateDialog(hInstance, m_lpszResName, m_hParent, (DLGPROC)CDialog::StaticDialogProc);\n\t\t\t}\n\n\t\t\t// Tidy up\n\t\t\tpTLSData->pCWnd = NULL;\n\n\t\t\t// Now handle dialog creation failure\n\t\t\tif (!m_hWnd)\n\t\t\t\tthrow CWinException(_T(\"Failed to create dialog\"));\n\t\t}\n\n\t\tcatch (const CWinException &e)\n\t\t{\n\t\t\tTRACE(_T(\"\\n*** Failed to create dialog ***\\n\"));\n\t\t\te.what();\t// Display the last error message.\n\n\t\t\t// eat the exception (don't rethrow)\n\t\t}\n\n\t\treturn m_hWnd;\n\t}\n\n\tinline void CDialog::EndDialog(INT_PTR nResult)\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tif (IsModal())\n\t\t\t::EndDialog(m_hWnd, nResult);\n\t\telse\n\t\t\tDestroy();\n\n\t\tm_hWnd = NULL;\n\t}\n\n\tinline void CDialog::OnCancel()\n\t{\n\t\t// Override to customize OnCancel behaviour\n\t\tEndDialog(IDCANCEL);\n\t}\n\n\tinline BOOL CDialog::OnInitDialog()\n\t{\n\t\t// Called when the dialog is initialized\n\t\t// Override it in your derived class to automatically perform tasks\n\t\t// The return value is used by WM_INITDIALOG\n\n\t\treturn TRUE;\n\t}\n\n\tinline void CDialog::OnOK()\n\t{\n\t\t// Override to customize OnOK behaviour\n\t\tEndDialog(IDOK);\n\t}\n\n\tinline BOOL CDialog::PreTranslateMessage(MSG* pMsg)\n\t{\n\t\t// allow the dialog to translate keyboard input\n\t\tif ((pMsg->message >= WM_KEYFIRST) && (pMsg->message <= WM_KEYLAST))\n\t\t{\n\t\t\t// Process dialog keystrokes for modeless dialogs\n\t\t\tif (!IsModal())\n\t\t\t{\n\t\t\t\tTLSData* pTLSData = (TLSData*)TlsGetValue(GetApp()->GetTlsIndex());\n\t\t\t\tif (NULL == pTLSData->hHook)\n\t\t\t\t{\n\t\t\t\t\tif (IsDialogMessage(pMsg))\n\t\t\t\t\t\treturn TRUE;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// A modal message loop is running so we can't do IsDialogMessage.\n\t\t\t\t\t// Avoid having modal dialogs create other windows, because those\n\t\t\t\t\t// windows will then use the modal dialog's special message loop.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn FALSE;\n\t}\n\n\tinline void CDialog::SetDlgParent(CWnd* pParent)\n\t// Allows the parent of the dialog to be set before the dialog is created\n\t{\n\t\tm_hParent = pParent? pParent->GetHwnd() : NULL;\n\t}\n\n\tinline INT_PTR CALLBACK CDialog::StaticDialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\t// Find the CWnd pointer mapped to this HWND\n\t\tCDialog* w = (CDialog*)GetApp()->GetCWndFromMap(hWnd);\n\t\tif (0 == w)\n\t\t{\n\t\t\t// The HWND wasn't in the map, so add it now\n\t\t\tTLSData* pTLSData = (TLSData*)TlsGetValue(GetApp()->GetTlsIndex());\n\t\t\tassert(pTLSData);\n\n\t\t\t// Retrieve pointer to CWnd object from Thread Local Storage TLS\n\t\t\tw = (CDialog*)pTLSData->pCWnd;\n\t\t\tassert(w);\n\t\t\tpTLSData->pCWnd = NULL;\n\n\t\t\t// Store the Window pointer into the HWND map\n\t\t\tw->m_hWnd = hWnd;\n\t\t\tw->AddToMap();\n\t\t}\n\n\t\treturn w->DialogProc(uMsg, wParam, lParam);\n\n\t} // INT_PTR CALLBACK CDialog::StaticDialogProc(...)\n\n#ifndef _WIN32_WCE\n\tinline LRESULT CALLBACK CDialog::StaticMsgHook(int nCode, WPARAM wParam, LPARAM lParam)\n\t{\n\t\t// Used by Modal Dialogs to PreTranslate Messages\n\t\tTLSData* pTLSData = (TLSData*)TlsGetValue(GetApp()->GetTlsIndex());\n\n\t\tif (nCode == MSGF_DIALOGBOX)\n\t\t{\n\t\t\tMSG* lpMsg = (MSG*) lParam;\n\n\t\t\t// only pre-translate keyboard events\n\t\t\tif ((lpMsg->message >= WM_KEYFIRST && lpMsg->message <= WM_KEYLAST))\n\t\t\t{\n\t\t\t\tfor (HWND hWnd = lpMsg->hwnd; hWnd != NULL; hWnd = ::GetParent(hWnd))\n\t\t\t\t{\n\t\t\t\t\tCDialog* pDialog = (CDialog*)GetApp()->GetCWndFromMap(hWnd);\n\t\t\t\t\tif (pDialog && (lstrcmp(pDialog->GetClassName(), _T(\"#32770\")) == 0))\t// only for dialogs\n\t\t\t\t\t{\n\t\t\t\t\t\tpDialog->PreTranslateMessage(lpMsg);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn ::CallNextHookEx(pTLSData->hHook, nCode, wParam, lParam);\n\t}\n#endif\n\n\n\n#ifndef _WIN32_WCE\n\n    /////////////////////////////////////\n\t// Definitions for the CResizer class\n\t//\n\n\tvoid inline CResizer::AddChild(CWnd* pWnd, Alignment corner, DWORD dwStyle)\n    // Adds a child window (usually a dialog control) to the set of windows managed by\n\t// the Resizer.\n\t//\n\t// The alignment corner should be set to the closest corner of the dialog. Allowed\n\t// values are topleft, topright, bottomleft, and bottomright.\n\t// Set bFixedWidth to TRUE if the width should be fixed instead of variable.\n\t// Set bFixedHeight to TRUE if the height should be fixed instead of variable.\n\t{\n    \tResizeData rd;\n    \trd.corner = corner;\n    \trd.bFixedWidth  = !(dwStyle & RD_STRETCH_WIDTH);\n    \trd.bFixedHeight = !(dwStyle & RD_STRETCH_HEIGHT);\n\t\tCRect rcInit = pWnd->GetWindowRect();\n\t\tm_pParent->ScreenToClient(rcInit);\n\t\trd.rcInit = rcInit;\n\t\trd.hWnd = pWnd->GetHwnd();\n\n\t\tm_vResizeData.insert(m_vResizeData.begin(), rd);\n    }\n\n\tvoid inline CResizer::AddChild(HWND hWnd, Alignment corner, DWORD dwStyle)\n    // Adds a child window (usually a dialog control) to the set of windows managed by\n\t// the Resizer.\t\n\t{\n\t\tAddChild(FromHandle(hWnd), corner, dwStyle);\n\t}\n\n\tinline void CResizer::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\tswitch (uMsg)\n\t\t{\n\t\tcase WM_SIZE:\n\t\t\tRecalcLayout();\n\t\t\tbreak;\n\n\t\tcase WM_HSCROLL:\n\t\t\tif (0 == lParam)\n\t\t\t\tOnHScroll(wParam, lParam);\n\t\t\tbreak;\n\n\t\tcase WM_VSCROLL:\n\t\t\tif (0 == lParam)\n\t\t\t\tOnVScroll(wParam, lParam);\n\t\t\tbreak;\n\t\t}\n\t}\n\n    void inline CResizer::Initialize(CWnd* pParent, RECT rcMin, RECT rcMax)\n\t// Sets up the Resizer by specifying the parent window (usually a dialog),\n\t//  and the minimum and maximum allowed rectangle sizes.\n    {\n    \tassert (NULL != pParent);\n\n    \tm_pParent = pParent;\n    \tm_rcInit = pParent->GetClientRect();\n    \tm_rcMin = rcMin;\n    \tm_rcMax = rcMax;\n\n\t\t// Add scroll bar support to the parent window\n\t\tDWORD dwStyle = (DWORD)m_pParent->GetClassLongPtr(GCL_STYLE);\n\t\tdwStyle |= WS_HSCROLL | WS_VSCROLL;\n\t\tm_pParent->SetClassLongPtr(GCL_STYLE, dwStyle);\n    }\n\n\tvoid inline CResizer::OnHScroll(WPARAM wParam, LPARAM /*lParam*/)\n\t{\n\t\tint xNewPos;\n\n\t\tswitch (LOWORD(wParam))\n\t\t{\n\t\t\tcase SB_PAGEUP: // User clicked the scroll bar shaft left of the scroll box.\n\t\t\t\txNewPos = m_xScrollPos - 50;\n\t\t\t\tbreak;\n\n\t\t\tcase SB_PAGEDOWN: // User clicked the scroll bar shaft right of the scroll box.\n\t\t\t\txNewPos = m_xScrollPos + 50;\n\t\t\t\tbreak;\n\n\t\t\tcase SB_LINEUP: // User clicked the left arrow.\n\t\t\t\txNewPos = m_xScrollPos - 5;\n\t\t\t\tbreak;\n\n\t\t\tcase SB_LINEDOWN: // User clicked the right arrow.\n\t\t\t\txNewPos = m_xScrollPos + 5;\n\t\t\t\tbreak;\n\n\t\t\tcase SB_THUMBPOSITION: // User dragged the scroll box.\n\t\t\t\txNewPos = HIWORD(wParam);\n\t\t\t\tbreak;\n\n\t\t\tcase SB_THUMBTRACK: // User dragging the scroll box.\n\t\t\t\txNewPos = HIWORD(wParam);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\txNewPos = m_xScrollPos;\n\t\t}\n\n\t\t// Scroll the window.\n\t\txNewPos = MAX(0, xNewPos);\n\t\txNewPos = MIN( xNewPos, GetMinRect().Width() - m_pParent->GetClientRect().Width() );\n\t\tint xDelta = xNewPos - m_xScrollPos;\n\t\tm_xScrollPos = xNewPos;\n\t\tm_pParent->ScrollWindow(-xDelta, 0, NULL, NULL);\n\n\t\t// Reset the scroll bar.\n\t\tSCROLLINFO si = {0};\n\t\tsi.cbSize = sizeof(si);\n\t\tsi.fMask  = SIF_POS;\n\t\tsi.nPos   = m_xScrollPos;\n\t\tm_pParent->SetScrollInfo(SB_HORZ, si, TRUE);\n\t}\n\n\tvoid inline CResizer::OnVScroll(WPARAM wParam, LPARAM /*lParam*/)\n\t{\n\t\tint yNewPos;\n\n\t\tswitch (LOWORD(wParam))\n\t\t{\n\t\t\tcase SB_PAGEUP: // User clicked the scroll bar shaft above the scroll box.\n\t\t\t\tyNewPos = m_yScrollPos - 50;\n\t\t\t\tbreak;\n\n\t\t\tcase SB_PAGEDOWN: // User clicked the scroll bar shaft below the scroll box.\n\t\t\t\tyNewPos = m_yScrollPos + 50;\n\t\t\t\tbreak;\n\n\t\t\tcase SB_LINEUP: // User clicked the top arrow.\n\t\t\t\tyNewPos = m_yScrollPos - 5;\n\t\t\t\tbreak;\n\n\t\t\tcase SB_LINEDOWN: // User clicked the bottom arrow.\n\t\t\t\tyNewPos = m_yScrollPos + 5;\n\t\t\t\tbreak;\n\n\t\t\tcase SB_THUMBPOSITION: // User dragged the scroll box.\n\t\t\t\tyNewPos = HIWORD(wParam);\n\t\t\t\tbreak;\n\n\t\t\tcase SB_THUMBTRACK: // User dragging the scroll box.\n\t\t\t\tyNewPos = HIWORD(wParam);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tyNewPos = m_yScrollPos;\n\t\t}\n\n\t\t// Scroll the window.\n\t\tyNewPos = MAX(0, yNewPos);\n\t\tyNewPos = MIN( yNewPos, GetMinRect().Height() - m_pParent->GetClientRect().Height() );\n\t\tint yDelta = yNewPos - m_yScrollPos;\n\t\tm_yScrollPos = yNewPos;\n\t\tm_pParent->ScrollWindow(0, -yDelta, NULL, NULL);\n\n\t\t// Reset the scroll bar.\n\t\tSCROLLINFO si = {0};\n\t\tsi.cbSize = sizeof(si);\n\t\tsi.fMask  = SIF_POS;\n\t\tsi.nPos   = m_yScrollPos;\n\t\tm_pParent->SetScrollInfo(SB_VERT, si, TRUE);\n\t}\n\n    void inline CResizer::RecalcLayout()\n    // Repositions the child windows. Call this function when handling\n\t// the WM_SIZE message in the parent window.\n\t{\n    \tassert (m_rcInit.Width() > 0 && m_rcInit.Height() > 0);\n    \tassert (NULL != m_pParent);\n\n\t\tCRect rcCurrent = m_pParent->GetClientRect();\n\n\t\t// Adjust the scrolling if required\n\t\tm_xScrollPos = MIN(m_xScrollPos, MAX(0, m_rcMin.Width()  - rcCurrent.Width() ) );\n\t\tm_yScrollPos = MIN(m_yScrollPos, MAX(0, m_rcMin.Height() - rcCurrent.Height()) );\n\t\tSCROLLINFO si = {0};\n\t\tsi.cbSize = sizeof(si);\n\t\tsi.fMask  = SIF_RANGE | SIF_PAGE | SIF_POS;\n\t\tsi.nMax   =\tm_rcMin.Width();\n\t\tsi.nPage  = rcCurrent.Width();\n\t\tsi.nPos   = m_xScrollPos;\n\t\tm_pParent->SetScrollInfo(SB_HORZ, si, TRUE);\n\t\tsi.nMax   =\tm_rcMin.Height();\n\t\tsi.nPage  = rcCurrent.Height();\n\t\tsi.nPos   = m_yScrollPos;\n\t\tm_pParent->SetScrollInfo(SB_VERT, si, TRUE);\n\n    \trcCurrent.right  = MAX( rcCurrent.Width(),  m_rcMin.Width() );\n    \trcCurrent.bottom = MAX( rcCurrent.Height(), m_rcMin.Height() );\n    \tif (!m_rcMax.IsRectEmpty())\n    \t{\n    \t\trcCurrent.right  = MIN( rcCurrent.Width(),  m_rcMax.Width() );\n    \t\trcCurrent.bottom = MIN( rcCurrent.Height(), m_rcMax.Height() );\n    \t}\n\n\t\t// Declare an iterator to step through the vector\n\t\tstd::vector<ResizeData>::iterator iter;\n\n    \tfor (iter = m_vResizeData.begin(); iter < m_vResizeData.end(); ++iter)\n    \t{\n    \t\tint left   = 0;\n    \t\tint top    = 0;\n    \t\tint width  = 0;\n    \t\tint height = 0;\n\n    \t\t// Calculate the new size and position of the child window\n\t\t\tswitch( (*iter).corner )\n    \t\t{\n    \t\tcase topleft:\n\t\t\t\twidth  = (*iter).bFixedWidth?  (*iter).rcInit.Width()  : (*iter).rcInit.Width()  - m_rcInit.Width() + rcCurrent.Width();\n    \t\t\theight = (*iter).bFixedHeight? (*iter).rcInit.Height() : (*iter).rcInit.Height() - m_rcInit.Height() + rcCurrent.Height();\n    \t\t\tleft   = (*iter).rcInit.left;\n    \t\t\ttop    = (*iter).rcInit.top;\n    \t\t\tbreak;\n    \t\tcase topright:\n    \t\t\twidth  = (*iter).bFixedWidth?  (*iter).rcInit.Width()  : (*iter).rcInit.Width()  - m_rcInit.Width() + rcCurrent.Width();\n    \t\t\theight = (*iter).bFixedHeight? (*iter).rcInit.Height() : (*iter).rcInit.Height() - m_rcInit.Height() + rcCurrent.Height();\n    \t\t\tleft   = (*iter).rcInit.right - width - m_rcInit.Width() + rcCurrent.Width();\n    \t\t\ttop    = (*iter).rcInit.top;\n    \t\t\tbreak;\n    \t\tcase bottomleft:\n\t\t\t\twidth  = (*iter).bFixedWidth?  (*iter).rcInit.Width()  : (*iter).rcInit.Width()  - m_rcInit.Width() + rcCurrent.Width();\n    \t\t\theight = (*iter).bFixedHeight? (*iter).rcInit.Height() : (*iter).rcInit.Height() - m_rcInit.Height() + rcCurrent.Height();\n    \t\t\tleft   = (*iter).rcInit.left;\n    \t\t\ttop    = (*iter).rcInit.bottom - height - m_rcInit.Height() + rcCurrent.Height();\n    \t\t\tbreak;\n    \t\tcase bottomright:\n    \t\t\twidth  = (*iter).bFixedWidth?  (*iter).rcInit.Width()  : (*iter).rcInit.Width()  - m_rcInit.Width() + rcCurrent.Width();\n    \t\t\theight = (*iter).bFixedHeight? (*iter).rcInit.Height() : (*iter).rcInit.Height() - m_rcInit.Height() + rcCurrent.Height();\n    \t\t\tleft   = (*iter).rcInit.right   - width - m_rcInit.Width() + rcCurrent.Width();\n    \t\t\ttop    = (*iter).rcInit.bottom  - height - m_rcInit.Height() + rcCurrent.Height();\n    \t\t\tbreak;\n    \t\t}\n\n\t\t\t// Position the child window.\n\t\t\tCRect rc(left - m_xScrollPos, top - m_yScrollPos, left + width - m_xScrollPos, top + height - m_yScrollPos);\n\t\t\tif ( rc != (*iter).rcOld)\n\t\t\t{\n\t\t\t\tCWnd* pWnd = FromHandle((*iter).hWnd);\n\t\t\t\tCWnd *pWndPrev = pWnd->GetWindow(GW_HWNDPREV); // Trick to maintain the original tab order.\n\t\t\t\tHWND hWnd = pWndPrev ? pWndPrev->GetHwnd():NULL;\n\t\t\t\tpWnd->SetWindowPos(hWnd, rc, SWP_NOCOPYBITS);\n\t\t\t\t(*iter).rcOld = rc;\n\t\t\t}\n    \t}\n    }\n\n#endif // #ifndef _WIN32_WCE\n\n} // namespace Win32xx\n\n\n\n#endif // _WIN32XX_DIALOG_H_\n\n"
  },
  {
    "path": "external/win32cpp/include/docking.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n\n///////////////////////////////////////////////////////\n// docking.h\n//  Declaration of the CDocker class\n\n#ifndef _WIN32XX_DOCKING_H_\n#define _WIN32XX_DOCKING_H_\n\n\n#include \"wincore.h\"\n#include \"gdi.h\"\n#include \"toolbar.h\"\n#include \"tab.h\"\n#include \"frame.h\"\n#include \"default_resource.h\"\n\n\n// Docking Styles\n#define DS_DOCKED_LEFT\t\t\t0x0001  // Dock the child left\n#define DS_DOCKED_RIGHT\t\t\t0x0002  // Dock the child right\n#define DS_DOCKED_TOP\t\t\t0x0004  // Dock the child top\n#define DS_DOCKED_BOTTOM\t\t0x0008  // Dock the child bottom\n#define DS_NO_DOCKCHILD_LEFT\t0x0010  // Prevent a child docking left\n#define DS_NO_DOCKCHILD_RIGHT\t0x0020  // Prevent a child docking right\n#define DS_NO_DOCKCHILD_TOP\t\t0x0040  // Prevent a child docking at the top\n#define DS_NO_DOCKCHILD_BOTTOM\t0x0080  // Prevent a child docking at the bottom\n#define DS_NO_RESIZE\t\t\t0x0100  // Prevent resizing\n#define DS_NO_CAPTION\t\t\t0x0200  // Prevent display of caption when docked\n#define DS_NO_CLOSE\t\t\t\t0x0400\t// Prevent closing of a docker while docked\n#define DS_NO_UNDOCK\t\t\t0x0800  // Prevent undocking and dock closing\n#define DS_CLIENTEDGE\t\t\t0x1000  // Has a 3D border when docked\n#define DS_FIXED_RESIZE\t\t\t0x2000\t// Perfomed a fixed resize instead of a proportional resize on dock children\n#define DS_DOCKED_CONTAINER\t\t0x4000  // Dock a container within a container\n#define DS_DOCKED_LEFTMOST      0x10000 // Leftmost outer docking\n#define DS_DOCKED_RIGHTMOST     0x20000 // Rightmost outer docking\n#define DS_DOCKED_TOPMOST\t\t0x40000 // Topmost outer docking\n#define DS_DOCKED_BOTTOMMOST\t0x80000 // Bottommost outer docking\n\n// Required for Dev-C++\n#ifndef TME_NONCLIENT\n  #define TME_NONCLIENT 0x00000010\n#endif\n#ifndef TME_LEAVE\n  #define TME_LEAVE 0x000000002\n#endif\n#ifndef WM_NCMOUSELEAVE\n  #define WM_NCMOUSELEAVE 0x000002A2\n#endif\n\nnamespace Win32xx\n{\n\t// Class declarations\n\tclass CDockContainer;\n\tclass CDocker;\n\n\ttypedef Shared_Ptr<CDocker> DockPtr;\n\n\tstruct ContainerInfo\n\t{\n\t\tTCHAR szTitle[MAX_MENU_STRING];\n\t\tint iImage;\n\t\tCDockContainer* pContainer;\n\t};\n\n\t///////////////////////////////////////\n\t// Declaration of the CDockContainer class\n\t//  A CDockContainer is a CTab window. A CTab has a view window, and optionally a toolbar control.\n\t//  A top level CDockContainer can contain other CDockContainers. The view for each container\n\t//  (including the top level container) along with possibly its toolbar, is displayed\n\t//  within the container parent's view page.\n\tclass CDockContainer : public CTab\n\t{\n\tpublic:\n\n\t\t// Nested class. This is the Wnd for the window displayed over the client area\n\t\t// of the tab control.  The toolbar and view window are child windows of the\n\t\t// viewpage window. Only the ViewPage of the parent CDockContainer is displayed. It's\n\t\t// contents are updated with the view window of the relevant container whenever\n\t\t// a different tab is selected.\n\t\tclass CViewPage : public CWnd\n\t\t{\n\n\t\tpublic:\n\t\t\tCViewPage() : m_pView(NULL), m_pTab(NULL) {}\n\t\t\tvirtual ~CViewPage() {}\n\t\t\tvirtual CToolBar& GetToolBar() const {return (CToolBar&)m_ToolBar;}\n\t\t\tvirtual CWnd* GetView() const\t{return m_pView;}\n\t\t\tvirtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);\n\t\t\tvirtual void OnCreate();\n\t\t\tvirtual LRESULT OnNotify(WPARAM wParam, LPARAM lParam);\n\t\t\tvirtual void PreRegisterClass(WNDCLASS &wc);\n\t\t\tvirtual void RecalcLayout();\n\t\t\tvirtual void SetView(CWnd& wndView);\n\t\t\tvirtual LRESULT WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\n\t\t\tCWnd* GetTabCtrl() const { return m_pTab;}\n\n\t\tprivate:\n\t\t\tCToolBar m_ToolBar;\n\t\t\ttString m_tsTooltip;\n\t\t\tCWnd* m_pView;\n\t\t\tCWnd* m_pTab;\n\t\t};\n\n\tpublic:\n\t\tCDockContainer();\n\t\tvirtual ~CDockContainer();\n\t\tvirtual void AddContainer(CDockContainer* pContainer);\n\t\tvirtual void AddToolBarButton(UINT nID, BOOL bEnabled = TRUE);\n\t\tvirtual CDockContainer* GetContainerFromIndex(UINT nPage);\n\t\tvirtual CDockContainer* GetContainerFromView(CWnd* pView) const;\n\t\tvirtual int GetContainerIndex(CDockContainer* pContainer);\n\t\tvirtual SIZE GetMaxTabTextSize();\n\t\tvirtual CViewPage& GetViewPage() const\t{ return (CViewPage&)m_ViewPage; }\n\t\tvirtual void RecalcLayout();\n\t\tvirtual void RemoveContainer(CDockContainer* pWnd);\n\t\tvirtual void SelectPage(int nPage);\n\t\tvirtual void SetTabSize();\n\t\tvirtual void SetupToolBar();\n\n\t\t// Attributes\n\t\tCDockContainer* GetActiveContainer() const {return GetContainerFromView(GetActiveView());}\n\t\tCWnd* GetActiveView() const;\n\t\tstd::vector<ContainerInfo>& GetAllContainers() const {return m_pContainerParent->m_vContainerInfo;}\n\t\tCDockContainer* GetContainerParent() const { return m_pContainerParent; }\n\t\tCString& GetDockCaption() const\t{ return (CString&)m_csCaption; }\n\t\tHICON GetTabIcon() const\t\t{ return m_hTabIcon; }\n\t\tLPCTSTR GetTabText() const\t\t{ return m_tsTabText.c_str(); }\n\t\tvirtual CToolBar& GetToolBar() const\t{ return GetViewPage().GetToolBar(); }\n\t\tCWnd* GetView() const\t\t\t{ return GetViewPage().GetView(); }\n\t\tvoid SetActiveContainer(CDockContainer* pContainer);\n\t\tvoid SetDockCaption(LPCTSTR szCaption) { m_csCaption = szCaption; }\n\t\tvoid SetTabIcon(HICON hTabIcon) { m_hTabIcon = hTabIcon; }\n\t\tvoid SetTabIcon(UINT nID_Icon);\n\t\tvoid SetTabIcon(int i, HICON hIcon) { CTab::SetTabIcon(i, hIcon); }\n\t\tvoid SetTabText(LPCTSTR szText) { m_tsTabText = szText; }\n\t\tvoid SetTabText(UINT nTab, LPCTSTR szText);\n\t\tvoid SetView(CWnd& Wnd);\n\n\tprotected:\n\t\tvirtual void OnCreate();\n\t\tvirtual void OnLButtonDown(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void OnLButtonUp(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void OnMouseLeave(WPARAM wParam, LPARAM lParam);\n\t\tvirtual LRESULT OnNotifyReflect(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void PreCreate(CREATESTRUCT &cs);\n\t\tvirtual LRESULT WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\n\tprivate:\n\t\tstd::vector<ContainerInfo> m_vContainerInfo;\n\t\ttString m_tsTabText;\n\t\tCString m_csCaption;\n\t\tCViewPage m_ViewPage;\n\t\tint m_iCurrentPage;\n\t\tCDockContainer* m_pContainerParent;\n\t\tHICON m_hTabIcon;\n\t\tint m_nTabPressed;\n\n\t};\n\n\ttypedef struct DRAGPOS\n\t{\n\t\tNMHDR hdr;\n\t\tPOINT ptPos;\n\t\tUINT DockZone;\n\t} *LPDRAGPOS;\n\n\n\t/////////////////////////////////////////\n\t// Declaration of the CDocker class\n\t//  A CDocker window allows other CDocker windows to be \"docked\" inside it.\n\t//  A CDocker can dock on the top, left, right or bottom side of a parent CDocker.\n\t//  There is no theoretical limit to the number of CDockers within CDockers.\n\tclass CDocker : public CWnd\n\t{\n\tpublic:\n\t\t//  A nested class for the splitter bar that seperates the docked panes.\n\t\tclass CDockBar : public CWnd\n\t\t{\n\t\tpublic:\n\t\t\tCDockBar();\n\t\t\tvirtual ~CDockBar();\n\t\t\tvirtual void OnDraw(CDC* pDC);\n\t\t\tvirtual void PreCreate(CREATESTRUCT &cs);\n\t\t\tvirtual void PreRegisterClass(WNDCLASS& wc);\n\t\t\tvirtual void SendNotify(UINT nMessageID);\n\t\t\tvirtual void SetColor(COLORREF color);\n\t\t\tvirtual LRESULT WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\n\t\t\tCDocker* GetDock()\t\t\t\t{return m_pDock;}\n\t\t\tint GetWidth()\t\t\t\t\t{return m_DockBarWidth;}\n\t\t\tvoid SetDock(CDocker* pDock)\t{m_pDock = pDock;}\n\t\t\tvoid SetWidth(int nWidth)\t\t{m_DockBarWidth = nWidth;}\n\n\t\tprivate:\n\t\t\tCDockBar(const CDockBar&);\t\t\t\t// Disable copy construction\n\t\t\tCDockBar& operator = (const CDockBar&); // Disable assignment operator\n\n\t\t\tCDocker* m_pDock;\n\t\t\tDRAGPOS m_DragPos;\n\t\t\tCBrush m_brBackground;\n\t\t\tint m_DockBarWidth;\n\t\t};\n\n\t\t//  A nested class for the window inside a CDocker which includes all of this docked client.\n\t\t//  It's the remaining part of the CDocker that doesn't belong to the CDocker's children.\n\t\t//  The Docker's view window is a child window of CDockClient.\n\t\tclass CDockClient : public CWnd\n\t\t{\n\t\tpublic:\n\t\t\tCDockClient();\n\t\t\tvirtual ~CDockClient() {}\n\t\t\tvirtual void Draw3DBorder(RECT& Rect);\n\t\t\tvirtual void DrawCaption(WPARAM wParam);\n\t\t\tvirtual void DrawCloseButton(CDC& DrawDC, BOOL bFocus);\n\t\t\tvirtual CRect GetCloseRect();\n\t\t\tvirtual void SendNotify(UINT nMessageID);\n\n\t\t\tCString& GetCaption() const\t\t{ return (CString&)m_csCaption; }\n\t\t\tCWnd* GetView() const\t\t\t{ return m_pView; }\n\t\t\tvoid SetDock(CDocker* pDock)\t{ m_pDock = pDock;}\n\t\t\tvoid SetCaption(LPCTSTR szCaption) { m_csCaption = szCaption; }\n\t\t\tvoid SetCaptionColors(COLORREF Foregnd1, COLORREF Backgnd1, COLORREF ForeGnd2, COLORREF BackGnd2);\n\t\t\tvoid SetClosePressed()\t\t\t{ m_IsClosePressed = TRUE; }\n\t\t\tvoid SetView(CWnd& Wnd)\t\t\t{ m_pView = &Wnd; }\n\n\t\tprotected:\n\t\t\tvirtual void    OnLButtonDown(WPARAM wParam, LPARAM lParam);\n\t\t\tvirtual void OnLButtonUp(WPARAM wParam, LPARAM lParam);\n\t\t\tvirtual void    OnMouseActivate(WPARAM wParam, LPARAM lParam);\n\t\t\tvirtual void    OnMouseMove(WPARAM wParam, LPARAM lParam);\n\t\t\tvirtual void    OnNCCalcSize(WPARAM& wParam, LPARAM& lParam);\n\t\t\tvirtual LRESULT OnNCHitTest(WPARAM wParam, LPARAM lParam);\n\t\t\tvirtual LRESULT OnNCLButtonDown(WPARAM wParam, LPARAM lParam);\n\t\t\tvirtual void    OnNCMouseLeave(WPARAM wParam, LPARAM lParam);\n\t\t\tvirtual LRESULT OnNCMouseMove(WPARAM wParam, LPARAM lParam);\n\t\t\tvirtual LRESULT OnNCPaint(WPARAM wParam, LPARAM lParam);\n\t\t\tvirtual void    OnWindowPosChanged(WPARAM wParam, LPARAM lParam);\n\t\t\tvirtual void    PreRegisterClass(WNDCLASS& wc);\n\t\t\tvirtual void    PreCreate(CREATESTRUCT& cs);\n\t\t\tvirtual LRESULT WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\n\t\tprivate:\n\t\t\tCDockClient(const CDockClient&);\t\t\t\t// Disable copy construction\n\t\t\tCDockClient& operator = (const CDockClient&); // Disable assignment operator\n\n\t\t\tCString m_csCaption;\n\t\t\tCPoint m_Oldpt;\n\t\t\tCDocker* m_pDock;\n\t\t\tCWnd* m_pView;\n\t\t\tBOOL m_IsClosePressed;\n\t\t\tBOOL m_bOldFocus;\n\t\t\tBOOL m_bCaptionPressed;\n\t\t\tBOOL m_IsTracking;\n\t\t\tCOLORREF m_Foregnd1;\n\t\t\tCOLORREF m_Backgnd1;\n\t\t\tCOLORREF m_Foregnd2;\n\t\t\tCOLORREF m_Backgnd2;\n\t\t};\n\n\t\t//  This nested class is used to indicate where a window could dock by\n\t\t//  displaying a blue tinted window.\n\t\tclass CDockHint : public CWnd\n\t\t{\n\t\tpublic:\n\t\t\tCDockHint();\n\t\t\tvirtual ~CDockHint();\n\t\t\tvirtual RECT CalcHintRectContainer(CDocker* pDockTarget);\n\t\t\tvirtual RECT CalcHintRectInner(CDocker* pDockTarget, CDocker* pDockDrag, UINT uDockSide);\n\t\t\tvirtual RECT CalcHintRectOuter(CDocker* pDockDrag, UINT uDockSide);\n\t\t\tvirtual void DisplayHint(CDocker* pDockTarget, CDocker* pDockDrag, UINT uDockSide);\n\t\t\tvirtual void OnDraw(CDC* pDC);\n\t\t\tvirtual void PreCreate(CREATESTRUCT &cs);\n\t\t\tvirtual void ShowHintWindow(CDocker* pDockTarget, CRect rcHint);\n\n\t\tprivate:\n\t\t\tCDockHint(const CDockHint&);\t\t\t\t// Disable copy construction\n\t\t\tCDockHint& operator = (const CDockHint&); // Disable assignment operator\n\n\t\t\tCBitmap m_bmBlueTint;\n\t\t\tUINT m_uDockSideOld;\n\t\t};\n\n\t\tclass CTarget : public CWnd\n\t\t{\n\t\tpublic:\n\t\t\tCTarget() {}\n\t\t\tvirtual ~CTarget();\n\t\t\tvirtual void OnDraw(CDC* pDC);\n\t\t\tvirtual void PreCreate(CREATESTRUCT &cs);\n\n\t\tprotected:\n\t\t\tCBitmap m_bmImage;\n\n\t\tprivate:\n\t\t\tCTarget(const CTarget&);\t\t\t\t// Disable copy construction\n\t\t\tCTarget& operator = (const CTarget&); // Disable assignment operator\n\t\t};\n\n\t\tclass CTargetCentre : public CTarget\n\t\t{\n\t\tpublic:\n\t\t\tCTargetCentre();\n\t\t\tvirtual ~CTargetCentre();\n\t\t\tvirtual void OnDraw(CDC* pDC);\n\t\t\tvirtual void OnCreate();\n\t\t\tvirtual BOOL CheckTarget(LPDRAGPOS pDragPos);\n\t\t\tBOOL IsOverContainer() { return m_bIsOverContainer; }\n\n\t\tprivate:\n\t\t\tCTargetCentre(const CTargetCentre&);\t\t\t\t// Disable copy construction\n\t\t\tCTargetCentre& operator = (const CTargetCentre&); // Disable assignment operator\n\n\t\t\tBOOL m_bIsOverContainer;\n\t\t\tCDocker* m_pOldDockTarget;\n\t\t};\n\n\t\tclass CTargetLeft : public CTarget\n\t\t{\n\t\tpublic:\n\t\t\tCTargetLeft() {m_bmImage.LoadImage(IDW_SDLEFT,0,0,0);}\n\t\t\tvirtual BOOL CheckTarget(LPDRAGPOS pDragPos);\n\n\t\tprivate:\n\t\t\tCTargetLeft(const CTargetLeft&);\t\t\t\t// Disable copy construction\n\t\t\tCTargetLeft& operator = (const CTargetLeft&); // Disable assignment operator\n\t\t};\n\n\t\tclass CTargetTop : public CTarget\n\t\t{\n\t\tpublic:\n\t\t\tCTargetTop() {m_bmImage.LoadImage(IDW_SDTOP,0,0,0);}\n\t\t\tvirtual BOOL CheckTarget(LPDRAGPOS pDragPos);\n\t\tprivate:\n\t\t\tCTargetTop(const CTargetTop&);\t\t\t\t// Disable copy construction\n\t\t\tCTargetTop& operator = (const CTargetTop&); // Disable assignment operator\n\t\t};\n\n\t\tclass CTargetRight : public CTarget\n\t\t{\n\t\tpublic:\n\t\t\tCTargetRight() {m_bmImage.LoadImage(IDW_SDRIGHT,0,0,0);}\n\t\t\tvirtual BOOL CheckTarget(LPDRAGPOS pDragPos);\n\n\t\tprivate:\n\t\t\tCTargetRight(const CTargetRight&);\t\t\t\t// Disable copy construction\n\t\t\tCTargetRight& operator = (const CTargetRight&); // Disable assignment operator\n\t\t};\n\n\t\tclass CTargetBottom : public CTarget\n\t\t{\n\t\tpublic:\n\t\t\tCTargetBottom() {m_bmImage.LoadImage(IDW_SDBOTTOM,0,0,0);}\n\t\t\tvirtual BOOL CheckTarget(LPDRAGPOS pDragPos);\n\t\t};\n\n\t\tfriend class CTargetCentre;\n\t\tfriend class CTargetLeft;\n\t\tfriend class CTargetTop;\n\t\tfriend class CTargetRight;\n\t\tfriend class CTargetBottom;\n\t\tfriend class CDockClient;\n\t\tfriend class CDockContainer;\n\n\tpublic:\n\t\t// Operations\n\t\tCDocker();\n\t\tvirtual ~CDocker();\n\t\tvirtual CDocker* AddDockedChild(CDocker* pDocker, DWORD dwDockStyle, int DockSize, int nDockID = 0);\n\t\tvirtual CDocker* AddUndockedChild(CDocker* pDocker, DWORD dwDockStyle, int DockSize, RECT rc, int nDockID = 0);\n\t\tvirtual void Close();\n\t\tvirtual void CloseAllDockers();\n\t\tvirtual void Dock(CDocker* pDocker, UINT uDockSide);\n\t\tvirtual void DockInContainer(CDocker* pDock, DWORD dwDockStyle);\n\t\tvirtual CDockContainer* GetContainer() const;\n\t\tvirtual CDocker* GetActiveDocker() const;\n\t\tvirtual CDocker* GetDockAncestor() const;\n\t\tvirtual CDocker* GetDockFromID(int n_DockID) const;\n\t\tvirtual CDocker* GetDockFromPoint(POINT pt) const;\n\t\tvirtual CDocker* GetDockFromView(CWnd* pView) const;\n\t\tvirtual CDocker* GetTopmostDocker() const;\n\t\tvirtual int GetDockSize() const;\n\t\tvirtual CTabbedMDI* GetTabbedMDI() const;\n\t\tvirtual int GetTextHeight();\n\t\tvirtual void Hide();\n\t\tvirtual BOOL LoadRegistrySettings(tString tsRegistryKeyName);\n\t\tvirtual void RecalcDockLayout();\n\t\tvirtual BOOL SaveRegistrySettings(tString tsRegistryKeyName);\n\t\tvirtual void Undock(CPoint pt, BOOL bShowUndocked = TRUE);\n\t\tvirtual void UndockContainer(CDockContainer* pContainer, CPoint pt, BOOL bShowUndocked);\n\t\tvirtual BOOL VerifyDockers();\n\n\t\t// Attributes\n\t\tvirtual CDockBar& GetDockBar() const {return (CDockBar&)m_DockBar;}\n\t\tvirtual CDockClient& GetDockClient() const {return (CDockClient&)m_DockClient;}\n\t\tvirtual CDockHint& GetDockHint() const {return m_pDockAncestor->m_DockHint;}\n\n\n\t\tstd::vector <DockPtr> & GetAllDockers() const {return GetDockAncestor()->m_vAllDockers;}\n\t\tint GetBarWidth() const {return GetDockBar().GetWidth();}\n\t\tCString& GetCaption() const {return GetDockClient().GetCaption();}\n\t\tstd::vector <CDocker*> & GetDockChildren() const {return (std::vector <CDocker*> &)m_vDockChildren;}\n\t\tint GetDockID() const {return m_nDockID;}\n\t\tCDocker* GetDockParent() const {return m_pDockParent;}\n\t\tDWORD GetDockStyle() const {return m_DockStyle;}\n\t\tCWnd* GetView() const {return GetDockClient().GetView();}\n\t\tBOOL IsChildOfDocker(CWnd* pWnd) const;\n\t\tBOOL IsDocked() const;\n\t\tBOOL IsDragAutoResize();\n\t\tBOOL IsRelated(CWnd* pWnd) const;\n\t\tBOOL IsUndocked() const;\n\t\tvoid SetBarColor(COLORREF color) {GetDockBar().SetColor(color);}\n\t\tvoid SetBarWidth(int nWidth) {GetDockBar().SetWidth(nWidth);}\n\t\tvoid SetCaption(LPCTSTR szCaption);\n\t\tvoid SetCaptionColors(COLORREF Foregnd1, COLORREF Backgnd1, COLORREF ForeGnd2, COLORREF BackGnd2);\n\t\tvoid SetCaptionHeight(int nHeight);\n\t\tvoid SetDockStyle(DWORD dwDockStyle);\n\t\tvoid SetDockSize(int DockSize);\n\t\tvoid SetDragAutoResize(BOOL bAutoResize);\n\t\tvoid SetView(CWnd& wndView);\n\n\tprotected:\n\t\tvirtual CDocker* NewDockerFromID(int idDock);\n\t\tvirtual void OnActivate(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void OnCaptionTimer(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void OnCreate();\n\t\tvirtual void OnDestroy(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void OnDockDestroyed(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void OnExitSizeMove(WPARAM wParam, LPARAM lParam);\n\t\tvirtual LRESULT OnNotify(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void OnSetFocus(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void OnSysColorChange(WPARAM wParam, LPARAM lParam);\n\t\tvirtual LRESULT OnSysCommand(WPARAM wParam, LPARAM lParam);\n\t\tvirtual LRESULT OnWindowPosChanging(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void OnWindowPosChanged(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void PreCreate(CREATESTRUCT &cs);\n\t\tvirtual void PreRegisterClass(WNDCLASS &wc);\n\t\tvirtual LRESULT WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\n\tprivate:\n\t\tCDocker(const CDocker&);\t\t\t\t// Disable copy construction\n\t\tCDocker& operator = (const CDocker&);\t// Disable assignment operator\n\t\tvoid CheckAllTargets(LPDRAGPOS pDragPos);\n\t\tvoid CloseAllTargets();\n\t\tvoid DockOuter(CDocker* pDocker, DWORD dwDockStyle);\n\t\tvoid DrawAllCaptions();\n\t\tvoid DrawHashBar(HWND hBar, POINT Pos);\n\t\tvoid ConvertToChild(HWND hWndParent);\n\t\tvoid ConvertToPopup(RECT rc);\n\t\tvoid MoveDockChildren(CDocker* pDockTarget);\n\t\tvoid PromoteFirstChild();\n\t\tvoid RecalcDockChildLayout(CRect rc);\n\t\tvoid ResizeDockers(LPDRAGPOS pdp);\n\t\tCDocker* SeparateFromDock();\n\t\tvoid SendNotify(UINT nMessageID);\n\t\tvoid SetUndockPosition(CPoint pt);\n\t\tstd::vector<CDocker*> SortDockers();\n\n\t\tCDockBar\t\tm_DockBar;\n\t\tCDockHint\t\tm_DockHint;\n\t\tCDockClient\t\tm_DockClient;\n\t\tCTargetCentre\tm_TargetCentre;\n\t\tCTargetLeft\t\tm_TargetLeft;\n\t\tCTargetTop\t\tm_TargetTop;\n\t\tCTargetRight\tm_TargetRight;\n\t\tCPoint\t\t\tm_OldPoint;\n\t\tCTargetBottom\tm_TargetBottom;\n\t\tCDocker*\t\tm_pDockParent;\n\t\tCDocker*\t\tm_pDockAncestor;\n\t\tCDocker*\t\tm_pDockActive;\n\n\t\tstd::vector <CDocker*> m_vDockChildren;\n\t\tstd::vector <DockPtr> m_vAllDockers;\t// Only used in DockAncestor\n\n\t\tCRect m_rcBar;\n\t\tCRect m_rcChild;\n\n\t\tBOOL m_BlockMove;\n\t\tBOOL m_Undocking;\n\t\tBOOL m_bIsClosing;\n\t\tBOOL m_bIsDragging;\n\t\tBOOL m_bDragAutoResize;\n\t\tint m_DockStartSize;\n\t\tint m_nDockID;\n\t\tint m_nTimerCount;\n\t\tint m_NCHeight;\n\t\tDWORD m_dwDockZone;\n\t\tdouble m_DockSizeRatio;\n\t\tDWORD m_DockStyle;\n\t\tHWND m_hOldFocus;\n\n\t}; // class CDocker\n\n\tstruct DockInfo\n\t{\n\t\tDWORD DockStyle;\n\t\tint DockSize;\n\t\tint DockID;\n\t\tint DockParentID;\n\t\tRECT Rect;\n\t};\n\n}\n\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nnamespace Win32xx\n{\n\n\t/////////////////////////////////////////////////////////////\n\t// Definitions for the CDockBar class nested within CDocker\n\t//\n\tinline CDocker::CDockBar::CDockBar() : m_pDock(NULL), m_DockBarWidth(4)\n\t{\n\t\tm_brBackground.CreateSolidBrush(RGB(192,192,192));\n\t}\n\n\tinline CDocker::CDockBar::~CDockBar()\n\t{\n\t}\n\n\tinline void CDocker::CDockBar::OnDraw(CDC* pDC)\n\t{\n\t\tCRect rcClient = GetClientRect();\n\t\tpDC->SelectObject(&m_brBackground);\n\t\tpDC->PatBlt(0, 0, rcClient.Width(), rcClient.Height(), PATCOPY);\n\t}\n\n\tinline void CDocker::CDockBar::PreCreate(CREATESTRUCT &cs)\n\t{\n\t\t// Create a child window, initially hidden\n\t\tcs.style = WS_CHILD;\n\t}\n\n\tinline void CDocker::CDockBar::PreRegisterClass(WNDCLASS& wc)\n\t{\n\t\twc.lpszClassName = _T(\"Win32++ Bar\");\n\t\twc.hbrBackground = m_brBackground;\n\t}\n\n\tinline void CDocker::CDockBar::SendNotify(UINT nMessageID)\n\t{\n\t\t// Send a splitter bar notification to the parent\n\t\tm_DragPos.hdr.code = nMessageID;\n\t\tm_DragPos.hdr.hwndFrom = m_hWnd;\n\t\tm_DragPos.ptPos = GetCursorPos();\n\t\tm_DragPos.ptPos.x += 1;\n\t\tGetParent()->SendMessage(WM_NOTIFY, 0L, (LPARAM)&m_DragPos);\n\t}\n\n\tinline void CDocker::CDockBar::SetColor(COLORREF color)\n\t{\n\t\t// Useful colors:\n\t\t// GetSysColor(COLOR_BTNFACE)\t// Default Grey\n\t\t// RGB(196, 215, 250)\t\t\t// Default Blue\n\n\t\tm_brBackground.CreateSolidBrush(color);\n\t}\n\n\tinline LRESULT CDocker::CDockBar::WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\t{\n\t\t\tswitch (uMsg)\n\t\t\t{\n\t\t\tcase WM_SETCURSOR:\n\t\t\t\t{\n\t\t\t\t\tif (!(m_pDock->GetDockStyle() & DS_NO_RESIZE))\n\t\t\t\t\t{\n\t\t\t\t\t\tHCURSOR hCursor;\n\t\t\t\t\t\tDWORD dwSide = GetDock()->GetDockStyle() & 0xF;\n\t\t\t\t\t\tif ((dwSide == DS_DOCKED_LEFT) || (dwSide == DS_DOCKED_RIGHT))\n\t\t\t\t\t\t\thCursor = LoadCursor(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(IDW_SPLITH));\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\thCursor = LoadCursor(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(IDW_SPLITV));\n\n\t\t\t\t\t\tif (hCursor) SetCursor(hCursor);\n\t\t\t\t\t\telse TRACE(_T(\"**WARNING** Missing cursor resource for slider bar\\n\"));\n\n\t\t\t\t\t\treturn TRUE;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tSetCursor(LoadCursor(NULL, IDC_ARROW));\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase WM_ERASEBKGND:\n\t\t\t\treturn 0;\n\n\t\t\tcase WM_LBUTTONDOWN:\n\t\t\t\t{\n\t\t\t\t\tif (!(m_pDock->GetDockStyle() & DS_NO_RESIZE))\n\t\t\t\t\t{\n\t\t\t\t\t\tSendNotify(UWM_BAR_START);\n\t\t\t\t\t\tSetCapture();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase WM_LBUTTONUP:\n\t\t\t\tif (!(m_pDock->GetDockStyle() & DS_NO_RESIZE) && (GetCapture() == this))\n\t\t\t\t{\n\t\t\t\t\tSendNotify(UWM_BAR_END);\n\t\t\t\t\tReleaseCapture();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase WM_MOUSEMOVE:\n\t\t\t\tif (!(m_pDock->GetDockStyle() & DS_NO_RESIZE) && (GetCapture() == this))\n\t\t\t\t{\n\t\t\t\t\tSendNotify(UWM_BAR_MOVE);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// pass unhandled messages on for default processing\n\t\treturn CWnd::WndProcDefault(uMsg, wParam, lParam);\n\t}\n\n\n\t////////////////////////////////////////////////////////////////\n\t// Definitions for the CDockClient class nested within CDocker\n\t//\n\tinline CDocker::CDockClient::CDockClient() : m_pView(0), m_IsClosePressed(FALSE),\n\t\t\t\t\t\tm_bOldFocus(FALSE), m_bCaptionPressed(FALSE), m_IsTracking(FALSE)\n\t{\n\t\tm_Foregnd1 = RGB(32,32,32);\n\t\tm_Backgnd1 = RGB(190,207,227);\n\t\tm_Foregnd2 =  GetSysColor(COLOR_BTNTEXT);\n\t\tm_Backgnd2 = GetSysColor(COLOR_BTNFACE);\n\t}\n\n\tinline void CDocker::CDockClient::Draw3DBorder(RECT& Rect)\n\t{\n\t\t// Imitates the drawing of the WS_EX_CLIENTEDGE extended style\n\t\t// This draws a 2 pixel border around the specified Rect\n\t\tCWindowDC dc(this);\n\t\tCRect rcw = Rect;\n\t\tdc.CreatePen(PS_SOLID, 1, GetSysColor(COLOR_3DSHADOW));\n\t\tdc.MoveTo(0, rcw.Height());\n\t\tdc.LineTo(0, 0);\n\t\tdc.LineTo(rcw.Width(), 0);\n\t\tdc.CreatePen(PS_SOLID,1, GetSysColor(COLOR_3DDKSHADOW));\n\t\tdc.MoveTo(1, rcw.Height()-2);\n\t\tdc.LineTo(1, 1);\n\t\tdc.LineTo(rcw.Width()-2, 1);\n\t\tdc.CreatePen(PS_SOLID,1, GetSysColor(COLOR_3DHILIGHT));\n\t\tdc.MoveTo(rcw.Width()-1, 0);\n\t\tdc.LineTo(rcw.Width()-1, rcw.Height()-1);\n\t\tdc.LineTo(0, rcw.Height()-1);\n\t\tdc.CreatePen(PS_SOLID,1, GetSysColor(COLOR_3DLIGHT));\n\t\tdc.MoveTo(rcw.Width()-2, 1);\n\t\tdc.LineTo(rcw.Width()-2, rcw.Height()-2);\n\t\tdc.LineTo(1, rcw.Height()-2);\n\t}\n\n\tinline CRect CDocker::CDockClient::GetCloseRect()\n\t{\n\t\t// Calculate the close rect position in screen co-ordinates\n\t\tCRect rcClose;\n\n\t\tint gap = 4;\n\t\tCRect rc = GetWindowRect();\n\t\tint cx = GetSystemMetrics(SM_CXSMICON);\n\t\tint cy = GetSystemMetrics(SM_CYSMICON);\n\n\t\trcClose.top = 2 + rc.top + m_pDock->m_NCHeight/2 - cy/2;\n\t\trcClose.bottom = 2 + rc.top + m_pDock->m_NCHeight/2 + cy/2;\n\t\trcClose.right = rc.right - gap;\n\t\trcClose.left = rcClose.right - cx;\n\n#if defined(WINVER) && defined (WS_EX_LAYOUTRTL) && (WINVER >= 0x0500)\n\t\tif (GetWindowLongPtr(GWL_EXSTYLE) & WS_EX_LAYOUTRTL)\n\t\t{\n\t\t\trcClose.left = rc.left + gap;\n\t\t\trcClose.right = rcClose.left + cx;\n\t\t}\n#endif\n\n\n\t\treturn rcClose;\n\t}\n\n\tinline void CDocker::CDockClient::DrawCaption(WPARAM wParam)\n\t{\n\t\tif (IsWindow() && m_pDock->IsDocked() && !(m_pDock->GetDockStyle() & DS_NO_CAPTION))\n\t\t{\n\t\t\tBOOL bFocus = m_pDock->IsChildOfDocker(GetFocus());\n\t\t\tm_bOldFocus = FALSE;\n\n\t\t\t// Acquire the DC for our NonClient painting\n\t\t\tCDC* pDC;\n\t\t\tif ((wParam != 1) && (bFocus == m_bOldFocus))\n\t\t\t\tpDC = GetDCEx((HRGN)wParam, DCX_WINDOW|DCX_INTERSECTRGN|DCX_PARENTCLIP);\n\t\t\telse\n\t\t\t\tpDC\t= GetWindowDC();\n\n\t\t\t// Create and set up our memory DC\n\t\t\tCRect rc = GetWindowRect();\n\t\t\tCMemDC dcMem(pDC);\n\t\t\tint rcAdjust = (GetWindowLongPtr(GWL_EXSTYLE) & WS_EX_CLIENTEDGE)? 2 : 0;\n\t\t\tint Width = MAX(rc.Width() -rcAdjust, 0);\n\t\t\tint Height = m_pDock->m_NCHeight + rcAdjust;\n\t\t\tdcMem.CreateCompatibleBitmap(pDC, Width, Height);\n\t\t\tm_bOldFocus = bFocus;\n\n\t\t\t// Set the font for the title\n\t\t\tNONCLIENTMETRICS info = {0};\n\t\t\tinfo.cbSize = GetSizeofNonClientMetrics();\n\t\t\tSystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(info), &info, 0);\n\t\t\tdcMem.CreateFontIndirect(&info.lfStatusFont);\n\n\t\t\t// Set the Colours\n\t\t\tif (bFocus)\n\t\t\t{\n\t\t\t\tdcMem.SetTextColor(m_Foregnd1);\n\t\t\t\tdcMem.CreateSolidBrush(m_Backgnd1);\n\t\t\t\tdcMem.SetBkColor(m_Backgnd1);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tdcMem.SetTextColor(m_Foregnd2);\n\t\t\t\tdcMem.CreateSolidBrush(m_Backgnd2);\n\t\t\t\tdcMem.SetBkColor(m_Backgnd2);\n\t\t\t}\n\n\t\t\t// Draw the rectangle\n\t\t\tdcMem.CreatePen(PS_SOLID, 1, RGB(160, 150, 140));\n\t\t\tdcMem.Rectangle(rcAdjust, rcAdjust, rc.Width() -rcAdjust, m_pDock->m_NCHeight +rcAdjust);\n\n\t\t\t// Display the caption\n\t\t\tint cx = (m_pDock->GetDockStyle() & DS_NO_CLOSE)? 0 : GetSystemMetrics(SM_CXSMICON);\n\t\t\tCRect rcText(4 +rcAdjust, rcAdjust, rc.Width() -4 - cx -rcAdjust, m_pDock->m_NCHeight +rcAdjust);\n\t\t\tdcMem.DrawText(m_csCaption, m_csCaption.GetLength(), rcText, DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS);\n\n\t\t\t// Draw the close button\n\t\t\tif ((0 != m_pDock) && !(m_pDock->GetDockStyle() & DS_NO_CLOSE))\n\t\t\t\tDrawCloseButton(dcMem, bFocus);\n\n\t\t\t// Draw the 3D border\n\t\t\tif (GetWindowLongPtr(GWL_EXSTYLE) & WS_EX_CLIENTEDGE)\n\t\t\t\tDraw3DBorder(rc);\n\n\t\t\t// Copy the Memory DC to the window's DC\n\t\t\tpDC->BitBlt(rcAdjust, rcAdjust, Width, Height, &dcMem, rcAdjust, rcAdjust, SRCCOPY);\n\n\t\t\t// Required for Win98/WinME\n\t\t\tpDC->Destroy();\n\t\t}\n\t}\n\n\tinline void CDocker::CDockClient::DrawCloseButton(CDC& DrawDC, BOOL bFocus)\n\t{\n\t\t// The close button isn't displayed on Win95\n\t\tif (GetWinVersion() == 1400)  return;\n\n\t\tif (m_pDock->IsDocked() && !(m_pDock->GetDockStyle() & DS_NO_CAPTION))\n\t\t{\n\t\t\t// Determine the close button's drawing position relative to the window\n\t\t\tCRect rcClose = GetCloseRect();\n\t\t\tUINT uState = GetCloseRect().PtInRect(GetCursorPos())? m_IsClosePressed && IsLeftButtonDown()? 2 : 1 : 0;\n\t\t\tScreenToClient(rcClose);\n\n\t\t\tif (GetWindowLongPtr(GWL_EXSTYLE) & WS_EX_CLIENTEDGE)\n\t\t\t{\n\t\t\t\trcClose.OffsetRect(2, m_pDock->m_NCHeight+2);\n\t\t\t\tif (GetWindowRect().Height() < (m_pDock->m_NCHeight+4))\n\t\t\t\t\trcClose.OffsetRect(-2, -2);\n\t\t\t}\n\t\t\telse\n\t\t\t\trcClose.OffsetRect(0, m_pDock->m_NCHeight-2);\n\n\t\t\t// Draw the outer highlight for the close button\n\t\t\tif (!IsRectEmpty(&rcClose))\n\t\t\t{\n\t\t\t\tswitch (uState)\n\t\t\t\t{\n\t\t\t\tcase 0:\n\t\t\t\t\t{\n\t\t\t\t\t\t// Normal button\n\t\t\t\t\t\tDrawDC.CreatePen(PS_SOLID, 1, RGB(232, 228, 220));\n\t\t\t\t\t\tDrawDC.MoveTo(rcClose.left, rcClose.bottom);\n\t\t\t\t\t\tDrawDC.LineTo(rcClose.right, rcClose.bottom);\n\t\t\t\t\t\tDrawDC.LineTo(rcClose.right, rcClose.top);\n\t\t\t\t\t\tDrawDC.LineTo(rcClose.left, rcClose.top);\n\t\t\t\t\t\tDrawDC.LineTo(rcClose.left, rcClose.bottom);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\tcase 1:\n\t\t\t\t\t{\n\t\t\t\t\t\t// Popped up button\n\t\t\t\t\t\t// Draw outline, white at top, black on bottom\n\t\t\t\t\t\tDrawDC.CreatePen(PS_SOLID, 1, RGB(0, 0, 0));\n\t\t\t\t\t\tDrawDC.MoveTo(rcClose.left, rcClose.bottom);\n\t\t\t\t\t\tDrawDC.LineTo(rcClose.right, rcClose.bottom);\n\t\t\t\t\t\tDrawDC.LineTo(rcClose.right, rcClose.top);\n\t\t\t\t\t\tDrawDC.CreatePen(PS_SOLID, 1, RGB(255, 255, 255));\n\t\t\t\t\t\tDrawDC.LineTo(rcClose.left, rcClose.top);\n\t\t\t\t\t\tDrawDC.LineTo(rcClose.left, rcClose.bottom);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\t{\n\t\t\t\t\t\t// Pressed button\n\t\t\t\t\t\t// Draw outline, black on top, white on bottom\n\t\t\t\t\t\tDrawDC.CreatePen(PS_SOLID, 1, RGB(255, 255, 255));\n\t\t\t\t\t\tDrawDC.MoveTo(rcClose.left, rcClose.bottom);\n\t\t\t\t\t\tDrawDC.LineTo(rcClose.right, rcClose.bottom);\n\t\t\t\t\t\tDrawDC.LineTo(rcClose.right, rcClose.top);\n\t\t\t\t\t\tDrawDC.CreatePen(PS_SOLID, 1, RGB(0, 0, 0));\n\t\t\t\t\t\tDrawDC.LineTo(rcClose.left, rcClose.top);\n\t\t\t\t\t\tDrawDC.LineTo(rcClose.left, rcClose.bottom);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Manually Draw Close Button\n\t\t\t\tif (bFocus)\n\t\t\t\t\tDrawDC.CreatePen(PS_SOLID, 1, m_Foregnd1);\n\t\t\t\telse\n\t\t\t\t\tDrawDC.CreatePen(PS_SOLID, 1, m_Foregnd2);\n\n\t\t\t\tDrawDC.MoveTo(rcClose.left + 3, rcClose.top +3);\n\t\t\t\tDrawDC.LineTo(rcClose.right - 2, rcClose.bottom -2);\n\n\t\t\t\tDrawDC.MoveTo(rcClose.left + 4, rcClose.top +3);\n\t\t\t\tDrawDC.LineTo(rcClose.right - 2, rcClose.bottom -3);\n\n\t\t\t\tDrawDC.MoveTo(rcClose.left + 3, rcClose.top +4);\n\t\t\t\tDrawDC.LineTo(rcClose.right - 3, rcClose.bottom -2);\n\n\t\t\t\tDrawDC.MoveTo(rcClose.right -3, rcClose.top +3);\n\t\t\t\tDrawDC.LineTo(rcClose.left + 2, rcClose.bottom -2);\n\n\t\t\t\tDrawDC.MoveTo(rcClose.right -3, rcClose.top +4);\n\t\t\t\tDrawDC.LineTo(rcClose.left + 3, rcClose.bottom -2);\n\n\t\t\t\tDrawDC.MoveTo(rcClose.right -4, rcClose.top +3);\n\t\t\t\tDrawDC.LineTo(rcClose.left + 2, rcClose.bottom -3);\n\t\t\t}\n\t\t}\n\t}\n\n\tinline void CDocker::CDockClient::OnNCCalcSize(WPARAM& wParam, LPARAM& lParam)\n\t{\n\t\t// Sets the non-client area (and hence sets the client area)\n\t\t// This function modifies lParam\n\n\t\tUNREFERENCED_PARAMETER(wParam);\n\n\t\tif ((0 != m_pDock) && !(m_pDock->GetDockStyle() & DS_NO_CAPTION))\n\t\t{\n\t\t\tif (m_pDock->IsDocked())\n\t\t\t{\n\t\t\t\tLPRECT rc = (LPRECT)lParam;\n\t\t\t\trc->top += m_pDock->m_NCHeight;\n\t\t\t}\n\t\t}\n\t}\n\n\tinline LRESULT CDocker::CDockClient::OnNCHitTest(WPARAM wParam, LPARAM lParam)\n\t{\n\t\t// Identify which part of the non-client area the cursor is over\n\t\tif ((0 != m_pDock) && !(m_pDock->GetDockStyle() & DS_NO_CAPTION))\n\t\t{\n\t\t\tif (m_pDock->IsDocked())\n\t\t\t{\n\t\t\t\tCPoint pt(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));\n\n\t\t\t\t// Indicate if the point is in the close button (except for Win95)\n\t\t\t\tif ((GetWinVersion() > 1400) && (GetCloseRect().PtInRect(pt)))\n\t\t\t\t\treturn HTCLOSE;\n\n\t\t\t\tScreenToClient(pt);\n\n\t\t\t\t// Indicate if the point is in the caption\n\t\t\t\tif (pt.y < 0)\n\t\t\t\t\treturn HTCAPTION;\n\t\t\t}\n\t\t}\n\t\treturn CWnd::WndProcDefault(WM_NCHITTEST, wParam, lParam);\n\t}\n\n\tinline LRESULT CDocker::CDockClient::OnNCLButtonDown(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tif ((0 != m_pDock) && !(m_pDock->GetDockStyle() & DS_NO_CAPTION))\n\t\t{\n\t\t\tif ((HTCLOSE == wParam) && !(m_pDock->GetDockStyle() & DS_NO_CLOSE))\n\t\t\t{\n\t\t\t\tm_IsClosePressed = TRUE;\n\t\t\t\tSetCapture();\n\t\t\t}\n\n\t\t\tm_bCaptionPressed = TRUE;\n\t\t\tm_Oldpt.x = GET_X_LPARAM(lParam);\n\t\t\tm_Oldpt.y = GET_Y_LPARAM(lParam);\n\t\t\tif (m_pDock->IsDocked())\n\t\t\t{\n\t\t\t\tCPoint pt(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));\n\t\t\t\tScreenToClient(pt);\n\t\t\t\tm_pView->SetFocus();\n\n\t\t\t\t// Update the close button\n\t\t\t\tif ((0 != m_pDock) && !(m_pDock->GetDockStyle() & DS_NO_CLOSE))\n\t\t\t\t{\n\t\t\t\t\tCWindowDC dc(this);\n\t\t\t\t\tDrawCloseButton(dc, m_bOldFocus);\n\t\t\t\t}\n\n\t\t\t\treturn 0L;\n\t\t\t}\n\t\t}\n\t\treturn CWnd::WndProcDefault(WM_NCLBUTTONDOWN, wParam, lParam);\n\t}\n\n\tinline void CDocker::CDockClient::OnLButtonUp(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\t\tUNREFERENCED_PARAMETER(lParam);\n\n\t\tif ((0 != m_pDock) && !(m_pDock->GetDockStyle() & (DS_NO_CAPTION|DS_NO_CLOSE)))\n\t\t{\n\t\t\tm_bCaptionPressed = FALSE;\n\t\t\tif (m_IsClosePressed && GetCloseRect().PtInRect(GetCursorPos()))\n\t\t\t{\n\t\t\t\t// Destroy the docker\n\t\t\t\tif (dynamic_cast<CDockContainer*>(m_pDock->GetView()))\n\t\t\t\t{\n\t\t\t\t\tCDockContainer* pContainer = ((CDockContainer*)m_pDock->GetView())->GetActiveContainer();\n\t\t\t\t\tCDocker* pDock = m_pDock->GetDockFromView(pContainer);\n\t\t\t\t\tpDock->GetDockClient().SetClosePressed();\n\t\t\t\t\tm_pDock->UndockContainer(pContainer, GetCursorPos(), FALSE);\n\t\t\t\t\tpDock->Destroy();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tm_pDock->Hide();\n\t\t\t\t\tm_pDock->Destroy();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tinline void CDocker::CDockClient::OnLButtonDown(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\t\tUNREFERENCED_PARAMETER(lParam);\n\n\t\tm_IsClosePressed = FALSE;\n\t\tReleaseCapture();\n\t\tCWindowDC dc(this);\n\t\tDrawCloseButton(dc, m_bOldFocus);\n\t}\n\n\tinline void CDocker::CDockClient::OnMouseActivate(WPARAM wParam, LPARAM lParam)\n\t// Focus changed, so redraw the captions\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\t\tUNREFERENCED_PARAMETER(lParam);\n\n\t\tif ((0 != m_pDock) && !(m_pDock->GetDockStyle() & DS_NO_CAPTION))\n\t\t{\n\t\t\tm_pDock->GetDockAncestor()->PostMessage(UWM_DOCK_ACTIVATED, 0, 0);\n\t\t}\n\t}\n\n\tinline void CDocker::CDockClient::OnMouseMove(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tOnNCMouseMove(wParam, lParam);\n\t}\n\n\tinline void CDocker::CDockClient::OnNCMouseLeave(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\t\tUNREFERENCED_PARAMETER(lParam);\n\n\t\tm_IsTracking = FALSE;\n\t\tCWindowDC dc(this);\n\t\tif ((0 != m_pDock) && !(m_pDock->GetDockStyle() & (DS_NO_CAPTION|DS_NO_CLOSE)) && m_pDock->IsDocked())\n\t\t\tDrawCloseButton(dc, m_bOldFocus);\n\n\t\tm_IsTracking = FALSE;\n\t}\n\n\tinline LRESULT CDocker::CDockClient::OnNCMouseMove(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tif (!m_IsTracking)\n\t\t{\n\t\t\tTRACKMOUSEEVENT TrackMouseEventStruct = {0};\n\t\t\tTrackMouseEventStruct.cbSize = sizeof(TrackMouseEventStruct);\n\t\t\tTrackMouseEventStruct.dwFlags = TME_LEAVE|TME_NONCLIENT;\n\t\t\tTrackMouseEventStruct.hwndTrack = m_hWnd;\n\t\t\t_TrackMouseEvent(&TrackMouseEventStruct);\n\t\t\tm_IsTracking = TRUE;\n\t\t}\n\n\t\tif ((0 != m_pDock) && !(m_pDock->GetDockStyle() & DS_NO_CAPTION))\n\t\t{\n\t\t\tif (m_pDock->IsDocked())\n\t\t\t{\n\t\t\t\t// Discard phantom mouse move messages\n\t\t\t\tif ( (m_Oldpt.x == GET_X_LPARAM(lParam) ) && (m_Oldpt.y == GET_Y_LPARAM(lParam)))\n\t\t\t\t\treturn 0L;\n\n\t\t\t\tif (IsLeftButtonDown() && (wParam == HTCAPTION)  && (m_bCaptionPressed))\n\t\t\t\t{\n\t\t\t\t\tCDocker* pDock = (CDocker*)GetParent();\n\t\t\t\t\tif (pDock)\n\t\t\t\t\t\tpDock->Undock(GetCursorPos());\n\t\t\t\t}\n\n\t\t\t\t// Update the close button\n\t\t\t\tif ((0 != m_pDock) && !(m_pDock->GetDockStyle() & DS_NO_CLOSE))\n\t\t\t\t{\n\t\t\t\t\tCWindowDC dc(this);\n\t\t\t\t\tDrawCloseButton(dc, m_bOldFocus);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tm_bCaptionPressed = FALSE;\n\t\t}\n\t\treturn CWnd::WndProcDefault(WM_MOUSEMOVE, wParam, lParam);\n\t}\n\n\tinline LRESULT CDocker::CDockClient::OnNCPaint(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tif ((0 != m_pDock) && !(m_pDock->GetDockStyle() & DS_NO_CAPTION))\n\t\t{\n\t\t\tif (m_pDock->IsDocked())\n\t\t\t{\n\t\t\t\tDefWindowProc(WM_NCPAINT, wParam, lParam);\n\t\t\t\tDrawCaption(wParam);\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t\treturn CWnd::WndProcDefault(WM_NCPAINT, wParam, lParam);\n\t}\n\n\tinline void CDocker::CDockClient::OnWindowPosChanged(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\t\tUNREFERENCED_PARAMETER(lParam);\n\n\t\t// Reposition the View window to cover the DockClient's client area\n\t\tCRect rc = GetClientRect();\n\t\tm_pView->SetWindowPos(NULL, rc, SWP_SHOWWINDOW);\n\t}\n\n\tinline void CDocker::CDockClient::PreRegisterClass(WNDCLASS& wc)\n\t{\n\t\twc.lpszClassName = _T(\"Win32++ DockClient\");\n\t\twc.hCursor = ::LoadCursor(NULL, IDC_ARROW);\n\t}\n\n\tinline void CDocker::CDockClient::PreCreate(CREATESTRUCT& cs)\n\t{\n\t\tDWORD dwStyle = m_pDock->GetDockStyle();\n\t\tif (dwStyle & DS_CLIENTEDGE)\n\t\t\tcs.dwExStyle = WS_EX_CLIENTEDGE;\n\n#if defined(WINVER) && defined (WS_EX_LAYOUTRTL) && (WINVER >= 0x0500)\n\t\tif (m_pDock->GetWindowLongPtr(GWL_EXSTYLE) & WS_EX_LAYOUTRTL)\n\t\t\tcs.dwExStyle |= WS_EX_LAYOUTRTL;\n#endif\n\n\t}\n\n\tinline void CDocker::CDockClient::SendNotify(UINT nMessageID)\n\t{\n\t\t// Fill the DragPos structure with data\n\t\tDRAGPOS DragPos;\n\t\tDragPos.hdr.code = nMessageID;\n\t\tDragPos.hdr.hwndFrom = m_hWnd;\n\t\tDragPos.ptPos = GetCursorPos();\n\n\t\t// Send a DragPos notification to the docker\n\t\tGetParent()->SendMessage(WM_NOTIFY, 0L, (LPARAM)&DragPos);\n\t}\n\n\tinline void CDocker::CDockClient::SetCaptionColors(COLORREF Foregnd1, COLORREF Backgnd1, COLORREF Foregnd2, COLORREF Backgnd2)\n\t{\n\t\t// Set the colors used when drawing the caption\n\t\t// m_Foregnd1 Foreground colour (focused).  m_Backgnd1 Background colour (focused)\n\t\t// m_Foregnd2 Foreground colour (not focused). m_Backgnd2 Foreground colour (not focused)\n\t\tm_Foregnd1 = Foregnd1;\n\t\tm_Backgnd1 = Backgnd1;\n\t\tm_Foregnd2 = Foregnd2;\n\t\tm_Backgnd2 = Backgnd2;\n\t}\n\n\tinline LRESULT CDocker::CDockClient::WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\tswitch (uMsg)\n\t\t{\n\t\tcase WM_LBUTTONUP:\n\t\t\t{\n\t\t\t\tReleaseCapture();\n\t\t\t\tif ((0 != m_pDock) && !(m_pDock->GetDockStyle() & DS_NO_CLOSE))\n\t\t\t\t{\n\t\t\t\t\tCWindowDC dc(this);\n\t\t\t\t\tDrawCloseButton(dc, m_bOldFocus);\n\t\t\t\t\tOnLButtonUp(wParam, lParam);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase WM_MOUSEACTIVATE:\n\t\t\tOnMouseActivate(wParam, lParam);\n\t\t\tbreak;\n\n\t\tcase WM_MOUSEMOVE:\n\t\t\tOnMouseMove(wParam, lParam);\n\t\t\tbreak;\n\n\t\tcase WM_NCCALCSIZE:\n\t\t\tOnNCCalcSize(wParam, lParam);\n\t\t\tbreak;\n\n\t\tcase WM_NCHITTEST:\n\t\t\treturn OnNCHitTest(wParam, lParam);\n\n\t\tcase WM_NCLBUTTONDOWN:\n\t\t\treturn OnNCLButtonDown(wParam, lParam);\n\n\t\tcase WM_NCMOUSEMOVE:\n\t\t\treturn OnNCMouseMove(wParam, lParam);\n\n\t\tcase WM_NCPAINT:\n\t\t\treturn OnNCPaint(wParam, lParam);\n\n\t\tcase WM_NCMOUSELEAVE:\n\t\t\tOnNCMouseLeave(wParam, lParam);\n\t\t\tbreak;\n\n\t\tcase WM_WINDOWPOSCHANGED:\n\t\t\tOnWindowPosChanged(wParam, lParam);\n\t\t\tbreak;\n\t\t}\n\n\t\treturn CWnd::WndProcDefault(uMsg, wParam, lParam);\n\t}\n\n\n\t//////////////////////////////////////////////////////////////\n\t// Definitions for the CDockHint class nested within CDocker\n\t//\n\tinline CDocker::CDockHint::CDockHint() : m_uDockSideOld(0)\n\t{\n\t}\n\n\tinline CDocker::CDockHint::~CDockHint()\n\t{\n\t}\n\n\tinline RECT CDocker::CDockHint::CalcHintRectContainer(CDocker* pDockTarget)\n\t{\n\t\t// Calculate the hint window's position for container docking\n\t\tCRect rcHint = pDockTarget->GetDockClient().GetWindowRect();\n\t\tif (pDockTarget->GetDockClient().GetWindowLongPtr(GWL_EXSTYLE) & WS_EX_CLIENTEDGE)\n\t\t\trcHint.InflateRect(-2, -2);\n\t\tpDockTarget->ScreenToClient(rcHint);\n\n\t\treturn rcHint;\n\t}\n\n\tinline RECT CDocker::CDockHint::CalcHintRectInner(CDocker* pDockTarget, CDocker* pDockDrag, UINT uDockSide)\n\t{\n\t\t// Calculate the hint window's position for inner docking\n\t\tCRect rcHint = pDockTarget->GetDockClient().GetWindowRect();\n\t\tif (pDockTarget->GetDockClient().GetWindowLongPtr(GWL_EXSTYLE) & WS_EX_CLIENTEDGE)\n\t\t\trcHint.InflateRect(-2, -2);\n\t\tpDockTarget->ScreenToClient(rcHint);\n\n\t\tint Width;\n\t\tCRect rcDockDrag = pDockDrag->GetWindowRect();\n\t\tCRect rcDockTarget = pDockTarget->GetDockClient().GetWindowRect();\n\t\tif ((uDockSide  == DS_DOCKED_LEFT) || (uDockSide  == DS_DOCKED_RIGHT))\n\t\t{\n\t\t\tWidth = rcDockDrag.Width();\n\t\t\tif (Width >= (rcDockTarget.Width() - pDockDrag->GetBarWidth()))\n\t\t\t\tWidth = MAX(rcDockTarget.Width()/2 - pDockDrag->GetBarWidth(), pDockDrag->GetBarWidth());\n\t\t}\n\t\telse\n\t\t{\n\t\t\tWidth = rcDockDrag.Height();\n\t\t\tif (Width >= (rcDockTarget.Height() - pDockDrag->GetBarWidth()))\n\t\t\t\tWidth = MAX(rcDockTarget.Height()/2 - pDockDrag->GetBarWidth(), pDockDrag->GetBarWidth());\n\t\t}\n\t\tswitch (uDockSide)\n\t\t{\n\t\tcase DS_DOCKED_LEFT:\n\t\t\trcHint.right = rcHint.left + Width;\n\t\t\tbreak;\n\t\tcase DS_DOCKED_RIGHT:\n\t\t\trcHint.left = rcHint.right - Width;\n\t\t\tbreak;\n\t\tcase DS_DOCKED_TOP:\n\t\t\trcHint.bottom = rcHint.top + Width;\n\t\t\tbreak;\n\t\tcase DS_DOCKED_BOTTOM:\n\t\t\trcHint.top = rcHint.bottom - Width;\n\t\t\tbreak;\n\t\t}\n\n\t\treturn rcHint;\n\t}\n\n\tinline RECT CDocker::CDockHint::CalcHintRectOuter(CDocker* pDockDrag, UINT uDockSide)\n\t{\n\t\t// Calculate the hint window's position for outer docking\n\t\tCDocker* pDockTarget = pDockDrag->GetDockAncestor();\n\t\tCRect rcHint = pDockTarget->GetClientRect();\n\t\tif (pDockTarget->GetDockClient().GetWindowLongPtr(GWL_EXSTYLE) & WS_EX_CLIENTEDGE)\n\t\t\trcHint.InflateRect(-2, -2);\n\n\t\tint Width;\n\t\tCRect rcDockDrag = pDockDrag->GetWindowRect();\n\t\tCRect rcDockTarget = pDockTarget->GetDockClient().GetWindowRect();\n\n\t\t// Limit the docked size to half the parent's size if it won't fit inside parent\n\t\tif ((uDockSide == DS_DOCKED_LEFTMOST) || (uDockSide  == DS_DOCKED_RIGHTMOST))\n\t\t{\n\t\t\tWidth = rcDockDrag.Width();\n\t\t\tint BarWidth = pDockDrag->GetBarWidth();\n\t\t\tif (Width >= pDockTarget->GetDockClient().GetClientRect().Width() - pDockDrag->GetBarWidth())\n\t\t\t\tWidth = MAX(pDockTarget->GetDockClient().GetClientRect().Width()/2 - BarWidth, BarWidth);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tWidth = rcDockDrag.Height();\n\t\t\tint BarWidth = pDockDrag->GetBarWidth();\n\t\t\tif (Width >= pDockTarget->GetDockClient().GetClientRect().Height() - pDockDrag->GetBarWidth())\n\t\t\t\tWidth = MAX(pDockTarget->GetDockClient().GetClientRect().Height()/2 - BarWidth, BarWidth);\n\t\t}\n\t\tswitch (uDockSide)\n\t\t{\n\t\tcase DS_DOCKED_LEFTMOST:\n\t\t\trcHint.right = rcHint.left + Width;\n\t\t\tbreak;\n\t\tcase DS_DOCKED_RIGHTMOST:\n\t\t\trcHint.left = rcHint.right - Width;\n\t\t\tbreak;\n\t\tcase DS_DOCKED_TOPMOST:\n\t\t\trcHint.bottom = rcHint.top + Width;\n\t\t\tbreak;\n\t\tcase DS_DOCKED_BOTTOMMOST:\n\t\t\trcHint.top = rcHint.bottom - Width;\n\t\t\tbreak;\n\t\t}\n\n\t\treturn rcHint;\n\t}\n\n\tinline void CDocker::CDockHint::DisplayHint(CDocker* pDockTarget, CDocker* pDockDrag, UINT uDockSide)\n\t{\n\t\t// Ensure a new hint window is created if dock side changes\n\t\tif (uDockSide != m_uDockSideOld)\n\t\t{\n\t\t\tDestroy();\n\t\t\tpDockTarget->RedrawWindow( NULL, NULL, RDW_NOERASE | RDW_UPDATENOW );\n\t\t\tpDockDrag->RedrawWindow();\n\t\t}\n\t\tm_uDockSideOld = uDockSide;\n\n\t\tif (!IsWindow())\n\t\t{\n\t\t\tCRect rcHint;\n\n\t\t\tif (uDockSide & 0xF)\n\t\t\t\trcHint = CalcHintRectInner(pDockTarget, pDockDrag, uDockSide);\n\t\t\telse if (uDockSide & 0xF0000)\n\t\t\t\trcHint = CalcHintRectOuter(pDockDrag, uDockSide);\n\t\t\telse if (uDockSide & DS_DOCKED_CONTAINER)\n\t\t\t\trcHint = CalcHintRectContainer(pDockTarget);\n\t\t\telse\n\t\t\t\treturn;\n\n\t\t\tShowHintWindow(pDockTarget, rcHint);\n\t\t}\n\t}\n\n\tinline void CDocker::CDockHint::OnDraw(CDC* pDC)\n\t{\n\t\t// Display the blue tinted bitmap\n\t\tCRect rc = GetClientRect();\n\t\tCMemDC MemDC(pDC);\n\t\tMemDC.SelectObject(&m_bmBlueTint);\n\t\tpDC->BitBlt(0, 0, rc.Width(), rc.Height(), &MemDC, 0, 0, SRCCOPY);\n\t}\n\n\tinline void CDocker::CDockHint::PreCreate(CREATESTRUCT &cs)\n\t{\n\t\tcs.style = WS_POPUP;\n\n\t\t// WS_EX_TOOLWINDOW prevents the window being displayed on the taskbar\n\t\tcs.dwExStyle = WS_EX_TOOLWINDOW;\n\n\t\tcs.lpszClass = _T(\"Win32++ DockHint\");\n\t}\n\n\tinline void CDocker::CDockHint::ShowHintWindow(CDocker* pDockTarget, CRect rcHint)\n\t{\n\t\t// Save the Dock window's blue tinted bitmap\n\t\tCClientDC dcDesktop(NULL);\n\t\tCMemDC dcMem(&dcDesktop);\n\t\tCRect rcBitmap = rcHint;\n\t\tCRect rcTarget = rcHint;\n\t\tpDockTarget->ClientToScreen(rcTarget);\n\n\t\tm_bmBlueTint.CreateCompatibleBitmap(&dcDesktop, rcBitmap.Width(), rcBitmap.Height());\n\t\tCBitmap* pOldBitmap = dcMem.SelectObject(&m_bmBlueTint);\n\t\tdcMem.BitBlt(0, 0, rcBitmap.Width(), rcBitmap.Height(), &dcDesktop, rcTarget.left, rcTarget.top, SRCCOPY);\n\t\tdcMem.SelectObject(pOldBitmap); \n\t\tTintBitmap(&m_bmBlueTint, -64, -24, +128);\n\n\t\t// Create the Hint window\n\t\tif (!IsWindow())\n\t\t{\n\t\t\tCreate(pDockTarget);\n\t\t}\n\n\t\tpDockTarget->ClientToScreen(rcHint);\n\t\tSetWindowPos(NULL, rcHint, SWP_SHOWWINDOW|SWP_NOZORDER|SWP_NOACTIVATE);\n\t}\n\n\n\t////////////////////////////////////////////////////////////////\n\t// Definitions for the CTargetCentre class nested within CDocker\n\t//\n\tinline CDocker::CTargetCentre::CTargetCentre() : m_bIsOverContainer(FALSE), m_pOldDockTarget(0)\n\t{\n\t}\n\n\tinline CDocker::CTargetCentre::~CTargetCentre()\n\t{\n\t}\n\n\tinline void CDocker::CTargetCentre::OnDraw(CDC* pDC)\n\t{\n\t\tCBitmap bmCentre(IDW_SDCENTER);\n\t\tCBitmap bmLeft(IDW_SDLEFT);\n\t\tCBitmap bmRight(IDW_SDRIGHT);\n\t\tCBitmap bmTop(IDW_SDTOP);\n\t\tCBitmap bmBottom(IDW_SDBOTTOM);\n\n\t\tif (bmCentre.GetHandle())\tpDC->DrawBitmap(0, 0, 88, 88, bmCentre, RGB(255,0,255));\n\t\telse TRACE(_T(\"Missing docking resource: Target Centre\\n\"));\n\n\t\tif (bmLeft.GetHandle()) pDC->DrawBitmap(0, 29, 31, 29, bmLeft, RGB(255,0,255));\n\t\telse TRACE(_T(\"Missing docking resource: Target Left\\n\"));\n\n\t\tif (bmTop.GetHandle()) pDC->DrawBitmap(29, 0, 29, 31, bmTop, RGB(255,0,255));\n\t\telse TRACE(_T(\"Missing docking resource: Target Top\\n\"));\n\n\t\tif (bmRight.GetHandle()) pDC->DrawBitmap(55, 29, 31, 29, bmRight, RGB(255,0,255));\n\t\telse TRACE(_T(\"Missing docking resource: Target Right\\n\"));\n\n\t\tif (bmBottom.GetHandle()) pDC->DrawBitmap(29, 55, 29, 31, bmBottom, RGB(255,0,255));\n\t\telse TRACE(_T(\"Missing docking resource: Target Bottom\\n\"));\n\n\t\tif (IsOverContainer())\n\t\t{\n\t\t\tCBitmap bmMiddle(IDW_SDMIDDLE);\n\t\t\tpDC->DrawBitmap(31, 31, 25, 26, bmMiddle, RGB(255,0,255));\n\t\t}\n\t}\n\n\tinline void CDocker::CTargetCentre::OnCreate()\n\t{\n\t\t// Use a region to create an irregularly shapped window\n\t\tPOINT ptArray[16] = { {0,29}, {22, 29}, {29, 22}, {29, 0},\n\t\t                      {58, 0}, {58, 22}, {64, 29}, {87, 29},\n\t\t                      {87, 58}, {64, 58}, {58, 64}, {58, 87},\n\t\t                      {29, 87}, {29, 64}, {23, 58}, {0, 58} };\n\n\t\tCRgn rgnPoly;\n\t\trgnPoly.CreatePolygonRgn(ptArray, 16, WINDING);\n\t\tSetWindowRgn(&rgnPoly, FALSE);\n\t}\n\n\tinline BOOL CDocker::CTargetCentre::CheckTarget(LPDRAGPOS pDragPos)\n\t{\n\t\tCDocker* pDockDrag = (CDocker*)FromHandle(pDragPos->hdr.hwndFrom);\n\t\tif (NULL == pDockDrag) return FALSE;\n\n\t\tCDocker* pDockTarget = pDockDrag->GetDockFromPoint(pDragPos->ptPos);\n\t\tif (NULL == pDockTarget) return FALSE;\n\n\t\tif (!IsWindow())\tCreate();\n\t\tm_bIsOverContainer = (dynamic_cast<CDockContainer*>(pDockTarget->GetView()) != NULL);\n\n\t\t// Redraw the target if the dock target changes\n\t\tif (m_pOldDockTarget != pDockTarget)\tInvalidate();\n\t\tm_pOldDockTarget = pDockTarget;\n\n\t\tint cxImage = 88;\n\t\tint cyImage = 88;\n\n\t\tCRect rcTarget = pDockTarget->GetDockClient().GetWindowRect();\n\t\tint xMid = rcTarget.left + (rcTarget.Width() - cxImage)/2;\n\t\tint yMid = rcTarget.top + (rcTarget.Height() - cyImage)/2;\n\t\tSetWindowPos(HWND_TOPMOST, xMid, yMid, cxImage, cyImage, SWP_NOACTIVATE|SWP_SHOWWINDOW);\n\n\t\t// Create the docking zone rectangles\n\t\tCPoint pt = pDragPos->ptPos;\n\t\tScreenToClient(pt);\n\t\tCRect rcLeft(0, 29, 31, 58);\n\t\tCRect rcTop(29, 0, 58, 31);\n\t\tCRect rcRight(55, 29, 87, 58);\n\t\tCRect rcBottom(29, 55, 58, 87);\n\t\tCRect rcMiddle(31, 31, 56, 57);\n\n\t\t// Test if our cursor is in one of the docking zones\n\t\tif ((rcLeft.PtInRect(pt)) && !(pDockTarget->GetDockStyle() & DS_NO_DOCKCHILD_LEFT))\n\t\t{\n\t\t\tpDockDrag->m_BlockMove = TRUE;\n\t\t\tpDockTarget->GetDockHint().DisplayHint(pDockTarget, pDockDrag, DS_DOCKED_LEFT);\n\t\t\tpDockDrag->m_dwDockZone = DS_DOCKED_LEFT;\n\t\t\treturn TRUE;\n\t\t}\n\t\telse if ((rcTop.PtInRect(pt)) && !(pDockTarget->GetDockStyle() & DS_NO_DOCKCHILD_TOP))\n\t\t{\n\t\t\tpDockDrag->m_BlockMove = TRUE;\n\t\t\tpDockTarget->GetDockHint().DisplayHint(pDockTarget, pDockDrag, DS_DOCKED_TOP);\n\t\t\tpDockDrag->m_dwDockZone = DS_DOCKED_TOP;\n\t\t\treturn TRUE;\n\t\t}\n\t\telse if ((rcRight.PtInRect(pt)) && !(pDockTarget->GetDockStyle() & DS_NO_DOCKCHILD_RIGHT))\n\t\t{\n\t\t\tpDockDrag->m_BlockMove = TRUE;\n\t\t\tpDockTarget->GetDockHint().DisplayHint(pDockTarget, pDockDrag, DS_DOCKED_RIGHT);\n\t\t\tpDockDrag->m_dwDockZone = DS_DOCKED_RIGHT;\n\t\t\treturn TRUE;\n\t\t}\n\t\telse if ((rcBottom.PtInRect(pt)) && !(pDockTarget->GetDockStyle() & DS_NO_DOCKCHILD_BOTTOM))\n\t\t{\n\t\t\tpDockDrag->m_BlockMove = TRUE;\n\t\t\tpDockTarget->GetDockHint().DisplayHint(pDockTarget, pDockDrag, DS_DOCKED_BOTTOM);\n\t\t\tpDockDrag->m_dwDockZone = DS_DOCKED_BOTTOM;\n\t\t\treturn TRUE;\n\t\t}\n\t\telse if ((rcMiddle.PtInRect(pt)) && (IsOverContainer()))\n\t\t{\n\t\t\tpDockDrag->m_BlockMove = TRUE;\n\t\t\tpDockTarget->GetDockHint().DisplayHint(pDockTarget, pDockDrag, DS_DOCKED_CONTAINER);\n\t\t\tpDockDrag->m_dwDockZone = DS_DOCKED_CONTAINER;\n\t\t\treturn TRUE;\n\t\t}\n\t\telse\n\t\t\treturn FALSE;\n\t}\n\n\t////////////////////////////////////////////////////////////////\n\t// Definitions for the CTarget class nested within CDocker\n\t// CTarget is the base class for a number of CTargetXXX classes\n\tinline CDocker::CTarget::~CTarget()\n\t{\n\t}\n\n\tinline void CDocker::CTarget::OnDraw(CDC* pDC)\n\t{\n\t\tBITMAP bm = m_bmImage.GetBitmapData();\n\t\tint cxImage = bm.bmWidth;\n\t\tint cyImage = bm.bmHeight;\n\n\t\tif (m_bmImage) \n\t\t\tpDC->DrawBitmap(0, 0, cxImage, cyImage, m_bmImage, RGB(255,0,255));\n\t\telse \n\t\t\tTRACE(_T(\"Missing docking resource\\n\"));\n\t}\n\n\tinline void CDocker::CTarget::PreCreate(CREATESTRUCT &cs)\n\t{\n\t\tcs.style = WS_POPUP;\n\t\tcs.dwExStyle = WS_EX_TOPMOST|WS_EX_TOOLWINDOW;\n\t\tcs.lpszClass = _T(\"Win32++ DockTargeting\");\n\t}\n\n\n\t////////////////////////////////////////////////////////////////\n\t// Definitions for the CTargetLeft class nested within CDocker\n\t//\n\tinline BOOL CDocker::CTargetLeft::CheckTarget(LPDRAGPOS pDragPos)\n\t{\n\t\tCDocker* pDockDrag = (CDocker*)FromHandle(pDragPos->hdr.hwndFrom);\n\t\tif (NULL == pDockDrag) return FALSE;\n\n\t\tCPoint pt = pDragPos->ptPos;\n\t\tCDocker* pDockTarget = pDockDrag->GetDockFromPoint(pt)->GetTopmostDocker();\n\t\tif (pDockTarget != pDockDrag->GetDockAncestor())\n\t\t{\n\t\t\tDestroy();\n\t\t\treturn FALSE;\n\t\t}\n\n\t\tBITMAP bm = m_bmImage.GetBitmapData();\n\t\tint cxImage = bm.bmWidth;\n\t\tint cyImage = bm.bmHeight;\n\n\t\tif (!IsWindow())\n\t\t{\n\t\t\tCreate();\n\t\t\tCRect rc = pDockTarget->GetWindowRect();\n\t\t\tint yMid = rc.top + (rc.Height() - cyImage)/2;\n\t\t\tSetWindowPos(HWND_TOPMOST, rc.left + 10, yMid, cxImage, cyImage, SWP_NOACTIVATE|SWP_SHOWWINDOW);\n\t\t}\n\n\t\tCRect rcLeft(0, 0, cxImage, cyImage);\n\t\tScreenToClient(pt);\n\n\t\t// Test if our cursor is in one of the docking zones\n\t\tif ((rcLeft.PtInRect(pt)) && !(pDockTarget->GetDockStyle() & DS_NO_DOCKCHILD_LEFT))\n\t\t{\n\t\t\tpDockDrag->m_BlockMove = TRUE;\n\t\t\tpDockTarget->GetDockHint().DisplayHint(pDockTarget, pDockDrag, DS_DOCKED_LEFTMOST);\n\t\t\tpDockDrag->m_dwDockZone = DS_DOCKED_LEFTMOST;\n\t\t\treturn TRUE;\n\t\t}\n\n\t\treturn FALSE;\n\t}\n\n\n\t////////////////////////////////////////////////////////////////\n\t// Definitions for the CTargetTop class nested within CDocker\n\t//\n\tinline BOOL CDocker::CTargetTop::CheckTarget(LPDRAGPOS pDragPos)\n\t{\n\t\tCDocker* pDockDrag = (CDocker*)FromHandle(pDragPos->hdr.hwndFrom);\n\t\tif (NULL == pDockDrag) return FALSE;\n\n\t\tCPoint pt = pDragPos->ptPos;\n\t\tCDocker* pDockTarget = pDockDrag->GetDockFromPoint(pt)->GetTopmostDocker();\n\t\tif (pDockTarget != pDockDrag->GetDockAncestor())\n\t\t{\n\t\t\tDestroy();\n\t\t\treturn FALSE;\n\t\t}\n\n\t\tBITMAP bm = m_bmImage.GetBitmapData();\n\t\tint cxImage = bm.bmWidth;\n\t\tint cyImage = bm.bmHeight;\n\n\t\tif (!IsWindow())\n\t\t{\n\t\t\tCreate();\n\t\t\tCRect rc = pDockTarget->GetWindowRect();\n\t\t\tint xMid = rc.left + (rc.Width() - cxImage)/2;\n\t\t\tSetWindowPos(HWND_TOPMOST, xMid, rc.top + 10, cxImage, cyImage, SWP_NOACTIVATE|SWP_SHOWWINDOW);\n\t\t}\n\n\t\tCRect rcTop(0, 0, cxImage, cyImage);\n\t\tScreenToClient(pt);\n\n\t\t// Test if our cursor is in one of the docking zones\n\t\tif ((rcTop.PtInRect(pt)) && !(pDockTarget->GetDockStyle() & DS_NO_DOCKCHILD_TOP))\n\t\t{\n\t\t\tpDockDrag->m_BlockMove = TRUE;\n\t\t\tpDockTarget->GetDockHint().DisplayHint(pDockTarget, pDockDrag, DS_DOCKED_TOPMOST);\n\t\t\tpDockDrag->m_dwDockZone = DS_DOCKED_TOPMOST;\n\t\t\treturn TRUE;\n\t\t}\n\n\t\treturn FALSE;\n\t}\n\n\n\t////////////////////////////////////////////////////////////////\n\t// Definitions for the CTargetRight class nested within CDocker\n\t//\n\tinline BOOL CDocker::CTargetRight::CheckTarget(LPDRAGPOS pDragPos)\n\t{\n\t\tCDocker* pDockDrag = (CDocker*)FromHandle(pDragPos->hdr.hwndFrom);\n\t\tif (NULL == pDockDrag) return FALSE;\n\n\t\tCPoint pt = pDragPos->ptPos;\n\t\tCDocker* pDockTarget = pDockDrag->GetDockFromPoint(pt)->GetTopmostDocker();\n\t\tif (pDockTarget != pDockDrag->GetDockAncestor())\n\t\t{\n\t\t\tDestroy();\n\t\t\treturn FALSE;\n\t\t}\n\n\t\tBITMAP bm = m_bmImage.GetBitmapData();\n\t\tint cxImage = bm.bmWidth;\n\t\tint cyImage = bm.bmHeight;\n\n\t\tif (!IsWindow())\n\t\t{\n\t\t\tCreate();\n\t\t\tCRect rc = pDockTarget->GetWindowRect();\n\t\t\tint yMid = rc.top + (rc.Height() - cyImage)/2;\n\t\t\tSetWindowPos(HWND_TOPMOST, rc.right - 10 - cxImage, yMid, cxImage, cyImage, SWP_NOACTIVATE|SWP_SHOWWINDOW);\n\t\t}\n\n\t\tCRect rcRight(0, 0, cxImage, cyImage);\n\t\tScreenToClient(pt);\n\n\t\t// Test if our cursor is in one of the docking zones\n\t\tif ((rcRight.PtInRect(pt)) && !(pDockTarget->GetDockStyle() & DS_NO_DOCKCHILD_RIGHT))\n\t\t{\n\t\t\tpDockDrag->m_BlockMove = TRUE;\n\t\t\tpDockTarget->GetDockHint().DisplayHint(pDockTarget, pDockDrag, DS_DOCKED_RIGHTMOST);\n\t\t\tpDockDrag->m_dwDockZone = DS_DOCKED_RIGHTMOST;\n\t\t\treturn TRUE;\n\t\t}\n\n\t\treturn FALSE;\n\t}\n\n\n\t////////////////////////////////////////////////////////////////\n\t// Definitions for the CTargetBottom class nested within CDocker\n\t//\n\tinline BOOL CDocker::CTargetBottom::CheckTarget(LPDRAGPOS pDragPos)\n\t{\n\t\tCDocker* pDockDrag = (CDocker*)FromHandle(pDragPos->hdr.hwndFrom);\n\t\tif (NULL == pDockDrag) return FALSE;\n\n\t\tCPoint pt = pDragPos->ptPos;\n\t\tCDocker* pDockTarget = pDockDrag->GetDockFromPoint(pt)->GetTopmostDocker();\n\t\tif (pDockTarget != pDockDrag->GetDockAncestor())\n\t\t{\n\t\t\tDestroy();\n\t\t\treturn FALSE;\n\t\t}\n\n\t\tBITMAP bm = m_bmImage.GetBitmapData();\n\t\tint cxImage = bm.bmWidth;\n\t\tint cyImage = bm.bmHeight;\n\n\t\tif (!IsWindow())\n\t\t{\n\t\t\tCreate();\n\t\t\tCRect rc = pDockTarget->GetWindowRect();\n\t\t\tint xMid = rc.left + (rc.Width() - cxImage)/2;\n\t\t\tSetWindowPos(HWND_TOPMOST, xMid, rc.bottom - 10 - cyImage, cxImage, cyImage, SWP_NOACTIVATE|SWP_SHOWWINDOW);\n\t\t}\n\t\tCRect rcBottom(0, 0, cxImage, cyImage);\n\t\tScreenToClient(pt);\n\n\t\t// Test if our cursor is in one of the docking zones\n\t\tif ((rcBottom.PtInRect(pt)) && !(pDockTarget->GetDockStyle() & DS_NO_DOCKCHILD_BOTTOM))\n\t\t{\n\t\t\tpDockDrag->m_BlockMove = TRUE;\n\t\t\tpDockTarget->GetDockHint().DisplayHint(pDockTarget, pDockDrag, DS_DOCKED_BOTTOMMOST);\n\t\t\tpDockDrag->m_dwDockZone = DS_DOCKED_BOTTOMMOST;\n\t\t\treturn TRUE;\n\t\t}\n\n\t\treturn FALSE;\n\t}\n\n\n\t/////////////////////////////////////////\n\t// Definitions for the CDocker class\n\t//\n\tinline CDocker::CDocker() : m_pDockParent(NULL), m_pDockActive(NULL), m_BlockMove(FALSE), m_Undocking(FALSE),\n\t\t            m_bIsClosing(FALSE), m_bIsDragging(FALSE), m_bDragAutoResize(TRUE), m_DockStartSize(0), m_nDockID(0),\n\t\t            m_nTimerCount(0), m_NCHeight(0), m_dwDockZone(0), m_DockSizeRatio(1.0), m_DockStyle(0), m_hOldFocus(0)\n\t{\n\t\t// Assume this docker is the DockAncestor for now.\n\t\tm_pDockAncestor = this;\n\t}\n\n\tinline CDocker::~CDocker()\n\t{\n\t\tGetDockBar().Destroy();\n\n\t\tstd::vector <DockPtr>::iterator iter;\n\t\tif (GetDockAncestor() == this)\n\t\t{\n\t\t\t// Destroy all dock descendants of this dock ancestor\n\t\t\tfor (iter = GetAllDockers().begin(); iter < GetAllDockers().end(); ++iter)\n\t\t\t{\n\t\t\t\t(*iter)->Destroy();\n\t\t\t}\n\t\t}\n\t}\n\n\tinline CDocker* CDocker::AddDockedChild(CDocker* pDocker, DWORD dwDockStyle, int DockSize, int nDockID /* = 0*/)\n\t// This function creates the docker, and adds it to the docker heirachy as docked\n\t{\n\t\t// Create the docker window as a child of the frame window.\n\t\t// This pernamently sets the frame window as the docker window's owner,\n\t\t// even when its parent is subsequently changed.\n\n\t\tassert(pDocker);\n\n\t\t// Store the Docker's pointer in the DockAncestor's vector for later deletion\n\t\tGetDockAncestor()->m_vAllDockers.push_back(DockPtr(pDocker));\n\n\t\tpDocker->SetDockStyle(dwDockStyle);\n\t\tpDocker->m_nDockID = nDockID;\n\t\tpDocker->m_pDockAncestor = GetDockAncestor();\n\t\tpDocker->m_pDockParent = this;\n\t\tpDocker->SetDockSize(DockSize);\n\t\tCWnd* pFrame = GetDockAncestor()->GetAncestor();\n\t\tpDocker->Create(pFrame);\n\t\tpDocker->SetParent(this);\n\n\t\t// Dock the docker window\n\t\tif (dwDockStyle & DS_DOCKED_CONTAINER)\n\t\t\tDockInContainer(pDocker, dwDockStyle);\n\t\telse\n\t\t\tDock(pDocker, dwDockStyle);\n\n\t\t// Issue TRACE warnings for any missing resources\n\t\tHMODULE hMod= GetApp()->GetResourceHandle();\n\n\t\tif (!(dwDockStyle & DS_NO_RESIZE))\n\t\t{\n\t\t\tif (!FindResource(hMod, MAKEINTRESOURCE(IDW_SPLITH), RT_GROUP_CURSOR))\n\t\t\t\tTRACE(_T(\"**WARNING** Horizontal cursor resource missing\\n\"));\n\t\t\tif (!FindResource(hMod, MAKEINTRESOURCE(IDW_SPLITV), RT_GROUP_CURSOR))\n\t\t\t\tTRACE(_T(\"**WARNING** Vertical cursor resource missing\\n\"));\n\t\t}\n\n\t\tif (!(dwDockStyle & DS_NO_UNDOCK))\n\t\t{\n\t\t\tif (!FindResource(hMod, MAKEINTRESOURCE(IDW_SDCENTER), RT_BITMAP))\n\t\t\t\tTRACE(_T(\"**WARNING** Docking center bitmap resource missing\\n\"));\n\t\t\tif (!FindResource(hMod, MAKEINTRESOURCE(IDW_SDLEFT), RT_BITMAP))\n\t\t\t\tTRACE(_T(\"**WARNING** Docking left bitmap resource missing\\n\"));\n\t\t\tif (!FindResource(hMod, MAKEINTRESOURCE(IDW_SDRIGHT), RT_BITMAP))\n\t\t\t\tTRACE(_T(\"**WARNING** Docking right bitmap resource missing\\n\"));\n\t\t\tif (!FindResource(hMod, MAKEINTRESOURCE(IDW_SDTOP), RT_BITMAP))\n\t\t\t\tTRACE(_T(\"**WARNING** Docking top bitmap resource missing\\n\"));\n\t\t\tif (!FindResource(hMod, MAKEINTRESOURCE(IDW_SDBOTTOM), RT_BITMAP))\n\t\t\t\tTRACE(_T(\"**WARNING** Docking center bottom resource missing\\n\"));\n\t\t}\n\n\t\tif (dwDockStyle & DS_DOCKED_CONTAINER)\n\t\t{\n\t\t\tif (!FindResource(hMod, MAKEINTRESOURCE(IDW_SDMIDDLE), RT_BITMAP))\n\t\t\t\tTRACE(_T(\"**WARNING** Docking container bitmap resource missing\\n\"));\n\t\t}\n\n\t\treturn pDocker;\n\t}\n\n\tinline CDocker* CDocker::AddUndockedChild(CDocker* pDocker, DWORD dwDockStyle, int DockSize, RECT rc, int nDockID /* = 0*/)\n\t// This function creates the docker, and adds it to the docker heirachy as undocked\n\t{\n\t\tassert(pDocker);\n\n\t\t// Store the Docker's pointer in the DockAncestor's vector for later deletion\n\t\tGetDockAncestor()->m_vAllDockers.push_back(DockPtr(pDocker));\n\n\t\tpDocker->SetDockSize(DockSize);\n\t\tpDocker->SetDockStyle(dwDockStyle & 0XFFFFFF0);\n\t\tpDocker->m_nDockID = nDockID;\n\t\tpDocker->m_pDockAncestor = GetDockAncestor();\n\n\t\t// Initially create the as a child window of the frame\n\t\t// This makes the frame window the owner of our docker\n\t\tCWnd* pFrame = GetDockAncestor()->GetAncestor();\n\t\tpDocker->Create(pFrame);\n\t\tpDocker->SetParent(this);\n\n\t\t// Change the Docker to a POPUP window\n\t\tDWORD dwStyle = WS_POPUP| WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_VISIBLE;\n\t\tpDocker->SetWindowLongPtr(GWL_STYLE, dwStyle);\n\t\tpDocker->SetRedraw(FALSE);\n\t\tpDocker->SetParent(0);\n\t\tpDocker->SetWindowPos(HWND_TOP, rc, SWP_SHOWWINDOW|SWP_FRAMECHANGED);\n\t\tpDocker->SetRedraw(TRUE);\n\t\tpDocker->RedrawWindow(0, 0, RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE|RDW_ALLCHILDREN);\n\t\tpDocker->SetWindowText(pDocker->GetCaption().c_str());\n\n\t\treturn pDocker;\n\t}\n\n\tinline void CDocker::CheckAllTargets(LPDRAGPOS pDragPos)\n\t// Calls CheckTarget for each possible target zone\n\t{\n\t\tif (!GetDockAncestor()->m_TargetCentre.CheckTarget(pDragPos))\n\t\t{\n\t\t\tif (!GetDockAncestor()->m_TargetLeft.CheckTarget(pDragPos))\n\t\t\t{\n\t\t\t\tif(!GetDockAncestor()->m_TargetTop.CheckTarget(pDragPos))\n\t\t\t\t{\n\t\t\t\t\tif(!GetDockAncestor()->m_TargetRight.CheckTarget(pDragPos))\n\t\t\t\t\t{\n\t\t\t\t\t\tif(!GetDockAncestor()->m_TargetBottom.CheckTarget(pDragPos))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Not in a docking zone, so clean up\n\t\t\t\t\t\t\tNMHDR nmhdr = pDragPos->hdr;\n\t\t\t\t\t\t\tCDocker* pDockDrag = (CDocker*)FromHandle(nmhdr.hwndFrom);\n\t\t\t\t\t\t\tif (pDockDrag)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (pDockDrag->m_BlockMove)\n\t\t\t\t\t\t\t\t\tpDockDrag->RedrawWindow(0, 0, RDW_FRAME|RDW_INVALIDATE);\n\n\t\t\t\t\t\t\t\tGetDockHint().Destroy();\n\t\t\t\t\t\t\t\tpDockDrag->m_dwDockZone = 0;\n\t\t\t\t\t\t\t\tpDockDrag->m_BlockMove = FALSE;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tinline BOOL CDocker::VerifyDockers()\n\t// A diagnostic routine which verifies the integrity of the docking layout\n\t{\n\t\tBOOL bResult = TRUE;\n\n\t\t// Check dock ancestor\n\t\tstd::vector<DockPtr>::iterator iter;\n\n\t\tfor (iter = GetAllDockers().begin(); iter != GetAllDockers().end(); ++iter)\n\t\t{\n\t\t\tif (GetDockAncestor() != (*iter)->m_pDockAncestor)\n\t\t\t{\n\t\t\t\tTRACE(_T(\"Invalid Dock Ancestor\\n\"));\n\t\t\t\tbResult = FALSE;\n\t\t\t}\n\t\t}\n\n\t\t// Check presence of dock parent\n\t\tfor (iter = GetAllDockers().begin(); iter != GetAllDockers().end(); ++iter)\n\t\t{\n\t\t\tif ((*iter)->IsUndocked() && (*iter)->m_pDockParent != 0)\n\t\t\t{\n\t\t\t\tTRACE(_T(\"Error: Undocked dockers should not have a dock parent\\n\"));\n\t\t\t\t\tbResult = FALSE;\n\t\t\t}\n\n\t\t\tif ((*iter)->IsDocked() && (*iter)->m_pDockParent == 0)\n\t\t\t{\n\t\t\t\tTRACE(_T(\"Error: Docked dockers should have a dock parent\\n\"));\n\t\t\t\t\tbResult = FALSE;\n\t\t\t}\n\t\t}\n\n\t\t// Check dock parent/child relationship\n\t\tfor (iter = GetAllDockers().begin(); iter != GetAllDockers().end(); ++iter)\n\t\t{\n\t\t\tstd::vector<CDocker*>::iterator iterChild;\n\t\t\tfor (iterChild = (*iter)->GetDockChildren().begin(); iterChild != (*iter)->GetDockChildren().end(); ++iterChild)\n\t\t\t{\n\t\t\t\tif ((*iterChild)->m_pDockParent != (*iter).get())\n\t\t\t\t{\n\t\t\t\t\tTRACE(_T(\"Error: Docking parent/Child information mismatch\\n\"));\n\t\t\t\t\tbResult = FALSE;\n\t\t\t\t}\n\t\t\t\tif ((*iterChild)->GetParent() != (*iter).get())\n\t\t\t\t{\n\t\t\t\t\tTRACE(_T(\"Error: Incorrect windows child parent relationship\\n\"));\n\t\t\t\t\tbResult = FALSE;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check dock parent chain\n\t\tfor (iter = GetAllDockers().begin(); iter != GetAllDockers().end(); ++iter)\n\t\t{\n\t\t\tCDocker* pDockTopLevel = (*iter)->GetTopmostDocker();\n\t\t\tif (pDockTopLevel->IsDocked())\n\t\t\t\tTRACE(_T(\"Error: Top level parent should be undocked\\n\"));\n\t\t}\n\n\t\treturn bResult;\n\t}\n\n\tinline void CDocker::Close()\n\t{\n\t\t// Destroy the docker\n\t\tHide();\n\t\tDestroy();\n\t}\n\n\tinline void CDocker::CloseAllDockers()\n\t{\n\t\tassert(this == GetDockAncestor());\t// Must call CloseAllDockers from the DockAncestor\n\n\t\tstd::vector <DockPtr>::iterator v;\n\n\t\tSetRedraw(FALSE);\n\t\tstd::vector<DockPtr> AllDockers = GetAllDockers();\n\t\tfor (v = AllDockers.begin(); v != AllDockers.end(); ++v)\n\t\t{\n\t\t\t// The CDocker is destroyed when the window is destroyed\n\t\t\t(*v)->m_bIsClosing = TRUE;\n\t\t\t(*v)->Destroy();\t// Destroy the window\n\t\t}\n\n\t\tGetDockChildren().clear();\n\t\tSetRedraw(TRUE);\n\t\tRecalcDockLayout();\n\t}\n\n\tinline void CDocker::CloseAllTargets()\n\t{\n\t\tGetDockAncestor()->m_TargetCentre.Destroy();\n\t\tGetDockAncestor()->m_TargetLeft.Destroy();\n\t\tGetDockAncestor()->m_TargetTop.Destroy();\n\t\tGetDockAncestor()->m_TargetRight.Destroy();\n\t\tGetDockAncestor()->m_TargetBottom.Destroy();\n\t}\n\n\tinline void CDocker::Dock(CDocker* pDocker, UINT DockStyle)\n\t// Docks the specified docker inside this docker\n\t{\n\t\tassert(pDocker);\n\n\t\tpDocker->m_pDockParent = this;\n\t\tpDocker->m_BlockMove = FALSE;\n\t\tpDocker->SetDockStyle(DockStyle);\n\t\tm_vDockChildren.push_back(pDocker);\n\t\tpDocker->ConvertToChild(m_hWnd);\n\n\t\t// Limit the docked size to half the parent's size if it won't fit inside parent\n\t\tif (((DockStyle & 0xF)  == DS_DOCKED_LEFT) || ((DockStyle &0xF)  == DS_DOCKED_RIGHT))\n\t\t{\n\t\t\tint Width = GetDockClient().GetWindowRect().Width();\n\t\t\tint BarWidth = pDocker->GetBarWidth();\n\t\t\tif (pDocker->m_DockStartSize >= (Width - BarWidth))\n\t\t\t\tpDocker->SetDockSize(MAX(Width/2 - BarWidth, BarWidth));\n\n\t\t\tpDocker->m_DockSizeRatio = ((double)pDocker->m_DockStartSize) / (double)GetWindowRect().Width();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tint Height = GetDockClient().GetWindowRect().Height();\n\t\t\tint BarWidth = pDocker->GetBarWidth();\n\t\t\tif (pDocker->m_DockStartSize >= (Height - BarWidth))\n\t\t\t\tpDocker->SetDockSize(MAX(Height/2 - BarWidth, BarWidth));\n\n\t\t\tpDocker->m_DockSizeRatio = ((double)pDocker->m_DockStartSize) / (double)GetWindowRect().Height();\n\t\t}\n\n\t\t// Redraw the docked windows\n\t\tGetAncestor()->SetForegroundWindow();\n\t\tGetTopmostDocker()->m_hOldFocus = pDocker->GetView()->GetHwnd();\n\t\tpDocker->GetView()->SetFocus();\n\n\t\tGetTopmostDocker()->SetRedraw(FALSE);\n\t\tRecalcDockLayout();\n\t\tGetTopmostDocker()->SetRedraw(TRUE);\n\t\tGetTopmostDocker()->RedrawWindow();\n\t}\n\n\tinline void CDocker::DockInContainer(CDocker* pDock, DWORD dwDockStyle)\n\t// Add a container to an existing container\n\t{\n\t\tif ((dwDockStyle & DS_DOCKED_CONTAINER) && (dynamic_cast<CDockContainer*>(pDock->GetView())))\n\t\t{\n\t\t\t// Transfer any dock children to this docker\n\t\t\tpDock->MoveDockChildren(this);\n\n\t\t\t// Transfer container children to the target container\n\t\t\tCDockContainer* pContainer = (CDockContainer*)GetView();\n\t\t\tCDockContainer* pContainerSource = (CDockContainer*)pDock->GetView();\n\n\t\t\tif (pContainerSource->GetAllContainers().size() > 1)\n\t\t\t{\n\t\t\t\t// The container we're about to add has children, so transfer those first\n\t\t\t\tstd::vector<ContainerInfo>::reverse_iterator riter;\n\t\t\t\tstd::vector<ContainerInfo> AllContainers = pContainerSource->GetAllContainers();\n\t\t\t\tfor ( riter = AllContainers.rbegin() ; riter < AllContainers.rend() -1; ++riter )\n\t\t\t\t{\n\t\t\t\t\t// Remove child container from pContainerSource\n\t\t\t\t\tCDockContainer* pContainerChild = (*riter).pContainer;\n\t\t\t\t\tpContainerChild->ShowWindow(SW_HIDE);\n\t\t\t\t\tpContainerSource->RemoveContainer(pContainerChild);\n\n\t\t\t\t\t// Add child container to this container\n\t\t\t\t\tpContainer->AddContainer(pContainerChild);\n\n\t\t\t\t\tCDocker* pDockChild = GetDockFromView(pContainerChild);\n\t\t\t\t\tpDockChild->SetParent(this);\n\t\t\t\t\tpDockChild->m_pDockParent = this;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpContainer->AddContainer((CDockContainer*)pDock->GetView());\n\t\t\tpDock->m_pDockParent = this;\n\t\t\tpDock->m_BlockMove = FALSE;\n\t\t\tpDock->ShowWindow(SW_HIDE);\n\t\t\tpDock->SetWindowLongPtr(GWL_STYLE, WS_CHILD);\n\t\t\tpDock->SetDockStyle(dwDockStyle);\n\t\t\tpDock->SetParent(this);\n\t\t}\n\t}\n\n\tinline void CDocker::DockOuter(CDocker* pDocker, DWORD dwDockStyle)\n\t// Docks the specified docker inside the dock ancestor\n\t{\n\t\tassert(pDocker);\n\n\t\tpDocker->m_pDockParent = GetDockAncestor();\n\n\t\tDWORD OuterDocking = dwDockStyle & 0xF0000;\n\t\tDWORD DockSide = OuterDocking / 0x10000;\n\t\tdwDockStyle &= 0xFFF0FFFF;\n\t\tdwDockStyle |= DockSide;\n\n\t\t// Set the dock styles\n\t\tDWORD dwStyle = WS_CHILD | WS_VISIBLE;\n\t\tpDocker->m_BlockMove = FALSE;\n\t\tpDocker->SetWindowLongPtr(GWL_STYLE, dwStyle);\n\t\tpDocker->ShowWindow(SW_HIDE);\n\t\tpDocker->SetDockStyle(dwDockStyle);\n\n\t\t// Set the docking relationships\n\t\tstd::vector<CDocker*>::iterator iter = GetDockAncestor()->m_vDockChildren.begin();\n\t\tGetDockAncestor()->m_vDockChildren.insert(iter, pDocker);\n\t\tpDocker->SetParent(GetDockAncestor());\n\t\tpDocker->GetDockBar().SetParent(GetDockAncestor());\n\n\t\t// Limit the docked size to half the parent's size if it won't fit inside parent\n\t\tif (((dwDockStyle & 0xF)  == DS_DOCKED_LEFT) || ((dwDockStyle &0xF)  == DS_DOCKED_RIGHT))\n\t\t{\n\t\t\tint Width = GetDockAncestor()->GetDockClient().GetWindowRect().Width();\n\t\t\tint BarWidth = pDocker->GetBarWidth();\n\t\t\tif (pDocker->m_DockStartSize >= (Width - BarWidth))\n\t\t\t\tpDocker->SetDockSize(MAX(Width/2 - BarWidth, BarWidth));\n\n\t\t\tpDocker->m_DockSizeRatio = ((double)pDocker->m_DockStartSize) / (double)GetDockAncestor()->GetWindowRect().Width();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tint Height = GetDockAncestor()->GetDockClient().GetWindowRect().Height();\n\t\t\tint BarWidth = pDocker->GetBarWidth();\n\t\t\tif (pDocker->m_DockStartSize >= (Height - BarWidth))\n\t\t\t\tpDocker->SetDockSize(MAX(Height/2 - BarWidth, BarWidth));\n\n\t\t\tpDocker->m_DockSizeRatio = ((double)pDocker->m_DockStartSize) / (double)GetDockAncestor()->GetWindowRect().Height();\n\t\t}\n\n\t\t// Redraw the docked windows\n\t\tGetAncestor()->SetFocus();\n\t\tpDocker->GetView()->SetFocus();\n\t\tRecalcDockLayout();\n\t}\n\n\tinline void CDocker::DrawAllCaptions()\n\t{\n\t\tstd::vector<DockPtr>::iterator iter;\n\t\tfor (iter = GetAllDockers().begin(); iter != GetAllDockers().end(); iter++)\n\t\t{\n\t\t\tif ((*iter)->IsDocked())\n\t\t\t\t(*iter)->GetDockClient().DrawCaption((WPARAM)1);\n\t\t}\n\t}\n\n\tinline void CDocker::DrawHashBar(HWND hBar, POINT Pos)\n\t// Draws a hashed bar while the splitter bar is being dragged\n\t{\n\t\tCDocker* pDock = ((CDockBar*)FromHandle(hBar))->GetDock();\n\t\tif (NULL == pDock) return;\n\n\t\tBOOL bVertical = ((pDock->GetDockStyle() & 0xF) == DS_DOCKED_LEFT) || ((pDock->GetDockStyle() & 0xF) == DS_DOCKED_RIGHT);\n\n\t\tCClientDC dcBar(this);\n\n\t\tWORD HashPattern[] = {0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA};\n\t\tCBitmap bmHash;\n\t\tCBrush brDithered;\n\t\tbmHash.CreateBitmap(8, 8, 1, 1, HashPattern);\n\t\tbrDithered.CreatePatternBrush(&bmHash);\n\t\tdcBar.SelectObject(&brDithered);\n\n\t\tCRect rc = FromHandle(hBar)->GetWindowRect();\n\t\tScreenToClient(rc);\n\t\tint cx = rc.Width();\n\t\tint cy = rc.Height();\n\t\tint BarWidth = pDock->GetDockBar().GetWidth();\n\n\t\tif (bVertical)\n\t\t\tdcBar.PatBlt(Pos.x - BarWidth/2, rc.top, BarWidth, cy, PATINVERT);\n\t\telse\n\t\t\tdcBar.PatBlt(rc.left, Pos.y - BarWidth/2, cx, BarWidth, PATINVERT);\n\t}\n\t\n\tinline CDockContainer* CDocker::GetContainer() const\n\t{\n\t\tCDockContainer* pContainer = NULL;\n\t\tif (dynamic_cast<CDockContainer*>(GetView()))\n\t\t\tpContainer = (CDockContainer*)GetView();\n\n\t\treturn pContainer;\n\t}\n\n\tinline CDocker* CDocker::GetActiveDocker() const\n\t// Returns the docker whose child window has focus\n\t{\n\t\tCWnd* pWnd = GetFocus();\n\t\tCDocker* pDock= NULL;\n\t\twhile (pWnd && (pDock == NULL))\n\t\t{\n\t\t\tif (IsRelated(pWnd))\n\t\t\t\tpDock = (CDocker*)pWnd;\n\n\t\t\tpWnd = pWnd->GetParent();\n\t\t}\n\n\t\treturn pDock;\n\t}\n\n\tinline CDocker* CDocker::GetDockAncestor() const\n\t// The GetDockAncestor function retrieves the pointer to the\n\t//  ancestor (root docker parent) of the Docker.\n\t{\n\t\treturn m_pDockAncestor;\n\t}\n\n\tinline CDocker* CDocker::GetDockFromPoint(POINT pt) const\n\t// Retrieves the Docker whose view window contains the specified point\n\t{\n\t\t// Step 1: Find the top level Docker the point is over\n\t\tCDocker* pDockTop = NULL;\n\t\tCWnd* pAncestor = GetDockAncestor()->GetAncestor();\n\n\t\t// Iterate through all top level windows\n\t\tCWnd* pWnd = GetWindow(GW_HWNDFIRST);\n\t\twhile(pWnd)\n\t\t{\n\t\t\tif (IsRelated(pWnd) || pWnd == pAncestor)\n\t\t\t{\n\t\t\t\tCDocker* pDockTest;\n\t\t\t\tif (pWnd == pAncestor)\n\t\t\t\t\tpDockTest = GetDockAncestor();\n\t\t\t\telse\n\t\t\t\t\tpDockTest = (CDocker*)pWnd;\n\n\t\t\t\tCRect rc = pDockTest->GetClientRect();\n\t\t\t\tpDockTest->ClientToScreen(rc);\n\t\t\t\tif ((this != pDockTest) && rc.PtInRect(pt))\n\t\t\t\t{\n\t\t\t\t\tpDockTop = pDockTest;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpWnd = pWnd->GetWindow(GW_HWNDNEXT);\n\t\t}\n\n\t\t// Step 2: Find the docker child whose view window has the point\n\t\tCDocker* pDockTarget = NULL;\n\t\tif (pDockTop)\n\t\t{\n\t\t\tCDocker* pDockParent = pDockTop;\n\t\t\tCDocker* pDockTest = pDockParent;\n\n\t\t\twhile (IsRelated(pDockTest))\n\t\t\t{\n\t\t\t\tpDockParent = pDockTest;\n\t\t\t\tCPoint ptLocal = pt;\n\t\t\t\tpDockParent->ScreenToClient(ptLocal);\n\t\t\t\tpDockTest = (CDocker*)pDockParent->ChildWindowFromPoint(ptLocal);\n\t\t\t\tassert (pDockTest != pDockParent);\n\t\t\t}\n\n\t\t\tCRect rc = pDockParent->GetDockClient().GetWindowRect();\n\t\t\tif (rc.PtInRect(pt)) pDockTarget = pDockParent;\n\t\t}\n\n\t\treturn pDockTarget;\n\t}\n\n\tinline CDocker* CDocker::GetDockFromID(int n_DockID) const\n\t{\n\t\tstd::vector <DockPtr>::iterator v;\n\n\t\tif (GetDockAncestor())\n\t\t{\n\t\t\tfor (v = GetDockAncestor()->m_vAllDockers.begin(); v != GetDockAncestor()->m_vAllDockers.end(); v++)\n\t\t\t{\n\t\t\t\tif (n_DockID == (*v)->GetDockID())\n\t\t\t\t\treturn (*v).get();\n\t\t\t}\n\t\t}\n\n\t\treturn 0;\n\t}\n\n\tinline CDocker* CDocker::GetDockFromView(CWnd* pView) const\n\t{\n\t\tCDocker* pDock = 0;\n\t\tstd::vector<DockPtr>::iterator iter;\n\t\tstd::vector<DockPtr> AllDockers = GetAllDockers();\n\t\tfor (iter = AllDockers.begin(); iter != AllDockers.end(); ++iter)\n\t\t{\n\t\t\tif ((*iter)->GetView() == pView)\n\t\t\t\tpDock = (*iter).get();\n\t\t}\n\n\t\treturn pDock;\n\t}\n\n\tinline int CDocker::GetDockSize() const\n\t{\n\t\t// Returns the size of the docker to be used if it is redocked\n\t\t// Note: This function returns 0 if the docker has the DS_DOCKED_CONTAINER style\n\n\t\tCRect rcParent;\n\t\tif (GetDockParent())\n\t\t\trcParent = GetDockParent()->GetWindowRect();\n\t\telse\n\t\t\trcParent = GetDockAncestor()->GetWindowRect();\n\n\t\tdouble DockSize = 0;\n\t\tif ((GetDockStyle() & DS_DOCKED_LEFT) || (GetDockStyle() & DS_DOCKED_RIGHT))\n\t\t\tDockSize = (double)(rcParent.Width()*m_DockSizeRatio);\n\t\telse if ((GetDockStyle() & DS_DOCKED_TOP) || (GetDockStyle() & DS_DOCKED_BOTTOM))\n\t\t\tDockSize = (double)(rcParent.Height()*m_DockSizeRatio);\n\t\telse if ((GetDockStyle() & DS_DOCKED_CONTAINER))\n\t\t\tDockSize = 0;\n\n\t\treturn (int)DockSize;\n\t}\n\n\tinline CDocker* CDocker::GetTopmostDocker() const\n\t// Returns the docker's parent at the top of the Z order.\n\t// Could be the dock ancestor or an undocked docker.\n\t{\n\t\tCDocker* pDockTopLevel = (CDocker* const)this;\n\n\t\twhile(pDockTopLevel->GetDockParent())\n\t\t{\n\t\t\tassert (pDockTopLevel != pDockTopLevel->GetDockParent());\n\t\t\tpDockTopLevel = pDockTopLevel->GetDockParent();\n\t\t}\n\n\t\treturn pDockTopLevel;\n\t}\n\n\tinline CTabbedMDI* CDocker::GetTabbedMDI() const\n\t{\n\t\tCTabbedMDI* pTabbedMDI = NULL;\n\t\tif (dynamic_cast<CTabbedMDI*>(GetView()))\n\t\t\tpTabbedMDI = (CTabbedMDI*)GetView();\n\n\t\treturn pTabbedMDI;\n\t}\n\n\tinline int CDocker::GetTextHeight()\n\t{\n\t\tNONCLIENTMETRICS nm = {0};\n\t\tnm.cbSize = GetSizeofNonClientMetrics();\n\t\tSystemParametersInfo (SPI_GETNONCLIENTMETRICS, 0, &nm, 0);\n\t\tLOGFONT lf = nm.lfStatusFont;\n\n\t\tCClientDC dc(this);\n\t\tdc.CreateFontIndirect(&lf);\n\t\tCSize szText = dc.GetTextExtentPoint32(_T(\"Text\"), lstrlen(_T(\"Text\")));\n\t\treturn szText.cy;\n\t}\n\n\tinline void CDocker::Hide()\n\t{\n\t\t// Undocks a docker (if needed) and hides it.\n\t\t// Do unhide the docker, dock it.\n\n\t\tif (IsDocked())\n\t\t{\n\t\t\tif (dynamic_cast<CDockContainer*>(GetView()))\n\t\t\t{\n\t\t\t\tCDockContainer* pContainer = GetContainer();\n\t\t\t\tCDocker* pDock = GetDockFromView(pContainer->GetContainerParent());\n\t\t\t\tpDock->UndockContainer(pContainer, GetCursorPos(), FALSE);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tCDocker* pDockUndockedFrom = SeparateFromDock();\n\t\t\t\tpDockUndockedFrom->RecalcDockLayout();\n\t\t\t}\n\t\t}\n\n\t\tShowWindow(SW_HIDE);\n\t}\n\n\tinline BOOL CDocker::IsChildOfDocker(CWnd* pWnd) const\n\t// returns true if the specified window is a child of this docker\n\t{\n\t\twhile ((pWnd != NULL) && (pWnd != GetDockAncestor()))\n\t\t{\n\t\t\tif (pWnd == (CWnd*)this) return TRUE;\n\t\t\tif (IsRelated(pWnd)) break;\n\t\t\tpWnd = pWnd->GetParent();\n\t\t}\n\n\t\treturn FALSE;\n\t}\n\n\tinline BOOL CDocker::IsDocked() const\n\t{\n\t\treturn (((m_DockStyle&0xF) || (m_DockStyle & DS_DOCKED_CONTAINER)) && !m_Undocking); // Boolean expression\n\t}\n\n\tinline BOOL CDocker::IsDragAutoResize()\n\t{\n\t\treturn m_bDragAutoResize;\n\t}\n\n\tinline BOOL CDocker::IsRelated(CWnd* pWnd) const\n\t// Returns TRUE if the hWnd is a docker within this dock family\n\t{\n\t\tif (GetDockAncestor() == pWnd) return TRUE;\n\n\t\tstd::vector<DockPtr>::iterator iter;\n\t\tfor (iter = GetAllDockers().begin(); iter < GetAllDockers().end(); ++iter)\n\t\t{\n\t\t\tif ((*iter).get() == pWnd) return TRUE;\n\t\t}\n\n\t\treturn FALSE;\n\t}\n\n\tinline BOOL CDocker::IsUndocked() const\n\t{\n\t\treturn (!((m_DockStyle&0xF)|| (m_DockStyle & DS_DOCKED_CONTAINER)) && !m_Undocking); // Boolean expression\n\t}\n\n\tinline BOOL CDocker::LoadRegistrySettings(tString tsRegistryKeyName)\n\t// Recreates the docker layout based on information stored in the registry.\n\t// Assumes the DockAncestor window is already created.\n\t{\n\t\tBOOL bResult = FALSE;\n\n\t\tif (0 != tsRegistryKeyName.size())\n\t\t{\n\t\t\tstd::vector<DockInfo> vDockList;\n\t\t\tstd::vector<int> vActiveContainers;\n\t\t\ttString tsKey = _T(\"Software\\\\\") + tsRegistryKeyName + _T(\"\\\\Dock Windows\");\n\t\t\tHKEY hKey = 0;\n\t\t\tRegOpenKeyEx(HKEY_CURRENT_USER, tsKey.c_str(), 0, KEY_READ, &hKey);\n\t\t\tif (hKey)\n\t\t\t{\n\t\t\t\tDWORD dwType = REG_BINARY;\n\t\t\t\tDWORD BufferSize = sizeof(DockInfo);\n\t\t\t\tDockInfo di;\n\t\t\t\tint i = 0;\n\t\t\t\tTCHAR szNumber[20];\n\t\t\t\ttString tsSubKey = _T(\"DockChild\");\n\t\t\t\ttsSubKey += _itot(i, szNumber, 10);\n\n\t\t\t\t// Fill the DockList vector from the registry\n\t\t\t\twhile (0 == RegQueryValueEx(hKey, tsSubKey.c_str(), NULL, &dwType, (LPBYTE)&di, &BufferSize))\n\t\t\t\t{\n\t\t\t\t\tvDockList.push_back(di);\n\t\t\t\t\ti++;\n\t\t\t\t\ttsSubKey = _T(\"DockChild\");\n\t\t\t\t\ttsSubKey += _itot(i, szNumber, 10);\n\t\t\t\t}\n\n\t\t\t\tdwType = REG_DWORD;\n\t\t\t\tBufferSize = sizeof(int);\n\t\t\t\tint nID;\n\t\t\t\ti = 0;\n\t\t\t\ttsSubKey = _T(\"ActiveContainer\");\n\t\t\t\ttsSubKey += _itot(i, szNumber, 10);\n\t\t\t\t// Fill the DockList vector from the registry\n\t\t\t\twhile (0 == RegQueryValueEx(hKey, tsSubKey.c_str(), NULL, &dwType, (LPBYTE)&nID, &BufferSize))\n\t\t\t\t{\n\t\t\t\t\tvActiveContainers.push_back(nID);\n\t\t\t\t\ti++;\n\t\t\t\t\ttsSubKey = _T(\"ActiveContainer\");\n\t\t\t\t\ttsSubKey += _itot(i, szNumber, 10);\n\t\t\t\t}\n\n\t\t\t\tRegCloseKey(hKey);\n\t\t\t\tif (vDockList.size() > 0) bResult = TRUE;\n\t\t\t}\n\n\t\t\t// Add dockers without parents first\n\t\t\tstd::vector<DockInfo>::iterator iter;\n\t\t\tfor (iter = vDockList.begin(); iter < vDockList.end() ; ++iter)\n\t\t\t{\n\t\t\t\tDockInfo di = (*iter);\n\t\t\t\tif (di.DockParentID == 0)\n\t\t\t\t{\n\t\t\t\t\tCDocker* pDocker = NewDockerFromID(di.DockID);\n\t\t\t\t\tif (pDocker)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (di.DockStyle & 0xF)\n\t\t\t\t\t\t\tAddDockedChild(pDocker, di.DockStyle, di.DockSize, di.DockID);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tAddUndockedChild(pDocker, di.DockStyle, di.DockSize, di.Rect, di.DockID);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tTRACE(_T(\"Failed to add dockers without parents from registry\"));\n\t\t\t\t\t\tbResult = FALSE;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove dockers without parents from vDockList\n\t\t\tfor (UINT n = (UINT)vDockList.size(); n > 0; --n)\n\t\t\t{\n\t\t\t\titer = vDockList.begin() + n-1;\n\t\t\t\tif ((*iter).DockParentID == 0)\n\t\t\t\t\tvDockList.erase(iter);\n\t\t\t}\n\n\t\t\t// Add remaining dockers\n\t\t\twhile (vDockList.size() > 0)\n\t\t\t{\n\t\t\t\tbool bFound = false;\n\t\t\t\tstd::vector<DockInfo>::iterator iter;\n\t\t\t\tfor (iter = vDockList.begin(); iter < vDockList.end(); ++iter)\n\t\t\t\t{\n\t\t\t\t\tDockInfo di = *iter;\n\t\t\t\t\tCDocker* pDockParent = GetDockFromID(di.DockParentID);\n\n\t\t\t\t\tif (pDockParent != 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tCDocker* pDock = NewDockerFromID(di.DockID);\n\t\t\t\t\t\tif(pDock)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpDockParent->AddDockedChild(pDock, di.DockStyle, di.DockSize, di.DockID);\n\t\t\t\t\t\t\tbFound = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tTRACE(_T(\"Failed to add dockers with parents from registry\"));\n\t\t\t\t\t\t\tbResult = FALSE;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvDockList.erase(iter);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!bFound)\n\t\t\t\t{\n\t\t\t\t\tTRACE(_T(\"Orphaned dockers stored in registry \"));\n\t\t\t\t\tbResult = FALSE;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstd::vector<int>::iterator iterID;\n\t\t\tfor (iterID = vActiveContainers.begin(); iterID < vActiveContainers.end(); ++iterID)\n\t\t\t{\n\t\t\t\tCDocker* pDocker = GetDockFromID(*iterID);\n\t\t\t\tif (pDocker)\n\t\t\t\t{\n\t\t\t\t\tCDockContainer* pContainer = pDocker->GetContainer();\n\t\t\t\t\tif (pContainer)\n\t\t\t\t\t{\n\t\t\t\t\t\tint nPage = pContainer->GetContainerIndex(pContainer);\n\t\t\t\t\t\tif (nPage >= 0)\n\t\t\t\t\t\t\tpContainer->SelectPage(nPage);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!bResult) CloseAllDockers();\n\t\treturn bResult;\n\t}\n\n\tinline void CDocker::MoveDockChildren(CDocker* pDockTarget)\n\t// Used internally by Dock and Undock\n\t{\n\t\tassert(pDockTarget);\n\n\t\t// Transfer any dock children from the current docker to the target docker\n\t\tstd::vector<CDocker*>::iterator iter;\n\t\tfor (iter = GetDockChildren().begin(); iter < GetDockChildren().end(); ++iter)\n\t\t{\n\t\t\tpDockTarget->GetDockChildren().push_back(*iter);\n\t\t\t(*iter)->m_pDockParent = pDockTarget;\n\t\t\t(*iter)->SetParent(pDockTarget);\n\t\t\t(*iter)->GetDockBar().SetParent(pDockTarget);\n\t\t}\n\t\tGetDockChildren().clear();\n\t}\n\n\tinline CDocker* CDocker::NewDockerFromID(int nID)\n\t// Used in LoadRegistrySettings. Creates a new Docker from the specified ID\n\t{\n\t\tUNREFERENCED_PARAMETER(nID);\n\n\t\t// Override this function to create the Docker objects as shown below\n\n\t\tCDocker* pDock = NULL;\n\t/*\tswitch(nID)\n\t\t{\n\t\tcase ID_CLASSES:\n\t\t\tpDock = new CDockClasses;\n\t\t\tbreak;\n\t\tcase ID_FILES:\n\t\t\tpDock = new CDockFiles;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tTRACE(_T(\"Unknown Dock ID\\n\"));\n\t\t\tbreak;\n\t\t} */\n\n\t\treturn pDock;\n\t}\n\n\tinline void CDocker::OnActivate(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(lParam);\n\n\t\t// Only top level undocked dockers get this message\n\t\tif (LOWORD(wParam) == WA_INACTIVE)\n\t\t{\n\t\t\tGetTopmostDocker()->m_hOldFocus = ::GetFocus();\n\n\t\t\t// Send a notification of focus lost\n\t\t\tint idCtrl = ::GetDlgCtrlID(m_hOldFocus);\n\t\t\tNMHDR nhdr={0};\n\t\t\tnhdr.hwndFrom = m_hOldFocus;\n\t\t\tnhdr.idFrom = idCtrl;\n\t\t\tnhdr.code = UWM_FRAMELOSTFOCUS;\n\t\t\tSendMessage(WM_NOTIFY, (WPARAM)idCtrl, (LPARAM)&nhdr);\n\t\t}\n\t}\n\n\tinline void CDocker::OnCaptionTimer(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(lParam);\n\n\t\tif (this == GetDockAncestor())\n\t\t{\n\t\t\tif (wParam == 1)\n\t\t\t{\n\t\t\t\tDrawAllCaptions();\n\t\t\t\tm_nTimerCount++;\n\t\t\t\tif (m_nTimerCount == 10)\n\t\t\t\t{\n\t\t\t\t\tKillTimer(wParam);\n\t\t\t\t\tm_nTimerCount = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tinline void CDocker::OnCreate()\n\t{\n\n#if defined(WINVER) && defined (WS_EX_LAYOUTRTL) && (WINVER >= 0x0500)\n\t\tif (GetParent()->GetWindowLongPtr(GWL_EXSTYLE) & WS_EX_LAYOUTRTL)\n\t\t{\n\t\t\tDWORD dwExStyle = GetWindowLongPtr(GWL_EXSTYLE);\n\t\t\tSetWindowLongPtr(GWL_EXSTYLE, dwExStyle | WS_EX_LAYOUTRTL);\n\t\t}\n#endif\n\n\t\t// Create the various child windows\n\t\tGetDockClient().SetDock(this);\n\t\tGetDockClient().Create(this);\n\n\t\tassert(GetView());\t\t\t// Use SetView in CMainFrame's constructor to set the view window\n\t\tGetView()->Create(&GetDockClient());\n\n\t\t// Create the slider bar belonging to this docker\n\t\tGetDockBar().SetDock(this);\n\t\tif (GetDockAncestor() != this)\n\t\t\tGetDockBar().Create(GetParent());\n\n\t\t// Now remove the WS_POPUP style. It was required to allow this window\n\t\t// to be owned by the frame window.\n\t\tSetWindowLongPtr(GWL_STYLE, WS_CHILD);\n\t\tSetParent(GetParent());\t\t// Reinstate the window's parent\n\n\t\t// Set the default colour for the splitter bar\n\t\tCOLORREF rgbColour = GetSysColor(COLOR_BTNFACE);\n\t\tCWnd* pFrame = GetDockAncestor()->GetAncestor();\n\t\tReBarTheme* pTheme = (ReBarTheme*)pFrame->SendMessage(UWM_GETREBARTHEME, 0, 0);\n\n\t\tif (pTheme && pTheme->UseThemes && pTheme->clrBkgnd2 != 0)\n\t\t\t\trgbColour =pTheme->clrBkgnd2;\n\n\t\tSetBarColor(rgbColour);\n\n\t\t// Set the caption height based on text height\n\t\tm_NCHeight = MAX(20, GetTextHeight() + 5);\n\t}\n\n\tinline void CDocker::OnDestroy(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\t\tUNREFERENCED_PARAMETER(lParam);\n\n\t\t// Destroy any dock children first\n\t\tstd::vector<CDocker*>::iterator iter;\n\t\tfor (iter = GetDockChildren().begin(); iter < GetDockChildren().end(); ++iter)\n\t\t{\n\t\t\t(*iter)->Destroy();\n\t\t}\n\n\t\tif (dynamic_cast<CDockContainer*>(GetView()) && IsUndocked())\n\t\t{\n\t\t\tCDockContainer* pContainer = (CDockContainer*)GetView();\n\t\t\tif (pContainer->GetAllContainers().size() > 1)\n\t\t\t{\n\t\t\t\t// This container has children, so destroy them now\n\t\t\t\tstd::vector<ContainerInfo> AllContainers = pContainer->GetAllContainers();\n\t\t\t\tstd::vector<ContainerInfo>::iterator iter;\n\t\t\t\tfor (iter = AllContainers.begin(); iter < AllContainers.end(); ++iter)\n\t\t\t\t{\n\t\t\t\t\tif ((*iter).pContainer != pContainer)\n\t\t\t\t\t{\n\t\t\t\t\t\t// Reset container parent before destroying the dock window\n\t\t\t\t\t\tCDocker* pDock = GetDockFromView((*iter).pContainer);\n\t\t\t\t\t\tif (pContainer->IsWindow())\n\t\t\t\t\t\t\tpContainer->SetParent(&pDock->GetDockClient());\n\n\t\t\t\t\t\tpDock->Destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tGetDockBar().Destroy();\n\n\t\t// Post a destroy docker message\n\t\tif ( GetDockAncestor()->IsWindow() )\n\t\t\tGetDockAncestor()->PostMessage(UWM_DOCK_DESTROYED, (WPARAM)this, 0L);\n\t}\n\n\tinline void CDocker::OnDockDestroyed(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(lParam);\n\n\t\tCDocker* pDock = (CDocker*)wParam;\n\n\t\tassert( this == GetDockAncestor() );\n\t\tstd::vector<DockPtr>::iterator iter;\n\t\tfor (iter = GetAllDockers().begin(); iter < GetAllDockers().end(); ++iter)\n\t\t{\n\t\t\tif ((*iter).get() == pDock)\n\t\t\t{\n\t\t\t\tGetAllDockers().erase(iter);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tinline void CDocker::OnExitSizeMove(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\t\tUNREFERENCED_PARAMETER(lParam);\n\n\t\tm_BlockMove = FALSE;\n\t\tm_bIsDragging = FALSE;\n\t\tSendNotify(UWM_DOCK_END);\n\t}\n\n\tinline LRESULT CDocker::OnNotify(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\t\tLPDRAGPOS pdp = (LPDRAGPOS)lParam;\n\n\t\tswitch (((LPNMHDR)lParam)->code)\n\t\t{\n\t\tcase UWM_DOCK_START:\n\t\t\t{\n\t\t\t\tif (IsDocked())\n\t\t\t\t{\n\t\t\t\t\tUndock(GetCursorPos());\n\t\t\t\t\tSendMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(pdp->ptPos.x, pdp->ptPos.y));\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase UWM_DOCK_MOVE:\n\t\t\t{\n\t\t\t\tCheckAllTargets((LPDRAGPOS)lParam);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase UWM_DOCK_END:\n\t\t\t{\n\t\t\t\tCDocker* pDock = (CDocker*)FromHandle(pdp->hdr.hwndFrom);\n\t\t\t\tif (NULL == pDock) break;\n\n\t\t\t\tUINT DockZone = pdp->DockZone;\n\t\t\t\tCRect rc = pDock->GetWindowRect();\n\n\t\t\t\tswitch(DockZone)\n\t\t\t\t{\n\t\t\t\tcase DS_DOCKED_LEFT:\n\t\t\t\tcase DS_DOCKED_RIGHT:\n\t\t\t\t\tpDock->SetDockSize(rc.Width());\n\t\t\t\t\tDock(pDock, pDock->GetDockStyle() | DockZone);\n\t\t\t\t\tbreak;\n\t\t\t\tcase DS_DOCKED_TOP:\n\t\t\t\tcase DS_DOCKED_BOTTOM:\n\t\t\t\t\tpDock->SetDockSize(rc.Height());\n\t\t\t\t\tDock(pDock, pDock->GetDockStyle() | DockZone);\n\t\t\t\t\tbreak;\n\t\t\t\tcase DS_DOCKED_CONTAINER:\n\t\t\t\t\t{\n\t\t\t\t\t\tDockInContainer(pDock, pDock->GetDockStyle() | DockZone);\n\t\t\t\t\t\tCDockContainer* pContainer = (CDockContainer*)GetView();\n\t\t\t\t\t\tint nPage = pContainer->GetContainerIndex((CDockContainer*)pDock->GetView());\n\t\t\t\t\t\tpContainer->SelectPage(nPage);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase DS_DOCKED_LEFTMOST:\n\t\t\t\tcase DS_DOCKED_RIGHTMOST:\n\t\t\t\t\tpDock->SetDockSize(rc.Width());\n\t\t\t\t\tDockOuter(pDock, pDock->GetDockStyle() | DockZone);\n\t\t\t\t\tbreak;\n\t\t\t\tcase DS_DOCKED_TOPMOST:\n\t\t\t\tcase DS_DOCKED_BOTTOMMOST:\n\t\t\t\t\tpDock->SetDockSize(rc.Height());\n\t\t\t\t\tDockOuter(pDock, pDock->GetDockStyle() | DockZone);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tGetDockHint().Destroy();\n\t\t\t\tCloseAllTargets();\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase UWM_BAR_START:\n\t\t\t{\n\t\t\t\tCPoint pt = pdp->ptPos;\n\t\t\t\tScreenToClient(pt);\n\t\t\t\tif (!IsDragAutoResize())\n\t\t\t\t\tDrawHashBar(pdp->hdr.hwndFrom, pt);\n\t\t\t\tm_OldPoint = pt;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase UWM_BAR_MOVE:\n\t\t\t{\n\t\t\t\tCPoint pt = pdp->ptPos;\n\t\t\t\tScreenToClient(pt);\n\n\t\t\t\tif (pt != m_OldPoint)\n\t\t\t\t{\n\t\t\t\t\tif (IsDragAutoResize())\n\t\t\t\t\t\tResizeDockers(pdp);\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tDrawHashBar(pdp->hdr.hwndFrom, m_OldPoint);\n\t\t\t\t\t\tDrawHashBar(pdp->hdr.hwndFrom, pt);\n\t\t\t\t\t}\n\n\t\t\t\t\tm_OldPoint = pt;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase UWM_BAR_END:\n\t\t\t{\n\t\t\t\tPOINT pt = pdp->ptPos;\n\t\t\t\tScreenToClient(pt);\n\n\t\t\t\tif (!IsDragAutoResize())\n\t\t\t\t\tDrawHashBar(pdp->hdr.hwndFrom, pt);\n\n\t\t\t\tResizeDockers(pdp);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase NM_SETFOCUS:\n\t\t\tif (GetDockAncestor()->IsWindow())\n\t\t\t\tGetDockAncestor()->PostMessage(UWM_DOCK_ACTIVATED, 0, 0);\n\t\t\tbreak;\n\t\tcase UWM_FRAMEGOTFOCUS:\n\t\t\tif (GetDockAncestor()->IsWindow())\n\t\t\t\tGetDockAncestor()->PostMessage(UWM_DOCK_ACTIVATED, 0, 0);\n\t\t\tif (GetView()->IsWindow())\n\t\t\t\tGetView()->SendMessage(WM_NOTIFY, wParam, lParam);\n\t\t\tbreak;\n\t\tcase UWM_FRAMELOSTFOCUS:\n\t\t\tif (GetDockAncestor()->IsWindow())\n\t\t\t\tGetDockAncestor()->PostMessage(UWM_DOCK_ACTIVATED, 0, 0);\n\t\t\tif (GetView()->IsWindow())\n\t\t\t\tGetView()->SendMessage(WM_NOTIFY, wParam, lParam);\n\t\t\tbreak;\n\t\t}\n\t\treturn 0L;\n\t}\n\n\tinline void CDocker::ResizeDockers(LPDRAGPOS pdp)\n\t// Called when the docker's splitter bar is dragged\n\t{\n\t\tassert(pdp);\n\n\t\tPOINT pt = pdp->ptPos;\n\t\tScreenToClient(pt);\n\n\t\tCDocker* pDock = ((CDockBar*)FromHandle(pdp->hdr.hwndFrom))->GetDock();\n\t\tif (NULL == pDock) return;\n\n\t\tRECT rcDock = pDock->GetWindowRect();\n\t\tScreenToClient(rcDock);\n\n\t\tdouble dBarWidth = pDock->GetDockBar().GetWidth();\n\t\tint iBarWidth    = pDock->GetDockBar().GetWidth();\n\t\tint DockSize;\n\n\t\tswitch (pDock->GetDockStyle() & 0xF)\n\t\t{\n\t\tcase DS_DOCKED_LEFT:\n\t\t\tDockSize = MAX(pt.x, iBarWidth/2) - rcDock.left - (int)(.5* dBarWidth);\n\t\t\tDockSize = MAX(-iBarWidth, DockSize);\n\t\t\tpDock->SetDockSize(DockSize);\n\t\t\tpDock->m_DockSizeRatio = ((double)pDock->m_DockStartSize)/((double)pDock->m_pDockParent->GetWindowRect().Width());\n\t\t\tbreak;\n\t\tcase DS_DOCKED_RIGHT:\n\t\t\tDockSize = rcDock.right - MAX(pt.x, iBarWidth/2) - (int)(.5* dBarWidth);\n\t\t\tDockSize = MAX(-iBarWidth, DockSize);\n\t\t\tpDock->SetDockSize(DockSize);\n\t\t\tpDock->m_DockSizeRatio = ((double)pDock->m_DockStartSize)/((double)pDock->m_pDockParent->GetWindowRect().Width());\n\t\t\tbreak;\n\t\tcase DS_DOCKED_TOP:\n\t\t\tDockSize = MAX(pt.y, iBarWidth/2) - rcDock.top - (int)(.5* dBarWidth);\n\t\t\tDockSize = MAX(-iBarWidth, DockSize);\n\t\t\tpDock->SetDockSize(DockSize);\n\t\t\tpDock->m_DockSizeRatio = ((double)pDock->m_DockStartSize)/((double)pDock->m_pDockParent->GetWindowRect().Height());\n\t\t\tbreak;\n\t\tcase DS_DOCKED_BOTTOM:\n\t\t\tDockSize = rcDock.bottom - MAX(pt.y, iBarWidth/2) - (int)(.5* dBarWidth);\n\t\t\tDockSize = MAX(-iBarWidth, DockSize);\n\t\t\tpDock->SetDockSize(DockSize);\n\t\t\tpDock->m_DockSizeRatio = ((double)pDock->m_DockStartSize)/((double)pDock->m_pDockParent->GetWindowRect().Height());\n\t\t\tbreak;\n\t\t}\n\n\t\tRecalcDockLayout();\n\t}\n\n\tinline void CDocker::OnSetFocus(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\t\tUNREFERENCED_PARAMETER(lParam);\n\n\t\tif (IsUndocked() && m_hOldFocus)\n\t\t\t::SetFocus(m_hOldFocus);\n\t\telse\n\t\t\t// Pass focus on the the view window\n\t\t\tGetView()->SetFocus();\n\n\t\tif ((this == GetTopmostDocker()) && (this != GetDockAncestor()))\n\t\t{\n\t\t\t// Send a notification to top level window\n\t\t\tint idCtrl = ::GetDlgCtrlID(m_hOldFocus);\n\t\t\tNMHDR nhdr={0};\n\t\t\tnhdr.hwndFrom = m_hOldFocus;\n\t\t\tnhdr.idFrom = idCtrl;\n\t\t\tnhdr.code = NM_SETFOCUS;\n\t\t\tSendMessage(WM_NOTIFY, (WPARAM)idCtrl, (LPARAM)&nhdr);\n\t\t}\n\t}\n\n\tinline void CDocker::OnSysColorChange(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\t\tUNREFERENCED_PARAMETER(lParam);\n\n\t\tif (this == GetDockAncestor())\n\t\t{\n\t\t\tCOLORREF rgbColour = GetSysColor(COLOR_BTNFACE);\n\t\t\tCWnd* pFrame = GetDockAncestor()->GetAncestor();\n\t\t\tReBarTheme* pTheme = (ReBarTheme*)pFrame->SendMessage(UWM_GETREBARTHEME, 0, 0);\n\n\t\t\tif (pTheme && pTheme->UseThemes && pTheme->clrBand2 != 0)\n\t\t\t\trgbColour = pTheme->clrBkgnd2;\n\t\t\telse\n\t\t\t\trgbColour = GetSysColor(COLOR_BTNFACE);\n\n\t\t\t// Set the splitter bar colour for each docker decendant\n\t\t\tstd::vector<DockPtr>::iterator iter;\n\t\t\tfor (iter = GetAllDockers().begin(); iter < GetAllDockers().end(); ++iter)\n\t\t\t\t(*iter)->SetBarColor(rgbColour);\n\n\t\t\t// Set the splitter bar colour for the docker ancestor\n\t\t\tSetBarColor(rgbColour);\n\t\t}\n\t}\n\n\tinline LRESULT CDocker::OnSysCommand(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tswitch(wParam&0xFFF0)\n\t\t{\n\t\tcase SC_MOVE:\n\t\t\t// An undocked docker is being moved\n\t\t\t{\n\t\t\t\tBOOL bResult = FALSE;\n\t\t\t\tm_bIsDragging = TRUE;\n\t\t\t\tSetCursor(LoadCursor(NULL, IDC_ARROW));\n\n\t\t\t\tif (SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, &bResult, 0))\n\t\t\t\t{\n\t\t\t\t\t// Turn on DragFullWindows for this move\n\t\t\t\t\tSystemParametersInfo(SPI_SETDRAGFULLWINDOWS, TRUE, 0, 0);\n\n\t\t\t\t\t// Process this message\n\t\t\t\t\tDefWindowProc(WM_SYSCOMMAND, wParam, lParam);\n\n\t\t\t\t\t// Return DragFullWindows to its previous state\n\t\t\t\t\tSystemParametersInfo(SPI_SETDRAGFULLWINDOWS, bResult, 0, 0);\n\t\t\t\t\treturn 0L;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase SC_CLOSE:\n\t\t\t// The close button is pressed on an undocked docker\n\t\t\tm_bIsClosing = TRUE;\n\t\t\tbreak;\n\t\t}\n\t\treturn CWnd::WndProcDefault(WM_SYSCOMMAND, wParam, lParam);\n\t}\n\n\tinline LRESULT CDocker::OnWindowPosChanging(WPARAM wParam, LPARAM lParam)\n\t{\n\t\t// Suspend dock drag moving while over dock zone\n\t\tif (m_BlockMove)\n\t\t{\n        \tLPWINDOWPOS pWndPos = (LPWINDOWPOS)lParam;\n\t\t\tpWndPos->flags |= SWP_NOMOVE|SWP_FRAMECHANGED;\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn CWnd::WndProcDefault(WM_WINDOWPOSCHANGING, wParam, lParam);\n\t}\n\n\tinline void CDocker::OnWindowPosChanged(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\n\t\tif (m_bIsDragging)\n\t\t{\n\t\t\t// Send a Move notification to the parent\n\t\t\tif ( IsLeftButtonDown() )\n\t\t\t{\n\t\t\t\tLPWINDOWPOS wPos = (LPWINDOWPOS)lParam;\n\t\t\t\tif ((!(wPos->flags & SWP_NOMOVE)) || m_BlockMove)\n\t\t\t\t\tSendNotify(UWM_DOCK_MOVE);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tCloseAllTargets();\n\t\t\t\tm_BlockMove = FALSE;\n\t\t\t}\n\t\t}\n\t\telse if (this == GetTopmostDocker())\n\t\t{\n\t\t\t// Reposition the dock children\n\t\t\tif (IsUndocked() && IsWindowVisible() && !m_bIsClosing) RecalcDockLayout();\n\t\t}\n\t}\n\n\tinline void CDocker::PreCreate(CREATESTRUCT &cs)\n\t{\n\t\t// Specify the WS_POPUP style to have this window owned\n\t\tif (this != GetDockAncestor())\n\t\t\tcs.style = WS_POPUP;\n\n\t\tcs.dwExStyle = WS_EX_TOOLWINDOW;\n\t}\n\n\tinline void CDocker::PreRegisterClass(WNDCLASS &wc)\n\t{\n\t\twc.lpszClassName = _T(\"Win32++ Docker\");\n\t\twc.hCursor = ::LoadCursor(NULL, IDC_ARROW);\n\t}\n\n\tinline void CDocker::RecalcDockChildLayout(CRect rc)\n\t{\n\t\t// This function positions the Docker's dock children, the Dockers client area\n\t\t//  and draws the dockbar bars.\n\n\t\t// Notes:\n\t\t// 1) This function is called recursively.\n\t\t// 2) The client area and child dockers are positioned simultaneously with\n\t\t//      DeferWindowPos to avoid drawing errors in complex docker arrangements.\n\t\t// 3) The docker's client area contains the docker's caption (if any) and the docker's view window.\n\n\t\t// Note: All top level dockers are undocked, including the dock ancestor.\n\t\tif (IsDocked())\n\t\t{\n\t\t\trc.OffsetRect(-rc.left, -rc.top);\n\t\t}\n\n\t\tHDWP hdwp = BeginDeferWindowPos((int)m_vDockChildren.size() +2);\n\n\t\t// Step 1: Calculate the position of each Docker child, DockBar, and Client window.\n\t\t//   The Client area = the docker rect minus the area of dock children and the dock bar (splitter bar).\n\t\tfor (UINT u = 0; u < m_vDockChildren.size(); ++u)\n\t\t{\n\t\t\tCRect rcChild = rc;\n\t\t\tdouble DockSize = m_vDockChildren[u]->m_DockStartSize;;\n\n\t\t\t// Calculate the size of the Docker children\n\t\t\tswitch (m_vDockChildren[u]->GetDockStyle() & 0xF)\n\t\t\t{\n\t\t\tcase DS_DOCKED_LEFT:\n\t\t\t\tif (!(GetDockStyle() & DS_FIXED_RESIZE))\n\t\t\t\t\tDockSize = MIN(m_vDockChildren[u]->m_DockSizeRatio*(GetWindowRect().Width()), rcChild.Width());\n\t\t\t\trcChild.right = rcChild.left + (int)DockSize;\n\t\t\t\tbreak;\n\t\t\tcase DS_DOCKED_RIGHT:\n\t\t\t\tif (!(GetDockStyle() & DS_FIXED_RESIZE))\n\t\t\t\t\tDockSize = MIN(m_vDockChildren[u]->m_DockSizeRatio*(GetWindowRect().Width()), rcChild.Width());\n\t\t\t\trcChild.left = rcChild.right - (int)DockSize;\n\t\t\t\tbreak;\n\t\t\tcase DS_DOCKED_TOP:\n\t\t\t\tif (!(GetDockStyle() & DS_FIXED_RESIZE))\n\t\t\t\t\tDockSize = MIN(m_vDockChildren[u]->m_DockSizeRatio*(GetWindowRect().Height()), rcChild.Height());\n\t\t\t\trcChild.bottom = rcChild.top + (int)DockSize;\n\t\t\t\tbreak;\n\t\t\tcase DS_DOCKED_BOTTOM:\n\t\t\t\tif (!(GetDockStyle() & DS_FIXED_RESIZE))\n\t\t\t\t\tDockSize = MIN(m_vDockChildren[u]->m_DockSizeRatio*(GetWindowRect().Height()), rcChild.Height());\n\t\t\t\trcChild.top = rcChild.bottom - (int)DockSize;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (m_vDockChildren[u]->IsDocked())\n\t\t\t{\n\t\t\t\t// Position this docker's children\n\t\t\t\thdwp = m_vDockChildren[u]->DeferWindowPos(hdwp, NULL, rcChild, SWP_SHOWWINDOW|SWP_FRAMECHANGED);\n\t\t\t\tm_vDockChildren[u]->m_rcChild = rcChild;\n\n\t\t\t\trc.SubtractRect(rc, rcChild);\n\n\t\t\t\t// Calculate the dimensions of the splitter bar\n\t\t\t\tCRect rcBar = rc;\n\t\t\t\tDWORD DockSide = m_vDockChildren[u]->GetDockStyle() & 0xF;\n\n\t\t\t\tif (DS_DOCKED_LEFT   == DockSide) rcBar.right  = rcBar.left + m_vDockChildren[u]->GetBarWidth();\n\t\t\t\tif (DS_DOCKED_RIGHT  == DockSide) rcBar.left   = rcBar.right - m_vDockChildren[u]->GetBarWidth();\n\t\t\t\tif (DS_DOCKED_TOP    == DockSide) rcBar.bottom = rcBar.top + m_vDockChildren[u]->GetBarWidth();\n\t\t\t\tif (DS_DOCKED_BOTTOM == DockSide) rcBar.top    = rcBar.bottom - m_vDockChildren[u]->GetBarWidth();\n\n\t\t\t\t// Save the splitter bar position. We will reposition it later.\n\t\t\t\tm_vDockChildren[u]->m_rcBar = rcBar;\n\t\t\t\trc.SubtractRect(rc, rcBar);\n\t\t\t}\n\t\t}\n\n\t\t// Step 2: Position the Dock client and dock bar\n\t\thdwp = GetDockClient().DeferWindowPos(hdwp, NULL, rc, SWP_SHOWWINDOW |SWP_FRAMECHANGED);\n\t\tEndDeferWindowPos(hdwp);\n\n\t\t// Position the dockbar. Only docked dockers have a dock bar.\n\t\tif (IsDocked())\n\t\t{\n\t\t\t// The SWP_NOCOPYBITS forces a redraw of the dock bar.\n\t\t\tGetDockBar().SetWindowPos(NULL, m_rcBar, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOCOPYBITS );\n\t\t}\n\n\t\t// Step 3: Now recurse through the docker's children. They might have children of their own.\n\t\tfor (UINT v = 0; v < m_vDockChildren.size(); ++v)\n\t\t{\n\t\t\tm_vDockChildren[v]->RecalcDockChildLayout(m_vDockChildren[v]->m_rcChild);\n\t\t}\n\t}\n\n\tinline void CDocker::RecalcDockLayout()\n\t// Repositions the dock children of a top level docker\n\t{\n\t\tif (GetDockAncestor()->IsWindow())\n\t\t{\n\t\t\tCRect rc = GetTopmostDocker()->GetClientRect();\n\t\t\tGetTopmostDocker()->RecalcDockChildLayout(rc);\n\t\t\tGetTopmostDocker()->UpdateWindow();\n\t\t}\n\t}\n\n\tinline std::vector<CDocker*> CDocker::SortDockers()\n\t// Returns a vector of sorted dockers, used by SaveRegistrySettings.\n\t{\n\t\tstd::vector<CDocker*> vSorted;\n\t\tstd::vector<CDocker*>::iterator itSort;\n\t\tstd::vector<DockPtr>::iterator itAll;\n\n\t\t// Add undocked top level dockers\n\t\tfor (itAll = GetAllDockers().begin(); itAll <  GetAllDockers().end(); ++itAll)\n\t\t{\n\t\t\tif (!(*itAll)->GetDockParent())\n\t\t\t\tvSorted.push_back((*itAll).get());\n\t\t}\n\n\t\t// Add dock ancestor's children\n\t\tvSorted.insert(vSorted.end(), GetDockAncestor()->GetDockChildren().begin(), GetDockAncestor()->GetDockChildren().end());\n\n\t\t// Add other dock children\n\t\tint index = 0;\n\t\titSort = vSorted.begin();\n\t\twhile (itSort < vSorted.end())\n\t\t{\n\t\t\tvSorted.insert(vSorted.end(), (*itSort)->GetDockChildren().begin(), (*itSort)->GetDockChildren().end());\n\t\t\titSort = vSorted.begin() + (++index);\n\t\t}\n\n\t\t// Add dockers docked in containers\n\t\tstd::vector<CDocker*> vDockContainers;\n\t\tfor (itSort = vSorted.begin(); itSort< vSorted.end(); ++itSort)\n\t\t{\n\t\t\tif ((*itSort)->GetContainer())\n\t\t\t\tvDockContainers.push_back(*itSort);\n\t\t}\n\n\t\tfor (itSort = vDockContainers.begin(); itSort < vDockContainers.end(); ++itSort)\n\t\t{\n\t\t\tCDockContainer* pContainer = (*itSort)->GetContainer();\n\n\t\t\tfor (UINT i = 1; i < pContainer->GetAllContainers().size(); ++i)\n\t\t\t{\n\t\t\t\tCDockContainer* pChild = pContainer->GetContainerFromIndex(i);\n\t\t\t\tCDocker* pDock = GetDockFromView(pChild);\n\t\t\t\tvSorted.push_back(pDock);\n\t\t\t}\n\t\t}\n\n\t\treturn vSorted;\n\t}\n\n\tinline BOOL CDocker::SaveRegistrySettings(tString tsRegistryKeyName)\n\t// Stores the docking configuration in the registry\n\t// NOTE: This function assumes that each docker has a unique DockID\n\t{\n\t\tassert(VerifyDockers());\n\n\t\tstd::vector<CDocker*> vSorted = SortDockers();\n\t\tstd::vector<CDocker*>::iterator iter;\n\t\tstd::vector<DockInfo> vDockInfo;\n\n\t\tif (0 != tsRegistryKeyName.size())\n\t\t{\n\t\t\t// Fill the DockInfo vector with the docking information\n\t\t\tfor (iter = vSorted.begin(); iter <  vSorted.end(); ++iter)\n\t\t\t{\n\t\t\t\tDockInfo di\t = {0};\n\t\t\t\tdi.DockID\t = (*iter)->GetDockID();\n\t\t\t\tdi.DockStyle = (*iter)->GetDockStyle();\n\t\t\t\tdi.DockSize  = (*iter)->GetDockSize();\n\t\t\t\tdi.Rect\t\t = (*iter)->GetWindowRect();\n\t\t\t\tif ((*iter)->GetDockParent())\n\t\t\t\t\tdi.DockParentID = (*iter)->GetDockParent()->GetDockID();\n\n\t\t\t\tvDockInfo.push_back(di);\n\t\t\t}\n\n\t\t\ttString tsKeyName = _T(\"Software\\\\\") + tsRegistryKeyName;\n\t\t\tHKEY hKey = NULL;\n\t\t\tHKEY hKeyDock = NULL;\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\tif (ERROR_SUCCESS != RegCreateKeyEx(HKEY_CURRENT_USER, tsKeyName.c_str(), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL))\n\t\t\t\t\tthrow (CWinException(_T(\"RegCreateKeyEx Failed\")));\n\n\t\t\t\tRegDeleteKey(hKey, _T(\"Dock Windows\"));\n\t\t\t\tif (ERROR_SUCCESS != RegCreateKeyEx(hKey, _T(\"Dock Windows\"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKeyDock, NULL))\n\t\t\t\t\tthrow (CWinException(_T(\"RegCreateKeyEx Failed\")));\n\n\t\t\t\t// Add the Dock windows information to the registry\n\t\t\t\tfor (UINT u = 0; u < vDockInfo.size(); ++u)\n\t\t\t\t{\n\t\t\t\t\tDockInfo di = vDockInfo[u];\n\t\t\t\t\tTCHAR szNumber[16];\n\t\t\t\t\ttString tsSubKey = _T(\"DockChild\");\n\t\t\t\t\ttsSubKey += _itot((int)u, szNumber, 10);\n\t\t\t\t\tif(ERROR_SUCCESS != RegSetValueEx(hKeyDock, tsSubKey.c_str(), 0, REG_BINARY, (LPBYTE)&di, sizeof(DockInfo)))\n\t\t\t\t\t\tthrow (CWinException(_T(\"RegSetValueEx failed\")));\n\t\t\t\t}\n\n\t\t\t\t// Add Active Container to the registry\n\t\t\t\tint i = 0;\n\t\t\t\tfor (iter = vSorted.begin(); iter <  vSorted.end(); ++iter)\n\t\t\t\t{\n\t\t\t\t\tCDockContainer* pContainer = (*iter)->GetContainer();\n\n\t\t\t\t\tif (pContainer && (pContainer == pContainer->GetActiveContainer()))\n\t\t\t\t\t{\n\t\t\t\t\t\tTCHAR szNumber[20];\n\t\t\t\t\t\ttString tsSubKey = _T(\"ActiveContainer\");\n\t\t\t\t\t\ttsSubKey += _itot(i++, szNumber, 10);\n\t\t\t\t\t\tint nID = GetDockFromView(pContainer)->GetDockID();\n\t\t\t\t\t\tif(ERROR_SUCCESS != RegSetValueEx(hKeyDock, tsSubKey.c_str(), 0, REG_DWORD, (LPBYTE)&nID, sizeof(int)))\n\t\t\t\t\t\t\tthrow (CWinException(_T(\"RegSetValueEx failed\")));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tRegCloseKey(hKeyDock);\n\t\t\t\tRegCloseKey(hKey);\n\t\t\t}\n\n\t\t\tcatch (const CWinException& e)\n\t\t\t{\n\t\t\t\t// Roll back the registry changes by deleting the subkeys\n\t\t\t\tif (hKey)\n\t\t\t\t{\n\t\t\t\t\tif (hKeyDock)\n\t\t\t\t\t{\n\t\t\t\t\t\tRegDeleteKey(hKeyDock, _T(\"Dock Windows\"));\n\t\t\t\t\t\tRegCloseKey(hKeyDock);\n\t\t\t\t\t}\n\n\t\t\t\t\tRegDeleteKey(HKEY_CURRENT_USER ,tsKeyName.c_str());\n\t\t\t\t\tRegCloseKey(hKey);\n\t\t\t\t}\n\n\t\t\t\te.what();\n\t\t\t\treturn FALSE;\n\t\t\t}\n\t\t}\n\n\t\treturn TRUE;\n\t}\n\n\tinline void CDocker::SendNotify(UINT nMessageID)\n\t// Sends a docking notification to the docker below the cursor\n\t{\n\t\tDRAGPOS DragPos;\n\t\tDragPos.hdr.code = nMessageID;\n\t\tDragPos.hdr.hwndFrom = m_hWnd;\n\t\tDragPos.ptPos = GetCursorPos();\n\t\tDragPos.DockZone = m_dwDockZone;\n\t\tm_dwDockZone = 0;\n\n\t\tCDocker* pDock = GetDockFromPoint(DragPos.ptPos);\n\n\t\tif (pDock)\n\t\t\tpDock->SendMessage(WM_NOTIFY, 0L, (LPARAM)&DragPos);\n\t\telse\n\t\t{\n\t\t\tif (GetDockHint().IsWindow())\t\tGetDockHint().Destroy();\n\t\t\tCloseAllTargets();\n\t\t\tm_BlockMove = FALSE;\n\t\t}\n\t}\n\n\tinline void CDocker::SetDockStyle(DWORD dwDockStyle)\n\t{\n\t\tif (IsWindow())\n\t\t{\n\t\t\tif ((dwDockStyle & DS_CLIENTEDGE) != (m_DockStyle & DS_CLIENTEDGE))\n\t\t\t{\n\t\t\t\tif (dwDockStyle & DS_CLIENTEDGE)\n\t\t\t\t{\n\t\t\t\t\tDWORD dwExStyle = (DWORD)GetDockClient().GetWindowLongPtr(GWL_EXSTYLE)|WS_EX_CLIENTEDGE;\n\t\t\t\t\tGetDockClient().SetWindowLongPtr(GWL_EXSTYLE, dwExStyle);\n\t\t\t\t\tGetDockClient().RedrawWindow(0, 0, RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE|RDW_FRAME);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tDWORD dwExStyle = (DWORD)GetDockClient().GetWindowLongPtr(GWL_EXSTYLE);\n\t\t\t\t\tdwExStyle &= ~WS_EX_CLIENTEDGE;\n\t\t\t\t\tGetDockClient().SetWindowLongPtr(GWL_EXSTYLE, dwExStyle);\n\t\t\t\t\tGetDockClient().RedrawWindow(0, 0, RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE|RDW_FRAME);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tRecalcDockLayout();\n\t\t}\n\n\t\tm_DockStyle = dwDockStyle;\n\t}\n\n\tinline void CDocker::SetCaption(LPCTSTR szCaption)\n\t// Sets the caption text\n\t{\n\t\tGetDockClient().SetCaption(szCaption);\n\n\t\tif (IsWindow())\n\t\t\tSetWindowText(szCaption);\n\t}\n\n\tinline void CDocker::SetCaptionColors(COLORREF Foregnd1, COLORREF Backgnd1, COLORREF ForeGnd2, COLORREF BackGnd2)\n\t{\n\t\tGetDockClient().SetCaptionColors(Foregnd1, Backgnd1, ForeGnd2, BackGnd2);\n\t}\n\n\tinline void CDocker::SetCaptionHeight(int nHeight)\n\t// Sets the height of the caption\n\t{\n\t\tm_NCHeight = nHeight;\n\t\tRedrawWindow();\n\t\tRecalcDockLayout();\n\t}\n\n\tinline void CDocker::SetDockSize(int DockSize)\n\t// Sets the size of a docked docker\n\t{\n\t\tif (IsDocked())\n\t\t{\n\t\t\tassert (m_pDockParent);\n\t\t\tswitch (GetDockStyle() & 0xF)\n\t\t\t{\n\t\t\tcase DS_DOCKED_LEFT:\n\t\t\t\tm_DockStartSize = MIN(DockSize,m_pDockParent->GetWindowRect().Width());\n\t\t\t\tm_DockSizeRatio = ((double)m_DockStartSize)/((double)m_pDockParent->GetWindowRect().Width());\n\t\t\t\tbreak;\n\t\t\tcase DS_DOCKED_RIGHT:\n\t\t\t\tm_DockStartSize = MIN(DockSize,m_pDockParent->GetWindowRect().Width());\n\t\t\t\tm_DockSizeRatio = ((double)m_DockStartSize)/((double)m_pDockParent->GetWindowRect().Width());\n\t\t\t\tbreak;\n\t\t\tcase DS_DOCKED_TOP:\n\t\t\t\tm_DockStartSize = MIN(DockSize,m_pDockParent->GetWindowRect().Height());\n\t\t\t\tm_DockSizeRatio = ((double)m_DockStartSize)/((double)m_pDockParent->GetWindowRect().Height());\n\t\t\t\tbreak;\n\t\t\tcase DS_DOCKED_BOTTOM:\n\t\t\t\tm_DockStartSize = MIN(DockSize,m_pDockParent->GetWindowRect().Height());\n\t\t\t\tm_DockSizeRatio = ((double)m_DockStartSize)/((double)m_pDockParent->GetWindowRect().Height());\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tRecalcDockLayout();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_DockStartSize = DockSize;\n\t\t\tm_DockSizeRatio = 1.0;\n\t\t}\n\t}\n\n\tinline void CDocker::SetDragAutoResize(BOOL bAutoResize)\n\t{\n\t\tm_bDragAutoResize = bAutoResize;\n\t}\n\n\tinline void CDocker::SetView(CWnd& wndView)\n\t// Assigns the view window to the docker\n\t{\n\t\tCWnd* pWnd = &wndView;\n\t\tGetDockClient().SetView(wndView);\n\t\tif (dynamic_cast<CDockContainer*>(pWnd))\n\t\t{\n\t\t\tCDockContainer* pContainer = (CDockContainer*)&wndView;\n\t\t\tSetCaption(pContainer->GetDockCaption().c_str());\n\t\t}\n\t}\n\n\tinline void CDocker::PromoteFirstChild()\n\t// One of the steps required for undocking\n\t{\n\t\t// Promote our first child to replace ourself\n\t\tif (m_pDockParent)\n\t\t{\n\t\t\tfor (UINT u = 0 ; u < m_pDockParent->m_vDockChildren.size(); ++u)\n\t\t\t{\n\t\t\t\tif (m_pDockParent->m_vDockChildren[u] == this)\n\t\t\t\t{\n\t\t\t\t\tif (m_vDockChildren.size() > 0)\n\t\t\t\t\t\t// swap our first child for ourself as a child of the parent\n\t\t\t\t\t\tm_pDockParent->m_vDockChildren[u] = m_vDockChildren[0];\n\t\t\t\t\telse\n\t\t\t\t\t\t// remove ourself as a child of the parent\n\t\t\t\t\t\tm_pDockParent->m_vDockChildren.erase(m_pDockParent->m_vDockChildren.begin() + u);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Transfer styles and data and children to the child docker\n\t\tCDocker* pDockFirstChild = NULL;\n\t\tif (m_vDockChildren.size() > 0)\n\t\t{\n\t\t\tpDockFirstChild = m_vDockChildren[0];\n\t\t\tpDockFirstChild->m_DockStyle = (pDockFirstChild->m_DockStyle & 0xFFFFFFF0 ) | (m_DockStyle & 0xF);\n\t\t\tpDockFirstChild->m_DockStartSize = m_DockStartSize;\n\t\t\tpDockFirstChild->m_DockSizeRatio = m_DockSizeRatio;\n\n\t\t\tif (m_pDockParent)\n\t\t\t{\n\t\t\t\tpDockFirstChild->m_pDockParent = m_pDockParent;\n\t\t\t\tpDockFirstChild->SetParent(m_pDockParent);\n\t\t\t\tpDockFirstChild->GetDockBar().SetParent(m_pDockParent);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tstd::vector<CDocker*>::iterator iter;\n\t\t\t\tfor (iter = GetDockChildren().begin() + 1; iter < GetDockChildren().end(); ++iter)\n\t\t\t\t\t(*iter)->ShowWindow(SW_HIDE);\n\n\t\t\t\tpDockFirstChild->ConvertToPopup(GetWindowRect());\n\t\t\t\tpDockFirstChild->GetDockBar().ShowWindow(SW_HIDE);\n\t\t\t}\n\n\t\t\tm_vDockChildren.erase(m_vDockChildren.begin());\n\t\t\tMoveDockChildren(pDockFirstChild);\n\t\t}\n\t}\n\n\tinline void CDocker::ConvertToChild(HWND hWndParent)\n\t{\n\t\tDWORD dwStyle = WS_CHILD | WS_VISIBLE;\n\t\tSetWindowLongPtr(GWL_STYLE, dwStyle);\n\t\tSetParent(FromHandle(hWndParent));\n\t\tGetDockBar().SetParent(FromHandle(hWndParent));\n\t}\n\n\tinline void CDocker::ConvertToPopup(RECT rc)\n\t{\n\t\t// Change the window to an \"undocked\" style\n\t\tShowWindow(SW_HIDE);\n\t\tDWORD dwStyle = WS_POPUP| WS_CAPTION | WS_SYSMENU | WS_THICKFRAME;\n\t\tSetWindowLongPtr(GWL_STYLE, dwStyle);\n\n\t\t// Change the window's parent and reposition it\n\t\tGetDockBar().ShowWindow(SW_HIDE);\n\t\tSetWindowPos(0, 0, 0, 0, 0, SWP_NOSENDCHANGING|SWP_HIDEWINDOW|SWP_NOREDRAW);\n\t\tm_pDockParent = 0;\n\t\tSetParent(0);\n\t\tSetWindowPos(NULL, rc, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOOWNERZORDER);\n\t\tGetDockClient().SetWindowPos(NULL, GetClientRect(), SWP_SHOWWINDOW);\n\n\t\tSetWindowText(GetCaption().c_str());\n\t}\n\n\tinline CDocker* CDocker::SeparateFromDock()\n\t{\n\t\t// This performs some of the tasks required for undocking.\n\t\t// It is also used when a docker is hidden.\n\t\tCDocker* pDockUndockedFrom = GetDockParent();\n\t\tif (!pDockUndockedFrom && (GetDockChildren().size() > 0))\n\t\t\tpDockUndockedFrom = GetDockChildren()[0];\n\n\t\tGetTopmostDocker()->m_hOldFocus = 0;\n\t\tPromoteFirstChild();\n\t\tm_pDockParent = 0;\n\n\t\tGetDockBar().ShowWindow(SW_HIDE);\n\t\tm_DockStyle = m_DockStyle & 0xFFFFFFF0;\n\t\tm_DockStyle &= ~DS_DOCKED_CONTAINER;\n\n\t\treturn pDockUndockedFrom;\n\t}\n\n\tinline void CDocker::SetUndockPosition(CPoint pt)\n\t{\n\t\tm_Undocking = TRUE;\n\t\tCRect rc;\n\t\trc = GetDockClient().GetWindowRect();\n\t\tCRect rcTest = rc;\n\t\trcTest.bottom = MIN(rcTest.bottom, rcTest.top + m_NCHeight);\n\t\tif ( !rcTest.PtInRect(pt))\n\t\t\trc.SetRect(pt.x - rc.Width()/2, pt.y - m_NCHeight/2, pt.x + rc.Width()/2, pt.y - m_NCHeight/2 + rc.Height());\n\n\t\tConvertToPopup(rc);\n\t\tm_Undocking = FALSE;\n\n\t\t// Send the undock notification to the frame\n\t\tNMHDR nmhdr = {0};\n\t\tnmhdr.hwndFrom = m_hWnd;\n\t\tnmhdr.code = UWM_UNDOCKED;\n\t\tnmhdr.idFrom = m_nDockID;\n\t\tCWnd* pFrame = GetDockAncestor()->GetAncestor();\n\t\tpFrame->SendMessage(WM_NOTIFY, m_nDockID, (LPARAM)&nmhdr);\n\n\t\t// Initiate the window move\n\t\tSetCursorPos(pt.x, pt.y);\n\t\tScreenToClient(pt);\n\t\tPostMessage(WM_SYSCOMMAND, (WPARAM)(SC_MOVE|0x0002), MAKELPARAM(pt.x, pt.y));\n\t}\n\n\tinline void CDocker::Undock(CPoint pt, BOOL bShowUndocked)\n\t{\n\t\t// Return if we shouldn't undock\n\t\tif (GetDockStyle() & DS_NO_UNDOCK) return;\n\n\t\t// Undocking isn't supported on Win95\n\t\tif (1400 == GetWinVersion()) return;\n\n\t\tCDocker* pDockUndockedFrom = SeparateFromDock();\n\n\t\t// Position and draw the undocked window, unless it is about to be closed\n\t\tif (bShowUndocked)\n\t\t{\n\t\t\tSetUndockPosition(pt);\n\t\t}\n\n\t\tRecalcDockLayout();\n        if ((pDockUndockedFrom) && (pDockUndockedFrom->GetTopmostDocker() != GetTopmostDocker()))\n\t\t\tpDockUndockedFrom->RecalcDockLayout();\n\t}\n\n\tinline void CDocker::UndockContainer(CDockContainer* pContainer, CPoint pt, BOOL bShowUndocked)\n\t{\n\t\tassert(pContainer);\n\t\tassert(this == GetDockFromView(pContainer->GetContainerParent()));\n\n\t\t// Return if we shouldn't undock\n\t\tif (GetDockFromView(pContainer)->GetDockStyle() & DS_NO_UNDOCK) return;\n\n\t\t// Undocking isn't supported on Win95\n\t\tif (1400 == GetWinVersion()) return;\n\n\t\tGetTopmostDocker()->m_hOldFocus = 0;\n\t\tCDocker* pDockUndockedFrom = GetDockFromView(pContainer->GetContainerParent());\n\t\tpDockUndockedFrom->ShowWindow(SW_HIDE);\n\t\tif (GetView() == pContainer)\n\t\t{\n\t\t\t// The parent container is being undocked, so we need\n\t\t\t// to transfer our child containers to a different docker\n\n\t\t\t// Choose a new docker from among the dockers for child containers\n\t\t\tCDocker* pDockNew = 0;\n\t\t\tCDocker* pDockOld = GetDockFromView(pContainer);\n\t\t\tstd::vector<ContainerInfo> AllContainers = pContainer->GetAllContainers();\n\t\t\tstd::vector<ContainerInfo>::iterator iter = AllContainers.begin();\n\t\t\twhile ((0 == pDockNew) && (iter < AllContainers.end()))\n\t\t\t{\n\t\t\t\tif ((*iter).pContainer != pContainer)\n\t\t\t\t\tpDockNew = (CDocker*)FromHandle(::GetParent((*iter).pContainer->GetParent()->GetHwnd()));\n\n\t\t\t\t++iter;\n\t\t\t}\n\n\t\t\tif (pDockNew)\n\t\t\t{\n\t\t\t\t// Move containers from the old docker to the new docker\n\t\t\t\tCDockContainer* pContainerNew = (CDockContainer*)pDockNew->GetView();\n\t\t\t\tfor (iter = AllContainers.begin(); iter != AllContainers.end(); ++iter)\n\t\t\t\t{\n\t\t\t\t\tif ((*iter).pContainer != pContainer)\n\t\t\t\t\t{\n\t\t\t\t\t\tCDockContainer* pChildContainer = (CDockContainer*)(*iter).pContainer;\n\t\t\t\t\t\tpContainer->RemoveContainer(pChildContainer);\n\t\t\t\t\t\tif (pContainerNew != pChildContainer)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpContainerNew->AddContainer(pChildContainer);\n\t\t\t\t\t\t\tCDocker* pDock = GetDockFromView(pChildContainer);\n\t\t\t\t\t\t\tpDock->SetParent(pDockNew);\n\t\t\t\t\t\t\tpDock->m_pDockParent = pDockNew;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Now transfer the old docker's settings to the new one.\n\t\t\t\tpDockUndockedFrom = pDockNew;\n\t\t\t\tpDockNew->m_DockStyle\t\t= pDockOld->m_DockStyle;\n\t\t\t\tpDockNew->m_DockStartSize\t= pDockOld->m_DockStartSize;\n\t\t\t\tpDockNew->m_DockSizeRatio\t= pDockOld->m_DockSizeRatio;\n\t\t\t\tif (pDockOld->IsDocked())\n\t\t\t\t{\n\t\t\t\t\tpDockNew->m_pDockParent\t\t= pDockOld->m_pDockParent;\n\t\t\t\t\tpDockNew->SetParent(pDockOld->GetParent());\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tCRect rc = pDockOld->GetWindowRect();\n\t\t\t\t\tpDockNew->ShowWindow(SW_HIDE);\n\t\t\t\t\tDWORD dwStyle = WS_POPUP| WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_VISIBLE;\n\t\t\t\t\tpDockNew->SetWindowLongPtr(GWL_STYLE, dwStyle);\n\t\t\t\t\tpDockNew->m_pDockParent = 0;\n\t\t\t\t\tpDockNew->SetParent(0);\n\t\t\t\t\tpDockNew->SetWindowPos(NULL, rc, SWP_SHOWWINDOW|SWP_FRAMECHANGED| SWP_NOOWNERZORDER);\n\t\t\t\t}\n\t\t\t\tpDockNew->GetDockBar().SetParent(pDockOld->GetParent());\n\t\t\t\tpDockNew->GetView()->SetFocus();\n\n\t\t\t\t// Transfer the Dock children to the new docker\n\t\t\t\tpDockOld->MoveDockChildren(pDockNew);\n\n\t\t\t\t// insert pDockNew into its DockParent's DockChildren vector\n\t\t\t\tif (pDockNew->m_pDockParent)\n\t\t\t\t{\n\t\t\t\t\tstd::vector<CDocker*>::iterator p;\n\t\t\t\t\tfor (p = pDockNew->m_pDockParent->m_vDockChildren.begin(); p != pDockNew->m_pDockParent->m_vDockChildren.end(); ++p)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (*p == this)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpDockNew->m_pDockParent->m_vDockChildren.insert(p, pDockNew);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// This is a child container, so simply remove it from the parent\n\t\t\tCDockContainer* pContainerParent = (CDockContainer*)GetView();\n\t\t\tpContainerParent->RemoveContainer(pContainer);\n\t\t\tpContainerParent->SetTabSize();\n\t\t\tpContainerParent->SetFocus();\n\t\t\tpContainerParent->GetViewPage().SetParent(pContainerParent);\n\t\t}\n\n\t\t// Finally do the actual undocking\n\t\tCDocker* pDock = GetDockFromView(pContainer);\n\t\tCRect rc = GetDockClient().GetWindowRect();\n\t\tScreenToClient(rc);\n\t\tpDock->GetDockClient().SetWindowPos(NULL, rc, SWP_SHOWWINDOW);\n\t\tpDock->Undock(pt, bShowUndocked);\n\t\tpDockUndockedFrom->ShowWindow();\n\t\tpDockUndockedFrom->RecalcDockLayout();\n\t\tpDock->BringWindowToTop();\n\t}\n\n\tinline LRESULT CDocker::WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\tswitch (uMsg)\n\t\t{\n\t\tcase WM_ACTIVATE:\n\t\t\tOnActivate(wParam, lParam);\n\t\t\tbreak;\n\t\tcase WM_SYSCOMMAND:\n\t\t\treturn OnSysCommand(wParam, lParam);\n\n\t\tcase WM_EXITSIZEMOVE:\n\t\t\tOnExitSizeMove(wParam, lParam);\n\t\t\tbreak;\n\t\tcase WM_WINDOWPOSCHANGING:\n\t\t\treturn OnWindowPosChanging(wParam, lParam);\n\n\t\tcase WM_WINDOWPOSCHANGED:\n\t\t\tOnWindowPosChanged(wParam, lParam);\n\t\t\tbreak;\n\t\tcase WM_DESTROY:\n\t\t\tOnDestroy(wParam, lParam);\n\t\t\tbreak;\n\t\tcase WM_SETFOCUS:\n\t\t\tOnSetFocus(wParam, lParam);\n\t\t\tbreak;\n\t\tcase WM_TIMER:\n\t\t\tOnCaptionTimer(wParam, lParam);\n\t\t\tbreak;\n\t\tcase UWM_DOCK_DESTROYED:\n\t\t\tOnDockDestroyed(wParam, lParam);\n\t\t\tbreak;\n\t\tcase UWM_DOCK_ACTIVATED:\n\t\t\tDrawAllCaptions();\n\t\t\tSetTimer(1, 100, NULL);\n\t\t\tbreak;\n\t\tcase WM_SYSCOLORCHANGE:\n\t\t\tOnSysColorChange(wParam, lParam);\n\t\t\tbreak;\n\t\tcase WM_NCLBUTTONDBLCLK :\n\t\t\tm_bIsDragging = FALSE;\n\t\t\tbreak;\n\t\t}\n\n\t\treturn CWnd::WndProcDefault(uMsg, wParam, lParam);\n\t}\n\n\n\t//////////////////////////////////////\n\t// Declaration of the CDockContainer class\n\tinline CDockContainer::CDockContainer() : m_iCurrentPage(0), m_hTabIcon(0), m_nTabPressed(-1)\n\t{\n\t\tm_pContainerParent = this;\n\t}\n\n\tinline CDockContainer::~CDockContainer()\n\t{\n\t\tif (m_hTabIcon)\n\t\t\tDestroyIcon(m_hTabIcon);\n\t}\n\n\tinline void CDockContainer::AddContainer(CDockContainer* pContainer)\n\t{\n\t\tassert(pContainer);\n\n\t\tif (this == m_pContainerParent)\n\t\t{\n\t\t\tContainerInfo ci = {0};\n\t\t\tci.pContainer = pContainer;\n\t\t\tlstrcpy(ci.szTitle, pContainer->GetTabText());\n\t\t\tci.iImage = ImageList_AddIcon(GetImageList(), pContainer->GetTabIcon());\n\t\t\tint iNewPage = (int)m_vContainerInfo.size();\n\t\t\tm_vContainerInfo.push_back(ci);\n\n\t\t\tif (m_hWnd)\n\t\t\t{\n\t\t\t\tTCITEM tie = {0};\n\t\t\t\ttie.mask = TCIF_TEXT | TCIF_IMAGE;\n\t\t\t\ttie.iImage = ci.iImage;\n\t\t\t\ttie.pszText = m_vContainerInfo[iNewPage].szTitle;\n\t\t\t\tTabCtrl_InsertItem(m_hWnd, iNewPage, &tie);\n\n\t\t\t\tSetTabSize();\n\t\t\t}\n\n\t\t\tpContainer->m_pContainerParent = this;\n\t\t\tif (pContainer->IsWindow())\n\t\t\t{\n\t\t\t\t// Set the parent container relationships\n\t\t\t\tpContainer->GetViewPage().SetParent(this);\n\t\t\t\tpContainer->GetViewPage().ShowWindow(SW_HIDE);\n\t\t\t}\n\t\t}\n\t}\n\n\tinline void CDockContainer::AddToolBarButton(UINT nID, BOOL bEnabled /* = TRUE */)\n\t// Adds Resource IDs to toolbar buttons.\n\t// A resource ID of 0 is a separator\n\t{\n\t\tGetToolBar().AddButton(nID, bEnabled);\n\t}\n\n\tinline CDockContainer* CDockContainer::GetContainerFromIndex(UINT nPage)\n\t{\n\t\tCDockContainer* pContainer = NULL;\n\t\tif (nPage < m_vContainerInfo.size())\n\t\t\tpContainer = (CDockContainer*)m_vContainerInfo[nPage].pContainer;\n\n\t\treturn pContainer;\n\t}\n\n\tinline CWnd* CDockContainer::GetActiveView() const\n\t// Returns a pointer to the active view window, or NULL if there is no active veiw.\n\t{\n\t\tCWnd* pWnd = NULL;\n\t\tif (m_pContainerParent->m_vContainerInfo.size() > 0)\n\t\t{\n\t\t\tCDockContainer* pActiveContainer = m_pContainerParent->m_vContainerInfo[m_pContainerParent->m_iCurrentPage].pContainer;\n\t\t\tif (pActiveContainer->GetViewPage().GetView()->IsWindow())\n\t\t\t\tpWnd = pActiveContainer->GetViewPage().GetView();\n\t\t}\n\n\t\treturn pWnd;\n\t}\n\n\tinline CDockContainer* CDockContainer::GetContainerFromView(CWnd* pView) const\n\t{\n\t\tassert(pView);\n\n\t\tstd::vector<ContainerInfo>::iterator iter;\n\t\tCDockContainer* pViewContainer = 0;\n\t\tfor (iter = GetAllContainers().begin(); iter != GetAllContainers().end(); ++iter)\n\t\t{\n\t\t\tCDockContainer* pContainer = (*iter).pContainer;\n\t\t\tif (pContainer->GetView() == pView)\n\t\t\t\tpViewContainer = pContainer;\n\t\t}\n\n\t\treturn pViewContainer;\n\t}\n\n\tinline int CDockContainer::GetContainerIndex(CDockContainer* pContainer)\n\t{\n\t\tassert(pContainer);\n\t\tint iReturn = -1;\n\n\t\tfor (int i = 0; i < (int)m_pContainerParent->m_vContainerInfo.size(); ++i)\n\t\t{\n\t\t\tif (m_pContainerParent->m_vContainerInfo[i].pContainer == pContainer)\n\t\t\t\tiReturn = i;\n\t\t}\n\n\t\treturn iReturn;\n\t}\n\n\tinline SIZE CDockContainer::GetMaxTabTextSize()\n\t{\n\t\tCSize Size;\n\n\t\t// Allocate an iterator for the ContainerInfo vector\n\t\tstd::vector<ContainerInfo>::iterator iter;\n\n\t\tfor (iter = m_vContainerInfo.begin(); iter != m_vContainerInfo.end(); ++iter)\n\t\t{\n\t\t\tCSize TempSize;\n\t\t\tCClientDC dc(this);\n\t\t\tNONCLIENTMETRICS info = {0};\n\t\t\tinfo.cbSize = GetSizeofNonClientMetrics();\n\t\t\tSystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(info), &info, 0);\n\t\t\tdc.CreateFontIndirect(&info.lfStatusFont);\n\t\t\tTempSize = dc.GetTextExtentPoint32(iter->szTitle, lstrlen(iter->szTitle));\n\t\t\tif (TempSize.cx > Size.cx)\n\t\t\t\tSize = TempSize;\n\t\t}\n\n\t\treturn Size;\n\t}\n\n\tinline void CDockContainer::SetupToolBar()\n\t{\n\t\t// Use this function to set the Resource IDs for the toolbar(s).\n\n/*\t\t// Set the Resource IDs for the toolbar buttons\n\t\tAddToolBarButton( IDM_FILE_NEW   );\n\t\tAddToolBarButton( IDM_FILE_OPEN  );\n\t\tAddToolBarButton( IDM_FILE_SAVE  );\n\t\tAddToolBarButton( 0 );\t\t\t\t// Separator\n\t\tAddToolBarButton( IDM_EDIT_CUT   );\n\t\tAddToolBarButton( IDM_EDIT_COPY  );\n\t\tAddToolBarButton( IDM_EDIT_PASTE );\n\t\tAddToolBarButton( 0 );\t\t\t\t// Separator\n\t\tAddToolBarButton( IDM_FILE_PRINT );\n\t\tAddToolBarButton( 0 );\t\t\t\t// Separator\n\t\tAddToolBarButton( IDM_HELP_ABOUT );\n*/\n\t}\n\n\tinline void CDockContainer::OnCreate()\n\t{\n\t\tassert(GetView());\t\t\t// Use SetView in CMainFrame's constructor to set the view window\n\n\t\tContainerInfo ci = {0};\n\t\tci.pContainer = this;\n\t\tlstrcpy(ci.szTitle, GetTabText());\n\t\tci.iImage = ImageList_AddIcon(GetImageList(), GetTabIcon());\n\t\tm_vContainerInfo.push_back(ci);\n\n\t\t// Create the page window\n\t\tGetViewPage().Create(this);\n\n\t\t// Create the toolbar\n\t\tGetToolBar().Create(&GetViewPage());\n\t\tDWORD style = (DWORD)GetToolBar().GetWindowLongPtr(GWL_STYLE);\n\t\tstyle |= CCS_NODIVIDER ;\n\t\tGetToolBar().SetWindowLongPtr(GWL_STYLE, style);\n\t\tSetupToolBar();\n\t\tif (GetToolBar().GetToolBarData().size() > 0)\n\t\t{\n\t\t\t// Set the toolbar images\n\t\t\t// A mask of 192,192,192 is compatible with AddBitmap (for Win95)\n\t\t\tif (!GetToolBar().SendMessage(TB_GETIMAGELIST,  0L, 0L))\n\t\t\t\tGetToolBar().SetImages(RGB(192,192,192), IDW_MAIN, 0, 0);\n\n\t\t\tGetToolBar().SendMessage(TB_AUTOSIZE, 0L, 0L);\n\t\t}\n\t\telse\n\t\t\tGetToolBar().Destroy();\n\n\t\tSetFixedWidth(TRUE);\n\t\tSetOwnerDraw(TRUE);\n\n\t\t// Add tabs for each container.\n\t\tfor (int i = 0; i < (int)m_vContainerInfo.size(); ++i)\n\t\t{\n\t\t\t// Add tabs for each view.\n\t\t\tTCITEM tie = {0};\n\t\t\ttie.mask = TCIF_TEXT | TCIF_IMAGE;\n\t\t\ttie.iImage = i;\n\t\t\ttie.pszText = m_vContainerInfo[i].szTitle;\n\t\t\tTabCtrl_InsertItem(m_hWnd, i, &tie);\n\t\t}\n\t}\n\n\tinline void CDockContainer::OnLButtonDown(WPARAM wParam, LPARAM lParam)\n\t{\n\t\t// Overrides CTab::OnLButtonDown\n\n\t\tUNREFERENCED_PARAMETER(wParam);\n\n\t\tCPoint pt((DWORD)lParam);\n\t\tTCHITTESTINFO info = {0};\n\t\tinfo.pt = pt;\n\t\tm_nTabPressed = HitTest(info);\n\t}\n\n\tinline void CDockContainer::OnLButtonUp(WPARAM wParam, LPARAM lParam)\n\t{\n\t\t// Overrides CTab::OnLButtonUp and takes no action\n\n\t\tUNREFERENCED_PARAMETER(wParam);\n\t\tUNREFERENCED_PARAMETER(lParam);\n\t}\n\n\tinline void CDockContainer::OnMouseLeave(WPARAM wParam, LPARAM lParam)\n\t{\n\t\t// Overrides CTab::OnMouseLeave\n\n\t\tif (IsLeftButtonDown() && (m_nTabPressed >= 0))\n\t\t{\n\t\t\tCDocker* pDock = (CDocker*)FromHandle(::GetParent(GetParent()->GetHwnd()));\n\t\t\tif (dynamic_cast<CDocker*>(pDock))\n\t\t\t{\n\t\t\t\tCDockContainer* pContainer = GetContainerFromIndex(m_iCurrentPage);\n\t\t\t\tpDock->UndockContainer(pContainer, GetCursorPos(), TRUE);\n\t\t\t}\n\t\t}\n\n\t\tm_nTabPressed = -1;\n\t\tCTab::OnMouseLeave(wParam, lParam);\n\t}\n\n\tinline LRESULT CDockContainer::OnNotifyReflect(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\n\t\tswitch (((LPNMHDR)lParam)->code)\n\t\t{\n\t\tcase TCN_SELCHANGE:\n\t\t\t{\n\t\t\t\t// Display the newly selected tab page\n\t\t\t\tint nPage = GetCurSel();\n\t\t\t\tSelectPage(nPage);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\treturn 0L;\n\t}\n\n\tinline void CDockContainer::PreCreate(CREATESTRUCT &cs)\n\t{\n\t\t// For Tabs on the bottom, add the TCS_BOTTOM style\n\t\tCTab::PreCreate(cs);\n\t\tcs.style |= TCS_BOTTOM;\n\t}\n\n\tinline void CDockContainer::RecalcLayout()\n\t{\n\t\tif (GetContainerParent() == this)\n\t\t{\n\t\t\t// Set the tab sizes\n\t\t\tSetTabSize();\n\n\t\t\t// Position the View over the tab control's display area\n\t\t\tCRect rc = GetClientRect();\n\t\t\tAdjustRect(FALSE, &rc);\n\t\t\tCDockContainer* pContainer = m_vContainerInfo[m_iCurrentPage].pContainer;\n\t\t\tpContainer->GetViewPage().SetWindowPos(HWND_TOP, rc, SWP_SHOWWINDOW);\n\t\t}\n\t}\n\n\tinline void CDockContainer::RemoveContainer(CDockContainer* pWnd)\n\t{\n\t\tassert(pWnd);\n\n\t\t// Remove the tab\n\t\tint iTab = GetContainerIndex(pWnd);\n\t\tif (iTab > 0)\n\t\t{\n\t\t//\tDeleteItem(iTab);\n\t\t\tTabCtrl_DeleteItem(m_hWnd, iTab);\n\t\t}\n\n\t\t// Remove the ContainerInfo entry\n\t\tstd::vector<ContainerInfo>::iterator iter;\n\t\tint iImage = -1;\n\t\tfor (iter = m_vContainerInfo.begin(); iter != m_vContainerInfo.end(); ++iter)\n\t\t{\n\t\t\tif (iter->pContainer == pWnd)\n\t\t\t{\n\t\t\t\tiImage = (*iter).iImage;\n\t\t\t\tif (iImage >= 0)\n\t\t\t\t\tTabCtrl_RemoveImage(m_hWnd, iImage);\n\n\t\t\t\tm_vContainerInfo.erase(iter);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Set the parent container relationships\n\t\tpWnd->GetViewPage().SetParent(pWnd);\n\t\tpWnd->m_pContainerParent = pWnd;\n\n\t\t// Display the first page\n\t\tm_iCurrentPage = 0;\n\t\tif (IsWindow())\n\t\t\tSelectPage(0);\n\t}\n\n\tinline void CDockContainer::SelectPage(int nPage)\n\t{\n\t\tif (this != m_pContainerParent)\n\t\t\tm_pContainerParent->SelectPage(nPage);\n\t\telse\n\t\t{\n\t\t\tif ((nPage >= 0) && (nPage < (int)m_vContainerInfo.size() ))\n\t\t\t{\n\t\t\t\tif (GetCurSel() != nPage)\n\t\t\t\t\tSetCurSel(nPage);\n\n\t\t\t\t// Create the new container window if required\n\t\t\t\tif (!m_vContainerInfo[nPage].pContainer->IsWindow())\n\t\t\t\t{\n\t\t\t\t\tCDockContainer* pContainer = m_vContainerInfo[nPage].pContainer;\n\t\t\t\t\tpContainer->Create(GetParent());\n\t\t\t\t\tpContainer->GetViewPage().SetParent(this);\n\t\t\t\t}\n\n\t\t\t\t// Determine the size of the tab page's view area\n\t\t\t\tCRect rc = GetClientRect();\n\t\t\t\tAdjustRect(FALSE, &rc);\n\n\t\t\t\t// Swap the pages over\n\t\t\t\tCDockContainer* pOldContainer = m_vContainerInfo[m_iCurrentPage].pContainer;\n\t\t\t\tCDockContainer* pNewContainer = m_vContainerInfo[nPage].pContainer;\n\t\t\t\tpOldContainer->GetViewPage().ShowWindow(SW_HIDE);\n\t\t\t\tpNewContainer->GetViewPage().SetWindowPos(HWND_TOP, rc, SWP_SHOWWINDOW);\n\t\t\t\tpNewContainer->GetViewPage().GetView()->SetFocus();\n\n\t\t\t\t// Adjust the docking caption\n\t\t\t\tCDocker* pDock = (CDocker*)FromHandle(::GetParent(::GetParent(m_hWnd)));\n\t\t\t\tif (dynamic_cast<CDocker*>(pDock))\n\t\t\t\t{\n\t\t\t\t\tpDock->SetCaption(pNewContainer->GetDockCaption().c_str());\n\t\t\t\t\tpDock->RedrawWindow();\n\t\t\t\t}\n\n\t\t\t\tm_iCurrentPage = nPage;\n\t\t\t}\n\t\t}\n\t}\n\n\tinline void CDockContainer::SetActiveContainer(CDockContainer* pContainer)\n\t{\n\t\tint nPage = GetContainerIndex(pContainer);\n\t\tassert (0 <= nPage);\n\t\tSelectPage(nPage);\n\t}\n\n\tinline void CDockContainer::SetTabIcon(UINT nID_Icon)\n\t{\n\t\tHICON hIcon = (HICON)LoadImage(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(nID_Icon), IMAGE_ICON, 0, 0, LR_SHARED);\n\t\tSetTabIcon(hIcon);\n\t}\n\n\tinline void CDockContainer::SetTabSize()\n\t{\n\t\tCRect rc = GetClientRect();\n\t\tAdjustRect(FALSE, &rc);\n\t\tif (rc.Width() < 0 )\n\t\t\trc.SetRectEmpty();\n\n\t\tint nItemWidth = MIN(25 + GetMaxTabTextSize().cx, (rc.Width()-2)/(int)m_vContainerInfo.size());\n\t\tint nItemHeight = MAX(20, GetTextHeight() + 5);\n\t\tSendMessage(TCM_SETITEMSIZE, 0L, MAKELPARAM(nItemWidth, nItemHeight));\n\t}\n\n\tinline void CDockContainer::SetTabText(UINT nTab, LPCTSTR szText)\n\t{\n\t\tCDockContainer* pContainer = GetContainerParent()->GetContainerFromIndex(nTab);\n\t\tpContainer->SetTabText(szText);\n\n\t\tCTab::SetTabText(nTab, szText);\n\t}\n\n\tinline void CDockContainer::SetView(CWnd& Wnd)\n\t{\n\t\tGetViewPage().SetView(Wnd);\n\t}\n\n\tinline LRESULT CDockContainer::WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\tswitch (uMsg)\n\t\t{\n\t\tcase WM_SIZE:\n\t\t\tRecalcLayout();\n\t\t\treturn 0;\n\n\t// The following are called in CTab::WndProcDefault\n\t//\tcase WM_LBUTTONDOWN:\n\t//\t\tOnLButtonDown(wParam, lParam);\n\t//\t\tbreak;\n\t//\tcase WM_LBUTTONUP:\n\t//\t\tOnLButtonUp(wParam, lParam);\n\t//\t\tbreak;\n\t//\tcase WM_MOUSELEAVE:\n\t//\t\tOnMouseLeave(wParam, lParam);\n\t//\t\tbreak;\n\n\t\tcase WM_SETFOCUS:\n\t\t\t{\n\t\t\t\t// Pass focus on to the current view\n\t\t\t\tGetActiveView()->SetFocus();\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\t// pass unhandled messages on to CTab for processing\n\t\treturn CTab::WndProcDefault(uMsg, wParam, lParam);\n\t}\n\n\n\t///////////////////////////////////////////\n\t// Declaration of the nested CViewPage class\n\tinline BOOL CDockContainer::CViewPage::OnCommand(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tCDockContainer* pContainer = (CDockContainer*)GetParent();\n\t\tBOOL bResult = FALSE;\n\t\tif (pContainer && pContainer->GetActiveContainer())\n\t\t\tbResult = (BOOL)pContainer->GetActiveContainer()->SendMessage(WM_COMMAND, wParam, lParam);\n\n\t\treturn bResult;\n\t}\n\n\tinline void CDockContainer::CViewPage::OnCreate()\n\t{\n\t\tif (m_pView)\n\t\t\tm_pView->Create(this);\n\t}\n\n\tinline LRESULT CDockContainer::CViewPage::OnNotify(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\n\t\tswitch (((LPNMHDR)lParam)->code)\n\t\t{\n\n\t\t// Display tooltips for the toolbar\n\t\tcase TTN_GETDISPINFO:\n\t\t\t{\n\t\t\t\tint iIndex =  GetToolBar().HitTest();\n\t\t\t\tLPNMTTDISPINFO lpDispInfo = (LPNMTTDISPINFO)lParam;\n\t\t\t\tif (iIndex >= 0)\n\t\t\t\t{\n\t\t\t\t\tint nID = GetToolBar().GetCommandID(iIndex);\n\t\t\t\t\tif (nID > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tm_tsTooltip = LoadString(nID);\n\t\t\t\t\t\tlpDispInfo->lpszText = (LPTSTR)m_tsTooltip.c_str();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tm_tsTooltip = _T(\"\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t} // switch LPNMHDR\n\n\t\treturn 0L;\n\t}\n\n\tinline void CDockContainer::CViewPage::PreRegisterClass(WNDCLASS &wc)\n\t{\n\t\twc.lpszClassName = _T(\"Win32++ TabPage\");\n\t\twc.hCursor = ::LoadCursor(NULL, IDC_ARROW);\n\t}\n\n\tinline void CDockContainer::CViewPage::RecalcLayout()\n\t{\n\t\tCRect rc = GetClientRect();\n\t\tif (GetToolBar().IsWindow())\n\t\t{\n\t\t\tGetToolBar().SendMessage(TB_AUTOSIZE, 0L, 0L);\n\t\t\tCRect rcToolBar = m_ToolBar.GetClientRect();\n\t\t\trc.top += rcToolBar.Height();\n\t\t}\n\n\t\tGetView()->SetWindowPos(NULL, rc, SWP_SHOWWINDOW);\n\t}\n\n\tinline void CDockContainer::CViewPage::SetView(CWnd& wndView)\n\t// Sets or changes the View window displayed within the frame\n\t{\n\t\t// Assign the view window\n\t\tm_pView = &wndView;\n\n\t\tif (m_hWnd)\n\t\t{\n\t\t\tif (!m_pView->IsWindow())\n\t\t\t{\n\t\t\t\t// The container is already created, so create and position the new view too\n\t\t\t\tGetView()->Create(this);\n\t\t\t}\n\n\t\t\tRecalcLayout();\n\t\t}\n\t}\n\n\tinline LRESULT CDockContainer::CViewPage::WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\tswitch (uMsg)\n\t\t{\n\t\tcase WM_SIZE:\n\t\t\tRecalcLayout();\n\t\t\tbreak;\n\t\tcase WM_NOTIFY:\n\t\t\tswitch (((LPNMHDR)lParam)->code)\n\t\t\t{\n\t\t\t// Send the focus change notifications to the grandparent\n\t\t\tcase NM_KILLFOCUS:\n\t\t\tcase NM_SETFOCUS:\n\t\t\tcase UWM_FRAMELOSTFOCUS:\n\t\t\t\t::SendMessage(::GetParent(::GetParent(m_hWnd)), WM_NOTIFY, wParam, lParam);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\n\t\t// pass unhandled messages on for default processing\n\t\treturn CWnd::WndProcDefault(uMsg, wParam, lParam);\n\t}\n\n} // namespace Win32xx\n\n#endif // _WIN32XX_DOCKING_H_\n\n"
  },
  {
    "path": "external/win32cpp/include/file.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n\n#ifndef _WIN32XX_FILE_H_\n#define _WIN32XX_FILE_H_\n\n\n#include \"wincore.h\"\n\nnamespace Win32xx\n{\n\n\tclass CFile\n\t{\n\tpublic:\n\t\tCFile();\n\t\tCFile(HANDLE hFile);\n\t\tCFile(LPCTSTR pszFileName, UINT nOpenFlags);\n\t\t~CFile();\n\t\toperator HANDLE() const;\n\n\t\tBOOL Close();\n\t\tBOOL Flush();\n\t\tHANDLE GetHandle() const;\n\t\tULONGLONG GetLength() const;\n\t\tconst CString& GetFileName() const;\n\t\tconst CString& GetFilePath() const;\n\t\tconst CString& GetFileTitle() const;\n\t\tULONGLONG GetPosition() const;\n\t\tBOOL LockRange(ULONGLONG Pos, ULONGLONG Count);\n\t\tBOOL Open(LPCTSTR pszFileName, UINT nOpenFlags);\n\t\tCString OpenFileDialog(LPCTSTR pszFilePathName = NULL,\n\t\t\t\t\t\tDWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR pszFilter = NULL,\n\t\t\t\t\t\tCWnd* pOwnerWnd = NULL);\n\t\tUINT Read(void* pBuf, UINT nCount);\n\t\tstatic BOOL Remove(LPCTSTR pszFileName);\n\t\tstatic BOOL Rename(LPCTSTR pszOldName, LPCTSTR pszNewName);\n\t\tCString SaveFileDialog(LPCTSTR pszFilePathName = NULL,\n\t\t\t\t\t\tDWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR pszFilter = NULL,\n\t\t\t\t\t\tLPCTSTR pszDefExt = NULL, CWnd* pOwnerWnd = NULL);\n\t\tULONGLONG Seek(LONGLONG lOff, UINT nFrom);\n\t\tvoid SeekToBegin();\n\t\tULONGLONG SeekToEnd();\n\t\tvoid SetFilePath(LPCTSTR pszNewName);\n\t\tBOOL SetLength(ULONGLONG NewLen);\n\t\tBOOL UnlockRange(ULONGLONG Pos, ULONGLONG Count);\n\t\tBOOL Write(const void* pBuf, UINT nCount);\n\n\tprivate:\n\t\tCFile(const CFile&);\t\t\t\t// Disable copy construction\n\t\tCFile& operator = (const CFile&);\t// Disable assignment operator\n\t\tCString m_FileName;\n\t\tCString m_FilePath;\n\t\tCString m_FileTitle;\n\t\tHANDLE m_hFile;\n\t};\n\n}\n\n\n\nnamespace Win32xx\n{\n\tinline CFile::CFile() : m_hFile(0)\n\t{\n\t}\n\n\tinline CFile::CFile(HANDLE hFile) : m_hFile(hFile)\n\t{\n\t}\n\n\tinline CFile::CFile(LPCTSTR pszFileName, UINT nOpenFlags) : m_hFile(0)\n\t{\n\t\tassert(pszFileName);\n\t\tOpen(pszFileName, nOpenFlags);\n\t\tassert(m_hFile);\n\t}\n\t\n\tinline CFile::~CFile()\n\t{\n\t\tClose();\n\t}\n\n\tinline CFile::operator HANDLE() const\n\t{\n\t\treturn m_hFile;\n\t}\n\n\tinline BOOL CFile::Close()\n\t// Closes the file associated with this object. Closed file can no longer be read or written to.\n\t{\n\t\tBOOL bResult = TRUE;\n\t\tif (m_hFile)\n\t\t\tbResult = CloseHandle(m_hFile);\n\n\t\tm_hFile = 0;\n\t\treturn bResult;\n\t}\n\n\tinline BOOL CFile::Flush()\n\t// Causes any remaining data in the file buffer to be written to the file.\n\t{\n\t\tassert(m_hFile);\n\t\treturn FlushFileBuffers(m_hFile);\n\t}\n\t\n\tinline HANDLE CFile::GetHandle() const\n\t{\n\t\treturn m_hFile;\n\t}\n\n\tinline ULONGLONG CFile::GetLength( ) const\n\t// Returns the length of the file in bytes.\n\t{\n\t\tassert(m_hFile);\n\n\t\tLONG High = 0;\n\t\tDWORD LowPos = SetFilePointer(m_hFile, 0, &High, FILE_END);\n\n\t\tULONGLONG Result = ((ULONGLONG)High << 32) + LowPos;\n\t\treturn Result;\n\t}\n\n\tinline const CString& CFile::GetFileName() const\n\t// Returns the filename of the file associated with this object.\n\t{\n\t\treturn (const CString&)m_FileName;\n\t}\n\n\tinline const CString& CFile::GetFilePath() const\n\t// Returns the full filename including the directory of the file associated with this object.\n\t{\n\t\treturn (const CString&)m_FilePath;\n\t}\n\n\tinline const CString& CFile::GetFileTitle() const\n\t// Returns the filename of the file associated with this object, excluding the path and the file extension\n\t{\n\t\treturn (const CString&)m_FileTitle;\n\t}\n\n\tinline ULONGLONG CFile::GetPosition() const\n\t// Returns the current value of the file pointer, which can be used in subsequent calls to Seek.\n\t{\n\t\tassert(m_hFile);\n\t\tLONG High = 0;\n\t\tDWORD LowPos = SetFilePointer(m_hFile, 0, &High, FILE_CURRENT);\n\n\t\tULONGLONG Result = ((ULONGLONG)High << 32) + LowPos;\n\t\treturn Result;\n\t}\n\n\tinline BOOL CFile::LockRange(ULONGLONG Pos, ULONGLONG Count)\n\t// Locks a range of bytes in and open file.\n\t{\n\t\tassert(m_hFile);\n\n\t\tDWORD dwPosHigh = (DWORD)(Pos >> 32);\n\t\tDWORD dwPosLow = (DWORD)(Pos & 0xFFFFFFFF);\n\t\tDWORD dwCountHigh = (DWORD)(Count >> 32);\n\t\tDWORD dwCountLow = (DWORD)(Count & 0xFFFFFFFF);\n\n\t\treturn ::LockFile(m_hFile, dwPosLow, dwPosHigh, dwCountLow, dwCountHigh);\n\t}\n\n\tinline BOOL CFile::Open(LPCTSTR pszFileName, UINT nOpenFlags)\n\t// Prepares a file to be written to or read from.\n\t{\n\t\tif (m_hFile) Close();\n\n\t\tm_hFile = ::CreateFile(pszFileName, GENERIC_READ | GENERIC_WRITE, 0, NULL, nOpenFlags, FILE_ATTRIBUTE_NORMAL, NULL);\n\n\t\tif (INVALID_HANDLE_VALUE == m_hFile)\n\t\t{\n\t\t\tTRACE(_T(\"Failed\\n\"));\n\t\t\tm_hFile = 0;\n\t\t}\n\n\t\tif (m_hFile)\n\t\t{\n\t\t\tSetFilePath(pszFileName);\n\t\t}\n\n\t\treturn (m_hFile != 0);\n\t}\n\n\tinline CString CFile::OpenFileDialog(LPCTSTR pszFilePathName, DWORD dwFlags, LPCTSTR pszFilter, CWnd* pOwnerWnd)\n\t// Displays the file open dialog. \n\t// Returns a CString containing either the selected file name or an empty CString.\n\t{\n\t\tCString str;\n\t\tif (pszFilePathName)\n\t\t\tstr = pszFilePathName;\n\n\t\tOPENFILENAME ofn = {0};\n\t\tofn.lStructSize = sizeof(OPENFILENAME);\n\n#if defined OPENFILENAME_SIZE_VERSION_400\n\t\tif (GetWinVersion() < 2500)\n\t\t\tofn.lStructSize = OPENFILENAME_SIZE_VERSION_400;\n#endif\n\n\t\tofn.hwndOwner = pOwnerWnd? pOwnerWnd->GetHwnd() : NULL;\n\t\tofn.hInstance = GetApp()->GetInstanceHandle();\n\t\tofn.lpstrFilter = pszFilter;\n\t\tofn.lpstrTitle = _T(\"Open File\");\n\t\tofn.Flags = dwFlags;\n\t\tofn.nMaxFile = _MAX_PATH;\n\t\t\n\t\tofn.lpstrFile = (LPTSTR)str.GetBuffer(_MAX_PATH);\n\t\t::GetOpenFileName(&ofn);\n\t\tstr.ReleaseBuffer();\n\n\t\treturn str;\n\t}\n\n\tinline UINT CFile::Read(void* pBuf, UINT nCount)\n\t// Reads from the file, storing the contents in the specified buffer.\n\t{\n\t\tassert(m_hFile);\n\t\tDWORD dwRead = 0;\n\n\t\tif (!::ReadFile(m_hFile, pBuf, nCount, &dwRead, NULL))\n\t\t\tdwRead = 0;\n\n\t\treturn dwRead;\n\t}\n\n\tinline BOOL CFile::Rename(LPCTSTR pszOldName, LPCTSTR pszNewName)\n\t// Renames the specified file.\n\t{\n\t\treturn ::MoveFile(pszOldName, pszNewName);\n\t}\n\n\tinline BOOL CFile::Remove(LPCTSTR pszFileName)\n\t// Deletes the specified file.\n\t{\n\t\treturn ::DeleteFile(pszFileName);\n\t}\n\n\tinline CString CFile::SaveFileDialog(LPCTSTR pszFilePathName, DWORD dwFlags, LPCTSTR pszFilter, LPCTSTR pszDefExt, CWnd* pOwnerWnd)\n\t// Displays the SaveFileDialog.\n\t// Returns a CString containing either the selected file name or an empty CString\n\t{\n\t\tCString str;\n\t\tif (pszFilePathName)\n\t\t\tstr = pszFilePathName;\n\n\t\tOPENFILENAME ofn = {0};\n\t\tofn.lStructSize = sizeof(OPENFILENAME);\n\n#if defined OPENFILENAME_SIZE_VERSION_400\n\t\tif (GetWinVersion() < 2500)\n\t\t\tofn.lStructSize = OPENFILENAME_SIZE_VERSION_400;\n#endif\n\n\t\tofn.hwndOwner = pOwnerWnd? pOwnerWnd->GetHwnd() : NULL;\n\t\tofn.hInstance = GetApp()->GetInstanceHandle();\n\t\tofn.lpstrFilter = pszFilter;\n\t\tofn.lpstrFile = (LPTSTR)pszFilePathName;\n\t\tofn.lpstrFileTitle = (LPTSTR)pszFilePathName;\n\t\tofn.lpstrDefExt = pszDefExt;\n\t\tofn.nMaxFile = lstrlen(pszFilePathName);\n\t\tofn.lpstrTitle = _T(\"Save File\");\n\t\tofn.Flags = dwFlags;\n\t\tofn.nMaxFile = _MAX_PATH;\n\t\tofn.lpstrFile = (LPTSTR)str.GetBuffer(_MAX_PATH);\n\t\t::GetSaveFileName(&ofn);\n\t\tstr.ReleaseBuffer();\n\n\t\treturn str;\n\t}\n\n\tinline ULONGLONG CFile::Seek(LONGLONG lOff, UINT nFrom)\n\t// Positions the current file pointer.\n\t// Permitted values for nFrom are: FILE_BEGIN, FILE_CURRENT, or FILE_END.\n\t{\n\t\tassert(m_hFile);\n\t\tassert(nFrom == FILE_BEGIN || nFrom == FILE_CURRENT || nFrom == FILE_END);\n\n\t\tLONG High = LONG(lOff >> 32);\n\t\tLONG Low = (LONG)(lOff & 0xFFFFFFFF);\n\n\t\tDWORD LowPos = SetFilePointer(m_hFile, Low, &High, nFrom);\n\n\t\tULONGLONG Result = ((ULONGLONG)High << 32) + LowPos;\n\t\treturn Result;\n\t}\n\n\tinline void CFile::SeekToBegin()\n\t// Sets the current file pointer to the beginning of the file.\n\t{\n\t\tassert(m_hFile);\n\t\tSeek(0, FILE_BEGIN);\n\t}\n\n\tinline ULONGLONG CFile::SeekToEnd()\n\t// Sets the current file pointer to the end of the file.\n\t{\n\t\tassert(m_hFile);\n\t\treturn Seek(0, FILE_END);\n\t}\n\n\tinline void CFile::SetFilePath(LPCTSTR pszFileName)\n\t// Specifies the full file name, including its path\n\t{\n\t\tTCHAR* pFileName = NULL;\n\t\tint nBuffSize = ::GetFullPathName(pszFileName, 0, 0, 0);\n\t\tif (nBuffSize > 0)\n\t\t{\n\t\t\tTCHAR* pBuff = m_FilePath.GetBuffer(nBuffSize);\n\t\t\t::GetFullPathName(pszFileName, nBuffSize, pBuff, &pFileName);\n\t\t\tm_FilePath.ReleaseBuffer();\n\t\t\tm_FileName = pFileName;\n\t\t\tint nPos = m_FileName.ReverseFind(_T(\".\"));\n\t\t\tif (nPos >= 0)\n\t\t\t\tm_FileTitle = m_FileName.Left(nPos);\n\t\t}\n\t}\n\n\tinline BOOL CFile::SetLength(ULONGLONG NewLen)\n\t// Changes the length of the file to the specified value.\n\t{\n\t\tassert(m_hFile);\n\n\t\tSeek(NewLen, FILE_BEGIN);\n\t\treturn ::SetEndOfFile(m_hFile);\n\t}\n\n\tinline BOOL CFile::UnlockRange(ULONGLONG Pos, ULONGLONG Count)\n\t// Unlocks a range of bytes in an open file.\n\t{\n\t\tassert(m_hFile);\n\n\t\tDWORD dwPosHigh = (DWORD)(Pos >> 32);\n\t\tDWORD dwPosLow = (DWORD)(Pos & 0xFFFFFFFF);\n\t\tDWORD dwCountHigh = (DWORD)(Count >> 32);\n\t\tDWORD dwCountLow = (DWORD)(Count & 0xFFFFFFFF);\n\n\t\treturn ::UnlockFile(m_hFile, dwPosLow, dwPosHigh, dwCountLow, dwCountHigh);\n\t}\n\n\tinline BOOL CFile::Write(const void* pBuf, UINT nCount)\n\t// Writes the specified buffer to the file.\n\t{\n\t\tassert(m_hFile);\n\t\tDWORD dwWritten = 0;\n\t\tBOOL bResult = ::WriteFile(m_hFile, pBuf, nCount, &dwWritten, NULL);\n\t\tif (dwWritten != nCount)\n\t\t\tbResult = FALSE;\n\n\t\treturn bResult;\n\t}\n\n\n}\t// namespace Win32xx\n\n#endif\n"
  },
  {
    "path": "external/win32cpp/include/frame.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n\n////////////////////////////////////////////////////////\n// frame.h\n//  Declaration of the CFrame and CMenuBar classes\n\n// The classes declared in this file support SDI (Single Document Interface)\n// frames on Win32/Win64 operating systems (not Windows CE). For Windows CE,\n// use wceframe.h instead. SDI frames are a simple frame which supports a\n// single view window. Refer to mdi.h for frames that support several\n// child windows.\n\n// CFrame also includes each of the following classes as members:\n// * CReBar for managing the frame's rebar control.\n// * CMenuBar for managing the menu inside the rebar.\n// * CToolBar for managing the frame's toolbar.\n// * CStatusBar for managing the frame's status bar.\n// In each case these members are exposed by a GetXXX function, allowing\n// them to be accessed or sent messages.\n\n// CFrame is responsible for creating a \"frame\" window. This window has a\n// menu and and several child windows, including a toolbar (usualy hosted\n// within a rebar), a status bar, and a view positioned over the frame\n// window's non-client area. The \"view\" window is a seperate CWnd object\n// assigned to the frame with the SetView function.\n\n// When compiling an application with these classes, it will need to be linked\n// with Comctl32.lib.\n\n// To create a SDI frame application, inherit a CMainFrame class from CFrame.\n// Use the Frame sample application as the starting point for your own frame\n// applications.\n// Refer to the Notepad and Scribble samples for examples on how to use these\n// classes to create a frame application.\n\n\n#ifndef _WIN32XX_FRAME_H_\n#define _WIN32XX_FRAME_H_\n\n#include \"wincore.h\"\n#include \"dialog.h\"\n#include \"gdi.h\"\n#include \"statusbar.h\"\n#include \"toolbar.h\"\n#include \"rebar.h\"\n#include \"default_resource.h\"\n\n#ifndef RBN_MINMAX\n  #define RBN_MINMAX (RBN_FIRST - 21)\n#endif\n\n\nnamespace Win32xx\n{\n\n\t////////////////////////////////////////////////\n\t// Declarations for structures for themes\n\t//\n\tstruct MenuTheme\n\t{\n\t\tBOOL UseThemes;\t\t\t// TRUE if themes are used\n\t\tCOLORREF clrHot1;\t\t// Colour 1 for top menu. Color of selected menu item\n\t\tCOLORREF clrHot2;\t\t// Colour 2 for top menu. Color of checkbox\n\t\tCOLORREF clrPressed1;\t// Colour 1 for pressed top menu and side bar\n\t\tCOLORREF clrPressed2;\t// Colour 2 for pressed top menu and side bar\n\t\tCOLORREF clrOutline;\t// Colour for border outline\n\t};\n\n\n\t// Forward declaration of CFrame. Its defined later.\n\tclass CFrame;\n\n\n\t////////////////////////////////////\n\t// Declaration of the CMenuBar class\n\t//\n\tclass CMenuBar : public CToolBar\n\t{\n\t\tfriend class CFrame;\n\n\tpublic:\n\t\tCMenuBar();\n\t\tvirtual ~CMenuBar();\n\t\tvirtual void SetMenu(HMENU hMenu);\n\t\tvirtual void SetMenuBarTheme(MenuTheme& Theme);\n\n\t\tHMENU GetMenu() const {return m_hTopMenu;}\n\t\tMenuTheme& GetMenuBarTheme() {return m_ThemeMenu;}\n\n\tprotected:\n\t//Overridables\n\t\tvirtual void OnCreate();\n\t\tvirtual LRESULT OnCustomDraw(NMHDR* pNMHDR);\n\t\tvirtual void OnKeyDown(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void OnLButtonDown(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void OnLButtonUp(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void OnMenuChar(WPARAM wParam, LPARAM lParam);\n\t\tvirtual BOOL OnMenuInput(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\t\tvirtual void OnMouseLeave();\n\t\tvirtual void OnMouseMove(WPARAM wParam, LPARAM lParam);\n\t\tvirtual LRESULT OnNotifyReflect(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void OnSysCommand(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void OnWindowPosChanged();\n\t\tvirtual void PreCreate(CREATESTRUCT &cs);\n\t\tvirtual void PreRegisterClass(WNDCLASS &wc);\n\t\tvirtual LRESULT WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\n\tprivate:\n\t\tCMenuBar(const CMenuBar&);\t\t\t\t// Disable copy construction\n\t\tCMenuBar& operator = (const CMenuBar&); // Disable assignment operator\n\t\tvoid DoAltKey(WORD KeyCode);\n\t\tvoid DoPopupMenu();\n\t\tvoid DrawAllMDIButtons(CDC& DrawDC);\n\t\tvoid DrawMDIButton(CDC& DrawDC, int iButton, UINT uState);\n\t\tvoid ExitMenu();\n\t\tHWND GetActiveMDIChild();\n\t\tvoid GrabFocus();\n\t\tBOOL IsMDIChildMaxed() const;\n\t\tBOOL IsMDIFrame() const;\n\t\tvoid ReleaseFocus();\n\t\tvoid SetHotItem(int nHot);\n\t\tstatic LRESULT CALLBACK StaticMsgHook(int nCode, WPARAM wParam, LPARAM lParam);\n\n\t\tenum MDIButtonType\n\t\t{\n\t\t\tMDI_MIN = 0,\n\t\t\tMDI_RESTORE = 1,\n\t\t\tMDI_CLOSE = 2,\n\t\t};\n\n\t\tBOOL  m_bExitAfter;\t\t// Exit after Popup menu ends\n\t\tBOOL  m_bKeyMode;\t\t// keyboard navigation mode\n\t\tBOOL  m_bMenuActive;\t// popup menu active\n\t\tBOOL  m_bSelPopup;\t\t// a popup (cascade) menu is selected\n\t\tHMENU m_hPopupMenu;\t\t// handle to the popup menu\n\t\tHMENU m_hSelMenu;\t\t// handle to the casceded popup menu\n\t\tHMENU m_hTopMenu;\t\t// handle to the top level menu\n\t\tHWND  m_hPrevFocus;\t\t// handle to window which had focus\n\t\tCRect m_MDIRect[3];\t\t// array of CRect for MDI buttons\n\t\tint   m_nHotItem;\t\t// hot item\n\t\tint   m_nMDIButton;\t\t// the MDI button (MDIButtonType) pressed\n\t\tCPoint m_OldMousePos;\t// old Mouse position\n\t\tMenuTheme m_ThemeMenu;\t// Theme structure\n\t\tCFrame* m_pFrame;       // Pointer to the frame\n\n\t};  // class CMenuBar\n\n\n\n\t//////////////////////////////////\n\t// Declaration of the CFrame class\n\t//\n\tclass CFrame : public CWnd\n\t{\n\t\tfriend class CMenuBar;\n\n\t\tstruct ItemData\n\t\t// Each Dropdown menu item has this data\n\t\t{\n\t\t\tHMENU hMenu;\n\t\t\tUINT  nPos;\n\t\t\tUINT  fType;\n\t\t\tstd::vector<TCHAR> vItemText;\n\t\t\tHMENU hSubMenu;\n\n\t\t\tItemData() : hMenu(0), nPos(0), fType(0), hSubMenu(0) { vItemText.assign(MAX_MENU_STRING, _T('\\0')); }\n\t\t\tLPTSTR GetItemText() {return &vItemText[0];}\n\t\t};\n\n\t\ttypedef Shared_Ptr<ItemData> ItemDataPtr;\n\n\tpublic:\n\t\tCFrame();\n\t\tvirtual ~CFrame();\n\n\t\t// Override these functions as required\n\t\tvirtual void AdjustFrameRect(RECT rcView) const;\n\t\tvirtual CRect GetViewRect() const;\n\t\tvirtual BOOL IsMDIFrame() const { return FALSE; }\n\t\tvirtual void SetStatusIndicators();\n\t\tvirtual void SetStatusText();\n\t\tvirtual void RecalcLayout();\n\t\tvirtual MenuTheme& GetMenuTheme() const\t\t\t{ return (MenuTheme&) m_ThemeMenu; }\n\t\tvirtual ReBarTheme& GetReBarTheme()\tconst\t\t{ return (ReBarTheme&)GetReBar().GetReBarTheme(); }\n\t\tvirtual ToolBarTheme& GetToolBarTheme() const\t{ return (ToolBarTheme&)GetToolBar().GetToolBarTheme(); }\n\n\t\t// Virtual Attributes\n\t\t// If you need to modify the default behaviour of the menubar, rebar,\n\t\t// statusbar or toolbar, inherit from those classes, and override\n\t\t// the following attribute functions.\n\t\tvirtual CMenuBar& GetMenuBar() const\t\t{ return (CMenuBar&)m_MenuBar; }\n\t\tvirtual CReBar& GetReBar() const\t\t\t{ return (CReBar&)m_ReBar; }\n\t\tvirtual CStatusBar& GetStatusBar() const\t{ return (CStatusBar&)m_StatusBar; }\n\t\tvirtual CToolBar& GetToolBar() const\t\t{ return (CToolBar&)m_ToolBar; }\n\n\t\t// These functions aren't virtual, and shouldn't be overridden\n\t\tHACCEL GetFrameAccel() const\t\t\t\t{ return m_hAccel; }\n\t\tCMenu& GetFrameMenu() const\t\t\t\t\t{ return (CMenu&)m_Menu; }\n\t\tstd::vector<tString> GetMRUEntries() const\t{ return m_vMRUEntries; }\n\t\ttString GetRegistryKeyName() const\t\t\t{ return m_tsKeyName; }\n\t\tCWnd* GetView() const\t\t\t\t\t\t{ return m_pView; }\n\t\ttString GetMRUEntry(UINT nIndex);\n\t\tvoid SetFrameMenu(INT ID_MENU);\n\t\tvoid SetFrameMenu(HMENU hMenu);\n\t\tvoid SetMenuTheme(MenuTheme& Theme);\n\t\tvoid SetView(CWnd& wndView);\n\t\tBOOL IsMenuBarUsed() const\t\t{ return (GetMenuBar() != 0); }\n\t\tBOOL IsReBarSupported() const\t{ return (GetComCtlVersion() >= 470); }\n\t\tBOOL IsReBarUsed() const\t\t{ return (GetReBar() != 0); }\n\n\tprotected:\n\t\t// Override these functions as required\n\t\tvirtual BOOL AddMenuIcon(int nID_MenuItem, HICON hIcon, int cx = 16, int cy = 16);\n\t\tvirtual UINT AddMenuIcons(const std::vector<UINT>& MenuData, COLORREF crMask, UINT ToolBarID, UINT ToolBarDisabledID);\n\t\tvirtual void AddMenuBarBand();\n\t\tvirtual void AddMRUEntry(LPCTSTR szMRUEntry);\n\t\tvirtual void AddToolBarBand(CToolBar& TB, DWORD dwStyle, UINT nID);\n\t\tvirtual void AddToolBarButton(UINT nID, BOOL bEnabled = TRUE, LPCTSTR szText = 0);\n\t\tvirtual void CreateToolBar();\n\t\tvirtual void DrawCheckmark(LPDRAWITEMSTRUCT pdis, CDC& DrawDC);\n\t\tvirtual void DrawMenuIcon(LPDRAWITEMSTRUCT pdis, CDC& DrawDC, BOOL bDisabled);\n\t\tvirtual void DrawMenuText(CDC& DrawDC, LPCTSTR ItemText, CRect& rc, COLORREF colorText);\n\t\tvirtual int  GetMenuItemPos(HMENU hMenu, LPCTSTR szItem);\n\t\tvirtual BOOL LoadRegistrySettings(LPCTSTR szKeyName);\n\t\tvirtual BOOL LoadRegistryMRUSettings(UINT nMaxMRU = 0);\n\t\tvirtual void OnActivate(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void OnClose();\n\t\tvirtual void OnCreate();\n\t\tvirtual void OnDestroy();\n\t\tvirtual LRESULT OnDrawItem(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void OnExitMenuLoop();\n\t\tvirtual void OnHelp();\n\t\tvirtual void OnInitMenuPopup(WPARAM wParam, LPARAM lParam);\n\t\tvirtual LRESULT OnMeasureItem(WPARAM wParam, LPARAM lParam);\n\t\tvirtual LRESULT OnMenuChar(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void OnMenuSelect(WPARAM wParam, LPARAM lParam);\n\t\tvirtual LRESULT OnNotify(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void OnSetFocus();\n\t\tvirtual void OnSysColorChange();\n\t\tvirtual LRESULT OnSysCommand(WPARAM wParam, LPARAM lParam);\n\t\tvirtual\tvoid OnTimer(WPARAM wParam);\n\t\tvirtual void OnViewStatusBar();\n\t\tvirtual void OnViewToolBar();\n\t\tvirtual void PreCreate(CREATESTRUCT& cs);\n\t\tvirtual void PreRegisterClass(WNDCLASS &wc);\n\t\tvirtual void RemoveMRUEntry(LPCTSTR szMRUEntry);\n\t\tvirtual BOOL SaveRegistrySettings();\n\t\tvirtual void SetMenuBarBandSize();\n\t\tvirtual UINT SetMenuIcons(const std::vector<UINT>& MenuData, COLORREF crMask, UINT ToolBarID, UINT ToolBarDisabledID);\n\t\tvirtual void SetupToolBar();\n\t\tvirtual void SetTheme();\n\t\tvirtual void SetToolBarImages(COLORREF crMask, UINT ToolBarID, UINT ToolBarHotID, UINT ToolBarDisabledID);\n\t\tvirtual void ShowMenu(BOOL bShow);\n\t\tvirtual void ShowStatusBar(BOOL bShow);\n\t\tvirtual void ShowToolBar(BOOL bShow);\n\t\tvirtual void UpdateMRUMenu();\n\t\tvirtual LRESULT WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\n\t\tenum Constants\n\t\t{\n\t\t\tID_STATUS_TIMER = 1,\n\t\t\tPOST_TEXT_GAP   = 16,\t\t\t// for owner draw menu item\n\t\t};\n\n\t\ttString m_tsStatusText;\t\t\t\t// TCHAR std::string for status text\n        BOOL m_bShowIndicatorStatus;\t\t// set to TRUE to see indicators in status bar\n\t\tBOOL m_bShowMenuStatus;\t\t\t\t// set to TRUE to see menu and toolbar updates in status bar\n\t\tBOOL m_bUseReBar;\t\t\t\t\t// set to TRUE if ReBars are to be used\n\t\tBOOL m_bUseThemes;\t\t\t\t\t// set to TRUE if themes are to be used\n\t\tBOOL m_bUpdateTheme;\t\t\t\t// set to TRUE to run SetThemes when theme changes\n\t\tBOOL m_bUseToolBar;\t\t\t\t\t// set to TRUE if the toolbar is used\n\t\tBOOL m_bUseCustomDraw;\t\t\t\t// set to TRUE to perform custom drawing on menu items\n\t\tBOOL m_bShowStatusBar;\t\t\t\t// A flag to indicate if the StatusBar should be displayed\n\t\tBOOL m_bShowToolBar;\t\t\t\t// A flag to indicate if the ToolBar should be displayed\n\t\tMenuTheme m_ThemeMenu;\t\t\t\t// Theme structure for popup menus\n\t\tHIMAGELIST m_himlMenu;\t\t\t\t// Imagelist of menu icons\n\t\tHIMAGELIST m_himlMenuDis;\t\t\t// Imagelist of disabled menu icons\n\n\tprivate:\n\t\tCFrame(const CFrame&);\t\t\t\t// Disable copy construction\n\t\tCFrame& operator = (const CFrame&); // Disable assignment operator\n\t\tvoid LoadCommonControls();\n\n\t\tstd::vector<ItemDataPtr> m_vMenuItemData;// vector of ItemData pointers\n\t\tstd::vector<UINT> m_vMenuIcons;\t\t// vector of menu icon resource IDs\n\t\tstd::vector<tString> m_vMRUEntries;\t// Vector of tStrings for MRU entires\n\t\tCDialog m_AboutDialog;\t\t\t\t// Help about dialog\n\t\tCMenuBar m_MenuBar;\t\t\t\t\t// CMenuBar object\n\t\tCReBar m_ReBar;\t\t\t\t\t\t// CReBar object\n\t\tCStatusBar m_StatusBar;\t\t\t\t// CStatusBar object\n\t\tCToolBar m_ToolBar;\t\t\t\t\t// CToolBar object\n\t\tCMenu m_Menu;\t\t\t\t\t\t// handle to the frame menu\n\t\tHACCEL m_hAccel;\t\t\t\t\t// handle to the frame's accelerator table\n\t\tCWnd* m_pView;\t\t\t\t\t\t// pointer to the View CWnd object\n\t\tLPCTSTR m_OldStatus[3];\t\t\t\t// Array of TCHAR pointers;\n\t\ttString m_tsKeyName;\t\t\t\t// TCHAR std::string for Registry key name\n\t\ttString m_tsTooltip;\t\t\t\t// TCHAR std::string for tool tips\n\t\tUINT m_nMaxMRU;\t\t\t\t\t\t// maximum number of MRU entries\n\t\tCRect m_rcPosition;\t\t\t\t\t// CRect of the starting window position\n\t\tHWND m_hOldFocus;\t\t\t\t\t// The window which had focus prior to the app'a deactivation\n\t\tint m_nOldID;\t\t\t\t\t\t// The previous ToolBar ID displayed in the statusbar\n\n\t};  // class CFrame\n\n}\n\n\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n\nnamespace Win32xx\n{\n\n\t/////////////////////////////////////\n\t// Definitions for the CMenuBar class\n\t//\n\tinline CMenuBar::CMenuBar()\n\t{\n\t\tm_bExitAfter\t= FALSE;\n\t\tm_hTopMenu\t\t= NULL;\n\t\tm_nHotItem\t\t= -1;\n\t\tm_bSelPopup\t\t= FALSE;\n\t\tm_hSelMenu\t\t= NULL;\n\t\tm_bMenuActive\t= FALSE;\n\t\tm_bKeyMode\t\t= FALSE;\n\t\tm_hPrevFocus\t= NULL;\n\t\tm_nMDIButton    = 0;\n\t\tm_hPopupMenu\t= 0;\n\n\t\tZeroMemory(&m_ThemeMenu, sizeof(MenuTheme));\n\t}\n\n\tinline CMenuBar::~CMenuBar()\n\t{\n\t}\n\n\tinline void CMenuBar::DoAltKey(WORD KeyCode)\n\t{\n\t\t//Handle key pressed with Alt held down\n\t\tUINT ID;\n\t\tif (SendMessage(TB_MAPACCELERATOR, KeyCode, (LPARAM) &ID))\n\t\t{\n\t\t\tGrabFocus();\n\t\t\tm_bKeyMode = TRUE;\n\t\t\tSetHotItem(ID);\n\t\t\tm_bMenuActive = TRUE;\n\t\t\tPostMessage(UWM_POPUPMENU, 0L, 0L);\n\t\t}\n\t\telse\n\t\t\t::MessageBeep(MB_OK);\n\t}\n\n\tinline void CMenuBar::DoPopupMenu()\n\t{\n\t\tif (m_bKeyMode)\n\t\t\t// Simulate a down arrow key press\n\t\t\tPostMessage(WM_KEYDOWN, VK_DOWN, 0L);\n\n\t\tm_bKeyMode = FALSE;\n\t\tm_bExitAfter = FALSE;\n\t\tm_OldMousePos = GetCursorPos();\n\n\t\tHWND hMaxMDIChild = NULL;\n\t\tif (IsMDIChildMaxed())\n\t\t\thMaxMDIChild = GetActiveMDIChild();\n\n\t\t// Load the submenu\n\t\tint nMaxedOffset = IsMDIChildMaxed()? 1:0;\n\t\tm_hPopupMenu = ::GetSubMenu(m_hTopMenu, m_nHotItem - nMaxedOffset);\n\t\tif (IsMDIChildMaxed() && (0 == m_nHotItem) )\n\t\t\tm_hPopupMenu = ::GetSystemMenu(hMaxMDIChild, FALSE);\n\n        // Retrieve the bounding rectangle for the toolbar button\n\t\tCRect rc = GetItemRect(m_nHotItem);\n\n\t\t// convert rectangle to desktop coordinates\n\t\tClientToScreen(rc);\n\n\t\t// Position popup above toolbar if it won't fit below\n\t\tTPMPARAMS tpm;\n\t\ttpm.cbSize = sizeof(TPMPARAMS);\n\t\ttpm.rcExclude = rc;\n\n\t\t// Set the hot button\n\t\tSendMessage(TB_SETHOTITEM, m_nHotItem, 0L);\n\t\tSendMessage(TB_PRESSBUTTON, m_nHotItem, MAKELONG(TRUE, 0));\n\n\t\tm_bSelPopup = FALSE;\n\t\tm_hSelMenu = NULL;\n\t\tm_bMenuActive = TRUE;\n\n\t\t// We hook mouse input to process mouse and keyboard input during\n\t\t//  the popup menu. Messages are sent to StaticMsgHook.\n\n\t\t// Remove any remaining hook first\n\t\tTLSData* pTLSData = (TLSData*)::TlsGetValue(GetApp()->GetTlsIndex());\n\t\tpTLSData->pMenuBar = this;\n\t\tif (pTLSData->hHook != NULL)\n\t\t\t::UnhookWindowsHookEx(pTLSData->hHook);\n\n\t\t// Hook messages about to be processed by the shortcut menu\n\t\tpTLSData->hHook = ::SetWindowsHookEx(WH_MSGFILTER, (HOOKPROC)StaticMsgHook, NULL, ::GetCurrentThreadId());\n\n\t\t// Display the shortcut menu\n\t\tBOOL bRightToLeft = FALSE;\n\n#if defined(WINVER) && defined (WS_EX_LAYOUTRTL) && (WINVER >= 0x0500)\n\t\tbRightToLeft = ((GetAncestor()->GetWindowLongPtr(GWL_EXSTYLE)) & WS_EX_LAYOUTRTL);\n#endif\n\n\t\tint xPos = bRightToLeft? rc.right : rc.left;\n\t\tUINT nID = ::TrackPopupMenuEx(m_hPopupMenu, TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,\n\t\t\txPos, rc.bottom, m_hWnd, &tpm);\n\n\t\t// We get here once the TrackPopupMenuEx has ended\n\t\tm_bMenuActive = FALSE;\n\n\t\t// Remove the message hook\n\t\t::UnhookWindowsHookEx(pTLSData->hHook);\n\t\tpTLSData->hHook = NULL;\n\n\t\t// Process MDI Child system menu\n\t\tif (IsMDIChildMaxed())\n\t\t{\n\t\t\tif (::GetSystemMenu(hMaxMDIChild, FALSE) == m_hPopupMenu )\n\t\t\t{\n\t\t\t\tif (nID)\n\t\t\t\t\t::SendMessage(hMaxMDIChild, WM_SYSCOMMAND, nID, 0L);\n\t\t\t}\n\t\t}\n\n\t\t// Resestablish Focus\n\t\tif (m_bKeyMode)\n\t\t\tGrabFocus();\n\t}\n\n\tinline void CMenuBar::DrawAllMDIButtons(CDC& DrawDC)\n\t{\n\t\tif (!IsMDIFrame())\n\t\t\treturn;\n\n\t\tif (IsMDIChildMaxed())\n\t\t{\n\t\t\tint cx = GetSystemMetrics(SM_CXSMICON);\n\t\t\tint cy = GetSystemMetrics(SM_CYSMICON);\n\t\t\tCRect rc = GetClientRect();\n\t\t\tint gap = 4;\n\t\t\trc.right -= gap;\n\n\t\t\t// Assign values to each element of the CRect array\n\t\t\tfor (int i = 0 ; i < 3 ; ++i)\n\t\t\t{\n\t\t\t\tint left = rc.right - (i+1)*cx - gap*(i+1);\n\t\t\t\tint top = rc.bottom/2 - cy/2;\n\t\t\t\tint right = rc.right - i*cx - gap*(i+1);\n\t\t\t\tint bottom = rc.bottom/2 + cy/2;\n\t\t\t\t::SetRect(&m_MDIRect[2 - i], left, top, right, bottom);\n\t\t\t}\n\n\t\t\t// Hide the MDI button if it won't fit\n\t\t\tfor (int k = 0 ; k <= 2 ; ++k)\n\t\t\t{\n\n\t\t\t\tif (m_MDIRect[k].left < GetMaxSize().cx)\n\t\t\t\t{\n\t\t\t\t\t::SetRectEmpty(&m_MDIRect[k]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tDrawMDIButton(DrawDC, MDI_MIN, 0);\n\t\t\tDrawMDIButton(DrawDC, MDI_RESTORE, 0);\n\t\t\tDrawMDIButton(DrawDC, MDI_CLOSE, 0);\n\t\t}\n\t}\n\n\tinline void CMenuBar::DrawMDIButton(CDC& DrawDC, int iButton, UINT uState)\n\t{\n\t\tif (!IsRectEmpty(&m_MDIRect[iButton]))\n\t\t{\n\t\t\tswitch (uState)\n\t\t\t{\n\t\t\tcase 0:\n\t\t\t\t{\n\t\t\t\t\t// Draw a grey outline\n\t\t\t\t\tDrawDC.CreatePen(PS_SOLID, 1, GetSysColor(COLOR_BTNFACE));\n\t\t\t\t\tDrawDC.MoveTo(m_MDIRect[iButton].left, m_MDIRect[iButton].bottom);\n\t\t\t\t\tDrawDC.LineTo(m_MDIRect[iButton].right, m_MDIRect[iButton].bottom);\n\t\t\t\t\tDrawDC.LineTo(m_MDIRect[iButton].right, m_MDIRect[iButton].top);\n\t\t\t\t\tDrawDC.LineTo(m_MDIRect[iButton].left, m_MDIRect[iButton].top);\n\t\t\t\t\tDrawDC.LineTo(m_MDIRect[iButton].left, m_MDIRect[iButton].bottom);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\t{\n\t\t\t\t\t// Draw outline, white at top, black on bottom\n\t\t\t\t\tDrawDC.CreatePen(PS_SOLID, 1, RGB(0, 0, 0));\n\t\t\t\t\tDrawDC.MoveTo(m_MDIRect[iButton].left, m_MDIRect[iButton].bottom);\n\t\t\t\t\tDrawDC.LineTo(m_MDIRect[iButton].right, m_MDIRect[iButton].bottom);\n\t\t\t\t\tDrawDC.LineTo(m_MDIRect[iButton].right, m_MDIRect[iButton].top);\n\t\t\t\t\tDrawDC.CreatePen(PS_SOLID, 1, RGB(255, 255, 255));\n\t\t\t\t\tDrawDC.LineTo(m_MDIRect[iButton].left, m_MDIRect[iButton].top);\n\t\t\t\t\tDrawDC.LineTo(m_MDIRect[iButton].left, m_MDIRect[iButton].bottom);\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\t{\n\t\t\t\t\t// Draw outline, black on top, white on bottom\n\t\t\t\t\tDrawDC.CreatePen(PS_SOLID, 1, RGB(255, 255, 255));\n\t\t\t\t\tDrawDC.MoveTo(m_MDIRect[iButton].left, m_MDIRect[iButton].bottom);\n\t\t\t\t\tDrawDC.LineTo(m_MDIRect[iButton].right, m_MDIRect[iButton].bottom);\n\t\t\t\t\tDrawDC.LineTo(m_MDIRect[iButton].right, m_MDIRect[iButton].top);\n\t\t\t\t\tDrawDC.CreatePen(PS_SOLID, 1, RGB(0, 0, 0));\n\t\t\t\t\tDrawDC.LineTo(m_MDIRect[iButton].left, m_MDIRect[iButton].top);\n\t\t\t\t\tDrawDC.LineTo(m_MDIRect[iButton].left, m_MDIRect[iButton].bottom);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tDrawDC.CreatePen(PS_SOLID, 1, RGB(0, 0, 0));\n\n\t\t\tswitch (iButton)\n\t\t\t{\n\t\t\tcase MDI_MIN:\n\t\t\t\t// Manually Draw Minimise button\n\t\t\t\tDrawDC.MoveTo(m_MDIRect[0].left + 4, m_MDIRect[0].bottom -4);\n\t\t\t\tDrawDC.LineTo(m_MDIRect[0].right - 4, m_MDIRect[0].bottom - 4);\n\n\t\t\t\tDrawDC.MoveTo(m_MDIRect[0].left + 4, m_MDIRect[0].bottom -5);\n\t\t\t\tDrawDC.LineTo(m_MDIRect[0].right - 4, m_MDIRect[0].bottom - 5);\n\t\t\t\tbreak;\n\t\t\tcase MDI_RESTORE:\n\t\t\t\t// Manually Draw Restore Button\n\t\t\t\tDrawDC.MoveTo(m_MDIRect[1].left + 3, m_MDIRect[1].top + 7);\n\t\t\t\tDrawDC.LineTo(m_MDIRect[1].left + 3, m_MDIRect[1].bottom -4);\n\t\t\t\tDrawDC.LineTo(m_MDIRect[1].right - 6, m_MDIRect[1].bottom -4);\n\t\t\t\tDrawDC.LineTo(m_MDIRect[1].right - 6, m_MDIRect[1].top + 7);\n\t\t\t\tDrawDC.LineTo(m_MDIRect[1].left + 3, m_MDIRect[1].top + 7);\n\n\t\t\t\tDrawDC.MoveTo(m_MDIRect[1].left + 3, m_MDIRect[1].top + 8);\n\t\t\t\tDrawDC.LineTo(m_MDIRect[1].right - 6, m_MDIRect[1].top + 8);\n\n\t\t\t\tDrawDC.MoveTo(m_MDIRect[1].left + 5, m_MDIRect[1].top + 7);\n\t\t\t\tDrawDC.LineTo(m_MDIRect[1].left + 5, m_MDIRect[1].top + 4);\n\t\t\t\tDrawDC.LineTo(m_MDIRect[1].right - 4, m_MDIRect[1].top + 4);\n\t\t\t\tDrawDC.LineTo(m_MDIRect[1].right - 4, m_MDIRect[1].bottom -6);\n\t\t\t\tDrawDC.LineTo(m_MDIRect[1].right - 6, m_MDIRect[1].bottom -6);\n\n\t\t\t\tDrawDC.MoveTo(m_MDIRect[1].left + 5, m_MDIRect[1].top + 5);\n\t\t\t\tDrawDC.LineTo(m_MDIRect[1].right - 4, m_MDIRect[1].top + 5);\n\t\t\t\tbreak;\n\t\t\tcase MDI_CLOSE:\n\t\t\t\t// Manually Draw Close Button\n\t\t\t\tDrawDC.MoveTo(m_MDIRect[2].left + 4, m_MDIRect[2].top +5);\n\t\t\t\tDrawDC.LineTo(m_MDIRect[2].right - 4, m_MDIRect[2].bottom -3);\n\n\t\t\t\tDrawDC.MoveTo(m_MDIRect[2].left + 5, m_MDIRect[2].top +5);\n\t\t\t\tDrawDC.LineTo(m_MDIRect[2].right - 4, m_MDIRect[2].bottom -4);\n\n\t\t\t\tDrawDC.MoveTo(m_MDIRect[2].left + 4, m_MDIRect[2].top +6);\n\t\t\t\tDrawDC.LineTo(m_MDIRect[2].right - 5, m_MDIRect[2].bottom -3);\n\n\t\t\t\tDrawDC.MoveTo(m_MDIRect[2].right -5, m_MDIRect[2].top +5);\n\t\t\t\tDrawDC.LineTo(m_MDIRect[2].left + 3, m_MDIRect[2].bottom -3);\n\n\t\t\t\tDrawDC.MoveTo(m_MDIRect[2].right -5, m_MDIRect[2].top +6);\n\t\t\t\tDrawDC.LineTo(m_MDIRect[2].left + 4, m_MDIRect[2].bottom -3);\n\n\t\t\t\tDrawDC.MoveTo(m_MDIRect[2].right -6, m_MDIRect[2].top +5);\n\t\t\t\tDrawDC.LineTo(m_MDIRect[2].left + 3, m_MDIRect[2].bottom -4);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tinline void CMenuBar::ExitMenu()\n\t{\n\t\tReleaseFocus();\n\t\tm_bKeyMode = FALSE;\n\t\tm_bMenuActive = FALSE;\n\t\tSendMessage(TB_PRESSBUTTON, m_nHotItem, (LPARAM) MAKELONG (FALSE, 0));\n\t\tSetHotItem(-1);\n\n\t\tCPoint pt = GetCursorPos();\n\t\tScreenToClient(pt);\n\n\t\t// Update mouse mouse position for hot tracking\n\t\tSendMessage(WM_MOUSEMOVE, 0L, MAKELONG(pt.x, pt.y));\n\t}\n\n\tinline HWND CMenuBar::GetActiveMDIChild()\n\t{\n\t\tHWND hwndMDIChild = NULL;\n\t\tif (IsMDIFrame())\n\t\t{\n\t\t\thwndMDIChild = (HWND)::SendMessage(m_pFrame->GetView()->GetHwnd(), WM_MDIGETACTIVE, 0L, 0L);\n\t\t}\n\n\t\treturn hwndMDIChild;\n\t}\n\n\tinline void CMenuBar::GrabFocus()\n\t{\n\t\tif (::GetFocus() != m_hWnd)\n\t\t\tm_hPrevFocus = ::SetFocus(m_hWnd);\n\t\t::SetCapture(m_hWnd);\n\t\t::SetCursor(::LoadCursor(NULL, IDC_ARROW));\n\t}\n\n\tinline BOOL CMenuBar::IsMDIChildMaxed() const\n\t{\n\t\tBOOL bMaxed = FALSE;\n\n\t\tif (IsMDIFrame() && m_pFrame->GetView()->IsWindow())\n\t\t{\n\t\t\tm_pFrame->GetView()->SendMessage(WM_MDIGETACTIVE, 0L, (LPARAM)&bMaxed);\n\t\t}\n\n\t\treturn bMaxed;\n\t}\n\n\tinline BOOL CMenuBar::IsMDIFrame() const\n\t{\n\t\treturn (m_pFrame->IsMDIFrame());\t\n\t}\n\n\tinline void CMenuBar::OnMenuChar(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(lParam);\n\n\t\tif (!m_bMenuActive)\n\t\t\tDoAltKey(LOWORD(wParam));\n\t}\n\n\tinline void CMenuBar::OnCreate()\n\t{\n\t\t// We must send this message before sending the TB_ADDBITMAP or TB_ADDBUTTONS message\n\t\tSendMessage(TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0L);\n\n\t\tm_pFrame = (CFrame*)GetAncestor();\n\t\tassert(m_pFrame);\n\t}\n\n\tinline LRESULT CMenuBar::OnCustomDraw(NMHDR* pNMHDR)\n\t// CustomDraw is used to render the MenuBar's toolbar buttons\n\t{\n\t\tif (m_ThemeMenu.UseThemes)\n\t\t{\n\t\t\tLPNMTBCUSTOMDRAW lpNMCustomDraw = (LPNMTBCUSTOMDRAW)pNMHDR;\n\n\t\t\tswitch (lpNMCustomDraw->nmcd.dwDrawStage)\n\t\t\t{\n\t\t\t// Begin paint cycle\n\t\t\tcase CDDS_PREPAINT:\n\t\t\t\t// Send NM_CUSTOMDRAW item draw, and post-paint notification messages.\n\t\t\t\treturn CDRF_NOTIFYITEMDRAW | CDRF_NOTIFYPOSTPAINT ;\n\n\t\t\t// An item is about to be drawn\n\t\t\tcase CDDS_ITEMPREPAINT:\n\t\t\t\t{\n\t\t\t\t\tCDC* pDrawDC = FromHandle(lpNMCustomDraw->nmcd.hdc);\n\t\t\t\t\tCRect rcRect = lpNMCustomDraw->nmcd.rc;\n\t\t\t\t\tint nState = lpNMCustomDraw->nmcd.uItemState;\n\t\t\t\t\tDWORD dwItem = (DWORD)lpNMCustomDraw->nmcd.dwItemSpec;\n\n\t\t\t\t\t// Leave a pixel gap above and below the drawn rectangle\n\t\t\t\t\tif (IsAeroThemed())\n\t\t\t\t\t\trcRect.InflateRect(0, -2);\n\t\t\t\t\telse\n\t\t\t\t\t\trcRect.InflateRect(0, -1);\n\n\t\t\t\t\tif (IsMDIChildMaxed() && (0 == dwItem))\n\t\t\t\t\t// Draw over MDI Max button\n\t\t\t\t\t{\n\t\t\t\t\t\tHICON hIcon = (HICON)::SendMessage(GetActiveMDIChild(), WM_GETICON, ICON_SMALL, 0L);\n\t\t\t\t\t\tif (NULL == hIcon)\n\t\t\t\t\t\t\thIcon = ::LoadIcon(NULL, IDI_APPLICATION);\n\n\t\t\t\t\t\tint cx = ::GetSystemMetrics (SM_CXSMICON);\n\t\t\t\t\t\tint cy = ::GetSystemMetrics (SM_CYSMICON);\n\t\t\t\t\t\tint y = 1 + (GetWindowRect().Height() - cy)/2;\n\t\t\t\t\t\tint x = (rcRect.Width() - cx)/2;\n\t\t\t\t\t\tpDrawDC->DrawIconEx(x, y, hIcon, cx, cy, 0, NULL, DI_NORMAL);\n\n\t\t\t\t\t\tpDrawDC->Detach();\t// Optional, deletes GDI objects sooner\n\t\t\t\t\t\treturn CDRF_SKIPDEFAULT;  // No further drawing\n\t\t\t\t\t}\n\n\t\t\t\t\telse if (nState & (CDIS_HOT | CDIS_SELECTED))\n\t\t\t\t\t{\n\t\t\t\t\t\tif ((nState & CDIS_SELECTED) || (GetButtonState(dwItem) & TBSTATE_PRESSED))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpDrawDC->GradientFill(m_ThemeMenu.clrPressed1, m_ThemeMenu.clrPressed2, rcRect, FALSE);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (nState & CDIS_HOT)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpDrawDC->GradientFill(m_ThemeMenu.clrHot1, m_ThemeMenu.clrHot2, rcRect, FALSE);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Draw border\n\t\t\t\t\t\tpDrawDC->CreatePen(PS_SOLID, 1, m_ThemeMenu.clrOutline);\n\t\t\t\t\t\tpDrawDC->MoveTo(rcRect.left, rcRect.bottom);\n\t\t\t\t\t\tpDrawDC->LineTo(rcRect.left, rcRect.top);\n\t\t\t\t\t\tpDrawDC->LineTo(rcRect.right-1, rcRect.top);\n\t\t\t\t\t\tpDrawDC->LineTo(rcRect.right-1, rcRect.bottom);\n\t\t\t\t\t\tpDrawDC->MoveTo(rcRect.right-1, rcRect.bottom);\n\t\t\t\t\t\tpDrawDC->LineTo(rcRect.left, rcRect.bottom);\n\n\t\t\t\t\t\tTCHAR str[80] = _T(\"\");\n\t\t\t\t\t\tint nLength = (int)SendMessage(TB_GETBUTTONTEXT, lpNMCustomDraw->nmcd.dwItemSpec, 0L);\n\t\t\t\t\t\tif ((nLength > 0) && (nLength < 80))\n\t\t\t\t\t\t\tSendMessage(TB_GETBUTTONTEXT, lpNMCustomDraw->nmcd.dwItemSpec, (LPARAM)str);\n\n\t\t\t\t\t\t// Draw highlight text\n\t\t\t\t\t\tpDrawDC->SelectObject(GetFont());\n\t\t\t\t\t\trcRect.bottom += 1;\n\t\t\t\t\t\tint iMode = pDrawDC->SetBkMode(TRANSPARENT);\n\t\t\t\t\t\tpDrawDC->DrawText(str, lstrlen(str), rcRect, DT_VCENTER | DT_CENTER | DT_SINGLELINE);\n\n\t\t\t\t\t\tpDrawDC->SetBkMode(iMode);\n\t\t\t\t\t\tpDrawDC->Detach();\t// Optional, deletes GDI objects sooner\n\t\t\t\t\t\treturn CDRF_SKIPDEFAULT;  // No further drawing\n\t\t\t\t\t} \n\t\t\t\t} \n\t\t\t\treturn CDRF_DODEFAULT ;   // Do default drawing\n\n\t\t\t// Painting cycle has completed\n\t\t\tcase CDDS_POSTPAINT:\n\t\t\t\t// Draw MDI Minimise, Restore and Close buttons\n\t\t\t\t{\n\t\t\t\t\tCDC* pDrawDC = FromHandle(lpNMCustomDraw->nmcd.hdc);\n\t\t\t\t\tDrawAllMDIButtons(*pDrawDC);\n\t\t\t\t\tpDrawDC->Detach();\t// Optional, deletes GDI objects sooner\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} \n\t\treturn 0L;\n\t}\n\n\tinline void CMenuBar::OnKeyDown(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(lParam);\n\n\t\tswitch (wParam)\n\t\t{\n\t\tcase VK_ESCAPE:\n\t\t\tExitMenu();\n\t\t\tbreak;\n\n\t\tcase VK_SPACE:\n\t\t\tExitMenu();\n\t\t\t// Bring up the system menu\n\t\t\tGetAncestor()->PostMessage(WM_SYSCOMMAND, SC_KEYMENU, VK_SPACE);\n\t\t\tbreak;\n\n\t\t// Handle VK_DOWN,VK_UP and VK_RETURN together\n\t\tcase VK_DOWN:\n\t\tcase VK_UP:\n\t\tcase VK_RETURN:\n\t\t\t// Always use PostMessage for USER_POPUPMENU (not SendMessage)\n\t\t\tPostMessage(UWM_POPUPMENU, 0L, 0L);\n\t\t\tbreak;\n\n\t\tcase VK_LEFT:\n\t\t\t// Move left to next topmenu item\n\t\t\t(m_nHotItem > 0)? SetHotItem(m_nHotItem -1) : SetHotItem(GetButtonCount()-1);\n\t\t\tbreak;\n\n\t\tcase VK_RIGHT:\n\t\t\t// Move right to next topmenu item\n\t\t\t(m_nHotItem < GetButtonCount() -1)? SetHotItem(m_nHotItem +1) : SetHotItem(0);\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\t// Handle Accelerator keys with Alt toggled down\n\t\t\tif (m_bKeyMode)\n\t\t\t{\n\t\t\t\tUINT ID;\n\t\t\t\tif (SendMessage(TB_MAPACCELERATOR, wParam, (LPARAM) &ID))\n\t\t\t\t{\n\t\t\t\t\tm_nHotItem = ID;\n\t\t\t\t\tPostMessage(UWM_POPUPMENU, 0L, 0L);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\t::MessageBeep(MB_OK);\n\t\t\t}\n\t\t\tbreak;\n\t\t} // switch (wParam)\n\t}\n\n\tinline void CMenuBar::OnLButtonDown(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\n\t\tGrabFocus();\n\t\tm_nMDIButton = 0;\n\t\tCPoint pt;\n\n\t\tpt.x = GET_X_LPARAM(lParam);\n\t\tpt.y = GET_Y_LPARAM(lParam);\n\n\t\tif (IsMDIFrame())\n\t\t{\n\t\t\tif (IsMDIChildMaxed())\n\t\t\t{\n\t\t\t\tCClientDC MenuBarDC(this);\n\t\t\t\tm_nMDIButton = -1;\n\n\t\t\t\tif (m_MDIRect[0].PtInRect(pt)) m_nMDIButton = 0;\n\t\t\t\tif (m_MDIRect[1].PtInRect(pt)) m_nMDIButton = 1;\n\t\t\t\tif (m_MDIRect[2].PtInRect(pt)) m_nMDIButton = 2;\n\n\t\t\t\tif (m_nMDIButton >= 0)\n\t\t\t\t{\n\t\t\t\t\tDrawMDIButton(MenuBarDC, MDI_MIN,     (0 == m_nMDIButton)? 2 : 0);\n\t\t\t\t\tDrawMDIButton(MenuBarDC, MDI_RESTORE, (1 == m_nMDIButton)? 2 : 0);\n\t\t\t\t\tDrawMDIButton(MenuBarDC, MDI_CLOSE,   (2 == m_nMDIButton)? 2 : 0);\n\t\t\t\t}\n\n\t\t\t\t// Bring up the MDI Child window's system menu when the icon is pressed\n\t\t\t\tif (0 == HitTest())\n\t\t\t\t{\n\t\t\t\t\tm_nHotItem = 0;\n\t\t\t\t\tPostMessage(UWM_POPUPMENU, 0L, 0L);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tinline void CMenuBar::OnLButtonUp(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\t\tCPoint pt;\n\t\tpt.x = GET_X_LPARAM(lParam);\n\t\tpt.y = GET_Y_LPARAM(lParam);\n\n\t\tif (IsMDIFrame())\n\t\t{\n\t\t\tHWND MDIClient = m_pFrame->GetView()->GetHwnd();\n\t\t\tHWND MDIChild = GetActiveMDIChild();\n\n\t\t\tif (IsMDIChildMaxed())\n\t\t\t{\n\t\t\t\tCPoint pt = GetCursorPos();\n\t\t\t\tScreenToClient(pt);\n\n\t\t\t\t// Process the MDI button action when the left mouse button is up\n\t\t\t\tif (m_MDIRect[0].PtInRect(pt))\n\t\t\t\t{\n\t\t\t\t\tif (MDI_MIN == m_nMDIButton)\n\t\t\t\t\t\t::ShowWindow(MDIChild, SW_MINIMIZE);\n\t\t\t\t}\n\n\t\t\t\tif (m_MDIRect[1].PtInRect(pt))\n\t\t\t\t{\n\t\t\t\t\tif (MDI_RESTORE == m_nMDIButton)\n\t\t\t\t\t::PostMessage(MDIClient, WM_MDIRESTORE, (WPARAM)MDIChild, 0L);\n\t\t\t\t}\n\n\t\t\t\tif (m_MDIRect[2].PtInRect(pt))\n\t\t\t\t{\n\t\t\t\t\tif (MDI_CLOSE == m_nMDIButton)\n\t\t\t\t\t\t::PostMessage(MDIChild, WM_CLOSE, 0L, 0L);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tm_nMDIButton = 0;\n\t\tExitMenu();\n\t}\n\n\tinline BOOL CMenuBar::OnMenuInput(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t// When a popup menu is active, StaticMsgHook directs all menu messages here\n\t{\n\t\tswitch(uMsg)\n\t\t{\n\t\tcase WM_KEYDOWN:\n\t\t\tm_bExitAfter = FALSE;\n\t\t\t{\n\t\t\t\tswitch (wParam)\n\t\t\t\t{\n\t\t\t\tcase VK_ESCAPE:\n\t\t\t\t\t// Use default processing if inside a Sub Menu\n\t\t\t\t\tif ((m_hSelMenu) &&(m_hSelMenu != m_hPopupMenu))\n\t\t\t\t\t\treturn FALSE;\n\n\t\t\t\t\tm_bMenuActive = FALSE;\n\t\t\t\t\tm_bKeyMode = TRUE;\n\t\t\t\t\tSendMessage(WM_CANCELMODE, 0L, 0L);\n\t\t\t\t\tSendMessage(TB_PRESSBUTTON, m_nHotItem, MAKELONG(FALSE, 0));\n\t\t\t\t\tSendMessage(TB_SETHOTITEM, m_nHotItem, 0L);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase VK_LEFT:\n\t\t\t\t\t// Use default processing if inside a Sub Menu\n\t\t\t\t    if ((m_hSelMenu) &&(m_hSelMenu != m_hPopupMenu))\n\t\t\t\t\t\treturn FALSE;\n\n\t\t\t\t\tSendMessage(TB_PRESSBUTTON, m_nHotItem, MAKELONG(FALSE, 0));\n\n\t\t\t\t\t// Move left to next topmenu item\n\t\t\t\t\t(m_nHotItem > 0)? --m_nHotItem : m_nHotItem = GetButtonCount()-1;\n\t\t\t\t\tSendMessage(WM_CANCELMODE, 0L, 0L);\n\n\t\t\t\t\t// Always use PostMessage for USER_POPUPMENU (not SendMessage)\n\t\t\t\t\tPostMessage(UWM_POPUPMENU, 0L, 0L);\n\t\t\t\t\tPostMessage(WM_KEYDOWN, VK_DOWN, 0L);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase VK_RIGHT:\n\t\t\t\t\t// Use default processing to open Sub Menu\n\t\t\t\t\tif (m_bSelPopup)\n\t\t\t\t\t\treturn FALSE;\n\n\t\t\t\t\tSendMessage(TB_PRESSBUTTON, m_nHotItem, MAKELONG(FALSE, 0));\n\n\t\t\t\t\t// Move right to next topmenu item\n\t\t\t\t\t(m_nHotItem < GetButtonCount()-1)? ++m_nHotItem : m_nHotItem = 0;\n\t\t\t\t\tSendMessage(WM_CANCELMODE, 0L, 0L);\n\n\t\t\t\t\t// Always use PostMessage for USER_POPUPMENU (not SendMessage)\n\t\t\t\t\tPostMessage(UWM_POPUPMENU, 0L, 0L);\n\t\t\t\t\tPostMessage(WM_KEYDOWN, VK_DOWN, 0L);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase VK_RETURN:\n\t\t\t\t\tm_bExitAfter = TRUE;\n\t\t\t\t\tbreak;\n\n\t\t\t\t} // switch (wParam)\n\n\t\t\t} // case WM_KEYDOWN\n\n\t\t\treturn FALSE;\n\n\t\tcase WM_CHAR:\n\t\t\tm_bExitAfter = TRUE;\n\t\t\treturn FALSE;\n\n\t\tcase WM_LBUTTONDOWN:\n\t\t\t{\n\t\t\t\tm_bExitAfter = TRUE;\n\t\t\t\tif (HitTest() >= 0)\n\t\t\t\t{\n\t\t\t\t\t// Cancel popup when we hit a button a second time\n\t\t\t\t\tSendMessage(WM_CANCELMODE, 0L, 0L);\n\t\t\t\t\treturn TRUE;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn FALSE;\n\n\t\tcase WM_LBUTTONDBLCLK:\n\t\t\t// Perform default action for DblClick on MDI Maxed icon\n\t\t\tif (IsMDIChildMaxed() && (0 == HitTest()))\n\t\t\t{\n\t\t\t\tCWnd* pMDIChild = FromHandle(GetActiveMDIChild());\n\t\t\t\tCMenu* pChildMenu = pMDIChild->GetSystemMenu(FALSE);\n\n\t\t\t\tUINT nID = pChildMenu->GetDefaultItem(FALSE, 0);\n\t\t\t\tif (nID)\n\t\t\t\t\tpMDIChild->PostMessage(WM_SYSCOMMAND, nID, 0L);\n\t\t\t}\n\n\t\t\tm_bExitAfter = TRUE;\n\t\t\treturn FALSE;\n\n\t\tcase WM_MENUSELECT:\n\t\t\t{\n\t\t\t\t// store info about selected item\n\t\t\t\tm_hSelMenu = (HMENU)lParam;\n\t\t\t\tm_bSelPopup = ((HIWORD(wParam) & MF_POPUP) != 0);\n\n\t\t\t\t// Reflect message back to the frame window\n\t\t\t\tGetAncestor()->SendMessage(WM_MENUSELECT, wParam, lParam);\n\t\t\t}\n\t\t\treturn TRUE;\n\n\t\tcase WM_MOUSEMOVE:\n\t\t\t{\n\t\t\t\tCPoint pt;\n\t\t\t\tpt.x = GET_X_LPARAM(lParam);\n\t\t\t\tpt.y = GET_Y_LPARAM(lParam);\n\n\t\t\t\t// Skip if mouse hasn't moved\n\t\t\t\tif ((pt.x == m_OldMousePos.x) && (pt.y == m_OldMousePos.y))\n\t\t\t\t\treturn FALSE;\n\n\t\t\t\tm_OldMousePos.x = pt.x;\n\t\t\t\tm_OldMousePos.y = pt.y;\n\t\t\t\tScreenToClient(pt);\n\n\t\t\t\t// Reflect messages back to the MenuBar for hot tracking\n\t\t\t\tSendMessage(WM_MOUSEMOVE, 0L, MAKELPARAM(pt.x, pt.y));\n\t\t\t}\n\t\t\tbreak;\n\n\t\t}\n\t\treturn FALSE;\n\t}\n\n\tinline void CMenuBar::OnMouseLeave()\n\t{\n\t\tif (IsMDIFrame())\n\t\t{\n\t\t\tif (IsMDIChildMaxed())\n\t\t\t{\n\t\t\t\tCClientDC MenuBarDC(this);\n\n\t\t\t\tDrawMDIButton(MenuBarDC, MDI_MIN,     0);\n\t\t\t\tDrawMDIButton(MenuBarDC, MDI_RESTORE, 0);\n\t\t\t\tDrawMDIButton(MenuBarDC, MDI_CLOSE,   0);\n\t\t\t}\n\t\t}\n\t}\n\n\tinline void CMenuBar::OnMouseMove(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tCPoint pt;\n\t\tpt.x = GET_X_LPARAM(lParam);\n\t\tpt.y = GET_Y_LPARAM(lParam);\n\n\t\tif (IsMDIFrame())\n\t\t{\n\t\t\tif (IsMDIChildMaxed())\n\t\t\t{\n\t\t\t\tCClientDC MenuBarDC(this);\n\t\t\t\tint MDIButton = -1;\n\t\t\t\tif (m_MDIRect[0].PtInRect(pt)) MDIButton = 0;\n\t\t\t\tif (m_MDIRect[1].PtInRect(pt)) MDIButton = 1;\n\t\t\t\tif (m_MDIRect[2].PtInRect(pt)) MDIButton = 2;\n\n\t\t\t\tif (MK_LBUTTON == wParam)  // mouse moved with left mouse button is held down\n\t\t\t\t{\n\t\t\t\t\t// toggle the MDI button image pressed/unpressed as required\n\t\t\t\t\tif (MDIButton >= 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tDrawMDIButton(MenuBarDC, MDI_MIN,     ((0 == MDIButton) && (0 == m_nMDIButton))? 2 : 0);\n\t\t\t\t\t\tDrawMDIButton(MenuBarDC, MDI_RESTORE, ((1 == MDIButton) && (1 == m_nMDIButton))? 2 : 0);\n\t\t\t\t\t\tDrawMDIButton(MenuBarDC, MDI_CLOSE,   ((2 == MDIButton) && (2 == m_nMDIButton))? 2 : 0);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tDrawMDIButton(MenuBarDC, MDI_MIN,     0);\n\t\t\t\t\t\tDrawMDIButton(MenuBarDC, MDI_RESTORE, 0);\n\t\t\t\t\t\tDrawMDIButton(MenuBarDC, MDI_CLOSE,   0);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\t// mouse moved without left mouse button held down\n\t\t\t\t{\n\t\t\t\t\tif (MDIButton >= 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tDrawMDIButton(MenuBarDC, MDI_MIN,     (0 == MDIButton)? 1 : 0);\n\t\t\t\t\t\tDrawMDIButton(MenuBarDC, MDI_RESTORE, (1 == MDIButton)? 1 : 0);\n\t\t\t\t\t\tDrawMDIButton(MenuBarDC, MDI_CLOSE,   (2 == MDIButton)? 1 : 0);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tDrawMDIButton(MenuBarDC, MDI_MIN,     0);\n\t\t\t\t\t\tDrawMDIButton(MenuBarDC, MDI_RESTORE, 0);\n\t\t\t\t\t\tDrawMDIButton(MenuBarDC, MDI_CLOSE,   0);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tinline LRESULT CMenuBar::OnNotifyReflect(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\n\t\tswitch (((LPNMHDR)lParam)->code)\n\t\t{\n\t\tcase NM_CUSTOMDRAW:\n\t\t\t{\n\t\t\t\treturn OnCustomDraw((LPNMHDR) lParam);\n\t\t\t}\n\n\t\tcase TBN_DROPDOWN:\n\t\t\t// Always use PostMessage for USER_POPUPMENU (not SendMessage)\n\t\t\tPostMessage(UWM_POPUPMENU, 0L, 0L);\n\t\t\tbreak;\n\n\t\tcase TBN_HOTITEMCHANGE:\n\t\t\t// This is the notification that a hot item change is about to occur\n\t\t\t// This is used to bring up a new popup menu when required\n\t\t\t{\n\t\t\t\tCPoint pt = GetCursorPos();\n\t\t\t\tif (this == WindowFromPoint(pt))\t// MenuBar window must be on top\n\t\t\t\t{\n\t\t\t\t\tDWORD flag = ((LPNMTBHOTITEM)lParam)->dwFlags;\n\t\t\t\t\tif ((flag & HICF_MOUSE) && !(flag & HICF_LEAVING))\n\t\t\t\t\t{\n\t\t\t\t\t\tint nButton = HitTest();\n\t\t\t\t\t\tif ((m_bMenuActive) && (nButton != m_nHotItem))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tSendMessage(TB_PRESSBUTTON, m_nHotItem, MAKELONG(FALSE, 0));\n\t\t\t\t\t\t\tm_nHotItem = nButton;\n\t\t\t\t\t\t\tSendMessage(WM_CANCELMODE, 0L, 0L);\n\n\t\t\t\t\t\t\t//Always use PostMessage for USER_POPUPMENU (not SendMessage)\n\t\t\t\t\t\t\tPostMessage(UWM_POPUPMENU, 0L, 0L);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tm_nHotItem = nButton;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle escape from popup menu\n\t\t\t\t\tif ((flag & HICF_LEAVING) && m_bKeyMode)\n\t\t\t\t\t{\n\t\t\t\t\t\tm_nHotItem = ((LPNMTBHOTITEM)lParam)->idOld;\n\t\t\t\t\t\tPostMessage(TB_SETHOTITEM, m_nHotItem, 0L);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t} //case TBN_HOTITEMCHANGE:\n\n\t\t} // switch(((LPNMHDR)lParam)->code)\n\t\treturn 0L;\n\t} // CMenuBar::OnNotify(...)\n\n\tinline void CMenuBar::OnWindowPosChanged()\n\t{\n\t\tInvalidateRect(&m_MDIRect[0], TRUE);\n\t\tInvalidateRect(&m_MDIRect[1], TRUE);\n\t\tInvalidateRect(&m_MDIRect[2], TRUE);\n\t\t{\n\t\t\tCClientDC MenuBarDC(this);\n\t\t\tDrawAllMDIButtons(MenuBarDC);\n\t\t}\n\t}\n\n\tinline void CMenuBar::PreCreate(CREATESTRUCT &cs)\n\t{\n\t\tcs.style = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | TBSTYLE_TOOLTIPS | TBSTYLE_LIST | TBSTYLE_FLAT | CCS_NODIVIDER | CCS_NORESIZE;\n\t}\n\n\tinline void CMenuBar::PreRegisterClass(WNDCLASS &wc)\n\t{\n\t\t// Set the Window Class\n\t\twc.lpszClassName =  TOOLBARCLASSNAME;\n\t}\n\n\tinline void CMenuBar::ReleaseFocus()\n\t{\n\t\tif (m_hPrevFocus)\n\t\t\t::SetFocus(m_hPrevFocus);\n\n\t\tm_hPrevFocus = NULL;\n\t\t::ReleaseCapture();\n\t}\n\n\tinline void CMenuBar::SetHotItem(int nHot)\n\t{\n\t\tm_nHotItem = nHot;\n\t\tSendMessage(TB_SETHOTITEM, m_nHotItem, 0L);\n\t}\n\n\tinline void CMenuBar::SetMenu(HMENU hMenu)\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tm_hTopMenu = hMenu;\n\t\tint nMaxedOffset = (IsMDIChildMaxed()? 1:0);\n\n\t\t// Remove any existing buttons\n\t\twhile (SendMessage(TB_BUTTONCOUNT,  0L, 0L) > 0)\n\t\t{\n\t\t\tif(!SendMessage(TB_DELETEBUTTON, 0L, 0L))\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// Set the Bitmap size to zero\n\t\tSendMessage(TB_SETBITMAPSIZE, 0L, MAKELPARAM(0, 0));\n\n\t\tif (IsMDIChildMaxed())\n\t\t{\n\t\t\t// Create an extra button for the MDI child system menu\n\t\t\t// Later we will custom draw the window icon over this button\n\t\t\tTBBUTTON tbb = {0};\n\t\t\ttbb.fsState = TBSTATE_ENABLED;\n\t\t\ttbb.fsStyle = TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE ;\n\t\t\ttbb.iString = (INT_PTR)_T(\" \");\n\t\t\tSendMessage(TB_ADDBUTTONS, 1, (WPARAM)&tbb);\n\t\t\tSetButtonText(0, _T(\"    \"));\n\t\t}\n\n\t\tfor (int i = 0 ; i < ::GetMenuItemCount(hMenu); ++i)\n\t\t{\n\t\t\t// Assign the ToolBar Button struct\n\t\t\tTBBUTTON tbb = {0};\n\t\t\ttbb.idCommand = i  + nMaxedOffset;\t// Each button needs a unique ID\n\t\t\ttbb.fsState = TBSTATE_ENABLED;\n\t\t\ttbb.fsStyle = TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE | TBSTYLE_DROPDOWN;\n\t\t\ttbb.iString = (INT_PTR)_T(\" \");\n\t\t\tSendMessage(TB_ADDBUTTONS, 1, (WPARAM)&tbb);\n\n\t\t\t// Add the menu title to the string table\n\t\t\tstd::vector<TCHAR> vMenuName( MAX_MENU_STRING+1, _T('\\0') );\n\t\t\tTCHAR* szMenuName = &vMenuName[0];\n\t\t\tGetMenuString(hMenu, i, szMenuName, MAX_MENU_STRING, MF_BYPOSITION);\n\t\t\tSetButtonText(i  + nMaxedOffset, szMenuName);\n\t\t}\n\t}\n\n\tinline void CMenuBar::SetMenuBarTheme(MenuTheme& Theme)\n\t{\n\t\tm_ThemeMenu.UseThemes   = Theme.UseThemes;\n\t\tm_ThemeMenu.clrHot1     = Theme.clrHot1;\n\t\tm_ThemeMenu.clrHot2     = Theme.clrHot2;\n\t\tm_ThemeMenu.clrPressed1 = Theme.clrPressed1;\n\t\tm_ThemeMenu.clrPressed2 = Theme.clrPressed2;\n\t\tm_ThemeMenu.clrOutline  = Theme.clrOutline;\n\n\t\tif (IsWindow())\n\t\t\tInvalidate();\n\t}\n\n\tinline LRESULT CALLBACK CMenuBar::StaticMsgHook(int nCode, WPARAM wParam, LPARAM lParam)\n\t{\n\t\tassert(GetApp());\n\t\tMSG* pMsg = (MSG*)lParam;\n\t\tTLSData* pTLSData = (TLSData*)TlsGetValue(GetApp()->GetTlsIndex());\n\t\tassert(pTLSData);\n\t\tCMenuBar* pMenuBar = (CMenuBar*)pTLSData->pMenuBar;\n\n\t\tif (pMenuBar && (MSGF_MENU == nCode))\n\t\t{\n\t\t\t// process menu message\n\t\t\tif (pMenuBar->OnMenuInput(pMsg->message, pMsg->wParam, pMsg->lParam))\n\t\t\t{\n\t\t\t\treturn TRUE;\n\t\t\t}\n\t\t}\n\n\t\treturn CallNextHookEx(pTLSData->hHook, nCode, wParam, lParam);\n\t}\n\n\tinline void CMenuBar::OnSysCommand(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tif (SC_KEYMENU == wParam)\n\t\t{\n\t\t\tif (0 == lParam)\n\t\t\t{\n\t\t\t\t// Alt/F10 key toggled\n\t\t\t\tGrabFocus();\n\t\t\t\tm_bKeyMode = TRUE;\n\t\t\t\tint nMaxedOffset = (IsMDIChildMaxed()? 1:0);\n\t\t\t\tSetHotItem(nMaxedOffset);\n\t\t\t}\n\t\t\telse\n\t\t\t\t// Handle key pressed with Alt held down\n\t\t\t\tDoAltKey((WORD)lParam);\n\t\t}\n\t}\n\n\tinline LRESULT CMenuBar::WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\tswitch (uMsg)\n\t\t{\n\t\tcase WM_CHAR:\n\t\t\treturn 0L;  // Discard these messages\n\t\tcase WM_DRAWITEM:\n\t\t\tm_pFrame->OnDrawItem(wParam, lParam);\n\t\t\treturn TRUE; // handled\n\t\tcase WM_EXITMENULOOP:\n\t\t\tif (m_bExitAfter)\n\t\t\t\tExitMenu();\n\t\t\tm_pFrame->OnExitMenuLoop();\n\t\t\tbreak;\n\t\tcase WM_INITMENUPOPUP:\n\t\t\tm_pFrame->OnInitMenuPopup(wParam, lParam);\n\t\t\tbreak;\n\t\tcase WM_KEYDOWN:\n\t\t\tOnKeyDown(wParam, lParam);\n\t\t\treturn 0L;\t// Discard these messages\n\t\tcase WM_KILLFOCUS:\n\t\t\tExitMenu();\n\t\t\treturn 0L;\n\t\tcase WM_LBUTTONDOWN:\n\t\t\t// Do default processing first\n\t\t\tCallWindowProc(GetPrevWindowProc(), uMsg, wParam, lParam);\n\n\t\t\tOnLButtonDown(wParam, lParam);\n\t\t\treturn 0L;\n\t\tcase WM_LBUTTONUP:\n\t\t\tOnLButtonUp(wParam, lParam);\n\t\t\tbreak;\n\t\tcase WM_MEASUREITEM:\n\t\t\tm_pFrame->OnMeasureItem(wParam, lParam);\n\t\t\treturn TRUE; // handled\n\t\tcase WM_MOUSELEAVE:\n\t\t\tOnMouseLeave();\n\t\t\tbreak;\n\t\tcase WM_MOUSEMOVE:\n\t\t\tOnMouseMove(wParam, lParam);\n\t\t\tbreak;\n\t\tcase UWM_POPUPMENU:\n\t\t\tDoPopupMenu();\n\t\t\treturn 0L;\n\t\tcase WM_SYSKEYDOWN:\n\t\t\tif ((VK_MENU == wParam) || (VK_F10 == wParam))\n\t\t\t\treturn 0L;\n\t\t\tbreak;\n\t\tcase WM_SYSKEYUP:\n\t\t\tif ((VK_MENU == wParam) || (VK_F10 == wParam))\n\t\t\t{\n\t\t\t\tExitMenu();\n\t\t\t\treturn 0L;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase UWM_GETMENUTHEME:\n\t\t\t{\n\t\t\t\tMenuTheme& tm = GetMenuBarTheme();\n\t\t\t\treturn (LRESULT)&tm;\n\t\t\t}\n\t\tcase WM_WINDOWPOSCHANGED:\n\t\t\tOnWindowPosChanged();\n\t\t\tbreak;\n\t\tcase WM_WINDOWPOSCHANGING:\n\t\t\t// Bypass CToolBar::WndProcDefault for this message\n\t\t\treturn CWnd::WndProcDefault(uMsg, wParam, lParam);\n\n\t\t} // switch (uMsg)\n\n\t\treturn CToolBar::WndProcDefault(uMsg, wParam, lParam);\n\t} // LRESULT CMenuBar::WndProcDefault(...)\n\n\n\n\t///////////////////////////////////\n\t// Definitions for the CFrame class\n\t//\n\tinline CFrame::CFrame() : m_tsStatusText(_T(\"Ready\")), m_bShowIndicatorStatus(TRUE), m_bShowMenuStatus(TRUE),\n\t\t                m_bUseReBar(FALSE), m_bUseThemes(TRUE), m_bUpdateTheme(FALSE), m_bUseToolBar(TRUE), m_bUseCustomDraw(TRUE),\n\t\t\t\t\t\tm_bShowStatusBar(TRUE), m_bShowToolBar(TRUE), m_himlMenu(NULL), m_himlMenuDis(NULL),\n\t\t\t\t\t\tm_AboutDialog(IDW_ABOUT), m_pView(NULL), m_nMaxMRU(0), m_hOldFocus(0), m_nOldID(-1)\n\t{\n\t\tZeroMemory(&m_ThemeMenu, sizeof(m_ThemeMenu));\n\n\t\t// Do either InitCommonControls or InitCommonControlsEx\n\t\tLoadCommonControls();\n\n\t\t// By default, we use the rebar if we can\n\t\tif (GetComCtlVersion() >= 470)\n\t\t\tm_bUseReBar = TRUE;\n\n\t\tfor (int i = 0 ; i < 3 ; ++i)\n\t\t\tm_OldStatus[i] = _T('\\0');\n\t}\n\n\tinline CFrame::~CFrame()\n\t{\n\t\tif (m_himlMenu) ImageList_Destroy(m_himlMenu);\n\t\tif (m_himlMenuDis) ImageList_Destroy(m_himlMenuDis);\n\t}\n\n\tinline BOOL CFrame::AddMenuIcon(int nID_MenuItem, HICON hIcon, int cx /*= 16*/, int cy /*= 16*/)\n\t{\n\t\t// Get ImageList image size\n\t\tint cxOld = 0;\n\t\tint cyOld = 0;\n\t\tImageList_GetIconSize(m_himlMenu, &cxOld, &cyOld );\n\n\t\t// Create a new ImageList if required\n\t\tif ((cx != cxOld) || (cy != cyOld) || (NULL == m_himlMenu))\n\t\t{\n\t\t\tif (m_himlMenu) ImageList_Destroy(m_himlMenu);\n\t\t\tm_himlMenu = ImageList_Create(cx, cy, ILC_COLOR32 | ILC_MASK, 1, 0);\n\t\t\tm_vMenuIcons.clear();\n\t\t}\n\n        if (ImageList_AddIcon(m_himlMenu, hIcon) != -1)\n\t\t{\n\t\t\tm_vMenuIcons.push_back(nID_MenuItem);\n\n\t\t\t// Recreate the Disabled imagelist\n\t\t\tif (m_himlMenuDis) ImageList_Destroy(m_himlMenuDis);\n\t\t\tm_himlMenuDis = NULL;\n\t\t\tm_himlMenuDis = CreateDisabledImageList(m_himlMenu);\n\n\t\t\treturn TRUE;\n\t\t}\n\n\t\treturn FALSE;\n\t}\n\n\tinline UINT CFrame::AddMenuIcons(const std::vector<UINT>& MenuData, COLORREF crMask, UINT ToolBarID, UINT ToolBarDisabledID)\n\t// Adds the icons from a bitmap resouce to an internal ImageList for use with popup menu items.\n\t// Note:  If existing are a different size to the new ones, the old ones will be removed!\n\t//        The ToolBarDisabledID is ignored unless ToolBarID and ToolBarDisabledID bitmaps are the same size.\n\t{\n\t\t// Count the MenuData entries excluding seperators\n\t\tint iImages = 0;\n\t\tfor (UINT i = 0 ; i < MenuData.size(); ++i)\n\t\t{\n\t\t\tif (MenuData[i] != 0)\t// Don't count seperators\n\t\t\t{\n\t\t\t\t++iImages;\n\t\t\t}\n\t\t}\n\n\t\t// Load the button images from Resouce ID\n\t\tCBitmap Bitmap(ToolBarID);\n\n\t\tif ((0 == iImages) || (!Bitmap))\n\t\t\treturn (UINT)m_vMenuIcons.size();\t// No valid images, so nothing to do!\n\n\t\tBITMAP bm = Bitmap.GetBitmapData();\n\t\tint iImageWidth  = bm.bmWidth / iImages;\n\t\tint iImageHeight = bm.bmHeight;\n\n\t\t// Create the ImageList if required\n\t\tif (NULL == m_himlMenu)\n\t\t{\n\t\t\tm_himlMenu = ImageList_Create(iImageWidth, iImageHeight, ILC_COLOR32 | ILC_MASK, iImages, 0);\n\t\t\tm_vMenuIcons.clear();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tint Oldcx;\n\t\t\tint Oldcy;\n\n\t\t\tImageList_GetIconSize(m_himlMenu, &Oldcx, &Oldcy);\n\t\t\tif (iImageHeight != Oldcy)\n\t\t\t{\n\t\t\t\tTRACE(_T(\"Unable to add icons. The new icons are a different size to the old ones\\n\"));\n\t\t\t\treturn (UINT)m_vMenuIcons.size();\n\t\t\t}\n\t\t}\n\n\t\t// Add the resource IDs to the m_vMenuIcons vector\n\t\tfor (UINT j = 0 ; j < MenuData.size(); ++j)\n\t\t{\n\t\t\tif (MenuData[j] != 0)\n\t\t\t{\n\t\t\t\tm_vMenuIcons.push_back(MenuData[j]);\n\t\t\t}\n\t\t}\n\n\t\t// Add the images to the ImageList\n\t\tImageList_AddMasked(m_himlMenu, Bitmap, crMask);\n\n\t\t// Create the Disabled imagelist\n\t\tif (ToolBarDisabledID)\n\t\t{\n\t\t\tif (0 != m_himlMenuDis)\n\t\t\t\tm_himlMenuDis = ImageList_Create(iImageWidth, iImageHeight, ILC_COLOR32 | ILC_MASK, iImages, 0);\n\n\t\t\tCBitmap BitmapDisabled(ToolBarDisabledID);\n\t\t\tBITMAP bmDis = BitmapDisabled.GetBitmapData();\n\n\t\t\tint iImageWidthDis  = bmDis.bmWidth / iImages;\n\t\t\tint iImageHeightDis = bmDis.bmHeight;\n\n\t\t\t// Normal and Disabled icons must be the same size\n\t\t\tif ((iImageWidthDis == iImageWidth) && (iImageHeightDis == iImageHeight))\n\t\t\t{\n\t\t\t\tImageList_AddMasked(m_himlMenu, BitmapDisabled, crMask);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tImageList_Destroy(m_himlMenuDis);\n\t\t\t\tm_himlMenuDis = CreateDisabledImageList(m_himlMenu);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (m_himlMenuDis) ImageList_Destroy(m_himlMenuDis);\n\t\t\tm_himlMenuDis = CreateDisabledImageList(m_himlMenu);\n\t\t}\n\n\t\t// return the number of menu icons\n\t\treturn (UINT)m_vMenuIcons.size();\n\t}\n\n\tinline void CFrame::AddMenuBarBand()\n\t{\n\t\t// Adds a MenuBar to the rebar control\n\t\tREBARBANDINFO rbbi = {0};\n\t\tCSize sz = GetMenuBar().GetMaxSize();\n\n\t\t// Calculate the MenuBar height from the menu font\n\t\tCSize csMenuBar;\n\t\tCClientDC dcMenuBar(&GetMenuBar());\n\t\tdcMenuBar.SelectObject(GetMenuBar().GetFont());\n\t\tcsMenuBar = dcMenuBar.GetTextExtentPoint32(_T(\"\\tSomeText\"), lstrlen(_T(\"\\tSomeText\")));\n\t\tint MenuBar_Height = csMenuBar.cy + 6;\n\n\t\trbbi.fMask      = RBBIM_CHILDSIZE | RBBIM_STYLE | RBBIM_CHILD | RBBIM_SIZE | RBBIM_ID;\n\t\trbbi.cxMinChild = sz.cx;\n\t\trbbi.cx         = sz.cx;\n\t\trbbi.cyMinChild = MenuBar_Height;\n\t\trbbi.cyMaxChild = MenuBar_Height;\n\t\trbbi.fStyle     = RBBS_BREAK | RBBS_VARIABLEHEIGHT | RBBS_GRIPPERALWAYS ;\n\t\trbbi.hwndChild  = GetMenuBar();\n\t\trbbi.wID        = IDW_MENUBAR;\n\n\t\t// Note: rbbi.cbSize is set inside the InsertBand function\n\t\tGetReBar().InsertBand(-1, rbbi);\n\t\tSetMenuBarBandSize();\n\t\tGetReBar().SetMenuBar(GetMenuBar());\n\n\t\tif (GetReBar().GetReBarTheme().LockMenuBand)\n\t\t\tGetReBar().ShowGripper(GetReBar().GetBand(GetMenuBar()), FALSE);\n\t}\n\n\tinline void CFrame::AddMRUEntry(LPCTSTR szMRUEntry)\n\t{\n\t\t// Erase possible duplicate entries from vector\n\t\tRemoveMRUEntry(szMRUEntry);\n\n\t\t// Insert the entry at the beginning of the vector\n\t\tm_vMRUEntries.insert(m_vMRUEntries.begin(), szMRUEntry);\n\n\t\t// Delete excessive MRU entries\n\t\tif (m_vMRUEntries.size() > m_nMaxMRU)\n\t\t\tm_vMRUEntries.erase(m_vMRUEntries.begin() + m_nMaxMRU, m_vMRUEntries.end());\n\n\t\tUpdateMRUMenu();\n\t}\n\n\tinline void CFrame::AddToolBarBand(CToolBar& TB, DWORD dwStyle, UINT nID)\n\t{\n\t\t// Adds a ToolBar to the rebar control\n\n\t\t// Create the ToolBar Window\n\t\tTB.Create(&GetReBar());\n\n\t\t// Fill the REBARBAND structure\n\t\tREBARBANDINFO rbbi = {0};\n\t\tCSize sz = TB.GetMaxSize();\n\n\t\trbbi.fMask      = RBBIM_CHILDSIZE | RBBIM_STYLE |  RBBIM_CHILD | RBBIM_SIZE | RBBIM_ID;\n\t\trbbi.cyMinChild = sz.cy;\n\t\trbbi.cyMaxChild = sz.cy;\n\t\trbbi.cx         = sz.cx +2;\n\t\trbbi.cxMinChild = sz.cx +2;\n\n\t\trbbi.fStyle     = dwStyle;\n\t\trbbi.hwndChild  = TB;\n\t\trbbi.wID        = nID;\n\n\t\t// Note: rbbi.cbSize is set inside the InsertBand function\n\t\tGetReBar().InsertBand(-1, rbbi);\n\t}\n\n\tinline void CFrame::AddToolBarButton(UINT nID, BOOL bEnabled /* = TRUE*/, LPCTSTR szText)\n\t// Adds Resource IDs to toolbar buttons.\n\t// A resource ID of 0 is a separator\n\t{\n\t\tGetToolBar().AddButton(nID, bEnabled);\n\n\t\tif(0 != szText)\n\t\t\tGetToolBar().SetButtonText(nID, szText);\n\n\t\tif (!IsWindow()) TRACE(_T(\"Warning ... Resource IDs for toolbars should be added in SetupToolBar\\n\"));\n\t}\n\n\tinline void CFrame::AdjustFrameRect(RECT rcView) const\n\t// Adjust the size of the frame to accommodate the View window's dimensions\n\t{\n\t\t// Adjust for the view styles\n\t\tCRect rc = rcView;\n\t\tDWORD dwStyle = (DWORD)GetView()->GetWindowLongPtr(GWL_STYLE);\n\t\tDWORD dwExStyle = (DWORD)GetView()->GetWindowLongPtr(GWL_EXSTYLE);\n\t\tAdjustWindowRectEx(&rc, dwStyle, FALSE, dwExStyle);\n\n\t\t// Calculate the new frame height\n\t\tCRect rcFrameBefore = GetWindowRect();\n\t\tCRect rcViewBefore = GetViewRect();\n\t\tint Height = rc.Height() + rcFrameBefore.Height() - rcViewBefore.Height();\n\n\t\t// Adjust for the frame styles\n\t\tdwStyle = (DWORD)GetWindowLongPtr(GWL_STYLE);\n\t\tdwExStyle = (DWORD)GetWindowLongPtr(GWL_EXSTYLE);\n\t\tAdjustWindowRectEx(&rc, dwStyle, FALSE, dwExStyle);\n\n\t\t// Calculate final rect size, and reposition frame\n\t\tSetWindowPos(NULL, 0, 0, rc.Width(), Height, SWP_NOMOVE);\n\t}\n\n\tinline void CFrame::CreateToolBar()\n\t{\n\t\tif (IsReBarSupported() && m_bUseReBar)\n\t\t\tAddToolBarBand(GetToolBar(), RBBS_BREAK, IDW_TOOLBAR);\t// Create the toolbar inside rebar\n\t\telse\n\t\t\tGetToolBar().Create(this);\t// Create the toolbar without a rebar\n\n\t\tSetupToolBar();\n\n\t\tif (IsReBarSupported() && m_bUseReBar)\n\t\t{\n\t\t\tif (GetReBar().GetReBarTheme().UseThemes && GetReBar().GetReBarTheme().LockMenuBand)\n\t\t\t{\n\t\t\t\t// Hide gripper for single toolbar\n\t\t\t\tif (GetReBar().GetBandCount() <= 2)\n\t\t\t\t\tGetReBar().ShowGripper(GetReBar().GetBand(GetToolBar()), FALSE);\n\t\t\t}\n\t\t}\n\n\t\tif (GetToolBar().GetToolBarData().size() > 0)\n\t\t{\n\t\t\t// Set the toolbar images (if not already set in SetupToolBar)\n\t\t\t// A mask of 192,192,192 is compatible with AddBitmap (for Win95)\n\t\t\tif (!GetToolBar().SendMessage(TB_GETIMAGELIST,  0L, 0L))\n\t\t\t\tSetToolBarImages(RGB(192,192,192), IDW_MAIN, 0, 0);\n\n\t\t\t// Add the icons for popup menu\n\t\t\tAddMenuIcons(GetToolBar().GetToolBarData(), RGB(192, 192, 192), IDW_MAIN, 0);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tTRACE(_T(\"Warning ... No resource IDs assigned to the toolbar\\n\"));\n\t\t}\n\t}\n\n\tinline void CFrame::DrawCheckmark(LPDRAWITEMSTRUCT pdis, CDC& DrawDC)\n\t// Draws the checkmark or radiocheck transparently\n\t{\n\t\tCRect rc = pdis->rcItem;\n\t\tUINT fType = ((ItemData*)pdis->itemData)->fType;\n\t\tMenuTheme tm = GetMenuTheme();\n\t\tCRect rcBk;\n\n\t\t// Draw the checkmark's background rectangle first\n\t\tint Iconx = 16, Icony = 16;\n\t\tif (m_himlMenu) ImageList_GetIconSize(m_himlMenu, &Iconx, &Icony);\n\t\tint BarWidth = Iconx + 8;\n\t\tint left = (BarWidth - Iconx)/2;\n\t\tint top = rc.top + (rc.Height() - Icony)/2;\n\t\trcBk.SetRect(left, top, left + Iconx, top + Icony);\n\n\t\tif (tm.UseThemes)\n\t\t{\n\t\t\tDrawDC.CreateSolidBrush(tm.clrHot2);\n\t\t\tDrawDC.CreatePen(PS_SOLID, 1, tm.clrOutline);\n\n\t\t\t// Draw the checkmark's background rectangle\n\t\t\tDrawDC.Rectangle(rcBk.left, rcBk.top, rcBk.right, rcBk.bottom);\n\t\t}\n\n\t\tCMemDC MemDC(FromHandle(pdis->hDC));\n\t\tint cxCheck = ::GetSystemMetrics(SM_CXMENUCHECK);\n\t\tint cyCheck = ::GetSystemMetrics(SM_CYMENUCHECK);\n\t\tMemDC.CreateBitmap(cxCheck, cyCheck, 1, 1, NULL);\n\t\tCRect rcCheck( 0, 0, cxCheck, cyCheck);\n\n\t\t// Copy the check mark bitmap to hdcMem\n\t\tif (MFT_RADIOCHECK == fType)\n\t\t\tMemDC.DrawFrameControl(rcCheck, DFC_MENU, DFCS_MENUBULLET);\n\t\telse\n\t\t\tMemDC.DrawFrameControl(rcCheck, DFC_MENU, DFCS_MENUCHECK);\n\n\t\tint xoffset = (rcBk.Width() - rcCheck.Width()-1)/2;\n\t\tint yoffset = (rcBk.Height() - rcCheck.Height()-1)/2;\n\n\t\tif (tm.UseThemes)\n\t\t\txoffset += 2;\n\n\t\t// Draw a white or black check mark as required\n\t\t// Unfortunately MaskBlt isn't supported on Win95, 98 or ME, so we do it the hard way\n\t\tCMemDC MaskDC(FromHandle(pdis->hDC));\n\t\tMaskDC.CreateCompatibleBitmap(FromHandle(pdis->hDC), cxCheck, cyCheck);\n\t\tMaskDC.BitBlt(0, 0, cxCheck, cyCheck, &MaskDC, 0, 0, WHITENESS);\n\t\t\n\t\tif ((pdis->itemState & ODS_SELECTED) && (!tm.UseThemes))\n\t\t{\n\t\t\t// Draw a white checkmark\n\t\t\tMemDC.BitBlt(0, 0, cxCheck, cyCheck, &MemDC, 0, 0, DSTINVERT);\n\t\t\tMaskDC.BitBlt(0, 0, cxCheck, cyCheck, &MemDC, 0, 0, SRCAND);\n\t\t\tDrawDC.BitBlt(rcBk.left + xoffset, rcBk.top + yoffset, cxCheck, cyCheck, &MaskDC, 0, 0, SRCPAINT);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Draw a black checkmark\n\t\t\tint BullitOffset = ((MFT_RADIOCHECK == fType) && tm.UseThemes)? 1 : 0;\n\t\t\tMaskDC.BitBlt( -BullitOffset, BullitOffset, cxCheck, cyCheck, &MemDC, 0, 0, SRCAND);\n\t\t\tDrawDC.BitBlt(rcBk.left + xoffset, rcBk.top + yoffset, cxCheck, cyCheck, &MaskDC, 0, 0, SRCAND);\n\t\t}\n\t}\n\n\tinline void CFrame::DrawMenuIcon(LPDRAWITEMSTRUCT pdis, CDC& DrawDC, BOOL bDisabled)\n\t{\n\t\tif (!m_himlMenu)\n\t\t\treturn;\n\t\t// Get icon size\n\t\tint Iconx;\n\t\tint Icony;\n\t\tImageList_GetIconSize(m_himlMenu, &Iconx, &Icony);\n\t\tint BarWidth = Iconx + 8;\n\n\t\t// get the drawing rectangle\n\t\tCRect rc = pdis->rcItem;\n\t\tint left = (BarWidth - Iconx)/2;\n\t\tint top = rc.top + (rc.Height() - Icony)/2;\n\t\trc.SetRect(left, top, left + Iconx, top + Icony);\n\n\t\t// get the icon's location in the imagelist\n\t\tint iImage = -1;\n\t\tfor (int i = 0 ; i < (int)m_vMenuIcons.size(); ++i)\n\t\t{\n\t\t\tif (pdis->itemID == m_vMenuIcons[i])\n\t\t\t\tiImage = i;\n\t\t}\n\n\t\t// draw the image\n\t\tif (iImage >= 0 )\n\t\t{\n\t\t\tif ((bDisabled) && (m_himlMenuDis))\n\t\t\t\tImageList_Draw(m_himlMenuDis, iImage, DrawDC, rc.left, rc.top, ILD_TRANSPARENT);\n\t\t\telse\n\t\t\t\tImageList_Draw(m_himlMenu, iImage, DrawDC, rc.left, rc.top, ILD_TRANSPARENT);\n\t\t}\n\t}\n\n\tinline void CFrame::DrawMenuText(CDC& DrawDC, LPCTSTR ItemText, CRect& rc, COLORREF colorText)\n\t{\n\t\t// find the position of tab character\n\t\tint nTab = -1;\n\t\tfor(int i = 0; i < lstrlen(ItemText); ++i)\n\t\t{\n\t\t\tif(_T('\\t') == ItemText[i])\n\t\t\t{\n\t\t\t\tnTab = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Draw the item text\n\t\tDrawDC.SetTextColor(colorText);\n\t\tDrawDC.DrawText(ItemText, nTab, rc, DT_SINGLELINE | DT_LEFT | DT_VCENTER);\n\n\t\t// Draw text after tab, right aligned\n\t\tif(nTab != -1)\n\t\t\tDrawDC.DrawText( &ItemText[nTab + 1], -1, rc, DT_SINGLELINE | DT_RIGHT | DT_VCENTER);\n\t}\n\n\tinline int CFrame::GetMenuItemPos(HMENU hMenu, LPCTSTR szItem)\n\t// Returns the position of the menu item, given it's name\n\t{\n\t\tint nMenuItemCount = GetMenuItemCount(hMenu);\n\t\tMENUITEMINFO mii = {0};\n\t\tmii.cbSize = GetSizeofMenuItemInfo();\n\n\t\tfor (int nItem = 0 ; nItem < nMenuItemCount; ++nItem)\n\t\t{\n\t\t\tstd::vector<TCHAR> vTChar( MAX_MENU_STRING+1, _T('\\0') );\n\t\t\tTCHAR* szStr = &vTChar[0];\n\n\t\t\tstd::vector<TCHAR> vStripped( MAX_MENU_STRING+1, _T('\\0') );\n\t\t\tTCHAR* szStripped = &vStripped[0];\n\n\t\t\tmii.fMask      = MIIM_TYPE;\n\t\t\tmii.fType      = MFT_STRING;\n\t\t\tmii.dwTypeData = szStr;\n\t\t\tmii.cch        = MAX_MENU_STRING;\n\n\t\t\t// Fill the contents of szStr from the menu item\n\t\t\tif (::GetMenuItemInfo(hMenu, nItem, TRUE, &mii) && (lstrlen(szStr) <= MAX_MENU_STRING))\n\t\t\t{\n\t\t\t\t// Strip out any & characters\n\t\t\t\tint j = 0;\n\t\t\t\tfor (int i = 0; i < lstrlen(szStr); ++i)\n\t\t\t\t{\n\t\t\t\t\tif (szStr[i] != _T('&'))\n\t\t\t\t\t\tszStripped[j++] = szStr[i];\n\t\t\t\t}\n\t\t\t\tszStripped[j] = _T('\\0');\t// Append null tchar\n\n\t\t\t\t// Compare the strings\n\t\t\t\tif (0 == lstrcmp(szStripped, szItem))\n\t\t\t\t\treturn nItem;\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t}\n\n\tinline tString CFrame::GetMRUEntry(UINT nIndex)\n\t{\n\t\ttString tsPathName;\n\t\tif (nIndex < m_vMRUEntries.size())\n\t\t{\n\t\t\ttsPathName = m_vMRUEntries[nIndex];\n\n\t\t\t// Now put the selected entry at Index 0\n\t\t\tAddMRUEntry(tsPathName.c_str());\n\t\t}\n\t\treturn tsPathName;\n\t}\n\n\tinline CRect CFrame::GetViewRect() const\n\t{\n\t\t// Get the frame's client area\n\t\tCRect rcFrame = GetClientRect();\n\n\t\t// Get the statusbar's window area\n\t\tCRect rcStatus;\n\t\tif (GetStatusBar().IsWindowVisible() || !IsWindowVisible())\n\t\t\trcStatus = GetStatusBar().GetWindowRect();\n\n\t\t// Get the top rebar or toolbar's window area\n\t\tCRect rcTop;\n\t\tif (IsReBarSupported() && m_bUseReBar)\n\t\t\trcTop = GetReBar().GetWindowRect();\n\t\telse\n\t\t\tif (GetToolBar().IsWindow() && GetToolBar().IsWindowVisible())\n\t\t\t\trcTop = GetToolBar().GetWindowRect();\n\n\t\t// Return client size less the rebar and status windows\n\t\tint top = rcFrame.top + rcTop.Height();\n\t\tint left = rcFrame.left;\n\t\tint right = rcFrame.right;\n\t\tint bottom = rcFrame.Height() - (rcStatus.Height());\n\t\tif ((bottom <= top) ||( right <= left))\n\t\t\ttop = left = right = bottom = 0;\n\n\t\tCRect rcView(left, top, right, bottom);\n\t\treturn rcView;\n\t}\n\n\tinline void CFrame::LoadCommonControls()\n\t{\n\t\tHMODULE hComCtl;\n\n\t\ttry\n\t\t{\n\t\t\t// Load the Common Controls DLL\n\t\t\thComCtl = ::LoadLibrary(_T(\"COMCTL32.DLL\"));\n\t\t\tif (!hComCtl)\n\t\t\t\tthrow CWinException(_T(\"Failed to load COMCTL32.DLL\"));\n\n\t\t\tif (GetComCtlVersion() > 470)\n\t\t\t{\n\t\t\t\t// Declare a pointer to the InItCommonControlsEx function\n\t\t\t\ttypedef BOOL WINAPI INIT_EX(INITCOMMONCONTROLSEX*);\n\t\t\t\tINIT_EX* pfnInit = (INIT_EX*)::GetProcAddress(hComCtl, \"InitCommonControlsEx\");\n\n\t\t\t\t// Load the full set of common controls\n\t\t\t\tINITCOMMONCONTROLSEX InitStruct = {0};\n\t\t\t\tInitStruct.dwSize = sizeof(INITCOMMONCONTROLSEX);\n\t\t\t\tInitStruct.dwICC = ICC_COOL_CLASSES|ICC_DATE_CLASSES|ICC_INTERNET_CLASSES|ICC_NATIVEFNTCTL_CLASS|\n\t\t\t\t\t\t\tICC_PAGESCROLLER_CLASS|ICC_USEREX_CLASSES|ICC_WIN95_CLASSES;\n\n\t\t\t\t// Call InitCommonControlsEx\n\t\t\t\tif(!((*pfnInit)(&InitStruct)))\n\t\t\t\t\tthrow CWinException(_T(\"InitCommonControlsEx failed\"));\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t::InitCommonControls();\n\t\t\t}\n\n\t\t\t::FreeLibrary(hComCtl);\n\t\t}\n\n\t\tcatch (const CWinException &e)\n\t\t{\n\t\t\te.what();\n\t\t\tif (hComCtl)\n\t\t\t\t::FreeLibrary(hComCtl);\n\n\t\t\tthrow;\n\t\t}\n\t}\n\n\tinline BOOL CFrame::LoadRegistryMRUSettings(UINT nMaxMRU /*= 0*/)\n\t{\n\t\t// Load the MRU list from the registry\n\n\t\tassert(!m_tsKeyName.empty()); // KeyName must be set before calling LoadRegistryMRUSettings\n\t\tHKEY hKey = NULL;\n\t\tBOOL bRet = FALSE;\n\n\t\ttry\n\t\t{\n\t\t\tm_nMaxMRU = MIN(nMaxMRU, 16);\n\t\t\tstd::vector<tString> vMRUEntries;\n\t\t\ttString tsKey = _T(\"Software\\\\\") + m_tsKeyName + _T(\"\\\\Recent Files\");\n\n\t\t\tif (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CURRENT_USER, tsKey.c_str(), 0, KEY_READ, &hKey))\n\t\t\t{\n\t\t\t\tfor (UINT i = 0; i < m_nMaxMRU; ++i)\n\t\t\t\t{\n\t\t\t\t\tDWORD dwType = REG_SZ;\n\t\t\t\t\tDWORD dwBufferSize = 0;\n\t\t\t\t\tTCHAR szSubKey[10] = _T(\"\");\n\t\t\t\t\twsprintf(szSubKey, _T(\"File %d\\0\"), i+1);\n\n\t\t\t\t\tif (ERROR_SUCCESS != RegQueryValueEx(hKey, szSubKey, NULL, &dwType, NULL, &dwBufferSize))\n\t\t\t\t\t\tthrow CWinException(_T(\"RegQueryValueEx failed\\n\"));\n\n\t\t\t\t\tstd::vector<TCHAR> PathName( dwBufferSize, _T('\\0') );\n\t\t\t\t\tTCHAR* pTCharArray = &PathName[0];\n\n\t\t\t\t\t// load the entry from the registry\n\t\t\t\t\tif (ERROR_SUCCESS != RegQueryValueEx(hKey, szSubKey, NULL, &dwType, (LPBYTE)pTCharArray, &dwBufferSize))\n\t\t\t\t\t\tthrow CWinException(_T(\"RegQueryValueEx failed\\n\"));\n\n\t\t\t\t\tif ( lstrlen( pTCharArray ) )\n\t\t\t\t\t\tvMRUEntries.push_back( pTCharArray );\n\t\t\t\t}\n\n\t\t\t\t// successfully loaded all MRU values, so store them\n\t\t\t\tm_vMRUEntries = vMRUEntries;\n\t\t\t\tRegCloseKey(hKey);\n\t\t\t\tbRet = TRUE;\n\t\t\t}\n\t\t}\n\n\t\tcatch(const CWinException& e)\n\t\t{\n\t\t\tTRACE(_T(\"Failed to load MRU values from registry\\n\"));\n\t\t\te.what();\n\n\t\t\tif (hKey)\n\t\t\t\tRegCloseKey(hKey);\n\t\t}\n\n\t\treturn bRet;\n\t}\n\n\tinline BOOL CFrame::LoadRegistrySettings(LPCTSTR szKeyName)\n\t{\n\t\tassert (NULL != szKeyName);\n\t\tm_tsKeyName = szKeyName;\n\n\t\ttString tsKey = _T(\"Software\\\\\") + m_tsKeyName + _T(\"\\\\Frame Settings\");\n\t\tHKEY hKey = 0;\n\t\tBOOL bRet = FALSE;\n\n\t\ttry\n\t\t{\n\t\t\tif (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CURRENT_USER, tsKey.c_str(), 0, KEY_READ, &hKey))\n\t\t\t{\n\t\t\t\tDWORD dwType = REG_BINARY;\n\t\t\t\tDWORD BufferSize = sizeof(DWORD);\n\t\t\t\tDWORD dwTop, dwLeft, dwWidth, dwHeight, dwStatusBar, dwToolBar;\n\t\t\t\tif (ERROR_SUCCESS != RegQueryValueEx(hKey, _T(\"Top\"), NULL, &dwType, (LPBYTE)&dwTop, &BufferSize))\n\t\t\t\t\tthrow CWinException(_T(\"RegQueryValueEx Failed\"));\n\t\t\t\tif (ERROR_SUCCESS != RegQueryValueEx(hKey, _T(\"Left\"), NULL, &dwType, (LPBYTE)&dwLeft, &BufferSize))\n\t\t\t\t\tthrow CWinException(_T(\"RegQueryValueEx Failed\"));\n\t\t\t\tif (ERROR_SUCCESS != RegQueryValueEx(hKey, _T(\"Width\"), NULL, &dwType, (LPBYTE)&dwWidth, &BufferSize))\n\t\t\t\t\tthrow CWinException(_T(\"RegQueryValueEx Failed\"));\n\t\t\t\tif (ERROR_SUCCESS != RegQueryValueEx(hKey, _T(\"Height\"), NULL, &dwType, (LPBYTE)&dwHeight, &BufferSize))\n\t\t\t\t\tthrow CWinException(_T(\"RegQueryValueEx Failed\"));\n\t\t\t\tif (ERROR_SUCCESS != RegQueryValueEx(hKey, _T(\"StatusBar\"), NULL, &dwType, (LPBYTE)&dwStatusBar, &BufferSize))\n\t\t\t\t\tthrow CWinException(_T(\"RegQueryValueEx Failed\"));\n\t\t\t\tif (ERROR_SUCCESS != RegQueryValueEx(hKey, _T(\"ToolBar\"), NULL, &dwType, (LPBYTE)&dwToolBar, &BufferSize))\n\t\t\t\t\tthrow CWinException(_T(\"RegQueryValueEx Failed\"));\n\n\t\t\t\tm_rcPosition.top = dwTop;\n\t\t\t\tm_rcPosition.left = dwLeft;\n\t\t\t\tm_rcPosition.bottom = m_rcPosition.top + dwHeight;\n\t\t\t\tm_rcPosition.right = m_rcPosition.left + dwWidth;\n\t\t\t\tm_bShowStatusBar = dwStatusBar & 1;\n\t\t\t\tm_bShowToolBar = dwToolBar & 1;\n\n\t\t\t\tRegCloseKey(hKey);\n\t\t\t\tbRet = TRUE;\n\t\t\t}\n\t\t}\n\n\t\tcatch (const CWinException& e)\n\t\t{\n\t\t\tTRACE(_T(\"Failed to load values from registry, using defaults!\\n\"));\n\t\t\te.what();\n\n\t\t\tif (hKey)\n\t\t\t\tRegCloseKey(hKey);\n\t\t}\n\n\t\treturn bRet;\n\t}\n\n\tinline void CFrame::OnActivate(WPARAM wParam, LPARAM lParam)\n\t{\n\t\t// Do default processing first\n\t\tDefWindowProc(WM_ACTIVATE, wParam, lParam);\n\n\t\tif (LOWORD(wParam) == WA_INACTIVE)\n\t\t{\n\t\t\t// Save the hwnd of the window which currently has focus\n\t\t\t// (this must be CFrame window itself or a child window\n\t\t\tif (!IsIconic()) m_hOldFocus = ::GetFocus();\n\n\t\t\t// Send a notification to the view window\n\t\t\tint idCtrl = ::GetDlgCtrlID(m_hOldFocus);\n\t\t\tNMHDR nhdr={0};\n\t\t\tnhdr.hwndFrom = m_hOldFocus;\n\t\t\tnhdr.idFrom = idCtrl;\n\t\t\tnhdr.code = UWM_FRAMELOSTFOCUS;\n\t\t\tif (GetView()->IsWindow())\n\t\t\t\tGetView()->SendMessage(WM_NOTIFY, (WPARAM)idCtrl, (LPARAM)&nhdr);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Now set the focus to the appropriate child window\n\t\t\tif (m_hOldFocus) ::SetFocus(m_hOldFocus);\n\n\t\t\t// Send a notification to the view window\n\t\t\tint idCtrl = ::GetDlgCtrlID(m_hOldFocus);\n\t\t\tNMHDR nhdr={0};\n\t\t\tnhdr.hwndFrom = m_hOldFocus;\n\t\t\tnhdr.idFrom = idCtrl;\n\t\t\tnhdr.code = UWM_FRAMEGOTFOCUS;\n\t\t\tif (GetView()->IsWindow())\n\t\t\t\tGetView()->SendMessage(WM_NOTIFY, (WPARAM)idCtrl, (LPARAM)&nhdr);\n\t\t}\n\t}\n\n\tinline void CFrame::OnClose()\n\t{\n\t\t// Called in response to a WM_CLOSE message for the frame.\n\t\tShowWindow(SW_HIDE);\n\t\tSaveRegistrySettings();\n\n\t\tGetMenuBar().Destroy();\n\t\tGetToolBar().Destroy();\n\t\tGetReBar().Destroy();\n\t\tGetStatusBar().Destroy();\n\t\tGetView()->Destroy();\n\t}\n\n\tinline void CFrame::OnCreate()\n\t{\n\t\t// This is called when the frame window is being created.\n\t\t// Override this in CMainFrame if you wish to modify what happens here\n\n\t\t// Set the icon\n\t\tSetIconLarge(IDW_MAIN);\n\t\tSetIconSmall(IDW_MAIN);\n\n\t\t// Set the keyboard accelerators\n\t\tm_hAccel = LoadAccelerators(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(IDW_MAIN));\n\t\tGetApp()->SetAccelerators(m_hAccel, this);\n\n\t\t// Set the Caption\n\t\tSetWindowText(LoadString(IDW_MAIN));\n\n\t\t// Set the theme for the frame elements\n\t\tSetTheme();\n\n\t\t// Create the rebar and menubar\n\t\tif (IsReBarSupported() && m_bUseReBar)\n\t\t{\n\t\t\t// Create the rebar\n\t\t\tGetReBar().Create(this);\n\n\t\t\t// Create the menu inside rebar\n\t\t\tGetMenuBar().Create(&GetReBar());\n\t\t\tAddMenuBarBand();\n\t\t}\n\n\t\t// Setup the menu\n\t\tSetFrameMenu(IDW_MAIN);\n\t\tUpdateMRUMenu();\n\n\t\t// Create the ToolBar\n\t\tif (m_bUseToolBar)\n\t\t{\n\t\t\tCreateToolBar();\n\t\t\tShowToolBar(m_bShowToolBar);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t::CheckMenuItem(GetFrameMenu(), IDW_VIEW_TOOLBAR, MF_UNCHECKED);\n\t\t\t::EnableMenuItem(GetFrameMenu(), IDW_VIEW_TOOLBAR, MF_GRAYED);\n\t\t}\n\n\t\t// Create the status bar\n\t\tGetStatusBar().Create(this);\n\t\tShowStatusBar(m_bShowStatusBar);\n\n\t\t// Create the view window\n\t\tassert(GetView());\t\t\t// Use SetView in CMainFrame's constructor to set the view window\n\t\tGetView()->Create(this);\n\n\t\t// Disable XP themes for the menubar\n\t\tif ( m_bUseThemes || (GetWinVersion() < 2600)  )\t// themes or WinVersion < Vista\n\t\t\tGetMenuBar().SetWindowTheme(L\" \", L\" \");\n\n\t\t// Start timer for Status updates\n\t\tif (m_bShowIndicatorStatus || m_bShowMenuStatus)\n\t\t\tSetTimer(ID_STATUS_TIMER, 200, NULL);\n\n\t\t// Reposition the child windows\n\t\tRecalcLayout();\n\t}\n\n\tinline void CFrame::OnDestroy()\n\t{\n\t\tSetMenu(NULL);\n\t\tKillTimer(ID_STATUS_TIMER);\n\t\t::PostQuitMessage(0);\t// Terminates the application\n\t}\n\n\tinline LRESULT CFrame::OnDrawItem(WPARAM wParam, LPARAM lParam)\n\t// OwnerDraw is used to render the popup menu items\n\t{\n\t\tLPDRAWITEMSTRUCT pdis = (LPDRAWITEMSTRUCT) lParam;\n\t\tif (pdis->CtlType != ODT_MENU)\n\t\t\treturn CWnd::WndProcDefault(WM_DRAWITEM, wParam, lParam);\n\n\t\tCRect rc = pdis->rcItem;\n\t\tItemData* pmd = (ItemData*)pdis->itemData;\n\t\tCDC* pDrawDC = FromHandle(pdis->hDC);\n\t\tMenuTheme tm = GetMenuTheme();\n\n\t\tint Iconx = 16;\n\t\tint Icony = 16;\n\t\tif (m_himlMenu)\tImageList_GetIconSize(m_himlMenu, &Iconx, &Icony);\n\t\tint BarWidth = tm.UseThemes? Iconx + 8 : 0;\n\n\t\t// Draw the side bar\n\t\tif (tm.UseThemes)\n\t\t{\n\t\t\tCRect rcBar = rc;\n\t\t\trcBar.right = BarWidth;\n\t\t\tpDrawDC->GradientFill(tm.clrPressed1, tm.clrPressed2, rcBar, TRUE);\n\t\t}\n\n\t\tif (pmd->fType & MFT_SEPARATOR)\n\t\t{\n\t\t\t// draw separator\n\t\t\tCRect rcSep = rc;\n\t\t\trcSep.left = BarWidth;\n\t\t\tif (tm.UseThemes)\n\t\t\t\tpDrawDC->SolidFill(RGB(255,255,255), rcSep);\n\t\t\telse\n\t\t\t\tpDrawDC->SolidFill(GetSysColor(COLOR_MENU), rcSep);\n\t\t\trcSep.top += (rc.bottom - rc.top)/2;\n\t\t\trcSep.left = BarWidth + 2;\n\t\t\tpDrawDC->DrawEdge(rcSep,  EDGE_ETCHED, BF_TOP);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// draw menu item\n\t\t\tBOOL bDisabled = pdis->itemState & ODS_GRAYED;\n\t\t\tBOOL bSelected = pdis->itemState & ODS_SELECTED;\n\t\t\tBOOL bChecked  = pdis->itemState & ODS_CHECKED;\n\t\t\tCRect rcDraw = rc;\n\n\t\t\tif ((bSelected) && (!bDisabled))\n\t\t\t{\n\t\t\t\t// draw selected item background\n\t\t\t\tif (tm.UseThemes)\n\t\t\t\t{\n\t\t\t\t\tpDrawDC->CreateSolidBrush(tm.clrHot1);\n\t\t\t\t\tpDrawDC->CreatePen(PS_SOLID, 1, tm.clrOutline);\n\t\t\t\t\tpDrawDC->Rectangle(rcDraw.left, rcDraw.top, rcDraw.right, rcDraw.bottom);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tpDrawDC->SolidFill(GetSysColor(COLOR_HIGHLIGHT), rcDraw);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// draw non-selected item background\n\t\t\t\trcDraw.left = BarWidth;\n\t\t\t\tif (tm.UseThemes)\n\t\t\t\t\tpDrawDC->SolidFill(RGB(255,255,255), rcDraw);\n\t\t\t\telse\n\t\t\t\t\tpDrawDC->SolidFill(GetSysColor(COLOR_MENU), rcDraw);\n\t\t\t}\n\n\t\t\tif (bChecked)\n\t\t\t\tDrawCheckmark(pdis, *pDrawDC);\n\t\t\telse\n\t\t\t\tDrawMenuIcon(pdis, *pDrawDC, bDisabled);\n\n\t\t\t// Calculate the text rect size\n\t\t\trc.left  = rc.bottom - rc.top + 2;\n\t\t\tif (_tcschr(pmd->GetItemText(), _T('\\t')))\n\t\t\t\trc.right -= POST_TEXT_GAP;\t// Add POST_TEXT_GAP if the text includes a tab\n\n\t\t\t// Draw the text\n\t\t\tint iMode = pDrawDC->SetBkMode(TRANSPARENT);\n\t\t\tCOLORREF colorText;\n\t\t\tif (tm.UseThemes)\n\t\t\t{\n\t\t\t\trc.left += 8;\n\t\t\t\tcolorText = GetSysColor(bDisabled ?  COLOR_GRAYTEXT : COLOR_MENUTEXT);\n\t\t\t}\n\t\t\telse\n\t\t\t\tcolorText = GetSysColor(bDisabled ?  COLOR_GRAYTEXT : bSelected ? COLOR_HIGHLIGHTTEXT : COLOR_MENUTEXT);\n\n\t\t\tDrawMenuText(*pDrawDC, pmd->GetItemText(), rc, colorText);\n\t\t\tpDrawDC->SetBkMode(iMode); \n\t\t}\n\n\t\tpDrawDC->Detach();\t// Optional, deletes GDI objects sooner\n\t\treturn TRUE;\n\t}\n\n\tinline void CFrame::OnExitMenuLoop()\n\t{\n\t\tif (m_bUseCustomDraw)\n\t\t{\n\t\t\tfor (UINT nItem = 0; nItem < m_vMenuItemData.size(); ++nItem)\n\t\t\t{\n\t\t\t\t// Undo OwnerDraw and put the text back\n\t\t\t\tMENUITEMINFO mii = {0};\n\t\t\t\tmii.cbSize = GetSizeofMenuItemInfo();\n\n\t\t\t\tmii.fMask = MIIM_TYPE | MIIM_DATA;\n\t\t\t\tmii.fType = m_vMenuItemData[nItem]->fType;\n\t\t\t\tmii.dwTypeData = m_vMenuItemData[nItem]->GetItemText();\n\t\t\t\tmii.cch = lstrlen(m_vMenuItemData[nItem]->GetItemText());\n\t\t\t\tmii.dwItemData = 0;\n\t\t\t\t::SetMenuItemInfo(m_vMenuItemData[nItem]->hMenu, m_vMenuItemData[nItem]->nPos, TRUE, &mii);\n\t\t\t}\n\n\t\t\tm_vMenuItemData.clear();\n\t\t}\n\t}\n\n\tinline void CFrame::OnHelp()\n\t{\n\t\t// Ensure only one dialog displayed even for multiple hits of the F1 button\n\t\tif (!m_AboutDialog.IsWindow())\n\t\t{\n\t\t\t// Store the window handle that currently has keyboard focus\n\t\t\tHWND hPrevFocus = ::GetFocus();\n\t\t\tif (hPrevFocus == GetMenuBar())\n\t\t\t\thPrevFocus = m_hWnd;\n\n\t\t\tm_AboutDialog.SetDlgParent(this);\n\t\t\tm_AboutDialog.DoModal();\n\n\t\t\t::SetFocus(hPrevFocus);\n\t\t}\n\t}\n\n\tinline void CFrame::OnInitMenuPopup(WPARAM wParam, LPARAM lParam)\n\t{\n\t\t// The system menu shouldn't be owner drawn\n\t\tif (HIWORD(lParam)) return;\n\n\t\tif (m_bUseCustomDraw)\n\t\t{\n\t\t\tCMenu* pMenu = FromHandle((HMENU)wParam);\n\n\t\t\tfor (UINT i = 0; i < pMenu->GetMenuItemCount(); ++i)\n\t\t\t{\n\t\t\t\tMENUITEMINFO mii = {0};\n\t\t\t\tmii.cbSize = GetSizeofMenuItemInfo();\n\n\t\t\t\tTCHAR szMenuItem[MAX_MENU_STRING] = _T(\"\");\n\n\t\t\t\t// Use old fashioned MIIM_TYPE instead of MIIM_FTYPE for MS VC6 compatibility\n\t\t\t\tmii.fMask  = MIIM_TYPE | MIIM_DATA | MIIM_SUBMENU;\n\t\t\t\tmii.dwTypeData = szMenuItem;\n\t\t\t\tmii.cch = MAX_MENU_STRING -1;\n\n\t\t\t\t// Send message for menu updates\n\t\t\t\tUINT menuItem = pMenu->GetMenuItemID(i);\n\t\t\t\tSendMessage(UWM_UPDATE_COMMAND, (WPARAM)menuItem, 0);\n\n\t\t\t\t// Specify owner-draw for the menu item type\n\t\t\t\tif (pMenu->GetMenuItemInfo(i, &mii, TRUE))\n\t\t\t\t{\n\t\t\t\t\tif (0 == mii.dwItemData)\n\t\t\t\t\t{\n\t\t\t\t\t\tItemData* pItem = new ItemData;\t\t// deleted in OnExitMenuLoop\n\t\t\t\t\t\tpItem->hMenu = *pMenu;\n\t\t\t\t\t\tpItem->nPos = i;\n\t\t\t\t\t\tpItem->fType = mii.fType;\n\t\t\t\t\t\tpItem->hSubMenu = mii.hSubMenu;\n\t\t\t\t\t\tmii.fType |= MFT_OWNERDRAW;\n\t\t\t\t\t\tlstrcpyn(pItem->GetItemText(), szMenuItem, MAX_MENU_STRING);\n\t\t\t\t\t\tmii.dwItemData = (DWORD_PTR)pItem;\n\n\t\t\t\t\t\tm_vMenuItemData.push_back(ItemDataPtr(pItem));\t\t// Store pItem in m_vMenuItemData\n\t\t\t\t\t\tpMenu->SetMenuItemInfo(i, &mii, TRUE); // Store pItem in mii\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tinline LRESULT CFrame::OnMeasureItem(WPARAM wParam, LPARAM lParam)\n\t// Called before the Popup menu is displayed, so that the MEASUREITEMSTRUCT\n\t//  values can be assigned with the menu item's dimensions.\n\t{\n\t\tLPMEASUREITEMSTRUCT pmis = (LPMEASUREITEMSTRUCT) lParam;\n\t\tif (pmis->CtlType != ODT_MENU)\n\t\t\treturn CWnd::WndProcDefault(WM_MEASUREITEM, wParam, lParam);\n\n\t\tItemData* pmd = (ItemData *) pmis->itemData;\n\t\tassert(::IsMenu(pmd->hMenu));\t// Does itemData contain a valid ItemData struct?\n\t\tMenuTheme tm = GetMenuTheme();\n\n\t\tif (pmd->fType & MFT_SEPARATOR)\n\t\t{\n\t\t\tpmis->itemHeight = 7;\n\t\t\tpmis->itemWidth  = 0;\n\t\t}\n\n\t\telse\n\t\t{\n\t\t\tCClientDC DesktopDC(NULL);\n\n\t\t\t// Get the font used in menu items\n\t\t\tNONCLIENTMETRICS nm = {0};\n\t\t\tnm.cbSize = GetSizeofNonClientMetrics();\n\t\t\tSystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(nm), &nm, 0);\n\t\t\t// Default menu items are bold, so take this into account\n\t\t\tif ((int)::GetMenuDefaultItem(pmd->hMenu, TRUE, GMDI_USEDISABLED) != -1)\n\t\t\t\tnm.lfMenuFont.lfWeight = FW_BOLD;\n\n\t\t\tTCHAR* pItemText = &(pmd->vItemText[0]);\n\t\t\tDesktopDC.CreateFontIndirect(&nm.lfMenuFont);\n\n\t\t\t// Calculate the size of the text\n\t\t\tCSize size = DesktopDC.GetTextExtentPoint32(pItemText, lstrlen(pItemText));\n\n\t\t\t// Calculate the size of the icon\n\t\t\tint Iconx = 16;\n\t\t\tint Icony = 16;\n\t\t\tif (m_himlMenu) ImageList_GetIconSize(m_himlMenu, &Iconx, &Icony);\n\n\t\t\tpmis->itemHeight = 2+ MAX(MAX(size.cy, GetSystemMetrics(SM_CYMENU)-2), Icony+2);\n\t\t\tpmis->itemWidth = size.cx + MAX(::GetSystemMetrics(SM_CXMENUSIZE), Iconx+2);\n\n\t\t\t// Allow extra width if the text includes a tab\n\t\t\tif (_tcschr(pItemText, _T('\\t')))\n\t\t\t\tpmis->itemWidth += POST_TEXT_GAP;\n\n\t\t\t// Allow extra width if the menu item has a sub menu\n\t\t\tif (pmd->hSubMenu)\n\t\t\t\tpmis->itemWidth += 10;\n\n\t\t\t// Allow extra width for themed menu\n\t\t\tif (tm.UseThemes)\n\t\t\t\tpmis->itemWidth += 8;\n\t\t}\n\t\t return TRUE;\n\t}\n\n\tinline LRESULT CFrame::OnMenuChar(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tif ((IsMenuBarUsed()) && (LOWORD(wParam)!= VK_SPACE))\n\t\t{\n\t\t\t// Activate MenuBar for key pressed with Alt key held down\n\t\t\tGetMenuBar().OnMenuChar(wParam, lParam);\n\t\t\treturn -1L;\n\t\t}\n\t\treturn CWnd::WndProcDefault(WM_MENUCHAR, wParam, lParam);\n\t}\n\n\tinline void CFrame::OnMenuSelect(WPARAM wParam, LPARAM lParam)\n\t{\n\t\t// Set the StatusBar text when we hover over a menu\n\t\t// Only popup submenus have status strings\n\t\tif (m_bShowMenuStatus)\n\t\t{\n\t\t\tint nID = LOWORD (wParam);\n\t\t\tCMenu* pMenu = FromHandle((HMENU) lParam);\n\n\t\t\tif ((pMenu != GetMenu()) && (nID != 0) && !(HIWORD(wParam) & MF_POPUP))\n\t\t\t\tm_tsStatusText = LoadString(nID);\n\t\t\telse\n\t\t\t\tm_tsStatusText = _T(\"Ready\");\n\n\t\t\tSetStatusText();\n\t\t}\n\t}\n\n\tinline LRESULT CFrame::OnNotify(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\n\t\tswitch (((LPNMHDR)lParam)->code)\n\t\t{\n\t\tcase UWM_UNDOCKED:\n\t\t\tm_hOldFocus = 0;\n\t\t\tbreak;\n\t\tcase RBN_HEIGHTCHANGE:\n\t\t\tRecalcLayout();\n\t\t\tInvalidate();\n\t\t\tbreak;\n\t//\tcase RBN_LAYOUTCHANGED:\n\t//\t\tif (GetReBar().GetReBarTheme().UseThemes && GetReBar().GetReBarTheme().BandsLeft)\n\t//\t\t\tGetReBar().MoveBandsLeft();\n\t//\t\tbreak;\n\t\tcase RBN_MINMAX:\n\t\t\tif (GetReBar().GetReBarTheme().UseThemes && GetReBar().GetReBarTheme().ShortBands)\n\t\t\t\treturn 1L;\t// Supress maximise or minimise rebar band\n\t\t\tbreak;\n\n\t\t// Display tooltips for the toolbar\n\t\tcase TTN_GETDISPINFO:\n\t\t\tif (GetToolBar().IsWindow())\n\t\t\t{\n\t\t\t\tCToolBar* pToolBar = 0;\n\t\t\t\tif (IsReBarUsed())\n\t\t\t\t{\n\t\t\t\t\t// Get the ToolBar's CWnd\n\t\t\t\t\tCWnd* pWnd = FromHandle(GetReBar().HitTest(GetCursorPos()));\n\t\t\t\t\tif (pWnd && (lstrcmp(pWnd->GetClassName(), _T(\"ToolbarWindow32\")) == 0))\n\t\t\t\t\t{\n\t\t\t\t\t\tpToolBar = (CToolBar*)pWnd;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (pToolBar)\n\t\t\t\t{\n\t\t\t\t\tLPNMTTDISPINFO lpDispInfo = (LPNMTTDISPINFO)lParam;\n\t\t\t\t\tint iIndex =  pToolBar->HitTest();\n\t\t\t\t\tif (iIndex >= 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tint nID = pToolBar->GetCommandID(iIndex);\n\t\t\t\t\t\tif (nID > 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tm_tsTooltip = LoadString(nID);\n\t\t\t\t\t\t\tlpDispInfo->lpszText = (LPTSTR)m_tsTooltip.c_str();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tm_tsTooltip = _T(\"\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t} // switch LPNMHDR\n\n\t\treturn 0L;\n\n\t} // CFrame::Onotify(...)\n\n\tinline void CFrame::OnSetFocus()\n\t{\n\t\tSetStatusText();\n\t}\n\n\tinline void CFrame::OnSysColorChange()\n\t{\n\t\t// Honour theme color changes\n\t\tfor (int nBand = 0; nBand <= GetReBar().GetBandCount(); ++nBand)\n\t\t{\n\t\t\tGetReBar().SetBandColor(nBand, GetSysColor(COLOR_BTNTEXT), GetSysColor(COLOR_BTNFACE));\n\t\t}\n\n\t\t// Update the status bar font and text\n\t\tNONCLIENTMETRICS nm = {0};\n\t\tnm.cbSize = GetSizeofNonClientMetrics();\n\t\tSystemParametersInfo (SPI_GETNONCLIENTMETRICS, 0, &nm, 0);\n\t\tLOGFONT lf = nm.lfStatusFont;\n\t\tCFont* pFont = FromHandle(CreateFontIndirect(&lf));\n\t\tGetStatusBar().SetFont(pFont, FALSE);\n\t\tSetStatusText();\n\n\t\tif ((m_bUpdateTheme) && (m_bUseThemes)) SetTheme();\n\n\t\t// Reposition and redraw everything\n\t\tRecalcLayout();\n\t\tRedrawWindow(NULL, NULL, RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN);\n\n\t\t// Forward the message to the view window\n\t\tm_pView->PostMessage(WM_SYSCOLORCHANGE, 0L, 0L);\n\t}\n\n\tinline LRESULT CFrame::OnSysCommand(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tif ((SC_KEYMENU == wParam) && (VK_SPACE != lParam) && IsMenuBarUsed())\n\t\t{\n\t\t\tGetMenuBar().OnSysCommand(wParam, lParam);\n\t\t\treturn 0L;\n\t\t}\n\n\t\tif (SC_MINIMIZE == wParam)\n\t\t\tm_hOldFocus = ::GetFocus();\n\n\t\treturn CWnd::WndProcDefault(WM_SYSCOMMAND, wParam, lParam);\n\t}\n\n\tinline void CFrame::OnTimer(WPARAM wParam)\n\t{\n\t\tif (ID_STATUS_TIMER == wParam)\n\t\t{\n\t\t\tif (m_bShowMenuStatus)\n\t\t\t{\n\t\t\t\t// Get the toolbar the point is over\n\t\t\t\tCToolBar* pToolBar = 0;\n\t\t\t\tif (IsReBarUsed())\n\t\t\t\t{\n\t\t\t\t\t// Get the ToolBar's CWnd\n\t\t\t\t\tCWnd* pWnd = FromHandle(GetReBar().HitTest(GetCursorPos()));\n\t\t\t\t\tif (pWnd && (dynamic_cast<CToolBar*>(pWnd)) && !(dynamic_cast<CMenuBar*>(pWnd)))\n\t\t\t\t\t\tpToolBar = (CToolBar*)pWnd;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tCPoint pt = GetCursorPos();\n\t\t\t\t\tCWnd* pWnd = WindowFromPoint(GetCursorPos());\n\t\t\t\t\tif (pWnd && (dynamic_cast<CToolBar*>(pWnd)))\n\t\t\t\t\t\tpToolBar = (CToolBar*)pWnd;\n\t\t\t\t}\n\n\t\t\t\tif ((pToolBar) && (WindowFromPoint(GetCursorPos()) == pToolBar))\n\t\t\t\t{\n\t\t\t\t\t// Which toolbar button is the mouse cursor hovering over?\n\t\t\t\t\tint nButton = pToolBar->HitTest();\n\t\t\t\t\tif (nButton >= 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tint nID = pToolBar->GetCommandID(nButton);\n\t\t\t\t\t\t// Only update the statusbar if things have changed\n\t\t\t\t\t\tif (nID != m_nOldID)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (nID != 0)\n\t\t\t\t\t\t\t\tm_tsStatusText = LoadString(nID);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tm_tsStatusText = _T(\"Ready\");\n\n\t\t\t\t\t\t\tif (GetStatusBar().IsWindow())\n\t\t\t\t\t\t\t\tSetStatusText();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tm_nOldID = nID;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif (m_nOldID != -1)\n\t\t\t\t\t{\n\t\t\t\t\t\tm_tsStatusText = _T(\"Ready\");\n\t\t\t\t\t\tSetStatusText();\n\t\t\t\t\t}\n\t\t\t\t\tm_nOldID = -1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (m_bShowIndicatorStatus)\n\t\t\t\tSetStatusIndicators();\n\t\t}\n\t}\n\n\tinline void CFrame::OnViewStatusBar()\n\t{\n\t\tm_bShowStatusBar = !m_bShowStatusBar;\n\t\tShowStatusBar(m_bShowStatusBar);\n\t}\n\n\tinline void CFrame::OnViewToolBar()\n\t{\n\t\tm_bShowToolBar = !m_bShowToolBar;\n\t\tShowToolBar(m_bShowToolBar);\n\t}\n\n  \tinline void CFrame::PreCreate(CREATESTRUCT& cs)\n\t{\n\t\t// Set the frame window styles\n\t\tcs.style = WS_OVERLAPPEDWINDOW | WS_VISIBLE;\n\n\t\t// Set the original window position\n\t\tcs.x  = m_rcPosition.left;\n\t\tcs.y  = m_rcPosition.top;\n\t\tcs.cx = m_rcPosition.Width();\n\t\tcs.cy = m_rcPosition.Height();\n\t}\n\n\tinline void CFrame::PreRegisterClass(WNDCLASS &wc)\n\t{\n\t\t// Set the Window Class\n\t\twc.lpszClassName =  _T(\"Win32++ Frame\");\n\t}\n\n\tinline void CFrame::RecalcLayout()\n\t{\n\t\tCWnd* pView = GetView();\n\t\tif ((!pView) || (!pView->GetHwnd()))\n\t\t\treturn;\n\n\t\t// Resize the status bar\n\t\tif (GetStatusBar().IsWindow() && m_bShowStatusBar)\n\t\t{\n\t\t\tGetStatusBar().SetWindowPos(NULL, 0, 0, 0, 0, SWP_SHOWWINDOW);\n\t\t\tGetStatusBar().Invalidate();\n\t\t\tSetStatusText();\n\t\t}\n\n\t\t// Resize the rebar or toolbar\n\t\tif (IsReBarUsed())\n\t\t{\n\t\t\tGetReBar().SendMessage(WM_SIZE, 0L, 0L);\n\t\t\tGetReBar().Invalidate();\n\t\t}\n\t\telse if (m_bUseToolBar && m_bShowToolBar)\n\t\t\tGetToolBar().SendMessage(TB_AUTOSIZE, 0L, 0L);\n\n\t\t// Resize the View window\n\t\tCRect rClient = GetViewRect();\n\t\tif ((rClient.bottom - rClient.top) >= 0)\n\t\t{\n\t\t\tint x  = rClient.left;\n\t\t\tint y  = rClient.top;\n\t\t\tint cx = rClient.Width();\n\t\t\tint cy = rClient.Height();\n\n\t\t\tpView->SetWindowPos( NULL, x, y, cx, cy, SWP_SHOWWINDOW|SWP_ASYNCWINDOWPOS );\n\t\t}\n\n\t\t// Adjust rebar bands\n\t\tif (IsReBarUsed())\n\t\t{\n\t\t\tif (GetReBar().GetReBarTheme().UseThemes && GetReBar().GetReBarTheme().BandsLeft)\n\t\t\t\tGetReBar().MoveBandsLeft();\n\n\t\t\tif (IsMenuBarUsed())\n\t\t\t\tSetMenuBarBandSize();\n\t\t}\n\t}\n\n\tinline void CFrame::RemoveMRUEntry(LPCTSTR szMRUEntry)\n\t{\n\t\tstd::vector<tString>::iterator it;\n\t\tfor (it = m_vMRUEntries.begin(); it != m_vMRUEntries.end(); ++it)\n\t\t{\n\t\t\tif ((*it) == szMRUEntry)\n\t\t\t{\n\t\t\t\tm_vMRUEntries.erase(it);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tUpdateMRUMenu();\n\t}\n\n\tinline BOOL CFrame::SaveRegistrySettings()\n\t{\n\t\t// Store the window position in the registry\n\t\tif (!m_tsKeyName.empty())\n\t\t{\n\t\t\ttString tsKeyName = _T(\"Software\\\\\") + m_tsKeyName + _T(\"\\\\Frame Settings\");\n\t\t\tHKEY hKey = NULL;\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\tif (ERROR_SUCCESS != RegCreateKeyEx(HKEY_CURRENT_USER, tsKeyName.c_str(), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL))\n\t\t\t\t\tthrow CWinException(_T(\"RegCreateKeyEx failed\"));\n\n\t\t\t\tWINDOWPLACEMENT Wndpl = {0};\n\t\t\t\tWndpl.length = sizeof(WINDOWPLACEMENT);\n\n\t\t\t\tif (GetWindowPlacement(Wndpl))\n\t\t\t\t{\n\t\t\t\t\t// Get the Frame's window position\n\t\t\t\t\tCRect rc = Wndpl.rcNormalPosition;\n\t\t\t\t\tDWORD dwTop = MAX(rc.top, 0);\n\t\t\t\t\tDWORD dwLeft = MAX(rc.left, 0);\n\t\t\t\t\tDWORD dwWidth = MAX(rc.Width(), 100);\n\t\t\t\t\tDWORD dwHeight = MAX(rc.Height(), 50);\n\n\t\t\t\t\tif (ERROR_SUCCESS != RegSetValueEx(hKey, _T(\"Top\"), 0, REG_DWORD, (LPBYTE)&dwTop, sizeof(DWORD)))\n\t\t\t\t\t\tthrow CWinException(_T(\"RegSetValueEx failed\"));\n\t\t\t\t\tif (ERROR_SUCCESS != RegSetValueEx(hKey, _T(\"Left\"), 0, REG_DWORD, (LPBYTE)&dwLeft, sizeof(DWORD)))\n\t\t\t\t\t\tthrow CWinException(_T(\"RegSetValueEx failed\"));\n\t\t\t\t\tif (ERROR_SUCCESS != RegSetValueEx(hKey, _T(\"Width\"), 0, REG_DWORD, (LPBYTE)&dwWidth, sizeof(DWORD)))\n\t\t\t\t\t\tthrow CWinException(_T(\"RegSetValueEx failed\"));\n\t\t\t\t\tif (ERROR_SUCCESS != RegSetValueEx(hKey, _T(\"Height\"), 0, REG_DWORD, (LPBYTE)&dwHeight, sizeof(DWORD)))\n\t\t\t\t\t\tthrow CWinException(_T(\"RegSetValueEx failed\"));\n\t\t\t\t}\n\n\t\t\t\t// Store the ToolBar and statusbar states\n\t\t\t\tDWORD dwShowToolBar = m_bShowToolBar;\n\t\t\t\tDWORD dwShowStatusBar = m_bShowStatusBar;\n\n\t\t\t\tif (ERROR_SUCCESS != RegSetValueEx(hKey, _T(\"ToolBar\"), 0, REG_DWORD, (LPBYTE)&dwShowToolBar, sizeof(DWORD)))\n\t\t\t\t\tthrow CWinException(_T(\"RegSetValueEx failed\"));\n\t\t\t\tif (ERROR_SUCCESS != RegSetValueEx(hKey, _T(\"StatusBar\"), 0, REG_DWORD, (LPBYTE)&dwShowStatusBar, sizeof(DWORD)))\n\t\t\t\t\tthrow CWinException(_T(\"RegSetValueEx failed\"));\n\n\t\t\t\tRegCloseKey(hKey);\n\t\t\t}\n\n\t\t\tcatch (const CWinException& e)\n\t\t\t{\n\t\t\t\tTRACE(_T(\"Failed to save registry settings\\n\"));\n\n\t\t\t\tif (hKey)\n\t\t\t\t{\n\t\t\t\t\t// Roll back the registry changes by deleting this subkey\n\t\t\t\t\tRegDeleteKey(HKEY_CURRENT_USER ,tsKeyName.c_str());\n\t\t\t\t\tRegCloseKey(hKey);\n\t\t\t\t}\n\n\t\t\t\te.what();\n\t\t\t\treturn FALSE;\n\t\t\t}\n\n\t\t\t// Store the MRU entries in the registry\n\t\t\tif (m_nMaxMRU > 0)\n\t\t\t{\n\t\t\t\ttString tsKeyName = _T(\"Software\\\\\") + m_tsKeyName + _T(\"\\\\Recent Files\");\n\t\t\t\tHKEY hKey = NULL;\n\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tif (ERROR_SUCCESS != RegCreateKeyEx(HKEY_CURRENT_USER, tsKeyName.c_str(), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL))\n\t\t\t\t\t\tthrow CWinException(_T(\"RegCreateKeyEx failed\"));\n\n\t\t\t\t\tfor (UINT i = 0; i < m_nMaxMRU; ++i)\n\t\t\t\t\t{\n\t\t\t\t\t\tTCHAR szSubKey[10];\n\t\t\t\t\t\twsprintf(szSubKey, _T(\"File %d\\0\"), i+1);\n\t\t\t\t\t\ttString tsPathName;\n\t\t\t\t\t\tif (i < m_vMRUEntries.size())\n\t\t\t\t\t\t\ttsPathName = m_vMRUEntries[i];\n\n\t\t\t\t\t\tif (ERROR_SUCCESS != RegSetValueEx(hKey, szSubKey, 0, REG_SZ, (LPBYTE)tsPathName.c_str(), (1 + lstrlen(tsPathName.c_str()))*sizeof(TCHAR)))\n\t\t\t\t\t\t\tthrow CWinException(_T(\"RegSetValueEx failed\"));\n\t\t\t\t\t}\n\n\t\t\t\t\tRegCloseKey(hKey);\n\t\t\t\t}\n\n\t\t\t\tcatch (const CWinException& e)\n\t\t\t\t{\n\t\t\t\t\tTRACE(_T(\"Failed to save registry MRU settings\\n\"));\n\n\t\t\t\t\tif (hKey)\n\t\t\t\t\t{\n\t\t\t\t\t\t// Roll back the registry changes by deleting this subkey\n\t\t\t\t\t\tRegDeleteKey(HKEY_CURRENT_USER ,tsKeyName.c_str());\n\t\t\t\t\t\tRegCloseKey(hKey);\n\t\t\t\t\t}\n\n\t\t\t\t\te.what();\n\t\t\t\t\treturn FALSE;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn TRUE;\n\t}\n\n\tinline void CFrame::SetFrameMenu(INT ID_MENU)\n\t{\n\t\t// Sets the frame's menu from a Resouce ID.\n\t\t// A resource ID of 0 removes the menu from the frame.\n\t\tHMENU hMenu = 0;\n\t\tif (ID_MENU != 0)\n\t\t{\n\t\t// Sets the frame's menu from a resource ID.\n\t\t\thMenu = ::LoadMenu(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(ID_MENU));\n\t\t\tassert (hMenu);\n\t\t}\n\n\t\tSetFrameMenu(hMenu);\n \t}\n\n\tinline void CFrame::SetFrameMenu(HMENU hMenu)\n\t{\n\t\t// Sets the frame's menu from a HMENU.\n\t\tm_Menu.Attach(hMenu);\n\n\t\tif (IsMenuBarUsed())\n\t\t{\n\t\t\tGetMenuBar().SetMenu(GetFrameMenu());\n\t\t\tBOOL bShow = (hMenu != NULL);\t// boolean expression\n\t\t\tShowMenu(bShow);\n\t\t}\n\t\telse\n\t\t\tSetMenu(&m_Menu);\n \t}\n\n\tinline UINT CFrame::SetMenuIcons(const std::vector<UINT>& MenuData, COLORREF crMask, UINT ToolBarID, UINT ToolBarDisabledID)\n\t{\n\t\t// Remove any existing menu icons\n\t\tif (m_himlMenu) ImageList_Destroy(m_himlMenu);\n\t\tif (m_himlMenuDis) ImageList_Destroy(m_himlMenuDis);\n\t\tm_himlMenu = NULL;\n\t\tm_himlMenuDis = NULL;\n\t\tm_vMenuIcons.clear();\n\n\t\t// Exit if no ToolBarID is specified\n\t\tif (ToolBarID == 0) return 0;\n\n\t\t// Add the menu icons from the bitmap IDs\n\t\treturn AddMenuIcons(MenuData, crMask, ToolBarID, ToolBarDisabledID);\n\t}\n\n\tinline void CFrame::SetMenuBarBandSize()\n\t{\n\t\t// Sets the minimum width of the MenuBar band to the width of the rebar\n\t\t// This prevents other bands from moving to this MenuBar's row.\n\n\t\tCRect rcClient = GetClientRect();\n\t\tCReBar& RB = GetReBar();\n\t\tint nBand = RB.GetBand(GetMenuBar());\n\t\tCRect rcBorder = RB.GetBandBorders(nBand);\n\n\t\tREBARBANDINFO rbbi = {0};\n\t\trbbi.fMask = RBBIM_CHILDSIZE | RBBIM_SIZE;\n\t\tRB.GetBandInfo(nBand, rbbi);\n\n\t\tint Width;\n\t\tif ((GetReBar().GetReBarTheme().UseThemes) && (GetReBar().GetReBarTheme().LockMenuBand))\n\t\t\tWidth = rcClient.Width() - rcBorder.Width() - 2;\n\t\telse\n\t\t\tWidth = GetMenuBar().GetMaxSize().cx;\n\n\t\trbbi.cxMinChild = Width;\n\t\trbbi.cx         = Width;\n\n\t\tRB.SetBandInfo(nBand, rbbi);\n\t}\n\n\tinline void CFrame::SetMenuTheme(MenuTheme& Theme)\n\t{\n\t\tm_ThemeMenu.UseThemes   = Theme.UseThemes;\n\t\tm_ThemeMenu.clrHot1     = Theme.clrHot1;\n\t\tm_ThemeMenu.clrHot2     = Theme.clrHot2;\n\t\tm_ThemeMenu.clrPressed1 = Theme.clrPressed1;\n\t\tm_ThemeMenu.clrPressed2 = Theme.clrPressed2;\n\t\tm_ThemeMenu.clrOutline  = Theme.clrOutline;\n\n\t\tGetMenuBar().SetMenuBarTheme(Theme); // Sets the theme for MenuBar buttons\n\t\tInvalidate();\n\t}\n\n\tinline void CFrame::SetStatusIndicators()\n\t{\n\t\tif (::IsWindow(GetStatusBar()))\n\t\t{\n\t\t\tLPCTSTR Status1 = (::GetKeyState(VK_CAPITAL) & 0x0001)? _T(\"\\tCAP\") : _T(\"\");\n\t\t\tLPCTSTR Status2 = (::GetKeyState(VK_NUMLOCK) & 0x0001)? _T(\"\\tNUM\") : _T(\"\");\n\t\t\tLPCTSTR Status3 = (::GetKeyState(VK_SCROLL)  & 0x0001)? _T(\"\\tSCRL\"): _T(\"\");\n\n\t\t\t// Only update indictors if the text has changed\n\t\t\tif (Status1 != m_OldStatus[0]) \tGetStatusBar().SetPartText(1, (Status1));\n\t\t\tif (Status2 != m_OldStatus[1])  GetStatusBar().SetPartText(2, (Status2));\n\t\t\tif (Status3 != m_OldStatus[2])  GetStatusBar().SetPartText(3, (Status3));\n\n\t\t\tm_OldStatus[0] = Status1;\n\t\t\tm_OldStatus[1] = Status2;\n\t\t\tm_OldStatus[2] = Status3;\n\t\t}\n\t}\n\n\tinline void CFrame::SetStatusText()\n\t{\n\t\tif (::IsWindow(GetStatusBar()))\n\t\t{\n\t\t\t// Calculate the width of the text indicators\n\t\t\tCClientDC dcStatus(&GetStatusBar());\n\t\t\tCSize csCAP  = dcStatus.GetTextExtentPoint32(_T(\"\\tCAP\"), lstrlen(_T(\"\\tCAP\")));\n\t\t\tCSize csNUM  = dcStatus.GetTextExtentPoint32(_T(\"\\tNUM\"), lstrlen(_T(\"\\tNUM\")));\n\t\t\tCSize csSCRL = dcStatus.GetTextExtentPoint32(_T(\"\\tSCRL \"), lstrlen(_T(\"\\tSCRL \")));\n\n\t\t\t// Get the coordinates of the parent window's client area.\n\t\t\tCRect rcClient = GetClientRect();\n\t\t\tint width = MAX(300, rcClient.right);\n\n\t\t\tif (m_bShowIndicatorStatus)\n\t\t\t{\n\t\t\t\t// Create 4 panes\n\t\t\t\tGetStatusBar().SetPartWidth(0, width - (csCAP.cx+csNUM.cx+csSCRL.cx+20));\n\t\t\t\tGetStatusBar().SetPartWidth(1, csCAP.cx);\n\t\t\t\tGetStatusBar().SetPartWidth(2, csNUM.cx);\n\t\t\t\tGetStatusBar().SetPartWidth(3, csSCRL.cx);\n\n\t\t\t\tSetStatusIndicators();\n\t\t\t}\n\n\t\t\t// Place text in the 1st pane\n\t\t\tGetStatusBar().SetPartText(0, m_tsStatusText.c_str());\n\t\t}\n\t}\n\n\tinline void CFrame::SetTheme()\n\t{\n\t\t// Note: To modify theme colors, override this function in CMainframe,\n\t\t//        and make any modifications there.\n\n\t\t// Avoid themes if using less than 16 bit colors\n\t\tCClientDC DesktopDC(NULL);\n\t\tif (DesktopDC.GetDeviceCaps(BITSPIXEL) < 16)\n\t\t\tm_bUseThemes = FALSE;\n\n\t\tBOOL T = TRUE;\n\t\tBOOL F = FALSE;\n\n\t\tif (m_bUseThemes)\n\t\t{\n\t\t\t// Set a flag redo SetTheme when the theme changes\n\t\t\tm_bUpdateTheme = TRUE;\n\n\t\t\t// Detect the XP theme name\n\t\t\tWCHAR Name[30] = L\"\";\n\t\t\tHMODULE hMod = ::LoadLibrary(_T(\"uxtheme.dll\"));\n\t\t\tif(hMod)\n\t\t\t{\n\t\t\t\ttypedef HRESULT (__stdcall *PFNGETCURRENTTHEMENAME)(LPWSTR pszThemeFileName, int cchMaxNameChars,\n\t\t\t\t\tLPWSTR pszColorBuff, int cchMaxColorChars, LPWSTR pszSizeBuff, int cchMaxSizeChars);\n\n\t\t\t\tPFNGETCURRENTTHEMENAME pfn = (PFNGETCURRENTTHEMENAME)GetProcAddress(hMod, \"GetCurrentThemeName\");\n\n\t\t\t\t(*pfn)(0, 0, Name, 30, 0, 0);\n\n\t\t\t\t::FreeLibrary(hMod);\n\t\t\t}\n\n\t\t\tenum Themetype{ Modern, Grey, Blue, Silver, Olive };\n\n\t\t\tint Theme = Grey;\n\t\t\tif (GetWinVersion() < 2600) // Not for Vista and above\n\t\t\t{\n\t\t\t\tif (0 == wcscmp(L\"NormalColor\", Name))\tTheme = Blue;\n\t\t\t\tif (0 == wcscmp(L\"Metallic\", Name))\t\tTheme = Silver;\n\t\t\t\tif (0 == wcscmp(L\"HomeStead\", Name))\tTheme = Olive;\n\t\t\t}\n\t\t\telse\n\t\t\t\tTheme = Modern;\n\n\t\t\tswitch (Theme)\n\t\t\t{\n\t\t\tcase Modern:\n\t\t\t\t{\n\t\t\t\t\tToolBarTheme tt = {T, RGB(180, 250, 255), RGB(140, 190, 255), RGB(150, 220, 255), RGB(80, 100, 255), RGB(127, 127, 255)};\n\t\t\t\t\tReBarTheme tr = {T, RGB(220, 225, 250), RGB(240, 242, 250), RGB(240, 240, 250), RGB(180, 200, 230), F, T, T, T, T, F};\n\t\t\t\t\tMenuTheme tm = {T, RGB(180, 250, 255), RGB(140, 190, 255), RGB(240, 250, 255), RGB(120, 170, 220), RGB(127, 127, 255)};\n\n\t\t\t\t\tGetToolBar().SetToolBarTheme(tt);\n\t\t\t\t\tSetMenuTheme(tm); // Sets the theme for popup menus and MenuBar\n\n\t\t\t\t\tGetReBar().SetReBarTheme(tr);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase Grey:\t// A color scheme suitable for 16 bit colors. Suitable for Windows older than XP.\n\t\t\t\t{\n\t\t\t\t\tToolBarTheme tt = {T, RGB(182, 189, 210), RGB(182, 189, 210), RGB(133, 146, 181), RGB(133, 146, 181), RGB(10, 36, 106)};\n\t\t\t\t\tReBarTheme tr = {T, RGB(212, 208, 200), RGB(212, 208, 200), RGB(230, 226, 222), RGB(220, 218, 208), F, T, T, T, T, F};\n\t\t\t\t\tMenuTheme tm = {T, RGB(182, 189, 210), RGB( 182, 189, 210), RGB(200, 196, 190), RGB(200, 196, 190), RGB(100, 100, 100)};\n\n\t\t\t\t\tGetToolBar().SetToolBarTheme(tt);\n\t\t\t\t\tSetMenuTheme(tm); // Sets the theme for popup menus and MenuBar\n\n\t\t\t\t\tGetReBar().SetReBarTheme(tr);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase Blue:\n\t\t\t\t{\n\t\t\t\t\t// Used for XP default (blue) color scheme\n\t\t\t\t\tToolBarTheme tt = {T, RGB(255, 230, 190), RGB(255, 190, 100), RGB(255, 140, 40), RGB(255, 180, 80), RGB(192, 128, 255)};\n\t\t\t\t\tReBarTheme tr = {T, RGB(150,190,245), RGB(196,215,250), RGB(220,230,250), RGB( 70,130,220), F, T, T, T, T, F};\n\t\t\t\t\tMenuTheme tm = {T, RGB(255, 230, 190), RGB(255, 190, 100), RGB(220,230,250), RGB(150,190,245), RGB(128, 128, 200)};\n\n\t\t\t\t\tGetToolBar().SetToolBarTheme(tt);\n\t\t\t\t\tSetMenuTheme(tm); // Sets the theme for popup menus and MenuBar\n\n\t\t\t\t\tGetReBar().SetReBarTheme(tr);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase Silver:\n\t\t\t\t{\n\t\t\t\t\t// Used for XP Silver color scheme\n\t\t\t\t\tToolBarTheme tt = {T, RGB(192, 210, 238), RGB(192, 210, 238), RGB(152, 181, 226), RGB(152, 181, 226), RGB(49, 106, 197)};\n\t\t\t\t\tReBarTheme tr = {T, RGB(225, 220, 240), RGB(240, 240, 245), RGB(245, 240, 255), RGB(160, 155, 180), F, T, T, T, T, F};\n\t\t\t\t\tMenuTheme tm = {T, RGB(196, 215, 250), RGB( 120, 180, 220), RGB(240, 240, 245), RGB(170, 165, 185), RGB(128, 128, 150)};\n\n\t\t\t\t\tGetToolBar().SetToolBarTheme(tt);\n\t\t\t\t\tSetMenuTheme(tm); // Sets the theme for popup menus and MenuBar\n\n\t\t\t\t\tGetReBar().SetReBarTheme(tr);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase Olive:\n\t\t\t\t{\n\t\t\t\t\t// Used for XP Olive color scheme\n\t\t\t\t\tReBarTheme tr = {T, RGB(215, 216, 182), RGB(242, 242, 230), RGB(249, 255, 227), RGB(178, 191, 145), F, T, T, T, T, F};\n\t\t\t\t\tToolBarTheme tt = {T, RGB(255, 230, 190), RGB(255, 190, 100), RGB(255, 140, 40), RGB(255, 180, 80), RGB(200, 128, 128)};\n\t\t\t\t\tMenuTheme tm = {T, RGB(255, 230, 190), RGB(255, 190, 100), RGB(249, 255, 227), RGB(178, 191, 145), RGB(128, 128, 128)};\n\n\t\t\t\t\tGetToolBar().SetToolBarTheme(tt);\n\t\t\t\t\tSetMenuTheme(tm); // Sets the theme for popup menus and MenuBar\n\n\t\t\t\t\tGetReBar().SetReBarTheme(tr);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Use a classic style by default\n\t\t\tReBarTheme tr = {T, 0, 0, 0, 0, F, T, T, F, F, F};\n\t\t\tGetReBar().SetReBarTheme(tr);\n\t\t}\n\n\t\tRecalcLayout();\n\t}\n\n\tinline void CFrame::SetToolBarImages(COLORREF crMask, UINT ToolBarID, UINT ToolBarHotID, UINT ToolBarDisabledID)\n\t// Either sets the imagelist or adds/replaces bitmap depending on ComCtl32.dll version\n\t// Assumes the width of the button image = bitmap_size / buttons\n\t// Assumes buttons have been already been added via AdddToolBarButton\n\t// The colour mask is ignored for 32bit bitmaps, but is required for 24bit bitmaps\n\t// The colour mask is often grey RGB(192,192,192) or magenta (255,0,255)\n\t// The color mask is ignored for 32bit bitmap resources\n\t// The Hot and disabled bitmap resources can be 0\n\t{\n\t\tGetToolBar().SetImages(crMask, ToolBarID, ToolBarHotID, ToolBarDisabledID);\n\t}\n\n\tinline void CFrame::SetupToolBar()\n\t{\n\t\t// Use this function to set the Resource IDs for the toolbar(s).\n\n/*\t\t// Set the Resource IDs for the toolbar buttons\n\t\tAddToolBarButton( IDM_FILE_NEW   );\n\t\tAddToolBarButton( IDM_FILE_OPEN  );\n\t\tAddToolBarButton( IDM_FILE_SAVE  );\n\t\tAddToolBarButton( 0 );\t\t\t\t// Separator\n\t\tAddToolBarButton( IDM_EDIT_CUT   );\n\t\tAddToolBarButton( IDM_EDIT_COPY  );\n\t\tAddToolBarButton( IDM_EDIT_PASTE );\n\t\tAddToolBarButton( 0 );\t\t\t\t// Separator\n\t\tAddToolBarButton( IDM_FILE_PRINT );\n\t\tAddToolBarButton( 0 );\t\t\t\t// Separator\n\t\tAddToolBarButton( IDM_HELP_ABOUT );\n*/\n\t}\n\n\tinline void CFrame::SetView(CWnd& wndView)\n\t// Sets or changes the View window displayed within the frame\n\t{\n\t\tif (m_pView != &wndView)\n\t\t{\n\t\t\t// Destroy the existing view window (if any)\n\t\t\tif (m_pView) m_pView->Destroy();\n\n\t\t\t// Assign the view window\n\t\t\tm_pView = &wndView;\n\n\t\t\tif (m_hWnd)\n\t\t\t{\n\t\t\t\t// The frame is already created, so create and position the new view too\n\t\t\t\tassert(GetView());\t\t\t// Use SetView in CMainFrame's constructor to set the view window\n\t\t\t\tGetView()->Create(this);\n\t\t\t\tRecalcLayout();\n\t\t\t}\n\t\t}\n\t}\n\n\tinline void CFrame::ShowMenu(BOOL bShow)\n\t{\n\t\tif (bShow)\n\t\t{\n\t\t\tif (IsReBarUsed())\n\t\t\t\tGetReBar().SendMessage(RB_SHOWBAND, GetReBar().GetBand(GetMenuBar()), TRUE);\n\t\t\telse\n\t\t\t\tSetMenu(&m_Menu);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (IsReBarUsed())\n\t\t\t\tGetReBar().SendMessage(RB_SHOWBAND, GetReBar().GetBand(GetMenuBar()), FALSE);\n\t\t\telse\n\t\t\t\tSetMenu(NULL);\n\t\t}\n\n\t\tif (GetReBar().IsWindow())\n\t\t{\n\t\t\tif (GetReBar().GetReBarTheme().UseThemes && GetReBar().GetReBarTheme().BandsLeft)\n\t\t\t\tGetReBar().MoveBandsLeft();\n\t\t}\n\n\t\t// Reposition the Windows\n\t\tRecalcLayout();\n\t}\n\n\n\n\tinline void CFrame::ShowStatusBar(BOOL bShow)\n\t{\n\t\tif (bShow)\n\t\t{\n\t\t\tm_Menu.CheckMenuItem(IDW_VIEW_STATUSBAR, MF_CHECKED);\n\t\t\tGetStatusBar().ShowWindow(SW_SHOW);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_Menu.CheckMenuItem(IDW_VIEW_STATUSBAR, MF_UNCHECKED);\n\t\t\tGetStatusBar().ShowWindow(SW_HIDE);\n\t\t}\n\n\t\t// Reposition the Windows\n\t\tRecalcLayout();\n\t}\n\n\tinline void CFrame::ShowToolBar(BOOL bShow)\n\t{\n\t\tif (bShow)\n\t\t{\n\t\t\tm_Menu.CheckMenuItem(IDW_VIEW_TOOLBAR, MF_CHECKED);\n\t\t\tif (IsReBarUsed())\n\t\t\t\tGetReBar().SendMessage(RB_SHOWBAND, GetReBar().GetBand(GetToolBar()), TRUE);\n\t\t\telse\n\t\t\t\tGetToolBar().ShowWindow(SW_SHOW);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_Menu.CheckMenuItem(IDW_VIEW_TOOLBAR, MF_UNCHECKED);\n\t\t\tif (IsReBarUsed())\n\t\t\t\tGetReBar().SendMessage(RB_SHOWBAND, GetReBar().GetBand(GetToolBar()), FALSE);\n\t\t\telse\n\t\t\t\tGetToolBar().ShowWindow(SW_HIDE);\n\t\t}\n\n\t\tif (GetReBar().IsWindow())\n\t\t{\n\t\t\tif (GetReBar().GetReBarTheme().UseThemes && GetReBar().GetReBarTheme().BandsLeft)\n\t\t\t\tGetReBar().MoveBandsLeft();\n\t\t}\n\n\t\t// Reposition the Windows\n\t\tRecalcLayout();\n\t}\n\n\tinline void CFrame::UpdateMRUMenu()\n\t{\n\t\tif (0 >= m_nMaxMRU) return;\n\n\t\t// Set the text for the MRU Menu\n\t\ttString tsMRUArray[16];\n\t\tUINT MaxMRUArrayIndex = 0;\n\t\tif (m_vMRUEntries.size() > 0)\n\t\t{\n\t\t\tfor (UINT n = 0; ((n < m_vMRUEntries.size()) && (n <= m_nMaxMRU)); ++n)\n\t\t\t{\n\t\t\t\ttsMRUArray[n] = m_vMRUEntries[n];\n\t\t\t\tif (tsMRUArray[n].length() > MAX_MENU_STRING - 10)\n\t\t\t\t{\n\t\t\t\t\t// Truncate the string if its too long\n\t\t\t\t\ttsMRUArray[n].erase(0, tsMRUArray[n].length() - MAX_MENU_STRING +10);\n\t\t\t\t\ttsMRUArray[n] = _T(\"... \") + tsMRUArray[n];\n\t\t\t\t}\n\n\t\t\t\t// Prefix the string with its number\n\t\t\t\tTCHAR tVal[5];\n\t\t\t\twsprintf(tVal, _T(\"%d \"), n+1);\n\t\t\t\ttsMRUArray[n] = tVal + tsMRUArray[n];\n\t\t\t\tMaxMRUArrayIndex = n;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\ttsMRUArray[0] = _T(\"Recent Files\");\n\t\t}\n\n\t\t// Set MRU menu items\n\t\tMENUITEMINFO mii = {0};\n\t\tmii.cbSize = GetSizeofMenuItemInfo();\n\n\t\tint nFileItem = 0;  // We place the MRU items under the left most menu item\n\t\tCMenu* pFileMenu = GetFrameMenu().GetSubMenu(nFileItem);\n\n\t\tif (pFileMenu)\n\t\t{\n\t\t\t// Remove all but the first MRU Menu entry\n\t\t\tfor (UINT u = IDW_FILE_MRU_FILE2; u <= IDW_FILE_MRU_FILE1 +16; ++u)\n\t\t\t{\n\t\t\t\tpFileMenu->DeleteMenu(u, MF_BYCOMMAND);\n\t\t\t}\n\n\t\t\tint MaxMRUIndex = (int)MIN(MaxMRUArrayIndex, m_nMaxMRU);\n\n\t\t\tfor (int index = MaxMRUIndex; index >= 0; --index)\n\t\t\t{\n\t\t\t\tmii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE;\n\t\t\t\tmii.fState = (0 == m_vMRUEntries.size())? MFS_GRAYED : 0;\n\t\t\t\tmii.fType = MFT_STRING;\n\t\t\t\tmii.wID = IDW_FILE_MRU_FILE1 + index;\n\t\t\t\tmii.dwTypeData = (LPTSTR)tsMRUArray[index].c_str();\n\n\t\t\t\tBOOL bResult;\n\t\t\t\tif (index == MaxMRUIndex)\n\t\t\t\t\t// Replace the last MRU entry first\n\t\t\t\t\tbResult = pFileMenu->SetMenuItemInfo(IDW_FILE_MRU_FILE1, &mii, FALSE);\n\t\t\t\telse\n\t\t\t\t\t// Insert the other MRU entries next\n\t\t\t\t\tbResult = pFileMenu->InsertMenuItem(IDW_FILE_MRU_FILE1 + index + 1, &mii, FALSE);\n\n\t\t\t\tif (!bResult)\n\t\t\t\t{\n\t\t\t\t\tTRACE(_T(\"Failed to set MRU menu item\\n\"));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tDrawMenuBar();\n\t}\n\n\tinline LRESULT CFrame::WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\tswitch (uMsg)\n\t\t{\n\t\tcase WM_ACTIVATE:\n\t\t\tOnActivate(wParam, lParam);\n\t\t\treturn 0L;\n\t\tcase WM_CLOSE:\n\t\t\tOnClose();\n\t\t\tbreak;\n\t\tcase WM_DESTROY:\n\t\t\tOnDestroy();\n\t\t\treturn 0L;\n\t\tcase WM_ERASEBKGND:\n\t\t\treturn 0L;\n\t\tcase WM_HELP:\n\t\t\tOnHelp();\n\t\t\treturn 0L;\n\t\tcase WM_MENUCHAR:\n\t\t\treturn OnMenuChar(wParam, lParam);\n\t\tcase WM_MENUSELECT:\n\t\t\tOnMenuSelect(wParam, lParam);\n\t\t\treturn 0L;\n\t\tcase WM_SETFOCUS:\n\t\t\tOnSetFocus();\n\t\t\tbreak;\n\t\tcase WM_SIZE:\n\t\t\tRecalcLayout();\n\t\t\treturn 0L;\n\t\tcase WM_SYSCOLORCHANGE:\n\t\t\t// Changing themes trigger this\n\t\t\tOnSysColorChange();\n\t\t\treturn 0L;\n\t\tcase WM_SYSCOMMAND:\n\t\t\treturn OnSysCommand(wParam, lParam);\n\t\tcase WM_TIMER:\n\t\t\tOnTimer(wParam);\n\t\t\treturn 0L;\n\t\tcase WM_DRAWITEM:\n\t\t\t// Owner draw menu items\n\t\t\treturn OnDrawItem(wParam, lParam);\n\t\tcase WM_INITMENUPOPUP:\n\t\t\tOnInitMenuPopup(wParam, lParam);\n\t\t\tbreak;\n\t\tcase WM_MEASUREITEM:\n\t\t\treturn OnMeasureItem(wParam, lParam);\n\t\tcase WM_EXITMENULOOP:\n\t\t\tOnExitMenuLoop();\n\t\t\tbreak;\n\t\tcase UWM_GETMENUTHEME:\n\t\t\t{\n\t\t\t\tMenuTheme& tm = GetMenuTheme();\n\t\t\t\treturn (LRESULT)&tm;\n\t\t\t}\n\t\tcase UWM_GETREBARTHEME:\n\t\t\t{\n\t\t\t\tReBarTheme& rm = GetReBarTheme();\n\t\t\t\treturn (LRESULT)&rm;\n\t\t\t}\n\t\tcase UWM_GETTOOLBARTHEME:\n\t\t\t{\n\t\t\t\tToolBarTheme& tt = GetToolBarTheme();\n\t\t\t\treturn (LRESULT)&tt;\n\t\t\t}\n\t\t} // switch uMsg\n\n\t\treturn CWnd::WndProcDefault(uMsg, wParam, lParam);\n\t} // LRESULT CFrame::WndProcDefault(...)\n\n\n} // namespace Win32xx\n\n#endif // _WIN32XX_FRAME_H_\n"
  },
  {
    "path": "external/win32cpp/include/gdi.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n\n////////////////////////////////////////////////////////\n// gdi.h\n//  Declaration of the CDC class, and CBitmapInfoPtr class\n\n// The CDC class provides a device context, along with the various associated\n//  objects such as Bitmaps, Brushes, Bitmaps, Fonts and Pens. This class\n//  handles the creation, selection, de-selection and deletion of these objects\n//  automatically. It also automatically deletes or releases the device context\n//  itself as appropriate. Any failure to create the new GDI object throws an\n//  exception.\n//\n// The CDC class is sufficient for most GDI programming needs. Sometimes\n//  however we need to have the GDI object seperated from the device context.\n//  Wrapper classes for GDI objects are provided for this purpose. The classes\n//  are CBitmap, CBrush, CFont, CPalette, CPen and CRgn. These classes\n//  automatically delete the GDI resouce assigned to them when their destructor\n//  is called. These wrapper class objects can be attached to the CDC as\n//  shown below.\n//\n// Coding Exampe without CDC ...\n//  void DrawLine()\n//  {\n//\t  HDC hdcClient = ::GetDC(m_hWnd);\n//    HDC hdcMem = ::CreateCompatibleDC(hdcClient);\n//    HBITMAP hBitmap = ::CreateCompatibleBitmap(hdcClient, cx, cy);\n//\t  HBITMAP hOldBitmap = (HBITMAP)::SelectObject(hdcMem, hBitmap);\n//    HPEN hPen = ::CreatePen(PS_SOLID, 1, RGB(255,0,0);\n//    HPEN hOldPen = (HPEN)::SelectObject(hdcMem, hPen);\n//\t  ::MoveToEx(hdcMem, 0, 0, NULL);\n//    ::LineTo(hdcMem, 50, 50);\n//\t  ::BitBlt(hdcClient, 0, 0, cx, cy, hdcMem, 0, 0);\n//    ::SelectObject(hdcMem, hOldPen);\n//    ::DeleteObject(hPen);\n//    ::SelectObject(hdcMem, hOldBitmap);\n//    ::DeleteObject(hBitmap);\n//    ::DeleteDC(hdcMem);\n//\t  ::ReleaseDC(m_hWnd, hdcClient);\n//  }\n//\n// Coding Example with CDC classes ...\n//  void DrawLine()\n//  {\n//\t  CClientDC dcClient(this)\n//    CMemDC dcMem(&dcClient);\n//\t  CBitmap* pOldBitmap = dcMem.CreateCompatibleBitmap(&dcClient, cx, cy);\n//    CPen* pOldPen = CMemDC.CreatePen(PS_SOLID, 1, RGB(255,0,0);\n//\t  CMemDC.MoveTo(0, 0);\n//    CMemDC.LineTo(50, 50);\n//\t  dcClient.BitBlt(0, 0, cx, cy, &CMemDC, 0, 0);\n//  }\n//\n// Coding Example with CDC classes and CPen ...\n//  void DrawLine()\n//  {\n//\t  CClientDC dcClient(this)\n//    CMemDC CMemDC(&dcClient);\n//\t  CBitmap* pOldBitmap = dcMem.CreateCompatibleBitmap(&dcClient, cx, cy);\n//    CPen MyPen(PS_SOLID, 1, RGB(255,0,0));\n//    CPen* pOldPen = CMemDC.SelectObject(&MyPen);\n//\t  CMemDC.MoveTo(0, 0);\n//    CMemDC.LineTo(50, 50);\n//\t  dcClient.BitBlt(0, 0, cx, cy, &CMemDC, 0, 0);\n//  }\n\n// Notes:\n//  * When the CDC object drops out of scope, it's destructor is called, releasing\n//     or deleting the device context as appropriate.\n//  * When the destructor for CBitmap, CBrush, CPalette, CPen and CRgn are called,\n//     the destructor is called deleting their GDI object.\n//  * When the CDC object' destructor is called, any GDI objects created by one of\n//     the CDC member functions (CDC::CreatePen for example) will be deleted.\n//  * Bitmaps can only be selected into one device context at a time.\n//  * Palettes use SelectPalatte to select them into device the context.\n//  * Regions use SelectClipRgn to select them into the device context.\n//  * The FromHandle function can be used to convert a GDI handle (HDC, HPEN,\n//     HBITMAP etc) to a pointer of the appropriate GDI class (CDC, CPen CBitmap etc).\n//     The FromHandle function creates a temporary object unless the HANDLE is already\n//     assigned to a GDI class. Temporary objects don't delete their GDI object when\n//     their destructor is called.\n//  * All the GDI classes are reference counted. This allows functions to safely\n//     pass these objects by value, as well as by pointer or by reference.\n\n// The CBitmapInfoPtr class is a convienient wrapper for the BITMAPINFO structure.\n// The size of the BITMAPINFO structure is dependant on the type of HBITMAP, and its\n// space needs to be allocated dynamically. CBitmapInfoPtr automatically allocates\n// and deallocates the memory for the structure. A CBitmapInfoPtr object can be\n// used anywhere in place of a LPBITMAPINFO. LPBITMAPINFO is used in functions like\n// GetDIBits and SetDIBits.\n//\n// Coding example ...\n//  CDC MemDC = CreateCompatibleDC(NULL);\n//  CBitmapInfoPtr pbmi(hBitmap);\n//  MemDC.GetDIBits(hBitmap, 0, pbmi->bmiHeader.biHeight, NULL, pbmi, DIB_RGB_COLORS);\n\n#ifndef _WIN32XX_GDI_H_\n#define _WIN32XX_GDI_H_\n\n#include \"wincore.h\"\n\n// Disable macros from Windowsx.h\n#undef CopyRgn\n\nnamespace Win32xx\n{\n\n\t/////////////////////////////////////////////////////////////////\n\t// Declarations for some global functions in the Win32xx namespace\n\t//\n#ifndef _WIN32_WCE\n\tvoid GrayScaleBitmap(CBitmap* pbmSource);\n\tvoid TintBitmap(CBitmap* pbmSource, int cRed, int cGreen, int cBlue);\n\tHIMAGELIST CreateDisabledImageList(HIMAGELIST himlNormal);\n#endif\n\n\t///////////////////////////////////////////////\n\t// Declarations for the CGDIObject class\n\t//\n\tclass CGDIObject\n\t{\n\t\tfriend CBitmap* FromHandle(HBITMAP hBitmap);\n\t\tfriend CBrush* FromHandle(HBRUSH hBrush);\n\t\tfriend CDC* FromHandle(HDC hDC);\n\t\tfriend CFont* FromHandle(HFONT hFont);\n\t\tfriend CPalette* FromHandle(HPALETTE hPalette);\n\t\tfriend CPen* FromHandle(HPEN hPen);\n\t\tfriend CRgn* FromHandle(HRGN hRgn);\n\n\tpublic:\n\t\tstruct DataMembers\t// A structure that contains the data members for CGDIObject\n\t\t{\n\t\t\tHGDIOBJ hGDIObject;\n\t\t\tlong\tCount;\n\t\t\tBOOL\tbRemoveObject;\n\t\t};\n\t\tCGDIObject();\n\t\tCGDIObject(const CGDIObject& rhs);\n\t\tvirtual ~CGDIObject();\n\t\tCGDIObject& operator = ( const CGDIObject& rhs );\n\t\tvoid operator = (HGDIOBJ hObject);\n\n\t\tvoid\tAttach(HGDIOBJ hObject);\n\t\tHGDIOBJ Detach();\n\t\tHGDIOBJ GetHandle() const;\n\t\tint\t\tGetObject(int nCount, LPVOID pObject) const;\n\n\tprotected:\n\t\tDataMembers* m_pData;\n\n\tprivate:\n\t\tvoid\tAddToMap();\n\t\tBOOL\tRemoveFromMap();\n\t\tvoid\tRelease();\t\n\t};\n\n\n\t///////////////////////////////////////////////\n\t// Declarations for the CBitmap class\n\t//\n\tclass CBitmap : public CGDIObject\n\t{\n\t  public:\n\t\tCBitmap();\n\t\tCBitmap(HBITMAP hBitmap);\n\t\tCBitmap(LPCTSTR lpstr);\n\t\tCBitmap(int nID);\n\t\toperator HBITMAP() const;\n\t\t~CBitmap();\n\n\t\t// Create and load methods\n\t\tBOOL LoadBitmap(LPCTSTR lpszName);\n\t\tBOOL LoadBitmap(int nID);\n\t\tBOOL LoadImage(LPCTSTR lpszName, int cxDesired, int cyDesired, UINT fuLoad);\n\t\tBOOL LoadImage(UINT nID, int cxDesired, int cyDesired, UINT fuLoad);\n\t\tBOOL LoadOEMBitmap(UINT nIDBitmap);\n\t\tHBITMAP CreateBitmap(int nWidth, int nHeight, UINT nPlanes, UINT nBitsPerPixel, LPCVOID lpBits);\n\t\tHBITMAP CreateCompatibleBitmap(CDC* pDC, int nWidth, int nHeight);\n\t\tHBITMAP CreateDIBSection(CDC* pDC, CONST BITMAPINFO* lpbmi, UINT uColorUse, LPVOID* ppvBits, HANDLE hSection, DWORD dwOffset);\n\n#ifndef _WIN32_WCE\n\t\tHBITMAP CreateDIBitmap(CDC* pDC, CONST BITMAPINFOHEADER* lpbmih, DWORD dwInit, LPCVOID lpbInit, CONST BITMAPINFO* lpbmi, UINT uColorUse);\n\t\tHBITMAP CreateMappedBitmap(UINT nIDBitmap, UINT nFlags = 0, LPCOLORMAP lpColorMap = NULL, int nMapSize = 0);\n\t\tHBITMAP CreateBitmapIndirect(LPBITMAP lpBitmap);\n\t\tint GetDIBits(CDC* pDC, UINT uStartScan, UINT cScanLines,  LPVOID lpvBits, LPBITMAPINFO lpbmi, UINT uColorUse) const;\n\t\tint SetDIBits(CDC* pDC, UINT uStartScan, UINT cScanLines, CONST VOID* lpvBits, CONST BITMAPINFO* lpbmi, UINT uColorUse);\n\t\tCSize GetBitmapDimensionEx() const;\n\t\tCSize SetBitmapDimensionEx(int nWidth, int nHeight);\n#endif // !_WIN32_WCE\n\n\t\t// Attributes\n\t\tBITMAP GetBitmapData() const;\n\t};\n\n\n\t///////////////////////////////////////////////\n\t// Declarations for the CBrush class\n\t//\n\tclass CBrush : public CGDIObject\n\t{\n\t  public:\n\t\tCBrush();\n\t\tCBrush(HBRUSH hBrush);\n\t\tCBrush(COLORREF crColor);\n\t\toperator HBRUSH() const;\n\t\t~CBrush();\n\n\t\tHBRUSH CreateSolidBrush(COLORREF crColor);\n\t\tHBRUSH CreatePatternBrush(CBitmap* pBitmap);\n\t\tLOGBRUSH GetLogBrush() const;\n\n#ifndef _WIN32_WCE\n\t\tHBRUSH CreateHatchBrush(int nIndex, COLORREF crColor);\n\t\tHBRUSH CreateBrushIndirect(LPLOGBRUSH lpLogBrush);\n\t\tHBRUSH CreateDIBPatternBrush(HGLOBAL hglbDIBPacked, UINT fuColorSpec);\n\t\tHBRUSH CreateDIBPatternBrushPt(LPCVOID lpPackedDIB, UINT nUsage);\n#endif // !defined(_WIN32_WCE)\n\n\t};\n\n\n\t///////////////////////////////////////////////\n\t// Declarations for the CFont class\n\t//\n\tclass CFont : public CGDIObject\n\t{\n\tpublic:\n\t\tCFont();\n\t\tCFont(HFONT hFont);\n\t\tCFont(const LOGFONT* lpLogFont);\n\t\toperator HFONT() const;\n\t\t~CFont();\n\n\t\t// Create methods\n\t\tHFONT CreateFontIndirect(const LOGFONT* lpLogFont);\n\t\tHFONT CreatePointFont(int nPointSize, LPCTSTR lpszFaceName, CDC* pDC = NULL, BOOL bBold = FALSE, BOOL bItalic = FALSE);\n\t\tHFONT CreatePointFontIndirect(const LOGFONT* lpLogFont, CDC* pDC = NULL);\n\n#ifndef _WIN32_WCE\n\t\tHFONT CreateFont(int nHeight, int nWidth, int nEscapement,\n\t\t\t\tint nOrientation, int nWeight, DWORD dwItalic, DWORD dwUnderline,\n\t\t\t\tDWORD dwStrikeOut, DWORD dwCharSet, DWORD dwOutPrecision,\n\t\t\t\tDWORD dwClipPrecision, DWORD dwQuality, DWORD dwPitchAndFamily,\n\t\t\t\tLPCTSTR lpszFacename);\n#endif // #ifndef _WIN32_WCE\n\n\t\t// Attributes\n\t\tLOGFONT GetLogFont() const;\n\t};\n\n\n\t///////////////////////////////////////////////\n\t// Declarations for the CPalette class\n\t//\n\tclass CPalette : public CGDIObject\n\t{\n\t  public:\n\t\tCPalette();\n\t\tCPalette(HPALETTE hPalette);\n\t\toperator HPALETTE() const;\n\t\t~CPalette();\n\n\t\t// Create methods\n\t\tHPALETTE CreatePalette(LPLOGPALETTE lpLogPalette);\n\n#ifndef _WIN32_WCE\n\t\tHPALETTE CreateHalftonePalette(CDC* pDC);\n#endif // !_WIN32_WCE\n\n\t\t// Attributes\n\t\tint GetEntryCount() const;\n\t\tUINT GetPaletteEntries(UINT nStartIndex, UINT nNumEntries, LPPALETTEENTRY lpPaletteColors) const;\n\t\tUINT SetPaletteEntries(UINT nStartIndex, UINT nNumEntries, LPPALETTEENTRY lpPaletteColors);\n\n\t\t// Operations\n#ifndef _WIN32_WCE\n\t\tBOOL ResizePalette(UINT nNumEntries);\n\t\tvoid AnimatePalette(UINT nStartIndex, UINT nNumEntries, LPPALETTEENTRY lpPaletteColors);\n#endif // !_WIN32_WCE\n\n\t\tUINT GetNearestPaletteIndex (COLORREF crColor) const;\n\n\t};\n\n\n\t///////////////////////////////////////////////\n\t// Declarations for the CPen class\n\t//\n\tclass CPen : public CGDIObject\n\t{\n\tpublic:\n\t\tCPen();\n\t\tCPen(HPEN hPen);\n\t\tCPen(int nPenStyle, int nWidth, COLORREF crColor);\n#ifndef _WIN32_WCE\n\t\tCPen(int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount = 0, const DWORD* lpStyle = NULL);\n#endif // !_WIN32_WCE\n\t\toperator HPEN() const;\n\t\t~CPen();\n\n\t\tHPEN CreatePen(int nPenStyle, int nWidth, COLORREF crColor);\n\t\tHPEN CreatePenIndirect(LPLOGPEN lpLogPen);\n\t\tLOGPEN GetLogPen() const;\n\n#ifndef _WIN32_WCE\n\t\tHPEN ExtCreatePen(int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount = 0, const DWORD* lpStyle = NULL);\n\t\tEXTLOGPEN GetExtLogPen() const;\n#endif // !_WIN32_WCE\n\n\t};\n\n\n\t///////////////////////////////////////////////\n\t// Declarations for the CRgn class\n\t//\n\tclass CRgn : public CGDIObject\n\t{\n\t  public:\n\t\tCRgn();\n\t\tCRgn(HRGN hRgn);\n\t\toperator HRGN() const;\n\t\t~CRgn ();\n\n\t\t// Create methods\n\t\tHRGN CreateRectRgn(int x1, int y1, int x2, int y2);\n\t\tHRGN CreateRectRgnIndirect(const RECT& rc);\n\t\tHRGN CreateFromData(const XFORM* lpXForm, int nCount, const RGNDATA* pRgnData);\n\n#ifndef _WIN32_WCE\n\t\tHRGN CreateEllipticRgn(int x1, int y1, int x2, int y2);\n\t\tHRGN CreateEllipticRgnIndirect(const RECT& rc);\n\t\tHRGN CreatePolygonRgn(LPPOINT lpPoints, int nCount, int nMode);\n\t\tHRGN CreatePolyPolygonRgn(LPPOINT lpPoints, LPINT lpPolyCounts, int nCount, int nPolyFillMode);\n\t\tHRGN CreateRoundRectRgn(int x1, int y1, int x2, int y2, int x3, int y3);\n\t\tHRGN CreateFromPath(HDC hDC);\n#endif // !_WIN32_WCE\n\n\t\t// Operations\n\t\tvoid SetRectRgn(int x1, int y1, int x2, int y2);\n\t\tvoid SetRectRgn(const RECT& rc);\n\t\tint CombineRgn(CRgn* pRgnSrc1, CRgn* pRgnSrc2, int nCombineMode);\n\t\tint CombineRgn(CRgn* pRgnSrc, int nCombineMode);\n\t\tint CopyRgn(CRgn* pRgnSrc);\n\t\tBOOL EqualRgn(CRgn* pRgn) const;\n\t\tint OffsetRgn(int x, int y);\n\t\tint OffsetRgn(POINT& pt);\n\t\tint GetRgnBox(RECT& rc) const;\n\t\tBOOL PtInRegion(int x, int y) const;\n\t\tBOOL PtInRegion(POINT& pt) const;\n\t\tBOOL RectInRegion(const RECT& rc) const;\n\t\tint GetRegionData(LPRGNDATA lpRgnData, int nDataSize) const;\n\t};\n\n\n\t///////////////////////////////////////////////\n\t// Declarations for the CDC class\n\t//\n\tclass CDC\n\t{\n\t\tfriend class CWinApp;\n\t\tfriend class CWnd;\n\t\tfriend CDC* FromHandle(HDC hDC);\n\n\tpublic:\n\t\tstruct DataMembers\t// A structure that contains the data members for CDC\n\t\t{\n\t\t\tstd::vector<GDIPtr> m_vGDIObjects;\t// Smart pointers to internally created Bitmaps, Brushes, Fonts, Bitmaps and Regions\n\t\t\tHDC\t\thDC;\t\t\t// The HDC belonging to this CDC\n\t\t\tlong\tCount;\t\t\t// Reference count\n\t\t\tBOOL\tbRemoveHDC;\t\t// Delete/Release the HDC on destruction\n\t\t\tHWND\thWnd;\t\t\t// The HWND of a Window or Client window DC\n\t\t\tint\t\tnSavedDCState;\t// The save state of the HDC.\n\t\t};\n\n\t\tCDC();\t\t\t\t\t\t\t\t\t// Constructs a new CDC without assigning a HDC\n\t\tCDC(HDC hDC, HWND hWnd = 0);\t\t\t// Assigns a HDC to a new CDC\n\t\tCDC(const CDC& rhs);\t\t\t\t\t// Constructs a new copy of the CDC\n\t\tvirtual ~CDC();\n\t\toperator HDC() const { return m_pData->hDC; }\t// Converts a CDC to a HDC\n\t\tCDC& operator = (const CDC& rhs);\t\t// Assigns a CDC to an existing CDC\n\n\t\tvoid Attach(HDC hDC, HWND hWnd = 0);\n\t\tvoid Destroy();\n\t\tHDC  Detach();\n\t\tHDC GetHDC() const { return m_pData->hDC; }\n\t\tCPalette* SelectPalette(const CPalette* pPalette, BOOL bForceBkgnd);\n\t\tCBitmap* SelectObject(const CBitmap* pBitmap);\n\t\tCBrush* SelectObject(const CBrush* pBrush);\n\t\tCFont* SelectObject(const CFont* pFont);\n\t\tCPalette* SelectObject(const CPalette* pPalette);\n\t\tCPen* SelectObject(const CPen* pPen);\n\n#ifndef _WIN32_WCE\n\t\tvoid operator = (const HDC hDC);\n#endif\n\n\t\t// Initialization\n\t\tBOOL CreateCompatibleDC(CDC* pDC);\n\t\tBOOL CreateDC(LPCTSTR lpszDriver, LPCTSTR lpszDevice, LPCTSTR lpszOutput, const DEVMODE* pInitData);\n\t\tint GetDeviceCaps(int nIndex) const;\n#ifndef _WIN32_WCE\n\t\tBOOL CreateIC(LPCTSTR lpszDriver, LPCTSTR lpszDevice, LPCTSTR lpszOutput, const DEVMODE* pInitData);\n#endif\n\n\t\t// Create and Select Bitmaps\n\t\tCBitmap* CreateBitmap(int cx, int cy, UINT Planes, UINT BitsPerPixel, LPCVOID pvColors);\n\t\tCBitmap* CreateCompatibleBitmap(CDC* pDC, int cx, int cy);\n\t\tCBitmap* CreateDIBSection(CDC* pDC, const BITMAPINFO& bmi, UINT iUsage, LPVOID *ppvBits,\n\t\t\t\t\t\t\t\t\t\tHANDLE hSection, DWORD dwOffset);\n\t\tBITMAP  GetBitmapData() const;\n\t\tCBitmap* LoadBitmap(UINT nID);\n\t\tCBitmap* LoadBitmap(LPCTSTR lpszName);\n\t\tCBitmap* LoadImage(UINT nID, int cxDesired, int cyDesired, UINT fuLoad);\n\t\tCBitmap* LoadImage(LPCTSTR lpszName, int cxDesired, int cyDesired, UINT fuLoad);\n\t\tCBitmap* LoadOEMBitmap(UINT nIDBitmap); // for OBM_/OCR_/OIC\n\n#ifndef _WIN32_WCE\n\t\tCBitmap* CreateBitmapIndirect(LPBITMAP pBitmap);\n\t\tCBitmap* CreateDIBitmap(CDC* pDC, const BITMAPINFOHEADER& bmih, DWORD fdwInit, LPCVOID lpbInit,\n\t\t\t\t\t\t\t\t\t\tBITMAPINFO& bmi, UINT fuUsage);\n\t\tCBitmap* CreateMappedBitmap(UINT nIDBitmap, UINT nFlags /*= 0*/, LPCOLORMAP lpColorMap /*= NULL*/, int nMapSize /*= 0*/);\n#endif\n\n\t\t// Create and Select Brushes\n\t\tCBrush* CreatePatternBrush(CBitmap* pBitmap);\n\t\tCBrush* CreateSolidBrush(COLORREF rbg);\n\t\tLOGBRUSH GetLogBrush() const;\n\n#ifndef _WIN32_WCE\n\t\tCBrush* CreateBrushIndirect(LPLOGBRUSH pLogBrush);\n\t\tCBrush* CreateHatchBrush(int fnStyle, COLORREF rgb);\n\t\tCBrush* CreateDIBPatternBrush(HGLOBAL hglbDIBPacked, UINT fuColorSpec);\n\t\tCBrush* CreateDIBPatternBrushPt(LPCVOID lpPackedDIB, UINT iUsage);\n#endif\n\n\t\t// Create and Select Fonts\n\t\tCFont* CreateFontIndirect(LPLOGFONT plf);\n\t\tLOGFONT GetLogFont() const;\n\n#ifndef _WIN32_WCE\n\t\tCFont* CreateFont(int nHeight, int nWidth, int nEscapement, int nOrientation, int fnWeight,\n  \t\t\t\t\t\t\tDWORD fdwItalic, DWORD fdwUnderline, DWORD fdwStrikeOut, DWORD fdwCharSet,\n  \t\t\t\t\t\t\tDWORD fdwOutputPrecision, DWORD fdwClipPrecision, DWORD fdwQuality,\n  \t\t\t\t\t\t\tDWORD fdwPitchAndFamily, LPCTSTR lpszFace);\n#endif\n\n\t\t// Create and Select Pens\n\t\tCPen* CreatePen(int nStyle, int nWidth, COLORREF rgb);\n\t\tCPen* CreatePenIndirect(LPLOGPEN pLogPen);\n\t\tLOGPEN GetLogPen() const;\n\n\t\t// Create Select Regions\n\t\tint CreateRectRgn(int left, int top, int right, int bottom);\n\t\tint CreateRectRgnIndirect(const RECT& rc);\n\t\tint CreateFromData(const XFORM* Xform, DWORD nCount, const RGNDATA *pRgnData);\n#ifndef _WIN32_WCE\n\t\tint CreateEllipticRgn(int left, int top, int right, int bottom);\n\t\tint CreateEllipticRgnIndirect(const RECT& rc);\n\t\tint CreatePolygonRgn(LPPOINT ppt, int cPoints, int fnPolyFillMode);\n\t\tint CreatePolyPolygonRgn(LPPOINT ppt, LPINT pPolyCounts, int nCount, int fnPolyFillMode);\n#endif\n\n\t\t// Wrappers for WinAPI functions\n\n\t\t// Point and Line Drawing Functions\n\t\tCPoint GetCurrentPosition() const;\n\t\tCPoint MoveTo(int x, int y) const;\n\t\tCPoint MoveTo(POINT pt) const;\n\t\tBOOL LineTo(int x, int y) const;\n\t\tBOOL LineTo(POINT pt) const;\n\t\tCOLORREF GetPixel(int x, int y) const;\n\t\tCOLORREF GetPixel(POINT pt) const;\n\t\tCOLORREF SetPixel(int x, int y, COLORREF crColor) const;\n\t\tCOLORREF SetPixel(POINT pt, COLORREF crColor) const;\n#ifndef _WIN32_WCE\n\t\tBOOL Arc(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) const;\n\t\tBOOL Arc(RECT& rc, POINT ptStart, POINT ptEnd) const;\n\t\tBOOL ArcTo(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) const;\n\t\tBOOL ArcTo(RECT& rc, POINT ptStart, POINT ptEnd) const;\n\t\tBOOL AngleArc(int x, int y, int nRadius, float fStartAngle, float fSweepAngle) const;\n\t\tint  GetArcDirection() const;\n\t\tint  SetArcDirection(int nArcDirection) const;\n\t\tBOOL PolyDraw(const POINT* lpPoints, const BYTE* lpTypes, int nCount) const;\n\t\tBOOL Polyline(LPPOINT lpPoints, int nCount) const;\n\t\tBOOL PolyPolyline(const POINT* lpPoints, const DWORD* lpPolyPoints, int nCount) const;\n\t\tBOOL PolylineTo(const POINT* lpPoints, int nCount) const;\n\t\tBOOL PolyBezier(const POINT* lpPoints, int nCount) const;\n\t\tBOOL PolyBezierTo(const POINT* lpPoints, int nCount) const;\n\t\tBOOL SetPixelV(int x, int y, COLORREF crColor) const;\n\t\tBOOL SetPixelV(POINT pt, COLORREF crColor) const;\n#endif\n\n\t\t// Shape Drawing Functions\n\t\tvoid DrawFocusRect(const RECT& rc) const;\n\t\tBOOL Ellipse(int x1, int y1, int x2, int y2) const;\n\t\tBOOL Ellipse(const RECT& rc) const;\n\t\tBOOL Polygon(LPPOINT lpPoints, int nCount) const;\n\t\tBOOL Rectangle(int x1, int y1, int x2, int y2) const;\n\t\tBOOL Rectangle(const RECT& rc) const;\n\t\tBOOL RoundRect(int x1, int y1, int x2, int y2, int nWidth, int nHeight) const;\n\t\tBOOL RoundRect(const RECT& rc, int nWidth, int nHeight) const;\n\n#ifndef _WIN32_WCE\n\t\tBOOL Chord(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) const;\n\t\tBOOL Chord(const RECT& rc, POINT ptStart, POINT ptEnd) const;\n\t\tBOOL Pie(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) const;\n\t\tBOOL Pie(const RECT& rc, POINT ptStart, POINT ptEnd) const;\n\t\tBOOL PolyPolygon(LPPOINT lpPoints, LPINT lpPolyCounts, int nCount) const;\n#endif\n\n\t\t// Fill and Image Drawing functions\n\t\tBOOL FillRect(const RECT& rc, CBrush* pBrushr) const;\n\t\tBOOL InvertRect(const RECT& rc) const;\n\t\tBOOL DrawIconEx(int xLeft, int yTop, HICON hIcon, int cxWidth, int cyWidth, UINT istepIfAniCur, CBrush* pFlickerFreeDraw, UINT diFlags) const;\n\t\tBOOL DrawEdge(const RECT& rc, UINT nEdge, UINT nFlags) const;\n\t\tBOOL DrawFrameControl(const RECT& rc, UINT nType, UINT nState) const;\n\t\tBOOL FillRgn(CRgn* pRgn, CBrush* pBrush) const;\n\t\tvoid GradientFill(COLORREF Color1, COLORREF Color2, const RECT& rc, BOOL bVertical);\n\t\tvoid SolidFill(COLORREF Color, const RECT& rc);\n\n#ifndef _WIN32_WCE\n\t\tBOOL DrawIcon(int x, int y, HICON hIcon) const;\n\t\tBOOL DrawIcon(POINT point, HICON hIcon) const;\n\t\tBOOL FrameRect(const RECT& rc, CBrush* pBrush) const;\n\t\tBOOL PaintRgn(CRgn* pRgn) const;\n#endif\n\n\t\t// Bitmap Functions\n\t\tvoid DrawBitmap(int x, int y, int cx, int cy, CBitmap& Bitmap, COLORREF clrMask);\n\t\tint  StretchDIBits(int XDest, int YDest, int nDestWidth, int nDestHeight, int XSrc, int YSrc, int nSrcWidth,\n\t\t\t           int nSrcHeight, CONST VOID *lpBits, BITMAPINFO& bi, UINT iUsage, DWORD dwRop) const;\n\t\tBOOL PatBlt(int x, int y, int nWidth, int nHeight, DWORD dwRop) const;\n\t\tBOOL BitBlt(int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop) const;\n\t\tBOOL StretchBlt(int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop) const;\n\n#ifndef _WIN32_WCE\n\t\tint  GetDIBits(CBitmap* pBitmap, UINT uStartScan, UINT cScanLines, LPVOID lpvBits, LPBITMAPINFO lpbi, UINT uUsage) const;\n\t\tint  SetDIBits(CBitmap* pBitmap, UINT uStartScan, UINT cScanLines, CONST VOID *lpvBits, LPBITMAPINFO lpbi, UINT fuColorUse) const;\n\t\tint  GetStretchBltMode() const;\n\t\tint  SetStretchBltMode(int iStretchMode) const;\n\t\tBOOL FloodFill(int x, int y, COLORREF crColor) const;\n\t\tBOOL ExtFloodFill(int x, int y, COLORREF crColor, UINT nFillType) const;\n#endif\n\n\t\t// Brush Functions\n#ifdef GetDCBrushColor\n\t\tCOLORREF GetDCBrushColor() const;\n\t\tCOLORREF SetDCBrushColor(COLORREF crColor) const;\n#endif\n\n\t\t// Clipping Functions\n\t\tint  ExcludeClipRect(int Left, int Top, int Right, int BottomRect);\n\t\tint  ExcludeClipRect(const RECT& rc);\n\t\tint  GetClipBox(RECT& rc);\n\t\tint  GetClipRgn(HRGN hrgn);\n\t\tint  IntersectClipRect(int Left, int Top, int Right, int Bottom);\n\t\tint  IntersectClipRect(const RECT& rc);\n\t\tBOOL RectVisible(const RECT& rc);\n\t\tint  SelectClipRgn(CRgn* pRgn);\n\n#ifndef _WIN32_WCE\n\t\tint  ExtSelectClipRgn(CRgn* pRgn, int fnMode);\n\t\tint  OffsetClipRgn(int nXOffset, int nYOffset);\n\t\tBOOL PtVisible(int X, int Y);\n#endif\n\n        // Co-ordinate Functions\n#ifndef _WIN32_WCE\n\t\tBOOL DPtoLP(LPPOINT lpPoints, int nCount)  const;\n\t\tBOOL DPtoLP(RECT& rc)  const;\n\t\tBOOL LPtoDP(LPPOINT lpPoints, int nCount)  const;\n\t\tBOOL LPtoDP(RECT& rc)  const;\n#endif\n\n\t\t// Layout Functions\n\t\tDWORD GetLayout() const;\n\t\tDWORD SetLayout(DWORD dwLayout) const;\n\n\t\t// Mapping functions\n#ifndef _WIN32_WCE\n\t\tint  GetMapMode() const;\n\t\tint  SetMapMode(int nMapMode) const;\n\t\tBOOL GetViewportOrgEx(LPPOINT lpPoint)  const;\n\t\tBOOL SetViewportOrgEx(int x, int y, LPPOINT lpPoint = NULL) const;\n\t\tBOOL SetViewportOrgEx(POINT point, LPPOINT lpPointRet = NULL) const;\n\t\tBOOL OffsetViewportOrgEx(int nWidth, int nHeight, LPPOINT lpPoint = NULL) const;\n\t\tBOOL GetViewportExtEx(LPSIZE lpSize)  const;\n\t\tBOOL SetViewportExtEx(int x, int y, LPSIZE lpSize) const;\n\t\tBOOL SetViewportExtEx(SIZE size, LPSIZE lpSizeRet) const;\n\t\tBOOL ScaleViewportExtEx(int xNum, int xDenom, int yNum, int yDenom, LPSIZE lpSize) const;\n\t\tBOOL OffsetWindowOrg(int nWidth, int nHeight, LPPOINT lpPoint) const;\n\t\tBOOL GetWindowExtEx(LPSIZE lpSize)  const;\n\t\tBOOL SetWindowExtEx(int x, int y, LPSIZE lpSize) const;\n\t\tBOOL SetWindowExtEx(SIZE size, LPSIZE lpSizeRet) const;\n\t\tBOOL ScaleWindowExtEx(int xNum, int xDenom, int yNum, int yDenom, LPSIZE lpSize) const;\n\t\tBOOL GetWindowOrgEx(LPPOINT lpPoint)  const;\n\t\tBOOL SetWindowOrgEx(int x, int y, LPPOINT lpPoint) const;\n\t\tBOOL SetWindowOrgEx(POINT point, LPPOINT lpPointRet) const;\n\t\tBOOL OffsetWindowOrgEx(int nWidth, int nHeight, LPPOINT lpPoint) const;\n#endif\n\n\t\t// Printer Functions\n\t\tint StartDoc(LPDOCINFO lpDocInfo) const;\n\t\tint EndDoc() const;\n\t\tint StartPage() const;\n\t\tint EndPage() const;\n\t\tint AbortDoc() const;\n\t\tint SetAbortProc(BOOL (CALLBACK* lpfn)(HDC, int)) const;\n\n\t\t// Text Functions\n\t\tint  DrawText(LPCTSTR lpszString, int nCount, LPRECT lprc, UINT nFormat) const;\n\t\tBOOL ExtTextOut(int x, int y, UINT nOptions, LPCRECT lprc, LPCTSTR lpszString, int nCount = -1, LPINT lpDxWidths = NULL) const;\n\t\tCOLORREF GetBkColor() const;\n\t\tint  GetBkMode() const;\n\t\tUINT GetTextAlign() const;\n\t\tint  GetTextFace(int nCount, LPTSTR lpszFacename) const;\n\t\tCOLORREF GetTextColor() const;\n\t\tBOOL  GetTextMetrics(TEXTMETRIC& Metrics) const;\n\t\tCOLORREF SetBkColor(COLORREF crColor) const;\n\t\tint  SetBkMode(int iBkMode) const;\n\t\tUINT  SetTextAlign(UINT nFlags) const;\n\t\tCOLORREF SetTextColor(COLORREF crColor) const;\n\n#ifndef _WIN32_WCE\n\t\tint   DrawTextEx(LPTSTR lpszString, int nCount, LPRECT lprc, UINT nFormat, LPDRAWTEXTPARAMS lpDTParams) const;\n\t\tCSize GetTabbedTextExtent(LPCTSTR lpszString, int nCount, int nTabPositions, LPINT lpnTabStopPositions) const;\n\t\tint   GetTextCharacterExtra() const;\n\t\tCSize GetTextExtentPoint32(LPCTSTR lpszString, int nCount) const;\n\t\tBOOL  GrayString(CBrush* pBrush, GRAYSTRINGPROC lpOutputFunc, LPARAM lpData, int nCount, int x, int y, int nWidth, int nHeight) const;\n\t\tint   SetTextCharacterExtra(int nCharExtra) const;\n\t\tint   SetTextJustification(int nBreakExtra, int nBreakCount) const;\n\t\tCSize TabbedTextOut(int x, int y, LPCTSTR lpszString, int nCount, int nTabPositions, LPINT lpnTabStopPositions, int nTabOrigin) const;\n\t\tBOOL  TextOut(int x, int y, LPCTSTR lpszString, int nCount = -1) const;\n#endif\n\n\tprivate:\n\t\tvoid AddToMap();\n\t\tstatic CDC* AddTempHDC(HDC hDC, HWND hWnd);\n\t\tvoid Release();\n\t\tBOOL RemoveFromMap();\n\n\t\tDataMembers* m_pData;\t\t// pointer to the class's data members\n\t};\n\n\tclass CClientDC : public CDC\n\t{\n\tpublic:\n\t\tCClientDC(const CWnd* pWnd)\n\t\t{\n\t\t\tif (pWnd) assert(pWnd->IsWindow());\n\t\t\tHWND hWnd = pWnd? pWnd->GetHwnd() : GetDesktopWindow();\n\t\t\tAttach(::GetDC(hWnd), hWnd);\n\t\t}\n\t\tvirtual ~CClientDC() {}\n\t};\n\n\tclass CMemDC : public CDC\n\t{\n\tpublic:\n\t\tCMemDC(const CDC* pDC)\n\t\t{\n\t\t\tif (pDC) assert(pDC->GetHDC());\n\t\t\tHDC hDC = pDC? pDC->GetHDC() : NULL;\n\t\t\tAttach(::CreateCompatibleDC(hDC));\n\t\t}\n\t\tvirtual ~CMemDC() {}\n\t};\n\n\tclass CPaintDC : public CDC\n\t{\n\tpublic:\n\t\tCPaintDC(const CWnd* pWnd)\n\t\t{\n\t\t\tassert(pWnd->IsWindow());\n\t\t\tm_hWnd = pWnd->GetHwnd();\n\t\t\tAttach(::BeginPaint(pWnd->GetHwnd(), &m_ps), m_hWnd);\n\t\t}\n\n\t\tvirtual ~CPaintDC()\t{ ::EndPaint(m_hWnd, &m_ps); }\n\n\tprivate:\n\t\tHWND m_hWnd;\n\t\tPAINTSTRUCT m_ps;\n\t};\n\n\tclass CWindowDC : public CDC\n\t{\n\tpublic:\n\t\tCWindowDC(const CWnd* pWnd)\n\t\t{\n\t\t\tif (pWnd) assert(pWnd->IsWindow());\n\t\t\tHWND hWnd = pWnd? pWnd->GetHwnd() : GetDesktopWindow();\n\t\t\tAttach(::GetWindowDC(hWnd), hWnd);\n\t\t}\n\t\tvirtual ~CWindowDC() {}\n\t};\n\n#ifndef _WIN32_WCE\n\tclass CMetaFileDC : public CDC\n\t{\n\tpublic:\n\t\tCMetaFileDC() : m_hMF(0), m_hEMF(0) {}\n\t\tvirtual ~CMetaFileDC()\n\t\t{\n\t\t\tif (m_hMF)\n\t\t\t{\n\t\t\t\t::CloseMetaFile(GetHDC());\n\t\t\t\t::DeleteMetaFile(m_hMF);\n\t\t\t}\n\t\t\tif (m_hEMF)\n\t\t\t{\n\t\t\t\t::CloseEnhMetaFile(GetHDC());\n\t\t\t\t::DeleteEnhMetaFile(m_hEMF);\n\t\t\t}\n\t\t}\n\t\tvoid Create(LPCTSTR lpszFilename = NULL) { Attach(::CreateMetaFile(lpszFilename)); }\n\t\tvoid CreateEnhanced(CDC* pDCRef, LPCTSTR lpszFileName, LPCRECT lpBounds, LPCTSTR lpszDescription)\n\t\t{\n\t\t\tHDC hDC = pDCRef? pDCRef->GetHDC() : NULL;\n\t\t\t::CreateEnhMetaFile(hDC, lpszFileName, lpBounds, lpszDescription);\n\t\t\tassert(GetHDC());\n\t\t}\n\t\tHMETAFILE Close() {\treturn ::CloseMetaFile(GetHDC()); }\n\t\tHENHMETAFILE CloseEnhanced() { return ::CloseEnhMetaFile(GetHDC()); }\n\n\tprivate:\n\t\tHMETAFILE m_hMF;\n\t\tHENHMETAFILE m_hEMF;\n\t};\n#endif\n\n\n\t///////////////////////////////////////////////\n\t// Declarations for the CBitmapInfoPtr class\n\t// The CBitmapInfoPtr class is a convienient wrapper for the BITMAPINFO structure.\n\tclass CBitmapInfoPtr\n\t{\n\tpublic:\n\t\tCBitmapInfoPtr(CBitmap* pBitmap)\n\t\t{\n\t\t\tBITMAP bmSource = pBitmap->GetBitmapData();\n\n\t\t\t// Convert the color format to a count of bits.\n\t\t\tWORD cClrBits = (WORD)(bmSource.bmPlanes * bmSource.bmBitsPixel);\n\t\t\tif (cClrBits == 1) \t     cClrBits = 1;\n\t\t\telse if (cClrBits <= 4)  cClrBits = 4;\n\t\t\telse if (cClrBits <= 8)  cClrBits = 8;\n\t\t\telse if (cClrBits <= 16) cClrBits = 16;\n\t\t\telse if (cClrBits <= 24) cClrBits = 24;\n\t\t\telse                     cClrBits = 32;\n\n\t\t\t// Allocate memory for the BITMAPINFO structure.\n\t\t\tUINT uQuadSize = (cClrBits == 24)? 0 : sizeof(RGBQUAD) * (int)(1 << cClrBits);\n\t\t\tm_bmi.assign(sizeof(BITMAPINFOHEADER) + uQuadSize, 0);\n\t\t\tm_pbmiArray = (LPBITMAPINFO) &m_bmi[0];\n\n\t\t\tm_pbmiArray->bmiHeader.biSize\t\t= sizeof(BITMAPINFOHEADER);\n\t\t\tm_pbmiArray->bmiHeader.biHeight\t\t= bmSource.bmHeight;\n\t\t\tm_pbmiArray->bmiHeader.biWidth\t\t= bmSource.bmWidth;\n\t\t\tm_pbmiArray->bmiHeader.biPlanes\t\t= bmSource.bmPlanes;\n\t\t\tm_pbmiArray->bmiHeader.biBitCount\t= bmSource.bmBitsPixel;\n\t\t\tm_pbmiArray->bmiHeader.biCompression = BI_RGB;\n\t\t\tif (cClrBits < 24)\n\t\t\t\tm_pbmiArray->bmiHeader.biClrUsed = (1<<cClrBits);\n\t\t}\n\t\tLPBITMAPINFO get() const { return m_pbmiArray; }\n\t\toperator LPBITMAPINFO() const { return m_pbmiArray; }\n\t\tLPBITMAPINFO operator->() const { return m_pbmiArray; }\n\n\tprivate:\n\t\tCBitmapInfoPtr(const CBitmapInfoPtr&);\t\t\t\t// Disable copy construction\n\t\tCBitmapInfoPtr& operator = (const CBitmapInfoPtr&);\t// Disable assignment operator\n\t\tLPBITMAPINFO m_pbmiArray;\n\t\tstd::vector<byte> m_bmi;\n\t};\n\n\n\tCBitmap* FromHandle(HBITMAP hBitmap);\n\tCBrush* FromHandle(HBRUSH hBrush);\n\tCFont* FromHandle(HFONT hFont);\n\tCPalette* FromHandle(HPALETTE hPalette);\n\tCPen* FromHandle(HPEN hPen);\n\tCRgn* FromHandle(HRGN hRgn);\n\n}\n\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n\nnamespace Win32xx\n{\n\n\t///////////////////////////////////////////////\n\t// Declarations for the CGDIObject class\n\t//\n\n\tinline CGDIObject::CGDIObject()\n\t// Constructs the CGDIObject\n\t{\n\t\tm_pData = new DataMembers;\n\t\tm_pData->hGDIObject = 0;\n\t\tm_pData->Count = 1L;\n\t\tm_pData->bRemoveObject = TRUE;\n\t}\n\n\tinline CGDIObject::CGDIObject(const CGDIObject& rhs)\n\t// Note: A copy of a CGDIObject is a clone of the original.\n\t//       Both objects manipulate the one HGDIOBJ.\n\t{\n\t\tm_pData = rhs.m_pData;\n\t\tInterlockedIncrement(&m_pData->Count);\n\t}\n\n\tinline CGDIObject::~CGDIObject()\n\t// Deconstructs the CGDIObject\n\t{\n\t\tRelease();\n\t}\n\n\tinline CGDIObject& CGDIObject::operator = ( const CGDIObject& rhs )\n\t// Note: A copy of a CGDIObject is a clone of the original.\n\t//       Both objects manipulate the one HGDIOBJ.\n\t{\n\t\tif (this != &rhs)\n\t\t{\n\t\t\tInterlockedIncrement(&rhs.m_pData->Count);\n\t\t\tRelease();\n\t\t\tm_pData = rhs.m_pData;\n\t\t}\n\n\t\treturn *this;\n\t}\n\n\tinline void CGDIObject::operator = (HGDIOBJ hObject)\n\t{\n\t\tassert(m_pData);\n\t\tassert (m_pData->hGDIObject == NULL);\n\t\tm_pData->hGDIObject = hObject;\n\t}\n\n\tinline void CGDIObject::AddToMap()\n\t// Store the HDC and CDC pointer in the HDC map\n\t{\n\t\tassert( GetApp() );\n\t\tGetApp()->m_csMapLock.Lock();\n\n\t\tassert(m_pData->hGDIObject);\n\t\tassert(!GetApp()->GetCGDIObjectFromMap(m_pData->hGDIObject));\n\n\t\tGetApp()->m_mapGDI.insert(std::make_pair(m_pData->hGDIObject, this));\n\t\tGetApp()->m_csMapLock.Release();\n\t}\n\n\tinline void CGDIObject::Attach(HGDIOBJ hObject)\n\t// Attaches a GDI HANDLE to the CGDIObject.\n\t// The HGDIOBJ will be automatically deleted when the destructor is called unless it is detached.\n\t{\n\t\tassert(m_pData);\n\n\t\tif (m_pData->hGDIObject != NULL && m_pData->hGDIObject != hObject)\n\t\t{\n\t\t\t::DeleteObject(Detach());\n\t\t}\n\n\t\tCGDIObject* pObject = GetApp()->GetCGDIObjectFromMap(hObject);\n\t\tif (pObject)\n\t\t{\n\t\t\tdelete m_pData;\n\t\t\tm_pData = pObject->m_pData;\n\t\t\tInterlockedIncrement(&m_pData->Count);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_pData->hGDIObject = hObject;\n\t\t\tAddToMap();\n\t\t}\n\t}\n\n\tinline HGDIOBJ CGDIObject::Detach()\n\t// Detaches the HGDIOBJ from this object.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject);\n\n\t\tGetApp()->m_csMapLock.Lock();\n\t\tRemoveFromMap();\n\t\tHGDIOBJ hObject = m_pData->hGDIObject;\n\t\tm_pData->hGDIObject = 0;\n\n\t\tif (m_pData->Count)\n\t\t{\n\t\t\tif (InterlockedDecrement(&m_pData->Count) == 0)\n\t\t\t{\n\t\t\t\tdelete m_pData;\n\t\t\t}\n\t\t}\n\n\t\tGetApp()->m_csMapLock.Release();\n\n\t\t// Assign values to our data members\n\t\tm_pData = new DataMembers;\n\t\tm_pData->hGDIObject = 0;\n\t\tm_pData->Count = 1L;\n\t\tm_pData->bRemoveObject = TRUE;\n\n\t\treturn hObject;\n\t}\n\n\tinline HGDIOBJ CGDIObject::GetHandle() const\n\t{\n\t\tassert(m_pData);\n\t\treturn m_pData->hGDIObject;\n\t}\n\n\tinline int CGDIObject::GetObject(int nCount, LPVOID pObject) const\n\t{\n\t\tassert(m_pData);\n\t\treturn ::GetObject(m_pData->hGDIObject, nCount, pObject);\n\t}\n\n\tinline void CGDIObject::Release()\n\t{\n\t\tassert(m_pData);\n\t\tBOOL bSucceeded = TRUE;\n\n\t\tif (InterlockedDecrement(&m_pData->Count) == 0)\n\t\t{\n\t\t\tif (m_pData->hGDIObject != NULL)\n\t\t\t{\n\t\t\t\tif (m_pData->bRemoveObject)\n\t\t\t\t\tbSucceeded = ::DeleteObject(m_pData->hGDIObject);\n\t\t\t\telse\n\t\t\t\t\tbSucceeded = TRUE;\n\t\t\t}\n\n\t\t\tRemoveFromMap();\n\t\t\tdelete m_pData;\n\t\t\tm_pData = 0;\n\t\t}\n\n\t\tassert(bSucceeded);\n\t}\n\n\tinline BOOL CGDIObject::RemoveFromMap()\n\t{\n\t\tBOOL Success = FALSE;\n\n\t\tif( GetApp() )\n\t\t{\n\t\t\t// Allocate an iterator for our HDC map\n\t\t\tstd::map<HGDIOBJ, CGDIObject*, CompareGDI>::iterator m;\n\n\t\t\tCWinApp* pApp = GetApp();\n\t\t\tif (pApp)\n\t\t\t{\n\t\t\t\t// Erase the CGDIObject pointer entry from the map\n\t\t\t\tpApp->m_csMapLock.Lock();\n\t\t\t\tm = pApp->m_mapGDI.find(m_pData->hGDIObject);\n\t\t\t\tif (m != pApp->m_mapGDI.end())\n\t\t\t\t{\n\t\t\t\t\tpApp->m_mapGDI.erase(m);\n\t\t\t\t\tSuccess = TRUE;\n\t\t\t\t}\n\n\t\t\t\tpApp->m_csMapLock.Release();\n\t\t\t}\n\t\t}\n\n\t\treturn Success;\n\t}\n\n\n\t///////////////////////////////////////////////\n\t// Declarations for the CBitmap class\n\t//\n\tinline CBitmap::CBitmap()\n\t{\n\t}\n\n\tinline CBitmap::CBitmap(HBITMAP hBitmap)\n\t{\n\t\tassert(m_pData);\n\t\tAttach(hBitmap);\n\t}\n\n\tinline CBitmap::CBitmap(LPCTSTR lpszName)\n\t{\n\t\tLoadBitmap(lpszName);\n\t}\n\n\tinline CBitmap::CBitmap(int nID)\n\t{\n\t\tLoadBitmap(nID);\n\t}\n\n\tinline CBitmap::operator HBITMAP() const\n\t{\n\t\tassert(m_pData);\n\t\treturn (HBITMAP)m_pData->hGDIObject;\n\t}\n\n\tinline CBitmap::~CBitmap()\n\t{\n\t}\n\n\tinline BOOL CBitmap::LoadBitmap(int nID)\n\t// Loads a bitmap from a resource using the resource ID.\n\t{\n\t\treturn LoadBitmap(MAKEINTRESOURCE(nID));\n\t}\n\n\tinline BOOL CBitmap::LoadBitmap(LPCTSTR lpszName)\n\t// Loads a bitmap from a resource using the resource string.\n\t{\n\t\tassert(GetApp());\n\t\tassert(m_pData);\n\n\t\tHBITMAP hBitmap = (HBITMAP)::LoadImage(GetApp()->GetResourceHandle(), lpszName, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);\n\t\tif (hBitmap)\n\t\t{\n\t\t\tAttach(hBitmap);\n\t\t}\n\t\treturn (0 != hBitmap);\t// boolean expression\n\t}\n\n\tinline BOOL CBitmap::LoadImage(UINT nID, int cxDesired, int cyDesired, UINT fuLoad)\n\t// Loads a bitmap from a resource using the resource ID.\n\t{\n\t\treturn LoadImage(MAKEINTRESOURCE(nID), cxDesired, cyDesired, fuLoad);\n\t}\n\n\tinline BOOL CBitmap::LoadImage(LPCTSTR lpszName, int cxDesired, int cyDesired, UINT fuLoad)\n\t// Loads a bitmap from a resource using the resource string.\n\t{\n\t\tassert(GetApp());\n\t\tassert(m_pData);\n\n\t\tHBITMAP hBitmap = (HBITMAP)::LoadImage(GetApp()->GetResourceHandle(), lpszName, IMAGE_BITMAP, cxDesired, cyDesired, fuLoad);\n\t\tif (hBitmap)\n\t\t{\n\t\t\tAttach(hBitmap);\n\t\t}\n\t\treturn (0 != hBitmap);\t// boolean expression\n\t}\n\n\tinline BOOL CBitmap::LoadOEMBitmap(UINT nIDBitmap) // for OBM_/OCR_/OIC_\n\t// Loads a predefined bitmap\n\t// Predefined bitmaps include: OBM_BTNCORNERS, OBM_BTSIZE, OBM_CHECK, OBM_CHECKBOXES, OBM_CLOSE, OBM_COMBO\n\t//  OBM_DNARROW, OBM_DNARROWD, OBM_DNARROWI, OBM_LFARROW, OBM_LFARROWD, OBM_LFARROWI, OBM_MNARROW,OBM_OLD_CLOSE\n\t//  OBM_OLD_DNARROW, OBM_OLD_LFARROW, OBM_OLD_REDUCE, OBM_OLD_RESTORE, OBM_OLD_RGARROW, OBM_OLD_UPARROW\n\t//  OBM_OLD_ZOOM, OBM_REDUCE, OBM_REDUCED, OBM_RESTORE, OBM_RESTORED, OBM_RGARROW, OBM_RGARROWD, OBM_RGARROWI\n\t//  OBM_SIZE, OBM_UPARROW, OBM_UPARROWD, OBM_UPARROWI, OBM_ZOOM, OBM_ZOOMD\n\t{\n\t\tassert(m_pData);\n\n\t\tHBITMAP hBitmap = ::LoadBitmap(NULL, MAKEINTRESOURCE(nIDBitmap));\n\t\tif (hBitmap)\n\t\t{\n\t\t\tAttach( ::LoadBitmap(NULL, MAKEINTRESOURCE(nIDBitmap)) );\n\t\t}\n\t\treturn (0 != hBitmap);\t// boolean expression\n\t}\n\n#ifndef _WIN32_WCE\n\t\tinline HBITMAP CBitmap::CreateMappedBitmap(UINT nIDBitmap, UINT nFlags /*= 0*/, LPCOLORMAP lpColorMap /*= NULL*/, int nMapSize /*= 0*/)\n\t\t// Creates a new bitmap using the bitmap data and colors specified by the bitmap resource and the color mapping information.\n\t\t{\n\t\t\tassert(GetApp());\n\t\t\tassert(m_pData);\n\t\t\tHBITMAP hBitmap = ::CreateMappedBitmap(GetApp()->GetResourceHandle(), nIDBitmap, (WORD)nFlags, lpColorMap, nMapSize);\n\t\t\tAttach(hBitmap);\n\t\t\treturn hBitmap;\n\t\t}\n#endif // !_WIN32_WCE\n\n\t\tinline HBITMAP CBitmap::CreateBitmap(int nWidth, int nHeight, UINT nPlanes, UINT nBitsPerPixel, LPCVOID lpBits)\n\t\t// Creates a bitmap with the specified width, height, and color format (color planes and bits-per-pixel).\n\t\t{\n\t\t\tassert(m_pData);\n\t\t\tHBITMAP hBitmap = ::CreateBitmap(nWidth, nHeight, nPlanes, nBitsPerPixel, lpBits);\n\t\t\tAttach(hBitmap);\n\t\t\treturn hBitmap;\n\t\t}\n\n#ifndef _WIN32_WCE\n\t\tinline HBITMAP CBitmap::CreateBitmapIndirect(LPBITMAP lpBitmap)\n\t\t// Creates a bitmap with the width, height, and color format specified in the BITMAP structure.\n\t\t{\n\t\t\tassert(m_pData);\n\t\t\tHBITMAP hBitmap = ::CreateBitmapIndirect(lpBitmap);\n\t\t\tAttach(hBitmap);\n\t\t\treturn hBitmap;\n\t\t}\n#endif // !_WIN32_WCE\n\n\t\tinline HBITMAP CBitmap::CreateCompatibleBitmap(CDC* pDC, int nWidth, int nHeight)\n\t\t// Creates a bitmap compatible with the device that is associated with the specified device context.\n\t\t{\n\t\t\tassert(m_pData);\n\t\t\tassert(pDC);\n\t\t\tHBITMAP hBitmap = ::CreateCompatibleBitmap(pDC->GetHDC(), nWidth, nHeight);\n\t\t\tAttach(hBitmap);\n\t\t\treturn hBitmap;\n\t\t}\n\n\t\t// Attributes\n\t\tinline BITMAP CBitmap::GetBitmapData() const\n\t\t// Retrieves the BITMAP structure\n\t\t{\n\t\t\tassert(m_pData);\n\t\t\tassert(m_pData->hGDIObject != NULL);\n\t\t\tBITMAP bmp = {0};\n\t\t\t::GetObject(m_pData->hGDIObject, sizeof(BITMAP), &bmp);\n\t\t\treturn bmp;\n\t\t}\n\n#ifndef _WIN32_WCE\n\t\tinline CSize CBitmap::GetBitmapDimensionEx() const\n\t\t// Retrieves the dimensions of a compatible bitmap.\n\t\t// The retrieved dimensions must have been set by the SetBitmapDimensionEx function.\n\t\t{\n\t\t\tassert(m_pData);\n\t\t\tassert(m_pData->hGDIObject != NULL);\n\t\t\tCSize Size;\n\t\t\t::GetBitmapDimensionEx((HBITMAP)m_pData->hGDIObject, &Size);\n\t\t\treturn Size;\n\t\t}\n\n\t\tinline CSize CBitmap::SetBitmapDimensionEx(int nWidth, int nHeight)\n\t\t// The SetBitmapDimensionEx function assigns preferred dimensions to a bitmap.\n\t\t// These dimensions can be used by applications; however, they are not used by the system.\n\t\t{\n\t\t\tassert(m_pData);\n\t\t\tassert(m_pData->hGDIObject != NULL);\n\t\t\tCSize Size;\n\t\t\t::SetBitmapDimensionEx((HBITMAP)m_pData->hGDIObject, nWidth, nHeight, Size);\n\t\t\treturn Size;\n\t\t}\n\n\t\t// DIB support\n\t\tinline HBITMAP CBitmap::CreateDIBitmap(CDC* pDC, CONST BITMAPINFOHEADER* lpbmih, DWORD dwInit, CONST VOID* lpbInit, CONST BITMAPINFO* lpbmi, UINT uColorUse)\n\t\t// Creates a compatible bitmap (DDB) from a DIB and, optionally, sets the bitmap bits.\n\t\t{\n\t\t\tassert(m_pData);\n\t\t\tassert(pDC);\n\t\t\tHBITMAP hBitmap = ::CreateDIBitmap(pDC->GetHDC(), lpbmih, dwInit, lpbInit, lpbmi, uColorUse);\n\t\t\tAttach(hBitmap);\n\t\t\treturn hBitmap;\n\t\t}\n#endif // !_WIN32_WCE\n\n\t\tinline HBITMAP CBitmap::CreateDIBSection(CDC* pDC, CONST BITMAPINFO* lpbmi, UINT uColorUse, VOID** ppvBits, HANDLE hSection, DWORD dwOffset)\n\t\t// Creates a DIB that applications can write to directly. The function gives you a pointer to the location of the bitmap bit values.\n\t\t// You can supply a handle to a file-mapping object that the function will use to create the bitmap, or you can let the system allocate the memory for the bitmap.\n\t\t{\n\t\t\tassert(m_pData);\n\t\t\tassert(pDC);\n\t\t\tHBITMAP hBitmap = ::CreateDIBSection(pDC->GetHDC(), lpbmi, uColorUse, ppvBits, hSection, dwOffset);\n\t\t\tAttach(hBitmap);\n\t\t\treturn hBitmap;\n\t\t}\n\n#ifndef _WIN32_WCE\n\t\tinline int CBitmap::GetDIBits(CDC* pDC, UINT uStartScan, UINT cScanLines,  LPVOID lpvBits, LPBITMAPINFO lpbmi, UINT uColorUse) const\n\t\t// Retrieves the bits of the specified compatible bitmap and copies them into a buffer as a DIB using the specified format.\n\t\t{\n\t\t\tassert(m_pData);\n\t\t\tassert(pDC);\n\t\t\tassert(m_pData->hGDIObject != NULL);\n\t\t\treturn ::GetDIBits(pDC->GetHDC(), (HBITMAP)m_pData->hGDIObject, uStartScan, cScanLines,  lpvBits, lpbmi, uColorUse);\n\t\t}\n\n\t\tinline int CBitmap::SetDIBits(CDC* pDC, UINT uStartScan, UINT cScanLines, CONST VOID* lpvBits, CONST BITMAPINFO* lpbmi, UINT uColorUse)\n\t\t// Sets the pixels in a compatible bitmap (DDB) using the color data found in the specified DIB.\n\t\t{\n\t\t\tassert(m_pData);\n\t\t\tassert(pDC);\n\t\t\tassert(m_pData->hGDIObject != NULL);\n\t\t\treturn ::SetDIBits(pDC->GetHDC(), (HBITMAP)m_pData->hGDIObject, uStartScan, cScanLines, lpvBits, lpbmi, uColorUse);\n\t\t}\n#endif // !_WIN32_WCE\n\n\n\t///////////////////////////////////////////////\n\t// Definitions of the CBrush class\n\t//\n\tinline CBrush::CBrush()\n\t{\n\t}\n\n\tinline CBrush::CBrush(HBRUSH hBrush)\n\t{\n\t\tassert(m_pData);\n\t\tAttach(hBrush);\n\t}\n\n\tinline CBrush::CBrush(COLORREF crColor)\n\t{\n\t\tAttach( ::CreateSolidBrush(crColor) );\n\t\tassert (m_pData->hGDIObject);\n\t}\n\n\tinline CBrush::operator HBRUSH() const\n\t{\n\t\tassert(m_pData);\n\t\treturn (HBRUSH)m_pData->hGDIObject;\n\t}\n\n\tinline CBrush::~CBrush()\n\t{\n\t}\n\n\tinline HBRUSH CBrush::CreateSolidBrush(COLORREF crColor)\n\t// Creates a logical brush that has the specified solid color.\n\t{\n\t\tassert(m_pData);\n\t\tHBRUSH hBrush = ::CreateSolidBrush(crColor);\n\t\tAttach(hBrush);\n\t\treturn hBrush;\n\t}\n\n#ifndef _WIN32_WCE\n\tinline HBRUSH CBrush::CreateHatchBrush(int nIndex, COLORREF crColor)\n\t// Creates a logical brush that has the specified hatch pattern and color.\n\t{\n\t\tassert(m_pData);\n\t\tHBRUSH hBrush = ::CreateHatchBrush(nIndex, crColor);\n\t\tAttach(hBrush);\n\t\treturn hBrush;\n\t}\n\n\tinline HBRUSH CBrush::CreateBrushIndirect(LPLOGBRUSH lpLogBrush)\n\t// Creates a logical brush from style, color, and pattern specified in the LOGPRUSH struct.\n\t{\n\t\tassert(m_pData);\n\t\tHBRUSH hBrush = ::CreateBrushIndirect(lpLogBrush);\n\t\tAttach(hBrush);\n\t\treturn hBrush;\n\t}\n\n\tinline HBRUSH CBrush::CreateDIBPatternBrush(HGLOBAL hglbDIBPacked, UINT fuColorSpec)\n\t// Creates a logical brush that has the pattern specified by the specified device-independent bitmap (DIB).\n\t{\n\t\tassert(m_pData);\n\t\tHBRUSH hBrush = ::CreateDIBPatternBrush(hglbDIBPacked, fuColorSpec);\n\t\tAttach(hBrush);\n\t\treturn hBrush;\n\t}\n\n\tinline HBRUSH CBrush::CreateDIBPatternBrushPt(LPCVOID lpPackedDIB, UINT nUsage)\n\t// Creates a logical brush that has the pattern specified by the device-independent bitmap (DIB).\n\t{\n\t\tassert(m_pData);\n\t\tHBRUSH hBrush = ::CreateDIBPatternBrushPt(lpPackedDIB, nUsage);\n\t\tAttach(hBrush);\n\t\treturn hBrush;\n\t}\n\n#endif // !defined(_WIN32_WCE)\n\n\tinline HBRUSH CBrush::CreatePatternBrush(CBitmap* pBitmap)\n\t// Creates a logical brush with the specified bitmap pattern. The bitmap can be a DIB section bitmap,\n\t// which is created by the CreateDIBSection function, or it can be a device-dependent bitmap.\n\t{\n\t\tassert(m_pData);\n\t\tassert(pBitmap);\n\t\tHBRUSH hBrush = ::CreatePatternBrush(*pBitmap);\n\t\tAttach(hBrush);\n\t\treturn hBrush;\n\t}\n\n\tinline LOGBRUSH CBrush::GetLogBrush() const\n\t// Retrieves the LOGBRUSH structure that defines the style, color, and pattern of a physical brush.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject != NULL);\n\t\tLOGBRUSH LogBrush = {0};\n\t\t::GetObject (m_pData->hGDIObject, sizeof(LOGBRUSH), &LogBrush);\n\t\treturn LogBrush;\n\t}\n\n\n\t///////////////////////////////////////////////\n\t// Definitions of the CFont class\n\t//\n\tinline CFont::CFont()\n\t{\n\t}\n\n\tinline CFont::CFont(HFONT hFont)\n\t{\n\t\tassert(m_pData);\n\t\tAttach(hFont);\n\t}\n\n\tinline CFont::CFont(const LOGFONT* lpLogFont)\n\t{\n\t\tassert(m_pData);\n\t\tAttach( ::CreateFontIndirect(lpLogFont) );\n\t}\n\n\tinline CFont::operator HFONT() const\n\t{\n\t\tassert(m_pData);\n\t\treturn (HFONT)m_pData->hGDIObject;\n\t}\n\n\tinline CFont::~CFont()\n\t{\n\t}\n\n\tinline HFONT CFont::CreateFontIndirect(const LOGFONT* lpLogFont)\n\t// Creates a logical font that has the specified characteristics.\n\t{\n\t\tassert(m_pData);\n\t\tHFONT hFont = ::CreateFontIndirect(lpLogFont);\n\t\tAttach(hFont);\n\t\treturn hFont;\n\t}\n\n\tinline HFONT CFont::CreatePointFont(int nPointSize, LPCTSTR lpszFaceName, CDC* pDC /*= NULL*/, BOOL bBold /*= FALSE*/, BOOL bItalic /*= FALSE*/)\n\t// Creates a font of a specified typeface and point size.\n\t{\n\t\tLOGFONT logFont = { 0 };\n\t\tlogFont.lfCharSet = DEFAULT_CHARSET;\n\t\tlogFont.lfHeight = nPointSize;\n\n\t\tlstrcpy(logFont.lfFaceName, lpszFaceName);\n\n\t\tif (bBold)\n\t\t\tlogFont.lfWeight = FW_BOLD;\n\t\tif (bItalic)\n\t\t\tlogFont.lfItalic = (BYTE)TRUE;\n\n\t\treturn CreatePointFontIndirect(&logFont, pDC);\n\t}\n\n\tinline HFONT CFont::CreatePointFontIndirect(const LOGFONT* lpLogFont, CDC* pDC /* = NULL*/)\n\t// Creates a font of a specified typeface and point size.\n\t// This function automatically converts the height in lfHeight to logical units using the specified device context.\n\t{\n\t\tHDC hDC = pDC? pDC->GetHDC() : NULL;\n\t\tHDC hDC1 = (hDC != NULL) ? hDC : ::GetDC(HWND_DESKTOP);\n\n\t\t// convert nPointSize to logical units based on hDC\n\t\tLOGFONT logFont = *lpLogFont;\n\n#ifndef _WIN32_WCE\n\t\tPOINT pt = { 0, 0 };\n\t\tpt.y = ::MulDiv(::GetDeviceCaps(hDC1, LOGPIXELSY), logFont.lfHeight, 720);   // 72 points/inch, 10 decipoints/point\n\t\t::DPtoLP(hDC1, &pt, 1);\n\n\t\tPOINT ptOrg = { 0, 0 };\n\t\t::DPtoLP(hDC1, &ptOrg, 1);\n\n\t\tlogFont.lfHeight = -abs(pt.y - ptOrg.y);\n#else // CE specific\n\t\t// DP and LP are always the same on CE\n\t\tlogFont.lfHeight = -abs(((::GetDeviceCaps(hDC1, LOGPIXELSY)* logFont.lfHeight)/ 720));\n#endif // _WIN32_WCE\n\n\t\tif (hDC == NULL)\n\t\t\t::ReleaseDC (NULL, hDC1);\n\n\t\treturn CreateFontIndirect (&logFont);\n\t}\n\n#ifndef _WIN32_WCE\n\n\tinline HFONT CFont::CreateFont(int nHeight, int nWidth, int nEscapement,\n\t\t\tint nOrientation, int nWeight, DWORD dwItalic, DWORD dwUnderline,\n\t\t\tDWORD dwStrikeOut, DWORD dwCharSet, DWORD dwOutPrecision,\n\t\t\tDWORD dwClipPrecision, DWORD dwQuality, DWORD dwPitchAndFamily,\n\t\t\tLPCTSTR lpszFacename)\n\t// Creates a logical font with the specified characteristics.\n\t{\n\t\tHFONT hFont = ::CreateFont(nHeight, nWidth, nEscapement,\n\t\t\tnOrientation, nWeight, dwItalic, dwUnderline, dwStrikeOut,\n\t\t\tdwCharSet, dwOutPrecision, dwClipPrecision, dwQuality,\n\t\t\tdwPitchAndFamily, lpszFacename);\n\n\t\tAttach(hFont);\n\t\treturn hFont;\n\t}\n#endif // #ifndef _WIN32_WCE\n\n\tinline LOGFONT CFont::GetLogFont() const\n\t// Retrieves the Logfont structure that contains font attributes.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject != NULL);\n\t\tLOGFONT LogFont = {0};\n\t\t::GetObject(m_pData->hGDIObject, sizeof(LOGFONT), &LogFont);\n\t\treturn LogFont;\n\t}\n\n\n\t///////////////////////////////////////////////\n\t// Definitions of the CPalette class\n\t//\n\tinline CPalette::CPalette()\n\t{\n\t}\n\n\tinline CPalette::CPalette(HPALETTE hPalette)\n\t{\n\t\tAttach(hPalette);\n\t}\n\n\tinline CPalette::operator HPALETTE() const\n\t{\n\t\tassert(m_pData);\n\t\treturn (HPALETTE)m_pData->hGDIObject;\n\t}\n\n\tinline CPalette::~CPalette ()\n\t{\n\t}\n\n\tinline HPALETTE CPalette::CreatePalette(LPLOGPALETTE lpLogPalette)\n\t// Creates a logical palette from the information in the specified LOGPALETTE structure.\n\t{\n\t\tassert(m_pData);\n\t\tHPALETTE hPalette = ::CreatePalette (lpLogPalette);\n\t\tAttach(hPalette);\n\t\treturn hPalette;\n\t}\n\n#ifndef _WIN32_WCE\n\tinline HPALETTE CPalette::CreateHalftonePalette(CDC* pDC)\n\t// Creates a halftone palette for the specified device context (DC).\n\t{\n\t\tassert(m_pData);\n\t\tassert(pDC);\n\t\tHPALETTE hPalette = ::CreateHalftonePalette(pDC->GetHDC());\n\t\tAttach(hPalette);\n\t\treturn hPalette;\n\t}\n#endif // !_WIN32_WCE\n\n\tinline int CPalette::GetEntryCount() const\n\t// Retrieve the number of entries in the palette.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject != NULL);\n\t\tWORD nEntries = 0;\n\t\t::GetObject(m_pData->hGDIObject, sizeof(WORD), &nEntries);\n\t\treturn (int)nEntries;\n\t}\n\n\tinline UINT CPalette::GetPaletteEntries(UINT nStartIndex, UINT nNumEntries, LPPALETTEENTRY lpPaletteColors) const\n\t// Retrieves a specified range of palette entries from the palette.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject != NULL);\n\t\treturn ::GetPaletteEntries((HPALETTE)m_pData->hGDIObject, nStartIndex, nNumEntries, lpPaletteColors);\n\t}\n\n\tinline UINT CPalette::SetPaletteEntries(UINT nStartIndex, UINT nNumEntries, LPPALETTEENTRY lpPaletteColors)\n\t// Sets RGB (red, green, blue) color values and flags in a range of entries in the palette.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject != NULL);\n\t\treturn ::SetPaletteEntries((HPALETTE)m_pData->hGDIObject, nStartIndex, nNumEntries, lpPaletteColors);\n\t}\n\n#ifndef _WIN32_WCE\n\tinline void CPalette::AnimatePalette(UINT nStartIndex, UINT nNumEntries, LPPALETTEENTRY lpPaletteColors)\n\t// Replaces entries in the palette.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject != NULL);\n\t\t::AnimatePalette((HPALETTE)m_pData->hGDIObject, nStartIndex, nNumEntries, lpPaletteColors);\n\t}\n\n\tinline BOOL CPalette::ResizePalette(UINT nNumEntries)\n\t//  Increases or decreases the size of the palette based on the specified value.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject != NULL);\n\t\treturn ::ResizePalette((HPALETTE)m_pData->hGDIObject, nNumEntries);\n\t}\n#endif // !_WIN32_WCE\n\n\tinline UINT CPalette::GetNearestPaletteIndex(COLORREF crColor) const\n\t// Retrieves the index for the entry in the palette most closely matching a specified color value.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject != NULL);\n\t\treturn ::GetNearestPaletteIndex((HPALETTE)m_pData->hGDIObject, crColor);\n\t}\n\n\n\t///////////////////////////////////////////////\n\t// Declarations for the CPen class\n\t//\n\tinline CPen::CPen()\n\t{\n\t}\n\n\tinline CPen::CPen(HPEN hPen)\n\t{\n\t\tAttach(hPen);\n\t}\n\n\tinline CPen::CPen(int nPenStyle, int nWidth, COLORREF crColor)\n\t{\n\t\tassert(m_pData);\n\t\tAttach( ::CreatePen(nPenStyle, nWidth, crColor) );\n\t}\n\n#ifndef _WIN32_WCE\n\tinline CPen::CPen(int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount /*= 0*/, const DWORD* lpStyle /*= NULL*/)\n\t{\n\t\tassert(m_pData);\n\t\tAttach( ::ExtCreatePen(nPenStyle, nWidth, pLogBrush, nStyleCount, lpStyle) );\n\t}\n#endif // !_WIN32_WCE\n\n\tinline CPen::operator HPEN () const\n\t{\n\t\tassert(m_pData);\n\t\treturn (HPEN)m_pData->hGDIObject;\n\t}\n\n\tinline CPen::~CPen()\n\t{\n\t}\n\n\tinline HPEN CPen::CreatePen(int nPenStyle, int nWidth, COLORREF crColor)\n\t// Creates a logical pen that has the specified style, width, and color.\n\t{\n\t\tassert(m_pData);\n\t\tHPEN hPen = ::CreatePen(nPenStyle, nWidth, crColor);\n\t\tAttach(hPen);\n\t\treturn hPen;\n\t}\n\n\tinline HPEN CPen::CreatePenIndirect(LPLOGPEN lpLogPen)\n\t// Creates a logical cosmetic pen that has the style, width, and color specified in a structure.\n\t{\n\t\tassert(m_pData);\n\t\tHPEN hPen = ::CreatePenIndirect(lpLogPen);\n\t\tAttach(hPen);\n\t\treturn hPen;\n\t}\n\n\tinline LOGPEN CPen::GetLogPen() const\n\t{\n\t\t// Retrieves the LOGPEN struct that specifies the pen's style, width, and color.\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject != NULL);\n\n\t\tLOGPEN LogPen = {0};\n\t\t::GetObject(m_pData->hGDIObject, sizeof(LOGPEN), &LogPen);\n\t\treturn LogPen;\n\t}\n\n#ifndef _WIN32_WCE\n\tinline HPEN CPen::ExtCreatePen(int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount /* = 0*/, const DWORD* lpStyle /*= NULL*/)\n\t// Creates a logical cosmetic or geometric pen that has the specified style, width, and brush attributes.\n\t{\n\t\tassert(m_pData);\n\t\tHPEN hPen = ::ExtCreatePen(nPenStyle, nWidth, pLogBrush, nStyleCount, lpStyle);\n\t\tAttach(hPen);\n\t\treturn hPen;\n\t}\n\n\tinline EXTLOGPEN CPen::GetExtLogPen() const\n\t// Retrieves the EXTLOGPEN struct that specifies the pen's style, width, color and brush attributes.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject != NULL);\n\n\t\tEXTLOGPEN ExLogPen = {0};\n\t\t::GetObject(m_pData->hGDIObject, sizeof(EXTLOGPEN), &ExLogPen);\n\t\treturn ExLogPen;\n\t}\n#endif // !_WIN32_WCE\n\n\n\t///////////////////////////////////////////////\n\t// Definitions of the CRgn class\n\t//\n\tinline CRgn::CRgn()\n\t{\n\t}\n\n\tinline CRgn::CRgn(HRGN hRgn)\n\t{\n\t\tassert(m_pData);\n\t\tAttach(hRgn);\n\t}\n\n\tinline CRgn::operator HRGN() const\n\t{\n\t\tassert(m_pData);\n\t\treturn (HRGN)m_pData->hGDIObject;\n\t}\n\n\tinline CRgn::~CRgn()\n\t{\n\t}\n\n\tinline HRGN CRgn::CreateRectRgn(int x1, int y1, int x2, int y2)\n\t// Creates a rectangular region.\n\t{\n\t\tassert(m_pData);\n\t\tHRGN hRgn = ::CreateRectRgn(x1, y1, x2, y2);\n\t\tAttach(hRgn);\n\t\treturn hRgn;\n\t}\n\n\tinline HRGN CRgn::CreateRectRgnIndirect(const RECT& rc)\n\t// Creates a rectangular region.\n\t{\n\t\tassert(m_pData);\n\t\tHRGN hRgn = ::CreateRectRgnIndirect(&rc);\n\t\tAttach(hRgn);\n\t\treturn hRgn;\n\t}\n\n#ifndef _WIN32_WCE\n\tinline HRGN CRgn::CreateEllipticRgn(int x1, int y1, int x2, int y2)\n\t// Creates an elliptical region.\n\t{\n\t\tassert(m_pData);\n\t\tHRGN hRgn = ::CreateEllipticRgn(x1, y1, x2, y2);\n\t\tAttach(hRgn);\n\t\treturn hRgn;\n\t}\n\n\tinline HRGN CRgn::CreateEllipticRgnIndirect(const RECT& rc)\n\t// Creates an elliptical region.\n\t{\n\t\tassert(m_pData);\n\t\tHRGN hRgn = ::CreateEllipticRgnIndirect(&rc);\n\t\tAttach(hRgn);\n\t\treturn hRgn;\n\t}\n\n\tinline HRGN CRgn::CreatePolygonRgn(LPPOINT lpPoints, int nCount, int nMode)\n\t// Creates a polygonal region.\n\t{\n\t\tassert(m_pData);\n\t\tHRGN hRgn = ::CreatePolygonRgn(lpPoints, nCount, nMode);\n\t\tAttach(hRgn);\n\t\treturn hRgn;\n\t}\n\n\tinline HRGN CRgn::CreatePolyPolygonRgn(LPPOINT lpPoints, LPINT lpPolyCounts, int nCount, int nPolyFillMode)\n\t// Creates a region consisting of a series of polygons. The polygons can overlap.\n\t{\n\t\tassert(m_pData);\n\t\tHRGN hRgn = ::CreatePolyPolygonRgn(lpPoints, lpPolyCounts, nCount, nPolyFillMode);\n\t\tAttach(hRgn);\n\t\treturn hRgn;\n\t}\n\n\tinline HRGN CRgn::CreateRoundRectRgn(int x1, int y1, int x2, int y2, int x3, int y3)\n\t// Creates a rectangular region with rounded corners.\n\t{\n\t\tassert(m_pData);\n\t\tHRGN hRgn = ::CreateRoundRectRgn(x1, y1, x2, y2, x3, y3);\n\t\tAttach(hRgn);\n\t\treturn hRgn;\n\t}\n\n\tinline HRGN CRgn::CreateFromPath(HDC hDC)\n\t// Creates a region from the path that is selected into the specified device context.\n\t// The resulting region uses device coordinates.\n\t{\n\t\tassert(m_pData);\n\t\tassert(hDC != NULL);\n\t\tHRGN hRgn = ::PathToRegion(hDC);\n\t\tAttach(hRgn);\n\t\treturn hRgn;\n\t}\n\n#endif // !_WIN32_WCE\n\n\tinline HRGN CRgn::CreateFromData(const XFORM* lpXForm, int nCount, const RGNDATA* pRgnData)\n\t// Creates a region from the specified region and transformation data.\n\t{\n\t\tassert(m_pData);\n\t\tHRGN hRgn = ::ExtCreateRegion(lpXForm, nCount, pRgnData);\n\t\tAttach(hRgn);\n\t\treturn hRgn;\n\t}\n\n\tinline void CRgn::SetRectRgn(int x1, int y1, int x2, int y2)\n\t// converts the region into a rectangular region with the specified coordinates.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject != NULL);\n\t\t::SetRectRgn((HRGN)m_pData->hGDIObject, x1, y1, x2, y2);\n\t}\n\n\tinline void CRgn::SetRectRgn(const RECT& rc)\n\t// converts the region into a rectangular region with the specified coordinates.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject != NULL);\n\t\t::SetRectRgn((HRGN)m_pData->hGDIObject, rc.left, rc.top, rc.right, rc.bottom);\n\t}\n\n\tinline int CRgn::CombineRgn(CRgn* pRgnSrc1, CRgn* pRgnSrc2, int nCombineMode)\n\t// Combines two sepcified regions and stores the result.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject != NULL);\n\t\tassert(pRgnSrc1);\n\t\tassert(pRgnSrc2);\n\t\treturn ::CombineRgn((HRGN)m_pData->hGDIObject, *pRgnSrc1, *pRgnSrc2, nCombineMode);\n\t}\n\n\tinline int CRgn::CombineRgn(CRgn* pRgnSrc, int nCombineMode)\n\t// Combines the sepcified region with the current region.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject != NULL);\n\t\tassert(pRgnSrc);\n\t\treturn ::CombineRgn((HRGN)m_pData->hGDIObject, (HRGN)m_pData->hGDIObject, *pRgnSrc, nCombineMode);\n\t}\n\n\tinline int CRgn::CopyRgn(CRgn* pRgnSrc)\n\t// Assigns the specified region to the current region.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject == NULL);\n\t\tassert(pRgnSrc);\n\t\treturn ::CombineRgn((HRGN)m_pData->hGDIObject, *pRgnSrc, NULL, RGN_COPY);\n\t}\n\n\tinline BOOL CRgn::EqualRgn(CRgn* pRgn) const\n\t// Checks the two specified regions to determine whether they are identical.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject != NULL);\n\t\tassert(pRgn);\n\t\treturn ::EqualRgn((HRGN)m_pData->hGDIObject, *pRgn);\n\t}\n\n\tinline int CRgn::OffsetRgn(int x, int y)\n\t// Moves a region by the specified offsets.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject != NULL);\n\t\treturn ::OffsetRgn((HRGN)m_pData->hGDIObject, x, y);\n\t}\n\n\tinline int CRgn::OffsetRgn(POINT& pt)\n\t// Moves a region by the specified offsets.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject != NULL);\n\t\treturn ::OffsetRgn((HRGN)m_pData->hGDIObject, pt.x, pt.y);\n\t}\n\n\tinline int CRgn::GetRgnBox(RECT& rc) const\n\t// Retrieves the bounding rectangle of the region, and stores it in the specified RECT.\n\t// The return value indicates the region's complexity: NULLREGION;SIMPLEREGION; or COMPLEXREGION.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject != NULL);\n\t\treturn ::GetRgnBox((HRGN)m_pData->hGDIObject, &rc);\n\t}\n\n\tinline int CRgn::GetRegionData(LPRGNDATA lpRgnData, int nDataSize) const\n\t// Fills the specified buffer with data describing a region.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject != NULL);\n\t\treturn (int)::GetRegionData((HRGN)m_pData->hGDIObject, nDataSize, lpRgnData);\n\t}\n\n\tinline BOOL CRgn::PtInRegion(int x, int y) const\n\t// Determines whether the specified point is inside the specified region.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject != NULL);\n\t\treturn ::PtInRegion((HRGN)m_pData->hGDIObject, x, y);\n\t}\n\n\tinline BOOL CRgn::PtInRegion(POINT& pt) const\n\t// Determines whether the specified point is inside the specified region.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject != NULL);\n\t\treturn ::PtInRegion((HRGN)m_pData->hGDIObject, pt.x, pt.y);\n\t}\n\n\tinline BOOL CRgn::RectInRegion(const RECT& rc) const\n\t// Determines whether the specified rect is inside the specified region.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hGDIObject != NULL);\n\t\treturn ::RectInRegion((HRGN)m_pData->hGDIObject, &rc);\n\t}\n\n\n\t///////////////////////////////////////////////\n\t// Definitions of the CDC class\n\t//\n\tinline CDC::CDC()\n\t{\n\t\t// Allocate memory for our data members\n\t\tm_pData = new DataMembers;\n\n\t\t// Assign values to our data members\n\t\tm_pData->hDC = 0;\n\t\tm_pData->Count = 1L;\n\t\tm_pData->bRemoveHDC = TRUE;\n\t\tm_pData->hWnd = 0;\n\t}\n\n\tinline CDC::CDC(HDC hDC, HWND hWnd /*= 0*/)\n\t// This constructor assigns an existing HDC to the CDC\n\t// The HDC WILL be released or deleted when the CDC object is destroyed\n\t// The hWnd paramter is only used in WindowsCE. It specifies the HWND of a Window or\n\t// Window Client DC\n\n\t// Note: this constructor permits a call like this:\n\t// CDC MyCDC = SomeHDC;\n\t//  or\n\t// CDC MyCDC = ::CreateCompatibleDC(SomeHDC);\n\t//  or\n\t// CDC MyCDC = ::GetDC(SomeHWND);\n\t{\n\t\tUNREFERENCED_PARAMETER(hWnd);\n\t\tassert(hDC);\n\n\t\tCDC* pDC = GetApp()->GetCDCFromMap(hDC);\n\t\tif (pDC)\n\t\t{\n\t\t\tm_pData = pDC->m_pData;\n\t\t\tInterlockedIncrement(&m_pData->Count);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Allocate memory for our data members\n\t\t\tm_pData = new DataMembers;\n\n\t\t\t// Assign values to our data members\n\t\t\tm_pData->hDC = hDC;\n\t\t\tm_pData->Count = 1L;\n\t\t\tm_pData->bRemoveHDC = TRUE;\n\t\t\tm_pData->nSavedDCState = ::SaveDC(hDC);\n#ifndef _WIN32_WCE\n\t\t\tm_pData->hWnd = ::WindowFromDC(hDC);\n#else\n\t\t\tm_pData->hWnd = hWnd;\n#endif\n\t\t\tif (m_pData->hWnd)\n\t\t\t\tAddToMap();\n\t\t}\n\t}\n\n#ifndef _WIN32_WCE\n\tinline void CDC::operator = (const HDC hDC)\n\t// Note: this assignment operater permits a call like this:\n\t// CDC MyCDC;\n\t// MyCDC = SomeHDC;\n\t{\n\t\tAttach(hDC);\n\t}\n#endif\n\n\tinline CDC::CDC(const CDC& rhs)\t// Copy constructor\n\t// The copy constructor is called when a temporary copy of the CDC needs to be created.\n\t// This can happen when a CDC is passed by value in a function call. Each CDC copy manages\n\t// the same Device Context and GDI objects.\n\t{\n\t\tm_pData = rhs.m_pData;\n\t\tInterlockedIncrement(&m_pData->Count);\n\t}\n\n\tinline CDC& CDC::operator = (const CDC& rhs)\n\t// Note: A copy of a CDC is a clone of the original.\n\t//       Both objects manipulate the one HDC\n\t{\n\t\tif (this != &rhs)\n\t\t{\n\t\t\tInterlockedIncrement(&rhs.m_pData->Count);\n\t\t\tRelease();\n\t\t\tm_pData = rhs.m_pData;\n\t\t}\n\n\t\treturn *this;\n\t}\n\n\tinline CDC::~CDC ()\n\t{\n\t\tRelease();\n\t}\n\n\tinline void CDC::AddToMap()\n\t// Store the HDC and CDC pointer in the HDC map\n\t{\n\t\tassert( GetApp() );\n\t\tassert(m_pData->hDC);\n\t\tGetApp()->m_csMapLock.Lock();\n\n\t\tassert(m_pData->hDC);\n\t\tassert(!GetApp()->GetCDCFromMap(m_pData->hDC));\n\n\t\tGetApp()->m_mapHDC.insert(std::make_pair(m_pData->hDC, this));\n\t\tGetApp()->m_csMapLock.Release();\n\t}\n\n\tinline void CDC::Attach(HDC hDC, HWND hWnd /* = 0*/)\n\t// Attaches a HDC to the CDC object.\n\t// The HDC will be automatically deleted or released when the destructor is called.\n\t// The hWnd parameter is only used on WindowsCE. It specifies the HWND of a Window or\n\t// Window Client DC\n\t{\n\t\tUNREFERENCED_PARAMETER(hWnd);\n\t\tassert(m_pData);\n\t\tassert(0 == m_pData->hDC);\n\t\tassert(hDC);\n\n\t\tCDC* pDC = GetApp()->GetCDCFromMap(hDC);\n\t\tif (pDC)\n\t\t{\n\t\t\tdelete m_pData;\n\t\t\tm_pData = pDC->m_pData;\n\t\t\tInterlockedIncrement(&m_pData->Count);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_pData->hDC = hDC;\n\n#ifndef _WIN32_WCE\n\t\t\tm_pData->hWnd = ::WindowFromDC(hDC);\n#else\n\t\t\tm_pData->hWnd = hWnd;\n#endif\n\n\t\t\tif (m_pData->hWnd == 0)\n\t\t\t\tAddToMap();\n\t\t\tm_pData->nSavedDCState = ::SaveDC(hDC);\n\t\t}\n\t}\n\n\tinline HDC CDC::Detach()\n\t// Detaches the HDC from this object.\n\t{\n\t\tassert(m_pData);\n\t\tassert(m_pData->hDC);\n\n\t\tGetApp()->m_csMapLock.Lock();\n\t\tRemoveFromMap();\n\t\tHDC hDC = m_pData->hDC;\n\t\tm_pData->hDC = 0;\n\n\t\tif (m_pData->Count)\n\t\t{\n\t\t\tif (InterlockedDecrement(&m_pData->Count) == 0)\n\t\t\t{\n\t\t\t\tdelete m_pData;\n\t\t\t}\n\t\t}\n\n\t\tGetApp()->m_csMapLock.Release();\n\n\t\t// Assign values to our data members\n\t\tm_pData = new DataMembers;\n\t\tm_pData->hDC = 0;\n\t\tm_pData->Count = 1L;\n\t\tm_pData->bRemoveHDC = TRUE;\n\t\tm_pData->hWnd = 0;\n\n\t\treturn hDC;\n\t}\n\n\t// Initialization\n\tinline BOOL CDC::CreateCompatibleDC(CDC* pDC)\n\t// Returns a memory device context (DC) compatible with the specified device.\n\t{\n\t\tassert(m_pData->hDC == NULL);\n\t\tHDC hdcSource = (pDC == NULL)? NULL : pDC->GetHDC();\n\t\tHDC hDC = ::CreateCompatibleDC(hdcSource);\n\t\tif (hDC)\n\t\t{\n\t\t\tm_pData->hDC = hDC;\n\t\t\tAddToMap();\n\t\t}\n\t\treturn (hDC != NULL);\t// boolean expression\n\t}\n\n\tinline BOOL CDC::CreateDC(LPCTSTR lpszDriver, LPCTSTR lpszDevice, LPCTSTR lpszOutput, const DEVMODE* pInitData)\n\t// Returns a device context (DC) for a device using the specified name.\n\t{\n\t\tassert(m_pData->hDC == NULL);\n\t\tHDC hDC = ::CreateDC(lpszDriver, lpszDevice, lpszOutput, pInitData);\n\t\tif (hDC)\n\t\t{\n\t\t\tm_pData->hDC = hDC;\n\t\t\tAddToMap();\n\t\t}\n\t\treturn (hDC != NULL);\t// boolean expression\n\t}\n\n#ifndef _WIN32_WCE\n\tinline BOOL CDC::CreateIC(LPCTSTR lpszDriver, LPCTSTR lpszDevice, LPCTSTR lpszOutput, const DEVMODE* pInitData)\n\t{\n\t\tassert(m_pData->hDC == NULL);\n\t\tHDC hDC = ::CreateIC(lpszDriver, lpszDevice, lpszOutput, pInitData);\n\t\tif (hDC)\n\t\t{\n\t\t\tm_pData->hDC = hDC;\n\t\t\tAddToMap();\n\t\t}\n\t\treturn (hDC != NULL);\t// boolean expression\n\t}\n#endif\n\n\tinline void CDC::DrawBitmap(int x, int y, int cx, int cy, CBitmap& Bitmap, COLORREF clrMask)\n\t// Draws the specified bitmap to the specified DC using the mask colour provided as the transparent colour\n\t// Suitable for use with a Window DC or a memory DC\n\t{\n\t\t// Create the Image memory DC\n\t\tCMemDC dcImage(this);\n\t\tdcImage.SetBkColor(clrMask);\n\t\tdcImage.SelectObject(&Bitmap);\n\n\t\t// Create the Mask memory DC\n\t\tCMemDC dcMask(this);\n        dcMask.CreateBitmap(cx, cy, 1, 1, NULL);\n\t\tdcMask.BitBlt(0, 0, cx, cy, &dcImage, 0, 0, SRCCOPY);\n\n\t\t// Mask the image to 'this' DC\n\t\tBitBlt(x, y, cx, cy, &dcImage, 0, 0, SRCINVERT);\n\t\tBitBlt(x, y, cx, cy, &dcMask, 0, 0, SRCAND);\n\t\tBitBlt(x, y, cx, cy, &dcImage, 0, 0, SRCINVERT);\n\t}\n\n\tinline CDC* CDC::AddTempHDC(HDC hDC, HWND hWnd)\n\t// Returns the CDC object associated with the device context handle\n\t// The HDC is removed when the CDC is destroyed\n\t{\n\t\tassert( GetApp() );\n\t\tCDC* pDC = new CDC;\n\t\tpDC->m_pData->hDC = hDC;\n\t\tGetApp()->AddTmpDC(pDC);\n\t\tpDC->m_pData->bRemoveHDC = TRUE;\n\t\tpDC->m_pData->hWnd = hWnd;\n\t\treturn pDC;\n\t}\n\n\tinline void CDC::GradientFill(COLORREF Color1, COLORREF Color2, const RECT& rc, BOOL bVertical)\n\t// An efficient color gradient filler compatible with all Windows operating systems\n\t{\n\t\tint Width = rc.right - rc.left;\n\t\tint Height = rc.bottom - rc.top;\n\n\t\tint r1 = GetRValue(Color1);\n\t\tint g1 = GetGValue(Color1);\n\t\tint b1 = GetBValue(Color1);\n\n\t\tint r2 = GetRValue(Color2);\n\t\tint g2 = GetGValue(Color2);\n\t\tint b2 = GetBValue(Color2);\n\n\t\tCOLORREF OldBkColor = GetBkColor();\n\n\t\tif (bVertical)\n\t\t{\n\t\t\tfor(int i=0; i < Width; ++i)\n\t\t\t{\n\t\t\t\tint r = r1 + (i * (r2-r1) / Width);\n\t\t\t\tint g = g1 + (i * (g2-g1) / Width);\n\t\t\t\tint b = b1 + (i * (b2-b1) / Width);\n\t\t\t\tSetBkColor(RGB(r, g, b));\n\t\t\t\tCRect line( i + rc.left, rc.top, i + 1 + rc.left, rc.top+Height);\n\t\t\t\tExtTextOut(0, 0, ETO_OPAQUE, line, NULL, 0, 0);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor(int i=0; i < Height; ++i)\n\t\t\t{\n\t\t\t\tint r = r1 + (i * (r2-r1) / Height);\n\t\t\t\tint g = g1 + (i * (g2-g1) / Height);\n\t\t\t\tint b = b1 + (i * (b2-b1) / Height);\n\t\t\t\tSetBkColor(RGB(r, g, b));\n\t\t\t\tCRect line(rc.left, i + rc.top, rc.left+Width, i + 1 + rc.top);\n\t\t\t\tExtTextOut(0, 0, ETO_OPAQUE, line, NULL, 0, 0);\n\t\t\t}\n\t\t}\n\n\t\tSetBkColor(OldBkColor);\n\t}\n\n\tinline void CDC::Release()\n\t{\n\t\tGetApp()->m_csMapLock.Lock();\n\n\t\tif (m_pData->Count)\n\t\t{\n\t\t\tif (InterlockedDecrement(&m_pData->Count) == 0)\n\t\t\t{\n\t\t\t\tDestroy();\n\t\t\t\tdelete m_pData;\n\t\t\t\tm_pData = 0;\n\t\t\t}\n\t\t}\n\n\t\tGetApp()->m_csMapLock.Release();\n\t}\n\n\tinline BOOL CDC::RemoveFromMap()\n\t{\n\t\tBOOL Success = FALSE;\n\n\t\tif( GetApp() )\n\t\t{\n\t\t\t// Allocate an iterator for our HDC map\n\t\t\tstd::map<HDC, CDC*, CompareHDC>::iterator m;\n\n\t\t\tCWinApp* pApp = GetApp();\n\t\t\tif (pApp)\n\t\t\t{\n\t\t\t\t// Erase the CDC pointer entry from the map\n\t\t\t\tpApp->m_csMapLock.Lock();\n\t\t\t\tm = pApp->m_mapHDC.find(m_pData->hDC);\n\t\t\t\tif (m != pApp->m_mapHDC.end())\n\t\t\t\t{\n\t\t\t\t\tpApp->m_mapHDC.erase(m);\n\t\t\t\t\tSuccess = TRUE;\n\t\t\t\t}\n\n\t\t\t\tpApp->m_csMapLock.Release();\n\t\t\t}\n\t\t}\n\t\treturn Success;\n\t}\n\n\tinline void CDC::SolidFill(COLORREF Color, const RECT& rc)\n\t// Fills a rectangle with a solid color\n\t{\n\t\tCOLORREF OldColor = SetBkColor(Color);\n\t\tExtTextOut(0, 0, ETO_OPAQUE, &rc, NULL, 0, 0);\n\t\tSetBkColor(OldColor);\n\t}\n\n\t// Bitmap functions\n\tinline CBitmap* CDC::CreateCompatibleBitmap(CDC* pDC, int cx, int cy)\n\t// Creates a compatible bitmap and selects it into the device context.\n\t{\n\t\tassert(m_pData->hDC);\n\t\tassert(pDC);\n\n\t\tCBitmap* pBitmap = new CBitmap;\n\t\tpBitmap->CreateCompatibleBitmap(pDC, cx, cy);\n\t\tm_pData->m_vGDIObjects.push_back(pBitmap);\n\t\treturn SelectObject(pBitmap);\n\t}\n\n\tinline CBitmap* CDC::CreateBitmap(int cx, int cy, UINT Planes, UINT BitsPerPixel, LPCVOID pvColors)\n\t// Creates a bitmap and selects it into the device context.\n\t// Returns a pointer to the old bitmap selected out of the device context\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tCBitmap* pBitmap = new CBitmap;\n\t\tpBitmap->CreateBitmap(cx, cy, Planes, BitsPerPixel, pvColors);\n\t\tm_pData->m_vGDIObjects.push_back(pBitmap);\n\t\treturn SelectObject(pBitmap);\n\t}\n\n#ifndef _WIN32_WCE\n\tinline CBitmap* CDC::CreateBitmapIndirect (LPBITMAP lpBitmap)\n\t// Creates a bitmap and selects it into the device context.\n\t// Returns a pointer to the old bitmap selected out of the device context\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tCBitmap* pBitmap = new CBitmap;\n\t\tpBitmap->CreateBitmapIndirect(lpBitmap);\n\t\tm_pData->m_vGDIObjects.push_back(pBitmap);\n\t\treturn SelectObject(pBitmap);\n\t}\n\n\tinline CBitmap* CDC::CreateDIBitmap(CDC* pDC, const BITMAPINFOHEADER& bmih, DWORD fdwInit, LPCVOID lpbInit,\n\t\t\t\t\t\t\t\t\t\tBITMAPINFO& bmi,  UINT fuUsage)\n\t// Creates a bitmap and selects it into the device context.\n\t// Returns a pointer to the old bitmap selected out of the device context\n\t{\n\t\tassert(m_pData->hDC);\n\t\tassert(pDC);\n\n\t\tCBitmap* pBitmap = new CBitmap;\n\t\tpBitmap->CreateDIBitmap(pDC, &bmih, fdwInit, lpbInit, &bmi, fuUsage);\n\t\tm_pData->m_vGDIObjects.push_back(pBitmap);\n\t\treturn SelectObject(pBitmap);\n\t}\n#endif\n\n\tinline CBitmap* CDC::CreateDIBSection(CDC* pDC, const BITMAPINFO& bmi, UINT iUsage, LPVOID *ppvBits,\n\t\t\t\t\t\t\t\t\t\tHANDLE hSection, DWORD dwOffset)\n\t// Creates a bitmap and selects it into the device context.\n\t// Returns a pointer to the old bitmap selected out of the device context\n\t{\n\t\tassert(m_pData->hDC);\n\t\tassert(pDC);\n\n\t\tCBitmap* pBitmap = new CBitmap;\n\t\tpBitmap->CreateDIBSection(pDC, &bmi, iUsage, ppvBits, hSection, dwOffset);\n\t\tm_pData->m_vGDIObjects.push_back(pBitmap);\n\t\treturn SelectObject(pBitmap);\n\t}\n\n\tinline void CDC::Destroy()\n\t// Deletes or releases the device context and returns the CDC object to its\n\t// default state, ready for reuse.\n\t{\n\t\tif (m_pData->hDC)\n\t\t{\n\t\t\tRemoveFromMap();\n\t\t\tif (m_pData->bRemoveHDC)\n\t\t\t{\n\t\t\t\t// Return the DC back to its initial state\n\t\t\t\t::RestoreDC(m_pData->hDC, m_pData->nSavedDCState);\n\n\t\t\t\t// We need to release a Window DC, and delete a memory DC\n\t\t\t\tif (m_pData->hWnd)\n\t\t\t\t\t::ReleaseDC(m_pData->hWnd, m_pData->hDC);\n\t\t\t\telse\n\t\t\t\t\tif (!::DeleteDC(m_pData->hDC))\n\t\t\t\t\t\t::ReleaseDC(NULL, m_pData->hDC);\n\n\t\t\t\tm_pData->hDC = 0;\n\t\t\t\tm_pData->hWnd = 0;\n\t\t\t\tm_pData->bRemoveHDC = TRUE;\n\t\t\t}\n\t\t}\n\n\t//\tRemoveFromMap();\n\t}\n\n\tinline BITMAP CDC::GetBitmapData() const\n\t// Retrieves the BITMAP information for the current HBITMAP.\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tHBITMAP hbm = (HBITMAP)::GetCurrentObject(m_pData->hDC, OBJ_BITMAP);\n\t\tBITMAP bm = {0};\n\t\t::GetObject(hbm, sizeof(bm), &bm);\n\t\treturn bm;\n\t}\n\n\tinline CBitmap* CDC::LoadBitmap(UINT nID)\n\t// Loads a bitmap from the resource and selects it into the device context\n\t{\n\t\treturn LoadBitmap(MAKEINTRESOURCE(nID));\n\t}\n\n\tinline CBitmap* CDC::LoadBitmap(LPCTSTR lpszName)\n\t// Loads a bitmap from the resource and selects it into the device context\n\t// Returns a pointer to the old bitmap selected out of the device context\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tCBitmap* pBitmap = new CBitmap;\n\t\tBOOL bResult = pBitmap->LoadBitmap(lpszName);\n\t\tm_pData->m_vGDIObjects.push_back(pBitmap);\n\n\t\treturn bResult? SelectObject(pBitmap) : NULL;\n\t}\n\n\tinline CBitmap* CDC::LoadImage(UINT nID, int cxDesired, int cyDesired, UINT fuLoad)\n\t// Loads a bitmap from the resource and selects it into the device context\n\t// Returns a pointer to the old bitmap selected out of the device context\n\t{\n\t\treturn LoadImage(nID, cxDesired, cyDesired, fuLoad);\n\t}\n\n\tinline CBitmap* CDC::LoadImage(LPCTSTR lpszName, int cxDesired, int cyDesired, UINT fuLoad)\n\t// Loads a bitmap from the resource and selects it into the device context\n\t// Returns a pointer to the old bitmap selected out of the device context\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tCBitmap* pBitmap = new CBitmap;\n\t\tBOOL bResult = pBitmap->LoadImage(lpszName, cxDesired, cyDesired, fuLoad);\n\t\tm_pData->m_vGDIObjects.push_back(pBitmap);\n\t\treturn bResult? SelectObject(pBitmap) : NULL;\n\t}\n\n\tinline CBitmap* CDC::LoadOEMBitmap(UINT nIDBitmap) // for OBM_/OCR_/OIC_\n\t// Loads a predefined system bitmap and selects it into the device context\n\t// Returns a pointer to the old bitmap selected out of the device context\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tCBitmap* pBitmap = new CBitmap;\n\t\tBOOL bResult = pBitmap->LoadOEMBitmap(nIDBitmap);\n\t\tm_pData->m_vGDIObjects.push_back(pBitmap);\n\t\treturn bResult? SelectObject(pBitmap) : NULL;\n\t}\n\n#ifndef _WIN32_WCE\n\tinline CBitmap* CDC::CreateMappedBitmap(UINT nIDBitmap, UINT nFlags /*= 0*/, LPCOLORMAP lpColorMap /*= NULL*/, int nMapSize /*= 0*/)\n\t// creates and selects a new bitmap using the bitmap data and colors specified by the bitmap resource and the color mapping information.\n\t// Returns a pointer to the old bitmap selected out of the device context\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tCBitmap* pBitmap = new CBitmap;\n\t\tpBitmap->CreateMappedBitmap(nIDBitmap, (WORD)nFlags, lpColorMap, nMapSize);\n\t\tm_pData->m_vGDIObjects.push_back(pBitmap);\n\t\treturn SelectObject(pBitmap);\n\t}\n#endif // !_WIN32_WCE\n\n\n\t// Brush functions\n#ifndef _WIN32_WCE\n\tinline CBrush* CDC::CreateBrushIndirect(LPLOGBRUSH pLogBrush)\n\t// Creates the brush and selects it into the device context.\n\t// Returns a pointer to the old brush selected out of the device context.\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tCBrush* pBrush = new CBrush;\n\t\tpBrush->CreateBrushIndirect(pLogBrush);\n\t\tm_pData->m_vGDIObjects.push_back(pBrush);\n\t\treturn SelectObject(pBrush);\n\t}\n\n\tinline CBrush* CDC::CreateHatchBrush(int fnStyle, COLORREF rgb)\n\t// Creates a brush with the specified hatch pattern and color, and selects it into the device context.\n\t// Returns a pointer to the old brush selected out of the device context.\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tCBrush* pBrush = new CBrush;\n\t\tpBrush->CreateHatchBrush(fnStyle, rgb);\n\t\tm_pData->m_vGDIObjects.push_back(pBrush);\n\t\treturn SelectObject(pBrush);\n\t}\n\n\tinline CBrush* CDC::CreateDIBPatternBrush(HGLOBAL hglbDIBPacked, UINT fuColorSpec)\n\t// Creates a logical from the specified device-independent bitmap (DIB), and selects it into the device context.\n\t// Returns a pointer to the old brush selected out of the device context.\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tCBrush* pBrush = new CBrush;\n\t\tpBrush->CreateDIBPatternBrush(hglbDIBPacked, fuColorSpec);\n\t\tm_pData->m_vGDIObjects.push_back(pBrush);\n\t\treturn SelectObject(pBrush);\n\t}\n\t\n\tinline CBrush* CDC::CreateDIBPatternBrushPt(LPCVOID lpPackedDIB, UINT iUsage)\n\t// Creates a logical from the specified device-independent bitmap (DIB), and selects it into the device context.\n\t// Returns a pointer to the old brush selected out of the device context.\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tCBrush* pBrush = new CBrush;\n\t\tpBrush->CreateDIBPatternBrushPt(lpPackedDIB, iUsage);\n\t\tm_pData->m_vGDIObjects.push_back(pBrush);\n\t\treturn SelectObject(pBrush);\n\t}\n#endif\n\n\tinline CBrush* CDC::CreatePatternBrush(CBitmap* pBitmap)\n\t// Creates the brush with the specified pattern, and selects it into the device context.\n\t// Returns a pointer to the old brush selected out of the device context.\n\t{\n\t\tassert(m_pData->hDC);\n\t\tassert(pBitmap);\n\n\t\tCBrush* pBrush = new CBrush;\n\t\tpBrush->CreatePatternBrush(pBitmap);\n\t\tm_pData->m_vGDIObjects.push_back(pBrush);\n\t\treturn SelectObject(pBrush);\n\t}\n\n\tinline CBrush* CDC::CreateSolidBrush(COLORREF rgb)\n\t// Creates the brush with the specified color, and selects it into the device context.\n\t// Returns a pointer to the old brush selected out of the device context.\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tCBrush* pBrush = new CBrush;\n\t\tpBrush->CreateSolidBrush(rgb);\n\t\tm_pData->m_vGDIObjects.push_back(pBrush);\n\t\treturn SelectObject(pBrush);\n\t}\n\n\tinline LOGBRUSH CDC::GetLogBrush() const\n\t// Retrieves the current brush information\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tHBRUSH hBrush = (HBRUSH)::GetCurrentObject(m_pData->hDC, OBJ_BRUSH);\n\t\tLOGBRUSH lBrush = {0};\n\t\t::GetObject(hBrush, sizeof(lBrush), &lBrush);\n\t\treturn lBrush;\n\t}\n\n\n\t// Font functions\n#ifndef _WIN32_WCE\n\tinline CFont* CDC::CreateFont (\n\t\t\t\t\tint nHeight,               // height of font\n  \t\t\t\t\tint nWidth,                // average character width\n  \t\t\t\t\tint nEscapement,           // angle of escapement\n  \t\t\t\t\tint nOrientation,          // base-line orientation angle\n  \t\t\t\t\tint fnWeight,              // font weight\n  \t\t\t\t\tDWORD fdwItalic,           // italic attribute option\n  \t\t\t\t\tDWORD fdwUnderline,        // underline attribute option\n  \t\t\t\t\tDWORD fdwStrikeOut,        // strikeout attribute option\n  \t\t\t\t\tDWORD fdwCharSet,          // character set identifier\n  \t\t\t\t\tDWORD fdwOutputPrecision,  // output precision\n  \t\t\t\t\tDWORD fdwClipPrecision,    // clipping precision\n  \t\t\t\t\tDWORD fdwQuality,          // output quality\n  \t\t\t\t\tDWORD fdwPitchAndFamily,   // pitch and family\n  \t\t\t\t\tLPCTSTR lpszFace           // typeface name\n \t\t\t\t\t)\n\n\t// Creates a logical font with the specified characteristics.\n\t// Returns a pointer to the old font selected out of the device context.\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tCFont* pFont = new CFont;\n\t\tpFont->CreateFont (nHeight, nWidth, nEscapement, nOrientation, fnWeight,\n\t\t\t\t\t\t\t\tfdwItalic, fdwUnderline, fdwStrikeOut, fdwCharSet,\n\t\t\t\t\t\t\t\tfdwOutputPrecision, fdwClipPrecision, fdwQuality,\n\t\t\t\t\t\t\t\tfdwPitchAndFamily, lpszFace);\n\t\tm_pData->m_vGDIObjects.push_back(pFont);\n\t\treturn SelectObject(pFont);\n\t}\n#endif\n\n\tinline CFont* CDC::CreateFontIndirect(LPLOGFONT plf)\n\t// Creates a logical font and selects it into the device context.\n\t// Returns a pointer to the old font selected out of the device context.\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tCFont* pFont = new CFont;\n\t\tpFont->CreateFontIndirect(plf);\n\t\tm_pData->m_vGDIObjects.push_back(pFont);\n\t\treturn SelectObject(pFont);\n\t}\n\n\tinline LOGFONT CDC::GetLogFont() const\n\t// Retrieves the current font information.\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tHFONT hFont = (HFONT)::GetCurrentObject(m_pData->hDC, OBJ_FONT);\n\t\tLOGFONT lFont = {0};\n\t\t::GetObject(hFont, sizeof(lFont), &lFont);\n\t\treturn lFont;\n\t}\n\n\t// Pen functions\n\tinline CPen* CDC::CreatePen (int nStyle, int nWidth, COLORREF rgb)\n\t// Creates the pen and selects it into the device context.\n\t// Returns a pointer to the old pen selected out of the device context.\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tCPen* pPen = new CPen;\n\t\tpPen->CreatePen(nStyle, nWidth, rgb);\n\t\tm_pData->m_vGDIObjects.push_back(pPen);\n\t\treturn SelectObject(pPen);\n\t}\n\n\tinline CPen* CDC::CreatePenIndirect (LPLOGPEN pLogPen)\n\t// Creates the pen and selects it into the device context.\n\t// Returns a pointer to the old pen selected out of the device context.\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tCPen* pPen = new CPen;\n\t\tpPen->CreatePenIndirect(pLogPen);\n\t\tm_pData->m_vGDIObjects.push_back(pPen);\n\t\treturn SelectObject(pPen);\n\t}\n\n\tinline LOGPEN CDC::GetLogPen() const\n\t// Retrieves the current pen information as a LOGPEN\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tHPEN hPen = (HPEN)::GetCurrentObject(m_pData->hDC, OBJ_PEN);\n\t\tLOGPEN lPen = {0};\n\t\t::GetObject(hPen, sizeof(lPen), &lPen);\n\t\treturn lPen;\n\t}\n\n\t// Region functions\n\tinline int CDC::CreateRectRgn(int left, int top, int right, int bottom)\n\t// Creates a rectangular region from the rectangle co-ordinates.\n\t// The return value specifies the region's complexity: NULLREGION;SIMPLEREGION;COMPLEXREGION;ERROR.\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tCRgn* pRgn = new CRgn;\n\t\tpRgn->CreateRectRgn(left, top, right, bottom);\n\t\tm_pData->m_vGDIObjects.push_back(pRgn);\n\t\treturn SelectClipRgn(pRgn);\n\t}\n\n\tinline int CDC::CreateRectRgnIndirect(const RECT& rc)\n\t// Creates a rectangular region from the rectangle co-ordinates.\n\t// The return value specifies the region's complexity: NULLREGION;SIMPLEREGION;COMPLEXREGION;ERROR.\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tCRgn* pRgn = new CRgn;\n\t\tpRgn->CreateRectRgnIndirect(rc);\n\t\tm_pData->m_vGDIObjects.push_back(pRgn);\n\t\treturn SelectClipRgn(pRgn);\n\t}\n\n\tinline int CDC::CreateFromData(const XFORM* Xform, DWORD nCount, const RGNDATA *pRgnData)\n\t// Creates a region from the specified region data and tranformation data.\n\t// The return value specifies the region's complexity: NULLREGION;SIMPLEREGION;COMPLEXREGION;ERROR.\n\t// Notes: GetRegionData can be used to get a region's data\n\t//        If the XFROM pointer is NULL, the identity transformation is used.\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tCRgn* pRgn = new CRgn;\n\t\tpRgn->CreateFromData(Xform, nCount, pRgnData);\n\t\tm_pData->m_vGDIObjects.push_back(pRgn);\n\t\treturn SelectClipRgn(pRgn);\n\t}\n\n\n#ifndef _WIN32_WCE\n\tinline int CDC::CreateEllipticRgn(int left, int top, int right, int bottom)\n\t// Creates the ellyiptical region from the bounding rectangle co-ordinates\n\t// and selects it into the device context.\n\t// The return value specifies the region's complexity: NULLREGION;SIMPLEREGION;COMPLEXREGION;ERROR.\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tCRgn* pRgn = new CRgn;\n\t\tpRgn->CreateEllipticRgn(left, top, right, bottom);\n\t\tm_pData->m_vGDIObjects.push_back(pRgn);\n\t\treturn SelectClipRgn(pRgn);\n\t}\n\n\tinline int CDC::CreateEllipticRgnIndirect(const RECT& rc)\n\t// Creates the ellyiptical region from the bounding rectangle co-ordinates\n\t// and selects it into the device context.\n\t// The return value specifies the region's complexity: NULLREGION;SIMPLEREGION;COMPLEXREGION;ERROR.\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tCRgn* pRgn = new CRgn;\n\t\tpRgn->CreateEllipticRgnIndirect(rc);\n\t\tm_pData->m_vGDIObjects.push_back(pRgn);\n\t\treturn SelectClipRgn(pRgn);\n\t}\n\n\tinline int CDC::CreatePolygonRgn(LPPOINT ppt, int cPoints, int fnPolyFillMode)\n\t// Creates the polygon region from the array of points and selects it into\n\t// the device context. The polygon is presumed closed.\n\t// The return value specifies the region's complexity: NULLREGION;SIMPLEREGION;COMPLEXREGION;ERROR.\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tCRgn* pRgn = new CRgn;\n\t\tpRgn->CreatePolygonRgn(ppt, cPoints, fnPolyFillMode);\n\t\tm_pData->m_vGDIObjects.push_back(pRgn);\n\t\treturn SelectClipRgn(pRgn);\n\t}\n\n\tinline int CDC::CreatePolyPolygonRgn(LPPOINT ppt, LPINT pPolyCounts, int nCount, int fnPolyFillMode)\n\t// Creates the polygon region from a series of polygons.The polygons can overlap.\n\t// The return value specifies the region's complexity: NULLREGION;SIMPLEREGION;COMPLEXREGION;ERROR.\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tCRgn* pRgn = new CRgn;\n\t\tpRgn->CreatePolyPolygonRgn(ppt, pPolyCounts, nCount, fnPolyFillMode);\n\t\tm_pData->m_vGDIObjects.push_back(pRgn);\n\t\treturn SelectClipRgn(pRgn);\n\t}\n#endif\n\n\n\t// Wrappers for WinAPI functions\n\n\tinline int CDC::GetDeviceCaps (int nIndex) const\n\t// Retrieves device-specific information for the specified device.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::GetDeviceCaps(m_pData->hDC, nIndex);\n\t}\n\n\t// Brush Functions\n#ifdef GetDCBrushColor\n\tinline COLORREF CDC::GetDCBrushColor() const\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::GetDCBrushColor(m_pData->hDC);\n\t}\n\n\tinline COLORREF CDC::SetDCBrushColor(COLORREF crColor) const\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::SetDCBrushColor(m_pData->hDC, crColor);\n\t}\n#endif\n\n\t// Clipping functions\n\tinline int CDC::ExcludeClipRect(int Left, int Top, int Right, int BottomRect)\n\t// Creates a new clipping region that consists of the existing clipping region minus the specified rectangle.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::ExcludeClipRect(m_pData->hDC, Left, Top, Right, BottomRect);\n\t}\n\n\tinline int CDC::ExcludeClipRect(const RECT& rc)\n\t// Creates a new clipping region that consists of the existing clipping region minus the specified rectangle.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::ExcludeClipRect(m_pData->hDC, rc.left, rc.top, rc.right, rc.bottom);\n\t}\n\n\tinline int CDC::GetClipBox (RECT& rc)\n\t// Retrieves the dimensions of the tightest bounding rectangle that can be drawn around the current visible area on the device.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::GetClipBox(m_pData->hDC, &rc);\n\t}\n\n\tinline int CDC::GetClipRgn(HRGN hrgn)\n\t// Retrieves a handle identifying the current application-defined clipping region for the specified device context.\n\t// hrgn: A handle to an existing region before the function is called.\n\t//       After the function returns, this parameter is a handle to a copy of the current clipping region.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::GetClipRgn(m_pData->hDC, hrgn);\n\t}\n\n\tinline int CDC::IntersectClipRect(int Left, int Top, int Right, int Bottom)\n\t// Creates a new clipping region from the intersection of the current clipping region and the specified rectangle.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::IntersectClipRect(m_pData->hDC, Left, Top, Right, Bottom);\n\t}\n\n\tinline int CDC::IntersectClipRect(const RECT& rc)\n\t// Creates a new clipping region from the intersection of the current clipping region and the specified rectangle.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::IntersectClipRect(m_pData->hDC, rc.left, rc.top, rc.right, rc.bottom);\n\t}\n\n\tinline BOOL CDC::RectVisible(const RECT& rc)\n\t// Determines whether any part of the specified rectangle lies within the clipping region of a device context.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::RectVisible (m_pData->hDC, &rc);\n\t}\n\n\tinline int CDC::SelectClipRgn(CRgn* pRgn)\n\t// Selects a region as the current clipping region for the specified device context.\n\t// Note: Only a copy of the selected region is used.\n\t//       To remove a device-context's clipping region, specify a NULL region handle.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::SelectClipRgn(m_pData->hDC, pRgn? (HRGN)pRgn->GetHandle() : 0);\n\t}\n\n#ifndef _WIN32_WCE\n\tinline int CDC::ExtSelectClipRgn(CRgn* pRgn, int fnMode)\n\t// Combines the specified region with the current clipping region using the specified mode.\n\t{\n\t\tassert(m_pData->hDC);\n\t\tassert(pRgn);\n\t\treturn ::ExtSelectClipRgn(m_pData->hDC, *pRgn, fnMode);\n\t}\n#endif\n\n\tinline CBitmap* CDC::SelectObject(const CBitmap* pBitmap)\n\t// Use this to attach an existing bitmap.\n\t{\n\t\tassert(m_pData->hDC);\n\t\tassert(pBitmap);\n\n\t\treturn FromHandle( (HBITMAP)::SelectObject(m_pData->hDC, *pBitmap) );\n\t}\n\n\tinline CBrush* CDC::SelectObject(const CBrush* pBrush)\n\t// Use this to attach an existing brush.\n\t{\n\t\tassert(m_pData->hDC);\n\t\tassert(pBrush);\n\n\t\treturn FromHandle( (HBRUSH)::SelectObject(m_pData->hDC, *pBrush) );\n\t}\n\n\tinline CFont* CDC::SelectObject(const CFont* pFont)\n\t// Use this to attach an existing font.\n\t{\n\t\tassert(m_pData->hDC);\n\t\tassert(pFont);\n\n\t\treturn FromHandle( (HFONT)::SelectObject(m_pData->hDC, *pFont) );\n\t}\n\n\tinline CPalette* CDC::SelectObject(const CPalette* pPalette)\n\t// Use this to attach an existing Palette.\n\t{\n\t\tassert(m_pData->hDC);\n\t\tassert(pPalette);\n\n\t\treturn FromHandle( (HPALETTE)::SelectObject(m_pData->hDC, *pPalette) );\n\t}\n\n\tinline CPen* CDC::SelectObject(const CPen* pPen)\n\t// Use this to attach an existing pen.\n\t{\n\t\tassert(m_pData->hDC);\n\t\tassert(pPen);\n\n\t\treturn FromHandle( (HPEN)::SelectObject(m_pData->hDC, *pPen) );\n\t}\n\n\tinline CPalette* CDC::SelectPalette(const CPalette* pPalette, BOOL bForceBkgnd)\n\t// Use this to attach an existing palette.\n\t{\n\t\tassert(m_pData->hDC);\n\t\tassert(pPalette);\n\n\t\treturn FromHandle( (HPALETTE)::SelectPalette(m_pData->hDC, *pPalette, bForceBkgnd) );\n\t}\n#ifndef _WIN32_WCE\n\tinline BOOL CDC::PtVisible(int X, int Y)\n\t// Determines whether the specified point is within the clipping region of a device context.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::PtVisible (m_pData->hDC, X, Y);\n\t}\n\n\tinline int CDC::OffsetClipRgn(int nXOffset, int nYOffset)\n\t// Moves the clipping region of a device context by the specified offsets.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::OffsetClipRgn (m_pData->hDC, nXOffset, nYOffset);\n\t}\n#endif\n\n\t// Point and Line Drawing Functions\n\tinline CPoint CDC::GetCurrentPosition() const\n\t// Returns the current \"MoveToEx\" position.\n\t{\n\t\tassert(m_pData->hDC);\n\t\tCPoint pt;\n\t\t::MoveToEx(m_pData->hDC, 0, 0, &pt);\n\t\t::MoveToEx(m_pData->hDC, pt.x, pt.y, NULL);\n\t\treturn pt;\n\t}\n\n\tinline CPoint CDC::MoveTo(int x, int y) const\n\t// Updates the current position to the specified point.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::MoveToEx(m_pData->hDC, x, y, NULL);\n\t}\n\n\tinline CPoint CDC::MoveTo(POINT pt) const\n\t// Updates the current position to the specified point\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::MoveToEx(m_pData->hDC, pt.x, pt.y, NULL);\n\t}\n\n\tinline BOOL CDC::LineTo(int x, int y) const\n\t// Draws a line from the current position up to, but not including, the specified point.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::LineTo(m_pData->hDC, x, y);\n\t}\n\n\tinline BOOL CDC::LineTo(POINT pt) const\n\t// Draws a line from the current position up to, but not including, the specified point.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::LineTo(m_pData->hDC, pt.x, pt.y);\n\t}\n\n#ifndef _WIN32_WCE\n\tinline BOOL CDC::Arc(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) const\n\t// Draws an elliptical arc.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::Arc(m_pData->hDC, x1, y1, x2, y2, x3, y3, x4, y4);\n\t}\n\n\tinline BOOL CDC::Arc(RECT& rc, POINT ptStart, POINT ptEnd) const\n\t// Draws an elliptical arc.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::Arc(m_pData->hDC, rc.left, rc.top, rc.right, rc.bottom,\n\t\t\tptStart.x, ptStart.y, ptEnd.x, ptEnd.y);\n\t}\n\n\tinline BOOL CDC::ArcTo(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) const\n\t// Draws an elliptical arc.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::ArcTo(m_pData->hDC, x1, y1, x2, y2, x3, y3, x4, y4);\n\t}\n\n\tinline BOOL CDC::ArcTo(RECT& rc, POINT ptStart, POINT ptEnd) const\n\t// Draws an elliptical arc.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::ArcTo (m_pData->hDC, rc.left, rc.top, rc.right, rc.bottom,\n\t\t\tptStart.x, ptStart.y, ptEnd.x, ptEnd.y);\n\t}\n\n\tinline BOOL CDC::AngleArc(int x, int y, int nRadius, float fStartAngle, float fSweepAngle) const\n\t// Draws a line segment and an arc.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::AngleArc(m_pData->hDC, x, y, nRadius, fStartAngle, fSweepAngle);\n\t}\n\n\tinline int CDC::GetArcDirection() const\n\t// Retrieves the current arc direction ( AD_COUNTERCLOCKWISE or AD_CLOCKWISE ).\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::GetArcDirection(m_pData->hDC);\n\t}\n\n\tinline int CDC::SetArcDirection(int nArcDirection) const\n\t// Sets the current arc direction ( AD_COUNTERCLOCKWISE or AD_CLOCKWISE ).\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::SetArcDirection(m_pData->hDC, nArcDirection);\n\t}\n\n\tinline BOOL CDC::PolyDraw(const POINT* lpPoints, const BYTE* lpTypes, int nCount) const\n\t// Draws a set of line segments and Bzier curves.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::PolyDraw(m_pData->hDC, lpPoints, lpTypes, nCount);\n\t}\n\n\tinline BOOL CDC::Polyline(LPPOINT lpPoints, int nCount) const\n\t// Draws a series of line segments by connecting the points in the specified array.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::Polyline(m_pData->hDC, lpPoints, nCount);\n\t}\n\n\tinline BOOL CDC::PolyPolyline(const POINT* lpPoints, const DWORD* lpPolyPoints, int nCount) const\n\t// Draws multiple series of connected line segments.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::PolyPolyline(m_pData->hDC, lpPoints, lpPolyPoints, nCount);\n\t}\n\n\tinline BOOL CDC::PolylineTo(const POINT* lpPoints, int nCount) const\n\t// Draws one or more straight lines.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::PolylineTo(m_pData->hDC, lpPoints, nCount);\n\t}\n\tinline BOOL CDC::PolyBezier(const POINT* lpPoints, int nCount) const\n\t// Draws one or more Bzier curves.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::PolyBezier(m_pData->hDC, lpPoints, nCount);\n\t}\n\n\tinline BOOL CDC::PolyBezierTo(const POINT* lpPoints, int nCount) const\n\t// Draws one or more Bzier curves.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::PolyBezierTo(m_pData->hDC, lpPoints, nCount );\n\t}\n\n\tinline COLORREF CDC::GetPixel(int x, int y) const\n\t// Retrieves the red, green, blue (RGB) color value of the pixel at the specified coordinates.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::GetPixel(m_pData->hDC, x, y);\n\t}\n\n\tinline COLORREF CDC::GetPixel(POINT pt) const\n\t// Retrieves the red, green, blue (RGB) color value of the pixel at the specified coordinates.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::GetPixel(m_pData->hDC, pt.x, pt.y);\n\t}\n\n\tinline COLORREF CDC::SetPixel (int x, int y, COLORREF crColor) const\n\t// Sets the pixel at the specified coordinates to the specified color.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::SetPixel(m_pData->hDC, x, y, crColor);\n\t}\n\n\tinline COLORREF CDC::SetPixel(POINT pt, COLORREF crColor) const\n\t// Sets the pixel at the specified coordinates to the specified color.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::SetPixel(m_pData->hDC, pt.x, pt.y, crColor);\n\t}\n\n\tinline BOOL CDC::SetPixelV(int x, int y, COLORREF crColor) const\n\t// Sets the pixel at the specified coordinates to the closest approximation of the specified color.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::SetPixelV(m_pData->hDC, x, y, crColor);\n\t}\n\n\tinline BOOL CDC::SetPixelV(POINT pt, COLORREF crColor) const\n\t// Sets the pixel at the specified coordinates to the closest approximation of the specified color.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::SetPixelV(m_pData->hDC, pt.x, pt.y, crColor);\n\t}\n#endif\n\n\t// Shape Drawing Functions\n\tinline void CDC::DrawFocusRect(const RECT& rc) const\n\t// Draws a rectangle in the style used to indicate that the rectangle has the focus.\n\t{\n\t\tassert(m_pData->hDC);\n\t\t::DrawFocusRect(m_pData->hDC, &rc);\n\t}\n\n\tinline BOOL CDC::Ellipse(int x1, int y1, int x2, int y2) const\n\t// Draws an ellipse. The center of the ellipse is the center of the specified bounding rectangle.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::Ellipse(m_pData->hDC, x1, y1, x2, y2);\n\t}\n\n\tinline BOOL CDC::Ellipse(const RECT& rc) const\n\t// Draws an ellipse. The center of the ellipse is the center of the specified bounding rectangle.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::Ellipse(m_pData->hDC, rc.left, rc.top, rc.right, rc.bottom);\n\t}\n\n\tinline BOOL CDC::Polygon(LPPOINT lpPoints, int nCount) const\n\t// Draws a polygon consisting of two or more vertices connected by straight lines.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::Polygon(m_pData->hDC, lpPoints, nCount);\n\t}\n\n\tinline BOOL CDC::Rectangle(int x1, int y1, int x2, int y2) const\n\t// Draws a rectangle. The rectangle is outlined by using the current pen and filled by using the current brush.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::Rectangle(m_pData->hDC, x1, y1, x2, y2);\n\t}\n\n\tinline BOOL CDC::Rectangle(const RECT& rc) const\n\t// Draws a rectangle. The rectangle is outlined by using the current pen and filled by using the current brush.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::Rectangle(m_pData->hDC, rc.left, rc.top, rc.right, rc.bottom);\n\t}\n\n\tinline BOOL CDC::RoundRect(int x1, int y1, int x2, int y2, int nWidth, int nHeight) const\n\t// Draws a rectangle with rounded corners.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::RoundRect(m_pData->hDC, x1, y1, x2, y2, nWidth, nHeight);\n\t}\n\tinline BOOL CDC::RoundRect(const RECT& rc, int nWidth, int nHeight) const\n\t// Draws a rectangle with rounded corners.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::RoundRect(m_pData->hDC, rc.left, rc.top, rc.right, rc.bottom, nWidth, nHeight );\n\t}\n\n#ifndef _WIN32_WCE\n\tinline BOOL CDC::Chord(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) const\n\t// Draws a chord (a region bounded by the intersection of an ellipse and a line segment, called a secant).\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::Chord(m_pData->hDC, x1, y1, x2, y2, x3, y3, x4, y4);\n\t}\n\n\tinline BOOL CDC::Chord(const RECT& rc, POINT ptStart, POINT ptEnd) const\n\t// Draws a chord (a region bounded by the intersection of an ellipse and a line segment, called a secant).\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::Chord(m_pData->hDC, rc.left, rc.top, rc.right, rc.bottom,\n\t\t\tptStart.x, ptStart.y, ptEnd.x, ptEnd.y);\n\t}\n\n\tinline BOOL CDC::Pie(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) const\n\t// Draws a pie-shaped wedge bounded by the intersection of an ellipse and two radials.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::Pie(m_pData->hDC, x1, y1, x2, y2, x3, y3, x4, y4);\n\t}\n\n\tinline BOOL CDC::Pie(const RECT& rc, POINT ptStart, POINT ptEnd) const\n\t// Draws a pie-shaped wedge bounded by the intersection of an ellipse and two radials.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::Pie(m_pData->hDC, rc.left, rc.top, rc.right, rc.bottom,\n\t\t\tptStart.x, ptStart.y, ptEnd.x, ptEnd.y);\n\t}\n\n\tinline BOOL CDC::PolyPolygon(LPPOINT lpPoints, LPINT lpPolyCounts, int nCount) const\n\t// Draws a series of closed polygons.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::PolyPolygon(m_pData->hDC, lpPoints, lpPolyCounts, nCount);\n\t}\n#endif\n\n\t// Fill and 3D Drawing functions\n\tinline BOOL CDC::FillRect(const RECT& rc, CBrush* pBrush) const\n\t// Fills a rectangle by using the specified brush.\n\t{\n\t\tassert(m_pData->hDC);\n\t\tassert(pBrush);\n\t\treturn (BOOL)::FillRect(m_pData->hDC, &rc, *pBrush);\n\t}\n\n\tinline BOOL CDC::InvertRect(const RECT& rc) const\n\t// Inverts a rectangle in a window by performing a logical NOT operation on the color values for each pixel in the rectangle's interior.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::InvertRect( m_pData->hDC, &rc);\n\t}\n\n\tinline BOOL CDC::DrawIconEx(int xLeft, int yTop, HICON hIcon, int cxWidth, int cyWidth, UINT istepIfAniCur, CBrush* pFlickerFreeDraw, UINT diFlags) const\n\t// draws an icon or cursor, performing the specified raster operations, and stretching or compressing the icon or cursor as specified.\n\t{\n\t\tassert(m_pData->hDC);\n\t\tHBRUSH hFlickerFreeDraw = pFlickerFreeDraw? (HBRUSH)pFlickerFreeDraw->GetHandle() : NULL;\n\t\treturn ::DrawIconEx(m_pData->hDC, xLeft, yTop, hIcon, cxWidth, cyWidth, istepIfAniCur, hFlickerFreeDraw, diFlags);\n\t}\n\n\tinline BOOL CDC::DrawEdge(const RECT& rc, UINT nEdge, UINT nFlags) const\n\t// Draws one or more edges of rectangle.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::DrawEdge(m_pData->hDC, (LPRECT)&rc, nEdge, nFlags);\n\t}\n\n\tinline BOOL CDC::DrawFrameControl(const RECT& rc, UINT nType, UINT nState) const\n\t// Draws a frame control of the specified type and style.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::DrawFrameControl(m_pData->hDC, (LPRECT)&rc, nType, nState);\n\t}\n\n\tinline BOOL CDC::FillRgn(CRgn* pRgn, CBrush* pBrush) const\n\t// Fills a region by using the specified brush.\n\t{\n\t\tassert(m_pData->hDC);\n\t\tassert(pRgn);\n\t\tassert(pBrush);\n\t\treturn ::FillRgn(m_pData->hDC, *pRgn, *pBrush);\n\t}\n\n#ifndef _WIN32_WCE\n\tinline BOOL CDC::DrawIcon(int x, int y, HICON hIcon) const\n\t// Draws an icon or cursor.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::DrawIcon(m_pData->hDC, x, y, hIcon);\n\t}\n\n\tinline BOOL CDC::DrawIcon(POINT pt, HICON hIcon) const\n\t// Draws an icon or cursor.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::DrawIcon(m_pData->hDC, pt.x, pt.y, hIcon);\n\t}\n\n\tinline BOOL CDC::FrameRect(const RECT& rc, CBrush* pBrush) const\n\t// Draws a border around the specified rectangle by using the specified brush.\n\t{\n\t\tassert(m_pData->hDC);\n\t\tassert(pBrush);\n\t\treturn (BOOL)::FrameRect(m_pData->hDC, &rc, *pBrush);\n\t}\n\n\tinline BOOL CDC::PaintRgn(CRgn* pRgn) const\n\t// Paints the specified region by using the brush currently selected into the device context.\n\t{\n\t\tassert(m_pData->hDC);\n\t\tassert(pRgn);\n\t\treturn ::PaintRgn(m_pData->hDC, *pRgn);\n\t}\n#endif\n\n\t// Bitmap Functions\n\tinline int CDC::StretchDIBits(int XDest, int YDest, int nDestWidth, int nDestHeight, int XSrc, int YSrc, int nSrcWidth,\n\t\t           int nSrcHeight, CONST VOID *lpBits, BITMAPINFO& bi, UINT iUsage, DWORD dwRop) const\n\t// Copies the color data for a rectangle of pixels in a DIB to the specified destination rectangle.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::StretchDIBits(m_pData->hDC, XDest, YDest, nDestWidth, nDestHeight, XSrc, YSrc, nSrcWidth, nSrcHeight, lpBits, &bi, iUsage, dwRop);\n\t}\n\n\tinline BOOL CDC::PatBlt(int x, int y, int nWidth, int nHeight, DWORD dwRop) const\n\t// Paints the specified rectangle using the brush that is currently selected into the device context.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::PatBlt(m_pData->hDC, x, y, nWidth, nHeight, dwRop);\n\t}\n\n\tinline BOOL CDC::BitBlt(int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop) const\n\t// Performs a bit-block transfer of the color data corresponding to a rectangle of pixels from the specified source device context into a destination device context.\n\t{\n\t\tassert(m_pData->hDC);\n\t\tassert(pSrcDC);\n\t\treturn ::BitBlt(m_pData->hDC, x, y, nWidth, nHeight, pSrcDC->GetHDC(), xSrc, ySrc, dwRop);\n\t}\n\n\tinline BOOL CDC::StretchBlt(int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop) const\n\t// Copies a bitmap from a source rectangle into a destination rectangle, stretching or compressing the bitmap to fit the dimensions of the destination rectangle, if necessary.\n\t{\n\t\tassert(m_pData->hDC);\n\t\tassert(pSrcDC);\n\t\treturn ::StretchBlt(m_pData->hDC, x, y, nWidth, nHeight, pSrcDC->GetHDC(), xSrc, ySrc, nSrcWidth, nSrcHeight, dwRop);\n\t}\n\n#ifndef _WIN32_WCE\n\tinline int CDC::GetDIBits(CBitmap* pBitmap, UINT uStartScan, UINT cScanLines, LPVOID lpvBits, LPBITMAPINFO lpbi, UINT uUsage) const\n\t// Retrieves the bits of the specified compatible bitmap and copies them into a buffer as a DIB using the specified format.\n\t{\n\t\tassert(m_pData->hDC);\n\t\tassert(pBitmap);\n\t\treturn ::GetDIBits(m_pData->hDC, *pBitmap, uStartScan, cScanLines, lpvBits, lpbi, uUsage);\n\t}\n\n\tinline int CDC::SetDIBits(CBitmap* pBitmap, UINT uStartScan, UINT cScanLines, CONST VOID *lpvBits, LPBITMAPINFO lpbi, UINT fuColorUse) const\n\t// Sets the pixels in a compatible bitmap (DDB) using the color data found in the specified DIB.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::SetDIBits(m_pData->hDC, *pBitmap, uStartScan, cScanLines, lpvBits, lpbi, fuColorUse);\n\t}\n\n\tinline int CDC::GetStretchBltMode() const\n\t// Retrieves the current stretching mode.\n\t// Possible modes: BLACKONWHITE, COLORONCOLOR, HALFTONE, STRETCH_ANDSCANS, STRETCH_DELETESCANS, STRETCH_HALFTONE, STRETCH_ORSCANS, WHITEONBLACK\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::GetStretchBltMode(m_pData->hDC);\n\t}\n\n\tinline int CDC::SetStretchBltMode(int iStretchMode) const\n\t// Sets the stretching mode.\n\t// Possible modes: BLACKONWHITE, COLORONCOLOR, HALFTONE, STRETCH_ANDSCANS, STRETCH_DELETESCANS, STRETCH_HALFTONE, STRETCH_ORSCANS, WHITEONBLACK\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::SetStretchBltMode(m_pData->hDC, iStretchMode);\n\t}\n\n\tinline BOOL CDC::FloodFill(int x, int y, COLORREF crColor) const\n\t// Fills an area of the display surface with the current brush.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::FloodFill(m_pData->hDC, x, y, crColor);\n\t}\n\n\tinline BOOL CDC::ExtFloodFill(int x, int y, COLORREF crColor, UINT nFillType) const\n\t// Fills an area of the display surface with the current brush.\n\t// Fill type: FLOODFILLBORDER or FLOODFILLSURFACE\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::ExtFloodFill(m_pData->hDC, x, y, crColor, nFillType );\n\t}\n\n\t// co-ordinate functions\n\tinline BOOL CDC::DPtoLP(LPPOINT lpPoints, int nCount) const\n\t// Converts device coordinates into logical coordinates.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::DPtoLP(m_pData->hDC, lpPoints, nCount);\n\t}\n\n\tinline BOOL CDC::DPtoLP(RECT& rc) const\n\t// Converts device coordinates into logical coordinates.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::DPtoLP(m_pData->hDC, (LPPOINT)&rc, 2);\n\t}\n\n\tinline BOOL CDC::LPtoDP(LPPOINT lpPoints, int nCount) const\n\t// Converts logical coordinates into device coordinates.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::LPtoDP(m_pData->hDC, lpPoints, nCount);\n\t}\n\n\tinline BOOL CDC::LPtoDP(RECT& rc) const\n\t// Converts logical coordinates into device coordinates.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::LPtoDP(m_pData->hDC, (LPPOINT)&rc, 2);\n\t}\n\n#endif\n\n\t// Layout Functions\n\tinline DWORD CDC::GetLayout() const\n\t// Returns the layout of a device context (LAYOUT_RTL and LAYOUT_BITMAPORIENTATIONPRESERVED).\n\t{\n#if defined(WINVER) && defined(GetLayout) && (WINVER >= 0x0500)\n\t\treturn ::GetLayout(m_pData->hDC);\n#else\n\t\treturn 0;\n#endif\n\t}\n\n\tinline DWORD CDC::SetLayout(DWORD dwLayout) const\n\t// changes the layout of a device context (DC).\n\t// dwLayout values:  LAYOUT_RTL or LAYOUT_BITMAPORIENTATIONPRESERVED\n\t{\n#if defined(WINVER) && defined (SetLayout) && (WINVER >= 0x0500)\n\t\t// Sets the layout of a device context\n\t\treturn ::SetLayout(m_pData->hDC, dwLayout);\n#else\n\t\tUNREFERENCED_PARAMETER(dwLayout); // no-op\n\t\treturn 0;\n#endif\n\t}\n\n\t// Mapping Functions\n#ifndef _WIN32_WCE\n\tinline int CDC::GetMapMode()  const\n\t// Rretrieves the current mapping mode.\n\t// Possible modes: MM_ANISOTROPIC, MM_HIENGLISH, MM_HIMETRIC, MM_ISOTROPIC, MM_LOENGLISH, MM_LOMETRIC, MM_TEXT, and MM_TWIPS.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::GetMapMode(m_pData->hDC);\n\t}\n\n\tinline BOOL CDC::GetViewportOrgEx(LPPOINT lpPoint)  const\n\t// Retrieves the x-coordinates and y-coordinates of the viewport origin for the device context.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::GetViewportOrgEx(m_pData->hDC, lpPoint);\n\t}\n\n\tinline int CDC::SetMapMode(int nMapMode) const\n\t// Sets the mapping mode of the specified device context.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::SetMapMode(m_pData->hDC, nMapMode);\n\t}\n\n\tinline BOOL CDC::SetViewportOrgEx(int x, int y, LPPOINT lpPoint /* = NULL */) const\n\t// Specifies which device point maps to the window origin (0,0).\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::SetViewportOrgEx(m_pData->hDC, x, y, lpPoint);\n\t}\n\n\tinline BOOL CDC::SetViewportOrgEx(POINT point, LPPOINT lpPointRet /* = NULL */) const\n\t// Specifies which device point maps to the window origin (0,0).\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn SetViewportOrgEx(point.x, point.y, lpPointRet);\n\t}\n\n\tinline BOOL CDC::OffsetViewportOrgEx(int nWidth, int nHeight, LPPOINT lpPoint /* = NULL */) const\n\t// Modifies the viewport origin for the device context using the specified horizontal and vertical offsets.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::OffsetViewportOrgEx(m_pData->hDC, nWidth, nHeight, lpPoint);\n\t}\n\n\tinline BOOL CDC::GetViewportExtEx(LPSIZE lpSize)  const\n\t// Retrieves the x-extent and y-extent of the current viewport for the device context.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::GetViewportExtEx(m_pData->hDC, lpSize);\n\t}\n\n\tinline BOOL CDC::SetViewportExtEx(int x, int y, LPSIZE lpSize ) const\n\t// Sets the horizontal and vertical extents of the viewport for the device context by using the specified values.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::SetViewportExtEx(m_pData->hDC, x, y, lpSize);\n\t}\n\n\tinline BOOL CDC::SetViewportExtEx(SIZE size, LPSIZE lpSizeRet ) const\n\t// Sets the horizontal and vertical extents of the viewport for the device context by using the specified values.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn SetViewportExtEx(size.cx, size.cy, lpSizeRet);\n\t}\n\n\tinline BOOL CDC::ScaleViewportExtEx(int xNum, int xDenom, int yNum, int yDenom, LPSIZE lpSize ) const\n\t// Modifies the viewport for the device context using the ratios formed by the specified multiplicands and divisors.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::ScaleViewportExtEx(m_pData->hDC, xNum, xDenom, yNum, yDenom, lpSize);\n\t}\n\n\tinline BOOL CDC::GetWindowOrgEx(LPPOINT lpPoint) const\n\t// Retrieves the x-coordinates and y-coordinates of the window origin for the device context.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::GetWindowOrgEx(m_pData->hDC, lpPoint);\n\t}\n\n\tinline BOOL CDC::SetWindowOrgEx(int x, int y, LPPOINT lpPoint ) const\n\t// Specifies which window point maps to the viewport origin (0,0).\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::SetWindowOrgEx(m_pData->hDC, x, y, lpPoint);\n\t}\n\n\tinline BOOL CDC::SetWindowOrgEx(POINT point, LPPOINT lpPointRet ) const\n\t// Specifies which window point maps to the viewport origin (0,0).\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn SetWindowOrgEx(point.x, point.y, lpPointRet);\n\t}\n\n\tinline BOOL CDC::OffsetWindowOrgEx(int nWidth, int nHeight, LPPOINT lpPoint ) const\n\t// Modifies the window origin for the device context using the specified horizontal and vertical offsets.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::OffsetWindowOrgEx(m_pData->hDC, nWidth, nHeight, lpPoint);\n\t}\n\n\tinline BOOL CDC::GetWindowExtEx(LPSIZE lpSize)  const\n\t// Retrieves the x-extent and y-extent of the window for the device context.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::GetWindowExtEx(m_pData->hDC, lpSize);\n\t}\n\n\tinline BOOL CDC::SetWindowExtEx(int x, int y, LPSIZE lpSize ) const\n\t// Sets the horizontal and vertical extents of the window for the device context by using the specified values.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::SetWindowExtEx(m_pData->hDC, x, y, lpSize);\n\t}\n\n\tinline BOOL CDC::SetWindowExtEx(SIZE size, LPSIZE lpSizeRet) const\n\t// Sets the horizontal and vertical extents of the window for the device context by using the specified values.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn SetWindowExtEx(size.cx, size.cy, lpSizeRet);\n\t}\n\n\tinline BOOL CDC::ScaleWindowExtEx(int xNum, int xDenom, int yNum, int yDenom, LPSIZE lpSize) const\n\t// Modifies the window for the device context using the ratios formed by the specified multiplicands and divisors.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::ScaleWindowExtEx(m_pData->hDC, xNum, xDenom, yNum, yDenom, lpSize);\n\t}\n#endif\n\n\t// Printer Functions\n\tinline int CDC::StartDoc(LPDOCINFO lpDocInfo) const\n\t// Starts a print job.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::StartDoc(m_pData->hDC, lpDocInfo);\n\t}\n\n\tinline int CDC::EndDoc() const\n\t// Ends a print job.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::EndDoc(m_pData->hDC);\n\t}\n\n\tinline int CDC::StartPage() const\n\t// Prepares the printer driver to accept data.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::StartPage(m_pData->hDC);\n\t}\n\n\tinline int CDC::EndPage() const\n\t// Notifies the device that the application has finished writing to a page.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::EndPage(m_pData->hDC);\n\t}\n\n\tinline int CDC::AbortDoc() const\n\t// Stops the current print job and erases everything drawn since the last call to the StartDoc function.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::AbortDoc(m_pData->hDC);\n\t}\n\n\tinline int CDC::SetAbortProc(BOOL (CALLBACK* lpfn)(HDC, int)) const\n\t// Sets the application-defined abort function that allows a print job to be canceled during spooling.\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::SetAbortProc(m_pData->hDC, lpfn);\n\t}\n\n\t// Text Functions\n\tinline BOOL CDC::ExtTextOut(int x, int y, UINT nOptions, LPCRECT lprc, LPCTSTR lpszString, int nCount /*= -1*/, LPINT lpDxWidths /*=NULL*/) const\n\t// Draws text using the currently selected font, background color, and text color\n\t{\n\t\tassert(m_pData->hDC);\n\n\t\tif (nCount == -1)\n\t\t\tnCount = lstrlen (lpszString);\n\n\t\treturn ::ExtTextOut(m_pData->hDC, x, y, nOptions, lprc, lpszString, nCount, lpDxWidths );\n\t}\n\n\tinline int CDC::DrawText(LPCTSTR lpszString, int nCount, LPRECT lprc, UINT nFormat) const\n\t// Draws formatted text in the specified rectangle\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::DrawText(m_pData->hDC, lpszString, nCount, lprc, nFormat );\n\t}\n\n\tinline UINT CDC::GetTextAlign() const\n\t// Retrieves the text-alignment setting\n\t// Values: TA_BASELINE, TA_BOTTOM, TA_TOP, TA_CENTER, TA_LEFT, TA_RIGHT, TA_RTLREADING, TA_NOUPDATECP, TA_UPDATECP\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::GetTextAlign(m_pData->hDC);\n\t}\n\n\tinline UINT CDC::SetTextAlign(UINT nFlags) const\n\t// Sets the text-alignment setting\n\t// Values: TA_BASELINE, TA_BOTTOM, TA_TOP, TA_CENTER, TA_LEFT, TA_RIGHT, TA_RTLREADING, TA_NOUPDATECP, TA_UPDATECP\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::SetTextAlign(m_pData->hDC, nFlags);\n\t}\n\n\tinline int CDC::GetTextFace(int nCount, LPTSTR lpszFacename) const\n\t// Retrieves the typeface name of the font that is selected into the device context\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::GetTextFace(m_pData->hDC, nCount, lpszFacename);\n\t}\n\n\tinline BOOL CDC::GetTextMetrics(TEXTMETRIC& Metrics) const\n\t// Fills the specified buffer with the metrics for the currently selected font\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::GetTextMetrics(m_pData->hDC, &Metrics);\n\t}\n\n\tinline COLORREF CDC::GetBkColor() const\n\t// Returns the current background color\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::GetBkColor(m_pData->hDC);\n\t}\n\n\tinline COLORREF CDC::SetBkColor(COLORREF crColor) const\n\t// Sets the current background color to the specified color value\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::SetBkColor(m_pData->hDC, crColor);\n\t}\n\n\tinline COLORREF CDC::GetTextColor() const\n\t// Retrieves the current text color\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::GetTextColor(m_pData->hDC);\n\t}\n\n\tinline COLORREF CDC::SetTextColor(COLORREF crColor) const\n\t// Sets the current text color\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::SetTextColor(m_pData->hDC, crColor);\n\t}\n\n\tinline int CDC::GetBkMode() const\n\t// returns the current background mix mode (OPAQUE or TRANSPARENT)\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::GetBkMode(m_pData->hDC);\n\t}\n\n\tinline int CDC::SetBkMode(int iBkMode) const\n\t// Sets the current background mix mode (OPAQUE or TRANSPARENT)\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::SetBkMode(m_pData->hDC, iBkMode);\n\t}\n\n#ifndef _WIN32_WCE\n\tinline int CDC::DrawTextEx(LPTSTR lpszString, int nCount, LPRECT lprc, UINT nFormat, LPDRAWTEXTPARAMS lpDTParams) const\n\t// Draws formatted text in the specified rectangle with more formatting options\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::DrawTextEx(m_pData->hDC, lpszString, nCount, lprc, nFormat, lpDTParams);\n\t}\n\n\tinline CSize CDC::GetTextExtentPoint32(LPCTSTR lpszString, int nCount) const\n\t// Computes the width and height of the specified string of text\n\t{\n\t\tassert(m_pData->hDC);\n\t\tCSize sz;\n\t\t::GetTextExtentPoint32(m_pData->hDC, lpszString, nCount, &sz);\n\t\treturn sz;\n\t}\n\n\tinline CSize CDC::GetTabbedTextExtent(LPCTSTR lpszString, int nCount, int nTabPositions, LPINT lpnTabStopPositions) const\n\t// Computes the width and height of a character string\n\t{\n\t\tassert(m_pData->hDC);\n\t\tDWORD dwSize = ::GetTabbedTextExtent(m_pData->hDC, lpszString, nCount, nTabPositions, lpnTabStopPositions );\n\t\tCSize sz(dwSize);\n\t\treturn sz;\n\t}\n\n\tinline BOOL CDC::GrayString(CBrush* pBrush, GRAYSTRINGPROC lpOutputFunc, LPARAM lpData, int nCount, int x, int y, int nWidth, int nHeight) const\n\t// Draws gray text at the specified location\n\t{\n\t\tassert(m_pData->hDC);\n\t\tassert(pBrush);\n\t\treturn ::GrayString(m_pData->hDC, *pBrush, lpOutputFunc, lpData, nCount, x, y, nWidth, nHeight);\n\t}\n\n\tinline int CDC::SetTextJustification(int nBreakExtra, int nBreakCount) const\n\t// Specifies the amount of space the system should add to the break characters in a string of text\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::SetTextJustification(m_pData->hDC, nBreakExtra, nBreakCount);\n\t}\n\n\tinline int CDC::GetTextCharacterExtra() const\n\t// Retrieves the current intercharacter spacing for the device context\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::GetTextCharacterExtra(m_pData->hDC);\n\t}\n\n\tinline int CDC::SetTextCharacterExtra(int nCharExtra) const\n\t// Sets the intercharacter spacing\n\t{\n\t\tassert(m_pData->hDC);\n\t\treturn ::SetTextCharacterExtra(m_pData->hDC, nCharExtra);\n\t}\n\n\tinline CSize CDC::TabbedTextOut(int x, int y, LPCTSTR lpszString, int nCount, int nTabPositions, LPINT lpnTabStopPositions, int nTabOrigin) const\n\t// Writes a character string at a specified location, expanding tabs to the values specified in an array of tab-stop positions\n\t{\n\t\tassert(m_pData->hDC);\n\t\tDWORD dwSize = ::TabbedTextOut(m_pData->hDC, x, y, lpszString, nCount, nTabPositions, lpnTabStopPositions, nTabOrigin );\n\t\tCSize sz(dwSize);\n\t\treturn sz;\n\t}\n\n\tinline BOOL CDC::TextOut(int x, int y, LPCTSTR lpszString, int nCount/* = -1*/) const\n\t// Writes a character string at the specified location\n\t{\n\t\tassert(m_pData->hDC);\n\t\tif (nCount == -1)\n\t\t\tnCount = lstrlen (lpszString);\n\n\t\treturn ::TextOut(m_pData->hDC, x, y, lpszString, nCount);\n\t}\n\n#endif\n\n\n\n\t/////////////////////////////////////////////////////////////////\n\t// Definitions for some global functions in the Win32xx namespace\n\t//\n\n#ifndef _WIN32_WCE\n\tinline void TintBitmap (CBitmap* pbmSource, int cRed, int cGreen, int cBlue)\n\t// Modifies the colour of the supplied Device Dependant Bitmap, by the colour\n\t// correction values specified. The correction values can range from -255 to +255.\n\t// This function gains its speed by accessing the bitmap colour information\n\t// directly, rather than using GetPixel/SetPixel.\n\t{\n\t\t// Create our LPBITMAPINFO object\n\t\tCBitmapInfoPtr pbmi(pbmSource);\n\t\tpbmi->bmiHeader.biBitCount = 24;\n\n\t\t// Create the reference DC for GetDIBits to use\n\t\tCMemDC MemDC(NULL);\n\n\t\t// Use GetDIBits to create a DIB from our DDB, and extract the colour data\n\t\tMemDC.GetDIBits(pbmSource, 0, pbmi->bmiHeader.biHeight, NULL, pbmi, DIB_RGB_COLORS);\n\t\tstd::vector<byte> vBits(pbmi->bmiHeader.biSizeImage, 0);\n\t\tbyte* pByteArray = &vBits[0];\n\n\t\tMemDC.GetDIBits(pbmSource, 0, pbmi->bmiHeader.biHeight, pByteArray, pbmi, DIB_RGB_COLORS);\n\t\tUINT nWidthBytes = pbmi->bmiHeader.biSizeImage/pbmi->bmiHeader.biHeight;\n\n\t\t// Ensure sane colour correction values\n\t\tcBlue  = MIN(cBlue, 255);\n\t\tcBlue  = MAX(cBlue, -255);\n\t\tcRed   = MIN(cRed, 255);\n\t\tcRed   = MAX(cRed, -255);\n\t\tcGreen = MIN(cGreen, 255);\n\t\tcGreen = MAX(cGreen, -255);\n\n\t\t// Pre-calculate the RGB modification values\n\t\tint b1 = 256 - cBlue;\n\t\tint g1 = 256 - cGreen;\n\t\tint r1 = 256 - cRed;\n\n\t\tint b2 = 256 + cBlue;\n\t\tint g2 = 256 + cGreen;\n\t\tint r2 = 256 + cRed;\n\n\t\t// Modify the colour\n\t\tint yOffset = 0;\n\t\tint xOffset;\n\t\tint Index;\n\t\tfor (int Row=0; Row < pbmi->bmiHeader.biHeight; Row++)\n\t\t{\n\t\t\txOffset = 0;\n\n\t\t\tfor (int Column=0; Column < pbmi->bmiHeader.biWidth; Column++)\n\t\t\t{\n\t\t\t\t// Calculate Index\n\t\t\t\tIndex = yOffset + xOffset;\n\n\t\t\t\t// Adjust the colour values\n\t\t\t\tif (cBlue > 0)\n\t\t\t\t\tpByteArray[Index]   = (BYTE)(cBlue + (((pByteArray[Index] *b1)) >>8));\n\t\t\t\telse if (cBlue < 0)\n\t\t\t\t\tpByteArray[Index]   = (BYTE)((pByteArray[Index] *b2) >>8);\n\n\t\t\t\tif (cGreen > 0)\n\t\t\t\t\tpByteArray[Index+1] = (BYTE)(cGreen + (((pByteArray[Index+1] *g1)) >>8));\n\t\t\t\telse if (cGreen < 0)\n\t\t\t\t\tpByteArray[Index+1] = (BYTE)((pByteArray[Index+1] *g2) >>8);\n\n\t\t\t\tif (cRed > 0)\n\t\t\t\t\tpByteArray[Index+2] = (BYTE)(cRed + (((pByteArray[Index+2] *r1)) >>8));\n\t\t\t\telse if (cRed < 0)\n\t\t\t\t\tpByteArray[Index+2] = (BYTE)((pByteArray[Index+2] *r2) >>8);\n\n\t\t\t\t// Increment the horizontal offset\n\t\t\t\txOffset += pbmi->bmiHeader.biBitCount >> 3;\n\t\t\t}\n\n\t\t\t// Increment vertical offset\n\t\t\tyOffset += nWidthBytes;\n\t\t}\n\n\t\t// Save the modified colour back into our source DDB\n\t\tMemDC.SetDIBits(pbmSource, 0, pbmi->bmiHeader.biHeight, pByteArray, pbmi, DIB_RGB_COLORS);\n\t}\n\n\tinline void GrayScaleBitmap(CBitmap* pbmSource)\n\t{\n\t\t// Create our LPBITMAPINFO object\n\t\tCBitmapInfoPtr pbmi(pbmSource);\n\n\t\t// Create the reference DC for GetDIBits to use\n\t\tCMemDC MemDC(NULL);\n\n\t\t// Use GetDIBits to create a DIB from our DDB, and extract the colour data\n\t\tMemDC.GetDIBits(pbmSource, 0, pbmi->bmiHeader.biHeight, NULL, pbmi, DIB_RGB_COLORS);\n\t\tstd::vector<byte> vBits(pbmi->bmiHeader.biSizeImage, 0);\n\t\tbyte* pByteArray = &vBits[0];\n\n\t\tMemDC.GetDIBits(pbmSource, 0, pbmi->bmiHeader.biHeight, pByteArray, pbmi, DIB_RGB_COLORS);\n\t\tUINT nWidthBytes = pbmi->bmiHeader.biSizeImage/pbmi->bmiHeader.biHeight;\n\n\t\tint yOffset = 0;\n\t\tint xOffset;\n\t\tint Index;\n\n\t\tfor (int Row=0; Row < pbmi->bmiHeader.biHeight; Row++)\n\t\t{\n\t\t\txOffset = 0;\n\n\t\t\tfor (int Column=0; Column < pbmi->bmiHeader.biWidth; Column++)\n\t\t\t{\n\t\t\t\t// Calculate Index\n\t\t\t\tIndex = yOffset + xOffset;\n\n\t\t\t\tBYTE byGray = (BYTE) ((pByteArray[Index] + pByteArray[Index+1]*6 + pByteArray[Index+2] *3)/10);\n\t\t\t\tpByteArray[Index]   = byGray;\n\t\t\t\tpByteArray[Index+1] = byGray;\n\t\t\t\tpByteArray[Index+2] = byGray;\n\n\t\t\t\t// Increment the horizontal offset\n\t\t\t\txOffset += pbmi->bmiHeader.biBitCount >> 3;\n\t\t\t}\n\n\t\t\t// Increment vertical offset\n\t\t\tyOffset += nWidthBytes;\n\t\t}\n\n\t\t// Save the modified colour back into our source DDB\n\t\tMemDC.SetDIBits(pbmSource, 0, pbmi->bmiHeader.biHeight, pByteArray, pbmi, DIB_RGB_COLORS);\n\t}\n\n\tinline HIMAGELIST CreateDisabledImageList(HIMAGELIST himlNormal)\n\t// Returns a greyed image list, created from hImageList\n\t{\n\t\tint cx, cy;\n\t\tint nCount = ImageList_GetImageCount(himlNormal);\n\t\tif (0 == nCount)\n\t\t\treturn NULL;\n\n\t\tImageList_GetIconSize(himlNormal, &cx, &cy);\n\n\t\t// Create the disabled ImageList\n\t\tHIMAGELIST himlDisabled = ImageList_Create(cx, cy, ILC_COLOR24 | ILC_MASK, nCount, 0);\n\n\t\t// Process each image in the ImageList\n\t\tfor (int i = 0 ; i < nCount; ++i)\n\t\t{\n\t\t\tCClientDC DesktopDC(NULL);\n\t\t\tCMemDC MemDC(NULL);\n\t\t\tCBitmap* pOldBitmap = MemDC.CreateCompatibleBitmap(&DesktopDC, cx, cx);\n\t\t\tCRect rc;\n\t\t\trc.SetRect(0, 0, cx, cx);\n\n\t\t\t// Set the mask color to grey for the new ImageList\n\t\t\tCOLORREF crMask = RGB(200, 199, 200);\n\t\t\tif ( GetDeviceCaps(DesktopDC, BITSPIXEL) < 24)\n\t\t\t{\n\t\t\t\tHPALETTE hPal = (HPALETTE)GetCurrentObject(DesktopDC, OBJ_PAL);\n\t\t\t\tUINT Index = GetNearestPaletteIndex(hPal, crMask);\n\t\t\t\tif (Index != CLR_INVALID) crMask = PALETTEINDEX(Index);\n\t\t\t}\n\n\t\t\tMemDC.SolidFill(crMask, rc);\n\n\t\t\t// Draw the image on the memory DC\n\t\t\tImageList_SetBkColor(himlNormal, crMask);\n\t\t\tImageList_Draw(himlNormal, i, MemDC, 0, 0, ILD_NORMAL);\n\n\t\t\t// Convert colored pixels to gray\n\t\t\tfor (int x = 0 ; x < cx; ++x)\n\t\t\t{\n\t\t\t\tfor (int y = 0; y < cy; ++y)\n\t\t\t\t{\n\t\t\t\t\tCOLORREF clr = ::GetPixel(MemDC, x, y);\n\n\t\t\t\t\tif (clr != crMask)\n\t\t\t\t\t{\n\t\t\t\t\t\tBYTE byGray = (BYTE) (95 + (GetRValue(clr) *3 + GetGValue(clr)*6 + GetBValue(clr))/20);\n\t\t\t\t\t\tMemDC.SetPixel(x, y, RGB(byGray, byGray, byGray));\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Detach the bitmap so we can use it.\n\t\t\tCBitmap* pBitmap = MemDC.SelectObject(pOldBitmap);\n\t\t\tImageList_AddMasked(himlDisabled, *pBitmap, crMask);\n\t\t}\n\n\t\treturn himlDisabled;\n\t}\n#endif\n\n\t////////////////////////////////////////////\n\t// Global Function Definitions\n\t//\n\n\tinline CDC* FromHandle(HDC hDC)\n\t// Returns the CDC object associated with the device context handle\n\t// If a CDC object doesn't already exist, a temporary CDC object is created.\n\t// The HDC belonging to a temporary CDC is not released or destroyed when the\n\t//  temporary CDC is deconstructed.\n\t{\n\t\tassert( GetApp() );\n\t\tCDC* pDC = GetApp()->GetCDCFromMap(hDC);\n\t\tif (hDC != 0 && pDC == 0)\n\t\t{\n\t\t\tpDC = new CDC;\n\t\t\tGetApp()->AddTmpDC(pDC);\n\t\t\tpDC->m_pData->hDC = hDC;\n\t\t\tpDC->m_pData->bRemoveHDC = FALSE;\n\t\t}\n\t\treturn pDC;\n\t}\n\n\tinline CBitmap* FromHandle(HBITMAP hBitmap)\n\t// Returns the CBitmap associated with the Bitmap handle\n\t// If a CBitmap object doesn't already exist, a temporary CBitmap object is created.\n\t// The HBITMAP belonging to a temporary CBitmap is not released or destroyed\n\t//  when the temporary CBitmap is deconstructed.\n\t{\n\t\tassert( GetApp() );\n\t\tCBitmap* pBitmap = (CBitmap*)GetApp()->GetCGDIObjectFromMap(hBitmap);\n\t\tif (hBitmap != 0 && pBitmap == 0)\n\t\t{\n\t\t\tpBitmap = new CBitmap;\n\t\t\tGetApp()->AddTmpGDI(pBitmap);\n\t\t\tpBitmap->m_pData->hGDIObject = hBitmap;\n\t\t\tpBitmap->m_pData->bRemoveObject = FALSE;\n\t\t}\n\t\treturn pBitmap;\n\t}\n\n\tinline CBrush* FromHandle(HBRUSH hBrush)\n\t// Returns the CBrush associated with the Brush handle\n\t// If a CBrush object doesn't already exist, a temporary CBrush object is created.\n\t// The HBRUSH belonging to a temporary CBrush is not released or destroyed\n\t//  when the temporary CBrush is deconstructed.\n\t{\n\t\tassert( GetApp() );\n\t\tCBrush* pBrush = (CBrush*)GetApp()->GetCGDIObjectFromMap(hBrush);\n\t\tif (hBrush != 0 && pBrush == 0)\n\t\t{\n\t\t\tpBrush = new CBrush;\n\t\t\tGetApp()->AddTmpGDI(pBrush);\n\t\t\tpBrush->m_pData->hGDIObject = hBrush;\n\t\t\tpBrush->m_pData->bRemoveObject = FALSE;\n\t\t}\n\t\treturn pBrush;\n\t}\n\n\tinline CFont* FromHandle(HFONT hFont)\n\t// Returns the CFont associated with the Font handle\n\t// If a CFont object doesn't already exist, a temporary CFont object is created.\n\t// The HFONT belonging to a temporary CFont is not released or destroyed\n\t//  when the temporary CFont is deconstructed.\n\t{\n\t\tassert( GetApp() );\n\t\tCFont* pFont = (CFont*)GetApp()->GetCGDIObjectFromMap(hFont);\n\t\tif (hFont != 0 && pFont == 0)\n\t\t{\n\t\t\tpFont = new CFont;\n\t\t\tGetApp()->AddTmpGDI(pFont);\n\t\t\tpFont->m_pData->hGDIObject = hFont;\n\t\t\tpFont->m_pData->bRemoveObject = FALSE;\n\t\t}\n\t\treturn pFont;\n\t}\n\n\tinline CPalette* FromHandle(HPALETTE hPalette)\n\t// Returns the CPalette associated with the palette handle\n\t// If a CPalette object doesn't already exist, a temporary CPalette object is created.\n\t// The HPALETTE belonging to a temporary CPalette is not released or destroyed\n\t//  when the temporary CPalette is deconstructed.\n\t{\n\t\tassert( GetApp() );\n\t\tCPalette* pPalette = (CPalette*)GetApp()->GetCGDIObjectFromMap(hPalette);\n\t\tif (hPalette != 0 && pPalette == 0)\n\t\t{\n\t\t\tpPalette = new CPalette;\n\t\t\tGetApp()->AddTmpGDI(pPalette);\n\t\t\tpPalette->m_pData->hGDIObject = hPalette;\n\t\t\tpPalette->m_pData->bRemoveObject = FALSE;\n\t\t}\n\t\treturn pPalette;\n\t}\n\n\tinline CPen* FromHandle(HPEN hPen)\n\t// Returns the CPen associated with the HPEN.\n\t// If a CPen object doesn't already exist, a temporary CPen object is created.\n\t// The HPEN belonging to a temporary CPen is not released or destroyed\n\t//  when the temporary CPen is deconstructed.\n\t{\n\t\tassert( GetApp() );\n\t\tCPen* pPen = (CPen*)GetApp()->GetCGDIObjectFromMap(hPen);\n\t\tif (hPen != 0 && pPen == 0)\n\t\t{\n\t\t\tpPen = new CPen;\n\t\t\tGetApp()->AddTmpGDI(pPen);\n\t\t\tpPen->m_pData->hGDIObject = hPen;\n\t\t\tpPen->m_pData->bRemoveObject = FALSE;\n\t\t}\n\t\treturn pPen;\n\t}\n\n\tinline CRgn* FromHandle(HRGN hRgn)\n\t// Returns the CRgn associated with the HRGN.\n\t// If a CRgn object doesn't already exist, a temporary CRgn object is created.\n\t// The HRGN belonging to a temporary CRgn is not released or destroyed\n\t//  when the temporary CRgn is deconstructed.\n\t{\n\t\tassert( GetApp() );\n\t\tCRgn* pRgn = (CRgn*)GetApp()->GetCGDIObjectFromMap(hRgn);\n\t\tif (hRgn != 0 && pRgn == 0)\n\t\t{\n\t\t\tpRgn = new CRgn;\n\t\t\tGetApp()->AddTmpGDI(pRgn);\n\t\t\tpRgn->m_pData->hGDIObject = hRgn;\n\t\t\tpRgn->m_pData->bRemoveObject = FALSE;\n\t\t}\n\t\treturn pRgn;\n\t}\n\n\n\n} // namespace Win32xx\n\n#endif // _WIN32XX_GDI_H_\n\n"
  },
  {
    "path": "external/win32cpp/include/info.txt",
    "content": "Generic Information about Win32++ Projects\n==========================================\nThe various directories may contain the following types of files:\n\nExtension | Description\n----------+------------\ncbp       | A project file used by CodeBlocks\ndsp       | A project file used by Visual Studio 6\ndsw       | A project file used by Visual Studio 6\nsln       | A project file used by Visual Studio 2003, VS2005 or VS2008\nvcproj    | A project file used by Visual Studio 2003, VS2005 or VS2008\nvcxproj   | A project file used by Visual Studio 2010\nfilters   | A supplementary project file used by Visual Studio 2010\nbdsproj   | A project file used by Borland Developer Studio 2006 \nbpf       | A project file used by Borland Developer Studio 2006 \nvcp       | A project file used by eMbedded Visual C++\nvcw       | A project file used by eMbedded Visual C++\ndev       | A project file used by Dev-C++\ncpp       | A C++ source file \nh         | A C++ header file\nrc        | A C++ resouce script file\njpg       | A jpeg resource file\nico       | An icon resource file\nbmp       | A bitmap resource file\ncur       | A cursor resource file\nmanifest  | A manifest resource file\ntxt       | A text file\nxml       | An Extensible Markup Language file (defines the ribbon UI) \n\nSupported Compilers and Integrated Development Environments (IDEs)\n==================================================================\nWin32++ supports the following:\n* Borland Compiler Version 5.5\n* Borland Developer Studio 2006\n* Borland Turbo C++ 2006\n* CodeBlocks\n* Dev-C++\n* MinGW GCC Compiler\n* Visual Studio 6\n* Visual Studio.net 2003\n* Visual C++ Toolkit 2003\n* Visual Studio.net 2005\n* Visual Studio.net 2005 Express\n* Visual Studio.net 2008\n* Visual Studio.net 2008 Express\n* Visual Studio.net 2010\n\nCodeBlocks is an IDE. The project files are configured for the following \ncompilers:\n* Borland Compiler Version 5.5\n* MinGW GNU compiler\n* Visual C++ Toolkit 2003\n\nDev-C++ is an IDE which supports the MinGW GNU compiler\n\nSupported Operating Systems\n===========================\nThe programs compiled with Win32++ can run on the following operating systems:\n* Win95 (all versions, with or without Internet Explorer 4 installed)\n* Win98 (both versions)\n* WinME\n* Windows NT 4\n* Windows 2000\n* Windows XP\n* Windows XP x64\n* Windows Vista\n* Windows Vista x64\n* Windows 7\n* Windows 7 x64\n* Windows Server 2003\n* Windows Server 2003 x64\n* Windows Server 2008\n* Windows Server 2008 x64\n* Windows CE\n\nNote: Programs compiled with Visual Studio.net 2008 and Visual Studio.net 2008 \nExpress will not run on Win32 operating systems earlier than Windows 2000.\n\nWin32++ automatically detects if the operating system is capable of using\nrebars. If rebars are not supported by the OS, Win32++ produces a frame without \nrebars.\n\nWin32++ is Unicode compliant and can therefore be used to develop Unicode\napplications. Users are advised that older operating systems (namely Win95, \nWin98 and WinME) don't support Unicode applications.\n\nWin32++ supports 64bit compilers, and can be used to develop 64bit code.\n\nDirectory Structure\n===================\nWhen extracting the files from the zip archive, be sure to preserve the \ndirectory structure. The directory structure will typically look like this:\n\n.\\include\n.\\new projects\n.\\output\n.\\samples\n.\\tools\n.\\tutorials\n.\\WCE samples\n\nThe files which form the Win32++ library are contained in the include\nsubdirectory. \n\nComponents of Win32++\n=====================\n\n Files            |  Classes         | Operating Systems | Description\n==================+==================+===================+=====================\ncontrols.h        | CAnimation       | Win32, Win64      | Adds support for the\n                  | CComboBox        | and WinCE         | following controls:\n\t\t\t\t  |\tCComboBoxEx      |                   | Animation, ComboBox, \n\t\t\t\t  |\tCProgressBar     |                   | ComboBoxEx, Progress\n\t\t\t\t  | CScrollBar       |                   | bar, Scroll bar,\n\t\t\t\t  |\tCSlider          |                   | Slider, Spin button.\n\t\t\t\t  |\tCSpinButton      |                   |\n------------------+------------------+-------------------+---------------------\t\t\t\t  \ndialog.h          | CDialog          | Win32, Win64      | Adds dialog support.\n                  | CResizer         | WinCE for CDialog |\n------------------+------------------+-------------------+---------------------\ndocking.h         | CDocker          | Win32, Win64      | Adds support for\n                  | CDockContainer   |                   | docking windows and\n                  |                  |                   | splitter windows. \n------------------+------------------+-------------------+---------------------                   \nframe.h           | CMenubar         | Win32, Win64      | Adds support for\n                  | CFrame           |                   | frames. Frames use a\n                  |                  |                   | toolbar and menubar\n                  |                  |                   | inside a rebar, and \n                  |                  |                   | a statusbar.  \n------------------+------------------+-------------------+---------------------\ngdi.h             | CDC              | Win32, Win64      | A helper class for \n                  | CBitmap   \t     | and WinCE         | GDI graphics.\n                  | CBrush           |                   |\n                  | CFont            |                   |\n                  | CPalette         |                   |\n                  | CPen             |                   |\n                  | CRgn\t\t     |                   |\n------------------+------------------+-------------------+---------------------\nlistView.h        | CListView        | Win32, Win64      | Adds support for a\n                  |                  | and WinCE         | ListView control.                  \n------------------+------------------+-------------------+---------------------  \nmdi.h             | CMDIFrame        | Win32, Win64      | Adds support for MDI\n                  | CMDIChild        |                   | frames.                  \n------------------+------------------+-------------------+---------------------\npropertysheet.h   | CPropertySheet   | Win32, Win64      | Adds property sheet\n                  | CPropertyPage    | and WinCE         | support.\n------------------+------------------+-------------------+---------------------\nrebar.h           | CRebar           | Win32, Win64      | Adds support for a \n                  |                  | and WinCE         | Rebar control.                  \n------------------+------------------+-------------------+---------------------\nribbon.h          | CRibbon          | Win32, Win64      | Adds support for the \n                  | CRibbonFrame     |                   | Windows 7 ribbon.                  \n------------------+------------------+-------------------+---------------------\nshared_ptr.h      | Shared_Ptr       | Win32, Win64,     | Add a smart pointer\n                  |                  | and WinCE         | for use in vectors.\n------------------+------------------+-------------------+---------------------\nsocket.h          | CSocket          | Win32, Win64      | Adds network  \n                  |                  | and WinCE         | support.\n------------------+------------------+-------------------+---------------------\nsplitter.h        | CSplitter        | Win32, Win64      | Adds splitter support\n                  |                  |                   | (depreciated)\n------------------+------------------+-------------------+----------------------             \nstatusbar.h       | CStatusbar       | Win32, Win64      | Adds support for a\n                  |                  | and WinCE         | Status bar control.\n------------------+------------------+-------------------+---------------------\nstdcontrols.h     | CButton          | Win32, Win64      | Adds support for\n                  | CEdit            | and WinCE         | Button, Edit, \n                  | CListBox         |                   | ListBox and Static    \n                  | CStatic          |                   | controls.                                       \n------------------+------------------+-------------------+---------------------\ntab.h             | CTab             | Win32, Win64      | Adds support for tab\n                  | CMDITab          |                   | controls, and MDI\n                  |                  |                   | tab windows.                   \n------------------+------------------+-------------------+---------------------\ntaskdialog.h      | CTaskDialog      | Win32, Win64      | Adds support for tab\n                  |                  |                   | task dialogs.                   \n------------------+------------------+-------------------+---------------------\nthread.h          | CThread          | Win32, Win64      | Adds support for\n                  |                  | and WinCE         | threads.\n------------------+------------------+-------------------+---------------------\ntoolbar.h         | CToolbar         | Win32, Win64      | Adds support for a\n                  |                  | and WinCE         | Toolbar control.\n------------------+------------------+-------------------+---------------------\ntreeview.h        | CTreeView        | Win32, Win64      | Adds support for a\n                  |                  | and WinCE         | TreeView control.\n------------------+------------------+-------------------+---------------------\nwceframe.h        | CWceFrame        | WinCE only        | Adds support for\n                  | CCmdbar          |                   | frames in WinCE.\n------------------+------------------+-------------------+---------------------\nwebbrowser.h      | CAXWindow        | Win32, Win64      | Adds support for a\n                  | CWebBrowser      | and WinCE         | ActiveX container and\n                  |                  |                   | a WebBrowser window.\n------------------+------------------+-------------------+---------------------\nwincore.h         | CCriticalSection | Win32, Win64,     | The core set of \n                  | CWinApp          | and WinCE         | classes required for\n                  | CWinException    |                   | all Win32++ \n                  | CWnd             |                   | applications. \n------------------+------------------+-------------------+---------------------\nwinutils.h        | CPoint           | Win32, Win64,     | Additional utility\n                  | CRect            | and WinCE         | classes.\n                  | CSize            |                   |  \n------------------+------------------+-------------------+---------------------  \n\nRefer to the help documentation that ships with Win32++ for more information on\nusing Win32++."
  },
  {
    "path": "external/win32cpp/include/listview.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n\n\n#ifndef _WIN32XX_LISTVIEW_H_\n#define _WIN32XX_LISTVIEW_H_\n\n#include \"wincore.h\"\n#include \"commctrl.h\"\n\nnamespace Win32xx\n{\n\n\tclass CListView : public CWnd\n\t{\n\tpublic:\n\t\tCListView() {}\n\t\tvirtual ~CListView() {}\n\t\tvirtual void PreRegisterClass(WNDCLASS &wc);\n\n\t\t// Attributes\n\t\tCSize ApproximateViewRect(CSize sz = CSize(-1, -1), int iCount = -1) const;\n\t\tCOLORREF GetBkColor( ) const;\n\t\tBOOL GetBkImage( LVBKIMAGE& lvbkImage ) const;\n\t\tUINT GetCallbackMask( ) const;\n\t\tBOOL GetCheckState( UINT nItem ) const;\n\t\tBOOL GetColumn( int iCol, LVCOLUMN& Column ) const;\n\t\tBOOL GetColumnOrderArray( LPINT piArray, int iCount = -1 );\n\t\tint GetColumnWidth( int iCol ) const;\n\t\tint GetCountPerPage( ) const;\n\t\tHWND GetEditControl( ) const;\n\t\tDWORD GetExtendedStyle( ) const;\n\t\tHWND GetHeader( ) const;\n\t\tHCURSOR GetHotCursor( );\n\t\tint GetHotItem( ) const;\n\t\tDWORD GetHoverTime( ) const;\n\t\tHIMAGELIST GetImageList( int nImageType ) const;\n\t\tBOOL GetItem( LVITEM& lvItem ) const;\n\t\tint GetItemCount( ) const;\n\t\tDWORD_PTR GetItemData( int iItem ) const;\n\t\tBOOL GetItemPosition( int iItem, CPoint& pt ) const;\n\t\tBOOL GetItemRect( int iItem, CRect& rc, UINT nCode ) const;\n\t\tUINT GetItemState( int iItem, UINT nMask ) const;\n\t\ttString GetItemText( int iItem, int iSubItem, UINT nTextMax = 260 ) const;\n\t\tint GetNextItem( int iItem, int iFlags ) const;\n\t\tUINT GetNumberOfWorkAreas( ) const;\n\t\tBOOL GetOrigin( CPoint& pt ) const;\n\t\tUINT GetSelectedCount( ) const;\n\t\tint GetSelectionMark( ) const;\n\t\tint GetStringWidth( LPCTSTR pszString ) const;\n\t\tBOOL GetSubItemRect( int iItem, int iSubItem, int iCode, CRect& rc ) const;\n\t\tCOLORREF GetTextBkColor( ) const;\n\t\tCOLORREF GetTextColor( ) const;\n\t\tHWND GetToolTips( ) const;\n\t\tint GetTopIndex( ) const;\n\t\tBOOL GetViewRect( CRect& rc ) const;\n\t\tvoid GetWorkAreas( int iWorkAreas, LPRECT pRectArray ) const;\n\t\tBOOL SetBkColor( COLORREF clrBk ) const;\n\t\tBOOL SetBkImage( LVBKIMAGE& plvbkImage ) const;\n\t\tBOOL SetCallbackMask( UINT nMask ) const;\n\t\tvoid SetCheckState( int iItem, BOOL fCheck = TRUE ) const;\n\t\tBOOL SetColumn( int iCol, const LVCOLUMN& pColumn ) const;\n\t\tBOOL SetColumnOrderArray( int iCount, LPINT piArray ) const;\n\t\tBOOL SetColumnWidth( int iCol, int cx ) const;\n\t\tDWORD SetExtendedStyle( DWORD dwNewStyle ) const;\n\t\tHCURSOR SetHotCursor( HCURSOR hCursor ) const;\n\t\tint SetHotItem( int nIndex ) const;\n\t\tDWORD SetHoverTime( DWORD dwHoverTime = (DWORD)-1 ) const;\n\t\tCSize SetIconSpacing( int cx, int cy ) const;\n\t\tCSize SetIconSpacing( CSize sz ) const;\n\t\tHIMAGELIST SetImageList( HIMAGELIST himl, int iImageListType ) const;\n\t\tBOOL SetItem( LVITEM& pItem ) const;\n\t\tBOOL SetItem( int iItem, int iSubItem, UINT nMask, LPCTSTR pszText, int iImage,\n\t\t\t\t\t\tUINT nState, UINT nStateMask, LPARAM lParam, int iIndent ) const;\n\t\tvoid SetItemCount( int iCount ) const;\n\t\tvoid SetItemCountEx( int iCount, DWORD dwFlags = LVSICF_NOINVALIDATEALL ) const;\n\t\tBOOL SetItemData( int iItem, DWORD_PTR dwData ) const;\n\t\tBOOL SetItemPosition( int iItem, CPoint& pt ) const;\n\t\tBOOL SetItemState( int iItem, LVITEM& Item ) const;\n        void SetItemState( int iItem, UINT nState, UINT nMask ) const;\n\t\tvoid SetItemText( int iItem, int iSubItem, LPCTSTR pszText ) const;\n\t\tint SetSelectionMark( int iIndex ) const;\n\t\tBOOL SetTextBkColor( COLORREF clrBkText ) const;\n\t\tBOOL SetTextColor( COLORREF clrText ) const;\n\t\tHWND SetToolTips( HWND hWndToolTip ) const;\n\t\tvoid SetWorkAreas( int nWorkAreas, CRect& pRectArray ) const;\n\t\tint SubItemHitTest( LVHITTESTINFO& htInfo ) const;\n\n\t\t// Operations\n\t\tBOOL Arrange( UINT nCode ) const;\n\t\tHIMAGELIST CreateDragImage( int iItem, CPoint& pt ) const;\n\t\tBOOL DeleteAllItems( ) const;\n\t\tBOOL DeleteColumn( int iCol ) const;\n\t\tBOOL DeleteItem( int iItem ) const;\n\t\tHWND EditLabel( int iItem ) const;\n\t\tBOOL EnsureVisible( int iItem, BOOL fPartialOK ) const;\n\t\tint FindItem( LVFINDINFO& FindInfo, int iStart = -1 ) const;\n\t\tint HitTest( LVHITTESTINFO& HitTestInfo ) const;\n        int HitTest( CPoint pt, UINT* pFlags = NULL ) const;\n\t\tint InsertColumn( int iCol, const LVCOLUMN& pColumn ) const;\n        int InsertColumn( int iCol, LPCTSTR pszColumnHeading, int iFormat = LVCFMT_LEFT,\n\t\t\t\t\t\t\tint iWidth = -1, int iSubItem = -1 ) const;\n\t\tint InsertItem( const LVITEM& pItem ) const;\n        int InsertItem( int iItem, LPCTSTR pszText ) const;\n        int InsertItem( int iItem, LPCTSTR pszText, int iImage ) const;\n\t\tBOOL RedrawItems( int iFirst, int iLast ) const;\n\t\tBOOL Scroll( CSize sz ) const;\n\t\tBOOL SortItems( PFNLVCOMPARE pfnCompare, DWORD_PTR dwData ) const;\n\t\tBOOL Update( int iItem ) const;\n\n\tprivate:\n\t\tCListView(const CListView&);\t\t\t\t// Disable copy construction\n\t\tCListView& operator = (const CListView&); // Disable assignment operator\n\t};\n\n}\n\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nnamespace Win32xx\n{\n\n\tinline void CListView::PreRegisterClass(WNDCLASS &wc)\n\t{\n\t\t// Set the Window Class\n\t\twc.lpszClassName =  WC_LISTVIEW;\n\t}\n\n\tinline CSize CListView::ApproximateViewRect(CSize sz /*= CSize(-1, -1)*/, int iCount /* = -1*/) const\n\t// Calculates the approximate width and height required to display a given number of items.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn CSize( ListView_ApproximateViewRect( m_hWnd, sz.cx, sz.cy, iCount ) );\n\t}\n\n\tinline COLORREF CListView::GetBkColor( ) const\n\t// Retrieves the background color of a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetBkColor( m_hWnd );\n\t}\n\n\tinline BOOL CListView::GetBkImage( LVBKIMAGE& lvbkImage ) const\n\t// Retrieves the background image in a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetBkImage( m_hWnd, &lvbkImage );\n\t}\n\n\tinline UINT CListView::GetCallbackMask( ) const\n\t// Retrieves the callback mask for a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetCallbackMask( m_hWnd );\n\t}\n\n\tinline BOOL CListView::GetCheckState( UINT nItem ) const\n\t// Determines if an item in a list-view control is selected.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetCheckState( m_hWnd, nItem );\n\t}\n\n\tinline BOOL CListView::GetColumn( int iCol, LVCOLUMN& Column ) const\n\t// Retrieves the attributes of a list-view control's column.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetColumn( m_hWnd, iCol, &Column );\n\t}\n\n\tinline BOOL CListView::GetColumnOrderArray( LPINT piArray, int iCount /*= -1*/ )\n\t// Retrieves the current left-to-right order of columns in a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetColumnOrderArray( m_hWnd, iCount, piArray );\n\t}\n\n\tinline int CListView::GetColumnWidth( int iCol ) const\n\t// Retrieves the width of a column in report or list view.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetColumnWidth( m_hWnd, iCol );\n\t}\n\n\tinline int CListView::GetCountPerPage( ) const\n\t// Calculates the number of items that can fit vertically in the visible area of a\n\t// list-view control when in list or report view. Only fully visible items are counted.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetCountPerPage( m_hWnd );\n\t}\n\n\tinline HWND CListView::GetEditControl( ) const\n\t// Retrieves the handle to the edit control being used to edit a list-view item's text.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetEditControl( m_hWnd );\n\t}\n\n\tinline DWORD CListView::GetExtendedStyle( ) const\n\t// Retrieves the extended styles that are currently in use for a given list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetExtendedListViewStyle( m_hWnd );\n\t}\n\n\tinline HWND CListView::GetHeader( ) const\n\t// Retrieves the handle to the header control used by a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetHeader( m_hWnd );\n\t}\n\n\tinline HCURSOR CListView::GetHotCursor( )\n\t// Retrieves the HCURSOR used when the pointer is over an item while hot tracking is enabled.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetHotCursor( m_hWnd );\n\t}\n\n\tinline int CListView::GetHotItem( ) const\n\t// Retrieves the index of the hot item.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetHotItem( m_hWnd );\n\t}\n\n\tinline DWORD CListView::GetHoverTime( ) const\n\t// Retrieves the amount of time that the mouse cursor must hover over an item before it is selected.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetHoverTime( m_hWnd );\n\t}\n\n\tinline HIMAGELIST CListView::GetImageList( int nImageType ) const\n\t// Retrieves the handle to an image list used for drawing list-view items.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetImageList( m_hWnd, nImageType );\n\t}\n\n\tinline BOOL CListView::GetItem( LVITEM& Item ) const\n\t// Retrieves some or all of a list-view item's attributes.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetItem( m_hWnd, &Item );\n\t}\n\n\tinline int CListView::GetItemCount( ) const\n\t// Retrieves the number of items in a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetItemCount( m_hWnd );\n\t}\n\n\tinline DWORD_PTR CListView::GetItemData( int iItem ) const\n\t// Retrieves the value(lParam) specific to the item.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tLVITEM lvi = {0};\n\t\tlvi.iItem = iItem;\n\t\tlvi.mask = LVIF_PARAM;\n\t\tListView_GetItem(m_hWnd, &lvi);\n\t\treturn lvi.lParam;\n\t}\n\n\tinline BOOL CListView::GetItemPosition( int iItem, CPoint& pt ) const\n\t// Retrieves the position of a list-view item.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetItemPosition( m_hWnd, iItem, &pt );\n\t}\n\n\tinline BOOL CListView::GetItemRect( int iItem, CRect& rc, UINT nCode ) const\n\t// Retrieves the bounding rectangle for all or part of an item in the current view.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetItemRect( m_hWnd, iItem, &rc, nCode );\n\t}\n\n\tinline UINT CListView::GetItemState( int iItem, UINT nMask ) const\n\t// Retrieves the state of a list-view item.\n\n\t// Possible values of nMask:\n\t// LVIS_CUT\t\t\t\tThe item is marked for a cut-and-paste operation.\n\t// LVIS_DROPHILITED\t\tThe item is highlighted as a drag-and-drop target.\n\t// LVIS_FOCUSED\t\t\tThe item has the focus, so it is surrounded by a standard focus rectangle.\n\t// LVIS_SELECTED\t\tThe item is selected.\n\t// LVIS_OVERLAYMASK\t\tUse this mask to retrieve the item's overlay image index.\n\t// LVIS_STATEIMAGEMASK\tUse this mask to retrieve the item's state image index.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn  ListView_GetItemState( m_hWnd, iItem, nMask );\n\t}\n\n\tinline tString CListView::GetItemText( int iItem, int iSubItem, UINT nTextMax /* = 260 */ ) const\n\t// Retrieves the text of a list-view item.\n\t// Note: Although the list-view control allows any length string to be stored\n\t//       as item text, only the first 260 characters are displayed.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\ttString t;\n\t\tif (nTextMax > 0)\n\t\t{\n\t\t\tstd::vector<TCHAR> vTChar(nTextMax +1, _T('\\0'));\n\t\t\tTCHAR* pszText = &vTChar.front();\n\t\t\tLVITEM lvi = {0};\n\t\t\tlvi.iItem = iItem;\n\t\t\tlvi.iSubItem = iSubItem;\n\t\t\tlvi.mask = LVIF_TEXT;\n\t\t\tlvi.cchTextMax = nTextMax;\n\t\t\tlvi.pszText = pszText;\n\t\t\tListView_GetItem( m_hWnd, &lvi );\n\t\t\tt = lvi.pszText;\n\t\t}\n\t\treturn t;\n\t}\n\n\tinline int CListView::GetNextItem( int iItem, int iFlags ) const\n\t// Searches for a list-view item that has the specified properties and\n\t// bears the specified relationship to a specified item.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetNextItem( m_hWnd, iItem, iFlags );\n\t}\n\n\tinline UINT CListView::GetNumberOfWorkAreas( ) const\n\t// Retrieves the working areas from a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tUINT nWorkAreas = 0;\n\t\tListView_GetWorkAreas( m_hWnd, nWorkAreas, NULL );\n\t\treturn nWorkAreas;\n\t}\n\n\tinline BOOL CListView::GetOrigin( CPoint& pt ) const\n\t// Retrieves the current view origin for a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetOrigin( m_hWnd, &pt );\n\t}\n\n\tinline UINT CListView::GetSelectedCount( ) const\n\t// Determines the number of selected items in a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (UINT)::SendMessage( m_hWnd, LVM_GETSELECTEDCOUNT, 0L, 0L );\n\t}\n\n\tinline int CListView::GetSelectionMark( ) const\n\t// Retrieves the selection mark from a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)::SendMessage( m_hWnd, LVM_GETSELECTIONMARK, 0L, 0L );\n\t}\n\n\tinline int CListView::GetStringWidth( LPCTSTR pszString ) const\n\t// Determines the width of a specified string using the specified list-view control's current font.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)::SendMessage( m_hWnd, LVM_GETSTRINGWIDTH, 0L, (LPARAM)pszString );\n\t}\n\n\tinline BOOL CListView::GetSubItemRect( int iItem, int iSubItem, int iCode, CRect& rc ) const\n\t// Retrieves information about the rectangle that surrounds a subitem in a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetSubItemRect( m_hWnd, iItem, iSubItem, iCode, &rc );\n\t}\n\n\tinline COLORREF CListView::GetTextBkColor( ) const\n\t// Retrieves the text background color of a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetTextBkColor( m_hWnd );\n\t}\n\n\tinline COLORREF CListView::GetTextColor( ) const\n\t// Retrieves the text color of a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetTextColor( m_hWnd );\n\t}\n\n\tinline HWND CListView::GetToolTips( ) const\n\t// Retrieves the ToolTip control that the list-view control uses to display ToolTips.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetToolTips( m_hWnd );\n\t}\n\n\tinline int CListView::GetTopIndex( ) const\n\t// Retrieves the index of the topmost visible item when in list or report view.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetTopIndex( m_hWnd );\n\t}\n\n\tinline BOOL CListView::GetViewRect( CRect& rc ) const\n\t// Retrieves the bounding rectangle of all items in the list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_GetViewRect( m_hWnd, &rc );\n\t}\n\n\tinline void CListView::GetWorkAreas( int iWorkAreas, LPRECT pRectArray ) const\n\t// Retrieves the working areas from a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tListView_GetWorkAreas( m_hWnd, iWorkAreas, pRectArray );\n\t}\n\n\tinline BOOL CListView::SetBkColor( COLORREF clrBk ) const\n\t// Sets the background color of a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_SetBkColor( m_hWnd, clrBk );\n\t}\n\n\tinline BOOL CListView::SetBkImage( LVBKIMAGE& lvbkImage ) const\n\t// Sets the background image in a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_SetBkImage( m_hWnd, &lvbkImage );\n\t}\n\n\tinline BOOL CListView::SetCallbackMask( UINT nMask ) const\n\t// Changes the callback mask for a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_SetCallbackMask( m_hWnd, nMask );\n\t}\n\n\tinline void CListView::SetCheckState( int iItem, BOOL fCheck /*= TRUE*/ ) const\n\t// Used to select or deselect an item in a list-view control.\n\t// This macro should only be used for list-view controls with the LVS_EX_CHECKBOXES style.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tListView_SetItemState(m_hWnd, iItem, INDEXTOSTATEIMAGEMASK((fCheck==TRUE)?2:1),LVIS_STATEIMAGEMASK);\n\t}\n\n\tinline BOOL CListView::SetColumn( int iCol, const LVCOLUMN& Column ) const\n\t// Sets the attributes of a list-view column.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_SetColumn( m_hWnd, iCol, &Column );\n\t}\n\n\tinline BOOL CListView::SetColumnOrderArray( int iCount, LPINT piArray ) const\n\t// Sets the left-to-right order of columns in a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_SetColumnOrderArray( m_hWnd, iCount, piArray );\n\t}\n\n\tinline BOOL CListView::SetColumnWidth( int iCol, int cx ) const\n\t// Used to change the width of a column in report view or the width of all columns in list-view mode.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_SetColumnWidth( m_hWnd, iCol, cx );\n\t}\n\n\tinline DWORD CListView::SetExtendedStyle( DWORD dwNewStyle ) const\n\t// Sets extended styles for list-view controls.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_SetExtendedListViewStyle( m_hWnd, dwNewStyle );\n\t}\n\n\tinline HCURSOR CListView::SetHotCursor( HCURSOR hCursor ) const\n\t// Sets the HCURSOR that the list-view control uses when the pointer is\n\t// over an item while hot tracking is enabled.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_SetHotCursor( m_hWnd, hCursor );\n\t}\n\n\tinline int CListView::SetHotItem( int nIndex ) const\n\t// Sets the hot item in a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_SetHotItem( m_hWnd, nIndex );\n\t}\n\n\tinline DWORD CListView::SetHoverTime( DWORD dwHoverTime /*= (DWORD)-1*/ ) const\n\t// Sets the amount of time that the mouse cursor must hover over an item before it is selected.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_SetHoverTime( m_hWnd, dwHoverTime );\n\t}\n\n\tinline CSize CListView::SetIconSpacing( int cx, int cy ) const\n\t// Sets the spacing between icons in list-view controls set to the LVS_ICON style.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn CSize( ListView_SetIconSpacing( m_hWnd, cx, cy ) );\n\t}\n\n\tinline CSize CListView::SetIconSpacing( CSize sz ) const\n\t// Sets the spacing between icons in list-view controls set to the LVS_ICON style.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn CSize( ListView_SetIconSpacing( m_hWnd, sz.cx, sz.cy ) );\n\t}\n\n\tinline HIMAGELIST CListView::SetImageList( HIMAGELIST himl, int iImageListType ) const\n\t// Assigns an image list to a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_SetImageList( m_hWnd, himl, iImageListType );\n\t}\n\n\tinline BOOL CListView::SetItem( LVITEM& Item ) const\n\t// Sets some or all of a list-view item's attributes.\n\n\t// The declaration for TVITEM:\n\t//\ttypedef struct _LVITEM {\n\t//\t\tUINT mask;\n\t//\t\tint iItem;\n\t//\t\tint iSubItem;\n\t//\t\tUINT state;\n\t//\t\tUINT stateMask;\n\t//\t\tLPTSTR pszText;\n\t//\t\tint cchTextMax;\n    //\t\tint iImage;\n\t//\t\tLPARAM lParam;\n\t// } LVITEM, *LVITEM&;\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_SetItem( m_hWnd, &Item );\n\t}\n\n\tinline BOOL CListView::SetItem( int iItem, int iSubItem, UINT nMask, LPCTSTR pszText, int iImage,\n\t\t\t\t\tUINT nState, UINT nStateMask, LPARAM lParam, int iIndent ) const\n\t// Sets some or all of a list-view item's attributes.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tLVITEM lvi = {0};\n\t\tlvi.iItem = iItem;\n\t\tlvi.iSubItem = iSubItem;\n\t\tlvi.mask = nMask;\n\t\tlvi.pszText = (LPTSTR)pszText;\n\t\tlvi.iImage = iImage;\n\t\tlvi.state = nState;\n\t\tlvi.stateMask = nStateMask;\n\t\tlvi.lParam = lParam;\n\t\tlvi.iIndent = iIndent;\n\n\t\treturn ListView_SetItem( m_hWnd, &lvi);\n\t}\n\n\tinline void CListView::SetItemCount( int iCount ) const\n\t// Causes the list-view control to allocate memory for the specified number of items.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tListView_SetItemCount( m_hWnd, iCount );\n\t}\n\n\tinline void CListView::SetItemCountEx( int iCount, DWORD dwFlags /*= LVSICF_NOINVALIDATEALL*/ ) const\n\t// Sets the virtual number of items in a virtual list view.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tListView_SetItemCountEx( m_hWnd, iCount, dwFlags );\n\t}\n\n\tinline BOOL CListView::SetItemData( int iItem, DWORD_PTR dwData ) const\n\t// Sets the value(lParam) specific to the item.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tLVITEM lvi = {0};\n\t\tlvi.iItem = iItem;\n\t\tlvi.lParam = dwData;\n\t\tlvi.mask = LVIF_PARAM;\n\t\treturn ListView_SetItem(m_hWnd, &lvi);\n\t}\n\n\tinline BOOL CListView::SetItemPosition( int iItem, CPoint& pt ) const\n\t// Moves an item to a specified position in a list-view control (in icon or small icon view).\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_SetItemPosition( m_hWnd, iItem, pt.x, pt.y );\n\t}\n\n\tinline BOOL CListView::SetItemState( int iItem, LVITEM& Item ) const\n\t// Changes the state of an item in a list-view control.\n\n\t// Possible values of nMask:\n\t// LVIS_CUT\t\t\t\tThe item is marked for a cut-and-paste operation.\n\t// LVIS_DROPHILITED\t\tThe item is highlighted as a drag-and-drop target.\n\t// LVIS_FOCUSED\t\t\tThe item has the focus, so it is surrounded by a standard focus rectangle.\n\t// LVIS_SELECTED\t\tThe item is selected.\n\t// LVIS_OVERLAYMASK\t\tUse this mask to retrieve the item's overlay image index.\n\t// LVIS_STATEIMAGEMASK\tUse this mask to retrieve the item's state image index.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)::SendMessage(m_hWnd, LVM_SETITEMSTATE, (WPARAM)iItem, (LPARAM)&Item);\n\t}\n\n    inline void CListView::SetItemState( int iItem, UINT nState, UINT nMask ) const\n\t// Changes the state of an item in a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tListView_SetItemState(m_hWnd, iItem, nState, nMask);\n\t}\n\n\tinline void CListView::SetItemText( int iItem, int iSubItem, LPCTSTR pszText ) const\n\t// Sets the text color of a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tListView_SetItemText(m_hWnd, iItem, iSubItem, (LPTSTR)pszText );\n\t}\n\n\tinline int CListView::SetSelectionMark( int iIndex ) const\n\t// Sets the selection mark in a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_SetSelectionMark( m_hWnd, iIndex );\n\t}\n\n\tinline BOOL CListView::SetTextBkColor( COLORREF clrBkText ) const\n\t// Sets the background color of text in a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_SetTextBkColor( m_hWnd, clrBkText );\n\t}\n\n\tinline BOOL CListView::SetTextColor( COLORREF clrText ) const\n\t// Sets the text color of a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_SetTextColor( m_hWnd, clrText );\n\t}\n\n\tinline HWND CListView::SetToolTips( HWND hWndToolTip ) const\n\t// Sets the ToolTip control that the list-view control will use to display ToolTips.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HWND)::SendMessage(m_hWnd, LVM_SETTOOLTIPS, (WPARAM)hWndToolTip, 0L);\n\t}\n\n\tinline void CListView::SetWorkAreas( int nWorkAreas, CRect& pRectArray ) const\n\t// Sets the working area within a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tListView_SetWorkAreas( m_hWnd, nWorkAreas, pRectArray );\n\t}\n\n\tinline int CListView::SubItemHitTest( LVHITTESTINFO& htInfo ) const\n\t// Determines which list-view item or subitem is located at a given position.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_SubItemHitTest( m_hWnd, &htInfo );\n\t}\n\n\t// Operations\n\n\tinline BOOL CListView::Arrange( UINT nCode ) const\n\t// Arranges items in icon view.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_Arrange( m_hWnd, nCode );\n\t}\n\n\tinline HIMAGELIST CListView::CreateDragImage( int iItem, CPoint& pt ) const\n\t// Creates a drag image list for the specified item.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_CreateDragImage( m_hWnd, iItem, &pt );\n\t}\n\n\tinline BOOL CListView::DeleteAllItems( ) const\n\t// ListView_DeleteAllItems\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_DeleteAllItems( m_hWnd );\n\t}\n\n\tinline BOOL CListView::DeleteColumn( int iCol ) const\n\t// Removes a column from a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_DeleteColumn( m_hWnd, iCol );\n\t}\n\n\tinline BOOL CListView::DeleteItem( int iItem ) const\n\t// Removes an item from a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_DeleteItem( m_hWnd, iItem );\n\t}\n\n\tinline HWND CListView::EditLabel( int iItem ) const\n\t// Begins in-place editing of the specified list-view item's text.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_EditLabel( m_hWnd, iItem );\n\t}\n\n\tinline BOOL CListView::EnsureVisible( int iItem, BOOL fPartialOK ) const\n\t// Ensures that a list-view item is either entirely or partially visible,\n\t// scrolling the list-view control if necessary.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(LVM_ENSUREVISIBLE, (WPARAM)iItem, (LPARAM)fPartialOK );\n\t}\n\n\tinline int CListView::FindItem( LVFINDINFO& FindInfo, int iStart /*= -1*/ ) const\n\t// Searches for a list-view item with the specified characteristics.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_FindItem( m_hWnd, iStart, &FindInfo );\n\t}\n\n\tinline int CListView::HitTest( LVHITTESTINFO& HitTestInfo ) const\n\t// Determines which list-view item, if any, is at a specified position.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_HitTest( m_hWnd, &HitTestInfo );\n\t}\n\n    inline int CListView::HitTest( CPoint pt, UINT* pFlags /*= NULL*/ ) const\n\t// Determines which list-view item, if any, is at a specified position.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tLVHITTESTINFO hti = {0};\n\t\thti.flags = *pFlags;\n\t\thti.pt = pt;\n\t\treturn ListView_HitTest( m_hWnd, &hti );\n\t}\n\n\tinline int CListView::InsertColumn( int iCol, const LVCOLUMN& Column ) const\n\t// Inserts a new column in a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_InsertColumn( m_hWnd, iCol, &Column );\n\t}\n\n    inline int CListView::InsertColumn( int iCol, LPCTSTR pszColumnHeading, int iFormat /*= LVCFMT_LEFT*/,\n\t\t\t\t\t\tint iWidth /*= -1*/, int iSubItem /*= -1*/ ) const\n\t// Inserts a new column in a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tLVCOLUMN lvc = {0};\n\t\tlvc.mask = LVCF_TEXT|LVCF_ORDER|LVCF_FMT;\n\t\tif (-1 != iWidth)\n\t\t{\n\t\t\tlvc.mask |= LVCF_WIDTH; \n\t\t\tlvc.cx = iWidth; \n\t\t}\n\t\tif (-1 !=  iSubItem)\n\t\t{\n\t\t\tlvc.mask |= LVCF_SUBITEM; \n\t\t\tlvc.iSubItem = iSubItem;\n\t\t}\n\n\t\tlvc.iOrder = iCol;\n\t\tlvc.pszText = (LPTSTR)pszColumnHeading;\n\t\tlvc.fmt = iFormat;\n\t\tlvc.iSubItem = iSubItem;\n\t\treturn ListView_InsertColumn( m_hWnd, iCol, &lvc );\n\t}\n\n\tinline int CListView::InsertItem( const LVITEM& Item ) const\n\t// Inserts a new item in a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_InsertItem( m_hWnd, &Item );\n\t}\n\n    inline int CListView::InsertItem( int iItem, LPCTSTR pszText ) const\n\t// Inserts a new item in a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tLVITEM lvi = {0};\n\t\tlvi.iItem = iItem;\n\t\tlvi.pszText = (LPTSTR)pszText;\n\t\tlvi.mask = LVIF_TEXT;\n\t\treturn ListView_InsertItem( m_hWnd, &lvi );\n\t}\n\n    inline int CListView::InsertItem( int iItem, LPCTSTR pszText, int iImage ) const\n\t// Inserts a new item in a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tLVITEM lvi = {0};\n\t\tlvi.iItem = iItem;\n\t\tlvi.pszText = (LPTSTR)pszText;\n\t\tlvi.iImage = iImage;\n\t\tlvi.mask = LVIF_TEXT | LVIF_IMAGE;\n\t\treturn ListView_InsertItem( m_hWnd, &lvi );\n\t}\n\n\tinline BOOL CListView::RedrawItems( int iFirst, int iLast ) const\n\t// Forces a list-view control to redraw a range of items.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_RedrawItems( m_hWnd, iFirst, iLast );\n\t}\n\n\tinline BOOL CListView::Scroll( CSize sz ) const\n\t// Scrolls the content of a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_Scroll( m_hWnd, sz.cx, sz.cy );\n\t}\n\n\tinline BOOL CListView::SortItems( PFNLVCOMPARE pfnCompare, DWORD_PTR dwData ) const\n\t// Uses an application-defined comparison function to sort the items of a list-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_SortItems( m_hWnd, pfnCompare, dwData );\n\t}\n\n\tinline BOOL CListView::Update( int iItem ) const\n\t// Updates a list-view item. If the list-view control has the LVS_AUTOARRANGE style,\n\t// the list-view control is rearranged.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ListView_Update( m_hWnd, iItem );\n\t}\n\n} // namespace Win32xx\n\n#endif // #ifndef _WIN32XX_LISTVIEW_H_\n\n"
  },
  {
    "path": "external/win32cpp/include/mdi.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n\n////////////////////////////////////////////////////////\n// mdi.h\n//  Declaration of the CMDIChild and CMDIFrame classes\n\n// The classes defined here add MDI frames support to Win32++. MDI\n// (Multiple Document Interface) frames host one or more child windows. The\n// child windows hosted by a MDI frame can be different types. For example,\n// some MDI child windows could be used to edit text, while others could be\n// used to display a bitmap. Four classes are defined here to support MDI\n// frames:\n\n\n// 1) CMDIFrame. This class inherits from CFrame, and adds the functionality\n//    required by MDI frames. It keeps track of the MDI children created and\n//    destroyed, and adjusts the menu when a MDI child is activated. Use the\n//    AddMDIChild function to add MDI child windows to the MDI frame. Inherit\n//    from CMDIFrame to create your own MDI frame.\n//\n// 2) CMDIChild: All MDI child windows (ie. CWnd classes) should inherit from\n//    this class. Each MDI child type can have a different frame menu.\n\n// Use the MDIFrame generic application as the starting point for your own MDI\n// frame applications.\n// Refer to the MDIDemo sample for an example on how to use these classes to\n// create a MDI frame application with different types of MDI child windows.\n\n\n#ifndef _WIN32XX_MDI_H_\n#define _WIN32XX_MDI_H_\n\n#include \"frame.h\"\n#include <vector>\n\n\n\nnamespace Win32xx\n{\n    class CMDIChild;\n    class CMDIFrame;\n\ttypedef Shared_Ptr<CMDIChild> MDIChildPtr;\n\n\t/////////////////////////////////////\n\t// Declaration of the CMDIChild class\n\t//\n\tclass CMDIChild : public CWnd\n\t{\n\t\tfriend class CMDIFrame;\n\tpublic:\n\t\tCMDIChild();\n\t\tvirtual ~CMDIChild();\n\n\t\t// These are the functions you might wish to override\n\t\tvirtual HWND Create(CWnd* pParent = NULL);\n\t\tvirtual void RecalcLayout();\n\n\t\t// These functions aren't virtual, and shouldn't be overridden\n\t\tvoid SetHandles(HMENU MenuName, HACCEL AccelName);\n\t\tCMDIFrame* GetMDIFrame() const;\n\t\tCWnd* GetView() const\t{return m_pView;}\n\t\tvoid SetView(CWnd& pwndView);\n\t\tvoid MDIActivate() const;\n\t\tvoid MDIDestroy() const;\n\t\tvoid MDIMaximize() const;\n\t\tvoid MDIRestore() const;\n\n\tprotected:\n\t\t// Its unlikely you would need to override these functions\n\t\tvirtual LRESULT FinalWindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\t\tvirtual void OnCreate();\n\t\tvirtual LRESULT WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\n\tprivate:\n\t\tCMDIChild(const CMDIChild&);\t\t\t\t// Disable copy construction\n\t\tCMDIChild& operator = (const CMDIChild&); // Disable assignment operator\n\n\t\tCWnd* m_pView;\t\t\t\t// pointer to the View CWnd object\n\t\tHMENU m_hChildMenu;\n\t\tHACCEL m_hChildAccel;\n\t};\n\n\n\t/////////////////////////////////////\n\t// Declaration of the CMDIFrame class\n\t//\n\tclass CMDIFrame : public CFrame\n\t{\n\t\tfriend class CMDIChild;     // CMDIChild uses m_hOrigMenu\n\t\ttypedef Shared_Ptr<CMDIChild> MDIChildPtr;\n\n\tpublic:\n\t\tclass CMDIClient : public CWnd  // a nested class within CMDIFrame\n\t\t{\n\t\tpublic:\n\t\t\tCMDIClient() {}\n\t\t\tvirtual ~CMDIClient() {}\n\t\t\tvirtual HWND Create(CWnd* pParent = NULL);\n\t\t\tvirtual LRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\t\t\tCMDIFrame* GetMDIFrame() const { return (CMDIFrame*)GetParent(); }\n\n\t\tprivate:\n\t\t\tCMDIClient(const CMDIClient&);\t\t\t\t// Disable copy construction\n\t\t\tCMDIClient& operator = (const CMDIClient&); // Disable assignment operator\n\t\t};\n\n\n\t\tCMDIFrame();\n\t\tvirtual ~CMDIFrame() {}\n\n\t\tvirtual CMDIChild* AddMDIChild(MDIChildPtr pMDIChild);\n\t\tvirtual CMDIClient& GetMDIClient() const { return (CMDIClient&)m_MDIClient; }\n\t\tvirtual BOOL IsMDIFrame() const { return TRUE; }\n\t\tvirtual void RemoveMDIChild(HWND hWnd);\n\t\tvirtual BOOL RemoveAllMDIChildren();\n\t\tvirtual void UpdateCheckMarks();\n\n\t\t// These functions aren't virtual, so don't override them\n\t\tstd::vector <MDIChildPtr>& GetAllMDIChildren() {return m_vMDIChild;}\n\t\tCMDIChild* GetActiveMDIChild() const;\n\t\tBOOL IsMDIChildMaxed() const;\n\t\tvoid MDICascade(int nType = 0) const;\n\t\tvoid MDIIconArrange() const;\n\t\tvoid MDIMaximize() const;\n\t\tvoid MDINext() const;\n\t\tvoid MDIPrev() const;\n\t\tvoid MDIRestore() const;\n\t\tvoid MDITile(int nType = 0) const;\n\t\tvoid SetActiveMDIChild(CMDIChild* pChild);\n\n\tprotected:\n\t\t// These are the functions you might wish to override\n\t\tvirtual void OnClose();\n\t\tvirtual void OnViewStatusBar();\n\t\tvirtual void OnViewToolBar();\n\t\tvirtual void OnWindowPosChanged();\n\t\tvirtual void RecalcLayout();\n\t\tvirtual BOOL PreTranslateMessage(MSG* pMsg);\n\t\tvirtual LRESULT WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\n\tprivate:\n\t\tCMDIFrame(const CMDIFrame&);\t\t\t\t// Disable copy construction\n\t\tCMDIFrame& operator = (const CMDIFrame&); // Disable assignment operator\n\t\tvoid AppendMDIMenu(HMENU hMenuWindow);\n\t\tLRESULT FinalWindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\t\tvoid UpdateFrameMenu(HMENU hMenu);\n\n\t\tCMDIClient m_MDIClient;\n\t\tstd::vector <MDIChildPtr> m_vMDIChild;\n\t\tHWND m_hActiveMDIChild;\n\t};\n\n}\n\n\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n\nnamespace Win32xx\n{\n\n\t/////////////////////////////////////\n\t// Definitions for the CMDIFrame class\n\t//\n\tinline CMDIFrame::CMDIFrame() : m_hActiveMDIChild(NULL)\n\t{\n\t\tSetView(GetMDIClient());\n\t}\n\n\tinline CMDIChild* CMDIFrame::AddMDIChild(MDIChildPtr pMDIChild)\n\t{\n\t\tassert(NULL != pMDIChild.get()); // Cannot add Null MDI Child\n\n\t\tm_vMDIChild.push_back(pMDIChild);\n\t\tpMDIChild->Create(GetView());\n\n\t\treturn pMDIChild.get();\n\t}\n\n\tinline void CMDIFrame::AppendMDIMenu(HMENU hMenuWindow)\n\t{\n\t\t// Adds the additional menu items the the \"Window\" submenu when\n\t\t//  MDI child windows are created\n\n\t\tif (!IsMenu(hMenuWindow))\n\t\t\treturn;\n\n\t\t// Delete previously appended items\n\t\tint nItems = ::GetMenuItemCount(hMenuWindow);\n\t\tUINT uLastID = ::GetMenuItemID(hMenuWindow, --nItems);\n\t\tif ((uLastID >= IDW_FIRSTCHILD) && (uLastID < IDW_FIRSTCHILD + 10))\n\t\t{\n\t\t\twhile ((uLastID >= IDW_FIRSTCHILD) && (uLastID < IDW_FIRSTCHILD + 10))\n\t\t\t{\n\t\t\t\t::DeleteMenu(hMenuWindow, nItems, MF_BYPOSITION);\n\t\t\t\tuLastID = ::GetMenuItemID(hMenuWindow, --nItems);\n\t\t\t}\n\t\t\t//delete the separator too\n\t\t\t::DeleteMenu(hMenuWindow, nItems, MF_BYPOSITION);\n\t\t}\n\n\t\tint nWindow = 0;\n\n\t\t// Allocate an iterator for our MDIChild vector\n\t\tstd::vector <MDIChildPtr>::iterator v;\n\n\t\tfor (v = GetAllMDIChildren().begin(); v < GetAllMDIChildren().end(); ++v)\n\t\t{\n\t\t\tif ((*v)->GetWindowLongPtr(GWL_STYLE) & WS_VISIBLE)\t// IsWindowVisible is unreliable here\n\t\t\t{\n\t\t\t\t// Add Separator\n\t\t\t\tif (0 == nWindow)\n\t\t\t\t\t::AppendMenu(hMenuWindow, MF_SEPARATOR, 0, NULL);\n\n\t\t\t\t// Add a menu entry for each MDI child (up to 9)\n\t\t\t\tif (nWindow < 9)\n\t\t\t\t{\n\t\t\t\t\ttString tsMenuItem ( (*v)->GetWindowText() );\n\n\t\t\t\t\tif (tsMenuItem.length() > MAX_MENU_STRING -10)\n\t\t\t\t\t{\n\t\t\t\t\t\t// Truncate the string if its too long\n\t\t\t\t\t\ttsMenuItem.erase(tsMenuItem.length() - MAX_MENU_STRING +10);\n\t\t\t\t\t\ttsMenuItem += _T(\" ...\");\n\t\t\t\t\t}\n\n\t\t\t\t\tTCHAR szMenuString[MAX_MENU_STRING+1];\n\t\t\t\t\twsprintf(szMenuString, _T(\"&%d %s\"), nWindow+1, tsMenuItem.c_str());\n\n\t\t\t\t\t::AppendMenu(hMenuWindow, MF_STRING, IDW_FIRSTCHILD + nWindow, szMenuString);\n\n\t\t\t\t\tif (GetActiveMDIChild() == (*v).get())\n\t\t\t\t\t\t::CheckMenuItem(hMenuWindow, IDW_FIRSTCHILD+nWindow, MF_CHECKED);\n\n\t\t\t\t\t++nWindow;\n\t\t\t\t}\n\t\t\t\telse if (9 == nWindow)\n\t\t\t\t// For the 10th MDI child, add this menu item and return\n\t\t\t\t{\n\t\t\t\t\t::AppendMenu(hMenuWindow, MF_STRING, IDW_FIRSTCHILD + nWindow, _T(\"&Windows...\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tinline LRESULT CMDIFrame::FinalWindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\treturn ::DefFrameProc(m_hWnd, GetMDIClient(), uMsg, wParam, lParam);\n\t}\n\n\tinline CMDIChild* CMDIFrame::GetActiveMDIChild() const\n\t{\n\t\treturn (CMDIChild*)FromHandle(m_hActiveMDIChild);\n\t}\n\n\tinline BOOL CMDIFrame::IsMDIChildMaxed() const\n\t{\n\t\tBOOL bMaxed = FALSE;\n\t\tGetMDIClient().SendMessage(WM_MDIGETACTIVE, 0L, (LPARAM)&bMaxed);\n\t\treturn bMaxed;\n\t}\n\n\tinline void CMDIFrame::MDICascade(int nType /* = 0*/) const\n\t{\n\t\t// Possible values for nType are:\n\t\t// MDITILE_SKIPDISABLED\tPrevents disabled MDI child windows from being cascaded.\n\n\t\tassert(::IsWindow(m_hWnd));\n\t\tGetView()->SendMessage(WM_MDICASCADE, (WPARAM)nType, 0L);\n\t}\n\n\tinline void CMDIFrame::MDIIconArrange() const\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tGetView()->SendMessage(WM_MDIICONARRANGE, 0L, 0L);\n\t}\n\n\tinline void CMDIFrame::MDIMaximize() const\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tGetView()->SendMessage(WM_MDIMAXIMIZE, 0L, 0L);\n\t}\n\n\tinline void CMDIFrame::MDINext() const\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tHWND hMDIChild = GetActiveMDIChild()->GetHwnd();\n\t\tGetView()->SendMessage(WM_MDINEXT, (WPARAM)hMDIChild, FALSE);\n\t}\n\n\tinline void CMDIFrame::MDIPrev() const\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tHWND hMDIChild = GetActiveMDIChild()->GetHwnd();\n\t\tGetView()->SendMessage(WM_MDINEXT, (WPARAM)hMDIChild, TRUE);\n\t}\n\n\tinline void CMDIFrame::MDIRestore() const\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tGetView()->SendMessage(WM_MDIRESTORE, 0L, 0L);\n\t}\n\n\tinline void CMDIFrame::MDITile(int nType /* = 0*/) const\n\t{\n\t\t// Possible values for nType are:\n\t\t// MDITILE_HORIZONTAL\tTiles MDI child windows so that one window appears above another.\n\t\t// MDITILE_SKIPDISABLED\tPrevents disabled MDI child windows from being tiled.\n\t\t// MDITILE_VERTICAL\t\tTiles MDI child windows so that one window appears beside another.\n\n\t\tassert(::IsWindow(m_hWnd));\n\t\tGetView()->SendMessage(WM_MDITILE, (WPARAM)nType, 0L);\n\t}\n\n\tinline void CMDIFrame::OnClose()\n\t{\n\t\tif (RemoveAllMDIChildren())\n\t\t{\n\t\t\tCFrame::OnClose();\n\t\t\tDestroy();\n\t\t}\n\t}\n\n\tinline void CMDIFrame::OnViewStatusBar()\n\t{\n\t\tCFrame::OnViewStatusBar();\n\t\tUpdateCheckMarks();\n\t\tGetView()->RedrawWindow(NULL, NULL, RDW_FRAME | RDW_INVALIDATE | RDW_ERASE | RDW_ALLCHILDREN);\n\t}\n\n\tinline void CMDIFrame::OnViewToolBar()\n\t{\n\t\tCFrame::OnViewToolBar();\n\t\tUpdateCheckMarks();\n\t\tGetView()->RedrawWindow(NULL, NULL, RDW_FRAME | RDW_INVALIDATE | RDW_ERASE | RDW_ALLCHILDREN);\n\t}\n\n\tinline void CMDIFrame::OnWindowPosChanged()\n\t{\n\t\tif (IsMenuBarUsed())\n\t\t{\n\t\t\t// Refresh MenuBar Window\n\t\t\tHMENU hMenu= GetMenuBar().GetMenu();\n\t\t\tGetMenuBar().SetMenu(hMenu);\n\t\t\tUpdateCheckMarks();\n\t\t}\n\t}\n\n\tinline BOOL CMDIFrame::PreTranslateMessage(MSG* pMsg)\n\t{\n\t\tif (WM_KEYFIRST <= pMsg->message && pMsg->message <= WM_KEYLAST)\n\t\t{\n\t\t\tif (TranslateMDISysAccel(GetView()->GetHwnd(), pMsg))\n\t\t\t\treturn TRUE;\n\t\t}\n\n\t\treturn CFrame::PreTranslateMessage(pMsg);\n\t}\n\n\tinline void CMDIFrame::RecalcLayout()\n\t{\n\t\tCFrame::RecalcLayout();\n\n\t\tif (GetView()->IsWindow())\n\t\t\tMDIIconArrange();\n\t}\n\n\tinline BOOL CMDIFrame::RemoveAllMDIChildren()\n\t{\n\t\tBOOL bResult = TRUE;\n\t\tint Children = (int)m_vMDIChild.size();\n\n\t\t// Remove the children in reverse order\n\t\tfor (int i = Children-1; i >= 0; --i)\n\t\t{\n\t\t\tif (IDNO == m_vMDIChild[i]->SendMessage(WM_CLOSE, 0L, 0L))\t// Also removes the MDI child\n\t\t\t\tbResult = FALSE;\n\t\t}\n\n\t\treturn bResult;\n\t}\n\n\tinline void CMDIFrame::RemoveMDIChild(HWND hWnd)\n\t{\n\t\t// Allocate an iterator for our HWND map\n\t\tstd::vector <MDIChildPtr>::iterator v;\n\n\t\tfor (v = m_vMDIChild.begin(); v!= m_vMDIChild.end(); ++v)\n\t\t{\n\t\t\tif ((*v)->GetHwnd() == hWnd)\n\t\t\t{\n\t\t\t\tm_vMDIChild.erase(v);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (GetActiveMDIChild())\n\t\t{\n\t\t\tif (GetActiveMDIChild()->m_hChildMenu)\n\t\t\t\tUpdateFrameMenu(GetActiveMDIChild()->m_hChildMenu);\n\t\t\tif (GetActiveMDIChild()->m_hChildAccel)\n\t\t\t\tGetApp()->SetAccelerators(GetActiveMDIChild()->m_hChildAccel, this);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (IsMenuBarUsed())\n\t\t\t\tGetMenuBar().SetMenu(GetFrameMenu());\n\t\t\telse\n\t\t\t\tSetMenu(FromHandle(GetFrameMenu()));\n\n\t\t\tGetApp()->SetAccelerators(GetFrameAccel(), this);\n\t\t}\n\t}\n\n\tinline void CMDIFrame::SetActiveMDIChild(CMDIChild* pChild)\n\t{\n\t\tassert ( pChild->IsWindow() );\n\n\t\tGetMDIClient().SendMessage(WM_MDIACTIVATE, (WPARAM)pChild->GetHwnd(), 0L);\n\n\t\t// Verify\n\t\tassert ( m_hActiveMDIChild == pChild->GetHwnd() );\n\t}\n\n\tinline void CMDIFrame::UpdateCheckMarks()\n\t{\n\t\tif ((GetActiveMDIChild()) && GetActiveMDIChild()->m_hChildMenu)\n\t\t{\n\t\t\tHMENU hMenu = GetActiveMDIChild()->m_hChildMenu;\n\n\t\t\tUINT uCheck = GetToolBar().IsWindowVisible()? MF_CHECKED : MF_UNCHECKED;\n\t\t\t::CheckMenuItem(hMenu, IDW_VIEW_TOOLBAR, uCheck);\n\n\t\t\tuCheck = GetStatusBar().IsWindowVisible()? MF_CHECKED : MF_UNCHECKED;\n\t\t\t::CheckMenuItem (hMenu, IDW_VIEW_STATUSBAR, uCheck);\n\t\t}\n\t}\n\n\tinline void CMDIFrame::UpdateFrameMenu(HMENU hMenu)\n\t{\n\t\tint nMenuItems = GetMenuItemCount(hMenu);\n\t\tif (nMenuItems > 0)\n\t\t{\n\t\t\t// The Window menu is typically second from the right\n\t\t\tint nWindowItem = MAX (nMenuItems -2, 0);\n\t\t\tHMENU hMenuWindow = ::GetSubMenu (hMenu, nWindowItem);\n\n\t\t\tif (hMenuWindow)\n\t\t\t{\n\t\t\t\tif (IsMenuBarUsed())\n\t\t\t\t{\n\t\t\t\t\tAppendMDIMenu(hMenuWindow);\n\t\t\t\t\tGetMenuBar().SetMenu(hMenu);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tGetView()->SendMessage (WM_MDISETMENU, (WPARAM) hMenu, (LPARAM)hMenuWindow);\n\t\t\t\t\tDrawMenuBar();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tUpdateCheckMarks();\n\t}\n\n\tinline LRESULT CMDIFrame::WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\tswitch (uMsg)\n\t\t{\n\t\tcase WM_CLOSE:\n\t\t\tOnClose();\n\t\t\treturn 0;\n\n\t\tcase WM_WINDOWPOSCHANGED:\n\t\t\t// MDI Child or MDI frame has been resized\n\t\t\tOnWindowPosChanged();\n\t\t\tbreak; // Continue with default processing\n\n\t\t} // switch uMsg\n\t\treturn CFrame::WndProcDefault(uMsg, wParam, lParam);\n\t}\n\n\tinline HWND CMDIFrame::CMDIClient::Create(CWnd* pParent)\n\t{\n\t\tassert(pParent != 0);\n\n\t\tCLIENTCREATESTRUCT clientcreate ;\n\t\tclientcreate.hWindowMenu  = m_hWnd;\n\t\tclientcreate.idFirstChild = IDW_FIRSTCHILD ;\n\t\tDWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | MDIS_ALLCHILDSTYLES;\n\n\t\t// Create the view window\n\t\tCreateEx(WS_EX_CLIENTEDGE, _T(\"MDICLient\"), TEXT(\"\"), dwStyle, 0, 0, 0, 0, pParent, NULL, (PSTR) &clientcreate);\n\n\t\treturn m_hWnd;\n\t}\n\n\tinline LRESULT CMDIFrame::CMDIClient::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\tswitch (uMsg)\n\t\t{\n\t\tcase WM_MDIDESTROY:\n\t\t\t{\n\t\t\t\t// Do default processing first\n\t\t\t\tCallWindowProc(GetPrevWindowProc(), uMsg, wParam, lParam);\n\n\t\t\t\t// Now remove MDI child\n\t\t\t\tGetMDIFrame()->RemoveMDIChild((HWND) wParam);\n\t\t\t}\n\t\t\treturn 0; // Discard message\n\n\t\tcase WM_MDISETMENU:\n\t\t\t{\n\t\t\t\tif (GetMDIFrame()->IsMenuBarUsed())\n\t\t\t\t{\n\t\t\t\t\treturn 0L;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase WM_MDIACTIVATE:\n\t\t\t{\n\t\t\t\t// Suppress redraw to avoid flicker when activating maximised MDI children\n\t\t\t\tSendMessage(WM_SETREDRAW, FALSE, 0L);\n\t\t\t\tLRESULT lr = CallWindowProc(GetPrevWindowProc(), WM_MDIACTIVATE, wParam, lParam);\n\t\t\t\tSendMessage(WM_SETREDRAW, TRUE, 0L);\n\t\t\t\tRedrawWindow(0, 0, RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN);\n\n\t\t\t\treturn lr;\n\t\t\t}\n\t\t}\n\t\treturn CWnd::WndProcDefault(uMsg, wParam, lParam);\n\t}\n\n\n\t/////////////////////////////////////\n\t//Definitions for the CMDIChild class\n\t//\n\tinline CMDIChild::CMDIChild() : m_pView(NULL), m_hChildMenu(NULL)\n\t{\n\t\t// Set the MDI Child's menu and accelerator in the constructor, like this ...\n\t\t//   HMENU hChildMenu = LoadMenu(GetApp()->GetResourceHandle(), _T(\"MdiMenuView\"));\n\t\t//   HACCEL hChildAccel = LoadAccelerators(GetApp()->GetResourceHandle(), _T(\"MDIAccelView\"));\n\t\t//   SetHandles(hChildMenu, hChildAccel);\n\t}\n\n\tinline CMDIChild::~CMDIChild()\n\t{\n\t\tif (IsWindow())\n\t\t\tGetParent()->SendMessage(WM_MDIDESTROY, (WPARAM)m_hWnd, 0L);\n\n\t\tif (m_hChildMenu)\n\t\t\t::DestroyMenu(m_hChildMenu);\n\t}\n\n\tinline HWND CMDIChild::Create(CWnd* pParent /*= NULL*/)\n\t// We create the MDI child window and then maximize if required.\n\t// This technique avoids unnecessary flicker when creating maximized MDI children.\n\t{\n\t\t//Call PreCreate in case its overloaded\n\t\tPreCreate(*m_pcs);\n\n\t\t//Determine if the window should be created maximized\n\t\tBOOL bMax = FALSE;\n\t\tpParent->SendMessage(WM_MDIGETACTIVE, 0L, (LPARAM)&bMax);\n\t\tbMax = bMax | (m_pcs->style & WS_MAXIMIZE);\n\n\t\t// Set the Window Class Name\n\t\tTCHAR szClassName[MAX_STRING_SIZE + 1] = _T(\"Win32++ MDI Child\");\n\t\tif (m_pcs->lpszClass)\n\t\t\tlstrcpyn(szClassName, m_pcs->lpszClass, MAX_STRING_SIZE);\n\n\t\t// Set the window style\n\t\tDWORD dwStyle;\n\t\tdwStyle = m_pcs->style & ~WS_MAXIMIZE;\n\t\tdwStyle |= WS_VISIBLE | WS_OVERLAPPEDWINDOW ;\n\n\t\t// Set window size and position\n\t\tint x = CW_USEDEFAULT;\n\t\tint\ty = CW_USEDEFAULT;\n\t\tint cx = CW_USEDEFAULT;\n\t\tint cy = CW_USEDEFAULT;\n\t\tif(m_pcs->cx && m_pcs->cy)\n\t\t{\n\t\t\tx = m_pcs->x;\n\t\t\ty = m_pcs->y;\n\t\t\tcx = m_pcs->cx;\n\t\t\tcy = m_pcs->cy;\n\t\t}\n\n\t\t// Set the extended style\n\t\tDWORD dwExStyle = m_pcs->dwExStyle | WS_EX_MDICHILD;\n\n\t\t// Turn off redraw while creating the window\n\t\tpParent->SendMessage(WM_SETREDRAW, FALSE, 0L);\n\n\t\t// Create the window\n\t\tif (!CreateEx(dwExStyle, szClassName, m_pcs->lpszName, dwStyle, x, y,\n\t\t\tcx, cy, pParent, FromHandle(m_pcs->hMenu), m_pcs->lpCreateParams))\n\t\t\tthrow CWinException(_T(\"CMDIChild::Create ... CreateEx failed\"));\n\n\t\tif (bMax)\n\t\t\tShowWindow(SW_MAXIMIZE);\n\n\t\t// Turn redraw back on\n\t\tpParent->SendMessage(WM_SETREDRAW, TRUE, 0L);\n\t\tpParent->RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_ALLCHILDREN);\n\n\t\t// Ensure bits revealed by round corners (XP themes) are redrawn\n\t\tSetWindowPos(NULL, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_FRAMECHANGED);\n\n\t\tif (m_hChildMenu)\n\t\t\tGetMDIFrame()->UpdateFrameMenu(m_hChildMenu);\n\t\tif (m_hChildAccel)\n\t\t\tGetApp()->SetAccelerators(m_hChildAccel, this);\n\n\t\treturn m_hWnd;\n\t}\n\n\tinline CMDIFrame* CMDIChild::GetMDIFrame() const\n\t{\n\t\tCMDIFrame* pMDIFrame = (CMDIFrame*)GetParent()->GetParent();\n\t\tassert(dynamic_cast<CMDIFrame*>(pMDIFrame));\n\t\treturn pMDIFrame;\n\t}\n\n\tinline LRESULT CMDIChild::FinalWindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\treturn ::DefMDIChildProc(m_hWnd, uMsg, wParam, lParam);\n\t}\n\n\tinline void CMDIChild::MDIActivate() const\n\t{\n\t\tGetParent()->SendMessage(WM_MDIACTIVATE, (WPARAM)m_hWnd, 0L);\n\t}\n\n\tinline void CMDIChild::MDIDestroy() const\n\t{\n\t\tGetParent()->SendMessage(WM_MDIDESTROY, (WPARAM)m_hWnd, 0L);\n\t}\n\n\tinline void CMDIChild::MDIMaximize() const\n\t{\n\t\tGetParent()->SendMessage(WM_MDIMAXIMIZE, (WPARAM)m_hWnd, 0L);\n\t}\n\n\tinline void CMDIChild::MDIRestore() const\n\t{\n\t\tGetParent()->SendMessage(WM_MDIRESTORE, (WPARAM)m_hWnd, 0L);\n\t}\n\n\tinline void CMDIChild::OnCreate()\n\t{\n\t\t// Create the view window\n\t\tassert(GetView());\t\t\t// Use SetView in CMDIChild's constructor to set the view window\n\t\tGetView()->Create(this);\n\t\tRecalcLayout();\n\t}\n\n\tinline void CMDIChild::RecalcLayout()\n\t{\n\t\t// Resize the View window\n\t\tCRect rc = GetClientRect();\n\t\tm_pView->SetWindowPos( NULL, rc.left, rc.top, rc.Width(), rc.Height(), SWP_SHOWWINDOW );\n\t}\n\n\tinline void CMDIChild::SetHandles(HMENU hMenu, HACCEL hAccel)\n\t{\n\t\tm_hChildMenu = hMenu;\n\t\tm_hChildAccel = hAccel;\n\n\t\t// Note: It is valid to call SetChildMenu before the window is created\n\t\tif (IsWindow())\n\t\t{\n\t\t\tCWnd* pWnd = GetMDIFrame()->GetActiveMDIChild();\n\t\t\tif (pWnd == this)\n\t\t\t{\n\t\t\t\tif (m_hChildMenu)\n\t\t\t\t\tGetMDIFrame()->UpdateFrameMenu(m_hChildMenu);\n\n\t\t\t\tif (m_hChildAccel)\n\t\t\t\t\tGetApp()->SetAccelerators(m_hChildAccel, GetMDIFrame());\n\t\t\t}\n\t\t}\n\t}\n\n\tinline void CMDIChild::SetView(CWnd& wndView)\n\t// Sets or changes the View window displayed within the frame\n\t{\n\t\tif (m_pView != &wndView)\n\t\t{\n\t\t\t// Destroy the existing view window (if any)\n\t\t\tif (m_pView) m_pView->Destroy();\n\n\t\t\t// Assign the view window\n\t\t\tm_pView = &wndView;\n\n\t\t\tif (m_hWnd)\n\t\t\t{\n\t\t\t\t// The frame is already created, so create and position the new view too\n\t\t\t\tassert(GetView());\t\t\t// Use SetView in CMDIChild's constructor to set the view window\n\t\t\t\tGetView()->Create(this);\n\t\t\t\tRecalcLayout();\n\t\t\t}\n\t\t}\n\t}\n\n\tinline LRESULT CMDIChild::WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\tswitch (uMsg)\n\t\t{\n\t\tcase WM_MDIACTIVATE:\n\t\t\t{\n\t\t\t\t// This child is being activated\n\t\t\t\tif (lParam == (LPARAM) m_hWnd)\n\t\t\t\t{\n\t\t\t\t\tGetMDIFrame()->m_hActiveMDIChild = m_hWnd;\n\t\t\t\t\t// Set the menu to child default menu\n\t\t\t\t\tif (m_hChildMenu)\n\t\t\t\t\t\tGetMDIFrame()->UpdateFrameMenu(m_hChildMenu);\n\t\t\t\t\tif (m_hChildAccel)\n\t\t\t\t\t\tGetApp()->SetAccelerators(m_hChildAccel, this);\n\t\t\t\t}\n\n\t\t\t\t// No child is being activated\n\t\t\t\tif (0 == lParam)\n\t\t\t\t{\n\t\t\t\t\tGetMDIFrame()->m_hActiveMDIChild = NULL;\n\t\t\t\t\t// Set the menu to frame's original menu\n\t\t\t\t\tGetMDIFrame()->UpdateFrameMenu(GetMDIFrame()->GetFrameMenu());\n\t\t\t\t\tGetApp()->SetAccelerators(GetMDIFrame()->GetFrameAccel(), this);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn 0L ;\n\n\t\tcase WM_WINDOWPOSCHANGED:\n\t\t\t{\n\t\t\t\tRecalcLayout();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn CWnd::WndProcDefault(uMsg, wParam, lParam);\n\t}\n\n\n} // namespace Win32xx\n\n#endif // _WIN32XX_MDI_H_\n\n"
  },
  {
    "path": "external/win32cpp/include/menu.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n\n////////////////////////////////////////////////////////\n// menu.h\n//  Declaration of the CMenu class\n\n// Notes\n//  1) Owner-drawn menus send the WM_MEASUREITEM and WM_DRAWITEM messages\n//     to the window that owns the menu. To manage owner drawing for menus,\n//     handle these two messages in the CWnd's WndProc function.\n//\n//  2) The CMenu pointer returned by FromHandle might be a temporary pointer. It\n//     should be used immediately, not saved for later use.\n//\n//  3) The CMenu pointers returned by FromHandle or GetSubMenu do not need\n//     to be deleted. They are automatically deleted by the Win32++.\n//\n//  4) CMenu pointers returned by GetSubMenu are deleted when the parent CMenu is\n//     detached, destroyed or deconstructed.\n//\n//  5) The HMENU that is attached to a CMenu object (using the attach function) is \n//     automatically deleted when the CMenu object goes out of scope. Detach the\n//     HMENU to stop it being deleted when CMenu's destructor is called.\n//\n//  6) Pass CMenu objects by reference or by pointer when passing them as function \n//     arguments.\n//\n//  7) In those functions that use a MENUITEMINFO structure, its cbSize member is \n//     automatically set to the correct value.\n\n//  Program sample\n//  --------------\n//\tvoid CView::CreatePopup()\n//\t{\n// \t\tCPoint pt = GetCursorPos();\n// \t\n// \t\t// Create the menu\n// \t\tCMenu Popup;\n// \t\tPopup.CreatePopupMenu();\n// \n// \t\t// Add some menu items\n// \t\tPopup.AppendMenu(MF_STRING, 101, _T(\"Menu Item &1\"));\n// \t\tPopup.AppendMenu(MF_STRING, 102, _T(\"Menu Item &2\"));\n// \t\tPopup.AppendMenu(MF_STRING, 103, _T(\"Menu Item &3\"));\n// \t\tPopup.AppendMenu(MF_SEPARATOR);\n// \t\tPopup.AppendMenu(MF_STRING, 104, _T(\"Menu Item &4\"));\n// \n// \t\t// Set menu item states\n// \t\tPopup.CheckMenuRadioItem(101, 101, 101, MF_BYCOMMAND);\n// \t\tPopup.CheckMenuItem(102, MF_BYCOMMAND | MF_CHECKED);\n// \t\tPopup.EnableMenuItem(103, MF_BYCOMMAND | MF_GRAYED);\n// \t\tPopup.SetDefaultItem(104);\n//\t\n// \t\t// Display the popup menu\n// \t\tPopup.TrackPopupMenu(0, pt.x, pt.y, this); \n//\t}\n\n\n\n#if !defined(_WIN32XX_MENU_H_) && !defined(_WIN32_WCE)\n#define _WIN32XX_MENU_H_\n\n\n#include \"wincore.h\"\n#include \"gdi.h\"\n\n\nnamespace Win32xx\n{\n\n\t// Forward declarations\n\tclass CBitmap;\n\n\tclass CMenu\n\t{\n\t\tfriend class CWinApp;\n\n\tpublic:\n\t\t//Construction\n\t\tCMenu() : m_hMenu(0), m_IsTmpMenu(FALSE) {}\n\t\tCMenu(UINT nID) : m_IsTmpMenu(FALSE) \n\t\t{\n\t\t\tm_hMenu = ::LoadMenu(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(nID));\n\t\t}\n\t\t~CMenu();\n\n\t\t//Initialization\n\t\tvoid Attach(HMENU hMenu);\n\t\tvoid CreateMenu();\n\t\tvoid CreatePopupMenu();\n\t\tvoid DestroyMenu();\n\t\tHMENU Detach();\n\t\tHMENU GetHandle() const;\n\t\tBOOL LoadMenu(LPCTSTR lpszResourceName);\n\t\tBOOL LoadMenu(UINT uIDResource);\n\t\tBOOL LoadMenuIndirect(const void* lpMenuTemplate);\n\n\t\t//Menu Operations\n\t\tBOOL TrackPopupMenu(UINT uFlags, int x, int y, CWnd* pWnd, LPCRECT lpRect = 0);\n\t\tBOOL TrackPopupMenuEx(UINT uFlags, int x, int y, CWnd* pWnd, LPTPMPARAMS lptpm);\n\n\t\t//Menu Item Operations\n\t\tBOOL AppendMenu(UINT uFlags, UINT_PTR uIDNewItem = 0, LPCTSTR lpszNewItem = NULL);\n\t\tBOOL AppendMenu(UINT uFlags, UINT_PTR uIDNewItem, const CBitmap* pBmp);\n\t\tUINT CheckMenuItem(UINT uIDCheckItem, UINT uCheck);\n\t\tBOOL CheckMenuRadioItem(UINT uIDFirst, UINT uIDLast, UINT uIDItem, UINT uFlags);\n\t\tBOOL DeleteMenu(UINT uPosition, UINT uFlags);\n\t\tUINT EnableMenuItem(UINT uIDEnableItem, UINT uEnable);\n\t\tUINT GetDefaultItem(UINT gmdiFlags, BOOL fByPos = FALSE);\n\t\tDWORD GetMenuContextHelpId() const;\n\n#if(WINVER >= 0x0500)\t// Minimum OS required is Win2000\n\t\tBOOL GetMenuInfo(LPMENUINFO lpcmi) const;\n\t\tBOOL SetMenuInfo(LPCMENUINFO lpcmi);\n#endif\n\n\t\tUINT GetMenuItemCount() const;\n\t\tUINT GetMenuItemID(int nPos) const;\n\t\tBOOL GetMenuItemInfo(UINT uItem, LPMENUITEMINFO lpMenuItemInfo, BOOL fByPos = FALSE);\n\t\tUINT GetMenuState(UINT uID, UINT uFlags) const;\n\t\tint GetMenuString(UINT uIDItem, LPTSTR lpString, int nMaxCount, UINT uFlags) const;\n\t\tint GetMenuString(UINT uIDItem, CString& rString, UINT uFlags) const;\n\t\tCMenu* GetSubMenu(int nPos);\n\t\tBOOL InsertMenu(UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem = 0, LPCTSTR lpszNewItem = NULL);\n\t\tBOOL InsertMenu(UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem, const CBitmap* pBmp);\n\t\tBOOL InsertMenuItem(UINT uItem, LPMENUITEMINFO lpMenuItemInfo, BOOL fByPos = FALSE);\n\t\tBOOL ModifyMenu(UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem = 0, LPCTSTR lpszNewItem = NULL);\n\t\tBOOL ModifyMenu(UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem, const CBitmap* pBmp);\n\t\tBOOL RemoveMenu(UINT uPosition, UINT uFlags);\n\t\tBOOL SetDefaultItem(UINT uItem, BOOL fByPos = FALSE);\n\t\tBOOL SetMenuContextHelpId(DWORD dwContextHelpId);\n\t\tBOOL SetMenuItemBitmaps(UINT uPosition, UINT uFlags, const CBitmap* pBmpUnchecked, const CBitmap* pBmpChecked);\n\t\tBOOL SetMenuItemInfo(UINT uItem, LPMENUITEMINFO lpMenuItemInfo, BOOL fByPos = FALSE);\n\n\t\t//Operators\n\t\tBOOL operator != (const CMenu& menu) const;\n\t\tBOOL operator == (const CMenu& menu) const;\n\t\toperator HMENU () const;\n\n\tprivate:\n\t\tCMenu(const CMenu&);\t\t\t\t// Disable copy construction\n\t\tCMenu& operator = (const CMenu&);\t// Disable assignment operator\n\t\tvoid AddToMap();\n\t\tBOOL RemoveFromMap();\n\t\tstd::vector<MenuPtr> m_vSubMenus;\t// A vector of smart pointers to CMenu\n\t\tHMENU m_hMenu;\n\t\tBOOL m_IsTmpMenu;\n\t};\n\n\tinline CMenu::~CMenu()\n\t{\n\t\tif (m_hMenu)\n\t\t{\t\n\t\t\tif (!m_IsTmpMenu)\n\t\t\t{\n\t\t\t\t::DestroyMenu(m_hMenu);\n\t\t\t}\n\t\t\t\n\t\t\tRemoveFromMap();\n\t\t}\n\n\t\tm_vSubMenus.clear();\n\t}\n\n\tinline void CMenu::AddToMap()\n\t// Store the HMENU and CMenu pointer in the HMENU map\n\t{\n\t\tassert( GetApp() );\n\t\tassert(m_hMenu);\n\t\t\n\t\tGetApp()->m_csMapLock.Lock();\n\t\tGetApp()->m_mapHMENU.insert(std::make_pair(m_hMenu, this));\n\t\tGetApp()->m_csMapLock.Release();\n\t}\n\n\tinline BOOL CMenu::RemoveFromMap()\n\t{\n\t\tBOOL Success = FALSE;\n\n\t\tif (GetApp())\n\t\t{\n\t\t\t// Allocate an iterator for our HDC map\n\t\t\tstd::map<HMENU, CMenu*, CompareHMENU>::iterator m;\n\n\t\t\tCWinApp* pApp = GetApp();\n\t\t\tif (pApp)\n\t\t\t{\n\t\t\t\t// Erase the CDC pointer entry from the map\n\t\t\t\tpApp->m_csMapLock.Lock();\n\t\t\t\tfor (m = pApp->m_mapHMENU.begin(); m != pApp->m_mapHMENU.end(); ++m)\n\t\t\t\t{\n\t\t\t\t\tif (this == m->second)\n\t\t\t\t\t{\n\t\t\t\t\t\tpApp->m_mapHMENU.erase(m);\n\t\t\t\t\t\tSuccess = TRUE;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tpApp->m_csMapLock.Release();\n\t\t\t}\n\t\t}\n\n\t\treturn Success;\n\t}\n\t\n\t\n\tinline BOOL CMenu::AppendMenu(UINT uFlags, UINT_PTR uIDNewItem /*= 0*/, LPCTSTR lpszNewItem /*= NULL*/)\n\t// Appends a new item to the end of the specified menu bar, drop-down menu, submenu, or shortcut menu.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\treturn ::AppendMenu(m_hMenu, uFlags, uIDNewItem, lpszNewItem);\n\t}\n\n\tinline BOOL CMenu::AppendMenu(UINT uFlags, UINT_PTR uIDNewItem, const CBitmap* pBmp)\n\t// Appends a new item to the end of the specified menu bar, drop-down menu, submenu, or shortcut menu.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\tassert(pBmp);\n\t\treturn ::AppendMenu(m_hMenu, uFlags, uIDNewItem, (LPCTSTR)pBmp->GetHandle());\n\t}\n\n\tinline void CMenu::Attach(HMENU hMenu)\n\t// Attaches an existing menu to this CMenu\n\t{\n\t\tif (m_hMenu != NULL && m_hMenu != hMenu)\n\t\t{\n\t\t\t::DestroyMenu(Detach());\n\t\t}\n\n\t\tif (hMenu)\n\t\t{\n\t\t\tm_hMenu = hMenu;\n\t\t\tAddToMap();\n\t\t}\n\t}\n\t\n\tinline UINT CMenu::CheckMenuItem(UINT uIDCheckItem, UINT uCheck)\n\t// Sets the state of the specified menu item's check-mark attribute to either selected or clear.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\treturn ::CheckMenuItem(m_hMenu, uIDCheckItem, uCheck);\n\t}\n\n\tinline BOOL CMenu::CheckMenuRadioItem(UINT uIDFirst, UINT uIDLast, UINT uIDItem, UINT uFlags)\n\t// Checks a specified menu item and makes it a radio item. At the same time, the function clears \n\t//  all other menu items in the associated group and clears the radio-item type flag for those items.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\treturn ::CheckMenuRadioItem(m_hMenu, uIDFirst, uIDLast, uIDItem, uFlags);\n\t}\t\n\n\tinline void CMenu::CreateMenu()\n\t// Creates an empty menu.\n\t{\n\t\tassert(NULL == m_hMenu);\n\t\tm_hMenu = ::CreateMenu();\n\t\tAddToMap();\n\t}\n\n\tinline void CMenu::CreatePopupMenu()\n\t// Creates a drop-down menu, submenu, or shortcut menu. The menu is initially empty.\n\t{\n\t\tassert(NULL == m_hMenu);\n\t\tm_hMenu = ::CreatePopupMenu();\n\t\tAddToMap();\n\t}\n\t\n\tinline BOOL CMenu::DeleteMenu(UINT uPosition, UINT uFlags)\n\t// Deletes an item from the specified menu.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\treturn ::DeleteMenu(m_hMenu, uPosition, uFlags);\n\t}\t\n\n\tinline void CMenu::DestroyMenu()\n\t// Destroys the menu and frees any memory that the menu occupies.\n\t{\n\t\tif (::IsMenu(m_hMenu)) \n\t\t\t::DestroyMenu(m_hMenu);\n\t\t\n\t\tm_hMenu = 0;\n\t\tRemoveFromMap();\n\t\tm_vSubMenus.clear();\n\t}\n\n\tinline HMENU CMenu::Detach()\n\t// Detaches the HMENU from this CMenu. If the HMENU is not detached it will be \n\t// destroyed when this CMenu is deconstructed.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\tHMENU hMenu = m_hMenu;\n\t\tm_hMenu = 0;\n\t\tRemoveFromMap();\n\t\tm_vSubMenus.clear();\n\t\treturn hMenu;\n\t}\n\n\tinline HMENU CMenu::GetHandle() const\n\t// Returns the HMENU assigned to this CMenu\n\t{\n\t\treturn m_hMenu;\n\t}\n\n\tinline UINT CMenu::EnableMenuItem(UINT uIDEnableItem, UINT uEnable)\n\t// Enables, disables, or grays the specified menu item.\n\t// The uEnable parameter must be a combination of either MF_BYCOMMAND or MF_BYPOSITION\n\t// and MF_ENABLED, MF_DISABLED, or MF_GRAYED.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\treturn ::EnableMenuItem(m_hMenu, uIDEnableItem, uEnable);\n\t}\n\t\n\tinline UINT CMenu::GetDefaultItem(UINT gmdiFlags, BOOL fByPos /*= FALSE*/)\n\t// Determines the default menu item.\n\t// The gmdiFlags parameter specifies how the function searches for menu items. \n\t// This parameter can be zero or more of the following values: GMDI_GOINTOPOPUPS; GMDI_USEDISABLED.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\treturn ::GetMenuDefaultItem(m_hMenu, fByPos, gmdiFlags);\n\t}\n\n\tinline DWORD CMenu::GetMenuContextHelpId() const\n\t// Retrieves the Help context identifier associated with the menu.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\treturn ::GetMenuContextHelpId(m_hMenu);\n\t}\n\n#if(WINVER >= 0x0500)\n// minimum OS required : Win2000\n\n\tinline BOOL CMenu::GetMenuInfo(LPMENUINFO lpcmi) const\n\t// Retrieves the menu information.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\treturn ::GetMenuInfo(m_hMenu, lpcmi);\n\t}\n\n\tinline BOOL CMenu::SetMenuInfo(LPCMENUINFO lpcmi)\n\t// Sets the menu information from the specified MENUINFO structure.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\treturn ::SetMenuInfo(m_hMenu, lpcmi);\n\t}\n\n#endif\n\n\tinline UINT CMenu::GetMenuItemCount() const\n\t// Retrieves the number of menu items.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\treturn ::GetMenuItemCount(m_hMenu);\n\t}\n\n\tinline UINT CMenu::GetMenuItemID(int nPos) const\n\t// Retrieves the menu item identifier of a menu item located at the specified position\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\treturn ::GetMenuItemID(m_hMenu, nPos);\n\t}\n\n\tinline BOOL CMenu::GetMenuItemInfo(UINT uItem, LPMENUITEMINFO lpMenuItemInfo, BOOL fByPos /*= FALSE*/)\n\t// retrieves information about the specified menu item.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\tassert(lpMenuItemInfo);\n\t\tlpMenuItemInfo->cbSize = GetSizeofMenuItemInfo();\n\t\treturn ::GetMenuItemInfo(m_hMenu, uItem, fByPos, lpMenuItemInfo);\n\t}\n\n\tinline UINT CMenu::GetMenuState(UINT uID, UINT uFlags) const\n\t// Retrieves the menu flags associated with the specified menu item.\n\t// Possible values for uFlags are: MF_BYCOMMAND (default) or MF_BYPOSITION.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\treturn ::GetMenuState(m_hMenu, uID, uFlags);\n\t}\n\n\tinline int CMenu::GetMenuString(UINT uIDItem, LPTSTR lpString, int nMaxCount, UINT uFlags) const\n\t// Copies the text string of the specified menu item into the specified buffer.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\tassert(lpString);\n\t\treturn ::GetMenuString(m_hMenu, uIDItem, lpString, nMaxCount, uFlags);\n\t}\n\n\tinline int CMenu::GetMenuString(UINT uIDItem, CString& rString, UINT uFlags) const\n\t// Copies the text string of the specified menu item into the specified buffer.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\treturn ::GetMenuString(m_hMenu, uIDItem, (LPTSTR)rString.c_str(), rString.GetLength(), uFlags);\n\t}\n\n\tinline CMenu* CMenu::GetSubMenu(int nPos)\n\t// Retrieves the CMenu object of a pop-up menu.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\tCMenu* pMenu = new CMenu;\n\t\tpMenu->m_hMenu = ::GetSubMenu(m_hMenu, nPos);\n\t\tpMenu->m_IsTmpMenu = TRUE;\n\t\tm_vSubMenus.push_back(pMenu);\n\t\treturn pMenu;\n\t}\n\n\tinline BOOL CMenu::InsertMenu(UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem /*= 0*/, LPCTSTR lpszNewItem /*= NULL*/)\n\t// Inserts a new menu item into a menu, moving other items down the menu.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\treturn ::InsertMenu(m_hMenu, uPosition, uFlags, uIDNewItem, lpszNewItem);\n\t}\n\n\tinline BOOL CMenu::InsertMenu(UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem, const CBitmap* pBmp)\n\t// Inserts a new menu item into a menu, moving other items down the menu.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\treturn ::InsertMenu(m_hMenu, uPosition, uFlags, uIDNewItem, (LPCTSTR)pBmp->GetHandle());\n\t}\n\n\tinline BOOL CMenu::InsertMenuItem(UINT uItem, LPMENUITEMINFO lpMenuItemInfo, BOOL fByPos /*= FALSE*/)\n\t// Inserts a new menu item at the specified position in a menu.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\tassert(lpMenuItemInfo);\n\t\tlpMenuItemInfo->cbSize = GetSizeofMenuItemInfo();\n\t\treturn ::InsertMenuItem(m_hMenu, uItem, fByPos, lpMenuItemInfo);\n\t}\n\t\n\tinline BOOL CMenu::LoadMenu(LPCTSTR lpszResourceName)\n\t// Loads the menu from the specified windows resource.\n\t{\n\t\tassert(NULL == m_hMenu);\n\t\tassert(lpszResourceName);\n\t\tm_hMenu = ::LoadMenu(GetApp()->GetResourceHandle(), lpszResourceName);\n\t\tif (m_hMenu) AddToMap();\n\t\treturn NULL != m_hMenu;\n\t}\n\n\tinline BOOL CMenu::LoadMenu(UINT uIDResource)\n\t// Loads the menu from the specified windows resource.\n\t{\n\t\tassert(NULL == m_hMenu);\n\t\tm_hMenu = ::LoadMenu(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(uIDResource));\n\t\tif (m_hMenu) AddToMap();\n\t\treturn NULL != m_hMenu;\n\t}\n\n\tinline BOOL CMenu::LoadMenuIndirect(const void* lpMenuTemplate)\n\t// Loads the specified menu template and assigns it to this CMenu.\n\t{\n\t\tassert(NULL == m_hMenu);\n\t\tassert(lpMenuTemplate);\n\t\tm_hMenu = ::LoadMenuIndirect(lpMenuTemplate);\n\t\tif (m_hMenu) AddToMap();\n\t\treturn NULL != m_hMenu;\n\t}\t\n\n\tinline BOOL CMenu::ModifyMenu(UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem /*= 0*/, LPCTSTR lpszNewItem /*= NULL*/)\n\t// Changes an existing menu item. This function is used to specify the content, appearance, and behavior of the menu item.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\treturn ::ModifyMenu(m_hMenu, uPosition, uFlags, uIDNewItem, lpszNewItem);\n\t}\n\n\tinline BOOL CMenu::ModifyMenu(UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem, const CBitmap* pBmp)\n\t// Changes an existing menu item. This function is used to specify the content, appearance, and behavior of the menu item.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\tassert(pBmp);\n\t\treturn ::ModifyMenu(m_hMenu, uPosition, uFlags, uIDNewItem, (LPCTSTR)pBmp->GetHandle());\n\t}\n\n\tinline BOOL CMenu::RemoveMenu(UINT uPosition, UINT uFlags)\n\t// Deletes a menu item or detaches a submenu from the menu.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\treturn ::RemoveMenu(m_hMenu, uPosition, uFlags);\n\t}\n\n\tinline BOOL CMenu::SetDefaultItem(UINT uItem, BOOL fByPos /*= FALSE*/)\n\t//  sets the default menu item for the menu.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\treturn ::SetMenuDefaultItem(m_hMenu, uItem, fByPos);\n\t}\n\n\tinline BOOL CMenu::SetMenuContextHelpId(DWORD dwContextHelpId)\n\t// Associates a Help context identifier with the menu.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\treturn ::SetMenuContextHelpId(m_hMenu, dwContextHelpId);\n\t}\n\n\tinline BOOL CMenu::SetMenuItemBitmaps(UINT uPosition, UINT uFlags, const CBitmap* pBmpUnchecked, const CBitmap* pBmpChecked)\n\t// Associates the specified bitmap with a menu item.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\treturn ::SetMenuItemBitmaps(m_hMenu, uPosition, uFlags, *pBmpUnchecked, *pBmpChecked);\n\t}\n\n\tinline BOOL CMenu::SetMenuItemInfo(UINT uItem, LPMENUITEMINFO lpMenuItemInfo, BOOL fByPos /*= FALSE*/)\n\t// Changes information about a menu item.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\tassert(lpMenuItemInfo);\n\t\tlpMenuItemInfo->cbSize = GetSizeofMenuItemInfo();\n\t\treturn ::SetMenuItemInfo(m_hMenu, uItem, fByPos, lpMenuItemInfo);\n\t}\n\t\t\n\tinline BOOL CMenu::TrackPopupMenu(UINT uFlags, int x, int y, CWnd* pWnd, LPCRECT lpRect /*= 0*/)\n\t// Displays a shortcut menu at the specified location and tracks the selection of items on the menu.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\tHWND hWnd = pWnd? pWnd->GetHwnd() : 0;\n\t\treturn ::TrackPopupMenu(m_hMenu, uFlags, x, y, 0, hWnd, lpRect);\n\t}\n\n\tinline BOOL CMenu::TrackPopupMenuEx(UINT uFlags, int x, int y, CWnd* pWnd, LPTPMPARAMS lptpm)\n\t// Displays a shortcut menu at the specified location and tracks the selection of items on the shortcut menu.\n\t{\n\t\tassert(IsMenu(m_hMenu));\n\t\tHWND hWnd = pWnd? pWnd->GetHwnd() : 0;\n\t\treturn ::TrackPopupMenuEx(m_hMenu, uFlags, x, y, hWnd, lptpm);\n\t}\n\n\tinline BOOL CMenu::operator != (const CMenu& menu) const\n\t// Returns TRUE if the two menu objects are not equal.\n\t{\n\t\treturn menu.m_hMenu != m_hMenu;\n\t}\n\n\tinline BOOL CMenu::operator == (const CMenu& menu) const\n\t// Returns TRUE of the two menu object are equal\n\t{\n\t\treturn menu.m_hMenu == m_hMenu;\n\t}\n\n\tinline CMenu::operator HMENU () const\n\t// Retrieves the menu's handle.\n\t{\n\t\treturn m_hMenu;\n\t}\n\t\n\t\n\t///////////////////////////////////////\n\t// Global functions\n\t//\n\t\n\tinline CMenu* FromHandle(HMENU hMenu)\n\t// Returns the CMenu object associated with the menu handle (HMENU).\n\t{\n\t\tassert( GetApp() );\n\t\tCMenu* pMenu = GetApp()->GetCMenuFromMap(hMenu);\n\t\tif (::IsMenu(hMenu) && pMenu == 0)\n\t\t{\n\t\t\tGetApp()->AddTmpMenu(hMenu);\n\t\t\tpMenu = GetApp()->GetCMenuFromMap(hMenu);\n\t\t}\n\t\treturn pMenu;\n\t}\n\n}\t// namespace Win32xx\n\n#endif\t// _WIN32XX_MENU_H_\n\n"
  },
  {
    "path": "external/win32cpp/include/propertysheet.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n\n///////////////////////////////////////////////////////\n// propertysheet.h\n//  Declaration of the following classes:\n//  CPropertyPage and CPropertySheet\n\n// These classes add support for property sheets to Win32++. A property sheet\n// will have one or more property pages. These pages are much like dialogs\n// which are presented within a tabbed dialog or within a wizard. The data\n// on a property page can be validated before the next page is presented.\n// Property sheets have three modes of use: Modal, Modeless, and Wizard.\n//\n// Refer to the PropertySheet demo program for an example of how propert sheets\n// can be used.\n\n\n#ifndef _WIN32XX_PROPERTYSHEET_H_\n#define _WIN32XX_PROPERTYSHEET_H_\n\n#include \"dialog.h\"\n\n#define ID_APPLY_NOW   0x3021\n#define ID_WIZBACK     0x3023\n#define ID_WIZNEXT     0x3024\n#define ID_WIZFINISH   0x3025\n#define ID_HELP        0xE146\n\n#ifndef PROPSHEETHEADER_V1_SIZE\n #define PROPSHEETHEADER_V1_SIZE 40\n#endif\n\nnamespace Win32xx\n{\n    class CPropertyPage;\n\ttypedef Shared_Ptr<CPropertyPage> PropertyPagePtr;\n\n\tclass CPropertyPage : public CWnd\n\t{\n\tpublic:\n\t\tCPropertyPage (UINT nIDTemplate, LPCTSTR szTitle = NULL);\n\t\tvirtual ~CPropertyPage() {}\n\n\t\tvirtual INT_PTR DialogProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\t\tvirtual INT_PTR DialogProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\t\tvirtual int  OnApply();\n\t\tvirtual void OnCancel();\n\t\tvirtual void OnHelp();\n\t\tvirtual BOOL OnInitDialog();\n\t\tvirtual BOOL OnKillActive();\n\t\tvirtual LRESULT OnNotify(WPARAM wParam, LPARAM lParam);\n\t\tvirtual int  OnOK();\n\t\tvirtual BOOL OnQueryCancel();\n\t\tvirtual BOOL OnQuerySiblings(WPARAM wParam, LPARAM lParam);\n\t\tvirtual int  OnSetActive();\n\t\tvirtual int  OnWizardBack();\n\t\tvirtual INT_PTR OnWizardFinish();\n\t\tvirtual int  OnWizardNext();\n\t\tvirtual\tBOOL PreTranslateMessage(MSG* pMsg);\n\n\t\tstatic UINT CALLBACK StaticPropSheetPageProc(HWND hwnd, UINT uMsg, LPPROPSHEETPAGE ppsp);\n\t\tstatic INT_PTR CALLBACK StaticDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);\n\n\t\tvoid CancelToClose() const;\n\t\tPROPSHEETPAGE GetPSP() const {return m_PSP;}\n\t\tBOOL IsButtonEnabled(int iButton) const;\n\t\tLRESULT QuerySiblings(WPARAM wParam, LPARAM lParam) const;\n\t\tvoid SetModified(BOOL bChanged) const;\n\t\tvoid SetTitle(LPCTSTR szTitle);\n\t\tvoid SetWizardButtons(DWORD dwFlags) const;\n\n\tprotected:\n\t\tPROPSHEETPAGE m_PSP;\n\n\tprivate:\n\t\tCPropertyPage(const CPropertyPage&);\t\t\t\t// Disable copy construction\n\t\tCPropertyPage& operator = (const CPropertyPage&);\t// Disable assignment operator\n\n\t\ttString m_Title;\n\t};\n\n\tclass CPropertySheet : public CWnd\n\t{\n\tpublic:\n\t\tCPropertySheet(UINT nIDCaption, CWnd* pParent = NULL);\n\t\tCPropertySheet(LPCTSTR pszCaption = NULL, CWnd* pParent = NULL);\n\t\tvirtual ~CPropertySheet() {}\n\n\t\t// Operations\n\t\tvirtual CPropertyPage* AddPage(CPropertyPage* pPage);\n\t\tvirtual HWND Create(CWnd* pParent = 0);\n\t\tvirtual INT_PTR CreatePropertySheet(LPCPROPSHEETHEADER ppsph);\n\t\tvirtual void DestroyButton(int iButton);\n\t\tvirtual void Destroy();\n\t\tvirtual int DoModal();\n\t\tvirtual void RemovePage(CPropertyPage* pPage);\n\n\t\t// State functions\n\t\tBOOL IsModeless() const;\n\t\tBOOL IsWizard() const;\n\n\t\t//Attributes\n\t\tCPropertyPage* GetActivePage() const;\n\t\tint GetPageCount() const;\n\t\tint GetPageIndex(CPropertyPage* pPage) const;\n\t\tHWND GetTabControl() const;\n\t\tvirtual BOOL SetActivePage(int nPage);\n\t\tvirtual BOOL SetActivePage(CPropertyPage* pPage);\n\t\tvirtual void SetIcon(UINT idIcon);\n\t\tvirtual void SetTitle(LPCTSTR szTitle);\n\t\tvirtual void SetWizardMode(BOOL bWizard);\n\n\tprotected:\n\t\tvirtual BOOL PreTranslateMessage(MSG* pMsg);\n\t\tvirtual LRESULT WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\n\tprivate:\n\t\tCPropertySheet(const CPropertySheet&);\t\t\t\t// Disable copy construction\n\t\tCPropertySheet& operator = (const CPropertySheet&); // Disable assignment operator\n\t\tvoid BuildPageArray();\n\t\tstatic void CALLBACK Callback(HWND hwnd, UINT uMsg, LPARAM lParam);\n\n\t\ttString m_Title;\n\t\tstd::vector<PropertyPagePtr> m_vPages;\t// vector of CPropertyPage\n\t\tstd::vector<PROPSHEETPAGE> m_vPSP;\t\t// vector of PROPSHEETPAGE\n\t\tBOOL m_bInitialUpdate;\n\t\tPROPSHEETHEADER m_PSH;\n\t};\n\n}\n\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//\n\nnamespace Win32xx\n{\n\n\t//////////////////////////////////////////\n\t// Definitions for the CPropertyPage class\n\t//\n\tinline CPropertyPage::CPropertyPage(UINT nIDTemplate, LPCTSTR szTitle /* = NULL*/)\n\t{\n\t\tZeroMemory(&m_PSP, sizeof(PROPSHEETPAGE));\n\t\tSetTitle(szTitle);\n\n\t\tm_PSP.dwSize        = sizeof(PROPSHEETPAGE);\n\t\tm_PSP.dwFlags       |= PSP_USECALLBACK;\n\t\tm_PSP.hInstance     = GetApp()->GetResourceHandle();\n\t\tm_PSP.pszTemplate   = MAKEINTRESOURCE(nIDTemplate);\n\t\tm_PSP.pszTitle      = m_Title.c_str();\n\t\tm_PSP.pfnDlgProc    = (DLGPROC)CPropertyPage::StaticDialogProc;\n\t\tm_PSP.lParam        = (LPARAM)this;\n\t\tm_PSP.pfnCallback   = CPropertyPage::StaticPropSheetPageProc;\n\t}\n\n\tinline void CPropertyPage::CancelToClose() const\n\t// Disables the Cancel button and changes the text of the OK button to \"Close.\"\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(PSM_CANCELTOCLOSE, 0L, 0L);\n\t}\n\n\n\tinline INT_PTR CPropertyPage::DialogProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\t// Override this function in your class derrived from CPropertyPage if you wish to handle messages\n\t\t// A typical function might look like this:\n\n\t\t//\tswitch (uMsg)\n\t\t//\t{\n\t\t//\tcase MESSAGE1:\t\t// Some Win32 API message\n\t\t//\t\tOnMessage1();\t// A user defined function\n\t\t//\t\tbreak;\t\t\t// Also do default processing\n\t\t//\tcase MESSAGE2:\n\t\t//\t\tOnMessage2();\n\t\t//\t\treturn x;\t\t// Don't do default processing, but instead return\n\t\t//\t\t\t\t\t\t//  a value recommended by the Win32 API documentation\n\t\t//\t}\n\n\t\t// Always pass unhandled messages on to DialogProcDefault\n\t\treturn DialogProcDefault(uMsg, wParam, lParam);\n\t}\n\n\tinline INT_PTR CPropertyPage::DialogProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t// All DialogProc functions should pass unhandled messages to this function\n\t{\n\t\tLRESULT lr = 0L;\n\n\t\tswitch (uMsg)\n\t    {\n\t\tcase UWM_CLEANUPTEMPS:\n\t\t\t{\n\t\t\t\tTLSData* pTLSData = (TLSData*)TlsGetValue(GetApp()->GetTlsIndex());\n\t\t\t\tpTLSData->vTmpWnds.clear();\n\t\t\t}\n\t\t\tbreak;\n\n\t    case WM_INITDIALOG:\n\t\t    return OnInitDialog();\n\n\t\tcase PSM_QUERYSIBLINGS:\n\t\t\treturn (BOOL)OnQuerySiblings(wParam, lParam);\n\n\t\tcase WM_COMMAND:\n\t\t\t{\n\t\t\t\t// Refelect this message if it's from a control\n\t\t\t\tCWnd* pWnd = GetApp()->GetCWndFromMap((HWND)lParam);\n\t\t\t\tif (pWnd != NULL)\n\t\t\t\t\tlr = pWnd->OnCommand(wParam, lParam);\n\n\t\t\t\t// Handle user commands\n\t\t\t\tif (!lr)\n\t\t\t\t\tlr =  OnCommand(wParam, lParam);\n\n\t\t\t\tif (lr) return 0L;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase WM_NOTIFY:\n\t\t\t{\n\t\t\t\t// Do Notification reflection if it came from a CWnd object\n\t\t\t\tHWND hwndFrom = ((LPNMHDR)lParam)->hwndFrom;\n\t\t\t\tCWnd* pWndFrom = GetApp()->GetCWndFromMap(hwndFrom);\n\n\t\t\t\tif (pWndFrom != NULL)\n\t\t\t\t\tlr = pWndFrom->OnNotifyReflect(wParam, lParam);\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// Some controls (eg ListView) have child windows.\n\t\t\t\t\t// Reflect those notifications too.\n\t\t\t\t\tCWnd* pWndFromParent = GetApp()->GetCWndFromMap(::GetParent(hwndFrom));\n\t\t\t\t\tif (pWndFromParent != NULL)\n\t\t\t\t\t\tlr = pWndFromParent->OnNotifyReflect(wParam, lParam);\n\t\t\t\t}\n\n\t\t\t\t// Handle user notifications\n\t\t\t\tif (!lr) lr = OnNotify(wParam, lParam);\n\n\t\t\t\t// Set the return code for notifications\n\t\t\t\tif (IsWindow())\n\t\t\t\t\tSetWindowLongPtr(DWLP_MSGRESULT, (LONG_PTR)lr);\n\n\t\t\t\treturn (BOOL)lr;\n\t\t\t}\n\n\t\tcase WM_PAINT:\n\t\t\t{\n\t\t\t\tif (::GetUpdateRect(m_hWnd, NULL, FALSE))\n\t\t\t\t{\n\t\t\t\t\tCPaintDC dc(this);\n\t\t\t\t\tOnDraw(&dc);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t// RedrawWindow can require repainting without an update rect\n\t\t\t\t{\n\t\t\t\t\tCClientDC dc(this);\n\t\t\t\t\tOnDraw(&dc);\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\tcase WM_ERASEBKGND:\n\t\t\t{\n\t\t\t\tCDC dc((HDC)wParam);\n\t\t\t\tBOOL bResult = OnEraseBkgnd(&dc);\n\t\t\t\tdc.Detach();\n\t\t\t\tif (bResult) return TRUE;\n\t\t\t}\n\t\t\tbreak;\n\n\t\t// A set of messages to be reflected back to the control that generated them\n\t\tcase WM_CTLCOLORBTN:\n\t\tcase WM_CTLCOLOREDIT:\n\t\tcase WM_CTLCOLORDLG:\n\t\tcase WM_CTLCOLORLISTBOX:\n\t\tcase WM_CTLCOLORSCROLLBAR:\n\t\tcase WM_CTLCOLORSTATIC:\n\t\tcase WM_DRAWITEM:\n\t\tcase WM_MEASUREITEM:\n\t\tcase WM_DELETEITEM:\n\t\tcase WM_COMPAREITEM:\n\t\tcase WM_CHARTOITEM:\n\t\tcase WM_VKEYTOITEM:\n\t\tcase WM_HSCROLL:\n\t\tcase WM_VSCROLL:\n\t\tcase WM_PARENTNOTIFY:\n\t\t\treturn MessageReflect(m_hWnd, uMsg, wParam, lParam);\n\n\t    } // switch(uMsg)\n\t    return FALSE;\n\n\t} // INT_PTR CALLBACK CPropertyPage::DialogProc(...)\n\n\tinline BOOL CPropertyPage::IsButtonEnabled(int iButton) const\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn GetParent()->GetDlgItem(iButton)->IsWindowEnabled();\n\t}\n\n\tinline int CPropertyPage::OnApply()\n\t{\n\t\t// This function is called for each page when the Apply button is pressed\n\t\t// Override this function in your derived class if required.\n\n\t\t// The possible return values are:\n\t\t// PSNRET_NOERROR. The changes made to this page are valid and have been applied\n\t\t// PSNRET_INVALID. The property sheet will not be destroyed, and focus will be returned to this page.\n\t\t// PSNRET_INVALID_NOCHANGEPAGE. The property sheet will not be destroyed, and focus will be returned;\n\n\t\treturn PSNRET_NOERROR;\n\t}\n\n\tinline void CPropertyPage::OnCancel()\n\t{\n\t\t// This function is called for each page when the Cancel button is pressed\n\t\t// Override this function in your derived class if required.\n\t}\n\n\tinline void CPropertyPage::OnHelp()\n\t{\n\t\t// This function is called in response to the PSN_HELP notification.\n\t\tSendMessage(m_hWnd, WM_COMMAND, ID_HELP, 0L);\n\t}\n\n\tinline BOOL CPropertyPage::OnQueryCancel()\n\t{\n\t\t// Called when the cancel button is pressed, and before the cancel has taken place\n\t\t// Returns TRUE to prevent the cancel operation, or FALSE to allow it.\n\n\t\treturn FALSE;    // Allow cancel to proceed\n\t}\n\n\tinline BOOL CPropertyPage::OnQuerySiblings(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\t\tUNREFERENCED_PARAMETER(lParam);\n\n\t\t// Responds to a query request from the Property Sheet.\n\t\t// The values for wParam and lParam are the ones set by\n\t\t// the CPropertySheet::QuerySiblings call\n\n\t\t// return FALSE to allow other siblings to be queried, or\n\t\t// return TRUE to stop query at this page.\n\n\t\treturn FALSE;\n\t}\n\n\tinline BOOL CPropertyPage::OnInitDialog()\n\t{\n\t\t// Called when the property page is created\n\t\t// Override this function in your derived class if required.\n\n\t\treturn TRUE; // Pass Keyboard control to handle in WPARAM\n\t}\n\n\tinline BOOL CPropertyPage::OnKillActive()\n\t{\n\t\t// This is called in response to a PSN_KILLACTIVE notification, which\n\t\t// is sent whenever the OK or Apply button is pressed.\n\t\t// It provides an opportunity to validate the page contents before it's closed.\n\t\t// Return TRUE to prevent the page from losing the activation, or FALSE to allow it.\n\n\t\treturn FALSE;\n\t}\n\n\tinline int CPropertyPage::OnOK()\n\t{\n\t\t// Called for each page when the OK button is pressed\n\t\t// Override this function in your derived class if required.\n\n\t\t// The possible return values are:\n\t\t// PSNRET_NOERROR. The changes made to this page are valid and have been applied\n\t\t// PSNRET_INVALID. The property sheet will not be destroyed, and focus will be returned to this page.\n\t\t// PSNRET_INVALID_NOCHANGEPAGE. The property sheet will not be destroyed, and focus will be returned;\n\n\t\treturn PSNRET_NOERROR;\n\t}\n\n\tinline LRESULT CPropertyPage::OnNotify(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\n\t\tLPPSHNOTIFY pNotify = (LPPSHNOTIFY)lParam;\n\t\tswitch(pNotify->hdr.code)\n\t\t{\n\t\tcase PSN_SETACTIVE:\n\t\t\treturn OnSetActive();\n\t\tcase PSN_KILLACTIVE:\n\t\t\treturn OnKillActive();\n\t\tcase PSN_APPLY:\n\t\t\tif (pNotify->lParam)\n\t\t\t\treturn OnOK();\n\t\t\telse\n\t\t\t\treturn OnApply();\n\t\tcase PSN_RESET:\n\t\t\tOnCancel();\n\t\t\treturn FALSE;\n\t\tcase PSN_QUERYCANCEL:\n\t\t\treturn OnQueryCancel();\n\t\tcase PSN_WIZNEXT:\n\t\t\treturn OnWizardNext();\n\t\tcase PSN_WIZBACK:\n\t\t\treturn OnWizardBack();\n\t\tcase PSN_WIZFINISH:\n\t\t\treturn OnWizardFinish();\n\t\tcase PSN_HELP:\n\t\t\tOnHelp();\n\t\t\treturn TRUE;\n\t\t}\n\t\treturn FALSE;\n\t}\n\n\tinline int CPropertyPage::OnSetActive()\n\t{\n\t\t// Called when a page becomes active\n\t\t// Override this function in your derived class if required.\n\n\t\t// Returns zero to accept the activation, or -1 to activate the next or the previous page (depending\n\t\t// on whether the user clicked the Next or Back button). To set the activation to a particular page,\n\t\t// return the resource identifier of the page.\n\n\t\treturn 0;\n\t}\n\n\tinline int CPropertyPage::OnWizardBack()\n\t{\n\t\t// This function is called when the Back button is pressed on a wizard page\n\t\t// Override this function in your derived class if required.\n\n\t\t// Returns 0 to allow the wizard to go to the previous page. Returns -1 to prevent the wizard\n\t\t// from changing pages. To display a particular page, return its dialog resource identifier.\n\n\t\treturn 0;\n\t}\n\n\tinline INT_PTR CPropertyPage::OnWizardFinish()\n\t{\n\t\t// This function is called when the Finish button is pressed on a wizard page\n\t\t// Override this function in your derived class if required.\n\n\t\t// Return Value:\n\t\t// Return non-zero to prevent the wizard from finishing.\n\t\t// Version 5.80. and later. Return a window handle to prevent the wizard from finishing. The wizard will set the focus to that window. The window must be owned by the wizard page.\n\t\t// Return 0 to allow the wizard to finish.\n\n\t\treturn 0; // Allow wizard to finish\n\t}\n\n\tinline int CPropertyPage::OnWizardNext()\n\t{\n\t\t// This function is called when the Next button is pressed on a wizard page\n\t\t// Override this function in your derived class if required.\n\n\t\t// Return 0 to allow the wizard to go to the next page. Return -1 to prevent the wizard from\n\t\t// changing pages. To display a particular page, return its dialog resource identifier.\n\n\t\treturn 0;\n\t}\n\n\tinline BOOL CPropertyPage::PreTranslateMessage(MSG* pMsg)\n\t{\n\t\t// allow the tab control to translate keyboard input\n\t\tif (pMsg->message == WM_KEYDOWN && GetAsyncKeyState(VK_CONTROL) < 0 &&\n\t\t\t(pMsg->wParam == VK_TAB || pMsg->wParam == VK_PRIOR || pMsg->wParam == VK_NEXT))\n\t\t{\n\t\t\tCWnd* pWndParent = GetParent();\n\t\t\tif (pWndParent->SendMessage(PSM_ISDIALOGMESSAGE, 0L, (LPARAM)pMsg))\n\t\t\t\treturn TRUE;\n\t\t}\n\n\t\t// allow the dialog to translate keyboard input\n\t\tif ((pMsg->message >= WM_KEYFIRST) && (pMsg->message <= WM_KEYLAST))\n\t\t{\n\t\t\tif (IsDialogMessage(pMsg))\n\t\t\t\treturn TRUE;\n\t\t}\n\n\t\treturn CWnd::PreTranslateMessage(pMsg);\n\t}\n\n\tinline LRESULT CPropertyPage::QuerySiblings(WPARAM wParam, LPARAM lParam) const\n\t{\n\t\t// Sent to a property sheet, which then forwards the message to each of its pages.\n\t\t// Set wParam and lParam to values you want passed to the property pages.\n\t\t// Returns the nonzero value from a page in the property sheet, or zero if no page returns a nonzero value.\n\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn GetParent()->SendMessage(PSM_QUERYSIBLINGS, wParam, lParam);\n\t}\n\n\tinline void CPropertyPage::SetModified(BOOL bChanged) const\n\t{\n\t\t// The property sheet will enable the Apply button if bChanged is TRUE.\n\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tif (bChanged)\n\t\t\tGetParent()->SendMessage(PSM_CHANGED, (WPARAM)m_hWnd, 0L);\n\t\telse\n\t\t\tGetParent()->SendMessage(PSM_UNCHANGED, (WPARAM)m_hWnd, 0L);\n\t}\n\n\tinline void CPropertyPage::SetTitle(LPCTSTR szTitle)\n\t{\n\t\tif (szTitle)\n\t\t{\n\t\t\tm_Title = szTitle;\n\t\t\tm_PSP.dwFlags |= PSP_USETITLE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_Title.erase();\n\t\t\tm_PSP.dwFlags &= ~PSP_USETITLE;\n\t\t}\n\n\t\tm_PSP.pszTitle = m_Title.c_str();\n\t}\n\n\tinline void CPropertyPage::SetWizardButtons(DWORD dwFlags) const\n\t{\n\t\t// dwFlags:  A value that specifies which wizard buttons are enabled. You can combine one or more of the following flags.\n\t\t//\tPSWIZB_BACK\t\t\t\tEnable the Back button. If this flag is not set, the Back button is displayed as disabled.\n\t\t//\tPSWIZB_DISABLEDFINISH\tDisplay a disabled Finish button.\n\t\t//\tPSWIZB_FINISH\t\t\tDisplay an enabled Finish button.\n\t\t//\tPSWIZB_NEXT\t\t\t\tEnable the Next button. If this flag is not set, the Next button is displayed as disabled.\n\n\t\tassert (::IsWindow(m_hWnd));\n\t\tPropSheet_SetWizButtons(::GetParent(m_hWnd), dwFlags);\n\t}\n\n\tinline UINT CALLBACK CPropertyPage::StaticPropSheetPageProc(HWND hwnd, UINT uMsg, LPPROPSHEETPAGE ppsp)\n\t{\n\t\tassert( GetApp() );\n\t\tUNREFERENCED_PARAMETER(hwnd);\n\n\t\t// Note: the hwnd is always NULL\n\n\t\tswitch (uMsg)\n\t\t{\n\t\tcase PSPCB_CREATE:\n\t\t\t{\n\t\t\t\tTLSData* pTLSData = (TLSData*)TlsGetValue(GetApp()->GetTlsIndex());\n\t\t\t\tassert(pTLSData);\n\n\t\t\t\t// Store the CPropertyPage pointer in Thread Local Storage\n\t\t\t\tpTLSData->pCWnd = (CWnd*)ppsp->lParam;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\treturn TRUE;\n\t}\n\n\tinline INT_PTR CALLBACK CPropertyPage::StaticDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\tassert( GetApp() );\n\n\t\t// Find matching CWnd pointer for this HWND\n\t\tCPropertyPage* pPage = (CPropertyPage*)GetApp()->GetCWndFromMap(hwndDlg);\n\t\tif (0 == pPage)\n\t\t{\n\t\t\t// matching CWnd pointer not found, so add it to HWNDMap now\n\t\t\tTLSData* pTLSData = (TLSData*)TlsGetValue(GetApp()->GetTlsIndex());\n\t\t\tpPage = (CPropertyPage*)pTLSData->pCWnd;\n\n\t\t\t// Set the hWnd members and call DialogProc for this message\n\t\t\tpPage->m_hWnd = hwndDlg;\n\t\t\tpPage->AddToMap();\n\t\t}\n\n\t\treturn pPage->DialogProc(uMsg, wParam, lParam);\n\t}\n\n\n\t///////////////////////////////////////////\n\t// Definitions for the CPropertySheet class\n\t//\n\tinline CPropertySheet::CPropertySheet(UINT nIDCaption, CWnd* pParent /* = NULL*/)\n\t{\n\t\tZeroMemory(&m_PSH, sizeof (PROPSHEETHEADER));\n\t\tSetTitle(LoadString(nIDCaption));\n\t\tm_bInitialUpdate = FALSE;\n\n#ifdef _WIN32_WCE\n\t\tm_PSH.dwSize = sizeof(PROPSHEETHEADER);\n#else\n\t\tif (GetComCtlVersion() >= 471)\n\t\t\tm_PSH.dwSize = sizeof(PROPSHEETHEADER);\n\t\telse\n\t\t\tm_PSH.dwSize = PROPSHEETHEADER_V1_SIZE;\n#endif\n\n\t\tm_PSH.dwFlags          = PSH_PROPSHEETPAGE | PSH_USECALLBACK;\n\t\tm_PSH.hwndParent       = pParent? pParent->GetHwnd() : 0;\n\t\tm_PSH.hInstance        = GetApp()->GetInstanceHandle();\n\t\tm_PSH.pfnCallback      = (PFNPROPSHEETCALLBACK)CPropertySheet::Callback;\n\t}\n\n\tinline CPropertySheet::CPropertySheet(LPCTSTR pszCaption /*= NULL*/, CWnd* pParent /* = NULL*/)\n\t{\n\t\tZeroMemory(&m_PSH, sizeof (PROPSHEETHEADER));\n\t\tSetTitle(pszCaption);\n\t\tm_bInitialUpdate = FALSE;\n\n#ifdef _WIN32_WCE\n\t\tm_PSH.dwSize = PROPSHEETHEADER_V1_SIZE;\n#else\n\t\tif (GetComCtlVersion() >= 471)\n\t\t\tm_PSH.dwSize = sizeof(PROPSHEETHEADER);\n\t\telse\n\t\t\tm_PSH.dwSize = PROPSHEETHEADER_V1_SIZE;\n#endif\n\n\t\tm_PSH.dwFlags          = PSH_PROPSHEETPAGE | PSH_USECALLBACK;\n\t\tm_PSH.hwndParent       = pParent? pParent->GetHwnd() : 0;;\n\t\tm_PSH.hInstance        = GetApp()->GetInstanceHandle();\n\t\tm_PSH.pfnCallback      = (PFNPROPSHEETCALLBACK)CPropertySheet::Callback;\n\t}\n\n\tinline CPropertyPage* CPropertySheet::AddPage(CPropertyPage* pPage)\n\t// Adds a Property Page to the Property Sheet\n\t{\n\t\tassert(NULL != pPage);\n\n\t\tm_vPages.push_back(PropertyPagePtr(pPage));\n\n\t\tif (m_hWnd)\n\t\t{\n\t\t\t// property sheet already exists, so add page to it\n\t\t\tPROPSHEETPAGE psp = pPage->GetPSP();\n\t\t\tHPROPSHEETPAGE hpsp = ::CreatePropertySheetPage(&psp);\n\t\t\tPropSheet_AddPage(m_hWnd, hpsp);\n\t\t}\n\n\t\tm_PSH.nPages = (int)m_vPages.size();\n\n\t\treturn pPage;\n\t}\n\n\tinline void CPropertySheet::BuildPageArray()\n\t// Builds the PROPSHEETPAGE array\n\t{\n\t\tm_vPSP.clear();\n\t\tstd::vector<PropertyPagePtr>::iterator iter;\n\t\tfor (iter = m_vPages.begin(); iter < m_vPages.end(); ++iter)\n\t\t\tm_vPSP.push_back((*iter)->GetPSP());\n\n\t\tPROPSHEETPAGE* pPSPArray = &m_vPSP.front();\t// Array of PROPSHEETPAGE\n\t\tm_PSH.ppsp = pPSPArray;\n\t}\n\n\tinline void CALLBACK CPropertySheet::Callback(HWND hwnd, UINT uMsg, LPARAM lParam)\n\t{\n\t\tassert( GetApp() );\n\n\t\tswitch(uMsg)\n\t\t{\n\t\t//called before the dialog is created, hwnd = NULL, lParam points to dialog resource\n\t\tcase PSCB_PRECREATE:\n\t\t\t{\n\t\t\t\tLPDLGTEMPLATE  lpTemplate = (LPDLGTEMPLATE)lParam;\n\n\t\t\t\tif(!(lpTemplate->style & WS_SYSMENU))\n\t\t\t\t{\n\t\t\t\t\tlpTemplate->style |= WS_SYSMENU;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\n\t\t//called after the dialog is created\n\t\tcase PSCB_INITIALIZED:\n\t\t\t{\n\t\t\t\t// Retrieve pointer to CWnd object from Thread Local Storage\n\t\t\t\tTLSData* pTLSData = (TLSData*)TlsGetValue(GetApp()->GetTlsIndex());\n\t\t\t\tassert(pTLSData);\n\n\t\t\t\tCPropertySheet* w = (CPropertySheet*)pTLSData->pCWnd;\n\t\t\t\tassert(w);\n\n\t\t\t\tw->Attach(hwnd);\n\t\t\t\tw->OnCreate();\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n\n\n\tinline HWND CPropertySheet::Create(CWnd* pParent /*= 0*/)\n\t// Creates a modeless Property Sheet\n\t{\n\t\tassert( GetApp() );\n\n\t\tif (pParent)\n\t\t{\n\t\t\tm_PSH.hwndParent = pParent->GetHwnd();\n\t\t}\n\n\t\tBuildPageArray();\n\t\tPROPSHEETPAGE* pPSPArray = &m_vPSP.front();\n\t\tm_PSH.ppsp = pPSPArray;\n\n\t\t// Create a modeless Property Sheet\n\t\tm_PSH.dwFlags &= ~PSH_WIZARD;\n\t\tm_PSH.dwFlags |= PSH_MODELESS;\n\t\tHWND hWnd = (HWND)CreatePropertySheet(&m_PSH);\n\n\t\treturn hWnd;\n\t}\n\n\tinline INT_PTR CPropertySheet::CreatePropertySheet(LPCPROPSHEETHEADER ppsph)\n\t{\n\t\tassert( GetApp() );\n\n\t\tINT_PTR ipResult = 0;\n\n\t\t// Only one window per CWnd instance allowed\n\t\tassert(!::IsWindow(m_hWnd));\n\n\t\t// Ensure this thread has the TLS index set\n\t\tTLSData* pTLSData = GetApp()->SetTlsIndex();\n\n\t\t// Store the 'this' pointer in Thread Local Storage\n\t\tpTLSData->pCWnd = this;\n\n\t\t// Create the property sheet\n\t\tipResult = PropertySheet(ppsph);\n\n\t\treturn ipResult;\n\t}\n\n\tinline void CPropertySheet::DestroyButton(int IDButton)\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tHWND hwndButton = ::GetDlgItem(m_hWnd, IDButton);\n\t\tif (hwndButton != NULL)\n\t\t{\n\t\t\t// Hide and disable the button\n\t\t\t::ShowWindow(hwndButton, SW_HIDE);\n\t\t\t::EnableWindow(hwndButton, FALSE);\n\t\t}\n\t}\n\n\tinline void CPropertySheet::Destroy()\n\t{\n\t\tCWnd::Destroy();\n\t\tm_vPages.clear();\n\t}\n\n\tinline int CPropertySheet::DoModal()\n\t{\n\t\tassert( GetApp() );\n\n\t\tBuildPageArray();\n\t\tPROPSHEETPAGE* pPSPArray = &m_vPSP.front();\n\t\tm_PSH.ppsp = pPSPArray;\n\n\t\t// Create the Property Sheet\n\t\tint nResult = (int)CreatePropertySheet(&m_PSH);\n\n\t\tm_vPages.clear();\n\n\t\treturn nResult;\n\t}\n\n\tinline CPropertyPage* CPropertySheet::GetActivePage() const\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tCPropertyPage* pPage = NULL;\n\t\tif (m_hWnd != NULL)\n\t\t{\n\t\t\tHWND hPage = (HWND)SendMessage(PSM_GETCURRENTPAGEHWND, 0L, 0L);\n\t\t\tpPage = (CPropertyPage*)FromHandle(hPage);\n\t\t}\n\n\t\treturn pPage;\n\t}\n\n\tinline int CPropertySheet::GetPageCount() const\n\t// Returns the number of Property Pages in this Property Sheet\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)m_vPages.size();\n\t}\n\n\tinline int CPropertySheet::GetPageIndex(CPropertyPage* pPage) const\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tfor (int i = 0; i < GetPageCount(); i++)\n\t\t{\n\t\t\tif (m_vPages[i].get() == pPage)\n\t\t\t\treturn i;\n\t\t}\n\t\treturn -1;\n\t}\n\n\tinline HWND CPropertySheet::GetTabControl() const\n\t// Returns the handle to the Property Sheet's tab control\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HWND)SendMessage(PSM_GETTABCONTROL, 0L, 0L);\n\t}\n\n\tinline BOOL CPropertySheet::IsModeless() const\n\t{\n\t\treturn (m_PSH.dwFlags & PSH_MODELESS);\n\t}\n\n\tinline BOOL CPropertySheet::IsWizard() const\n\t{\n\t\treturn (m_PSH.dwFlags & PSH_WIZARD);\n\t}\n\n\tinline void CPropertySheet::RemovePage(CPropertyPage* pPage)\n\t// Removes a Property Page from the Property Sheet\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tint nPage = GetPageIndex(pPage);\n\t\tif (m_hWnd != NULL)\n\t\t\tSendMessage(m_hWnd, PSM_REMOVEPAGE, nPage, 0L);\n\n\t\tm_vPages.erase(m_vPages.begin() + nPage, m_vPages.begin() + nPage+1);\n\t\tm_PSH.nPages = (int)m_vPages.size();\n\t}\n\n\tinline BOOL CPropertySheet::PreTranslateMessage(MSG* pMsg)\n\t{\n\t\t// allow sheet to translate Ctrl+Tab, Shift+Ctrl+Tab, Ctrl+PageUp, and Ctrl+PageDown\n\t\tif (pMsg->message == WM_KEYDOWN && GetAsyncKeyState(VK_CONTROL) < 0 &&\n\t\t\t(pMsg->wParam == VK_TAB || pMsg->wParam == VK_PRIOR || pMsg->wParam == VK_NEXT))\n\t\t{\n\t\t\tif (SendMessage(PSM_ISDIALOGMESSAGE, 0L, (LPARAM)pMsg))\n\t\t\t\treturn TRUE;\n\t\t}\n\n\t\t// allow the dialog to translate keyboard input\n\t\tif ((pMsg->message >= WM_KEYFIRST) && (pMsg->message <= WM_KEYLAST))\n\t\t{\n\t\t\treturn GetActivePage()->PreTranslateMessage(pMsg);\n\t\t}\n\n\t\treturn CWnd::PreTranslateMessage(pMsg);\n\t}\n\n\tinline BOOL CPropertySheet::SetActivePage(int nPage)\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(m_hWnd, PSM_SETCURSEL, nPage, 0L);\n\t}\n\n\tinline BOOL CPropertySheet::SetActivePage(CPropertyPage* pPage)\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tint nPage = GetPageIndex(pPage);\n\t\tif ((nPage >= 0))\n\t\t\treturn SetActivePage(nPage);\n\n\t\treturn FALSE;\n\t}\n\n\tinline void CPropertySheet::SetIcon(UINT idIcon)\n\t{\n\t\tm_PSH.pszIcon = MAKEINTRESOURCE(idIcon);\n\t\tm_PSH.dwFlags |= PSH_USEICONID;\n\t}\n\n\tinline void CPropertySheet::SetTitle(LPCTSTR szTitle)\n\t{\n\t\tif (szTitle)\n\t\t\tm_Title = szTitle;\n\t\telse\n\t\t\tm_Title.erase();\n\n\t\tm_PSH.pszCaption = m_Title.c_str();\n\t}\n\n\tinline void CPropertySheet::SetWizardMode(BOOL bWizard)\n\t{\n\t\tif (bWizard)\n\t\t\tm_PSH.dwFlags |= PSH_WIZARD;\n\t\telse\n\t\t\tm_PSH.dwFlags &= ~PSH_WIZARD;\n\t}\n\n\tinline LRESULT CPropertySheet::WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\tswitch (uMsg)\n\t\t{\n\n\t\tcase WM_WINDOWPOSCHANGED:\n\t\t\t{\n\t\t\t\tLPWINDOWPOS lpWinPos = (LPWINDOWPOS)lParam;\n\t\t\t\tif (lpWinPos->flags & SWP_SHOWWINDOW)\n\t\t\t\t{\n\t\t\t\t\tif (!m_bInitialUpdate)\n\t\t\t\t\t\t// The first window positioning with the window visible\n\t\t\t\t\t\tOnInitialUpdate();\n\t\t\t\t\tm_bInitialUpdate = TRUE;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase WM_DESTROY:\n\t\t\tm_bInitialUpdate = FALSE;\n\t\t\tbreak;\n\n\t\tcase WM_SYSCOMMAND:\n\t\t\tif ((SC_CLOSE == wParam) && (m_PSH.dwFlags &  PSH_MODELESS))\n\t\t\t{\n\t\t\t\tDestroy();\n\t\t\t\treturn 0L;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\t// pass unhandled messages on for default processing\n\t\treturn CWnd::WndProcDefault(uMsg, wParam, lParam);\n\t}\n\n}\n\n#endif // _WIN32XX_PROPERTYSHEET_H_\n"
  },
  {
    "path": "external/win32cpp/include/rebar.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n\n#ifndef _WIN32XX_REBAR_H_\n#define _WIN32XX_REBAR_H_\n\n#include \"wincore.h\"\n#include \"gdi.h\"\n\n\nnamespace Win32xx\n{\n\n\tstruct ReBarTheme\n\t{\n\t\tBOOL UseThemes;\t\t\t// TRUE if themes are used\n\t\tCOLORREF clrBkgnd1;\t\t// Colour 1 for rebar background\n\t\tCOLORREF clrBkgnd2;\t\t// Colour 2 for rebar background\n\t\tCOLORREF clrBand1;\t\t// Colour 1 for rebar band background. Use NULL if not required\n\t\tCOLORREF clrBand2;\t\t// Colour 2 for rebar band background. Use NULL if not required\n\t\tBOOL FlatStyle;\t\t\t// Bands are rendered with flat rather than raised style\n\t\tBOOL BandsLeft;\t\t\t// Position bands left on rearrange\n\t\tBOOL LockMenuBand;\t\t// Lock MenuBar's band in dedicated top row, without gripper\n\t\tBOOL RoundBorders;\t\t// Use rounded band borders\n\t\tBOOL ShortBands;        // Allows bands to be shorter than maximum available width\n\t\tBOOL UseLines;\t\t\t// Displays horizontal lines between bands\n\t};\n\n\t////////////////////////////////////\n\t// Declaration of the CReBar class\n\t//\n\tclass CReBar : public CWnd\n\t{\n\tpublic:\n\t\tCReBar();\n\t\tvirtual ~CReBar();\n\n\t\t// Operations\n\t\tBOOL DeleteBand(const int nBand) const;\n\t\tint  HitTest(RBHITTESTINFO& rbht);\n\t\tHWND HitTest(POINT pt);\n\t\tint  IDToIndex(UINT uBandID) const;\n\t\tBOOL InsertBand(const int nBand, REBARBANDINFO& rbbi) const;\n\t\tBOOL IsBandVisible(int nBand) const;\n\t\tvoid MaximizeBand(UINT uBand, BOOL fIdeal = FALSE);\n\t\tvoid MinimizeBand(UINT uBand);\n\t\tBOOL MoveBand(UINT uFrom, UINT uTo);\n\t\tvoid MoveBandsLeft();\n\t\tBOOL ResizeBand(const int nBand, const CSize& sz) const;\n\t\tBOOL ShowGripper(int nBand, BOOL fShow) const;\n\t\tBOOL ShowBand(int nBand, BOOL fShow) const;\n\t\tBOOL SizeToRect(CRect& rect) const;\n\t\t\n\t\t// Attributes\n\t\tint  GetBand(const HWND hWnd) const;\n\t\tCRect GetBandBorders(int nBand) const;\n\t\tint  GetBandCount() const;\n\t\tBOOL GetBandInfo(const int nBand, REBARBANDINFO& rbbi) const;\n\t\tCRect GetBandRect(int i) const;\n\t\tUINT GetBarHeight() const;\n\t\tBOOL GetBarInfo(REBARINFO& rbi) const;\n\t\tHWND GetMenuBar() {return m_hMenuBar;}\n\t\tReBarTheme& GetReBarTheme() {return m_Theme;}\n\t\tUINT GetRowCount() const;\n\t\tint  GetRowHeight(int nRow) const;\n\t\tUINT GetSizeofRBBI() const;\n\t\tHWND GetToolTips() const;\n\t\tBOOL SetBandBitmap(const int nBand, const CBitmap* pBackground) const;\n\t\tBOOL SetBandColor(const int nBand, const COLORREF clrFore, const COLORREF clrBack) const;\n\t\tBOOL SetBandInfo(const int nBand, REBARBANDINFO& rbbi) const;\n\t\tBOOL SetBarInfo(REBARINFO& rbi) const;\n\t\tvoid SetMenuBar(HWND hMenuBar) {m_hMenuBar = hMenuBar;}\n\t\tvoid SetReBarTheme(ReBarTheme& Theme);\n\n\tprotected:\n\t//Overridables\n\t\tvirtual BOOL OnEraseBkgnd(CDC* pDC);\n\t\tvirtual void PreCreate(CREATESTRUCT& cs);\n\t\tvirtual void PreRegisterClass(WNDCLASS &wc);\n\t\tvirtual LRESULT WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\n\tprivate:\n\t\tCReBar(const CReBar&);\t\t\t\t// Disable copy construction\n\t\tCReBar& operator = (const CReBar&); // Disable assignment operator\n\n\t\tReBarTheme m_Theme;\n\t\tBOOL m_bIsDragging;\n\t\tHWND m_hMenuBar;\n\t\tLPARAM m_Orig_lParam;\n\t};\n\n}\n\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n\nnamespace Win32xx\n{\n\n\t///////////////////////////////////\n\t// Definitions for the CReBar class\n\t//\n\tinline CReBar::CReBar() : m_bIsDragging(FALSE), m_hMenuBar(0), m_Orig_lParam(0L)\n\t{\n\t\tZeroMemory(&m_Theme, sizeof(ReBarTheme));\n\t}\n\n\tinline CReBar::~CReBar()\n\t{\n\t}\n\n\tinline BOOL CReBar::DeleteBand(int nBand) const\n\t// Deletes a band from a rebar control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(RB_DELETEBAND, nBand, 0L);\n\t}\n\n\tinline int CReBar::GetBand(HWND hWnd) const\n\t// Returns the zero based band number for this window handle\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tint nResult = -1;\n\t\tif (NULL == hWnd) return nResult;\n\n\t\tfor (int nBand = 0; nBand < GetBandCount(); ++nBand)\n\t\t{\n\t\t\tREBARBANDINFO rbbi = {0};\n\t\t\trbbi.cbSize = GetSizeofRBBI();\n\t\t\trbbi.fMask = RBBIM_CHILD;\n\t\t\tGetBandInfo(nBand, rbbi);\n\t\t\tif (rbbi.hwndChild == hWnd)\n\t\t\t\tnResult = nBand;\n\t\t}\n\n\t\treturn nResult;\n\t}\n\n\tinline CRect CReBar::GetBandBorders(int nBand) const\n\t// Retrieves the borders of a band.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tCRect rc;\n\t\tSendMessage(RB_GETBANDBORDERS, nBand, (LPARAM)&rc);\n\t\treturn rc;\n\t}\n\n\tinline int  CReBar::GetBandCount() const\n\t// Retrieves the count of bands currently in the rebar control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(RB_GETBANDCOUNT, 0L, 0L);\n\t}\n\n\tinline BOOL CReBar::GetBandInfo(int nBand, REBARBANDINFO& rbbi) const\n\t// Retrieves information about a specified band in a rebar control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tassert(nBand >=  0);\n\n\t\t// REBARBANDINFO describes individual BAND characteristics\n\t\trbbi.cbSize = GetSizeofRBBI();\n\t\treturn (BOOL)SendMessage(RB_GETBANDINFO, nBand, (LPARAM)&rbbi);\n\t}\n\n\tinline CRect CReBar::GetBandRect(int i) const\n\t// Retrieves the bounding rectangle for a given band in a rebar control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tCRect rc;\n\t\tSendMessage(RB_GETRECT, i, (LPARAM)&rc);\n\t\treturn rc;\n\t}\n\n\tinline UINT CReBar::GetBarHeight() const\n\t// Retrieves the height of the rebar control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (UINT)SendMessage(RB_GETBARHEIGHT, 0L, 0L);\n\t}\n\n\tinline BOOL CReBar::GetBarInfo(REBARINFO& rbi) const\n\t// Retrieves information about the rebar control and the image list it uses.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\t// REBARINFO describes overall rebar control characteristics\n\t\trbi.cbSize = GetSizeofRBBI();\n\t\treturn (BOOL)SendMessage(RB_GETBARINFO, 0L, (LPARAM)&rbi);\n\t}\n\n\tinline UINT CReBar::GetRowCount() const\n\t// Retrieves the number of rows of bands in a rebar control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (UINT)SendMessage(RB_GETROWCOUNT, 0L, 0L);\n\t}\n\n\tinline int CReBar::GetRowHeight(int nRow) const\n\t// Retrieves the height of a specified row in a rebar control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(RB_GETROWHEIGHT, nRow, 0L);\n\t}\n\n\tinline UINT CReBar::GetSizeofRBBI() const\n\t// The size of the REBARBANDINFO struct changes according to _WIN32_WINNT\n\t// sizeof(REBARBANDINFO) can report an incorrect size for older Window versions,\n\t// or newer Window version without XP themes enabled.\n\t// Use this function to get a safe size for REBARBANDINFO.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tUINT uSizeof = sizeof(REBARBANDINFO);\n\n\t#if defined REBARBANDINFO_V6_SIZE\t// only defined for VS2008 or higher\n\t  #if !defined (_WIN32_WINNT) || _WIN32_WINNT >= 0x0600\n\t\tif ((GetWinVersion() < 2600) || (GetComCtlVersion() < 610)) // Vista and Vista themes?\n\t\t\tuSizeof = REBARBANDINFO_V6_SIZE;\n\t  #endif\n\t#endif\n\n\t\treturn uSizeof;\n\t}\n\n\tinline HWND CReBar::GetToolTips() const\n\t// Retrieves the handle to any ToolTip control associated with the rebar control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HWND)SendMessage(RB_GETTOOLTIPS, 0L, 0L);\n\t}\n\n\tinline int CReBar::HitTest(RBHITTESTINFO& rbht)\n\t// Determines which portion of a rebar band is at a given point on the screen,\n\t//  if a rebar band exists at that point.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(RB_HITTEST, 0L, (LPARAM)&rbht);\n\t}\n\n\tinline HWND CReBar::HitTest(POINT pt)\n\t// Return the child HWND at the given point\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\t// Convert the point to client co-ordinates\n\t\tScreenToClient(pt);\n\n\t\t// Get the rebar band with the point\n\t\tRBHITTESTINFO rbhti = {0};\n\t\trbhti.pt = pt;\n\t\tint iBand = HitTest(rbhti);\n\n\t\tif (iBand >= 0)\n\t\t{\n\t\t\t// Get the rebar band's hWnd\n\t\t\tREBARBANDINFO rbbi = {0};\n\t\t\trbbi.cbSize = GetSizeofRBBI();\n\t\t\trbbi.fMask = RBBIM_CHILD;\n\t\t\tGetBandInfo(iBand, rbbi);\n\n\t\t\treturn rbbi.hwndChild;\n\t\t}\n\t\telse\n\t\t\treturn NULL;\n\t}\n\n\tinline int CReBar::IDToIndex(UINT uBandID) const\n\t// Converts a band identifier to a band index in a rebar control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(RB_IDTOINDEX, (WPARAM)uBandID, 0L);\n\t}\n\n\tinline BOOL CReBar::InsertBand(int nBand, REBARBANDINFO& rbbi) const\n\t// Inserts a new band in a rebar control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\trbbi.cbSize = GetSizeofRBBI();\n\t\treturn (BOOL)SendMessage(RB_INSERTBAND, nBand, (LPARAM)&rbbi);\n\t}\n\n\tinline BOOL CReBar::IsBandVisible(int nBand) const\n\t// Returns true if the band is visible\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tREBARBANDINFO rbbi = {0};\n\t\trbbi.cbSize = GetSizeofRBBI();\n\t\trbbi.fMask = RBBIM_STYLE;\n\t\tGetBandInfo(nBand, rbbi);\n\n\t\treturn !(rbbi.fStyle & RBBS_HIDDEN);\n\t}\n\n\tinline BOOL CReBar::OnEraseBkgnd(CDC* pDC)\n\t{\n\t\tBOOL Erase = TRUE;\n\t\tif (!m_Theme.UseThemes)\n\t\t\tErase = FALSE;\n\n\t\tif (!m_Theme.clrBkgnd1 && !m_Theme.clrBkgnd2 && !m_Theme.clrBand1 && !m_Theme.clrBand2)\n\t\t\tErase = FALSE;\n\n\t\tif (Erase)\n\t\t{\n\t\t\tCRect rcReBar = GetClientRect();\n\t\t\tint BarWidth = rcReBar.Width();\n\t\t\tint BarHeight = rcReBar.Height();\n\n\t\t\t// Create and set up our memory DC\n\t\t\tCMemDC MemDC(pDC);\n\t\t\tMemDC.CreateCompatibleBitmap(pDC, BarWidth, BarHeight);\n\n\t\t\t// Draw to ReBar background to the memory DC\n\t\t\trcReBar.right = 600;\n\t\t\tMemDC.GradientFill(m_Theme.clrBkgnd1, m_Theme.clrBkgnd2, rcReBar, TRUE);\n\t\t\tif (BarWidth >= 600)\n\t\t\t{\n\t\t\t\trcReBar.left = 600;\n\t\t\t\trcReBar.right = BarWidth;\n\t\t\t\tMemDC.SolidFill(m_Theme.clrBkgnd2, rcReBar);\n\t\t\t}\n\n\t\t\tif (m_Theme.clrBand1 || m_Theme.clrBand2)\n\t\t\t{\n\t\t\t\t// Draw the individual band backgrounds\n\t\t\t\tfor (int nBand = 0 ; nBand < GetBandCount(); ++nBand)\n\t\t\t\t{\n\t\t\t\t\tif (IsBandVisible(nBand))\n\t\t\t\t\t{\n\t\t\t\t\t\tif (nBand != GetBand(m_hMenuBar))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Determine the size of this band\n\t\t\t\t\t\t\tCRect rcBand = GetBandRect(nBand);\n\n\t\t\t\t\t\t\t// Determine the size of the child window\n\t\t\t\t\t\t\tREBARBANDINFO rbbi = {0};\n\t\t\t\t\t\t\trbbi.cbSize = GetSizeofRBBI();\n\t\t\t\t\t\t\trbbi.fMask = RBBIM_CHILD ;\n\t\t\t\t\t\t\tGetBandInfo(nBand, rbbi);\n\t\t\t\t\t\t\tCRect rcChild;\n\t\t\t\t\t\t\t::GetWindowRect(rbbi.hwndChild, &rcChild);\n\t\t\t\t\t\t\tint ChildWidth = rcChild.right - rcChild.left;\n\n\t\t\t\t\t\t\t// Determine our drawing rectangle\n\t\t\t\t\t\t\tCRect rcDraw = rcBand;\n\t\t\t\t\t\t\trcDraw.bottom = rcDraw.top + (rcBand.bottom - rcBand.top)/2;\n\t\t\t\t\t\t\tint xPad = IsXPThemed()? 2: 0;\n\t\t\t\t\t\t\trcDraw.left -= xPad;\n\n\t\t\t\t\t\t\t// Fill the Source CDC with the band's background\n\t\t\t\t\t\t\tCMemDC SourceDC(pDC);\n\t\t\t\t\t\t\tSourceDC.CreateCompatibleBitmap(pDC, BarWidth, BarHeight);\n\t\t\t\t\t\t\tCRect rcBorder = GetBandBorders(nBand);\n\t\t\t\t\t\t\trcDraw.right = rcBand.left + ChildWidth + rcBorder.left;\n\t\t\t\t\t\t\tSourceDC.SolidFill(m_Theme.clrBand1, rcDraw);\n\t\t\t\t\t\t\trcDraw.top = rcDraw.bottom;\n\t\t\t\t\t\t\trcDraw.bottom = rcBand.bottom;\n\t\t\t\t\t\t\tSourceDC.GradientFill(m_Theme.clrBand1, m_Theme.clrBand2, rcDraw, FALSE);\n\n\t\t\t\t\t\t\t// Set Curve amount for rounded edges\n\t\t\t\t\t\t\tint Curve = m_Theme.RoundBorders? 12 : 0;\n\n\t\t\t\t\t\t\t// Create our mask for rounded edges using RoundRect\n\t\t\t\t\t\t\tCMemDC MaskDC(pDC);\n\t\t\t\t\t\t\tMaskDC.CreateCompatibleBitmap(pDC, BarWidth, BarHeight);\n\n\t\t\t\t\t\t\trcDraw.top = rcBand.top;\n\t\t\t\t\t\t\tif (!m_Theme.FlatStyle)\n\t\t\t\t\t\t\t\t::InflateRect(&rcDraw, 1, 1);\n\n\t\t\t\t\t\t\tint left = rcDraw.left;\n\t\t\t\t\t\t\tint right = rcDraw.right;\n\t\t\t\t\t\t\tint top = rcDraw.top;\n\t\t\t\t\t\t\tint bottom = rcDraw.bottom;\n\t\t\t\t\t\t\tint cx = rcDraw.right - rcBand.left + xPad;\n\t\t\t\t\t\t\tint cy = rcDraw.bottom - rcBand.top;\n\n\t\t\t\t\t\t\tif (m_Theme.FlatStyle)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tMaskDC.SolidFill(RGB(0,0,0), rcDraw);\n\t\t\t\t\t\t\t\tMaskDC.BitBlt(left, top, cx, cy, &MaskDC, left, top, PATINVERT);\n\t\t\t\t\t\t\t\tMaskDC.RoundRect(left, top, right, bottom, Curve, Curve);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tMaskDC.SolidFill(RGB(0,0,0), rcDraw);\n\t\t\t\t\t\t\t\tMaskDC.RoundRect(left, top, right, bottom, Curve, Curve);\n\t\t\t\t\t\t\t\tMaskDC.BitBlt(left, top, cx, cy, &MaskDC, left, top, PATINVERT);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Copy Source DC to Memory DC using the RoundRect mask\n\t\t\t\t\t\t\tMemDC.BitBlt(left, top, cx, cy, &SourceDC, left, top, SRCINVERT);\n\t\t\t\t\t\t\tMemDC.BitBlt(left, top, cx, cy, &MaskDC,   left, top, SRCAND);\n\t\t\t\t\t\t\tMemDC.BitBlt(left, top, cx, cy, &SourceDC, left, top, SRCINVERT);\n\n\t\t\t\t\t\t\t// Extra drawing to prevent jagged edge while moving bands\n\t\t\t\t\t\t\tif (m_bIsDragging)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tCClientDC ReBarDC(this);\n\t\t\t\t\t\t\t\tReBarDC.BitBlt(rcDraw.right - ChildWidth, rcDraw.top, ChildWidth, cy, &MemDC, rcDraw.right - ChildWidth, rcDraw.top, SRCCOPY);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (m_Theme.UseLines)\n\t\t\t{\n\t\t\t\t// Draw lines between bands\n\t\t\t\tfor (int j = 0; j < GetBandCount()-1; ++j)\n\t\t\t\t{\n\t\t\t\t\trcReBar = GetBandRect(j);\n\t\t\t\t\trcReBar.left = MAX(0, rcReBar.left - 4);\n\t\t\t\t\trcReBar.bottom +=2;\n\t\t\t\t\tMemDC.DrawEdge(rcReBar, EDGE_ETCHED, BF_BOTTOM | BF_ADJUST);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the Memory DC to the window's DC\n\t\t\tpDC->BitBlt(0, 0, BarWidth, BarHeight, &MemDC, 0, 0, SRCCOPY);\n\t\t}\n\t\t\n\t\treturn Erase;\n\t}\n\n\tinline void CReBar::PreCreate(CREATESTRUCT &cs)\n\t// Sets the CREATESTRUCT paramaters prior to window creation\n\t{\n\t\tcs.style = WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS |\n                         CCS_NODIVIDER | RBS_VARHEIGHT | RBS_BANDBORDERS ;\n\n\t\tcs.cy = 100;\n\t}\n\n\tinline void CReBar::PreRegisterClass(WNDCLASS &wc)\n\t{\n\t\t// Set the Window Class\n\t\twc.lpszClassName =  REBARCLASSNAME;\n\t}\n\n\tinline void CReBar::MaximizeBand(UINT uBand, BOOL fIdeal /*= FALSE*/)\n\t// Resizes a band in a rebar control to either its ideal or largest size.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(RB_MAXIMIZEBAND, (WPARAM)uBand, (LPARAM)fIdeal);\n\t}\n\n\tinline void CReBar::MinimizeBand(UINT uBand)\n\t// Resizes a band in a rebar control to its smallest size.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(RB_MINIMIZEBAND, (WPARAM)uBand, 0L);\n\t}\n\n\tinline BOOL CReBar::MoveBand(UINT uFrom, UINT uTo)\n\t// Moves a band from one index to another.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(RB_MOVEBAND, (WPARAM)uFrom, (LPARAM)uTo);\n\t}\n\n\tinline void CReBar::MoveBandsLeft()\n\t// Repositions the bands so they are left justified\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tint OldrcTop = -1;\n\t\tfor (int nBand = GetBandCount() -1; nBand >= 0; --nBand)\n\t\t{\n\t\t\tCRect rc = GetBandRect(nBand);\n\t\t\tif (rc.top != OldrcTop)\n\t\t\t{\n\t\t\t\t// Maximize the last band on each row\n\t\t\t\tif (IsBandVisible(nBand))\n\t\t\t\t{\n\t\t\t\t\t::SendMessage(GetHwnd(), RB_MAXIMIZEBAND, nBand, 0L);\n\t\t\t\t\tOldrcTop = rc.top;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tinline BOOL CReBar::ResizeBand(int nBand, const CSize& sz) const\n\t// Sets a band's size\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tREBARBANDINFO rbbi = {0};\n\t\trbbi.cbSize = GetSizeofRBBI();\n\t\trbbi.fMask = RBBIM_CHILDSIZE | RBBIM_SIZE;\n\n\t\tGetBandInfo(nBand, rbbi);\n\t\trbbi.cx         = sz.cx + 2;\n\t\trbbi.cxMinChild = sz.cx + 2;\n\t\trbbi.cyMinChild = sz.cy;\n\t\trbbi.cyMaxChild = sz.cy;\n\n\t\treturn SetBandInfo(nBand, rbbi );\n\t}\n\n\tinline BOOL CReBar::SetBandBitmap(int nBand, const CBitmap* pBackground) const\n\t// Sets the band's bitmaps\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tassert(pBackground);\n\n\t\tREBARBANDINFO rbbi = {0};\n\t\trbbi.cbSize = GetSizeofRBBI();\n\t\trbbi.fMask  = RBBIM_STYLE;\n\t\tGetBandInfo(nBand, rbbi);\n\t\trbbi.fMask  |= RBBIM_BACKGROUND;\n\t\trbbi.hbmBack = *pBackground;\n\n\t\treturn (BOOL)SendMessage(RB_SETBANDINFO, nBand, (LPARAM)&rbbi);\n\t}\n\n\tinline BOOL CReBar::SetBandColor(int nBand, COLORREF clrFore, COLORREF clrBack) const\n\t// Sets the band's color\n\t// Note:\tNo effect with XP themes enabled\n\t//\t\t\tNo effect if a bitmap has been set\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tREBARBANDINFO rbbi = {0};\n\t\trbbi.cbSize = GetSizeofRBBI();\n\t\trbbi.fMask = RBBIM_COLORS;\n\t\trbbi.clrFore = clrFore;\n\t\trbbi.clrBack = clrBack;\n\n\t\treturn (BOOL)SendMessage(RB_SETBANDINFO, nBand, (LPARAM)&rbbi);\n\t}\n\n\tinline BOOL CReBar::SetBandInfo(int nBand, REBARBANDINFO& rbbi) const\n\t// Sets the characteristics of a rebar control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tassert(nBand >= 0);\n\n\t\t// REBARBANDINFO describes individual BAND characteristics0\n\t\trbbi.cbSize = GetSizeofRBBI();\n\t\treturn (BOOL)SendMessage(RB_SETBANDINFO, nBand, (LPARAM)&rbbi);\n\t}\n\n\tinline BOOL CReBar::SetBarInfo(REBARINFO& rbi) const\n\t// REBARINFO associates an image list with the rebar\n\t// A band will also need to set RBBIM_IMAGE\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\trbi.cbSize = GetSizeofRBBI();\n\t\treturn (BOOL)SendMessage(RB_SETBARINFO, 0L, (LPARAM)&rbi);\n\t}\n\n\tinline void CReBar::SetReBarTheme(ReBarTheme& Theme)\n\t{\n\t\tm_Theme.UseThemes    = Theme.UseThemes;\n\t\tm_Theme.clrBkgnd1    = Theme.clrBkgnd1;\n\t\tm_Theme.clrBkgnd2    = Theme.clrBkgnd2;\n\t\tm_Theme.clrBand1     = Theme.clrBand1;\n\t\tm_Theme.clrBand2     = Theme.clrBand2;\n\t\tm_Theme.BandsLeft    = Theme.BandsLeft;\n\t\tm_Theme.LockMenuBand = Theme.LockMenuBand;\n\t\tm_Theme.ShortBands   = Theme.ShortBands;\n\t\tm_Theme.UseLines     = Theme.UseLines;\n\t\tm_Theme.FlatStyle    = Theme.FlatStyle;\n\t\tm_Theme.RoundBorders = Theme.RoundBorders;\n\n\t\tif (IsWindow())\n\t\t{\n\t\t\tif (m_Theme.LockMenuBand)\n\t\t\t\tShowGripper(GetBand(m_hMenuBar), FALSE);\n\t\t\telse\n\t\t\t\tShowGripper(GetBand(m_hMenuBar), TRUE);\n\t\t\n\t\t\tInvalidate();\n\t\t}\n\t}\n\n\tinline BOOL CReBar::ShowBand(int nBand, BOOL fShow) const\n\t// Show or hide a band\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(RB_SHOWBAND, (WPARAM)nBand, (LPARAM)fShow);\n\t}\n\n\tinline BOOL CReBar::ShowGripper(int nBand, BOOL fShow) const\n\t// Show or hide the band's gripper\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tREBARBANDINFO rbbi = {0};\n\t\trbbi.cbSize = GetSizeofRBBI();\n\t\trbbi.fMask = RBBIM_STYLE;\n\t\tGetBandInfo(nBand, rbbi);\n\t\tif (fShow)\n\t\t{\n\t\t\trbbi.fStyle |= RBBS_GRIPPERALWAYS;\n\t\t\trbbi.fStyle &= ~RBBS_NOGRIPPER;\n\t\t}\n\t\telse\n\t\t{\n\t\t\trbbi.fStyle &= ~RBBS_GRIPPERALWAYS;\n\t\t\trbbi.fStyle |= RBBS_NOGRIPPER;\n\t\t}\n\n\t\treturn SetBandInfo(nBand, rbbi);\n\t}\n\n\tinline BOOL CReBar::SizeToRect(CRect& rect) const\n\t// Attempts to find the best layout of the bands for the given rectangle.\n\t// The rebar bands will be arranged and wrapped as necessary to fit the rectangle.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(RB_SIZETORECT, 0, (LPARAM) (LPRECT)rect);\n\t}\n\n\tinline LRESULT CReBar::WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\tswitch (uMsg)\n\t\t{\n\t\tcase WM_MOUSEMOVE:\n\t\t\tif (m_Theme.UseThemes && m_Theme.LockMenuBand)\n\t\t\t{\n\t\t\t\t// We want to lock the first row in place, but allow other bands to move!\n\t\t\t\t// Use move messages to limit the resizing of bands\n\t\t\t\tint y = GET_Y_LPARAM(lParam);\n\n\t\t\t\tif (y <= GetRowHeight(0))\n\t\t\t\t\treturn 0L;\t// throw this message away\n\t\t\t}\n\t\t\tbreak;\n\t\tcase WM_LBUTTONDOWN:\n\t\t\tm_Orig_lParam = lParam;\t// Store the x,y position\n\t\t\tm_bIsDragging = TRUE;\n\t\t\tbreak;\n\t\tcase WM_LBUTTONUP:\n\t\t\tif (m_Theme.UseThemes && m_Theme.LockMenuBand)\n\t\t\t{\n\t\t\t\t// Use move messages to limit the resizing of bands\n\t\t\t\tint y = GET_Y_LPARAM(lParam);\n\n\t\t\t\tif (y <= GetRowHeight(0))\n\t\t\t\t{\n\t\t\t\t\t// Use x,y from WM_LBUTTONDOWN for WM_LBUTTONUP position\n\t\t\t\t\tlParam = m_Orig_lParam;\n\t\t\t\t}\n\t\t\t}\n\t\t\tm_bIsDragging = FALSE;\n\t\t\tbreak;\n\t\tcase UWM_GETREBARTHEME:\n\t\t\t{\n\t\t\t\tReBarTheme& rm = GetReBarTheme();\n\t\t\t\treturn (LRESULT)&rm;\n\t\t\t}\n\t\tcase UWM_TOOLBAR_RESIZE:\n\t\t\t{\n\t\t\t\tHWND hToolBar = (HWND)wParam;\n\t\t\t\tLPSIZE pToolBarSize = (LPSIZE)lParam;\n\t\t\t\tResizeBand(GetBand(hToolBar), *pToolBarSize);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\t// pass unhandled messages on for default processing\n\t\treturn CWnd::WndProcDefault(uMsg, wParam, lParam);\n\t}\n\n} // namespace Win32xx\n\n#endif // #ifndef _WIN32XX_REBAR_H_\n"
  },
  {
    "path": "external/win32cpp/include/release notes.txt",
    "content": "About Win32++\n-------------\nWin32++ is simple and easy to understand framework for developing Win32 \napplications using C++. It brings an object oriented approach to programming \ndirectly with the Win32 API. Each window created is a C++ class object capable \nof having its own window procedure for routing messages.\n\nWin32++ supports the following compilers and development environments:\n* Borland C++ Compiler 5.5\n* Borland Developer Studio 2006\n* Dev-C++\n* Microsoft Visual C++ Toolkit 2003\n* Microsoft Visual C++ 2005 Express Edition\n* Microsoft Visual C++ 2008 Express Edition\n* Microsoft Visual C++ 2010 Express Edition\n* Microsoft Visual Studio 6.0\n* Microsoft Visual Studio.net 2003\n* Microsoft Visual Studio.net 2005\n* Microsoft Visual Studio.net 2008\n* Microsoft Visual Studio.net 2010\n* MinGW compiler\n\nWin32++ supports the following operating systems\n* Windows 95\n* Windows 98\n* Windows ME\n* Windows NT 4\n* Windows 2000\n* Windows XP \t(32bit and 64bit)\n* Windows 2003 Server (32bit and 64bit)\n* Windows Vista\t(32bit and 64bit)\n* Windows 2008 Server (32bit and 64bit)\n* Windows 7 (32 bit and 64 bit)\n* Windows CE from WCE400 (Windows mobile 2003) to WCE600 (Windows mobile 6)\n\n\nFeatures\n--------\nWin32++ code has the following features\n * Object Orientated\n * Subclassing support\n * Notification reflection and message reflection\n * Unicode compliant, with multilingual support\n * Multi-threaded support.\n * Tracing\n * 64 bit support\n * Windows 7 ribbon support\n * Themes support\n * Network support (including IP version 6)\n * Docking windows\n * Tabbed MDIs  \n\nFrames produced by Win32++ include the following:\n * Rebar\n * Menubar\n * Toolbar\n * Status bar\n * Tool tips\n\nAbout the file downloads\n------------------------\nThe file download from Sourceforge includes the following:\n * The Win32++ library itself\n * Help for the library\n * A set of tutorials\n * A collection of sample applications\n\nThe sample applications include:\n * Browser - An Internet browser application with an event sink.\n * Dialog - An example of a simple dialog application.\n * DialogDemo - An interative dialog application demonstrating slider controls and progress bars.\n * DialogResizing - An example of a resizable dialog.\n * DialogTab - A dialog application with a tab control.\n * DirectX - A simple DirectX application.\n * DLL - Shows how to run Win32++ from within a DLL\n * Dock - An example of a simple docking application.\n * DockContainer - An example of a docking application which incorporates containers.\n * DockTabbedMDI - An example of a docking application with containers and a tabbed MDI.\n * Explorer - A Windows Explorer-like application.\n * FastGDI - An application which demonstrates direct manipulation of a bitmap's colour.\n * FormDemo - An example of a modeless dialog within a frame.\n * Frame - A simple frame application.\n * GDIPlus - Demonstrates how to use GDI+ with Win32++.\n * MDIFrame - A simple MDI frame application.\n * MDIFrameDemo - Demonstrates some additional features of MDI frames.\n * MDIFrameSplitter - Demonstrates how to implement splitter windows in MDI Child windows. \n * Networking - Demonstrates the use of networking.\n * Notepad - A simple text editor with printing.\n * Performance - Measures Win32++'s message handling speed.\n * Picture - A simple picture rendering application.\n * PropertySheets - A demonstration of property sheets.\n * RibbonFrame - Demonstrates how to use the Windows 7 ribbon with a frame.\n * RibbonSimple - Demonstrates how to use the Windwos 7 ribbon with a simple window.\n * Scribble - A simple drawing application.\n * Simple - Creates a simple window.\n * Splitter - Demonstrates how to use dockers to create splitter windows.\n * TabDemo - Demonstrates the use of a CTab control in a frame.\n * TaskDialog - Demonstrates the use of task dialogs (available on Vista and above).\n * Themes - Demonstrates how to customise the colours for rebar and toolbar controls.\n * Threads - Demonstrates multi-threaded Windows.\n * Tray - Demonstrates how to \"minimise\" an application to the system tray.  \n * WinCE samples - A small collection of samples for Windows CE\n\nGetting Started\n---------------\nEach file download includes the project files for Dev-C++, CodeBlocks and the\nvarious compilers from Microsoft. CodeBlocks is an IDE (Integrated Development\nEnvironment) that supports GNU GCC, Borland Developer Studio 2006 and Microsoft\nC++ Toolkit 2003.\n\nYou  can start with one of the sample programs, and add your code. Alternatively\nyou can start with the projects and sample code provided in the \"new projects\" \nfolder. \n\nFor additional information on getting started, refer to the help included\nin the documentation."
  },
  {
    "path": "external/win32cpp/include/ribbon.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n\n///////////////////////////////////////////////////////\n// ribbon.h\n//  Declaration of the following classes:\n//  CRibbon and CRibbonFrame\n//\n\n#ifndef _WIN32XX_RIBBON_H_\n#define _WIN32XX_RIBBON_H_\n\n\n// Notes: 1) The Windows 7 SDK must be installed and its directories added to the IDE\n//        2) The ribbon only works on OS Windows 7 and above\n\n//#include <strsafe.h>\n#include <UIRibbon.h>\t\t\t\t\t// Contained within the Windows 7 SDK\t\n#include <UIRibbonPropertyHelpers.h>\n\nnamespace Win32xx\n{\n\t// Defines the callback entry-point methods for the Ribbon framework.\n\tclass CRibbon : public IUICommandHandler, public IUIApplication\n\t{\n\tpublic:\n\t\tCRibbon() : m_cRef(1), m_pRibbonFramework(NULL) {}\n\t\t~CRibbon(); \n\n\t\t// IUnknown methods.\n\t\tSTDMETHOD_(ULONG, AddRef());\n\t\tSTDMETHOD_(ULONG, Release());\n\t\tSTDMETHOD(QueryInterface(REFIID iid, void** ppv));\n\n\t\t// IUIApplication methods\n\t\tSTDMETHOD(OnCreateUICommand)(UINT nCmdID, __in UI_COMMANDTYPE typeID, \n\t\t\t__deref_out IUICommandHandler** ppCommandHandler);\n\n\t\tSTDMETHOD(OnDestroyUICommand)(UINT32 commandId, __in UI_COMMANDTYPE typeID,\n\t\t\t__in_opt IUICommandHandler* commandHandler);\n\t\t\t\n\t\tSTDMETHOD(OnViewChanged)(UINT viewId, __in UI_VIEWTYPE typeId, __in IUnknown* pView,\n\t\t\tUI_VIEWVERB verb, INT uReasonCode);\t\t\t\n\n\t\t// IUICommandHandle methods\n\t\tSTDMETHODIMP Execute(UINT nCmdID, UI_EXECUTIONVERB verb, __in_opt const PROPERTYKEY* key, __in_opt const PROPVARIANT* ppropvarValue, \n\t\t\t\t\t\t\t\t\t\t  __in_opt IUISimplePropertySet* pCommandExecutionProperties);\n\n\t\tSTDMETHODIMP UpdateProperty(UINT nCmdID, __in REFPROPERTYKEY key, __in_opt const PROPVARIANT* ppropvarCurrentValue, \n\t\t\t\t\t\t\t\t\t\t\t\t __out PROPVARIANT* ppropvarNewValue);\t\n\t\t\n\t\tbool virtual CreateRibbon(CWnd* pWnd);\n\t\tvoid virtual DestroyRibbon();\n\t\tIUIFramework* GetRibbonFramework() { return m_pRibbonFramework; }\n\n\tprivate:\n\t\tIUIFramework* m_pRibbonFramework;\n\t\tLONG m_cRef;                            // Reference count.\n\n\t};\n\n\n\tclass CRibbonFrame : public CFrame, public CRibbon\n\t{\n\tpublic:\n\t\t// A nested class for the MRU item properties\n\t\tclass CRecentFiles : public IUISimplePropertySet\n\t\t{\n\t\tpublic:\n\t\t\tCRecentFiles(PWSTR wszFullPath);\n\t\t\t~CRecentFiles() {}\t\t\n\n\t\t\t// IUnknown methods.\n\t\t\tSTDMETHODIMP_(ULONG) AddRef();\n\t\t\tSTDMETHODIMP_(ULONG) Release();\n\t\t\tSTDMETHODIMP QueryInterface(REFIID iid, void** ppv);\n\t\t\t\n\t\t\t// IUISimplePropertySet methods \n\t\t\tSTDMETHODIMP GetValue(__in REFPROPERTYKEY key, __out PROPVARIANT *value);\n\n\t\tprivate:\n\t\t\tLONG m_cRef;                        // Reference count.\n\t\t\tWCHAR m_wszDisplayName[MAX_PATH];\n\t\t\tWCHAR m_wszFullPath[MAX_PATH];\n\t\t};\n\n\t\ttypedef Shared_Ptr<CRecentFiles> RecentFilesPtr;\n\n\t\tCRibbonFrame() : m_uRibbonHeight(0) {}\n\t\tvirtual ~CRibbonFrame() {}\n\t\tvirtual CRect GetViewRect() const;\n\t\tvirtual void OnCreate();\n\t\tvirtual void OnDestroy();\n\t\tvirtual STDMETHODIMP OnViewChanged(UINT32 viewId, UI_VIEWTYPE typeId, IUnknown* pView, UI_VIEWVERB verb, INT32 uReasonCode);\n\t\tvirtual HRESULT PopulateRibbonRecentItems(__deref_out PROPVARIANT* pvarValue);\n\t\tvirtual void UpdateMRUMenu();\n\t\t\n\t\tUINT GetRibbonHeight() const { return m_uRibbonHeight; }\n\n\tprivate:\n\t\tstd::vector<RecentFilesPtr> m_vRecentFiles;\n\t\tvoid SetRibbonHeight(UINT uRibbonHeight) { m_uRibbonHeight = uRibbonHeight; }\n\t\tUINT m_uRibbonHeight;\n\t};\n\n}\n\n\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n\nnamespace Win32xx\n{\n\t//////////////////////////////////////////////\n\t// Definitions for the CRibbon class\n\t//\n\n\tinline CRibbon::~CRibbon() \n\t{\n\t\t// Reference count must be 1 or we have a leak!\n\t\tassert(m_cRef == 1);\t\t\n\t}\n\n\t// IUnknown method implementations.\n\tinline STDMETHODIMP_(ULONG) CRibbon::AddRef()\n\t{\n\t\treturn InterlockedIncrement(&m_cRef);\n\t}\n\n\tinline STDMETHODIMP_(ULONG) CRibbon::Release()\n\t{\n\t\tLONG cRef = InterlockedDecrement(&m_cRef);\n\t\treturn cRef;\n\t}\n\n\tinline STDMETHODIMP CRibbon::Execute(UINT nCmdID, UI_EXECUTIONVERB verb, __in_opt const PROPERTYKEY* key, __in_opt const PROPVARIANT* ppropvarValue, \n\t\t\t\t\t\t\t\t\t\t  __in_opt IUISimplePropertySet* pCommandExecutionProperties)\n\t{\n\t\tUNREFERENCED_PARAMETER (nCmdID);\n\t\tUNREFERENCED_PARAMETER (verb);\n\t\tUNREFERENCED_PARAMETER (key);\n\t\tUNREFERENCED_PARAMETER (ppropvarValue);\n\t\tUNREFERENCED_PARAMETER (pCommandExecutionProperties);\n\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline STDMETHODIMP CRibbon::QueryInterface(REFIID iid, void** ppv)\n\t{\n\t\tif (iid == __uuidof(IUnknown))\n\t\t{\n\t\t\t*ppv = static_cast<IUnknown*>(static_cast<IUIApplication*>(this));\n\t\t}\n\t\telse if (iid == __uuidof(IUICommandHandler))\n\t\t{\n\t\t\t*ppv = static_cast<IUICommandHandler*>(this);\n\t\t}\n\t\telse if (iid == __uuidof(IUIApplication))\n\t\t{\n\t\t\t*ppv = static_cast<IUIApplication*>(this);\n\t\t}\n\t\telse \n\t\t{\n\t\t\t*ppv = NULL;\n\t\t\treturn E_NOINTERFACE;\n\t\t}\n\n\t\tAddRef();\n\t\treturn S_OK;\n\t}\n\n\t// Called by the Ribbon framework for each command specified in markup, to bind the Command to an IUICommandHandler.\n\tinline STDMETHODIMP CRibbon::OnCreateUICommand(UINT nCmdID, __in UI_COMMANDTYPE typeID, \n\t\t\t\t\t\t\t\t\t\t\t\t __deref_out IUICommandHandler** ppCommandHandler)\n\t{\n\t\tUNREFERENCED_PARAMETER(typeID);\n\t\tUNREFERENCED_PARAMETER(nCmdID);\n\n\t\t// By default we use the single command handler provided as part of CRibbon.\n\t\t// Override this function to account for multiple command handlers.\t\t\n\n\t\treturn QueryInterface(IID_PPV_ARGS(ppCommandHandler));\n\t}\n\n\t// Called when the state of the Ribbon changes, for example, created, destroyed, or resized.\n\tinline STDMETHODIMP CRibbon::OnViewChanged(UINT viewId, __in UI_VIEWTYPE typeId, __in IUnknown* pView, \n\t\t\t\t\t\t\t\t\t\t\t UI_VIEWVERB verb, INT uReasonCode)\n\t{\n\t\tUNREFERENCED_PARAMETER(viewId);\n\t\tUNREFERENCED_PARAMETER(typeId);\n\t\tUNREFERENCED_PARAMETER(pView);\n\t\tUNREFERENCED_PARAMETER(verb);\n\t\tUNREFERENCED_PARAMETER(uReasonCode);\n\n\n\t\treturn E_NOTIMPL;\n\t}\n\n\t// Called by the Ribbon framework for each command at the time of ribbon destruction.\n\tinline STDMETHODIMP CRibbon::OnDestroyUICommand(UINT32 nCmdID, __in UI_COMMANDTYPE typeID,\n\t\t\t\t\t\t\t\t\t\t\t\t  __in_opt IUICommandHandler* commandHandler)\n\t{\n\t\tUNREFERENCED_PARAMETER(commandHandler);\n\t\tUNREFERENCED_PARAMETER(typeID);\n\t\tUNREFERENCED_PARAMETER(nCmdID);\n\n\t\treturn E_NOTIMPL;\n\t}\n\n\t// Called by the Ribbon framework when a command property (PKEY) needs to be updated.\n\tinline STDMETHODIMP CRibbon::UpdateProperty(UINT nCmdID, __in REFPROPERTYKEY key, __in_opt const PROPVARIANT* ppropvarCurrentValue, \n\t\t\t\t\t\t\t\t\t\t\t\t __out PROPVARIANT* ppropvarNewValue)\n\t{\n\t\tUNREFERENCED_PARAMETER(nCmdID);\n\t\tUNREFERENCED_PARAMETER(key);\n\t\tUNREFERENCED_PARAMETER(ppropvarCurrentValue);\n\t\tUNREFERENCED_PARAMETER(ppropvarNewValue);\n\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline bool CRibbon::CreateRibbon(CWnd* pWnd)\n\t{\t\n\t\t::CoInitialize(NULL);\n\n\t\t// Instantiate the Ribbon framework object.\n\t\t::CoCreateInstance(CLSID_UIRibbonFramework, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&m_pRibbonFramework));\n\n\t\t// Connect the host application to the Ribbon framework.\n\t\tHRESULT hr = m_pRibbonFramework->Initialize(pWnd->GetHwnd(), this);\n\t\tif (FAILED(hr))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\t// Load the binary markup. APPLICATION_RIBBON is the default name generated by uicc.\n\t\thr = m_pRibbonFramework->LoadUI(GetModuleHandle(NULL), L\"APPLICATION_RIBBON\");\n\t\tif (FAILED(hr))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tinline void CRibbon::DestroyRibbon()\n\t{\n\t\tif (m_pRibbonFramework)\n\t\t{\n\t\t\tm_pRibbonFramework->Destroy();\n\t\t\tm_pRibbonFramework->Release();\n\t\t\tm_pRibbonFramework = NULL;\n\t\t}\n\t}\n\t\n\t\n\t//////////////////////////////////////////////\n\t// Definitions for the CRibbonFrame class\n\t//\n\n\tinline CRect CRibbonFrame::GetViewRect() const\n\t{\n\t\t// Get the frame's client area\n\t\tCRect rcFrame = GetClientRect();\n\n\t\t// Get the statusbar's window area\n\t\tCRect rcStatus;\n\t\tif (GetStatusBar().IsWindowVisible() || !IsWindowVisible())\n\t\t\trcStatus = GetStatusBar().GetWindowRect();\n\n\t\t// Get the top rebar or toolbar's window area\n\t\tCRect rcTop;\n\t\tif (IsReBarSupported() && m_bUseReBar)\n\t\t\trcTop = GetReBar().GetWindowRect();\n\t\telse\n\t\t\tif (m_bUseToolBar && GetToolBar().IsWindowVisible())\n\t\t\t\trcTop = GetToolBar().GetWindowRect();\n\n\t\t// Return client size less the rebar and status windows\n\t\tint top = rcFrame.top + rcTop.Height() + m_uRibbonHeight;\n\t\tint left = rcFrame.left;\n\t\tint right = rcFrame.right;\n\t\tint bottom = rcFrame.Height() - (rcStatus.Height());\n\t\tif ((bottom <= top) ||( right <= left))\n\t\t\ttop = left = right = bottom = 0;\n\n\t\tCRect rcView(left, top, right, bottom);\n\t\treturn rcView;\n\t}\n\n\tinline void CRibbonFrame::OnCreate()\n\t{\n\t\t// OnCreate is called automatically during window creation when a\n\t\t// WM_CREATE message received.\n\n\t\t// Tasks such as setting the icon, creating child windows, or anything\n\t\t// associated with creating windows are normally performed here.\n\n\t\tif (GetWinVersion() >= 2601)\t// WinVersion >= Windows 7\n\t\t{\t\t\n\t\t\tm_bUseReBar = FALSE;\t\t\t// Don't use rebars\n\t\t\tm_bUseToolBar = FALSE;\t\t\t// Don't use a toolbar\n\t\t\t\n\t\t\tCFrame::OnCreate();\n\n\t\t\tif (CreateRibbon(this))\n\t\t\t\tTRACE(_T(\"Ribbon Created Succesfully\\n\"));\n\t\t\telse\n\t\t\t\tthrow CWinException(_T(\"Failed to create ribbon\"));\n\t\t}\n\t\telse \n\t\t{\n\t\t\tCFrame::OnCreate();\n\t\t}\n\t}\n\n\tinline void CRibbonFrame::OnDestroy()\n\t{\n\t\tDestroyRibbon();\n\t\tCFrame::OnDestroy();\n\t}\n\n\tinline STDMETHODIMP CRibbonFrame::OnViewChanged(UINT32 viewId, UI_VIEWTYPE typeId, IUnknown* pView, UI_VIEWVERB verb, INT32 uReasonCode)\n\t{\n\t\tUNREFERENCED_PARAMETER(viewId);\n\t\tUNREFERENCED_PARAMETER(uReasonCode);\n\n\t\tHRESULT hr = E_NOTIMPL;\n\n\t\t// Checks to see if the view that was changed was a Ribbon view.\n\t\tif (UI_VIEWTYPE_RIBBON == typeId)\n\t\t{\n\t\t\tswitch (verb)\n\t\t\t{           \n\t\t\t\t// The view was newly created.\n\t\t\tcase UI_VIEWVERB_CREATE:\n\t\t\t\thr = S_OK;\n\t\t\t\tbreak;\n\n\t\t\t\t// The view has been resized.  For the Ribbon view, the application should\n\t\t\t\t// call GetHeight to determine the height of the ribbon.\n\t\t\tcase UI_VIEWVERB_SIZE:\n\t\t\t\t{\n\t\t\t\t\tIUIRibbon* pRibbon = NULL;\n\t\t\t\t\tUINT uRibbonHeight;\n\n\t\t\t\t\thr = pView->QueryInterface(IID_PPV_ARGS(&pRibbon));\n\t\t\t\t\tif (SUCCEEDED(hr))\n\t\t\t\t\t{\n\t\t\t\t\t\t// Call to the framework to determine the desired height of the Ribbon.\n\t\t\t\t\t\thr = pRibbon->GetHeight(&uRibbonHeight);\n\t\t\t\t\t\tSetRibbonHeight(uRibbonHeight);\n\t\t\t\t\t\tpRibbon->Release();\n\n\t\t\t\t\t\tRecalcLayout();\n\t\t\t\t\t\t// Use the ribbon height to position controls in the client area of the window.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\t// The view was destroyed.\n\t\t\tcase UI_VIEWVERB_DESTROY:\n\t\t\t\thr = S_OK;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}  \n\n\t\treturn hr; \n\t}\n\n\tinline HRESULT CRibbonFrame::PopulateRibbonRecentItems(__deref_out PROPVARIANT* pvarValue)\n\t{\n\t\tLONG iCurrentFile = 0;\n\t\tstd::vector<tString> FileNames = GetMRUEntries();\n\t\tstd::vector<tString>::iterator iter;\n\t\tint iFileCount = FileNames.size();\n\t\tHRESULT hr = E_FAIL;\n\t\tSAFEARRAY* psa = SafeArrayCreateVector(VT_UNKNOWN, 0, iFileCount);\n\t\tm_vRecentFiles.clear();\n\t\t\n\t\tif (psa != NULL)\n\t\t{\n\t\t\tfor (iter = FileNames.begin(); iter < FileNames.end(); ++iter)\n\t\t\t{\n\t\t\t\ttString strCurrentFile = (*iter);\n\t\t\t\tWCHAR wszCurrentFile[MAX_PATH] = {0L};\n\t\t\t\tlstrcpynW(wszCurrentFile, T2W(strCurrentFile.c_str()), MAX_PATH);\n\t\t\t\t\n\t\t\t\tCRecentFiles* pRecentFiles = new CRecentFiles(wszCurrentFile);\n\t\t\t\tm_vRecentFiles.push_back(RecentFilesPtr(pRecentFiles));\n\t\t\t\thr = SafeArrayPutElement(psa, &iCurrentFile, static_cast<void*>(pRecentFiles));\n\t\t\t\t++iCurrentFile;\n\t\t\t}\n\n\t\t\tSAFEARRAYBOUND sab = {iCurrentFile,0};\n\t\t\tSafeArrayRedim(psa, &sab);\n\t\t\thr = UIInitPropertyFromIUnknownArray(UI_PKEY_RecentItems, psa, pvarValue);\n\n\t\t\tSafeArrayDestroy(psa);\t// Calls release for each element in the array\n\t\t}\n\n\t\treturn hr;\n\t}\n\n\tinline void CRibbonFrame::UpdateMRUMenu()\n\t{\n\t\t// Suppress UpdateMRUMenu when ribbon is used\n\t\tif (0 != GetRibbonFramework()) return;\n\n\t\tCFrame::UpdateMRUMenu();\n\t}\n\n\n\t////////////////////////////////////////////////////////\n\t// Declaration of the nested CRecentFiles class\n\t//\n\tinline CRibbonFrame::CRecentFiles::CRecentFiles(PWSTR wszFullPath) : m_cRef(1)\n\t{\n\t\tSHFILEINFOW sfi;\n\t\tDWORD_PTR dwPtr = NULL;\n\t\tm_wszFullPath[0] = L'\\0';\n\t\tm_wszDisplayName[0] = L'\\0';\n\n\t\tif (NULL != lstrcpynW(m_wszFullPath, wszFullPath, MAX_PATH))\n\t\t{    \n\t\t\tdwPtr = ::SHGetFileInfoW(wszFullPath, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(sfi), SHGFI_DISPLAYNAME | SHGFI_USEFILEATTRIBUTES);\n\t\t\n\t\t\tif (dwPtr != NULL)\n\t\t\t{\n\t\t\t\tlstrcpynW(m_wszDisplayName, sfi.szDisplayName, MAX_PATH);\n\t\t\t}\n\t\t\telse // Provide a reasonable fallback.\n\t\t\t{\n\t\t\t\tlstrcpynW(m_wszDisplayName, m_wszFullPath, MAX_PATH);\n\t\t\t}\n\t\t}\n\t}\n\n\tinline STDMETHODIMP_(ULONG) CRibbonFrame::CRecentFiles::AddRef()\n\t{\n\t\treturn InterlockedIncrement(&m_cRef);\n\t}\n\n\tinline STDMETHODIMP_(ULONG) CRibbonFrame::CRecentFiles::Release()\n\t{\n\t\treturn InterlockedDecrement(&m_cRef);\n\t}\n\n\tinline STDMETHODIMP CRibbonFrame::CRecentFiles::QueryInterface(REFIID iid, void** ppv)\n\t{\n\t\tif (!ppv)\n\t\t{\n\t\t\treturn E_POINTER;\n\t\t}\n\n\t\tif (iid == __uuidof(IUnknown))\n\t\t{\n\t\t\t*ppv = static_cast<IUnknown*>(this);\n\t\t}\n\t\telse if (iid == __uuidof(IUISimplePropertySet))\n\t\t{\n\t\t\t*ppv = static_cast<IUISimplePropertySet*>(this);\n\t\t}\n\t\telse \n\t\t{\n\t\t\t*ppv = NULL;\n\t\t\treturn E_NOINTERFACE;\n\t\t}\n\n\t\tAddRef();\n\t\treturn S_OK;\n\t}\n\n\t// IUISimplePropertySet methods.\n\tinline STDMETHODIMP CRibbonFrame::CRecentFiles::GetValue(__in REFPROPERTYKEY key, __out PROPVARIANT *ppropvar)\n\t{\n\t\tHRESULT hr = HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED);\n\n\t\tif (key == UI_PKEY_Label)\n\t\t{\n\t\t\thr = UIInitPropertyFromString(key, m_wszDisplayName, ppropvar);\n\t\t}\n\t\telse if (key == UI_PKEY_LabelDescription)\n\t\t{\n\t\t\thr = UIInitPropertyFromString(key, m_wszDisplayName, ppropvar);\n\t\t}\n\n\t\treturn hr;\n\t}\n\n} // namespace Win32xx\n\n#endif  // _WIN32XX_RIBBON_H_\n\n"
  },
  {
    "path": "external/win32cpp/include/shared_ptr.h",
    "content": "// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n// This software was developed from code available in the public domain\n// and has no copyright.\n\n\n// About Shared_Ptr:\n// Shared_Ptr wraps a reference-counted smart pointer around a dynamically\n// allocated object. Unlike auto_ptr, the Shared_Ptr can be used as a smart\n// pointer for objects stored in containers like std::vector. Do not use\n// Shared_Ptr (or shared_ptr or auto_ptr) for dynamically allocated arrays.\n// See below for advice on how to wrap dynamically allocated arrays in a\n// vector.\n//\n// The next standard of C++ will also contain a shared_ptr. Some modern\n// compilers already have a shared_ptr available as std::tr1::shared_ptr. If\n// your compiler already provides a shared_ptr, or if you have Boost, you\n// should use that smart pointer instead. This class has been provided for\n// those users who don't have easy access to an \"official\" shared_ptr.\n// Note that this class is \"Shared_Ptr\", a slightly different name to the\n// future \"shared_ptr\" to avoid naming conflicts.\n\n// Advantages of Shared_Ptr (or shared_ptr where available):\n//  - Shared_Ptr can be safely copied. This makes then suitable for containers.\n//  - Shared_Ptr automatically calls delete for the wrapped pointer when\n//     its last copy goes out of scope.\n//  - Shared_Ptr simplifies exception safety.\n//\n// Without smart pointers, it can be quite challenging to ensure that every\n// dynamically allocated pointer (i.e. use of new) is deleted in the event of\n// all possible exceptions. In addition to the exceptions we throw ourselves,\n// \"new\" itself will throw an exception it it fails, as does the STL (Standard\n// Template Library which includes vector and string). Without smart pointers\n// we often need to resort to additional try/catch blocks simply to avoid\n// memory leaks when exceptions occur.\n\n// Examples:\n//  Shared_Ptr<CWnd> w1(new CWnd);\n//   or\n//  Shared_Ptr<CWnd> w1 = new CWnd;\n//   or\n//  typedef Shared_Ptr<CWnd> CWndPtr;\n//  CWndPtr w1 = new CWnd;\n//   or\n//  typedef Shared_Ptr<CWnd> CWndPtr;\n//  CWndPtr w1(new CWnd);\n//\n//  And with a vector\n//  typedef Shared_Ptr<CWnd> CWndPtr;\n//  std::vector<CWndPtr> MyVector;\n//  MyVector.push_back(new CWnd);\n//   or\n//  typedef Shared_Ptr<CWnd> CWndPtr;\n//  CWnd* pWnd = new CWnd;\n//  std::vector<CWndPtr> MyVector;\n//  MyVector.push_back(pWnd);\n//\n\n// How to handle dynamically allocated arrays:\n// While we could create a smart pointer for arrays, we don't need to because\n// std::vector already handles this for us. Consider the following example:\n//    int nLength = ::GetWindowTextLength(m_hWnd);\n//\t  pTChar = new TCHAR[nLength+1];\n//\t  memset(pTChar, 0, (nLength+1)*sizeof(TCHAR));\n//\t  ::GetWindowText(m_hWnd, m_pTChar, nLength+1);\n//    ....\n//    delete[] pTChar;\n//\n// This can be improved by using a vector instead of an array\n//    int nLength = ::GetWindowTextLength(m_hWnd);\n//    std::vector<TCHAR> vTChar( nLength+1, _T('\\0') );\n//    TCHAR* pTCharArray = &vTChar.front();\n//    ::GetWindowText(m_hWnd, pTCharArray, nLength+1);\n//\n// This works because the memory in a vector is always contiguous. Note that\n// this is NOT always true of std::string.\n\n\n// Summing up:\n// In my opinion, \"naked\" pointers for dynamically created objects should be \n// avoided in modern C++ code. That's to say that calls to \"new\" should be \n// wrapped in some sort of smart pointer wherever possible. This eliminates \n// the possibility of memory leaks (particularly in the event of exceptions). \n// It also elminiates the need for delete in user's code.\n\n#ifndef _WIN32XX_SHARED_PTR_\n#define _WIN32XX_SHARED_PTR_\n\nnamespace Win32xx\n{\n\n\ttemplate <class T1>\n\tclass Shared_Ptr\n\t{\n\tpublic:\n\t\tShared_Ptr() : m_ptr(NULL), m_count(NULL) { }\n\t\tShared_Ptr(T1 * p) : m_ptr(p), m_count(NULL)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tif (m_ptr) m_count = new long(0);\n                inc_ref();\n\t\t\t}\n\t\t\t// catch the unlikely event of 'new long(0)' throwing an exception\n\t\t\tcatch (const std::bad_alloc&)\n\t\t\t{\n\t\t\t\tdelete m_ptr;\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\t\tShared_Ptr(const Shared_Ptr& rhs) : m_ptr(rhs.m_ptr), m_count(rhs.m_count) { inc_ref(); }\n\t\t~Shared_Ptr()\n\t\t{\n\t\t\tif(m_count && 0 == dec_ref())\n\t\t\t{\n\t\t\t\t// Note: This code doesn't handle a pointer to an array.\n\t\t\t\t//  We would need delete[] m_ptr to handle that.\n\t\t\t\tdelete m_ptr;\n\t\t\t\tdelete m_count;\n\t\t\t}\n\t\t}\n\n\t\tT1* get() const { return m_ptr; }\n\t\tlong use_count() const { return m_count? *m_count : 0; }\n\t\tbool unique() const { return (m_count && (*m_count == 1)); }\n\n\t\tvoid swap(Shared_Ptr& rhs)\n\t\t{\n\t\t   std::swap(m_ptr, rhs.m_ptr);\n\t\t   std::swap(m_count, rhs.m_count);\n\t\t}\n\n\t\tShared_Ptr& operator=(const Shared_Ptr& rhs)\n\t\t{\n\t\t\t Shared_Ptr tmp(rhs);\n\t\t\t this->swap(tmp);\n\t\t\t return *this;\n\t\t}\n\n\t\tT1* operator->() const\n\t\t{\n\t\t\tassert(m_ptr);\n\t\t\treturn m_ptr;\n\t\t}\n\n\t\tT1& operator*() const\n\t\t{\n\t\t\tassert (m_ptr);\n\t\t\treturn *m_ptr;\n\t\t}\n\n\t\tbool operator== (const Shared_Ptr& rhs) const\n\t\t{\n\t\t\treturn ( *m_ptr == *rhs.m_ptr);\n\t\t}\n\n\t\tbool operator!= (const Shared_Ptr& rhs) const\n\t\t{\n\t\t\treturn ( *m_ptr != *rhs.m_ptr);\n\t\t}\n\n\t\tbool operator< (const Shared_Ptr& rhs) const\n\t\t{\n\t\t\treturn ( *m_ptr < *rhs.m_ptr );\n\t\t}\n\n\t\tbool operator> (const Shared_Ptr& rhs) const\n\t\t{\n\t\t\treturn ( *m_ptr > *rhs.m_ptr );\n\t\t}\n\n\tprivate:\n\t\tvoid inc_ref()\n\t\t{\n\t\t\tif(m_count)\n\t\t\t\tInterlockedIncrement(m_count);\n\t\t}\n\n\t\tint  dec_ref()\n\t\t{\n\t\t\tassert (m_count);\n\t\t\treturn InterlockedDecrement(m_count);\n\t\t}\n\n\t\tT1* m_ptr;\n\t\tlong* m_count;\n\t};\n\n}\n\n#endif\t// _WIN32XX_SHARED_PTR_\n"
  },
  {
    "path": "external/win32cpp/include/socket.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n\n////////////////////////////////////////////////////////\n// socket.h\n//  Declaration of the CSocket class\n//\n// The CSocket class represents a network socket. It encapsualtes many of\n// the Windows Socket SPI fuctions, providing an object-oriented approach\n// to network programming. After StartEvents is called, CSocket monitors\n// the socket and responds automatically to network events. This event\n// monitoring, for example, automatically calls OnReceive when there is\n// data on the socket to be read, and OnAccept when a server should accept\n// a connection from a client.\n\n// Users of this class should be aware that functions like OnReceive,\n// OnAccept, etc. are called on a different thread from the one CSocket is\n// instanciated on. The thread for these functions needs to respond quickly\n// to other network events, so it shouldn't be delayed. It also doesn't run\n// a message loop, so it can't be used to create windows. For these reasons\n// it might be best to use PostMessage in response to these functions in a\n// windows environment.\n\n// Refer to the network samples for an example of how to use this class to\n// create a TCP client & server, and a UDP client and server.\n\n// To compile programs with CSocket, link with ws3_32.lib for Win32,\n// and ws2.lib for Windows CE. Windows 95 systems will need to install the\n// \"Windows Sockets 2.0 for Windows 95\". It's available from:\n// http://support.microsoft.com/kb/182108/EN-US/\n\n// For a TCP server, inherit a class from CSocket and override OnAccept, OnDisconnect\n// and OnRecieve. Create one instance of this class and use it as a listening socket.\n// The purpose of the listening socket is to detect connections from clients and accept them.\n// For the listening socket, we do the following:\n// 1) Create the socket.\n// 2) Bind an IP address to the socket.\n// 3) Listen on the socket for incoming connection requests.\n// 4) Use StartNotifyRevents to receive notification of network events.\n// 5) Override OnAccept to accept requests on a newly created data CSocket object.\n// 6) Create a new data socket for each client connection accepted.\n// 7) The server socket uses the 'accept' function to accept an incoming connection\n//     from this new data socket.\n\n// The purpose of the data socket is to send data to, and recieve data from the client.\n// There will be one data socket for each client accepted by the server.\n// To use it we do the following:\n// * To recieve data from the client, override OnReceive and use Receive.\n// * To send data to use Send.\n// * OnDisconnect can be used to detect when the client is disconnected.\n\n// For a TCP client, inherit from CSocket and override OnReceive and OnDisconnect.\n// Create an instance of this inherited class, and  perform the following steps:\n// 1) Create the socket.\n// 2) Connect to the server.\n// 3) Use StartNotifyRevents to receive notification of network events.\n//    We are now ready to send and recieve data from the server.\n// * Use Send to send data to the server.\n// * Override OnReceive and use Recieve to receive data from the server\n// * OnDisconnect can be used to detect when the client is disconnected from the server.\n\n// Notes regarding IPv6 support\n// * IPv6 is supported on Windows Vista and above. Windows XP with SP2 provides\n//    \"experimental\" support, which can be enabled by entering \"ipv6 install\"\n//    at a command prompt.\n// * IPv6 is not supported by all compilters and devlopment environments. In\n//    particular, it is not supported by Dev-C++ or Borland 5.5. A modern\n//    Platform SDK needs to be added to Visual Studio 6 for it to support IPv6.\n// * IsIPV6Supported returns false if either the operating system or the\n//    development environment fails to support IPv6.\n//\n\n#ifndef _WIN32XX_SOCKET_H_\n#define _WIN32XX_SOCKET_H_\n\n\n#include \"wincore.h\"\n#include <winsock2.h>\n#include <ws2tcpip.h>\n#include <process.h>\n\n\n#define THREAD_TIMEOUT 100\n\n\nnamespace Win32xx\n{\n\n\ttypedef int  WINAPI GETADDRINFO(LPCSTR, LPCSTR, const struct addrinfo*, struct addrinfo**);\n\ttypedef void WINAPI FREEADDRINFO(struct addrinfo*);\n\n\tclass CSocket\n\t{\n\tpublic:\n\t\tCSocket();\n\t\tvirtual ~CSocket();\n\n\t\t// Operations\n\t\tvirtual void Accept(CSocket& rClientSock, struct sockaddr* addr, int* addrlen);\n\t\tvirtual int  Bind(LPCTSTR addr, LPCTSTR port);\n\t\tvirtual int  Bind(const struct sockaddr* name, int namelen);\n\t\tvirtual int  Connect(LPCTSTR addr, LPCTSTR port);\n\t\tvirtual int  Connect(const struct sockaddr* name, int namelen);\n\t\tvirtual BOOL Create( int family, int type, int protocol = IPPROTO_IP);\n\t\tvirtual void Disconnect();\n\t\tvirtual void FreeAddrInfo( struct addrinfo* ai );\n\t\tvirtual int  GetAddrInfo( LPCTSTR nodename, LPCTSTR servname, const struct addrinfo* hints, struct addrinfo** res);\n\t\tvirtual LPCTSTR GetLastError();\n\t\tvirtual int  ioCtlSocket(long cmd, u_long* argp);\n\t\tvirtual BOOL IsIPV6Supported();\n\t\tvirtual int  Listen(int backlog = SOMAXCONN);\n\t\tvirtual int  Receive(TCHAR* buf, int len, int flags);\n\t\tvirtual int  ReceiveFrom(TCHAR* buf, int len, int flags, struct sockaddr* from, int* fromlen);\n\t\tvirtual int  Send(LPCTSTR buf, int len, int flags);\n\t\tvirtual int  SendTo(LPCTSTR send, int len, int flags, LPCTSTR addr, LPCTSTR port);\n\t\tvirtual int  SendTo(LPCTSTR buf, int len, int flags, const struct sockaddr* to, int tolen);\n\n\t\tvirtual void StartEvents();\n\t\tvirtual void StopEvents();\n\n\t\t// Attributes\n\t\tvirtual int  GetPeerName(struct sockaddr* name, int* namelen);\n\t\tvirtual int  GetSockName(struct sockaddr* name, int* namelen);\n\t\tSOCKET& GetSocket() { return m_Socket; }\n\t\tvirtual int  GetSockOpt(int level, int optname, char* optval, int* optlen);\n\t\tvirtual int  SetSockOpt(int level, int optname, const char* optval, int optlen);\n\n\t\t// Override these functions to monitor events\n\t\tvirtual void OnAccept()\t\t{}\n\t\tvirtual void OnAddresListChange() {}\n\t\tvirtual void OnDisconnect()\t{}\n\t\tvirtual void OnConnect()\t{}\n\t\tvirtual void OnOutOfBand()\t{}\n\t\tvirtual void OnQualityOfService() {}\n\t\tvirtual void OnReceive()\t{}\n\t\tvirtual void OnRoutingChange() {}\n\t\tvirtual void OnSend()\t\t{}\n\n\n\n\t\t// Allow CSocket to be used as a SOCKET\n\t\toperator SOCKET() const {return m_Socket;}\n\n\tprivate:\n\t\tCSocket(const CSocket&);\t\t\t\t// Disable copy construction\n\t\tCSocket& operator = (const CSocket&);\t// Disable assignment operator\n\t\tstatic UINT WINAPI EventThread(LPVOID thread_data);\n\n\t\ttString m_tsErrorMessage;\n\t\tSOCKET m_Socket;\n\t\tHMODULE m_hWS2_32;\n\t\tHANDLE m_hEventThread;\t// Handle to the thread\n\t\tHANDLE m_StopRequest;\t// An event to signal the event thread should stop\n\t\tHANDLE m_Stopped;\t\t// An event to signal the event thread is stopped\n\n\t\tGETADDRINFO* m_pfnGetAddrInfo;\t\t// pointer for the GetAddrInfo function\n\t\tFREEADDRINFO* m_pfnFreeAddrInfo;\t// pointer for the FreeAddrInfo function\n\t};\n}\n\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nnamespace Win32xx\n{\n\n\tinline CSocket::CSocket() : m_Socket(INVALID_SOCKET), m_hEventThread(0)\n\t{\n\t\t// Initialise the Windows Socket services\n\t\tWSADATA wsaData;\n\n\t\tif (0 != ::WSAStartup(MAKEWORD(2,2), &wsaData))\n\t\t\tthrow CWinException(_T(\"WSAStartup failed\"));\n\n\t\tm_hWS2_32 = ::LoadLibrary(_T(\"WS2_32.dll\"));\n\t\tif (0 == m_hWS2_32)\n\t\t\tthrow CWinException(_T(\"Failed to load WS2_2.dll\"));\n\n\t\tm_pfnGetAddrInfo = (GETADDRINFO*) GetProcAddress(m_hWS2_32, \"getaddrinfo\");\n\t\tm_pfnFreeAddrInfo = (FREEADDRINFO*) GetProcAddress(m_hWS2_32, \"freeaddrinfo\");\n\n\t\tm_StopRequest = ::CreateEvent(0, TRUE, FALSE, 0);\n\t\tm_Stopped = ::CreateEvent(0, TRUE, FALSE, 0);\n\t}\n\n\tinline CSocket::~CSocket()\n\t{\n\t\tDisconnect();\n\n\t\t// Close handles\n\t\t::CloseHandle(m_StopRequest);\n\t\t::CloseHandle(m_Stopped);\n\n\t\t// Terminate the  Windows Socket services\n\t\t::WSACleanup();\n\n\t\t::FreeLibrary(m_hWS2_32);\n\t}\n\n\tinline void CSocket::Accept(CSocket& rClientSock, struct sockaddr* addr, int* addrlen)\n\t{\n\t\t// The accept function permits an incoming connection attempt on the socket.\n\n\t\trClientSock.m_Socket = ::accept(m_Socket, addr, addrlen);\n\t\tif (INVALID_SOCKET == rClientSock.GetSocket())\n\t\t\tTRACE(_T(\"Accept failed\\n\"));\n\t}\n\n\tinline int CSocket::Bind(LPCTSTR addr, LPCTSTR port)\n\t// The bind function associates a local address with the socket.\n\t{\n\t\tint RetVal = 0;\n\n\t\tif (IsIPV6Supported())\n\t\t{\n\n#ifdef GetAddrInfo\t// Skip the following code block for older development environments\n\n\t\t\tADDRINFO Hints= {0};\n\t\t\tHints.ai_flags = AI_NUMERICHOST | AI_PASSIVE;\n\t\t\tADDRINFO *AddrInfo;\n\n\t\t\tRetVal = GetAddrInfo(addr, port, &Hints, &AddrInfo);\n\t\t\tif (RetVal != 0)\n\t\t\t{\n\t\t\t\tTRACE( _T(\"GetAddrInfo failed\\n\"));\n\t\t\t\treturn RetVal;\n\t\t\t}\n\n\t\t\t// Bind the IP address to the listening socket\n\t\t\tRetVal =  ::bind( m_Socket, AddrInfo->ai_addr, (int)AddrInfo->ai_addrlen );\n\t\t\tif ( RetVal == SOCKET_ERROR )\n\t\t\t{\n\t\t\t\tTRACE(_T(\"Bind failed\\n\"));\n\t\t\t\treturn RetVal;\n\t\t\t}\n\n\t\t\t// Free the address information allocated by GetAddrInfo\n\t\t\tFreeAddrInfo(AddrInfo);\n\n#endif\n\n\t\t}\n\t\telse\n\t\t{\n\t\t\tsockaddr_in clientService;\n\t\t\tclientService.sin_family = AF_INET;\n\t\t\tclientService.sin_addr.s_addr = inet_addr( T2A(addr) );\n\t\t\tint nPort = -1;\n            nPort = atoi( T2A(port) );\n\t\t\tif (-1 == nPort)\n\t\t\t{\n\t\t\t\tTRACE(_T(\"Invalid port number\\n\"));\n\t\t\t\treturn SOCKET_ERROR;\n\t\t\t}\n\t\t\tclientService.sin_port = htons( (u_short)nPort );\n\n\t\t\tRetVal = ::bind( m_Socket, (SOCKADDR*) &clientService, sizeof(clientService) );\n\t\t\tif ( 0 != RetVal )\n\t\t\t\tTRACE(_T(\"Bind failed\\n\"));\n\t\t}\n\n\t\treturn RetVal;\n\t}\n\n\tinline int CSocket::Bind(const struct sockaddr* name, int namelen)\n\t{\n\t\t// The bind function associates a local address with the socket.\n\n\t\tint Result = ::bind (m_Socket, name, namelen);\n\t\tif ( 0 != Result )\n\t\t\tTRACE(_T(\"Bind failed\\n\"));\n\t\treturn Result;\n\t}\n\n\tinline int CSocket::Connect(LPCTSTR addr, LPCTSTR port)\n\t// The Connect function establishes a connection to the socket.\n\t{\n\t\tint RetVal = 0;\n\n\t\tif (IsIPV6Supported())\n\t\t{\n\n#ifdef GetAddrInfo\t// Skip the following code block for older development environments\n\n\t\t\tADDRINFO Hints= {0};\n\t\t\tHints.ai_flags = AI_NUMERICHOST | AI_PASSIVE;\n\t\t\tADDRINFO *AddrInfo;\n\n\t\t\tRetVal = GetAddrInfo(addr, port, &Hints, &AddrInfo);\n\t\t\tif (RetVal != 0)\n\t\t\t{\n\t\t\t\tTRACE( _T(\"getaddrinfo failed\\n\"));\n\t\t\t\treturn SOCKET_ERROR;\n\t\t\t}\n\n\t\t\t// Bind the IP address to the listening socket\n\t\t\tRetVal = Connect( AddrInfo->ai_addr, (int)AddrInfo->ai_addrlen );\n\t\t\tif ( RetVal == SOCKET_ERROR )\n\t\t\t{\n\t\t\t\tTRACE(_T(\"Connect failed\\n\"));\n\t\t\t\treturn RetVal;\n\t\t\t}\n\n\t\t\t// Free the address information allocatied by GetAddrInfo\n\t\t\tFreeAddrInfo(AddrInfo);\n\n#endif\n\n\t\t}\n\t\telse\n\t\t{\n\t\t\tsockaddr_in clientService;\n\t\t\tclientService.sin_family = AF_INET;\n\t\t\tclientService.sin_addr.s_addr = inet_addr( T2A(addr) );\n\t\t\tint nPort = -1;\n\t\t\tnPort = atoi( T2A(port) );\n\t\t\tif (-1 == nPort)\n\t\t\t{\n\t\t\t\tTRACE(_T(\"Invalid port number\\n\"));\n\t\t\t\treturn SOCKET_ERROR;\n\t\t\t}\n\t\t\tclientService.sin_port = htons( (u_short)nPort );\n\n\t\t\tRetVal = ::connect( m_Socket, (SOCKADDR*) &clientService, sizeof(clientService) );\n\t\t\tif ( 0 != RetVal )\n\t\t\t\tTRACE(_T(\"Connect failed\\n\"));\n\t\t}\n\n\t\treturn RetVal;\n\t}\n\n\tinline int CSocket::Connect(const struct sockaddr* name, int namelen)\n\t{\n\t\t// The Connect function establishes a connection to the socket.\n\n\t\tint Result = ::connect( m_Socket, name, namelen );\n\t\tif ( 0 != Result )\n\t\t\tTRACE(_T(\"Connect failed\\n\"));\n\n\t\treturn Result;\n\t}\n\n\tinline BOOL CSocket::Create( int family, int type, int protocol /*= IPPROTO_IP*/)\n\t{\n\t\t// Creates the socket\n\n\t\t// Valid values:\n\t\t//  family:\t\tAF_INET or AF_INET6\n\t\t//\ttype:\t\tSOCK_DGRAM, SOCK_SEQPACKET, SOCK_STREAM, SOCK_RAW\n\t\t//\tprotocol:\tIPPROTO_IP, IPPROTO_TCP, IPPROTO_UDP, IPPROTO_RAW, IPPROTO_ICMP, IPPROTO_ICMPV6\n\n\t\tm_Socket = socket(family, type, protocol);\n\t\tif(m_Socket == INVALID_SOCKET)\n\t\t{\n\t\t\tTRACE(_T(\"Failed to create socket\\n\"));\n\t\t\treturn FALSE;\n\t\t}\n\n\t\treturn TRUE;\n\t}\n\n\tinline void CSocket::Disconnect()\n\t{\n\t\t::shutdown(m_Socket, SD_BOTH);\n\t\tStopEvents();\n\t\t::closesocket(m_Socket);\n\t\tm_Socket = INVALID_SOCKET;\n\t}\n\n\tinline UINT WINAPI CSocket::EventThread(LPVOID thread_data)\n\t{\n\t\t// These are the possible network event notifications:\n\t\t//\tFD_READ \tNotification of readiness for reading.\n\t\t//\tFD_WRITE \tMotification of readiness for writing.\n\t\t//\tFD_OOB \t\tNotification of the arrival of Out Of Band data.\n\t\t//\tFD_ACCEPT \tNotification of incoming connections.\n\t\t//\tFD_CONNECT \tNotification of completed connection or multipoint join operation.\n\t\t//\tFD_CLOSE \tNotification of socket closure.\n\t\t//\tFD_QOS\t\tNotification of socket Quality Of Service changes\n\t\t//\tFD_ROUTING_INTERFACE_CHANGE\tNotification of routing interface changes for the specified destination.\n\t\t//\tFD_ADDRESS_LIST_CHANGE\t\tNotification of local address list changes for the address family of the socket.\n\n\t\tWSANETWORKEVENTS NetworkEvents;\n\t\tCSocket* pSocket = (CSocket*)thread_data;\n\t\tSOCKET sClient = pSocket->m_Socket;\n\n        WSAEVENT AllEvents[2];\n\t\tAllEvents[0] = ::WSACreateEvent();\n\t\tAllEvents[1] = (WSAEVENT)pSocket->m_StopRequest;\n\t\tlong Events = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE |\n\t\t\t          FD_QOS | FD_ROUTING_INTERFACE_CHANGE | FD_ADDRESS_LIST_CHANGE;\n\n\t\t// Associate the network event object (hNetworkEvents) with the\n\t\t// specified network events (Events) on socket sClient.\n\t\tif(\tSOCKET_ERROR == WSAEventSelect(sClient, AllEvents[0], Events))\n\t\t{\n\t\t\tTRACE(_T(\"Error in Event Select\\n\"));\n\t\t\t::SetEvent(pSocket->m_Stopped);\n\t\t\t::WSACloseEvent(AllEvents[0]);\n\t\t\treturn 0;\n\t\t}\n\n\t\t// loop until the stop event is set\n\t\tfor (;;) // infinite loop\n\t\t{\n\t\t\t// Wait 100 ms for a network event\n\t\t\tDWORD dwResult = ::WSAWaitForMultipleEvents(2, AllEvents, FALSE, THREAD_TIMEOUT, FALSE);\n\n\t\t\t// Check event for stop thread\n\t\t\tif(::WaitForSingleObject(pSocket->m_StopRequest, 0) == WAIT_OBJECT_0)\n\t\t\t{\n\t\t\t\t::WSACloseEvent(AllEvents[0]);\n\t\t\t\t::SetEvent(pSocket->m_Stopped);\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (WSA_WAIT_FAILED == dwResult)\n\t\t\t{\n\t\t\t\tTRACE(_T(\"WSAWaitForMultipleEvents failed\\n\"));\n\t\t\t\t::WSACloseEvent(AllEvents[0]);\n\t\t\t\t::SetEvent(pSocket->m_Stopped);\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\t// Proceed if a network event occurred\n\t\t\tif (WSA_WAIT_TIMEOUT != dwResult)\n\t\t\t{\n\n\t\t\t\tif ( SOCKET_ERROR == ::WSAEnumNetworkEvents(sClient, AllEvents[0], &NetworkEvents) )\n\t\t\t\t{\n\t\t\t\t\tTRACE(_T(\"WSAEnumNetworkEvents failed\\n\"));\n\t\t\t\t\t::WSACloseEvent(AllEvents[0]);\n\t\t\t\t\t::SetEvent(pSocket->m_Stopped);\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tif (NetworkEvents.lNetworkEvents & FD_ACCEPT)\n\t\t\t\t\tpSocket->OnAccept();\n\n\t\t\t\tif (NetworkEvents.lNetworkEvents & FD_READ)\n\t\t\t\t\tpSocket->OnReceive();\n\n\t\t\t\tif (NetworkEvents.lNetworkEvents & FD_WRITE)\n\t\t\t\t\tpSocket->OnSend();\n\n\t\t\t\tif (NetworkEvents.lNetworkEvents & FD_OOB)\n\t\t\t\t\tpSocket->OnOutOfBand();\n\n\t\t\t\tif (NetworkEvents.lNetworkEvents & FD_QOS)\n\t\t\t\t\tpSocket->OnQualityOfService();\n\n\t\t\t\tif (NetworkEvents.lNetworkEvents & FD_CONNECT)\n\t\t\t\t\tpSocket->OnConnect();\n\n\t\t\t\tif (NetworkEvents.lNetworkEvents & FD_ROUTING_INTERFACE_CHANGE)\n\t\t\t\t\tpSocket->OnRoutingChange();\n\n\t\t\t\tif (NetworkEvents.lNetworkEvents & FD_ADDRESS_LIST_CHANGE)\n\t\t\t\t\tpSocket->OnAddresListChange();\n\n\t\t\t\tif (NetworkEvents.lNetworkEvents & FD_CLOSE)\n\t\t\t\t{\n\t\t\t\t\t::shutdown(sClient, SD_BOTH);\n\t\t\t\t\t::closesocket(sClient);\n\t\t\t\t\tpSocket->OnDisconnect();\n\t\t\t\t\t::WSACloseEvent(AllEvents[0]);\n\t\t\t\t\t::SetEvent(pSocket->m_Stopped);\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tinline int CSocket::GetAddrInfo( LPCTSTR nodename, LPCTSTR servname, const struct addrinfo* hints, struct addrinfo** res)\n\t{\n\n#ifdef GetAddrInfo\n\n\t\tstd::string sNodeName = T2A(nodename);\n\t\tstd::string sServName = T2A(servname);\n\t\treturn (*m_pfnGetAddrInfo)(sNodeName.c_str(), sServName.c_str(), hints, res);\n\n#else\n\n\t\tUNREFERENCED_PARAMETER(nodename);\n\t\tUNREFERENCED_PARAMETER(servname);\n\t\tUNREFERENCED_PARAMETER(hints);\n\t\tUNREFERENCED_PARAMETER(res);\n\n\t\tthrow CWinException(_T(\"getaddrinfo is not supported\"));\n\n#endif\n\n\t}\n\n\tinline LPCTSTR CSocket::GetLastError()\n\t{\n\t\t// Retrieves the most recent network error.\n\n\t\tint ErrorCode = WSAGetLastError();\n\t\tLPTSTR Message = NULL;\n\t\tm_tsErrorMessage = _T(\"\");\n\n\t\tFormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS |\n\t\t\t\t\t  FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_MAX_WIDTH_MASK,\n\t\t\t\t\t  NULL, ErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),\n\t\t\t\t\t  (LPTSTR)&Message, 1024, NULL);\n\n\t\tif (Message)\n\t\t{\n\t\t\tm_tsErrorMessage = Message;\n\t\t\t::LocalFree(Message);\n\t\t}\n\n\t\treturn m_tsErrorMessage.c_str();\n\t}\n\n\tinline int  CSocket::GetPeerName(struct sockaddr* name, int* namelen)\n\t{\n\t\tint Result = ::getpeername(m_Socket, name, namelen);\n\t\tif (0 != Result)\n\t\t\tTRACE(_T(\"GetPeerName failed\\n\"));\n\n\t\treturn Result;\n\t}\n\n\tinline int  CSocket::GetSockName(struct sockaddr* name, int* namelen)\n\t{\n\t\tint Result = ::getsockname(m_Socket, name, namelen);\n\t\tif (0 != Result)\n\t\t\tTRACE(_T(\"GetSockName Failed\\n\"));\n\n\t\treturn Result;\n\t}\n\n\tinline int  CSocket::GetSockOpt(int level, int optname, char* optval, int* optlen)\n\t{\n\t\tint Result = ::getsockopt(m_Socket, level, optname, optval, optlen);\n\t\tif (0 != Result)\n\t\t\tTRACE(_T(\"GetSockOpt Failed\\n\"));\n\n\t\treturn Result;\n\t}\n\n\tinline void CSocket::FreeAddrInfo( struct addrinfo* ai )\n\t{\n\n#ifdef GetAddrInfo\n\n\t\t(*m_pfnFreeAddrInfo)(ai);\n\n#else\n\n\t\tUNREFERENCED_PARAMETER(ai);\n\n\t\tthrow CWinException(_T(\"getaddrinfo is not supported\"));\n\n#endif\n\n\t}\n\n\tinline int CSocket::ioCtlSocket(long cmd, u_long* argp)\n\t{\n\t\tint Result = ::ioctlsocket(m_Socket, cmd, argp);\n\t\tif (0 != Result)\n\t\t\tTRACE(_T(\"ioCtlSocket Failed\\n\"));\n\n\t\treturn Result;\n\t}\n\n\tinline BOOL CSocket::IsIPV6Supported()\n\t{\n\t\tBOOL IsIPV6Supported = FALSE;\n\n#ifdef GetAddrInfo\n\n\t\tif (m_pfnGetAddrInfo != 0 && m_pfnFreeAddrInfo != 0)\n\t\t\tIsIPV6Supported = TRUE;\n\n#endif\n\n\t\treturn IsIPV6Supported;\n\t}\n\n\tinline int CSocket::Listen(int backlog /*= SOMAXCONN*/)\n\t{\n\t\tint Result = ::listen(m_Socket, backlog);\n\t\tif (0 != Result)\n\t\t\tTRACE(_T(\"Listen Failed\\n\"));\n\n\t\treturn Result;\n\t}\n\n\tinline int CSocket::Receive(TCHAR* buf, int len, int flags)\n\t{\n\t\tstd::vector<char> vChar(len+1, '\\0');\n\t\tchar* pCharArray = &vChar.front();\n\t\tint Result = ::recv(m_Socket, pCharArray, len, flags);\n\t\tif (SOCKET_ERROR == Result)\n\t\t\tTRACE(_T(\"Receive failed\\n\"));\n\n\t\tlstrcpyn(buf, A2T(pCharArray), len);\n\n\t\treturn Result;\n\t}\n\n\tinline int CSocket::ReceiveFrom(TCHAR* buf, int len, int flags, struct sockaddr* from, int* fromlen)\n\t//The ReceiveFrom function receives a datagram and stores the source address.\n\t{\n\t\tstd::vector<char> vChar(len+1, '\\0');\n\t\tchar* pCharArray = &vChar.front();\n\t\tint Result = ::recvfrom(m_Socket, pCharArray, len, flags, from, fromlen);\n\t\tif (SOCKET_ERROR == Result)\n\t\t\tTRACE(_T(\"ReceiveFrom failed\\n\"));\n\n\t\tlstrcpyn(buf, A2T(pCharArray), len);\n\n\t\treturn Result;\n\t}\n\n\tinline int CSocket::Send(LPCTSTR buf, int len, int flags)\n\t{\n\t\tint Result = ::send(m_Socket, T2A(buf), len, flags);\n\t\tif (SOCKET_ERROR == Result)\n\t\t\tTRACE(_T(\"Send failed\\n\"));\n\n\t\treturn Result;\n\t}\n\n\tinline int CSocket::SendTo(LPCTSTR send, int len, int flags, LPCTSTR addr, LPCTSTR port)\n\t// The sendto function sends data to a specific destination.\n\t{\n\t\tint RetVal = 0;\n\n\t\tif (IsIPV6Supported())\n\t\t{\n\n#ifdef GetAddrInfo\t// Skip the following code block for older development environments\n\n\t\t\tADDRINFO Hints= {0};\n\t\t\tHints.ai_flags = AI_NUMERICHOST | AI_PASSIVE;\n\t\t\tADDRINFO *AddrInfo;\n\n\t\t\tRetVal = GetAddrInfo(addr, port, &Hints, &AddrInfo);\n\t\t\tif (RetVal != 0)\n\t\t\t{\n\t\t\t\tTRACE( _T(\"GetAddrInfo failed\\n\"));\n\t\t\t\treturn SOCKET_ERROR;\n\t\t\t}\n\n\t\t\tRetVal = ::sendto(m_Socket, T2A(send), len, flags, AddrInfo->ai_addr, (int)AddrInfo->ai_addrlen );\n\t\t\tif ( RetVal == SOCKET_ERROR )\n\t\t\t{\n\t\t\t\tTRACE(_T(\"SendTo failed\\n\"));\n\t\t\t\treturn RetVal;\n\t\t\t}\n\n\t\t\t// Free the address information allocatied by GetAddrInfo\n\t\t\tFreeAddrInfo(AddrInfo);\n\n#endif\n\n\t\t}\n\t\telse\n\t\t{\n\t\t\tsockaddr_in clientService;\n\t\t\tclientService.sin_family = AF_INET;\n\t\t\tclientService.sin_addr.s_addr = inet_addr( T2A(addr) );\n\t\t\tint nPort = -1;\n            nPort = atoi( T2A(port));\n\t\t\tif (-1 == nPort)\n\t\t\t{\n\t\t\t\tTRACE(_T(\"Invalid port number\\n\"));\n\t\t\t\treturn SOCKET_ERROR;\n\t\t\t}\n\t\t\tclientService.sin_port = htons( (u_short)nPort );\n\n\t\t\tRetVal = ::sendto( m_Socket, T2A(send), len, flags, (SOCKADDR*) &clientService, sizeof(clientService) );\n\t\t\tif ( SOCKET_ERROR != RetVal )\n\t\t\t\tTRACE(_T(\"SendTo failed\\n\"));\n\t\t}\n\n\t\treturn RetVal;\n\t}\n\n\tinline int CSocket::SendTo(LPCTSTR buf, int len, int flags, const struct sockaddr* to, int tolen)\n\t// The sendto function sends data to a specific destination.\n\t{\n\t\tint Result =  ::sendto(m_Socket, T2A(buf), len, flags, to, tolen);\n\t\tif (SOCKET_ERROR == Result)\n\t\t\tTRACE(_T(\"SendTo failed\\n\"));\n\n\t\treturn Result;\n\t}\n\n\tinline int CSocket::SetSockOpt(int level, int optname, const char* optval, int optlen)\n\t{\n\t\tint Result = ::setsockopt(m_Socket, level, optname, optval, optlen);\n\t\tif (0 != Result)\n\t\t\tTRACE(_T(\"SetSockOpt failed\\n\"));\n\n\t\treturn Result;\n\t}\n\n\tinline void CSocket::StartEvents()\n\t{\n\t\t// This function starts the thread which monitors the socket for events.\n\t\tStopEvents();\t// Ensure the thread isn't already running\n\t\tUINT ThreadID;\t// a return variable required for Win95, Win98, WinME\n\t\tm_hEventThread = (HANDLE)::_beginthreadex(NULL, 0, CSocket::EventThread, (LPVOID) this, 0, &ThreadID);\n\t}\n\n\tinline void CSocket::StopEvents()\n\t{\n\t\t// Terminates the event thread gracefully (if possible)\n\t\tif (m_hEventThread)\n\t\t{\n\t\t\t::SetThreadPriority(m_hEventThread, THREAD_PRIORITY_HIGHEST);\n\t\t\t::SetEvent(m_StopRequest);\n\n\t\t\tfor (;;)\t// infinite loop\n\t\t\t{\n\t\t\t\t// wait for the Thread stopping event to be set\n\t\t\t\tif ( WAIT_TIMEOUT == ::WaitForSingleObject(m_Stopped, THREAD_TIMEOUT * 10) )\n\t\t\t\t{\n\t\t\t\t\t// Note: An excessive delay in processing any of the notification functions\n\t\t\t\t\t// can cause us to get here. (Yes one second is an excessive delay. Its a bug!)\n\t\t\t\t\tTRACE(_T(\"*** Error: Event Thread won't die ***\\n\") );\n\t\t\t\t}\n\t\t\t\telse break;\n\t\t\t}\n\n\t\t\t::CloseHandle(m_hEventThread);\n\t\t\tm_hEventThread = 0;\n\t\t}\n\n\t\t::ResetEvent(m_StopRequest);\n\t\t::ResetEvent(m_Stopped);\n\t}\n}\n\n\n#endif // #ifndef _WIN32XX_SOCKET_H_\n\n"
  },
  {
    "path": "external/win32cpp/include/statusbar.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n\n#ifndef _WIN32XX_STATUSBAR_H_\n#define _WIN32XX_STATUSBAR_H_\n\n#include \"wincore.h\"\n\nnamespace Win32xx\n{\n\n\t//////////////////////////////////////\n\t// Declaration of the CStatusBar class\n\t//\n\tclass CStatusBar : public CWnd\n\t{\n\tpublic:\n\t\tCStatusBar();\n\t\tvirtual ~CStatusBar() {}\n\n\t// Overridables\n\t\tvirtual void PreCreate(CREATESTRUCT& cs);\n\t\tvirtual void PreRegisterClass(WNDCLASS &wc);\n\n\t// Attributes\n\t\tint GetParts();\n\t\tHICON GetPartIcon(int iPart);\n\t\tCRect GetPartRect(int iPart);\n\t\ttString GetPartText(int iPart) const;\n\t\tBOOL IsSimple();\n\t\tBOOL SetPartIcon(int iPart, HICON hIcon);\n\t\tBOOL SetPartText(int iPart, LPCTSTR szText, UINT Style = 0) const;\n\t\tBOOL SetPartWidth(int iPart, int iWidth) const;\n\n\t// Operations\n\t\tCStatusBar(const CStatusBar&);\t\t\t\t// Disable copy construction\n\t\tCStatusBar& operator = (const CStatusBar&); // Disable assignment operator\n\n\t\tBOOL CreateParts(int iParts, const int iPaneWidths[]) const;\n\t\tvoid SetSimple(BOOL fSimple = TRUE);\n\t};\n\n}\n\n\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n\nnamespace Win32xx\n{\n\n\t//////////////////////////////////////\n\t// Definitions for the CStatusBar class\n\t//\n\tinline CStatusBar::CStatusBar()\n\t{\n\t}\n\n\tinline BOOL CStatusBar::CreateParts(int iParts, const int iPaneWidths[]) const\n\t// Sets the number of parts in a status window and the coordinate of the right edge of each part. \n\t// If an element of iPaneWidths is -1, the right edge of the corresponding part extends\n\t//  to the border of the window\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tassert(iParts <= 256);\t\n\t\t\n\t\treturn (BOOL)SendMessage(SB_SETPARTS, iParts, (LPARAM)iPaneWidths);\t\t\n\t}\n\n\tinline int CStatusBar::GetParts()\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(SB_GETPARTS, 0L, 0L);\n\t}\n\n\tinline HICON CStatusBar::GetPartIcon(int iPart)\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HICON)SendMessage(SB_GETICON, (WPARAM)iPart, 0L);\n\t}\n\n\tinline CRect CStatusBar::GetPartRect(int iPart)\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\t\n\t\tCRect rc;\n\t\tSendMessage(SB_GETRECT, (WPARAM)iPart, (LPARAM)&rc);\n\t\treturn rc;\n\t}\n\n\tinline tString CStatusBar::GetPartText(int iPart) const\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\ttString PaneText;\n\t\t\n\t\t// Get size of Text array\n\t\tint iChars = LOWORD (SendMessage(SB_GETTEXTLENGTH, iPart, 0L));\n\n\t\tstd::vector<TCHAR> Text( iChars +1, _T('\\0') );\n\t\tTCHAR* pTextArray = &Text[0];\n\n\t\tSendMessage(SB_GETTEXT, iPart, (LPARAM)pTextArray);\n\t\tPaneText = pTextArray;\t\t\t\n\t\treturn PaneText;\n\t}\n\n\tinline BOOL CStatusBar::IsSimple()\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(SB_ISSIMPLE, 0L, 0L);\n\t}\n\n\tinline void CStatusBar::PreCreate(CREATESTRUCT &cs)\n\t{\n\t\tcs.style = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | CCS_BOTTOM | SBARS_SIZEGRIP;\n\t}\n\n\tinline void CStatusBar::PreRegisterClass(WNDCLASS &wc)\n\t{\n\t\t// Set the Window Class\n\t\twc.lpszClassName =  STATUSCLASSNAME;\n\t}\n\n\tinline BOOL CStatusBar::SetPartText(int iPart, LPCTSTR szText, UINT Style) const\n\t// Available Styles: Combinations of ...\n\t//0\t\t\t\t\tThe text is drawn with a border to appear lower than the plane of the window.\n\t//SBT_NOBORDERS\t\tThe text is drawn without borders.\n\t//SBT_OWNERDRAW\t\tThe text is drawn by the parent window.\n\t//SBT_POPOUT\t\tThe text is drawn with a border to appear higher than the plane of the window.\n\t//SBT_RTLREADING\tThe text will be displayed in the opposite direction to the text in the parent window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\t\n\t\tBOOL bResult = FALSE;\n\t\tif (SendMessage(SB_GETPARTS, 0L, 0L) >= iPart)\n\t\t\tbResult = (BOOL)SendMessage(SB_SETTEXT, iPart | Style, (LPARAM)szText);\n\n\t\treturn bResult;\n\t}\n\n\tinline BOOL CStatusBar::SetPartIcon(int iPart, HICON hIcon)\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(SB_SETICON, (WPARAM)iPart, (LPARAM) hIcon);\n\t}\n\n\tinline BOOL CStatusBar::SetPartWidth(int iPart, int iWidth) const\n\t{\n\t\t// This changes the width of an existing pane, or creates a new pane\n\t\t// with the specified width.\n\t\t// A width of -1 for the last part sets the width to the border of the window.\n\n\t\tassert(::IsWindow(m_hWnd));\n\t\tassert(iPart >= 0 && iPart <= 255);\n\n\t\t// Fill the PartWidths vector with the current width of the statusbar parts\n\t\tint PartsCount = (int)SendMessage(SB_GETPARTS, 0L, 0L);\n\t\tstd::vector<int> PartWidths(PartsCount, 0);\n\t\tint* pPartWidthArray = &PartWidths[0];\n\t\tSendMessage(SB_GETPARTS, PartsCount, (LPARAM)pPartWidthArray);\n\n\t\t// Fill the NewPartWidths vector with the new width of the statusbar parts\n\t\tint NewPartsCount = MAX(iPart+1, PartsCount);\t\n\t\tstd::vector<int> NewPartWidths(NewPartsCount, 0);;\n\t\tNewPartWidths = PartWidths;\n\t\tint* pNewPartWidthArray = &NewPartWidths[0];\n\t\t\n\t\tif (0 == iPart)\n\t\t\tpNewPartWidthArray[iPart] = iWidth;\n\t\telse\n\t\t{\n\t\t\tif (iWidth >= 0)\n\t\t\t\tpNewPartWidthArray[iPart] = pNewPartWidthArray[iPart -1] + iWidth;\n\t\t\telse\n\t\t\t\tpNewPartWidthArray[iPart] = -1;\n\t\t}\n\n\t\t// Set the statusbar parts with our new parts count and part widths\n\t\tBOOL bResult = (BOOL)SendMessage(SB_SETPARTS, NewPartsCount, (LPARAM)pNewPartWidthArray);\n\n\t\treturn bResult;\n\t}\n\n\tinline void CStatusBar::SetSimple(BOOL fSimple /* = TRUE*/)\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(SB_SIMPLE, (WPARAM)fSimple, 0L);\n\t}\n\n} // namespace Win32xx\n\n#endif // #ifndef _WIN32XX_STATUSBAR_H_\n"
  },
  {
    "path": "external/win32cpp/include/stdcontrols.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n\n////////////////////////////////////////////////////////\n// stdcontrols.h\n//  Declaration of the CButton, CEdit, CListBox and CStatic classes\n\n// The Button, Edit, ListBox and Static controls are often referred to \n// as \"standard controls\". These set of older controls were originally \n// developed for Win16 operating systems (Windows 3.1 and 3.11). They use an\n// older form of notification, and send their notifications via a WM_COMMAND\n// message. Newer controls send their notifications via a WM_NOTIFY message.\n\n\n#ifndef _WIN32XX_STDCONTROLS_H_\n#define _WIN32XX_STDCONTROLS_H_\n\n#include \"wincore.h\"\n\n\nnamespace Win32xx\n{\n\tclass CButton : public CWnd\n\t{\n\tpublic:\n\t\tCButton() {}\n\t\tvirtual ~CButton() {}\n\n\t\t// Attributes\n\t\tHBITMAP GetBitmap() const;\n\t\tUINT GetButtonStyle() const;\n\t\tint GetCheck() const;\n\t\tHCURSOR GetCursor() const;\n\t\tHICON GetIcon() const;\n\t\tUINT GetState() const;\n\t\tHBITMAP SetBitmap(HBITMAP hBitmap) const;\n\t\tvoid SetButtonStyle(DWORD dwStyle, BOOL bRedraw) const;\n\t\tvoid SetCheck(int nCheckState) const;\n\t\tHCURSOR SetCursor(HCURSOR hCursor) const;\n\t\tHICON SetIcon(HICON hIcon) const;\n\t\tvoid SetState(BOOL bHighlight) const;\n\n\tprotected:\n\t\t// Overridables\n\t\tvirtual void PreCreate(CREATESTRUCT& cs);\n\t};\n\n\tclass CEdit : public CWnd\n\t{\n\tpublic:\n\t\t// Construction\n\t\tCEdit() {}\n\t\tvirtual ~CEdit() {}\n\n\t\t// Attributes\n\t\tBOOL CanUndo() const;\n\t\tint CharFromPos(CPoint pt) const;\n\t\tint GetFirstVisibleLine() const;\n\t\tHLOCAL GetHandle() const;\n\t\tUINT GetLimitText() const;\n\t\tint GetLine(int nIndex, LPTSTR lpszBuffer) const;\n\t\tint GetLine(int nIndex, LPTSTR lpszBuffer, int nMaxLength) const;\n\t\tint GetLineCount() const;\n\t\tDWORD GetMargins() const;\n\t\tBOOL GetModify() const;\n\t\tTCHAR GetPasswordChar() const;\n\t\tvoid GetRect(LPRECT lpRect) const;\n\t\tvoid GetSel(int& nStartChar, int& nEndChar) const;\n\t\tDWORD GetSel() const;\n\t\tCPoint PosFromChar(UINT nChar) const;\n\t\tvoid SetHandle(HLOCAL hBuffer) const;\n\t\tvoid SetLimitText(UINT nMax) const;\n\t\tvoid SetMargins(UINT nLeft, UINT nRight) const;\n\t\tvoid SetModify(BOOL bModified = TRUE) const;\n\n\t\t// Operations\n\t\tvoid EmptyUndoBuffer() const;\n\t\tBOOL FmtLines(BOOL bAddEOL) const;\n\t\tvoid LimitText(int nChars = 0) const;\n\t\tint LineFromChar(int nIndex = -1) const;\n\t\tint LineIndex(int nLine = -1) const;\n\t\tint LineLength(int nLine = -1) const;\n\t\tvoid LineScroll(int nLines, int nChars = 0) const;\n\t\tvoid ReplaceSel(LPCTSTR lpszNewText, BOOL bCanUndo) const;\n\t\tvoid SetPasswordChar(TCHAR ch) const;\n\t\tBOOL SetReadOnly(BOOL bReadOnly = TRUE) const;\n\t\tvoid SetRect(LPCRECT lpRect) const;\n\t\tvoid SetRectNP(LPCRECT lpRect) const;\n\t\tvoid SetSel(DWORD dwSelection, BOOL bNoScroll) const;\n\t\tvoid SetSel(int nStartChar, int nEndChar, BOOL bNoScroll) const;\n\t\tBOOL SetTabStops(int nTabStops, LPINT rgTabStops) const;\n\t\tBOOL SetTabStops() const;\n\t\tBOOL SetTabStops(const int& cxEachStop) const;\n\n\t\t//Clipboard Operations\n\t\tvoid Clear() const;\n\t\tvoid Copy() const;\n\t\tvoid Cut() const;\n\t\tvoid Paste() const;\n\t\tvoid Undo() const;\n\n\tprotected:\n\t\t// Overridables\n\t\tvirtual void PreRegisterClass(WNDCLASS &wc);\n\t};\n\n\tclass CListBox : public CWnd\n\t{\n\tpublic:\n\t\tCListBox() {}\n\t\tvirtual ~CListBox() {}\n\n\t\t// General Operations\n\t\tint  GetCount() const;\n\t\tint  GetHorizontalExtent() const;\n\t\tDWORD GetItemData(int nIndex) const;\n\t\tvoid* GetItemDataPtr(int nIndex) const;\n\t\tint  GetItemHeight(int nIndex) const;\n\t\tint  GetItemRect(int nIndex, LPRECT lpRect) const;\n\t\tLCID GetLocale() const;\n\t\tint  GetSel(int nIndex) const;\n\t\tint  GetText(int nIndex, LPTSTR lpszBuffer) const;\n\t\tint  GetTextLen(int nIndex) const;\n\t\tint  GetTopIndex() const;\n\t\tUINT ItemFromPoint(CPoint pt, BOOL& bOutside ) const;\n\t\tvoid SetColumnWidth(int cxWidth) const;\n\t\tvoid SetHorizontalExtent(int cxExtent) const;\n\t\tint  SetItemData(int nIndex, DWORD dwItemData) const;\n\t\tint  SetItemDataPtr(int nIndex, void* pData) const;\n\t\tint  SetItemHeight(int nIndex, UINT cyItemHeight) const;\n\t\tLCID SetLocale(LCID nNewLocale) const;\n\t\tBOOL SetTabStops(int nTabStops, LPINT rgTabStops) const;\n\t\tvoid SetTabStops() const;\n\t\tBOOL SetTabStops(const int& cxEachStop) const;\n\t\tint  SetTopIndex(int nIndex) const;\n\n\t\t// Single-Selection Operations\n\t\tint  GetCurSel() const;\n\t\tint  SetCurSel(int nSelect) const;\n\n\t\t// Multiple-Selection Operations\n\t\tint  GetAnchorIndex() const;\n\t\tint  GetCaretIndex() const;\n\t\tint  GetSelCount() const;\n\t\tint  GetSelItems(int nMaxItems, LPINT rgIndex) const;\n\t\tint  SelItemRange(BOOL bSelect, int nFirstItem, int nLastItem) const;\n\t\tvoid SetAnchorIndex(int nIndex) const;\n\t\tint  SetCaretIndex(int nIndex, BOOL bScroll) const;\n\t\tint  SetSel(int nIndex, BOOL bSelect) const;\n\n\t\t// String Operations\n\t\tint  AddString(LPCTSTR lpszItem) const;\n\t\tint  DeleteString(UINT nIndex) const;\n\t\tint  Dir(UINT attr, LPCTSTR lpszWildCard) const;\n\t\tint  FindString(int nStartAfter, LPCTSTR lpszItem) const;\n\t\tint  FindStringExact(int nIndexStart, LPCTSTR lpszFind) const;\n\t\tint  InsertString(int nIndex, LPCTSTR lpszItem) const;\n\t\tvoid ResetContent() const;\n\t\tint  SelectString(int nStartAfter, LPCTSTR lpszItem) const;\n\n\tprotected:\n\t\t// Overridables\n\t\tvirtual void PreRegisterClass(WNDCLASS &wc);\n\t};\n\n\tclass CStatic : public CWnd\n\t{\n\tpublic:\n\t\tCStatic() {}\n\t\tvirtual ~CStatic() {}\n\n\t\t// Operations\n\t\tHBITMAP  GetBitmap() const;\n\t\tHCURSOR GetCursor() const;\n\t\tHENHMETAFILE GetEnhMetaFile() const;\n\t\tHICON  GetIcon() const;\n\t\tHBITMAP SetBitmap(HBITMAP hBitmap) const;\n\t\tHCURSOR SetCursor(HCURSOR hCursor) const;\n\t\tHENHMETAFILE SetEnhMetaFile(HENHMETAFILE hMetaFile) const;\n\t\tHICON SetIcon(HICON hIcon) const;\n\n\tprotected:\n\t\t// Overridables\n\t\tvirtual void PreRegisterClass(WNDCLASS &wc);\n\n\t};\n\n}\n\n\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n\nnamespace Win32xx\n{\n\n\t////////////////////////////////////////\n\t// Definitions for the CButton class\n\t//\n\tinline HBITMAP CButton::GetBitmap() const\n\t// returns the handle to the bitmap associated with the button\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HBITMAP)SendMessage(BM_GETIMAGE, IMAGE_BITMAP, 0);\n\t}\n\n\tinline UINT CButton::GetButtonStyle() const\n\t// returns the style of the button\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (UINT)GetWindowLongPtr(GWL_STYLE) & 0xff;\n\t}\n\n\tinline int CButton::GetCheck() const\n\t// returns the check state of the button\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(BM_GETCHECK, 0, 0);\n\t}\n\n\tinline HCURSOR CButton::GetCursor() const\n\t// returns the handle to the cursor associated withe the button\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HCURSOR)::SendMessage(m_hWnd, BM_GETIMAGE, IMAGE_CURSOR, 0L);\n\t}\n\n\tinline HICON CButton::GetIcon() const\n\t// returns the handle to the icon associated withe the button\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HICON)SendMessage(BM_GETIMAGE, IMAGE_ICON, 0);\n\t}\n\n\tinline UINT CButton::GetState() const\n\t// returns the state of the button\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (UINT)SendMessage(BM_GETSTATE, 0, 0);\n\t}\n\n\tinline HBITMAP CButton::SetBitmap(HBITMAP hBitmap) const\n\t// sets the bitmap associated with the button\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HBITMAP)SendMessage(BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBitmap);\n\t}\n\n\tinline void CButton::SetButtonStyle(DWORD dwStyle, BOOL bRedraw) const\n\t// sets the button style\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(BM_SETSTYLE, dwStyle, bRedraw);\n\t}\n\n\tinline void CButton::SetCheck(int nCheckState) const\n\t// sets the button check state\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(BM_SETCHECK, nCheckState, 0);\n\t}\n\n\tinline HCURSOR CButton::SetCursor(HCURSOR hCursor) const\n\t// sets the cursor associated with the button\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HCURSOR)SendMessage(STM_SETIMAGE, IMAGE_CURSOR, (LPARAM)hCursor);\n\t}\n\n\tinline HICON CButton::SetIcon(HICON hIcon) const\n\t// sets the icon associated with the button\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HICON)SendMessage( BM_SETIMAGE, IMAGE_ICON, (LPARAM)hIcon);\n\t}\n\n\tinline void CButton::SetState(BOOL bHighlight) const\n\t// sets the button state\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(BM_SETSTATE, bHighlight, 0);\n\t}\n\n\tinline void CButton::PreCreate(CREATESTRUCT& cs)\n\t{\n\t\tcs.lpszClass = _T(\"Button\");\n\t}\n\n\n\t////////////////////////////////////////\n\t// Definitions for the CEdit class\n\t//\n\tinline BOOL CEdit::CanUndo() const\n\t// Returns TRUE if the edit control operation can be undone.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(EM_CANUNDO, 0, 0);\n\t}\n\n\tinline int CEdit::CharFromPos(CPoint pt) const\n\t// Returns the character index and line index of the character nearest the specified point.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(EM_CHARFROMPOS, 0, MAKELPARAM(pt.x, pt.y));\n\t}\n\n\tinline int CEdit::GetFirstVisibleLine() const\n\t// Returns the zero-based index of the first visible character in a single-line edit control \n\t//  or the zero-based index of the uppermost visible line in a multiline edit control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(EM_GETFIRSTVISIBLELINE, 0, 0);\n\t}\n\n\tinline HLOCAL CEdit::GetHandle() const\n\t// Returns a handle identifying the buffer containing the multiline edit control's text. \n\t//  It is not processed by single-line edit controls.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HLOCAL)SendMessage(EM_GETHANDLE, 0, 0);\n\t}\n\n\tinline UINT CEdit::GetLimitText() const\n\t// Returns the current text limit, in characters.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (UINT)SendMessage(EM_GETLIMITTEXT, 0, 0);\n\t}\n\n\tinline int CEdit::GetLine(int nIndex, LPTSTR lpszBuffer) const\n\t// Copies characters to a buffer and returns the number of characters copied.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)::SendMessage(m_hWnd, EM_GETLINE, nIndex, (LPARAM)lpszBuffer);\n\t}\n\n\tinline int CEdit::GetLine(int nIndex, LPTSTR lpszBuffer, int nMaxLength) const\n\t// Copies characters to a buffer and returns the number of characters copied.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\t*(LPWORD)lpszBuffer = (WORD)nMaxLength;\n\t\treturn (int)SendMessage(EM_GETLINE, nIndex, (LPARAM)lpszBuffer);\n\t}\n\n\tinline int CEdit::GetLineCount() const\n\t// Returns the number of lines in the edit control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(EM_GETLINECOUNT, 0, 0);\n\t}\n\n\tinline DWORD CEdit::GetMargins() const\n\t// Returns the widths of the left and right margins.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (DWORD)SendMessage(EM_GETMARGINS, 0, 0);\n\t}\n\n\tinline BOOL CEdit::GetModify() const\n\t// Returns a flag indicating whether the content of an edit control has been modified.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(EM_GETMODIFY, 0, 0);\n\t}\n\n\tinline TCHAR CEdit::GetPasswordChar() const\n\t// Returns the character that edit controls use in conjunction with the ES_PASSWORD style.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (TCHAR)SendMessage(EM_GETPASSWORDCHAR, 0, 0);\n\t}\n\n\tinline void CEdit::GetRect(LPRECT lpRect) const\n\t// Returns the coordinates of the formatting rectangle in an edit control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(EM_GETRECT, 0, (LPARAM)lpRect);\n\t}\n\n\tinline void CEdit::GetSel(int& nStartChar, int& nEndChar) const\n\t// Returns the starting and ending character positions of the current selection in the edit control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(EM_GETSEL, (WPARAM)&nStartChar,(LPARAM)&nEndChar);\n\t}\n\n\tinline DWORD CEdit::GetSel() const\n\t// Returns the starting and ending character positions of the current selection in the edit control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (DWORD)SendMessage(EM_GETSEL, 0, 0);\n\t}\n\n\tinline CPoint CEdit::PosFromChar(UINT nChar) const\n\t// Returns the client coordinates of the specified character.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn CPoint( (DWORD)SendMessage(EM_POSFROMCHAR, nChar, 0));\n\t}\n\n\tinline void CEdit::SetHandle(HLOCAL hBuffer) const\n\t// Sets a handle to the memory used as a text buffer, empties the undo buffer, \n\t//  resets the scroll positions to zero, and redraws the window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(EM_SETHANDLE, (WPARAM)hBuffer, 0);\n\t}\n\n\tinline void CEdit::SetLimitText(UINT nMax) const\n\t// Sets the maximum number of characters the user may enter in the edit control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(EM_SETLIMITTEXT, (WPARAM)nMax, 0);\n\t}\n\n\tinline void CEdit::SetMargins(UINT nLeft, UINT nRight) const\n\t// Sets the widths of the left and right margins, and redraws the edit control to reflect the new margins.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(EM_SETMARGINS, EC_LEFTMARGIN|EC_RIGHTMARGIN, MAKELONG(nLeft, nRight));\n\t}\n\n\tinline void CEdit::SetModify(BOOL bModified) const\n\t// Sets or clears the modification flag to indicate whether the edit control has been modified.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(EM_SETMODIFY, bModified, 0);\n\t}\n\n\tinline void CEdit::EmptyUndoBuffer() const\n\t// Empties the undo buffer and sets the undo flag retrieved by the EM_CANUNDO message to FALSE.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(EM_EMPTYUNDOBUFFER, 0, 0);\n\t}\n\n\tinline BOOL CEdit::FmtLines(BOOL bAddEOL) const\n\t// Adds or removes soft line-break characters (two carriage returns and a line feed) to the ends of wrapped lines \n\t//  in a multiline edit control. It is not processed by single-line edit controls.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(EM_FMTLINES, bAddEOL, 0);\n\t}\n\n\tinline void CEdit::LimitText(int nChars) const\n\t// Sets the text limit of an edit control. The text limit is the maximum amount of text, in TCHARs, \n\t//  that the user can type into the edit control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(EM_LIMITTEXT, nChars, 0);\n\t}\n\n\tinline int CEdit::LineFromChar(int nIndex) const\n\t// Returns the zero-based number of the line in a multiline edit control that contains a specified character index.\n\t//  This message is the reverse of the EM_LINEINDEX message.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(EM_LINEFROMCHAR, (WPARAM)nIndex, 0);\n\t}\n\n\tinline int CEdit::LineIndex(int nLine) const\n\t// Returns the character of a line in a multiline edit control. \n\t// This message is the reverse of the EM_LINEFROMCHAR message\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(EM_LINEINDEX, (WPARAM)nLine, 0);\n\t}\n\n\tinline int CEdit::LineLength(int nLine) const\n\t// Returns the length, in characters, of a single-line edit control. In a multiline edit control, \n\t//\treturns the length, in characters, of a specified line.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(EM_LINELENGTH, (WPARAM)nLine, 0);\n\t}\n\n\tinline void CEdit::LineScroll(int nLines, int nChars) const\n\t// Scrolls the text vertically in a single-line edit control or horizontally in a multiline edit control.\n\t{\n\t\tassert(::IsWindow(m_hWnd)); \n\t\tSendMessage(EM_LINESCROLL, (WPARAM)nChars, (LPARAM)nLines);\n\t}\n\n\tinline void CEdit::ReplaceSel(LPCTSTR lpszNewText, BOOL bCanUndo) const\n\t// Replaces the current selection with the text in an application-supplied buffer, sends the parent window \n\t//  EN_UPDATE and EN_CHANGE messages, and updates the undo buffer.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(EM_REPLACESEL, (WPARAM) bCanUndo, (LPARAM)lpszNewText);\n\t}\n\n\tinline void CEdit::SetPasswordChar(TCHAR ch) const\n\t// Defines the character that edit controls use in conjunction with the ES_PASSWORD style.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(EM_SETPASSWORDCHAR, ch, 0);\n\t}\n\n\tinline BOOL CEdit::SetReadOnly(BOOL bReadOnly) const\n\t// Sets or removes the read-only style (ES_READONLY) in an edit control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(EM_SETREADONLY, bReadOnly, 0);\n\t}\n\n\tinline void CEdit::SetRect(LPCRECT lpRect) const\n\t// Sets the formatting rectangle for the multiline edit control and redraws the window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(EM_SETRECT, 0, (LPARAM)lpRect);\n\t}\n\n\tinline void CEdit::SetRectNP(LPCRECT lpRect) const\n\t// Sets the formatting rectangle for the multiline edit control but does not redraw the window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(EM_SETRECTNP, 0, (LPARAM)lpRect);\n\t}\n\n\tinline void CEdit::SetSel(DWORD dwSelection, BOOL bNoScroll) const\n\t// Selects a range of characters in the edit control by setting the starting and ending positions to be selected.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(EM_SETSEL, LOWORD(dwSelection), HIWORD(dwSelection));\n\t\tif (!bNoScroll)\n\t\t\tSendMessage(EM_SCROLLCARET, 0, 0);\n\t}\n\n\tinline void CEdit::SetSel(int nStartChar, int nEndChar, BOOL bNoScroll) const\n\t// Selects a range of characters in the edit control by setting the starting and ending positions to be selected.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(m_hWnd, EM_SETSEL, nStartChar, nEndChar);\n\t\tif (!bNoScroll)\n\t\t\tSendMessage(EM_SCROLLCARET, 0, 0);\n\t}\n\n\tinline BOOL CEdit::SetTabStops(int nTabStops, LPINT rgTabStops) const\n\t// Sets tab-stop positions in the multiline edit control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)::SendMessage(m_hWnd, EM_SETTABSTOPS, nTabStops, (LPARAM)rgTabStops);\n\t}\n\n\tinline BOOL CEdit::SetTabStops() const\n\t// Sets tab-stop positions in the multiline edit control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage( EM_SETTABSTOPS, 0, 0);\n\t}\n\n\tinline BOOL CEdit::SetTabStops(const int& cxEachStop) const\n\t// Sets tab-stop positions in the multiline edit control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(EM_SETTABSTOPS, 1, (LPARAM)(LPINT)&cxEachStop);\n\t}\n\n\tinline void CEdit::Clear() const\n\t// Clears the current selection, if any, in an edit control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(WM_CLEAR, 0, 0);\n\t}\n\n\tinline void CEdit::Copy() const\n\t// Copies text to the clipboard unless the style is ES_PASSWORD, in which case the message returns zero.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(WM_COPY,  0, 0);\n\t}\n\n\tinline void CEdit::Cut() const\n\t// Cuts the selection to the clipboard, or deletes the character to the left of the cursor if there is no selection.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(WM_CUT,   0, 0);\n\t}\n\n\tinline void CEdit::Paste() const\n\t// Pastes text from the clipboard into the edit control window at the caret position.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(WM_PASTE, 0, 0);\n\t}\n\n\tinline void CEdit::Undo() const\n\t// Removes any text that was just inserted or inserts any deleted characters and sets the selection to the inserted text.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(EM_UNDO,  0, 0);\n\t}\n\n\tinline void CEdit::PreRegisterClass(WNDCLASS &wc)\n\t{\n\t\t// Set the Window Class\n\t\twc.lpszClassName =  _T(\"Edit\");\n\t}\n\n\n\t////////////////////////////////////////\n\t// Definitions for the CListbox class\n\t//\n\tinline int CListBox::GetCount() const\n\t// Returns the number of items in the list box.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(LB_GETCOUNT, 0, 0);\n\t}\n\n\tinline int CListBox::GetHorizontalExtent() const\n\t// Returns the scrollable width, in pixels, of a list box.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(LB_GETHORIZONTALEXTENT,\t0, 0);\n\t}\n\n\tinline DWORD CListBox::GetItemData(int nIndex) const\n\t// Returns the value associated with the specified item.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (DWORD)SendMessage(LB_GETITEMDATA, nIndex, 0);\n\t}\n\n\tinline void* CListBox::GetItemDataPtr(int nIndex) const\n\t// Returns the value associated with the specified item.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (LPVOID)SendMessage(LB_GETITEMDATA, nIndex, 0);\n\t}\n\n\tinline int CListBox::GetItemHeight(int nIndex) const\n\t// Returns the height, in pixels, of an item in a list box.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(LB_GETITEMHEIGHT, nIndex, 0L);\n\t}\n\n\tinline int CListBox::GetItemRect(int nIndex, LPRECT lpRect) const\n\t// Retrieves the client coordinates of the specified list box item.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(LB_GETITEMRECT, nIndex, (LPARAM)lpRect);\n\t}\n\n\tinline LCID CListBox::GetLocale() const\n\t// Retrieves the locale of the list box. The high-order word contains the country/region code \n\t//  and the low-order word contains the language identifier.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (LCID)::SendMessage(m_hWnd, LB_GETLOCALE, 0, 0);\n\t}\n\n\tinline int CListBox::GetSel(int nIndex) const\n\t// Returns the selection state of a list box item.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(LB_GETSEL, nIndex, 0);\n\t}\n\n\tinline int CListBox::GetText(int nIndex, LPTSTR lpszBuffer) const\n\t// Retrieves the string associated with a specified item and the length of the string.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)::SendMessage(m_hWnd, LB_GETTEXT, nIndex, (LPARAM)lpszBuffer);\n\t}\n\n\tinline int CListBox::GetTextLen(int nIndex) const\n\t// Returns the length, in characters, of the string associated with a specified item.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage( LB_GETTEXTLEN, nIndex, 0);\n\t}\n\n\tinline int CListBox::GetTopIndex() const\n\t// Returns the index of the first visible item in a list box.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(LB_GETTOPINDEX, 0, 0);\n\t}\n\n\tinline UINT CListBox::ItemFromPoint(CPoint pt, BOOL& bOutside) const\n\t// Retrieves the zero-based index of the item nearest the specified point in a list box.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tDWORD dw = (DWORD)::SendMessage(m_hWnd, LB_ITEMFROMPOINT, 0, MAKELPARAM(pt.x, pt.y));\n\t\tbOutside = !!HIWORD(dw);\n\t\treturn LOWORD(dw);\n\t}\n\n\tinline void CListBox::SetColumnWidth(int cxWidth) const\n\t// Sets the width, in pixels, of all columns in a list box.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(LB_SETCOLUMNWIDTH, cxWidth, 0);\n\t}\n\n\tinline void CListBox::SetHorizontalExtent(int cxExtent) const\n\t// Sets the scrollable width, in pixels, of a list box.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(LB_SETHORIZONTALEXTENT, cxExtent, 0);\n\t}\n\n\tinline int CListBox::SetItemData(int nIndex, DWORD dwItemData) const\n\t// Associates a value with a list box item.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(LB_SETITEMDATA, nIndex, (LPARAM)dwItemData);\n\t}\n\n\tinline int CListBox::SetItemDataPtr(int nIndex, void* pData) const\n\t// Associates a value with a list box item.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn SetItemData(nIndex, (DWORD)(DWORD_PTR)pData);\n\t}\n\n\tinline int CListBox::SetItemHeight(int nIndex, UINT cyItemHeight) const\n\t// Sets the height, in pixels, of an item or items in a list box.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(LB_SETITEMHEIGHT, nIndex, MAKELONG(cyItemHeight, 0));\n\t}\n\n\tinline LCID CListBox::SetLocale(LCID nNewLocale) const\n\t// Sets the locale of a list box and returns the previous locale identifier.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (LCID)::SendMessage(m_hWnd, LB_SETLOCALE, (WPARAM)nNewLocale, 0);\n\t}\n\n\tinline BOOL CListBox::SetTabStops(int nTabStops, LPINT rgTabStops) const\n\t// Sets the tab stops to those specified in a specified array.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(LB_SETTABSTOPS, nTabStops, (LPARAM)rgTabStops);\n\t}\n\n\tinline void CListBox::SetTabStops() const\n\t// Sets the tab stops to those specified in a specified array.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(LB_SETTABSTOPS, 0, 0);\n\t}\n\n\tinline BOOL CListBox::SetTabStops(const int& cxEachStop) const\n\t// Sets the tab stops to those specified in a specified array.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(LB_SETTABSTOPS, 1, (LPARAM)(LPINT)&cxEachStop);\n\t}\n\n\tinline int CListBox::SetTopIndex(int nIndex) const\n\t// Scrolls the list box so the specified item is at the top of the visible range.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(LB_SETTOPINDEX, nIndex, 0);\n\t}\n\n\tinline int CListBox::GetCurSel() const\n\t// Returns the index of the currently selected item.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(LB_GETCURSEL, 0, 0);\n\t}\n\n\tinline int CListBox::SetCurSel(int nSelect) const\n\t// Selects a specified list box item.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(LB_SETCURSEL, nSelect, 0);\n\t}\n\n\tinline int CListBox::GetAnchorIndex() const\n\t// Returns the index of the item that the mouse last selected.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(LB_GETANCHORINDEX, 0, 0);\n\t}\n\n\tinline int CListBox::GetCaretIndex() const\n\t// Returns the index of the item that has the focus rectangle.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(LB_GETCARETINDEX, 0, 0L);\n\t}\n\n\tinline int CListBox::GetSelCount() const\n\t// Returns the number of selected items in a multiple-selection list box.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(LB_GETSELCOUNT, 0, 0);\n\t}\n\n\tinline int CListBox::GetSelItems(int nMaxItems, LPINT rgIndex) const\n\t// Creates an array of the indexes of all selected items in a multiple-selection list box \n\t//  and returns the total number of selected items.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(LB_GETSELITEMS, nMaxItems, (LPARAM)rgIndex);\n\t}\n\n\tinline int CListBox::SelItemRange(BOOL bSelect, int nFirstItem, int nLastItem) const\n\t// Selects a specified range of items in a list box.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tif (bSelect)\n\t\t\treturn (int)SendMessage(LB_SELITEMRANGEEX, nFirstItem, nLastItem);\n\t\telse\n\t\t\treturn (int)SendMessage(LB_SELITEMRANGEEX, nLastItem, nFirstItem);\n\t}\n\n\tinline void CListBox::SetAnchorIndex(int nIndex) const\n\t// Sets the item that the mouse last selected to a specified item.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(LB_SETANCHORINDEX, nIndex, 0);\n\t}\n\n\tinline int CListBox::SetCaretIndex(int nIndex, BOOL bScroll) const\n\t// Sets the focus rectangle to a specified list box item.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(LB_SETCARETINDEX, nIndex, MAKELONG(bScroll, 0));\n\t}\n\n\tinline int CListBox::SetSel(int nIndex, BOOL bSelect) const\n\t// Selects an item in a multiple-selection list box.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(LB_SETSEL, bSelect, nIndex);\n\t}\n\n\tinline int CListBox::AddString(LPCTSTR lpszItem) const\n\t// Adds a string to a list box and returns its index.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(LB_ADDSTRING, 0, (LPARAM)lpszItem);\n\t}\n\n\tinline int CListBox::DeleteString(UINT nIndex) const\n\t// Removes a string from a list box and returns the number of strings remaining in the list.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(LB_DELETESTRING, nIndex, 0);\n\t}\n\n\tinline int CListBox::Dir(UINT attr, LPCTSTR lpszWildCard) const\n\t// Adds a list of filenames to a list box and returns the index of the last filename added.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(LB_DIR, attr, (LPARAM)lpszWildCard);\n\t}\n\n\tinline int CListBox::FindString(int nStartAfter, LPCTSTR lpszItem) const\n\t// Returns the index of the first string in the list box that begins with a specified string.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(LB_FINDSTRING, nStartAfter, (LPARAM)lpszItem);\n\t}\n\n\tinline int CListBox::FindStringExact(int nIndexStart, LPCTSTR lpszFind) const\n\t// Returns the index of the string in the list box that is equal to a specified string.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(LB_FINDSTRINGEXACT, nIndexStart, (LPARAM)lpszFind);\n\t}\n\n\tinline int CListBox::InsertString(int nIndex, LPCTSTR lpszItem) const\n\t// Inserts a string at a specified index in a list box.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(LB_INSERTSTRING, nIndex, (LPARAM)lpszItem);\n\t}\n\n\tinline void CListBox::ResetContent() const\n\t// Removes all items from a list box.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(LB_RESETCONTENT, 0, 0);\n\t}\n\n\tinline int CListBox::SelectString(int nStartAfter, LPCTSTR lpszItem) const\n\t// Selects the first string it finds that matches a specified prefix.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)::SendMessage(m_hWnd, LB_SELECTSTRING, nStartAfter, (LPARAM)lpszItem);\n\t}\n\n\tinline void CListBox::PreRegisterClass(WNDCLASS &wc)\n\t{\n\t\t// Set the Window Class\n\t\twc.lpszClassName =  _T(\"ListBox\");\n\t}\n\n\n\t////////////////////////////////////////\n\t// Definitions for the CStatic class\n\t//\n\tinline HBITMAP CStatic::GetBitmap() const\n\t// Returns the handle to the bitmap for the static control\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HBITMAP)SendMessage(STM_GETIMAGE, IMAGE_BITMAP, 0);\n\t}\n\n\tinline HCURSOR CStatic::GetCursor() const\n\t// Returns the handle to the icon for the static control\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HCURSOR)SendMessage(STM_GETIMAGE, IMAGE_CURSOR, 0);\n\t}\n\n\tinline HENHMETAFILE CStatic::GetEnhMetaFile() const\n\t// Returns the handle to the enhanced metafile for the static control\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HENHMETAFILE)SendMessage(STM_GETIMAGE, IMAGE_ENHMETAFILE, 0);\n\t}\n\n\tinline HICON CStatic::GetIcon() const\n\t// Returns the handle to the icon for the static control\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HICON)SendMessage(STM_GETIMAGE, IMAGE_ICON, 0);\n\t}\n\n\tinline HBITMAP CStatic::SetBitmap(HBITMAP hBitmap) const\n\t// Sets the handle to the bitmap for the static control\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HBITMAP)SendMessage(STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBitmap);\n\t}\n\n\tinline HCURSOR CStatic::SetCursor(HCURSOR hCursor) const\n\t// Sets the handle to the cursor for the static control\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HCURSOR)SendMessage(STM_SETIMAGE, IMAGE_CURSOR, (LPARAM)hCursor);\n\t}\n\n\tinline HENHMETAFILE CStatic::SetEnhMetaFile(HENHMETAFILE hMetaFile) const\n\t// Sets the handle to the enhanced metafile for the static control\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HENHMETAFILE)SendMessage(STM_SETIMAGE, IMAGE_ENHMETAFILE, (LPARAM)hMetaFile);\n\t}\n\n\tinline HICON CStatic::SetIcon(HICON hIcon) const\n\t// Sets the handle to the icon for the static control\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HICON)SendMessage(STM_SETIMAGE, IMAGE_ICON, (LPARAM)hIcon);\n\t}\n\n\tinline void CStatic::PreRegisterClass(WNDCLASS &wc)\n\t{\n\t\t// Set the Window Class\n\t\twc.lpszClassName =  _T(\"Static\");\n\t}\n\n}\n\n#endif\t// _WIN32XX_STDCONTROLS_H_\n\n"
  },
  {
    "path": "external/win32cpp/include/tab.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n\n///////////////////////////////////////////////////////\n// tab.h\n//  Declaration of the CTab and CMDITab classes\n\n#ifndef _WIN32XX_TAB_H_\n#define _WIN32XX_TAB_H_\n\n#include \"wincore.h\"\n#include \"dialog.h\"\n#include \"gdi.h\"\n#include \"default_resource.h\"\n\nnamespace Win32xx\n{\n\n\tstruct TabPageInfo\n\t{\n\t\tTCHAR szTabText[MAX_MENU_STRING];\n\t\tint iImage;\t\t\t// index of this tab's image\n\t\tint idTab;\t\t\t// identifier for this tab (optional)\n\t\tCWnd* pView;\t\t// pointer to the view window\n\t};\n\n\tclass CTab : public CWnd\n\t{\n\tprotected:\n\t\t// Declaration of the CSelectDialog class, a nested class of CTab\n\t\t// It creates the dialog to choose which tab to activate\n\t\tclass CSelectDialog : public CDialog\n\t\t{\n\t\tpublic:\n\t\t\tCSelectDialog(LPCDLGTEMPLATE lpTemplate, CWnd* pParent = NULL);\n\t\t\tvirtual ~CSelectDialog() {}\n\t\t\tvirtual void AddItem(LPCTSTR szString);\n\t\t\tvirtual BOOL IsTab() const { return FALSE; }\n\n\t\tprotected:\n\t\t\tvirtual BOOL OnInitDialog();\n\t\t\tvirtual void OnOK();\n\t\t\tvirtual void OnCancel() { EndDialog(-2); }\n\n\t\tprivate:\n\t\t\tCSelectDialog(const CSelectDialog&);\t\t\t\t// Disable copy construction\n\t\t\tCSelectDialog& operator = (const CSelectDialog&); // Disable assignment operator\n\n\t\t\tstd::vector<tString> m_vItems;\n\t\t\tint IDC_LIST;\n\n\t\t};\n\tpublic:\n\t\tCTab();\n\t\tvirtual ~CTab();\n\t\tvirtual int  AddTabPage(WndPtr pView, LPCTSTR szTabText, HICON hIcon, UINT idTab);\n\t\tvirtual int  AddTabPage(WndPtr pView, LPCTSTR szTabText, int nID_Icon, UINT idTab = 0);\n\t\tvirtual int  AddTabPage(WndPtr pView, LPCTSTR szTabText);\n\t\tvirtual CRect GetCloseRect() const;\n\t\tvirtual CRect GetListRect() const;\n\t\tvirtual HMENU GetListMenu();\n\t\tvirtual BOOL GetTabsAtTop() const;\n\t\tvirtual int  GetTabIndex(CWnd* pWnd) const;\n\t\tvirtual TabPageInfo GetTabPageInfo(UINT nTab) const;\n\t\tvirtual int GetTextHeight() const;\n\t\tvirtual void RecalcLayout();\n\t\tvirtual void RemoveTabPage(int nPage);\n\t\tvirtual void SelectPage(int nPage);\n\t\tvirtual void SetFixedWidth(BOOL bEnabled);\n\t\tvirtual void SetOwnerDraw(BOOL bEnabled);\n\t\tvirtual void SetShowButtons(BOOL bShow);\n\t\tvirtual void SetTabIcon(int i, HICON hIcon);\n\t\tvirtual void SetTabsAtTop(BOOL bTop);\n\t\tvirtual void SetTabText(UINT nTab, LPCTSTR szText);\n\t\tvirtual void SwapTabs(UINT nTab1, UINT nTab2);\n\n\t\t// Attributes\n\t\tstd::vector <TabPageInfo>& GetAllTabs() const { return (std::vector <TabPageInfo>&) m_vTabPageInfo; }\n\t\tHIMAGELIST GetImageList() const { return m_himlTab; }\n\t\tBOOL GetShowButtons() const { return m_bShowButtons; }\n\t\tint GetTabHeight() const { return m_nTabHeight; }\n\t\tCWnd* GetActiveView() const\t\t{ return m_pActiveView; }\n\t\tvoid SetTabHeight(int nTabHeight) { m_nTabHeight = nTabHeight; NotifyChanged();}\n\n\t\t// Wrappers for Win32 Macros\n\t\tvoid AdjustRect(BOOL fLarger, RECT *prc) const;\n\t\tint  GetCurFocus() const;\n\t\tint  GetCurSel() const;\n\t\tBOOL GetItem(int iItem, LPTCITEM pitem) const;\n\t\tint  GetItemCount() const;\n\t\tint  HitTest(TCHITTESTINFO& info) const;\n\t\tvoid SetCurFocus(int iItem) const;\n\t\tint  SetCurSel(int iItem) const;\n\t\tDWORD SetItemSize(int cx, int cy) const;\n\t\tint  SetMinTabWidth(int cx) const;\n\t\tvoid SetPadding(int cx, int cy) const;\n\n\tprotected:\n\t\tvirtual void\tDrawCloseButton(CDC& DrawDC);\n\t\tvirtual void\tDrawListButton(CDC& DrawDC);\n\t\tvirtual void\tDrawTabs(CDC& dcMem);\n\t\tvirtual void\tDrawTabBorders(CDC& dcMem, CRect& rcTab);\n\t\tvirtual void    OnCreate();\n\t\tvirtual void    OnLButtonDown(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void    OnLButtonUp(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void    OnMouseLeave(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void    OnMouseMove(WPARAM wParam, LPARAM lParam);\n\t\tvirtual LRESULT OnNCHitTest(WPARAM wParam, LPARAM lParam);\n\t\tvirtual LRESULT OnNotifyReflect(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void\tNotifyChanged();\n\t\tvirtual void\tPaint();\n\t\tvirtual void    PreCreate(CREATESTRUCT& cs);\n\t\tvirtual void\tPreRegisterClass(WNDCLASS &wc);\n\t\tvirtual void    SetTabSize();\n\t\tvirtual void\tShowListDialog();\n\t\tvirtual void\tShowListMenu();\n\t\tvirtual LRESULT WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\n\tprivate:\n\t\tCTab(const CTab&);\t\t\t\t// Disable copy construction\n\t\tCTab& operator = (const CTab&); // Disable assignment operator\n\n\t\tSIZE  GetMaxTabSize() const;\n\t\tvoid ShowActiveView(CWnd* pView);\n\n\t\tstd::vector<TabPageInfo> m_vTabPageInfo;\n\t\tstd::vector<WndPtr> m_vTabViews;\n\t\tCFont m_Font;\n\t\tHIMAGELIST m_himlTab;\n\t\tHMENU m_hListMenu;\n\t\tCWnd* m_pActiveView;\n\t\tBOOL m_bShowButtons;\t// Show or hide the close and list button\n\t\tBOOL m_IsTracking;\n\t\tBOOL m_IsClosePressed;\n\t\tBOOL m_IsListPressed;\n\t\tBOOL m_IsListMenuActive;\n\t\tint m_nTabHeight;\n\t};\n\n\t////////////////////////////////////////\n\t// Declaration of the CTabbedMDI class\n\tclass CTabbedMDI : public CWnd\n\t{\n\tpublic:\n\t\tCTabbedMDI();\n\t\tvirtual ~CTabbedMDI();\n\t\tvirtual CWnd* AddMDIChild(CWnd* pView, LPCTSTR szTabText, int idMDIChild = 0);\n\t\tvirtual void  CloseActiveMDI();\n\t\tvirtual void  CloseAllMDIChildren();\n\t\tvirtual void  CloseMDIChild(int nTab);\n\t\tvirtual CWnd* GetActiveMDIChild() const;\n\t\tvirtual int\t  GetActiveMDITab() const;\n\t\tvirtual CWnd* GetMDIChild(int nTab) const;\n\t\tvirtual int   GetMDIChildCount() const;\n\t\tvirtual int   GetMDIChildID(int nTab) const;\n\t\tvirtual LPCTSTR GetMDIChildTitle(int nTab) const;\n\t\tvirtual HMENU GetListMenu() const { return GetTab().GetListMenu(); }\n\t\tvirtual CTab& GetTab() const\t{return (CTab&)m_Tab;}\n\t\tvirtual BOOL LoadRegistrySettings(tString tsRegistryKeyName);\n\t\tvirtual void RecalcLayout();\n\t\tvirtual BOOL SaveRegistrySettings(tString tsRegistryKeyName);\n\t\tvirtual void SetActiveMDIChild(CWnd* pWnd);\n\t\tvirtual void SetActiveMDITab(int nTab);\n\n\tprotected:\n\t\tvirtual HWND    Create(CWnd* pParent);\n\t\tvirtual CWnd*   NewMDIChildFromID(int idMDIChild);\n\t\tvirtual void\tOnCreate();\n\t\tvirtual void    OnDestroy(WPARAM wParam, LPARAM lParam);\n\t\tvirtual LRESULT OnNotify(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void    OnWindowPosChanged(WPARAM wParam, LPARAM lParam);\n\t\tvirtual LRESULT WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\n\tprivate:\n\t\tCTabbedMDI(const CTabbedMDI&);\t\t\t\t// Disable copy construction\n\t\tCTabbedMDI& operator = (const CTabbedMDI&); // Disable assignment operator\n\n\t\tCTab m_Tab;\n\t};\n\n}\n\n\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n\nnamespace Win32xx\n{\n\n\t/////////////////////////////////////////////////////////////\n\t// Definitions for the CSelectDialog class nested within CTab\n\t//\n\tinline CTab::CSelectDialog::CSelectDialog(LPCDLGTEMPLATE lpTemplate, CWnd* pParent) :\n\t\t\t\t\tCDialog(lpTemplate, pParent), IDC_LIST(121)\n\t{\n\t}\n\n\tinline BOOL CTab::CSelectDialog::OnInitDialog()\n\t{\n\t\tfor (UINT u = 0; u < m_vItems.size(); ++u)\n\t\t{\n\t\t\tSendDlgItemMessage(IDC_LIST, LB_ADDSTRING, 0, (LPARAM) m_vItems[u].c_str());\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tinline void CTab::CSelectDialog::AddItem(LPCTSTR szString)\n\t{\n\t\tm_vItems.push_back(szString);\n\t}\n\n\tinline void CTab::CSelectDialog::OnOK()\n\t{\n\t\tint iSelect = (int)SendDlgItemMessage(IDC_LIST, LB_GETCURSEL, 0, 0);\n\t\tif (iSelect != LB_ERR) \n\t\t\tEndDialog(iSelect);\n\t\telse\n\t\t\tEndDialog(-2);\n\t}\n\n\n\t//////////////////////////////////////////////////////////\n\t// Definitions for the CTab class\n\t//\n\tinline CTab::CTab() : m_hListMenu(NULL), m_pActiveView(NULL), m_bShowButtons(FALSE), m_IsTracking(FALSE), m_IsClosePressed(FALSE),\n\t\t\t\t\t\t\tm_IsListPressed(FALSE), m_IsListMenuActive(FALSE), m_nTabHeight(0)\n\t{\n\t\t// Create and assign the image list\n\t\tm_himlTab = ImageList_Create(16, 16, ILC_MASK|ILC_COLOR32, 0, 0);\n\n\t\t// Set the tab control's font\n\t\tNONCLIENTMETRICS info = {0};\n\t\tinfo.cbSize = GetSizeofNonClientMetrics();\n\t\tSystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(info), &info, 0);\n\t\tm_Font.CreateFontIndirect(&info.lfStatusFont);\n\t}\n\n\tinline CTab::~CTab()\n\t{\n\t\tImageList_Destroy(m_himlTab);\n\t\t\n\t\tif (IsMenu(m_hListMenu)) ::DestroyMenu(m_hListMenu);\n\t}\n\n\tinline int CTab::AddTabPage(WndPtr pView, LPCTSTR szTabText, HICON hIcon, UINT idTab)\n\t{\n\t\tassert(pView.get());\n\t\tassert(lstrlen(szTabText) < MAX_MENU_STRING);\n\n\t\tm_vTabViews.push_back(pView);\n\n\t\tTabPageInfo tpi = {0};\n\t\ttpi.pView = pView.get();\n\t\ttpi.idTab = idTab;\n\t\tlstrcpyn(tpi.szTabText, szTabText, MAX_MENU_STRING);\n\t\tif (hIcon)\n\t\t\ttpi.iImage = ImageList_AddIcon(GetImageList(), hIcon);\n\t\telse\n\t\t\ttpi.iImage = -1;\n\n\t\tint iNewPage = (int)m_vTabPageInfo.size();\n\t\tm_vTabPageInfo.push_back(tpi);\n\n\t\tif (m_hWnd)\n\t\t{\n\t\t\tTCITEM tie = {0};\n\t\t\ttie.mask = TCIF_TEXT | TCIF_IMAGE;\n\t\t\ttie.iImage = tpi.iImage;\n\t\t\ttie.pszText = tpi.szTabText;\n\t\t\tTabCtrl_InsertItem(m_hWnd, iNewPage, &tie);\n\n\t\t\tSetTabSize();\n\t\t\tSelectPage(iNewPage);\n\t\t\tNotifyChanged();\n\t\t}\n\n\t\treturn iNewPage;\n\t}\n\n\tinline int CTab::AddTabPage(WndPtr pView, LPCTSTR szTabText, int idIcon, UINT idTab /* = 0*/)\n\t{\n\t\tHICON hIcon = (HICON)LoadImage(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(idIcon), IMAGE_ICON, 0, 0, LR_SHARED);\n\t\treturn AddTabPage(pView, szTabText, hIcon, idTab);\n\t}\n\n\tinline int CTab::AddTabPage(WndPtr pView, LPCTSTR szTabText)\n\t{\n\t\treturn AddTabPage(pView, szTabText, (HICON)0, 0);\n\t}\n\n\tinline void CTab::DrawCloseButton(CDC& DrawDC)\n\t{\n\t\t// The close button isn't displayed on Win95\n\t\tif (GetWinVersion() == 1400)  return;\n\n\t\tif (!m_bShowButtons) return;\n\t\tif (!GetActiveView()) return;\n\t\tif (!(GetWindowLongPtr(GWL_STYLE) & TCS_FIXEDWIDTH)) return;\n\t\tif (!(GetWindowLongPtr(GWL_STYLE) & TCS_OWNERDRAWFIXED)) return;\n\n\t\t// Determine the close button's drawing position relative to the window\n\t\tCRect rcClose = GetCloseRect();\n\n\t\tCPoint pt = GetCursorPos();\n\t\tScreenToClient(pt);\n\t\tUINT uState = rcClose.PtInRect(pt)? m_IsClosePressed? 2: 1: 0;\n\n\t\t// Draw the outer highlight for the close button\n\t\tif (!IsRectEmpty(&rcClose))\n\t\t{\n\t\t\tswitch (uState)\n\t\t\t{\n\t\t\tcase 0:\n\t\t\t\t{\n\t\t\t\t\tDrawDC.CreatePen(PS_SOLID, 1, RGB(232, 228, 220));\n\n\t\t\t\t\tDrawDC.MoveTo(rcClose.left, rcClose.bottom);\n\t\t\t\t\tDrawDC.LineTo(rcClose.right, rcClose.bottom);\n\t\t\t\t\tDrawDC.LineTo(rcClose.right, rcClose.top);\n\t\t\t\t\tDrawDC.LineTo(rcClose.left, rcClose.top);\n\t\t\t\t\tDrawDC.LineTo(rcClose.left, rcClose.bottom);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\tcase 1:\n\t\t\t\t{\n\t\t\t\t\t// Draw outline, white at top, black on bottom\n\t\t\t\t\tDrawDC.CreatePen(PS_SOLID, 1, RGB(0, 0, 0));\n\t\t\t\t\tDrawDC.MoveTo(rcClose.left, rcClose.bottom);\n\t\t\t\t\tDrawDC.LineTo(rcClose.right, rcClose.bottom);\n\t\t\t\t\tDrawDC.LineTo(rcClose.right, rcClose.top);\n\t\t\t\t\tDrawDC.CreatePen(PS_SOLID, 1, RGB(255, 255, 255));\n\t\t\t\t\tDrawDC.LineTo(rcClose.left, rcClose.top);\n\t\t\t\t\tDrawDC.LineTo(rcClose.left, rcClose.bottom);\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\t{\n\t\t\t\t\t// Draw outline, black on top, white on bottom\n\t\t\t\t\tDrawDC.CreatePen(PS_SOLID, 1, RGB(255, 255, 255));\n\t\t\t\t\tDrawDC.MoveTo(rcClose.left, rcClose.bottom);\n\t\t\t\t\tDrawDC.LineTo(rcClose.right, rcClose.bottom);\n\t\t\t\t\tDrawDC.LineTo(rcClose.right, rcClose.top);\n\t\t\t\t\tDrawDC.CreatePen(PS_SOLID, 1, RGB(0, 0, 0));\n\t\t\t\t\tDrawDC.LineTo(rcClose.left, rcClose.top);\n\t\t\t\t\tDrawDC.LineTo(rcClose.left, rcClose.bottom);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Manually draw close button\n\t\t\tDrawDC.CreatePen(PS_SOLID, 1, RGB(64, 64, 64));\n\n\t\t\tDrawDC.MoveTo(rcClose.left + 3, rcClose.top +3);\n\t\t\tDrawDC.LineTo(rcClose.right - 2, rcClose.bottom -2);\n\n\t\t\tDrawDC.MoveTo(rcClose.left + 4, rcClose.top +3);\n\t\t\tDrawDC.LineTo(rcClose.right - 2, rcClose.bottom -3);\n\n\t\t\tDrawDC.MoveTo(rcClose.left + 3, rcClose.top +4);\n\t\t\tDrawDC.LineTo(rcClose.right - 3, rcClose.bottom -2);\n\n\t\t\tDrawDC.MoveTo(rcClose.right -3, rcClose.top +3);\n\t\t\tDrawDC.LineTo(rcClose.left + 2, rcClose.bottom -2);\n\n\t\t\tDrawDC.MoveTo(rcClose.right -3, rcClose.top +4);\n\t\t\tDrawDC.LineTo(rcClose.left + 3, rcClose.bottom -2);\n\n\t\t\tDrawDC.MoveTo(rcClose.right -4, rcClose.top +3);\n\t\t\tDrawDC.LineTo(rcClose.left + 2, rcClose.bottom -3);\n\t\t}\n\t}\n\n\tinline void CTab::DrawListButton(CDC& DrawDC)\n\t{\n\t\t// The list button isn't displayed on Win95\n\t\tif (GetWinVersion() == 1400)  return;\n\n\t\tif (!m_bShowButtons) return;\n\t\tif (!GetActiveView()) return;\n\t\tif (!(GetWindowLongPtr(GWL_STYLE) & TCS_FIXEDWIDTH)) return;\n\t\tif (!(GetWindowLongPtr(GWL_STYLE) & TCS_OWNERDRAWFIXED)) return;\n\n\t\t// Determine the list button's drawing position relative to the window\n\t\tCRect rcList = GetListRect();\n\n\t\tCPoint pt = GetCursorPos();\n\t\tScreenToClient(pt);\n\t\tUINT uState = rcList.PtInRect(pt)? 1: 0;\n\t\tif (m_IsListMenuActive) uState = 2;\n\n\t\t// Draw the outer highlight for the list button\n\t\tif (!IsRectEmpty(&rcList))\n\t\t{\n\t\t\tswitch (uState)\n\t\t\t{\n\t\t\tcase 0:\n\t\t\t\t{\n\t\t\t\t\tDrawDC.CreatePen(PS_SOLID, 1, RGB(232, 228, 220));\n\n\t\t\t\t\tDrawDC.MoveTo(rcList.left, rcList.bottom);\n\t\t\t\t\tDrawDC.LineTo(rcList.right, rcList.bottom);\n\t\t\t\t\tDrawDC.LineTo(rcList.right, rcList.top);\n\t\t\t\t\tDrawDC.LineTo(rcList.left, rcList.top);\n\t\t\t\t\tDrawDC.LineTo(rcList.left, rcList.bottom);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\tcase 1:\n\t\t\t\t{\n\t\t\t\t\t// Draw outline, white at top, black on bottom\n\t\t\t\t\tDrawDC.CreatePen(PS_SOLID, 1, RGB(0, 0, 0));\n\t\t\t\t\tDrawDC.MoveTo(rcList.left, rcList.bottom);\n\t\t\t\t\tDrawDC.LineTo(rcList.right, rcList.bottom);\n\t\t\t\t\tDrawDC.LineTo(rcList.right, rcList.top);\n\t\t\t\t\tDrawDC.CreatePen(PS_SOLID, 1, RGB(255, 255, 255));\n\t\t\t\t\tDrawDC.LineTo(rcList.left, rcList.top);\n\t\t\t\t\tDrawDC.LineTo(rcList.left, rcList.bottom);\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\t{\n\t\t\t\t\t// Draw outline, black on top, white on bottom\n\t\t\t\t\tDrawDC.CreatePen(PS_SOLID, 1, RGB(255, 255, 255));\n\t\t\t\t\tDrawDC.MoveTo(rcList.left, rcList.bottom);\n\t\t\t\t\tDrawDC.LineTo(rcList.right, rcList.bottom);\n\t\t\t\t\tDrawDC.LineTo(rcList.right, rcList.top);\n\t\t\t\t\tDrawDC.CreatePen(PS_SOLID, 1, RGB(0, 0, 0));\n\t\t\t\t\tDrawDC.LineTo(rcList.left, rcList.top);\n\t\t\t\t\tDrawDC.LineTo(rcList.left, rcList.bottom);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Manually draw list button\n\t\t\tDrawDC.CreatePen(PS_SOLID, 1, RGB(64, 64, 64));\n\n\t\t\tint MaxLength = (int)(0.65 * rcList.Width());\n\t\t\tint topGap = 1 + rcList.Height()/3;\n\t\t\tfor (int i = 0; i <= MaxLength/2; i++)\n\t\t\t{\n\t\t\t\tint Length = MaxLength - 2*i;\n\t\t\t\tDrawDC.MoveTo(rcList.left +1 + (rcList.Width() - Length)/2, rcList.top +topGap +i);\n\t\t\t\tDrawDC.LineTo(rcList.left +1 + (rcList.Width() - Length)/2 + Length, rcList.top +topGap +i);\n\t\t\t}\n\t\t}\n\t}\n\n\tinline void CTab::DrawTabs(CDC& dcMem)\n\t{\n\t\t// Draw the tab buttons:\n\t\tfor (int i = 0; i < TabCtrl_GetItemCount(m_hWnd); ++i)\n\t\t{\n\t\t\tCRect rcItem;\n\t\t\tTabCtrl_GetItemRect(m_hWnd, i, &rcItem);\n\t\t\tif (!rcItem.IsRectEmpty())\n\t\t\t{\n\t\t\t\tif (i == TabCtrl_GetCurSel(m_hWnd))\n\t\t\t\t{\n\t\t\t\t\tdcMem.CreateSolidBrush(RGB(248,248,248));\n\t\t\t\t\tdcMem.SetBkColor(RGB(248,248,248));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tdcMem.CreateSolidBrush(RGB(200,200,200));\n\t\t\t\t\tdcMem.SetBkColor(RGB(200,200,200));\n\t\t\t\t}\n\n\t\t\t\tdcMem.CreatePen(PS_SOLID, 1, RGB(160, 160, 160));\n\t\t\t\tdcMem.RoundRect(rcItem.left+1, rcItem.top, rcItem.right+2, rcItem.bottom, 6, 6);\n\n\t\t\t\tif (rcItem.Width() >= 24)\n\t\t\t\t{\n\t\t\t\t\tTCHAR szText[30];\n\t\t\t\t\tTCITEM tcItem = {0};\n\t\t\t\t\ttcItem.mask = TCIF_TEXT | TCIF_IMAGE;\n\t\t\t\t\ttcItem.cchTextMax = 30;\n\t\t\t\t\ttcItem.pszText = szText;\n\t\t\t\t\tTabCtrl_GetItem(m_hWnd, i, &tcItem);\n\t\t\t\t\tint xImage;\n\t\t\t\t\tint yImage;\n\t\t\t\t\tint yOffset = 0;\n\t\t\t\t\tif (ImageList_GetIconSize(m_himlTab, &xImage, &yImage))\n\t\t\t\t\t\tyOffset = (rcItem.Height() - yImage)/2;\n\n\t\t\t\t\t// Draw the icon\n\t\t\t\t\tImageList_Draw(m_himlTab, tcItem.iImage, dcMem, rcItem.left+5, rcItem.top+yOffset, ILD_NORMAL);\n\n\t\t\t\t\t// Draw the text\n\t\t\t\t\tdcMem.SelectObject(&m_Font);\n\n\t\t\t\t\t// Calculate the size of the text\n\t\t\t\t\tCRect rcText = rcItem;\n\n\t\t\t\t\tint iImageSize = 20;\n\t\t\t\t\tint iPadding = 4;\n\t\t\t\t\tif (tcItem.iImage >= 0)\n\t\t\t\t\t\trcText.left += iImageSize;\n\n\t\t\t\t\trcText.left += iPadding;\n\t\t\t\t\tdcMem.DrawText(szText, -1, rcText, DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tinline void CTab::DrawTabBorders(CDC& dcMem, CRect& rcTab)\n\t{\n\t\tBOOL IsBottomTab = (BOOL)GetWindowLongPtr(GWL_STYLE) & TCS_BOTTOM;\n\n\t\t// Draw a lighter rectangle touching the tab buttons\n\t\tCRect rcItem;\n\t\tTabCtrl_GetItemRect(m_hWnd, 0, &rcItem);\n\t\tint left = rcItem.left +1;\n\t\tint right = rcTab.right;\n\t\tint top = rcTab.bottom;\n\t\tint bottom = top + 3;\n\n\t\tif (!IsBottomTab)\n\t\t{\n\t\t\tbottom = MAX(rcTab.top, m_nTabHeight +4);\n\t\t\ttop = bottom -3;\n\t\t}\n\n\t\tdcMem.CreateSolidBrush(RGB(248,248,248));\n\t\tdcMem.CreatePen(PS_SOLID, 1, RGB(248,248,248));\n\t\tif (!rcItem.IsRectEmpty())\n\t\t{\n\t\t\tdcMem.Rectangle(left, top, right, bottom);\n\n\t\t\t// Draw a darker line below the rectangle\n\t\t\tdcMem.CreatePen(PS_SOLID, 1, RGB(160, 160, 160));\n\t\t\tif (IsBottomTab)\n\t\t\t{\n\t\t\t\tdcMem.MoveTo(left-1, bottom);\n\t\t\t\tdcMem.LineTo(right, bottom);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tdcMem.MoveTo(left-1, top-1);\n\t\t\t\tdcMem.LineTo(right, top-1);\n\t\t\t}\n\n\t\t\t// Draw a lighter line over the darker line for the selected tab\n\t\t\tdcMem.CreatePen(PS_SOLID, 1, RGB(248,248,248));\n\t\t\tTabCtrl_GetItemRect(m_hWnd, TabCtrl_GetCurSel(m_hWnd), &rcItem);\n\t\t\tOffsetRect(&rcItem, 1, 1);\n\n\t\t\tif (IsBottomTab)\n\t\t\t{\n\t\t\t\tdcMem.MoveTo(rcItem.left, bottom);\n\t\t\t\tdcMem.LineTo(rcItem.right, bottom);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tdcMem.MoveTo(rcItem.left, top-1);\n\t\t\t\tdcMem.LineTo(rcItem.right, top-1);\n\t\t\t}\n\t\t}\n\t}\n\n\tinline CRect CTab::GetCloseRect() const\n\t{\n\t\tCRect rcClose;\n\t\tif (GetShowButtons())\n\t\t{\n\t\t\trcClose= GetClientRect();\n\t\t\tint Gap = 2;\n\t\t\tint cx = GetSystemMetrics(SM_CXSMICON) -1;\n\t\t\tint cy = GetSystemMetrics(SM_CYSMICON) -1;\n\t\t\trcClose.right -= Gap;\n\t\t\trcClose.left = rcClose.right - cx;\n\n\t\t\tif (GetTabsAtTop())\n\t\t\t\trcClose.top = Gap;\n\t\t\telse\n\t\t\t\trcClose.top = MAX(Gap, rcClose.bottom - m_nTabHeight);\n\n\t\t\trcClose.bottom = rcClose.top + cy;\n\t\t}\n\t\treturn rcClose;\n\t}\n\n\tinline HMENU CTab::GetListMenu()\n\t{\n\t\tif (IsMenu(m_hListMenu))\n\t\t\t::DestroyMenu(m_hListMenu);\n\t\t\n\t\tm_hListMenu = CreatePopupMenu();\n\n\t\t// Add the menu items\n\t\tfor(UINT u = 0; u < MIN(GetAllTabs().size(), 9); ++u)\n\t\t{\n\t\t\tTCHAR szMenuString[MAX_MENU_STRING+1];\n\t\t\tTCHAR szTabText[MAX_MENU_STRING];\n\t\t\tlstrcpyn(szTabText, GetAllTabs()[u].szTabText, MAX_MENU_STRING -4);\n\t\t\twsprintf(szMenuString, _T(\"&%d %s\"), u+1, szTabText);\n\t\t\tAppendMenu(m_hListMenu, MF_STRING, IDW_FIRSTCHILD +u, szMenuString);\n\t\t}\n\t\tif (GetAllTabs().size() >= 10)\n\t\t\tAppendMenu(m_hListMenu, MF_STRING, IDW_FIRSTCHILD +9, _T(\"More Windows\"));\n\n\t\t// Add a checkmark to the menu\n\t\tint iSelected = GetCurSel();\n\t\tif (iSelected < 9)\n\t\t\tCheckMenuItem(m_hListMenu, iSelected, MF_BYPOSITION|MF_CHECKED);\n\n\t\treturn m_hListMenu;\n\t}\n\n\tinline CRect CTab::GetListRect() const\n\t{\n\t\tCRect rcList;\n\t\tif (GetShowButtons())\n\t\t{\n\t\t\tCRect rcClose = GetCloseRect();\n\t\t\trcList = rcClose;\n\t\t\trcList.OffsetRect( -(rcClose.Width() + 2), 0);\n\t\t\trcList.InflateRect(-1, 0);\n\t\t}\n\t\treturn rcList;\n\t}\n\n\tinline SIZE CTab::GetMaxTabSize() const\n\t{\n\t\tCSize Size;\n\n\t\tfor (int i = 0; i < TabCtrl_GetItemCount(m_hWnd); i++)\n\t\t{\n\t\t\tCClientDC dcClient(this);\n\t\t\tdcClient.SelectObject(&m_Font);\n\t\t\tstd::vector<TCHAR> vTitle(MAX_MENU_STRING, _T('\\0'));\n\t\t\tTCHAR* pszTitle = &vTitle.front();\n\t\t\tTCITEM tcItem = {0};\n\t\t\ttcItem.mask = TCIF_TEXT |TCIF_IMAGE;\n\t\t\ttcItem.cchTextMax = MAX_MENU_STRING;\n\t\t\ttcItem.pszText = pszTitle;\n\t\t\tTabCtrl_GetItem(m_hWnd, i, &tcItem);\n\t\t\tCSize TempSize = dcClient.GetTextExtentPoint32(pszTitle, lstrlen(pszTitle));\n\n\t\t\tint iImageSize = 0;\n\t\t\tint iPadding = 6;\n\t\t\tif (tcItem.iImage >= 0)\n\t\t\t\tiImageSize = 20;\n\t\t\tTempSize.cx += iImageSize + iPadding;\n\n\t\t\tif (TempSize.cx > Size.cx)\n\t\t\t\tSize = TempSize;\n\t\t}\n\n\t\treturn Size;\n\t}\n\n\tinline BOOL CTab::GetTabsAtTop() const\n\t// Returns TRUE if the contol's tabs are placed at the top\n\t{\n\t\tDWORD dwStyle = (DWORD)GetWindowLongPtr(GWL_STYLE);\n\t\treturn (!(dwStyle & TCS_BOTTOM));\n\t}\n\n\tinline int CTab::GetTextHeight() const\n\t{\n\t\tCClientDC dcClient(this);\n\t\tdcClient.SelectObject(&m_Font);\n\t\tCSize szText = dcClient.GetTextExtentPoint32(_T(\"Text\"), lstrlen(_T(\"Text\")));\n\t\treturn szText.cy;\n\t}\n\n\tinline int CTab::GetTabIndex(CWnd* pWnd) const\n\t{\n\t\tassert(pWnd);\n\n\t\tfor (int i = 0; i < (int)m_vTabPageInfo.size(); ++i)\n\t\t{\n\t\t\tif (m_vTabPageInfo[i].pView == pWnd)\n\t\t\t\treturn i;\n\t\t}\n\n\t\treturn -1;\n\t}\n\n\tinline TabPageInfo CTab::GetTabPageInfo(UINT nTab) const\n\t{\n\t\tassert (nTab < m_vTabPageInfo.size());\n\n\t\treturn m_vTabPageInfo[nTab];\n\t}\n\n\tinline void CTab::NotifyChanged()\n\t{\n\t\tNMHDR nmhdr = {0};\n\t\tnmhdr.hwndFrom = m_hWnd;\n\t\tnmhdr.code = UWM_TAB_CHANGED;\n\t\tGetParent()->SendMessage(WM_NOTIFY, 0L, (LPARAM)&nmhdr);\n\t}\n\n\tinline void CTab::OnCreate()\n\t{\n\t\tSetFont(&m_Font, TRUE);\n\t\t\n\t\t// Assign ImageList unless we are owner drawn\n\t\tif (!(GetWindowLongPtr(GWL_STYLE) & TCS_OWNERDRAWFIXED))\n\t\t\tTabCtrl_SetImageList(m_hWnd, m_himlTab);\n\n\t\tfor (int i = 0; i < (int)m_vTabPageInfo.size(); ++i)\n\t\t{\n\t\t\t// Add tabs for each view.\n\t\t\tTCITEM tie = {0};\n\t\t\ttie.mask = TCIF_TEXT | TCIF_IMAGE;\n\t\t\ttie.iImage = m_vTabPageInfo[i].iImage;\n\t\t\ttie.pszText = m_vTabPageInfo[i].szTabText;\n\t\t\tTabCtrl_InsertItem(m_hWnd, i, &tie);\n\t\t}\n\n\t\tint HeightGap = 5;\n\t\tSetTabHeight(MAX(20, (GetTextHeight() + HeightGap)));\n\t\tSelectPage(0);\n\t}\n\n\tinline void CTab::OnLButtonDown(WPARAM /*wParam*/, LPARAM lParam)\n\t{\n\t\tCPoint pt(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));\n\n\t\tif (GetCloseRect().PtInRect(pt))\n\t\t{\n\t\t\tm_IsClosePressed = TRUE;\n\t\t\tSetCapture();\n\t\t\tCClientDC dc(this);\n\t\t\tDrawCloseButton(dc);\n\t\t}\n\t\telse\n\t\t\tm_IsClosePressed = FALSE;\n\n\t\tif (GetListRect().PtInRect(pt))\n\t\t{\n\t\t\tShowListMenu();\n\t\t}\n\t}\n\n\tinline void CTab::OnLButtonUp(WPARAM /*wParam*/, LPARAM lParam)\n\t{\n\t\tReleaseCapture();\n\t\tCPoint pt(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));\n\t\tif (m_IsClosePressed && GetCloseRect().PtInRect(pt))\n\t\t{\n\t\t\tRemoveTabPage(GetCurSel());\n\t\t\tif (GetActiveView())\n\t\t\t\tGetActiveView()->RedrawWindow();\n\t\t}\n\n\t\tm_IsClosePressed = FALSE;\n\t}\n\n\tinline void CTab::OnMouseLeave(WPARAM /*wParam*/, LPARAM /*lParam*/)\n\t{\n\t\tCClientDC dc(this);\n\t\tDrawCloseButton(dc);\n\t\tDrawListButton(dc);\n\n\t\tm_IsTracking = FALSE;\n\t}\n\n\tinline void CTab::OnMouseMove(WPARAM /*wParam*/, LPARAM /*lParam*/)\n\t{\n\t\tif (!m_IsListMenuActive && m_IsListPressed)\n\t\t{\n\t\t\tm_IsListPressed = FALSE;\n\t\t}\n\n\t\tif (!m_IsTracking)\n\t\t{\n\t\t\tTRACKMOUSEEVENT TrackMouseEventStruct = {0};\n\t\t\tTrackMouseEventStruct.cbSize = sizeof(TrackMouseEventStruct);\n\t\t\tTrackMouseEventStruct.dwFlags = TME_LEAVE;\n\t\t\tTrackMouseEventStruct.hwndTrack = m_hWnd;\n\t\t\t_TrackMouseEvent(&TrackMouseEventStruct);\n\t\t\tm_IsTracking = TRUE;\n\t\t}\n\n\t\tCClientDC dc(this);\n\t\tDrawCloseButton(dc);\n\t\tDrawListButton(dc);\n\t}\n\n\tinline LRESULT CTab::OnNCHitTest(WPARAM wParam, LPARAM lParam)\n\t{\n\t\t// Ensure we have an arrow cursor when the tab has no view window\n\t\tif (0 == GetAllTabs().size())\n\t\t\tSetCursor(LoadCursor(NULL, IDC_ARROW));\n\n\t\t// Cause WM_LBUTTONUP and WM_LBUTTONDOWN messages to be sent for buttons\n\t\tCPoint pt(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));\n\t\tScreenToClient(pt);\n\t\tif (GetCloseRect().PtInRect(pt)) return HTCLIENT;\n\t\tif (GetListRect().PtInRect(pt))  return HTCLIENT;\n\n\t\treturn CWnd::WndProcDefault(WM_NCHITTEST, wParam, lParam);\n\t}\n\n\tinline LRESULT CTab::OnNotifyReflect(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\n\t\tswitch (((LPNMHDR)lParam)->code)\n\t\t{\n\t\tcase TCN_SELCHANGE:\n\t\t\t{\n\t\t\t\t// Display the newly selected tab page\n\t\t\t\tint nPage = GetCurSel();\n\t\t\t\tShowActiveView(m_vTabPageInfo[nPage].pView);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\treturn 0L;\n\t}\n\n\tinline void CTab::Paint()\n\t{\n\t\t// Microsoft's drawing for a tab control is rubbish, so we do our own.\n\t\t// We use double buffering and regions to eliminate flicker\n\n\t\t// Create the memory DC and bitmap\n\t\tCClientDC dcView(this);\n\t\tCMemDC dcMem(&dcView);\n\t\tCRect rcClient = GetClientRect();\n\t\tdcMem.CreateCompatibleBitmap(&dcView, rcClient.Width(), rcClient.Height());\n\n\t\tif (0 == GetItemCount())\n\t\t{\n\t\t\t// No tabs, so simply display a grey background and exit\n\t\t\tCOLORREF rgbDialog = GetSysColor(COLOR_BTNFACE);\n\t\t\tdcView.SolidFill(rgbDialog, rcClient);\n\t\t\treturn;\n\t\t}\n\n\t\t// Create a clipping region. Its the overall tab window's region,\n\t\t//  less the region belonging to the individual tab view's client area\n\t\tCRgn rgnSrc1 = ::CreateRectRgn(rcClient.left, rcClient.top, rcClient.right, rcClient.bottom);\n\t\tCRect rcTab = GetClientRect();\n\t\tTabCtrl_AdjustRect(m_hWnd, FALSE, &rcTab);\n\t\tif (rcTab.Height() < 0)\n\t\t\trcTab.top = rcTab.bottom;\n\t\tif (rcTab.Width() < 0)\n\t\t\trcTab.left = rcTab.right;\n\n\t\tCRgn rgnSrc2 = ::CreateRectRgn(rcTab.left, rcTab.top, rcTab.right, rcTab.bottom);\n\t\tCRgn rgnClip = ::CreateRectRgn(0, 0, 0, 0);\n\t\t::CombineRgn(rgnClip, rgnSrc1, rgnSrc2, RGN_DIFF);\n\n\t\t// Use the region in the memory DC to paint the grey background\n\t\tdcMem.SelectClipRgn(&rgnClip);\n\t\tHWND hWndParent = ::GetParent(m_hWnd);\n\t\tCDC dcParent = ::GetDC(hWndParent);\n\t\tHBRUSH hBrush = (HBRUSH) SendMessage(hWndParent, WM_CTLCOLORDLG, (WPARAM)dcParent.GetHDC(), (LPARAM)hWndParent);\n\t\tdcMem.SelectObject(FromHandle(hBrush));\n\t\tdcMem.PaintRgn(&rgnClip);\n\n\t\t// Draw the tab buttons on the memory DC:\n\t\tDrawTabs(dcMem);\n\n\t\t// Draw buttons and tab borders\n\t\tDrawCloseButton(dcMem);\n\t\tDrawListButton(dcMem);\n\t\tDrawTabBorders(dcMem, rcTab);\n\n\t\t// Now copy our from our memory DC to the window DC\n\t\tdcView.SelectClipRgn(&rgnClip);\n\t\tdcView.BitBlt(0, 0, rcClient.Width(), rcClient.Height(), &dcMem, 0, 0, SRCCOPY);\n\t}\n\n\tinline void CTab::PreCreate(CREATESTRUCT &cs)\n\t{\n\t\t// For Tabs on the bottom, add the TCS_BOTTOM style\n\t\tcs.style = WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE;\n\t}\n\n\tinline void CTab::PreRegisterClass(WNDCLASS &wc)\n\t{\n\t\twc.lpszClassName = WC_TABCONTROL;\n\t}\n\n\tinline void CTab::RecalcLayout()\n\t{\n\t\tif (IsWindow())\n\t\t{\n\t\t\tif (GetActiveView())\n\t\t\t{\n\t\t\t\t// Set the tab sizes\n\t\t\t\tSetTabSize();\n\n\t\t\t\t// Position the View over the tab control's display area\n\t\t\t\tCRect rc = GetClientRect();\n\t\t\t\tTabCtrl_AdjustRect(m_hWnd, FALSE, &rc);\n\t\t\t\tGetActiveView()->SetWindowPos(NULL, rc, SWP_SHOWWINDOW);\n\t\t\t}\n\t\t\telse\n\t\t\t\tRedrawWindow();\n\t\t}\n\t}\n\n\tinline void CTab::RemoveTabPage(int nPage)\n\t{\n\t\tif ((nPage < 0) || (nPage > (int)m_vTabPageInfo.size() -1))\n\t\t\treturn;\n\n\t\t// Remove the tab\n\t\tTabCtrl_DeleteItem(m_hWnd, nPage);\n\n\t\t// Remove the TapPageInfo entry\n\t\tstd::vector<TabPageInfo>::iterator itTPI = m_vTabPageInfo.begin() + nPage;\n\t\tCWnd* pView = (*itTPI).pView;\n\t\tint iImage = (*itTPI).iImage;\n\t\tif (iImage >= 0)\n\t\t\tTabCtrl_RemoveImage(m_hWnd, iImage);\n\n\t\tif (pView == m_pActiveView)\n\t\t\tm_pActiveView = 0;\n\n\t\t(*itTPI).pView->Destroy();\n\t\tm_vTabPageInfo.erase(itTPI);\n\n\t\tstd::vector<WndPtr>::iterator itView;\n\t\tfor (itView = m_vTabViews.begin(); itView < m_vTabViews.end(); ++itView)\n\t\t{\n\t\t\tif ((*itView).get() == pView)\n\t\t\t{\n\t\t\t\tm_vTabViews.erase(itView);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (IsWindow())\n\t\t{\n\t\t\tif (m_vTabPageInfo.size() > 0)\n\t\t\t{\n\t\t\t\tSetTabSize();\n\t\t\t\tSelectPage(0);\n\t\t\t}\n\t\t\telse\n\t\t\t\tShowActiveView(NULL);\n\n\t\t\tNotifyChanged();\n\t\t}\n\t}\n\n\tinline void CTab::SelectPage(int nPage)\n\t{\n\t\tif ((nPage >= 0) && (nPage < GetItemCount()))\n\t\t{\n\t\t\tif (nPage != GetCurSel())\n\t\t\t\tSetCurSel(nPage);\n\t\t\t\n\t\t\tShowActiveView(m_vTabPageInfo[nPage].pView);\n\t\t}\n\t}\n\n\tinline void CTab::SetFixedWidth(BOOL bEnabled)\n\t{\n\t\tDWORD dwStyle = (DWORD)GetWindowLongPtr(GWL_STYLE);\n\t\tif (bEnabled)\n\t\t\tSetWindowLongPtr(GWL_STYLE, dwStyle | TCS_FIXEDWIDTH);\n\t\telse\n\t\t\tSetWindowLongPtr(GWL_STYLE, dwStyle & ~TCS_FIXEDWIDTH);\n\n\t\tRecalcLayout();\n\t}\n\n\tinline void CTab::SetOwnerDraw(BOOL bEnabled)\n\t// Enable or disable owner draw\n\t{\n\t\tDWORD dwStyle = (DWORD)GetWindowLongPtr(GWL_STYLE);\n\t\tif (bEnabled)\n\t\t{\n\t\t\tSetWindowLongPtr(GWL_STYLE, dwStyle | TCS_OWNERDRAWFIXED);\n\t\t\tTabCtrl_SetImageList(m_hWnd, NULL);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tSetWindowLongPtr(GWL_STYLE, dwStyle & ~TCS_OWNERDRAWFIXED);\n\t\t\tTabCtrl_SetImageList(m_hWnd, m_himlTab);\n\t\t}\n\n\t\tRecalcLayout();\n\t}\n\n\tinline void CTab::SetShowButtons(BOOL bShow)\n\t{\n\t\tm_bShowButtons = bShow;\n\t\tRecalcLayout();\n\t}\n\n\tinline void CTab::SetTabIcon(int i, HICON hIcon)\n\t// Changes or sets the tab's icon\n\t{\n\t\tassert (GetItemCount() > i);\n\t\tTCITEM tci = {0};\n\t\ttci.mask = TCIF_IMAGE;\n\t\tGetItem(i, &tci);\n\t\tif (tci.iImage >= 0)\n\t\t{\n\t\t\tImageList_ReplaceIcon(GetImageList(), i, hIcon);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tint iImage = ImageList_AddIcon(GetImageList(), hIcon);\n\t\t\ttci.iImage = iImage;\n\t\t\tTabCtrl_SetItem(m_hWnd, i, &tci);\n\t\t\tm_vTabPageInfo[i].iImage = iImage;\n\t\t}\n\t}\t\n\n\tinline void CTab::SetTabsAtTop(BOOL bTop)\n\t// Positions the tabs at the top or botttom of the control\n\t{\n\t\tDWORD dwStyle = (DWORD)GetWindowLongPtr(GWL_STYLE);\n\n\t\tif (bTop)\n\t\t\tdwStyle &= ~TCS_BOTTOM;\n\t\telse\n\t\t\tdwStyle |= TCS_BOTTOM;\n\n\t\tSetWindowLongPtr(GWL_STYLE, dwStyle);\n\t\tRecalcLayout();\n\t}\n\n\tinline void CTab::SetTabSize()\n\t{\n\t\tif (GetItemCount() > 0)\n\t\t{\n\t\t\tCRect rc = GetClientRect();\n\t\t\tTabCtrl_AdjustRect(m_hWnd, FALSE, &rc);\n\n\t\t\tint xGap = 2;\n\t\t\tif (m_bShowButtons) xGap += GetCloseRect().Width() + GetListRect().Width() +2;\n\n\t\t\tint nItemWidth = MIN( GetMaxTabSize().cx, (rc.Width() - xGap)/GetItemCount() );\n\t\t\tnItemWidth = MAX(nItemWidth, 0);\n\t\t\tSendMessage(TCM_SETITEMSIZE, 0L, MAKELPARAM(nItemWidth, m_nTabHeight));\n\t\t\tNotifyChanged();\n\t\t} \n\t}\n\n\tinline void CTab::SetTabText(UINT nTab, LPCTSTR szText)\n\t{\n\t\t// Allows the text to be changed on an existing tab\n\t\tif (nTab < GetAllTabs().size())\n\t\t{\n\t\t\tTCITEM Item = {0};\n\t\t\tstd::vector<TCHAR> vTChar(MAX_MENU_STRING+1, _T('\\0'));\n\t\t\tTCHAR* pTChar = &vTChar.front();\n\t\t\tlstrcpyn(pTChar, szText, MAX_MENU_STRING);\n\t\t\tItem.mask = TCIF_TEXT;\n\t\t\tItem.pszText = pTChar;\n\n\t\t\tif (TabCtrl_SetItem(m_hWnd, nTab, &Item))\n\t\t\t\tlstrcpyn(m_vTabPageInfo[nTab].szTabText, pTChar, MAX_MENU_STRING);\n\t\t}\n\t}\n\n\tinline void CTab::ShowActiveView(CWnd* pView)\n\t// Sets or changes the View window displayed within the tab page\n\t{\n\t\t// Hide the old view\n\t\tif (GetActiveView() && (GetActiveView()->IsWindow()))\n\t\t\tGetActiveView()->ShowWindow(SW_HIDE);\n\n\t\t// Assign the view window\n\t\tm_pActiveView = pView;\n\n\t\tif (m_pActiveView && m_hWnd)\n\t\t{\n\t\t\tif (!m_pActiveView->IsWindow())\n\t\t\t{\n\t\t\t\t// The tab control is already created, so create the new view too\n\t\t\t\tGetActiveView()->Create(this);\n\t\t\t}\n\t\n\t\t\t// Position the View over the tab control's display area\n\t\t\tCRect rc = GetClientRect();\n\t\t\tTabCtrl_AdjustRect(m_hWnd, FALSE, &rc);\n\t\t\tGetActiveView()->SetWindowPos(HWND_TOP, rc, SWP_SHOWWINDOW);\n\t\t\tGetActiveView()->SetFocus();\n\t\t}\n\t}\n\n\tinline void CTab::ShowListMenu()\n\t// Displays the list of windows in a popup menu\n\t{\n\t\tif (!m_IsListPressed)\n\t\t{\n\t\t\tm_IsListPressed = TRUE;\n\t\t\tHMENU hMenu = GetListMenu();\n\t\n\t\t\tCPoint pt(GetListRect().left, GetListRect().top + GetTabHeight());\n\t\t\tClientToScreen(pt);\n\n\t\t\t// Choosing the frame's hwnd for the menu's messages will automatically theme the popup menu\n\t\t\tHWND MenuHwnd = GetAncestor()->GetHwnd();\n\t\t\tint nPage = 0;\n\t\t\tm_IsListMenuActive = TRUE;\n\t\t\tnPage = TrackPopupMenuEx(hMenu, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RETURNCMD, pt.x, pt.y, MenuHwnd, NULL) - IDW_FIRSTCHILD;\n\t\t\tif ((nPage >= 0) && (nPage < 9)) SelectPage(nPage);\n\t\t\tif (nPage == 9) ShowListDialog();\n\t\t\tm_IsListMenuActive = FALSE;\n\t\t}\n\n\t\tCClientDC dc(this);\n\t\tDrawListButton(dc);\n\t}\n\n\tinline void CTab::ShowListDialog()\n\t{\n\t\t// Definition of a dialog template which displays a List Box\n\t\tunsigned char dlg_Template[] =\n\t\t{\n\t\t\t0x01,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xc8,0x00,0xc8,0x90,0x03,\n\t\t\t0x00,0x00,0x00,0x00,0x00,0xdc,0x00,0x8e,0x00,0x00,0x00,0x00,0x00,0x53,0x00,0x65,\n\t\t\t0x00,0x6c,0x00,0x65,0x00,0x63,0x00,0x74,0x00,0x20,0x00,0x57,0x00,0x69,0x00,0x6e,\n\t\t\t0x00,0x64,0x00,0x6f,0x00,0x77,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x01,0x4d,\n\t\t\t0x00,0x53,0x00,0x20,0x00,0x53,0x00,0x68,0x00,0x65,0x00,0x6c,0x00,0x6c,0x00,0x20,\n\t\t\t0x00,0x44,0x00,0x6c,0x00,0x67,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\t\t\t0x00,0x00,0x00,0x01,0x00,0x01,0x50,0x40,0x00,0x7a,0x00,0x25,0x00,0x0f,0x00,0x01,\n\t\t\t0x00,0x00,0x00,0xff,0xff,0x80,0x00,0x4f,0x00,0x4b,0x00,0x00,0x00,0x00,0x00,0x00,\n\t\t\t0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x50,0x7a,0x00,0x7a,0x00,0x25,\n\t\t\t0x00,0x0f,0x00,0x02,0x00,0x00,0x00,0xff,0xff,0x80,0x00,0x43,0x00,0x61,0x00,0x6e,\n\t\t\t0x00,0x63,0x00,0x65,0x00,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\t\t\t0x00,0x02,0x00,0x01,0x01,0x21,0x50,0x06,0x00,0x06,0x00,0xcf,0x00,0x6d,0x00,0x79,\n\t\t\t0x00,0x00,0x00,0xff,0xff,0x83,0x00,0x00,0x00,0x00,0x00\n\t\t};\n\n\t\t// Display the modal dialog. The dialog is defined in the dialog template rather\n\t\t// than in the resource script (rc) file.\n\t\tCSelectDialog MyDialog((LPCDLGTEMPLATE) dlg_Template);\n\t\tfor(UINT u = 0; u < GetAllTabs().size(); ++u)\n\t\t{\n\t\t\tMyDialog.AddItem(GetAllTabs()[u].szTabText);\n\t\t}\n\n\t\tint iSelected = (int)MyDialog.DoModal();\n\t\tif (iSelected >= 0) SelectPage(iSelected);\n\t}\n\n\tinline void CTab::SwapTabs(UINT nTab1, UINT nTab2)\n\t{\n\t\tif ((nTab1 < GetAllTabs().size()) && (nTab2 < GetAllTabs().size()) && (nTab1 != nTab2))\n\t\t{\n\t\t\tint nPage = GetCurSel();\n\t\t\tTabPageInfo T1 = GetTabPageInfo(nTab1);\n\t\t\tTabPageInfo T2 = GetTabPageInfo(nTab2);\n\n\t\t\tTCITEM Item1 = {0};\n\t\t\tItem1.mask = TCIF_IMAGE | TCIF_PARAM | TCIF_RTLREADING | TCIF_STATE | TCIF_TEXT;\n\t\t\tGetItem(nTab1, &Item1);\n\t\t\tTCITEM Item2 = {0};\n\t\t\tItem2.mask = TCIF_IMAGE | TCIF_PARAM | TCIF_RTLREADING | TCIF_STATE | TCIF_TEXT;\n\t\t\tGetItem(nTab2, &Item2);\n\t\t\tTabCtrl_SetItem(m_hWnd, nTab1, &Item2);\n\t\t\tTabCtrl_SetItem(m_hWnd, nTab2, &Item1);\n\n\t\t\tm_vTabPageInfo[nTab1] = T2;\n\t\t\tm_vTabPageInfo[nTab2] = T1;\n\t\t\tSelectPage(nPage);\n\t\t}\n\t}\n\n\tinline LRESULT CTab::WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\tswitch(uMsg)\n\t\t{\n\t\tcase WM_PAINT:\n\t\t\tif (GetWindowLongPtr(GWL_STYLE) & TCS_OWNERDRAWFIXED)\n\t\t\t{\n\t\t\t\t// Remove all pending paint requests\n\t\t\t\tPAINTSTRUCT ps;\n\t\t\t\tBeginPaint(ps);\n\t\t\t\tEndPaint(ps);\n\n\t\t\t\t// Now call our local Paint\n\t\t\t\tPaint();\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase WM_ERASEBKGND:\n\t\t\tif (GetWindowLongPtr(GWL_STYLE) & TCS_OWNERDRAWFIXED)\n\t\t\t\treturn 0;\n\t\t\tbreak;\n\t\tcase WM_KILLFOCUS:\n\t\t\tm_IsClosePressed = FALSE;\n\t\t\tbreak;\n\t\tcase WM_LBUTTONDBLCLK:\n\t\tcase WM_LBUTTONDOWN:\n\t\t\tOnLButtonDown(wParam, lParam);\n\t\t\tbreak;\n\t\tcase WM_LBUTTONUP:\n\t\t\tOnLButtonUp(wParam, lParam);\n\t\t\tbreak;\n\t\tcase WM_MOUSEMOVE:\n\t\t\tOnMouseMove(wParam, lParam);\n\t\t\tbreak;\n\t\tcase WM_MOUSELEAVE:\n\t\t\tOnMouseLeave(wParam, lParam);\n\t\t\tbreak;\n\t\tcase WM_NCHITTEST:\n\t\t\treturn OnNCHitTest(wParam, lParam);\n\n\t\tcase WM_WINDOWPOSCHANGING:\n\t\t\t// A little hack to reduce tab flicker\n\t\t\tif (IsWindowVisible() && (GetWindowLongPtr(GWL_STYLE) & TCS_OWNERDRAWFIXED))\n\t\t\t{\n\t\t\t\tLPWINDOWPOS pWinPos = (LPWINDOWPOS)lParam;\n\t\t\t\tpWinPos->flags |= SWP_NOREDRAW;\n\n\t\t\t\tPaint();\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase WM_WINDOWPOSCHANGED:\n\t\t\tRecalcLayout();\n\t\t\tbreak;\n\t\t}\n\n\t\t// pass unhandled messages on for default processing\n\t\treturn CWnd::WndProcDefault(uMsg, wParam, lParam);\n\t}\n\n\t// Wrappers for Win32 Macros\n\tinline void CTab::AdjustRect(BOOL fLarger, RECT *prc) const\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tTabCtrl_AdjustRect(m_hWnd, fLarger, prc);\n\t}\n\n\tinline int CTab::GetCurFocus() const\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TabCtrl_GetCurFocus(m_hWnd);\n\t}\n\n\tinline int CTab::GetCurSel() const\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TabCtrl_GetCurSel(m_hWnd);\n\t}\n\n\tinline BOOL CTab::GetItem(int iItem, LPTCITEM pitem) const\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TabCtrl_GetItem(m_hWnd, iItem, pitem);\n\t}\n\n\tinline int CTab::GetItemCount() const\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TabCtrl_GetItemCount(m_hWnd);\n\t}\n\n\tinline int CTab::HitTest(TCHITTESTINFO& info) const\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TabCtrl_HitTest(m_hWnd, &info);\n\t}\n\n\tinline void CTab::SetCurFocus(int iItem) const\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tTabCtrl_SetCurFocus(m_hWnd, iItem);\n\t}\n\n\tinline int CTab::SetCurSel(int iItem) const\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TabCtrl_SetCurSel(m_hWnd, iItem);\n\t}\n\n\tinline DWORD CTab::SetItemSize(int cx, int cy) const\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TabCtrl_SetItemSize(m_hWnd, cx, cy);\n\t}\n\n\tinline int CTab::SetMinTabWidth(int cx) const\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TabCtrl_SetMinTabWidth(m_hWnd, cx);\n\t}\n\n\tinline void CTab::SetPadding(int cx, int cy) const\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tTabCtrl_SetPadding(m_hWnd, cx, cy);\n\t}\n\n\t////////////////////////////////////////\n\t// Definitions for the CTabbedMDI class\n\tinline CTabbedMDI::CTabbedMDI()\n\t{\n\t\tGetTab().SetShowButtons(TRUE);\n\t}\n\n\tinline CTabbedMDI::~CTabbedMDI()\n\t{\n\t}\n\n\tinline CWnd* CTabbedMDI::AddMDIChild(CWnd* pView, LPCTSTR szTabText, int idMDIChild /*= 0*/)\n\t{\n\t\tassert(pView);\n\t\tassert(lstrlen(szTabText) < MAX_MENU_STRING);\n\n\t\tGetTab().AddTabPage(WndPtr(pView), szTabText, 0, idMDIChild);\n\n\t\t// Fake a WM_MOUSEACTIVATE to propogate focus change to dockers\n\t\tif (IsWindow())\n\t\t\tGetParent()->SendMessage(WM_MOUSEACTIVATE, (WPARAM)GetAncestor(), MAKELPARAM(HTCLIENT,WM_LBUTTONDOWN));\n\n\t\treturn pView;\n\t}\n\n\tinline void CTabbedMDI::CloseActiveMDI()\n\t{\n\t\tint nTab = GetTab().GetCurSel();\n\t\tif (nTab >= 0)\n\t\t\tGetTab().RemoveTabPage(nTab);\n\n\t\tRecalcLayout();\n\t}\n\n\tinline void CTabbedMDI::CloseAllMDIChildren()\n\t{\n\t\twhile (GetMDIChildCount() > 0)\n\t\t{\n\t\t\tGetTab().RemoveTabPage(0);\n\t\t}\n\t}\n\n\tinline void CTabbedMDI::CloseMDIChild(int nTab)\n\t{\n\t\tGetTab().RemoveTabPage(nTab);\n\n\t\tif (GetActiveMDIChild())\n\t\t\tGetActiveMDIChild()->RedrawWindow();\n\t}\n\n\tinline HWND CTabbedMDI::Create(CWnd* pParent /* = NULL*/)\n\t{\n\t\tCLIENTCREATESTRUCT clientcreate ;\n\t\tclientcreate.hWindowMenu  = m_hWnd;\n\t\tclientcreate.idFirstChild = IDW_FIRSTCHILD ;\n\t\tDWORD dwStyle = WS_CHILD | WS_VISIBLE | MDIS_ALLCHILDSTYLES;\n\n\t\t// Create the MDICLIENT view window\n\t\tif (!CreateEx(0, _T(\"MDICLIENT\"), _T(\"\"),\n\t\t\tdwStyle, 0, 0, 0, 0, pParent, NULL, (PSTR) &clientcreate))\n\t\t\t\tthrow CWinException(_T(\"CMDIClient::Create ... CreateEx failed\"));\n\n\t\treturn m_hWnd;\n\t}\n\n\tinline CWnd* CTabbedMDI::GetActiveMDIChild() const\n\t{\n\t\tCWnd* pView = NULL;\n\t\tint nTab = GetTab().GetCurSel();\n\t\tif (nTab >= 0)\n\t\t{\n\t\t\tTabPageInfo tbi = GetTab().GetTabPageInfo(nTab);\n\t\t\tpView = tbi.pView;\n\t\t}\n\n\t\treturn pView;\n\t}\n\n\tinline int CTabbedMDI::GetActiveMDITab() const\n\t{\n\t\treturn GetTab().GetCurSel();\n\t}\n\n\tinline CWnd* CTabbedMDI::GetMDIChild(int nTab) const\n\t{\n\t\tassert(nTab >= 0);\n\t\tassert(nTab < GetMDIChildCount());\n\t\treturn GetTab().GetTabPageInfo(nTab).pView;\n\t}\n\n\tinline int CTabbedMDI::GetMDIChildCount() const\n\t{\n\t\treturn (int) GetTab().GetAllTabs().size();\n\t}\n\n\tinline int   CTabbedMDI::GetMDIChildID(int nTab) const\n\t{\n\t\tassert(nTab >= 0);\n\t\tassert(nTab < GetMDIChildCount());\n\t\treturn GetTab().GetTabPageInfo(nTab).idTab;\n\t}\n\n\tinline LPCTSTR CTabbedMDI::GetMDIChildTitle(int nTab) const\n\t{\n\t\tassert(nTab >= 0);\n\t\tassert(nTab < GetMDIChildCount());\n\t\treturn GetTab().GetTabPageInfo(nTab).szTabText;\n\t}\n\n\tinline BOOL CTabbedMDI::LoadRegistrySettings(tString tsRegistryKeyName)\n\t{\n\t\tBOOL bResult = FALSE;\n\n\t\tif (0 != tsRegistryKeyName.size())\n\t\t{\n\t\t\ttString tsKey = _T(\"Software\\\\\") + tsRegistryKeyName + _T(\"\\\\MDI Children\");\n\t\t\tHKEY hKey = 0;\n\t\t\tRegOpenKeyEx(HKEY_CURRENT_USER, tsKey.c_str(), 0, KEY_READ, &hKey);\n\t\t\tif (hKey)\n\t\t\t{\n\t\t\t\tDWORD dwType = REG_BINARY;\n\t\t\t\tDWORD BufferSize = sizeof(TabPageInfo);\n\t\t\t\tTabPageInfo tbi = {0};\n\t\t\t\tint i = 0;\n\t\t\t\tTCHAR szNumber[16];\n\t\t\t\ttString tsSubKey = _T(\"MDI Child \");\n\t\t\t\ttsSubKey += _itot(i, szNumber, 10);\n\n\t\t\t\t// Fill the DockList vector from the registry\n\t\t\t\twhile (0 == RegQueryValueEx(hKey, tsSubKey.c_str(), NULL, &dwType, (LPBYTE)&tbi, &BufferSize))\n\t\t\t\t{\n\t\t\t\t\tCWnd* pWnd = NewMDIChildFromID(tbi.idTab);\n\t\t\t\t\tif (pWnd)\n\t\t\t\t\t{\n\t\t\t\t\t\tAddMDIChild(pWnd, tbi.szTabText, tbi.idTab);\n\t\t\t\t\t\ti++;\n\t\t\t\t\t\ttsSubKey = _T(\"MDI Child \");\n\t\t\t\t\t\ttsSubKey += _itot(i, szNumber, 10);\n\t\t\t\t\t\tbResult = TRUE;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tTRACE(_T(\"Failed to get TabbedMDI info from registry\"));\n\t\t\t\t\t\tbResult = FALSE;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Load Active MDI Tab from the registry\n\t\t\t\ttsSubKey = _T(\"Active MDI Tab\");\n\t\t\t\tint nTab;\n\t\t\t\tdwType = REG_DWORD;\n\t\t\t\tBufferSize = sizeof(int);\n\t\t\t\tif(ERROR_SUCCESS == RegQueryValueEx(hKey, tsSubKey.c_str(), NULL, &dwType, (LPBYTE)&nTab, &BufferSize))\n\t\t\t\t\tSetActiveMDITab(nTab);\n\t\t\t\telse\n\t\t\t\t\tSetActiveMDITab(0);\n\n\t\t\t\tRegCloseKey(hKey);\n\t\t\t}\n\t\t}\n\n\t\tif (!bResult)\n\t\t\tCloseAllMDIChildren();\n\n\t\treturn bResult;\n\t}\n\n\tinline CWnd* CTabbedMDI::NewMDIChildFromID(int /*idMDIChild*/)\n\t{\n\t\t// Override this function to create new MDI children from IDs as shown below\n\t\tCWnd* pView = NULL;\n\t/*\tswitch(idTab)\n\t\t{\n\t\tcase ID_SIMPLE:\n\t\t\tpView = new CViewSimple;\n\t\t\tbreak;\n\t\tcase ID_RECT:\n\t\t\tpView = new CViewRect;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tTRACE(_T(\"Unknown MDI child ID\\n\"));\n\t\t\tbreak;\n\t\t} */\n\n\t\treturn pView;\n\t}\n\n\tinline void CTabbedMDI::OnCreate()\n\t{\n\t\tGetTab().Create(this);\n\t\tGetTab().SetFixedWidth(TRUE);\n\t\tGetTab().SetOwnerDraw(TRUE);\n\t}\n\n\tinline void CTabbedMDI::OnDestroy(WPARAM /*wParam*/, LPARAM /*lParam*/ )\n\t{\n\t\tCloseAllMDIChildren();\n\t}\n\n\tinline LRESULT CTabbedMDI::OnNotify(WPARAM /*wParam*/, LPARAM lParam)\n\t{\n\t\tLPNMHDR pnmhdr = (LPNMHDR)lParam;\n\t\tif (pnmhdr->code == UWM_TAB_CHANGED)\n\t\t\tRecalcLayout();\n\n\t\treturn 0L;\n\t}\n\n\tinline void CTabbedMDI::OnWindowPosChanged(WPARAM /*wParam*/, LPARAM /*lParam*/)\n\t{\n\t\tRecalcLayout();\n\t}\n\n\tinline void CTabbedMDI::RecalcLayout()\n\t{\n\t\tif (GetTab().IsWindow())\n\t\t{\n\t\t\tif (GetTab().GetItemCount() >0)\n\t\t\t{\n\t\t\t\tCRect rcClient = GetClientRect();\n\t\t\t\tGetTab().SetWindowPos(NULL, rcClient, SWP_SHOWWINDOW);\n\t\t\t\tGetTab().UpdateWindow();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tCRect rcClient = GetClientRect();\n\t\t\t\tGetTab().SetWindowPos(NULL, rcClient, SWP_HIDEWINDOW);\n\t\t\t\tInvalidate();\n\t\t\t}\n\t\t}\n\t}\n\n\tinline BOOL CTabbedMDI::SaveRegistrySettings(tString tsRegistryKeyName)\n\t{\n\t\tif (0 != tsRegistryKeyName.size())\n\t\t{\n\t\t\ttString tsKeyName = _T(\"Software\\\\\") + tsRegistryKeyName;\n\t\t\tHKEY hKey = NULL;\n\t\t\tHKEY hKeyMDIChild = NULL;\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\tif (ERROR_SUCCESS != RegCreateKeyEx(HKEY_CURRENT_USER, tsKeyName.c_str(), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL))\n\t\t\t\t\tthrow (CWinException(_T(\"RegCreateKeyEx Failed\")));\n\n\t\t\t\tRegDeleteKey(hKey, _T(\"MDI Children\"));\n\t\t\t\tif (ERROR_SUCCESS != RegCreateKeyEx(hKey, _T(\"MDI Children\"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKeyMDIChild, NULL))\n\t\t\t\t\tthrow (CWinException(_T(\"RegCreateKeyEx Failed\")));\n\n\t\t\t\tfor (int i = 0; i < GetMDIChildCount(); ++i)\n\t\t\t\t{\n\t\t\t\t\tTCHAR szNumber[16];\n\t\t\t\t\ttString tsSubKey = _T(\"MDI Child \");\n\t\t\t\t\ttsSubKey += _itot(i, szNumber, 10);\n\t\t\t\t\tTabPageInfo pdi = GetTab().GetTabPageInfo(i);\n\t\t\t\t\tif (ERROR_SUCCESS != RegSetValueEx(hKeyMDIChild, tsSubKey.c_str(), 0, REG_BINARY, (LPBYTE)&pdi, sizeof(TabPageInfo)))\n\t\t\t\t\t\tthrow (CWinException(_T(\"RegSetValueEx Failed\")));\n\t\t\t\t}\n\n\t\t\t\t// Add Active Tab to the registry\n\t\t\t\ttString tsSubKey = _T(\"Active MDI Tab\");\n\t\t\t\tint nTab = GetActiveMDITab();\n\t\t\t\tif(ERROR_SUCCESS != RegSetValueEx(hKeyMDIChild, tsSubKey.c_str(), 0, REG_DWORD, (LPBYTE)&nTab, sizeof(int)))\n\t\t\t\t\tthrow (CWinException(_T(\"RegSetValueEx failed\")));\n\n\t\t\t\tRegCloseKey(hKeyMDIChild);\n\t\t\t\tRegCloseKey(hKey);\n\t\t\t}\n\t\t\tcatch (const CWinException& e)\n\t\t\t{\n\t\t\t\t// Roll back the registry changes by deleting the subkeys\n\t\t\t\tif (hKey)\n\t\t\t\t{\n\t\t\t\t\tif (hKeyMDIChild)\n\t\t\t\t\t{\n\t\t\t\t\t\tRegDeleteKey(hKeyMDIChild, _T(\"MDI Children\"));\n\t\t\t\t\t\tRegCloseKey(hKeyMDIChild);\n\t\t\t\t\t}\n\n\t\t\t\t\tRegDeleteKey(HKEY_CURRENT_USER ,tsKeyName.c_str());\n\t\t\t\t\tRegCloseKey(hKey);\n\t\t\t\t}\n\n\t\t\t\te.what();\n\t\t\t\treturn FALSE;\n\t\t\t}\n\t\t}\n\n\t\treturn TRUE;\n\t}\n\n\tinline void CTabbedMDI::SetActiveMDIChild(CWnd* pWnd)\n\t{\n\t\tassert(pWnd);\n\t\tint nPage = GetTab().GetTabIndex(pWnd);\n\t\tif (nPage >= 0)\n\t\t\tGetTab().SelectPage(nPage);\n\t}\n\n\tinline void CTabbedMDI::SetActiveMDITab(int iTab)\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tassert(GetTab().IsWindow());\n\t\tGetTab().SelectPage(iTab);\n\t}\n\n\tinline LRESULT CTabbedMDI::WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\tswitch(uMsg)\n\t\t{\n\t\tcase WM_DESTROY:\n\t\t\tOnDestroy(wParam, lParam);\n\t\t\tbreak;\n\n\t\tcase WM_WINDOWPOSCHANGED:\n\t\t\tOnWindowPosChanged(wParam, lParam);\n\t\t\tbreak;\n\t\t}\n\n\t\treturn CWnd::WndProcDefault(uMsg, wParam, lParam);\n\t}\n\n} // namespace Win32xx\n\n#endif  // _WIN32XX_TAB_H_\n"
  },
  {
    "path": "external/win32cpp/include/taskdialog.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n\n////////////////////////////////////////////////////////\n// taskdialog.h\n//  Declaration of the CTaskDialog class\n\n// A task dialog is a dialog box that can be used to display information \n// and receive simple input from the user. Like a message box, it is \n// formatted by the operating system according to parameters you set. \n// However, a task dialog has many more features than a message box.\n\n// NOTES:  \n//  Task Dialogs are only supported on Windows Vista and above.\n//  Task Dialogs require XP themes enabled (use version 6 of Common Controls)\n//  Task Dialogs are always modal.\n\n\n#ifndef _WIN32XX_TASKDIALOG_H_\n#define _WIN32XX_TASKDIALOG_H_\n\n#include \"wincore.h\"\n\nnamespace Win32xx\n{\n\n\tclass CTaskDialog : public CWnd\n\t{\n\tpublic:\n\t\tCTaskDialog();\n\t\tvirtual ~CTaskDialog() {}\n\n\t\tvoid AddCommandControl(int nButtonID, LPCTSTR pszCaption);\n\t\tvoid AddRadioButton(int nRadioButtonID, LPCTSTR pszCaption);\n\t\tvoid AddRadioButtonGroup(int nIDRadioButtonsFirst, int nIDRadioButtonsLast);\n\t\tvoid ClickButton(int nButtonID) const;\n\t\tvoid ClickRadioButton(int nRadioButtonID) const;\n\t\tLRESULT DoModal(CWnd* pParent = NULL);\n\t\tvoid ElevateButton(int nButtonID, BOOL bElevated);\n\t\tvoid EnableButton(int nButtonID, BOOL bEnabled);\n\t\tvoid EnableRadioButton(int nButtonID, BOOL bEnabled);\n\t\tTASKDIALOGCONFIG GetConfig() const;\n\t\tTASKDIALOG_FLAGS GetOptions() const;\n\t\tint GetSelectedButtonID() const;\n\t\tint GetSelectedRadioButtonID() const;\n\t\tBOOL GetVerificationCheckboxState() const;\n\t\tstatic BOOL IsSupported();\n\t\tvoid NavigateTo(CTaskDialog& TaskDialog) const;\n\t\tvoid RemoveAllButtons();\n\t\tvoid RemoveAllRadioButtons();\n\t\tvoid Reset();\n\t\tvoid SetCommonButtons(TASKDIALOG_COMMON_BUTTON_FLAGS dwCommonButtons);\n\t\tvoid SetContent(LPCTSTR pszContent);\n\t\tvoid SetDefaultButton(int nButtonID);\n\t\tvoid SetDefaultRadioButton(int nRadioButtonID);\n\t\tvoid SetDialogWidth(UINT nWidth = 0);\n\t\tvoid SetExpansionArea(LPCTSTR pszExpandedInfo, LPCTSTR pszExpandedLabel = _T(\"\"), LPCTSTR pszCollapsedLabel = _T(\"\"));\n\t\tvoid SetFooterIcon(HICON hFooterIcon);\n\t\tvoid SetFooterIcon(LPCTSTR lpszFooterIcon);\n\t\tvoid SetFooterText(LPCTSTR pszFooter);\n\t\tvoid SetMainIcon(HICON hMainIcon);\n\t\tvoid SetMainIcon(LPCTSTR lpszMainIcon);\n\t\tvoid SetMainInstruction(LPCTSTR pszMainInstruction);\n\t\tvoid SetOptions(TASKDIALOG_FLAGS dwFlags);\n\t\tvoid SetProgressBarMarquee(BOOL bEnabled = TRUE, int nMarqueeSpeed = 0);\n\t\tvoid SetProgressBarPosition(int nProgressPos);\n\t\tvoid SetProgressBarRange(int nMinRange, int nMaxRange);\n\t\tvoid SetProgressBarState(int nNewState = PBST_NORMAL);\n\t\tvoid SetVerificationCheckbox(BOOL bChecked);\n\t\tvoid SetVerificationCheckboxText(LPCTSTR pszVerificationText);\n\t\tvoid SetWindowTitle(LPCTSTR pszWindowTitle);\n\t\tstatic HRESULT CALLBACK StaticTaskDialogProc(HWND hWnd, UINT uNotification, WPARAM wParam, LPARAM lParam, LONG_PTR dwRefData);\n\t\tvoid StoreText(std::vector<WCHAR>& vWChar, LPCTSTR pFromTChar);\n\t\tvoid UpdateElementText(TASKDIALOG_ELEMENTS eElement, LPCTSTR pszNewText);\n\t\t\n\n\tprotected:\n\t\t// Override these functions as required\n\t\tvirtual BOOL OnTDButtonClicked(int nButtonID);\n\t\tvirtual void OnTDConstructed();\n\t\tvirtual void OnTDCreated();\n\t\tvirtual void OnTDDestroyed();\n\t\tvirtual void OnTDExpandButtonClicked(BOOL bExpanded);\n\t\tvirtual void OnTDHelp();\n\t\tvirtual void OnTDHyperlinkClicked(LPCTSTR pszHref);\n\t\tvirtual void OnTDNavigatePage();\n\t\tvirtual BOOL OnTDRadioButtonClicked(int nRadioButtonID);\n\t\tvirtual BOOL OnTDTimer(DWORD dwTickCount);\n\t\tvirtual void OnTDVerificationCheckboxClicked(BOOL bChecked);\n\t\tvirtual LRESULT TaskDialogProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\t\tvirtual LRESULT TaskDialogProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\n\tprivate:\n\t\tCTaskDialog(const CTaskDialog&);\t\t\t\t// Disable copy construction\n\t\tCTaskDialog& operator = (const CTaskDialog&);\t// Disable assignment operator\n\n\t\tstd::vector<TASKDIALOG_BUTTON> m_vButtons;\n\t\tstd::vector<TASKDIALOG_BUTTON> m_vRadioButtons;\n\n\t\tstd::vector< std::vector<WCHAR> > m_vButtonsText;\t\t// A vector of WCHAR vectors\n\t\tstd::vector< std::vector<WCHAR> > m_vRadioButtonsText;\t// A vector of WCHAR vectors\n\n\t\tstd::vector<WCHAR> m_vWindowTitle;\n\t\tstd::vector<WCHAR> m_vMainInstruction;\n\t\tstd::vector<WCHAR> m_vContent;\n\t\tstd::vector<WCHAR> m_vVerificationText;\n\t\tstd::vector<WCHAR> m_vExpandedInformation;\n\t\tstd::vector<WCHAR> m_vExpandedControlText;\n\t\tstd::vector<WCHAR> m_vCollapsedControlText;\n\t\tstd::vector<WCHAR> m_vFooter;\n\n\t\tTASKDIALOGCONFIG m_tc;\n\t\tint\t\tm_SelectedButtonID;\n\t\tint\t\tm_SelectedRadioButtonID;\n\t\tBOOL\tm_VerificationCheckboxState;\n\t};\n\n}\n\n\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n\nnamespace Win32xx\n{\n\n\tinline CTaskDialog::CTaskDialog() : m_SelectedButtonID(0), m_SelectedRadioButtonID(0), m_VerificationCheckboxState(FALSE)\n\t{\n\t\tZeroMemory(&m_tc, sizeof(m_tc));\n\t\tm_tc.cbSize = sizeof(m_tc);\n\t\tm_tc.pfCallback = CTaskDialog::StaticTaskDialogProc;\n\t}\n\n\tinline void CTaskDialog::AddCommandControl(int nButtonID, LPCTSTR pszCaption)\n\t// Adds a command control or push button to the Task Dialog.\n\t{\n\t\tassert (m_hWnd == NULL);\n\n\t\tstd::vector<WCHAR> vButtonText;\n\t\tStoreText(vButtonText, pszCaption);\n\t\tm_vButtonsText.push_back(vButtonText);\t// m_vButtonsText is a vector of vector<WCHAR>'s\n\n\t\tTASKDIALOG_BUTTON tdb;\n\t\ttdb.nButtonID = nButtonID;\n\t\ttdb.pszButtonText = &m_vButtonsText.back().front();\n\n\t\tm_vButtons.push_back(tdb);\n\t}\n\n\tinline void CTaskDialog::AddRadioButton(int nRadioButtonID, LPCTSTR pszCaption)\n\t// Adds a radio button to the Task Dialog.\n\t{\n\t\tassert (m_hWnd == NULL);\n\n\t\tstd::vector<WCHAR> vRadioButtonText;\n\t\tStoreText(vRadioButtonText, pszCaption);\n\t\tm_vRadioButtonsText.push_back(vRadioButtonText);\t// m_vRadioButtonsText is a vector of vector<WCHAR>'s\n\n\t\tTASKDIALOG_BUTTON tdb;\n\t\ttdb.nButtonID = nRadioButtonID;\n\t\ttdb.pszButtonText = &m_vRadioButtonsText.back().front();\n\n\t\tm_vRadioButtons.push_back(tdb);\n\t}\n\n\tinline void CTaskDialog::AddRadioButtonGroup(int nIDRadioButtonsFirst, int nIDRadioButtonsLast)\n\t// Adds a range of radio buttons to the Task Dialog.\n\t// Assumes the resource ID of the button and it's string match \n\t{\n\t\tassert (m_hWnd == NULL);\n\t\tassert(nIDRadioButtonsFirst > 0);\n\t\tassert(nIDRadioButtonsLast > nIDRadioButtonsFirst);\n\n\t\tTASKDIALOG_BUTTON tdb;\n\t\tfor (int nID = nIDRadioButtonsFirst; nID <= nIDRadioButtonsLast; ++nID)\n\t\t{\n\t\t\ttdb.nButtonID = nID;\n\t\t\ttdb.pszButtonText = MAKEINTRESOURCEW(nID);\n\t\t\tm_vRadioButtons.push_back(tdb);\t\t\t\n\t\t}\n\t}\n\n\tinline void CTaskDialog::ClickButton(int nButtonID) const\n\t// Simulates the action of a button click in the Task Dialog.\n\t{\n\t\tassert(m_hWnd);\n\t\tSendMessage(TDM_CLICK_BUTTON, (WPARAM)nButtonID, 0); \n\t}\n\n\tinline void CTaskDialog::ClickRadioButton(int nRadioButtonID) const\n\t// Simulates the action of a radio button click in the TaskDialog.\n\t{\n\t\tassert(m_hWnd);\n\t\tSendMessage(TDM_CLICK_RADIO_BUTTON, (WPARAM)nRadioButtonID, 0);\n\t}\n\n\tinline LRESULT CTaskDialog::DoModal(CWnd* pParent /* = NULL */)\n\t// Creates and displays the Task Dialog.\n\t{\n\t\tassert (m_hWnd == NULL);\n\n\t\tm_tc.cbSize = sizeof(m_tc);\n\t\tm_tc.pButtons = m_vButtons.empty()? NULL : &m_vButtons.front();\n\t\tm_tc.cButtons = m_vButtons.size();\n\t\tm_tc.pRadioButtons = m_vRadioButtons.empty()? NULL : &m_vRadioButtons.front();\n\t\tm_tc.cRadioButtons = m_vRadioButtons.size();\n\t\tm_tc.hwndParent = pParent? pParent->GetHwnd() : NULL;\n\n\t\t// Ensure this thread has the TLS index set\n\t\tTLSData* pTLSData = GetApp()->SetTlsIndex();\n\n\t\t// Store the CWnd pointer in thread local storage\n\t\tpTLSData->pCWnd = this;\n\n\t\t// Declare a pointer to the TaskDialogIndirect function\n\t\tHMODULE hComCtl = ::LoadLibrary(_T(\"COMCTL32.DLL\"));\n\t\tassert(hComCtl);\n\t\ttypedef HRESULT WINAPI TASKDIALOGINDIRECT(const TASKDIALOGCONFIG*, int*, int*, BOOL*);\n\t\tTASKDIALOGINDIRECT* pTaskDialogIndirect = (TASKDIALOGINDIRECT*)::GetProcAddress(hComCtl, \"TaskDialogIndirect\");\n\n\t\t// Call TaskDialogIndirect through our function pointer\n\t\tLRESULT lr = (*pTaskDialogIndirect)(&m_tc, &m_SelectedButtonID, &m_SelectedRadioButtonID, &m_VerificationCheckboxState);\n\n\t\tFreeLibrary(hComCtl);\n\t\treturn lr;\n\t}\n\t\n\tinline void CTaskDialog::ElevateButton(int nButtonID, BOOL bElevated)\n\t// Adds a shield icon to indicate that the button's action requires elevated privilages. \n\t{\n\t\tassert(m_hWnd);\n\t\tSendMessage(TDM_SET_BUTTON_ELEVATION_REQUIRED_STATE, (WPARAM)nButtonID, (LPARAM)bElevated);\n\t}\n\t\n\tinline void CTaskDialog::EnableButton(int nButtonID, BOOL bEnabled)\n\t// Enables or disables a push button in the TaskDialog.\n\t{\n\t\tassert(m_hWnd);\n\t\tSendMessage(TDM_ENABLE_BUTTON, (WPARAM)nButtonID, (LPARAM)bEnabled);\n\t}\n\tinline void CTaskDialog::EnableRadioButton(int nRadioButtonID, BOOL bEnabled)\n\t// Enables or disables a radio button in the TaskDialog.\n\t{\n\t\tassert(m_hWnd);\n\t\tSendMessage(TDM_ENABLE_RADIO_BUTTON, (WPARAM)nRadioButtonID, (LPARAM)bEnabled);\n\t}\n\n\tinline TASKDIALOGCONFIG CTaskDialog::GetConfig() const\n\t// Returns the TASKDIALOGCONFIG structure for the Task Dialog.\n\t{\n\t\treturn m_tc;\n\t}\n\n\tinline TASKDIALOG_FLAGS CTaskDialog::GetOptions() const\n\t// Returns the Task Dialog's options. These are a combination of:\n\t//  TDF_ENABLE_HYPERLINKS\n\t//  TDF_USE_HICON_MAIN\n\t//  TDF_USE_HICON_FOOTER\n\t//  TDF_ALLOW_DIALOG_CANCELLATION\n\t//  TDF_USE_COMMAND_LINKS\n\t//  TDF_USE_COMMAND_LINKS_NO_ICON\n\t//  TDF_EXPAND_FOOTER_AREA\n\t//  TDF_EXPANDED_BY_DEFAULT\n\t//  TDF_VERIFICATION_FLAG_CHECKED\n\t//  TDF_SHOW_PROGRESS_BAR\n\t//  TDF_SHOW_MARQUEE_PROGRESS_BAR\n\t//  TDF_CALLBACK_TIMER\n\t//  TDF_POSITION_RELATIVE_TO_WINDOW\n\t//  TDF_RTL_LAYOUT\n\t//  TDF_NO_DEFAULT_RADIO_BUTTON\n\t//  TDF_CAN_BE_MINIMIZED\n\t{\n\t\treturn m_tc.dwFlags;\n\t}\n\n\tinline int CTaskDialog::GetSelectedButtonID() const\n\t// Returns the ID of the selected button. \n\t{\n\t\tassert (m_hWnd == NULL);\n\t\treturn m_SelectedButtonID;\n\t}\n\n\tinline int CTaskDialog::GetSelectedRadioButtonID() const \n\t// Returns the ID of the selected radio button.\n\t{\n\t\tassert (m_hWnd == NULL);\n\t\treturn m_SelectedRadioButtonID; \n\t}\n\t\t\n\tinline BOOL CTaskDialog::GetVerificationCheckboxState() const\n\t// Returns the state of the verification check box.\n\t{\n\t\tassert (m_hWnd == NULL);\n\t\treturn m_VerificationCheckboxState;\n\t}\n\n\tinline BOOL CTaskDialog::IsSupported()\n\t// Returns true if TaskDialogs are supported on this system.\n\t{\n\t\tHMODULE hModule = ::LoadLibrary(_T(\"COMCTL32.DLL\"));\n\t\tassert(hModule);\n\t\t\n\t\tBOOL bResult = (BOOL)::GetProcAddress(hModule, \"TaskDialogIndirect\");\n\t\t\n\t\t::FreeLibrary(hModule);\n\t\treturn bResult;\n\t}\n\n\tinline void CTaskDialog::NavigateTo(CTaskDialog& TaskDialog) const\n\t// Replaces the information displayed by the task dialog.\n\t{\n\t\tassert(m_hWnd);\n\t\tTASKDIALOGCONFIG tc = TaskDialog.GetConfig();\n\t\tSendMessage(TDM_NAVIGATE_PAGE, 0, (LPARAM)&tc);\n\t}\n\n\tinline BOOL CTaskDialog::OnTDButtonClicked(int nButtonID)\n\t// Called when the user selects a button or command link.\n\t{ \n\t\tUNREFERENCED_PARAMETER(nButtonID);\n\t\t\n\t\t// return TRUE to prevent the task dialog from closing\n\t\treturn FALSE;\n\t}\n\n\tinline void CTaskDialog::OnTDConstructed()\n\t// Called when the task dialog is constructed, before it is displayed.\n\t{}\n\n\tinline void CTaskDialog::OnTDCreated()\n\t// Called when the task dialog is displayed.\n\t{}\n\t\n\tinline void CTaskDialog::OnTDDestroyed()\n\t// Called when the task dialog is destroyed.\n\t{\n\t}\n\t\n\tinline void CTaskDialog::OnTDExpandButtonClicked(BOOL bExpanded)\n\t// Called when the expand button is clicked.\n\t{\n\t\tUNREFERENCED_PARAMETER(bExpanded);\n\t}\n\t\n\tinline void CTaskDialog::OnTDHelp()\n\t// Called when the user presses F1 on the keyboard.\n\t{}\n\n\tinline void CTaskDialog::OnTDHyperlinkClicked(LPCTSTR pszHref)\n\t// Called when the user clicks on a hyperlink.\n\t{\n\t\tUNREFERENCED_PARAMETER(pszHref);\n\t}\n\t\n\tinline void CTaskDialog::OnTDNavigatePage()\n\t// Called when a navigation has occurred.\n\t{}\n\t\n\tinline BOOL CTaskDialog::OnTDRadioButtonClicked(int nRadioButtonID)\n\t// Called when the user selects a radio button.\n\t{\n\t\tUNREFERENCED_PARAMETER(nRadioButtonID);\n\t\treturn TRUE; \n\t}\n\t\n\tinline BOOL CTaskDialog::OnTDTimer(DWORD dwTickCount) \n\t// Called every 200 milliseconds (aproximately) when the TDF_CALLBACK_TIMER flag is set. \n\t{\n\t\tUNREFERENCED_PARAMETER(dwTickCount);\n\n\t\t// return TRUE to reset the tick count \n\t\treturn FALSE;\n\t}\n\t\n\tinline void CTaskDialog::OnTDVerificationCheckboxClicked(BOOL bChecked)\n\t// Called when the user clicks the Task Dialog verification check box.\n\t{\n\t\tUNREFERENCED_PARAMETER(bChecked);\n\t}\n\n\tinline void CTaskDialog::RemoveAllButtons()\n\t// Removes all push buttons from the task dialog.\n\t{\n\t\tassert (m_hWnd == NULL);\n\t\tm_vButtons.clear();\n\t\tm_vButtonsText.clear();\n\t}\n\n\tinline void CTaskDialog::RemoveAllRadioButtons()\n\t// Removes all radio buttons from the task dialog.\n\t{\n\t\tassert (m_hWnd == NULL);\n\t\tm_vRadioButtons.clear();\n\t\tm_vRadioButtonsText.clear();\n\t}\n\n\tinline void CTaskDialog::Reset()\n\t// Returns the dialog to its default state.\n\t{\n\t\tassert (m_hWnd == NULL);\n\n\t\tRemoveAllButtons();\n\t\tRemoveAllRadioButtons();\n\t\tZeroMemory(&m_tc, sizeof(m_tc));\n\t\tm_tc.cbSize = sizeof(m_tc);\n\t\tm_tc.pfCallback = CTaskDialog::StaticTaskDialogProc;\n\n\t\tm_SelectedButtonID = 0;\n\t\tm_SelectedRadioButtonID = 0;\n\t\tm_VerificationCheckboxState = FALSE;\n\n\t\tm_vWindowTitle.clear();\n\t\tm_vMainInstruction.clear();\n\t\tm_vContent.clear();\n\t\tm_vVerificationText.clear();\n\t\tm_vExpandedInformation.clear();\n\t\tm_vExpandedControlText.clear();\n\t\tm_vCollapsedControlText.clear();\n\t\tm_vFooter.clear();\n\t}\n\n\tinline void CTaskDialog::SetCommonButtons(TASKDIALOG_COMMON_BUTTON_FLAGS dwCommonButtons)\n\t// The dwCommonButtons parameter can be a combination of:\n\t//\tTDCBF_OK_BUTTON\t\t\tOK button\n\t//\tTDCBF_YES_BUTTON\t\tYes button\t\n\t//\tTDCBF_NO_BUTTON\t\t\tNo button\n\t//\tTDCBF_CANCEL_BUTTON\t\tCancel button\n\t//\tTDCBF_RETRY_BUTTON\t\tRetry button\n\t//\tTDCBF_CLOSE_BUTTON\t\tClose button\n\t{\n\t\tassert (m_hWnd == NULL);\n\t\tm_tc.dwCommonButtons = dwCommonButtons; \n\t}\n\n\tinline void CTaskDialog::SetContent(LPCTSTR pszContent)\n\t// Sets the task dialog's primary content.\n\t{\n\t\tStoreText(m_vContent, pszContent);\n\t\tm_tc.pszContent = &m_vContent.front(); \n\n\t\tif (IsWindow())\n\t\t\tSendMessage(TDM_SET_ELEMENT_TEXT, (WPARAM)TDE_CONTENT, (LPARAM)(LPCWSTR)T2W(pszContent));\n\t}\n\n\tinline void CTaskDialog::SetDefaultButton(int nButtonID) \n\t// Sets the task dialog's default button.\n\t// Can be either a button ID or one of the common buttons\n\t{\n\t\tassert (m_hWnd == NULL);\n\t\tm_tc.nDefaultButton = nButtonID;\n\t}\n\n\tinline void CTaskDialog::SetDefaultRadioButton(int nRadioButtonID) \n\t// Sets the default radio button.\n\t{\n\t\tassert (m_hWnd == NULL);\n\t\tm_tc.nDefaultRadioButton = nRadioButtonID;\n\t}\n\n\tinline void CTaskDialog::SetDialogWidth(UINT nWidth /*= 0*/)\n\t// The width of the task dialog's client area. If 0, the \n\t// task dialog manager will calculate the ideal width.\n\t{\n\t\tassert (m_hWnd == NULL);\n\t\tm_tc.cxWidth = nWidth;\n\t}\n\n\tinline void CTaskDialog::SetExpansionArea(LPCTSTR pszExpandedInfo, LPCTSTR pszExpandedLabel /* = _T(\"\")*/, LPCTSTR pszCollapsedLabel /* = _T(\"\")*/)\n\t// Sets the text in the expandable area of the Task Dialog.\n\t{\n\t\tStoreText(m_vExpandedInformation, pszExpandedInfo);\n\t\tm_tc.pszExpandedInformation = &m_vExpandedInformation.front();\n\t\t\n\t\tStoreText(m_vExpandedControlText, pszExpandedLabel);\n\t\tm_tc.pszExpandedControlText = &m_vExpandedControlText.front();\n\t\t\n\t\tStoreText(m_vCollapsedControlText, pszCollapsedLabel);\n\t\tm_tc.pszCollapsedControlText = &m_vCollapsedControlText.front();\n\n\t\tif (IsWindow())\n\t\t\tSendMessage(TDM_SET_ELEMENT_TEXT, (WPARAM)TDE_EXPANDED_INFORMATION, (LPARAM)(LPCWSTR)T2W(pszExpandedInfo));\n\t}\n\n\tinline void CTaskDialog::SetFooterIcon(HICON hFooterIcon) \n\t// Sets the icon that will be displayed in the Task Dialog's footer.\n\t{\n\t\tm_tc.hFooterIcon = hFooterIcon;\n\n\t\tif (IsWindow())\n\t\t\tSendMessage(TDM_UPDATE_ICON, (WPARAM)TDIE_ICON_FOOTER, (LPARAM)hFooterIcon);\n\t}\n\n\tinline void CTaskDialog::SetFooterIcon(LPCTSTR lpszFooterIcon) \n\t// Sets the icon that will be displayed in the Task Dialog's footer.\n\t// Possible icons:\n\t// TD_ERROR_ICON\t\tA stop-sign icon appears in the task dialog.\n\t// TD_WARNING_ICON\t\tAn exclamation-point icon appears in the task dialog.\n\t// TD_INFORMATION_ICON\tAn icon consisting of a lowercase letter i in a circle appears in the task dialog.\n\t// TD_SHIELD_ICON\t\tA shield icon appears in the task dialog.\n\t//  or a value passed via MAKEINTRESOURCE\n\t{\n\t\tm_tc.pszFooterIcon = (LPCWSTR)lpszFooterIcon;\n\n\t\tif (IsWindow())\n\t\t\tSendMessage(TDM_UPDATE_ICON, (WPARAM)TDIE_ICON_FOOTER, (LPARAM)lpszFooterIcon);\n\t}\n\n\tinline void CTaskDialog::SetFooterText(LPCTSTR pszFooter)\n\t// Sets the text that will be displayed in the Task Dialog's footer.\n\t{\n\t\tStoreText(m_vFooter, pszFooter);\n\t\tm_tc.pszFooter = &m_vFooter.front();\n\n\t\tif (IsWindow())\n\t\t\tSendMessage(TDM_SET_ELEMENT_TEXT, (WPARAM)TDE_FOOTER, (LPARAM)(LPCWSTR)T2W(pszFooter));\n\t}\n\n\tinline void CTaskDialog::SetMainIcon(HICON hMainIcon) \n\t// Sets Task Dialog's main icon.\n\t{\n\t\tm_tc.hMainIcon = hMainIcon;\n\n\t\tif (IsWindow())\n\t\t\tSendMessage(TDM_UPDATE_ICON, (WPARAM)TDIE_ICON_MAIN, (LPARAM)hMainIcon);\n\t}\n\n\tinline void CTaskDialog::SetMainIcon(LPCTSTR lpszMainIcon)\n\t// Sets Task Dialog's main icon.\n\t// Possible icons:\n\t// TD_ERROR_ICON\t\tA stop-sign icon appears in the task dialog.\n\t// TD_WARNING_ICON\t\tAn exclamation-point icon appears in the task dialog.\n\t// TD_INFORMATION_ICON\tAn icon consisting of a lowercase letter i in a circle appears in the task dialog.\n\t// TD_SHIELD_ICON\t\tA shield icon appears in the task dialog.\n\t//  or a value passed via MAKEINTRESOURCE\n\t//\n\t// Note: Some values of main icon will also generate a MessageBeep when the TaskDialog is created.\n\t{\n\t\tm_tc.pszMainIcon = (LPCWSTR)lpszMainIcon;\n\t\t\n\t\tif (IsWindow())\n\t\t\tSendMessage(TDM_UPDATE_ICON, (WPARAM)TDIE_ICON_MAIN, (LPARAM)lpszMainIcon);\n\t}\n\n\tinline void CTaskDialog::SetMainInstruction(LPCTSTR pszMainInstruction) \n\t// Sets the Task Dialog's main instruction text.\n\t{\n\t\tStoreText(m_vMainInstruction, pszMainInstruction);\n\t\tm_tc.pszMainInstruction = &m_vMainInstruction.front();\n\n\t\tif (IsWindow())\n\t\t\tSendMessage(TDM_SET_ELEMENT_TEXT, (WPARAM)TDE_FOOTER, (LPARAM)(LPCWSTR)T2W(pszMainInstruction));\n\t}\n\n\tinline void CTaskDialog::SetOptions(TASKDIALOG_FLAGS dwFlags)\n\t// Sets the Task Dialog's options. These are a combination of:\n\t//  TDF_ENABLE_HYPERLINKS\n\t//  TDF_USE_HICON_MAIN\n\t//  TDF_USE_HICON_FOOTER\n\t//  TDF_ALLOW_DIALOG_CANCELLATION\n\t//  TDF_USE_COMMAND_LINKS\n\t//  TDF_USE_COMMAND_LINKS_NO_ICON\n\t//  TDF_EXPAND_FOOTER_AREA\n\t//  TDF_EXPANDED_BY_DEFAULT\n\t//  TDF_VERIFICATION_FLAG_CHECKED\n\t//  TDF_SHOW_PROGRESS_BAR\n\t//  TDF_SHOW_MARQUEE_PROGRESS_BAR\n\t//  TDF_CALLBACK_TIMER\n\t//  TDF_POSITION_RELATIVE_TO_WINDOW\n\t//  TDF_RTL_LAYOUT\n\t//  TDF_NO_DEFAULT_RADIO_BUTTON\n\t//  TDF_CAN_BE_MINIMIZED\n\t{\n\t\tassert (m_hWnd == NULL);\n\t\tm_tc.dwFlags = dwFlags;\n\t}\n\n\tinline void CTaskDialog::SetProgressBarMarquee(BOOL bEnabled /* = TRUE*/, int nMarqueeSpeed /* = 0*/) \n\t// Starts and stops the marquee display of the progress bar, and sets the speed of the marquee.\n\t{\n\t\tassert(m_hWnd);\n\t\tSendMessage(TDM_SET_PROGRESS_BAR_MARQUEE, (WPARAM)bEnabled, (LPARAM)nMarqueeSpeed);\n\t}\n\n\tinline void CTaskDialog::SetProgressBarPosition(int nProgressPos) \n\t// Sets the current position for a progress bar.\n\t{\n\t\tassert(m_hWnd);\n\t\tSendMessage(TDM_SET_PROGRESS_BAR_POS, (WPARAM)nProgressPos, 0);\n\t}\n\n\tinline void CTaskDialog::SetProgressBarRange(int nMinRange, int nMaxRange) \n\t// Sets the minimum and maximum values for the hosted progress bar.\n\t{\n\t\tassert(m_hWnd);\n\t\tSendMessage(TDM_SET_PROGRESS_BAR_RANGE, 0, MAKELPARAM(nMinRange, nMaxRange)); \n\t}\n\n\tinline void CTaskDialog::SetProgressBarState(int nNewState /* = PBST_NORMAL*/)\n\t// Sets the current state of the progress bar. Possible states are:\n\t//  PBST_NORMAL\n\t//  PBST_PAUSE\n\t//  PBST_ERROR\n\t{\n\t\tassert(m_hWnd);\n\t\tSendMessage(TDM_SET_PROGRESS_BAR_STATE, (WPARAM)nNewState, 0);\n\t} \n\n\tinline void CTaskDialog::SetVerificationCheckbox(BOOL bChecked)\n\t// Simulates a click on the verification checkbox of the Task Dialog, if it exists.\n\t{\n\t\tassert(m_hWnd);\n\t\tSendMessage(TDM_CLICK_VERIFICATION, (WPARAM)bChecked, (LPARAM)bChecked);\n\t}\n\n\tinline void CTaskDialog::SetVerificationCheckboxText(LPCTSTR pszVerificationText)\n\t// Sets the text for the verification check box.\n\t{\n\t\tassert (m_hWnd == NULL);\n\t\tStoreText(m_vVerificationText, pszVerificationText);\n\t\tm_tc.pszVerificationText = &m_vVerificationText.front();\n\t}\n\n\tinline void CTaskDialog::SetWindowTitle(LPCTSTR pszWindowTitle)\n\t// Sets the Task Dialog's window title.\n\t{\n\t\tassert (m_hWnd == NULL);\n\t\tStoreText(m_vWindowTitle, pszWindowTitle);\n\t\tm_tc.pszWindowTitle = &m_vWindowTitle.front(); \n\t}\n\n\tinline HRESULT CALLBACK CTaskDialog::StaticTaskDialogProc(HWND hWnd, UINT uNotification, WPARAM wParam, LPARAM lParam, LONG_PTR dwRefData)\n\t// TaskDialogs direct their messages here.\n\t{\n\t\tUNREFERENCED_PARAMETER(dwRefData);\n\n\t\tassert( GetApp() );\n\n\t\ttry\n\t\t{\n\t\t\tCTaskDialog* t = (CTaskDialog*)GetApp()->GetCWndFromMap(hWnd);\n\t\t\tif (0 == t)\n\t\t\t{\n\t\t\t\t// The CTaskDialog pointer wasn't found in the map, so add it now\n\n\t\t\t\t// Retrieve the pointer to the TLS Data\n\t\t\t\tTLSData* pTLSData = (TLSData*)TlsGetValue(GetApp()->GetTlsIndex());\n\t\t\t\tif (NULL == pTLSData)\n\t\t\t\t\tthrow CWinException(_T(\"Unable to get TLS\"));\n\n\t\t\t\t// Retrieve pointer to CTaskDialog object from Thread Local Storage TLS\n\t\t\t\tt = (CTaskDialog*)(pTLSData->pCWnd);\n\t\t\t\tif (NULL == t)\n\t\t\t\t\tthrow CWinException(_T(\"Failed to route message\"));\n\n\t\t\t\tpTLSData->pCWnd = NULL;\n\n\t\t\t\t// Store the CTaskDialog pointer in the HWND map\n\t\t\t\tt->m_hWnd = hWnd;\n\t\t\t\tt->AddToMap();\n\t\t\t}\n\n\t\t\treturn t->TaskDialogProc(uNotification, wParam, lParam);\n\t\t}\n\n\t\tcatch (const CWinException &e)\n\t\t{\n\t\t\t// Most CWinExceptions will end up here unless caught earlier.\n\t\t\te.what();\n\t\t}\n\n\t\treturn 0L;\n\n\t} // LRESULT CALLBACK StaticTaskDialogProc(...)\n\n\tinline void CTaskDialog::StoreText(std::vector<WCHAR>& vWChar, LPCTSTR pFromTChar)\n\t{\n\t\t// Stores a TChar string in a WCHAR vector\n\n\t\tstd::vector<TCHAR> vTChar;\n\t\t\n\t\tif (IS_INTRESOURCE(pFromTChar))\t\t// support MAKEINTRESOURCE\n\t\t{\n\t\t\ttString ts = LoadString((UINT)pFromTChar);\n\t\t\tint len = pFromTChar? ts.length() + 1 : 1;\n\t\t\tvTChar.assign(len, _T('\\0'));\n\t\t\tvWChar.assign(len, _T('\\0'));\n\t\t\tif (pFromTChar)\n\t\t\t\tlstrcpy( &vTChar.front(), ts.c_str());\n\t\t\t\n\t\t}\n\t\telse\n\t\t{\n\t\t\tint len = lstrlen(pFromTChar) +1;\n\t\t\tvTChar.assign(len, _T('\\0'));\n\t\t\tvWChar.assign(len, _T('\\0'));\t\n\t\t\tlstrcpy( &vTChar.front(), pFromTChar);\n\t\t}\n\t\t\n\t\tlstrcpyW(&vWChar.front(), T2W(&vTChar.front()) );\n\t}\n\n\tinline LRESULT CTaskDialog::TaskDialogProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t// Handles the Task Dialog's notificaions.\n\t{\n\t\tswitch(uMsg)\n\t\t{\n\t\tcase TDN_BUTTON_CLICKED:\n\t\t\treturn OnTDButtonClicked((int)wParam);\n\n\t\tcase TDN_CREATED:\n\t\t\tOnTDCreated();\n\t\t\tbreak;\n\t\tcase TDN_DESTROYED:\t\t\n\t\t\tCleanup();\t\t\t// Prepare this CWnd to be reused. \n\t\t\tOnTDDestroyed();\n\t\t\tbreak;\n\t\tcase TDN_DIALOG_CONSTRUCTED:\n\t\t\tOnTDConstructed();\n\t\t\tbreak;\n\t\tcase TDN_EXPANDO_BUTTON_CLICKED:\n\t\t\tOnTDExpandButtonClicked((BOOL)wParam);\n\t\t\tbreak;\n\t\tcase TDN_HELP:\n\t\t\tOnTDHelp();\n\t\t\tbreak;\n\t\tcase TDN_HYPERLINK_CLICKED:\n\t\t\tOnTDHyperlinkClicked(W2T((LPCWSTR)lParam));\n\t\t\tbreak;\n\t\tcase TDN_NAVIGATED:\n\t\t\tOnTDNavigatePage();\n\t\t\tbreak;\n\t\tcase TDN_RADIO_BUTTON_CLICKED:\n\t\t\tOnTDRadioButtonClicked((int)wParam);\n\t\t\tbreak;\n\t\tcase TDN_TIMER:\n\t\t\treturn OnTDTimer((DWORD)wParam);\n\n\t\tcase TDN_VERIFICATION_CLICKED:\n\t\t\tOnTDVerificationCheckboxClicked((BOOL)wParam);\n\t\t\tbreak;\n\t\t}\n\n\t\treturn S_OK;\n\t}\n\n\tinline LRESULT CTaskDialog::TaskDialogProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\t// Override this function in your class derrived from CDialog if you wish to handle messages\n\t\t// A typical function might look like this:\n\n\t\t//\tswitch (uMsg)\n\t\t//\t{\n\t\t//\tcase MESSAGE1:\t\t// Some Windows API message\n\t\t//\t\tOnMessage1();\t// A user defined function\n\t\t//\t\tbreak;\t\t\t// Also do default processing\n\t\t//\tcase MESSAGE2:\n\t\t//\t\tOnMessage2();\n\t\t//\t\treturn x;\t\t// Don't do default processing, but instead return\n\t\t//\t\t\t\t\t\t//  a value recommended by the Windows API documentation\n\t\t//\t}\n\n\t\t// Always pass unhandled messages on to TaskDialogProcDefault\n\t\treturn TaskDialogProcDefault(uMsg, wParam, lParam);\n\t}\n\n\tinline void CTaskDialog::UpdateElementText(TASKDIALOG_ELEMENTS eElement, LPCTSTR pszNewText)\n\t// Updates a text element on the Task Dialog.\n\t{\n\t\tassert(m_hWnd);\n\t\tSendMessage(TDM_UPDATE_ELEMENT_TEXT, (WPARAM)eElement, (LPARAM)(LPCWSTR)T2W(pszNewText));\n\t}\n\n}\n\n\n\n#endif // _WIN32XX_TASKDIALOG_H_"
  },
  {
    "path": "external/win32cpp/include/thread.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n\n// The CThread class simplifies the use of threads with Win32++.\n// To use threads in your Win32++ application, inherit a class from\n// CThread, and override InitInstance. When your class is instanciated,\n// a new thread is started, and the InitInstance function is called to\n// run in the new thread.\n\n// If your thread is used to run one or more windows, InitInstance should \n// return TRUE, causing the MessageLoop function to be called. If your\n// thread doesn't require a MessageLoop, it should return FALSE. Threads\n// which don't run a message loop as sometimes referred to as \"worker\" threads.\n\n// Note: It is your job to end the thread before CThread ends!\n//       To end a thread with a message loop, use PostQuitMessage on the thread.\n//       To end a thread without a message loop, set an event, and end the thread \n//       when the event is received.\n\n// Hint: It is never a good idea to use things like TerminateThread or ExitThread to \n//       end your thread. These represent poor programming techniques, and are likely \n//       to leak memory and resources.\n\n// More Hints for thread programming:\n// 1) Avoid using SendMessage between threads, as this will cause one thread to wait for\n//    the other to respond. Use PostMessage between threads to avoid this problem.\n// 2) Access to variables and resources shared between threads need to be made thread safe.\n//    Having one thread modify a resouce or variable while another thread is accessing it is\n//    a recipe for disaster.\n// 3) Thread Local Storage (TLS) can be used to replace global variables to make them thread\n//    safe. With TLS, each thread gets its own copy of the variable.\n// 4) Critical Sections can be used to make shared resources thread safe.\n// 5) Window messages (including user defined messages) can be posted between GUI threads to\n//    communicate information between them.\n// 6) Events (created by CreateEvent) can be used to comunicate information between threads \n//    (both GUI and worker threads).\n// 7) Avoid using sleep to synchronise threads. Generally speaking, the various wait \n//    functions (e.g. WaitForSingleObject) will be better for this.\n\n// About Threads:\n// Each program that executes has a \"process\" allocated to it. A process has one or more\n// threads. Threads run independantly of each other. It is the job of the operating system\n// to manage the running of the threads, and do the task switching between threads as required.\n// Systems with multiple CPUs will be able to run as many threads simultaneously as there are\n// CPUs. \n\n// Threads behave like a program within a program. When the main thread starts, the application \n// runs the WinMain function and ends when WinMain ends. When another thread starts, it too\n// will run the function provided to it, and end when that function ends.\n\n\n#ifndef _WIN32XX_WINTHREAD_H_\n#define _WIN32XX_WINTHREAD_H_\n\n\n#include <process.h>\n\n\nnamespace Win32xx\n{\n\n\t//////////////////////////////////////\n\t// Declaration of the CThread class\n\t//\n\tclass CThread\n\t{\n\tpublic:\n\t\tCThread();\n\t\tCThread(LPSECURITY_ATTRIBUTES pSecurityAttributes, unsigned stack_size, unsigned initflag);\n\t\tvirtual ~CThread();\n\t\t\n\t\t// Overridables\n\t\tvirtual BOOL InitInstance();\n\t\tvirtual int MessageLoop();\n\n\t\t// Operations\n\t\tHANDLE\tGetThread()\tconst;\n\t\tint\t\tGetThreadID() const;\n\t\tint\t\tGetThreadPriority() const;\n\t\tDWORD\tResumeThread() const;\n\t\tBOOL\tSetThreadPriority(int nPriority) const;\n\t\tDWORD\tSuspendThread() const;\n\n\tprivate:\n\t\tCThread(const CThread&);\t\t\t\t// Disable copy construction\n\t\tCThread& operator = (const CThread&);\t// Disable assignment operator\n\t\tvoid CreateThread(LPSECURITY_ATTRIBUTES pSecurityAttributes, unsigned stack_size, unsigned initflag);\n\t\tstatic\tUINT WINAPI StaticThreadCallback(LPVOID pCThread);\n\n\t\tHANDLE m_hThread;\t\t\t// Handle of this thread\n\t\tUINT m_nThreadID;\t\t\t// ID of this thread\n\t};\n\t\n}\n\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nnamespace Win32xx\n{\n\n\t///////////////////////////////////////\n\t// Definitions for the CThread class\n\t//\n\tinline CThread::CThread() : m_hThread(0), m_nThreadID(0)\n\t{\n\t\tCreateThread(0, 0, CREATE_SUSPENDED);\n\t}\n\n\tinline CThread::CThread(LPSECURITY_ATTRIBUTES pSecurityAttributes, unsigned stack_size, unsigned initflag)\n\t\t: m_hThread(0), m_nThreadID(0)\n\t\t\t\t\t\t\t\t\t\t\n\t{\n\t\t// Valid argument values:\n\t\t// pSecurityAttributes\t\tEither a pointer to SECURITY_ATTRIBUTES or 0\n\t\t// stack_size\t\t\t\tEither the stack size or 0\n\t\t// initflag\t\t\t\t\tEither CREATE_SUSPENDED or 0\n\t\t\n\t\tCreateThread(pSecurityAttributes, stack_size, initflag);\n\t}\n\n\tinline CThread::~CThread()\n\t{\t\n\t\t// A thread's state is set to signalled when the thread terminates.\n\t\t// If your thread is still running at this point, you have a bug.\n\t\tif (0 != WaitForSingleObject(m_hThread, 0))\n\t\t\tTRACE(_T(\"*** Error *** Ending CThread before ending its thread\\n\"));\n\n\t\t// Close the thread's handle\n\t\t::CloseHandle(m_hThread);\n\t}\n\n\tinline void CThread::CreateThread(LPSECURITY_ATTRIBUTES pSecurityAttributes, unsigned stack_size, unsigned initflag)\n\t{\n\t\t// NOTE:  By default, the thread is created in the default state.\n\t\tm_hThread = (HANDLE)_beginthreadex(pSecurityAttributes, stack_size, CThread::StaticThreadCallback, (LPVOID) this, initflag, &m_nThreadID);\n\n\t\tif (0 == m_hThread)\n\t\t\tthrow CWinException(_T(\"Failed to create thread\"));\n\t}\n\n\tinline HANDLE CThread::GetThread() const\n\t{\n\t\tassert(m_hThread);\n\t\treturn m_hThread;\n\t}\n\n\tinline int CThread::GetThreadID() const \n\t{\n\t\tassert(m_hThread);\n\t\treturn m_nThreadID;\n\t}\n\n\tinline int CThread::GetThreadPriority() const\n\t{\n\t\tassert(m_hThread);\n\t\treturn ::GetThreadPriority(m_hThread);\n\t}\n\n\tinline BOOL CThread::InitInstance()\n\t{\n\t\t// Override this function to perform tasks when the thread starts.\n\n\t\t// return TRUE to run a message loop, otherwise return FALSE.\n\t\t// A thread with a window must run a message loop.\n\t\treturn FALSE;\n\t}\n\n\tinline int CThread::MessageLoop()\n\t{\n\t\t// Override this function if your thread needs a different message loop\n\t\treturn GetApp()->MessageLoop();\n\t}\n\n\tinline DWORD CThread::ResumeThread() const\n\t{\n\t\tassert(m_hThread);\n\t\treturn ::ResumeThread(m_hThread);\n\t}\n\n\tinline DWORD CThread::SuspendThread() const\n\t{\n\t\tassert(m_hThread);\n\t\treturn ::SuspendThread(m_hThread); \n\t}\n\t\n\tinline BOOL CThread::SetThreadPriority(int nPriority) const\n\t{\n\t\tassert(m_hThread);\n\t\treturn ::SetThreadPriority(m_hThread, nPriority);\n\t}\n\n\tinline UINT WINAPI CThread::StaticThreadCallback(LPVOID pCThread)\n\t// When the thread starts, it runs this function.\n\t{\n\t\t// Get the pointer for this CMyThread object\n\t\tCThread* pThread = (CThread*)pCThread;\n\n\t\tif (pThread->InitInstance())\n\t\t\treturn pThread->MessageLoop();\n\n\t\treturn 0;\n\t}\n\t\n}\n\n#endif // #define _WIN32XX_WINTHREAD_H_\n\n"
  },
  {
    "path": "external/win32cpp/include/toolbar.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n\n#ifndef _WIN32XX_TOOLBAR_H_\n#define _WIN32XX_TOOLBAR_H_\n\n#include \"wincore.h\"\n#include \"gdi.h\"\n#include \"rebar.h\"\n\n\nnamespace Win32xx\n{\n\n\tstruct ToolBarTheme\n\t{\n\t\tBOOL UseThemes;\t\t\t// TRUE if themes are used\n\t\tCOLORREF clrHot1;\t\t// Colour 1 for hot button\n\t\tCOLORREF clrHot2;\t\t// Colour 2 for hot button\n\t\tCOLORREF clrPressed1;\t// Colour 1 for pressed button\n\t\tCOLORREF clrPressed2;\t// Colour 2 for pressed button\n\t\tCOLORREF clrOutline;\t// Colour for border outline\n\t};\n\n\n\t////////////////////////////////////\n\t// Declaration of the CToolBar class\n\t//\n\tclass CToolBar : public CWnd\n\t{\n\tpublic:\n\t\tCToolBar();\n\t\tvirtual ~CToolBar();\n\n\t\t// Operations\n\t\tvirtual int  AddBitmap(UINT ToolBarID);\n\t\tvirtual BOOL AddButton(UINT nID, BOOL bEnabled = TRUE);\n\t\tvirtual void Destroy();\n\t\tvirtual BOOL ReplaceBitmap(UINT NewToolBarID);\n\t\tvirtual BOOL SetBitmap(UINT nID);\n\t\tvirtual int  SetButtons(const std::vector<UINT>& vToolBarData) const;\n\t\tvirtual BOOL SetButtonText(int idButton, LPCTSTR szText);\n\t\tvirtual BOOL SetImages(COLORREF crMask, UINT ToolBarID, UINT ToolBarHotID, UINT ToolBarDisabledID);\n\n\t\t// Wrappers for Win32 API functions\n\t\tBOOL  AddButtons(UINT uNumButtons, LPTBBUTTON lpButtons) const;\n\t\tint   AddString(UINT nStringID) const;\n\t\tint   AddStrings(LPCTSTR lpszStrings) const;\n\t\tvoid  Autosize() const;\n\t\tvoid  CheckButton(int idButton, BOOL fCheck) const;\n\t\tint   CommandToIndex(int idButton) const;\n\t\tBOOL  DeleteButton(int iButton) const;\n\t\tBOOL  DisableButton(int idButton) const;\n\t\tBOOL  EnableButton(int idButton) const;\n\t\tBOOL  GetButton(int iButton, LPTBBUTTON lpButton) const;\n\t\tint   GetButtonCount() const;\n\t\tDWORD GetButtonSize() const;\n\t\tUINT  GetButtonState(int idButton) const;\n\t\tBYTE  GetButtonStyle(int idButton) const;\n\t\tCString GetButtonText(int idButton) const;\n\t\tint   GetCommandID(int iIndex) const;\n\t\tHIMAGELIST GetDisabledImageList() const;\n\t\tint   GetHotItem() const;\n\t\tHIMAGELIST GetHotImageList() const;\n\t\tHIMAGELIST GetImageList() const;\n\t\tCRect GetItemRect(int iIndex) const;\n\t\tCSize GetMaxSize() const;\n\t\tDWORD GetPadding() const;\n\t\tCRect GetRect(int idButton) const;\n\t\tint   GetRows() const;\n\t\tint   GetTextRows() const;\n\t\tHWND  GetToolTips() const;\n\t\tBOOL  HasText() const;\n\t\tBOOL  HideButton(int idButton, BOOL fShow) const;\n\t\tint   HitTest() const;\n\t\tBOOL  Indeterminate(int idButton, BOOL fIndeterminate) const;\n\t\tBOOL  InsertButton(int iButton, LPTBBUTTON lpButton) const;\n\t\tBOOL  IsButtonHidden(int idButton) const;\n\t\tBOOL  IsButtonHighlighted(int idButton) const;\n\t\tBOOL  IsButtonIndeterminate(int idButton) const;\n\t\tBOOL  IsButtonPressed(int idButton) const;\n\t\tint   MapAccelerator(TCHAR chAccel) const;\n\t\tBOOL  MarkButton(int idButton) const;\n\t\tBOOL  MoveButton(UINT uOldPos, UINT uNewPos) const;\n\t\tBOOL  PressButton(int idButton, BOOL fPress) const;\n\t\tvoid  SaveRestore(BOOL fSave, TBSAVEPARAMS* ptbsp) const;\n\t\tBOOL  SetBitmapSize(int cx, int cy) const;\n\t\tBOOL  SetButtonSize(int cx, int cy) const;\n\t\tBOOL  SetButtonState(int idButton, UINT State) const;\n\t\tBOOL  SetButtonStyle(int idButton, BYTE Style) const;\n\t\tBOOL  SetButtonWidth(int idButton, int nWidth) const;\n\t\tBOOL  SetCommandID(int iIndex, int idButton) const;\n\t\tHIMAGELIST SetDisableImageList(HIMAGELIST himlNewDisabled) const;\n\t\tDWORD SetDrawTextFlags(DWORD dwMask, DWORD dwDTFlags) const;\n\t\tDWORD SetExtendedStyle(DWORD dwExStyle) const;\n\t\tHIMAGELIST SetHotImageList(HIMAGELIST himlNewHot) const;\n\t\tint   SetHotItem(int iHot) const;\n\t\tHIMAGELIST SetImageList(HIMAGELIST himlNew) const;\n\t\tBOOL  SetIndent(int iIndent) const;\n\t\tBOOL  SetMaxTextRows(int iMaxRows) const;\n\t\tBOOL  SetPadding(int cx, int cy) const;\n\t\tvoid  SetToolTips(HWND hwndToolTip) const;\n\n\t\t// Attributes\n\t\tstd::vector<UINT>& GetToolBarData() const {return (std::vector <UINT> &)m_vToolBarData;}\n\t\tToolBarTheme& GetToolBarTheme() {return m_Theme;}\n\t\tvoid SetToolBarTheme(ToolBarTheme& Theme);\n\n\tprotected:\n\t// Overridables\n\t\tvirtual void OnCreate();\n\t\tvirtual void OnDestroy();\n\t\tvirtual void OnWindowPosChanging(WPARAM wParam, LPARAM lParam);\n\t\tvirtual LRESULT OnCustomDraw(NMHDR* pNMHDR);\n\t\tvirtual LRESULT OnNotifyReflect(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void PreCreate(CREATESTRUCT &cs);\n\t\tvirtual void PreRegisterClass(WNDCLASS &wc);\n\t\tvirtual LRESULT WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\n\tprivate:\n\t\tCToolBar(const CToolBar&);\t\t\t\t// Disable copy construction\n\t\tCToolBar& operator = (const CToolBar&); // Disable assignment operator\n\n\t\tstd::vector<UINT> m_vToolBarData;\t// vector of resource IDs for toolbar buttons\n\t\tstd::map<tString, int> m_StringMap;\t// a map of strings used in SetButtonText\n\t\tUINT m_OldToolBarID;\t\t\t\t// Bitmap Resource ID, used in AddBitmap/ReplaceBitmap\n\t\tToolBarTheme m_Theme;\t\t\t\t// The theme structure\n\t\tBOOL m_bDrawArrowBkgrnd;\t\t\t// True if a seperate arrow background is to be drawn\n\n\t};  // class CToolBar\n\n}\n\n\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n\nnamespace Win32xx\n{\n\n\t////////////////////////////////////\n\t// Definitions for the CToolBar class\n\t//\n\tinline CToolBar::CToolBar() : m_OldToolBarID(0), m_bDrawArrowBkgrnd(FALSE)\n\t{\n\t\tZeroMemory(&m_Theme, sizeof(ToolBarTheme));\n\t}\n\n\tinline CToolBar::~CToolBar()\n\t{\n\t}\n\n\tinline int CToolBar::AddBitmap(UINT ToolBarID)\n\t// Adds one or more images to the list of button images available for a toolbar.\n\n\t// Note: AddBitmap supports a maximum colour depth of 8 bits (256 colours)\n\t//       For more colours, use an ImageList instead\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tint iNumButtons = 0;\n\t\tstd::vector<UINT>::iterator iter;\n\t\tfor (iter = GetToolBarData().begin(); iter < GetToolBarData().end(); ++iter)\n\t\t\tif ((*iter) != 0) ++iNumButtons;\n\n\t\tTBADDBITMAP tbab = {0};\n\t\ttbab.hInst = GetApp()->GetResourceHandle();\n\t\ttbab.nID   = ToolBarID;\n\t\tint iResult = (int)SendMessage(TB_ADDBITMAP, iNumButtons, (LPARAM)&tbab);\n\n\t\tif (-1 != iResult)\n\t\t\tm_OldToolBarID = ToolBarID;\n\n\t\treturn iResult;\n\t}\n\n\tinline BOOL CToolBar::AddButton(UINT nID, BOOL bEnabled /* = TRUE */)\n\t// Adds Resource IDs to toolbar buttons.\n\t// A resource ID of 0 is a separator\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tm_vToolBarData.push_back(nID);\n\n\t\t// TBBUTTON structure for each button in the toolbar\n\t\tTBBUTTON tbb = {0};\n\n\t\tstd::vector<UINT>::iterator iter;\n\t\tint iImages = 0;\n\t\tfor(iter = m_vToolBarData.begin(); iter < m_vToolBarData.end(); ++iter)\n\t\t\tif (0 != *iter) iImages++;\n\n\t\tZeroMemory(&tbb, sizeof(TBBUTTON));\n\n\t\tif (0 == nID)\n\t\t{\n\t\t\ttbb.fsStyle = TBSTYLE_SEP;\n\t\t}\n\t\telse\n\t\t{\n\t\t\ttbb.dwData  = iImages -1;\n\t\t\ttbb.iBitmap = iImages -1;\n\t\t\ttbb.idCommand = nID;\n\t\t\ttbb.fsState = bEnabled? TBSTATE_ENABLED : 0;\n\t\t\ttbb.fsStyle = TBSTYLE_BUTTON;\n\t\t}\n\n\t\t// Add the button to the toolbar\n\t\treturn (BOOL)SendMessage(TB_ADDBUTTONS, 1L, (LPARAM)&tbb);\n\t}\n\n\tinline BOOL CToolBar::AddButtons(UINT uNumButtons, LPTBBUTTON lpButtons) const\n\t// Adds one or more buttons to a toolbar.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(TB_ADDBUTTONS, (LPARAM)uNumButtons, (WPARAM)lpButtons);\n\t}\n\n\tinline int CToolBar::AddString(UINT nStringID) const\n\t// Adds a new string, passed as a resource ID, to the toolbar's internal list of strings.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(TB_ADDSTRING, (LPARAM)GetApp()->GetResourceHandle(), (WPARAM)nStringID);\n\t}\n\n\tinline int CToolBar::AddStrings(LPCTSTR lpszStrings) const\n\t// Adds a new string or strings to the list of strings available for a toolbar control.\n\t// Strings in the buffer must be separated by a null character. You must ensure that the last string has two null terminators.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(TB_ADDSTRING, 0L, (WPARAM)lpszStrings);\n\t}\n\n\tinline void CToolBar::Autosize() const\n\t// Causes a toolbar to be resized.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(TB_AUTOSIZE, 0L, 0L);\n\t}\n\n\tinline void CToolBar::CheckButton(int idButton, BOOL fCheck) const\n\t// Checks or unchecks a given button in a toolbar.\n\t// When a button is checked, it is displayed in the pressed state.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(TB_CHECKBUTTON, (WPARAM)idButton, (LPARAM)MAKELONG(fCheck, 0));\n\t}\n\n\tinline int CToolBar::CommandToIndex(int idButton) const\n\t// Retrieves the zero-based index for the button associated with the specified command identifier\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\t// returns -1 on fail\n\t\treturn (int)SendMessage(TB_COMMANDTOINDEX, (WPARAM)idButton, 0L);\n\t}\n\n\tinline BOOL CToolBar::DeleteButton(int iButton) const\n\t// Deletes a button from the toolbar.\n\t// iButton is the Zero-based index of the button to delete.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(TB_DELETEBUTTON, (WPARAM)iButton, 0L);\n\t}\n\n\tinline void CToolBar::Destroy()\n\t// Allows CToolBar to be reused after the window is destroyed\n\t{\n\t\tCWnd::Destroy();\n\t\tm_StringMap.clear();\n\t}\n\n\tinline BOOL CToolBar::DisableButton(int idButton) const\n\t// Disables the specified button in a toolbar\n\t// An example of idButton would be IDM_FILE_OPEN\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(TB_ENABLEBUTTON, (WPARAM)idButton, (LPARAM) MAKELONG(FALSE, 0));\n\t}\n\n\tinline BOOL CToolBar::EnableButton(int idButton) const\n\t// Enables the specified button in a toolbar\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(TB_ENABLEBUTTON, (WPARAM)idButton, (LPARAM) MAKELONG(TRUE,0 ));\n\t}\n\n\tinline BOOL CToolBar::GetButton(int iButton, LPTBBUTTON lpButton) const\n\t// Recieves the TBBUTTON structure information from the specified button\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(TB_GETBUTTON, (LPARAM)iButton, (WPARAM)lpButton);\n\t}\n\n\tinline int CToolBar::GetButtonCount() const\n\t// Retrieves a count of the buttons currently in the toolbar\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(TB_BUTTONCOUNT, 0L, 0L);\n\t}\n\n\tinline DWORD CToolBar::GetButtonSize() const\n\t// Retrieves the current width and height of toolbar buttons, in pixels.\n\t// Returns a DWORD value that contains the width and height values in the low word and high word, respectively.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (DWORD)SendMessage(TB_GETBUTTONSIZE, 0L, 0L);\n\t}\n\n\tinline UINT CToolBar::GetButtonState(int idButton) const\n\t// Get the state of an individual button\n\t//\tTBSTATE_CHECKED\t\tThe button has the TBSTYLE_CHECK style and is being clicked.\n\t//\tTBSTATE_ELLIPSES\tThe button's text is cut off and an ellipsis is displayed.\n\t//\tTBSTATE_ENABLED\t\tThe button accepts user input. A button that doesn't have this state is grayed.\n\t//\tTBSTATE_HIDDEN\t\tThe button is not visible and cannot receive user input.\n\t//\tTBSTATE_INDETERMINATE\tThe button is grayed.\n\t//\tTBSTATE_MARKED\t\tThe button is marked. The interpretation of a marked item is dependent upon the application.\n\t//\tTBSTATE_PRESSED\t\tThe button is being clicked.\n\t//\tTBSTATE_WRAP\t\tThe button is followed by a line break.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (UINT)SendMessage(TB_GETSTATE, (WPARAM) idButton, 0L);\n\t}\n\n\tinline BYTE CToolBar::GetButtonStyle(int idButton) const\n\t//\tGet the the style of the toolbar control. The following button styles are supported:\n\t//\tTBSTYLE_BUTTON\t\tStandard pushbutton (default)\n\t//\tTBSTYLE_SEP\t\t\tSeparator\n\t//\tTBSTYLE_CHECK\t\tAuto check-box button\n\t//\tTBSTYLE_GROUP\t\tMarks the start of a group of buttons\n\t//\tTBSTYLE_CHECKGROUP\tMarks the start of a group of check-box buttons\n\t//\tTBSTYLE_DROPDOWN\tCreates a drop-down list button\n\t//\tTBSTYLE_AUTOSIZE\tThe button's width will be calculated based on the text of the button, not on the size of the image\n\t//\tTBSTYLE_NOPREFIX\tThe button text will not have an accelerator prefix associated with it\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tint iIndex = CommandToIndex(idButton);\n\t\tTBBUTTON tbb = {0};\n\t\tSendMessage(TB_GETBUTTON, iIndex, (LPARAM) &tbb);\n\n\t\treturn tbb.fsStyle;\n\t}\n\n\tinline CString CToolBar::GetButtonText(int idButton) const\n\t// Retrieves the display text of a button on a toolbar.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tint Length = (int)SendMessage(TB_GETBUTTONTEXT, idButton, 0);\n\t\tCString str;\n\t\tLPTSTR szStr = str.GetBuffer(Length +1);\n\t\tSendMessage(TB_GETBUTTONTEXT, (LPARAM)idButton, (WPARAM)szStr);\n\t\tstr.ReleaseBuffer();\n\t\treturn str;\n\t}\n\n\tinline int CToolBar::GetCommandID(int iIndex) const\n\t// Retrieves information about the specified button in a toolbar\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tTBBUTTON tbb = {0};\n\t\tSendMessage(TB_GETBUTTON, iIndex, (WPARAM) &tbb);\n\n\t\t// returns zero if failed\n\t\treturn tbb.idCommand;\n\t}\n\n\tinline HIMAGELIST CToolBar::GetDisabledImageList() const\n\t// Retrieves the image list that a toolbar control uses to display inactive buttons.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HIMAGELIST)SendMessage(TB_GETDISABLEDIMAGELIST, 0L, 0L);\n\t}\n\t\n\tinline HIMAGELIST CToolBar::GetHotImageList() const\n\t// Retrieves the image list that a toolbar control uses to display hot buttons.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HIMAGELIST)SendMessage(TB_GETHOTIMAGELIST, 0L, 0L);\t\n\t}\n\n\tinline int CToolBar::GetHotItem() const\n\t// Retrieves the index of the hot item in a toolbar, or -1 if no hot item is set.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(TB_GETHOTITEM, 0L, 0L);\n\t}\n\n\tinline HIMAGELIST CToolBar::GetImageList() const\n\t// Retrieves the image list that a toolbar control uses to display buttons in their default state.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HIMAGELIST)SendMessage(TB_GETIMAGELIST, 0L, 0L);\n\t}\n\n\tinline CRect CToolBar::GetItemRect(int iIndex) const\n\t// Retrieves the bounding rectangle of a button in a toolbar\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tCRect rc;\n\t\tint iCount = (int)SendMessage(TB_BUTTONCOUNT, 0L, 0L);\n\n\t\tif (iCount >= iIndex)\n\t\t\tSendMessage(TB_GETITEMRECT, (WPARAM)iIndex, (LPARAM)&rc);\n\n\t\treturn rc;\n\t}\n\n\tinline CSize CToolBar::GetMaxSize() const\n\t// Retrieves the total size of all of the visible buttons and separators in the toolbar\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tCSize sz;\n\t\tSendMessage(TB_GETMAXSIZE, 0L, (LPARAM)&sz);\n\n\t\t// This fixes a Windows bug calculating the size when TBSTYLE_DROPDOWN is used.\n\t\tint xMaxSize = 0;\n\t\tfor (int i= 0 ; i < GetButtonCount(); ++i)\n\t\t{\n\t\t\txMaxSize += GetItemRect(i).Width();\n\t\t}\n\n\t\tsz.cx = xMaxSize;\n\t\treturn sz;\n\t}\n\n\tinline DWORD CToolBar::GetPadding() const\n\t// Returns a DWORD value that contains the horizontal padding in the low word and the vertical padding in the high word, in pixels.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (DWORD)SendMessage(TB_GETPADDING, 0L, 0L);\n\t}\n\n\tinline CRect CToolBar::GetRect(int idButton) const\n\t// Retrieves the bounding rectangle for a specified toolbar button.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tCRect rc;\n\t\tSendMessage(TB_GETRECT, (WPARAM)idButton, (LPARAM)&rc);\n\t\treturn rc;\n\t}\n\n\tinline int CToolBar::GetRows() const\n\t// Retrieves the number of rows of buttons in a toolbar with the TBSTYLE_WRAPABLE style.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(TB_GETROWS, 0L, 0L);\n\t}\n\n\tinline int CToolBar::GetTextRows() const\n\t// Retrieves the maximum number of text rows that can be displayed on a toolbar button.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(TB_GETTEXTROWS, 0L, 0L);\n\t}\n\n\tinline HWND CToolBar::GetToolTips() const\n\t// Retrieves the handle to the ToolTip control, if any, associated with the toolbar.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HWND)SendMessage(TB_GETTOOLTIPS, 0L, 0L);\n\t}\n\n\tinline BOOL CToolBar::HasText() const\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tBOOL bReturn = FALSE;\n\n\t\tfor (int i = 0 ; i < GetButtonCount(); ++i)\n\t\t{\n\t\t\tif (SendMessage(TB_GETBUTTONTEXT, GetCommandID(i), 0L) != -1)\n\t\t\t\tbReturn = TRUE;\n\t\t}\n\n\t\t// return TRUE if any button has text\n\t\treturn bReturn;\n\t}\n\n\tinline BOOL CToolBar::HideButton(int idButton, BOOL fShow) const\n\t//Hides or shows the specified button in a toolbar.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(TB_HIDEBUTTON, (WPARAM)idButton, (LPARAM)MAKELONG (fShow, 0));\n\t}\n\n\tinline int CToolBar::HitTest() const\n\t// Determines where a point lies in a toolbar control.\n\n\t// We do our own hit test since TB_HITTEST is a bit buggy,\n\t// and also doesn't work at all on earliest versions of Win95\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tCPoint pt = GetCursorPos();\n\t\tScreenToClient(pt);\n\n\t\tint nButtons = (int)SendMessage(TB_BUTTONCOUNT, 0L, 0L);\n\t\tint iButton = -1;\n\n\t\tfor (int i = 0 ; i < nButtons; ++i)\n\t\t{\n\t\t\tCRect rc = GetItemRect(i);\n\t\t\tif (rc.PtInRect(pt))\n\t\t\t\tiButton = i;\n\t\t}\n\n\t\treturn iButton;\n\t}\n\n\tinline BOOL CToolBar::Indeterminate(int idButton, BOOL fIndeterminate) const\n\t//Hides or shows the specified button in a toolbar.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(TB_INDETERMINATE, (WPARAM)idButton, (LPARAM)MAKELONG (fIndeterminate, 0));\n\t}\n\n\tinline BOOL CToolBar::InsertButton(int iButton, LPTBBUTTON lpButton) const\n\t// Inserts a button in a toolbar.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(TB_INSERTBUTTON, (WPARAM)iButton, (LPARAM)lpButton);\n\t}\n\n\tinline BOOL CToolBar::IsButtonHidden(int idButton) const\n\t// Determines whether the specified button in a toolbar is hidden.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(TB_ISBUTTONHIDDEN, (WPARAM)idButton, 0L);\n\t}\n\n\tinline BOOL CToolBar::IsButtonHighlighted(int idButton) const\n\t// Checks the highlight state of a toolbar button.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(TB_ISBUTTONHIGHLIGHTED, (WPARAM)idButton, 0L);\n\t}\n\n\tinline BOOL CToolBar::IsButtonIndeterminate(int idButton) const\n\t// Determines whether the specified button in a toolbar is indeterminate.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(TB_ISBUTTONINDETERMINATE, (WPARAM)idButton, 0L);\n\t}\n\n\tinline BOOL CToolBar::IsButtonPressed(int idButton) const\n\t// Determines whether the specified button in a toolbar is pressed.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(TB_ISBUTTONPRESSED, (WPARAM)idButton, 0L);\n\t}\n\n\tinline int CToolBar::MapAccelerator(TCHAR chAccel) const\n\t// Determines whether the specified button in a toolbar is pressed.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tint uButtonID;\n\t\tint idButton;\n\t\tif (SendMessage(TB_MAPACCELERATOR, (WPARAM)chAccel, (LPARAM)&uButtonID))\n\t\t\tidButton = uButtonID;\n\t\telse\n\t\t\tidButton = -1;\n\n\t\treturn idButton;\n\t}\n\n\tinline BOOL CToolBar::MarkButton(int idButton) const\n\t// Sets the highlight state of a given button in a toolbar control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(TB_MARKBUTTON, (WPARAM)idButton, 0L);\n\t}\n\n\tinline BOOL CToolBar::MoveButton(UINT uOldPos, UINT uNewPos) const\n\t// Moves a button from one index to another.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(TB_MOVEBUTTON, (WPARAM)uOldPos, (LPARAM)uNewPos);\n\t}\n\n\n\tinline void CToolBar::OnCreate()\n\t{\n\t\t// We must send this message before sending the TB_ADDBITMAP or TB_ADDBUTTONS message\n\t\tSendMessage(TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0L);\n\n\t\t// allows buttons to have a separate dropdown arrow\n\t\t// Note: TBN_DROPDOWN notification is sent by a toolbar control when the user clicks a dropdown button\n\t\tSendMessage(TB_SETEXTENDEDSTYLE, 0L, TBSTYLE_EX_DRAWDDARROWS);\n\n\t\t// Turn of Double click processing (i.e. treat a double click as two single clicks)\n\t\tDWORD dwStyle = (DWORD)GetClassLongPtr(GCL_STYLE);\n\t\tdwStyle &= \t~CS_DBLCLKS;\n\t\tSetClassLongPtr(GCL_STYLE, dwStyle);\n\n\t\t// Add extra styles for toolbars inside a rebar\n\t\tif (lstrcmp(GetParent()->GetClassName(), _T(\"ReBarWindow32\")) == 0)\n\t\t{\n\t\t\tDWORD style = (DWORD)GetWindowLongPtr(GWL_STYLE);\n\t\t\tstyle |= CCS_NODIVIDER | CCS_NORESIZE;\n\t\t\tSetWindowLongPtr(GWL_STYLE, style);\n\t\t}\n\n\t\tSetButtons(m_vToolBarData);\n\n\t\t// Set rows of text to zero\n\t\tSendMessage(TB_SETMAXTEXTROWS, 0L, 0L);\n\t}\n\n\tinline LRESULT CToolBar::OnCustomDraw(NMHDR* pNMHDR)\n\t// With CustomDraw we manually control the drawing of each toolbar button\n\t{\n\t\tLPNMTBCUSTOMDRAW lpNMCustomDraw = (LPNMTBCUSTOMDRAW)pNMHDR;\n\n\t\tswitch (lpNMCustomDraw->nmcd.dwDrawStage)\n\t\t{\n\t\t// Begin paint cycle\n\t\tcase CDDS_PREPAINT:\n\t\t\t// Send NM_CUSTOMDRAW item draw, and post-paint notification messages.\n\t\t\treturn CDRF_NOTIFYITEMDRAW | CDRF_NOTIFYPOSTPAINT ;\n\n\t\t// An item is about to be drawn\n\t\tcase CDDS_ITEMPREPAINT:\n\t\t\t{\n\t\t\t\tCDC* pDrawDC = FromHandle(lpNMCustomDraw->nmcd.hdc);\n\t\t\t\tCRect rcRect = lpNMCustomDraw->nmcd.rc;\n\t\t\t\tint nState = lpNMCustomDraw->nmcd.uItemState;\n\t\t\t\tDWORD dwItem = (DWORD)lpNMCustomDraw->nmcd.dwItemSpec;\n\t\t\t\tDWORD dwTBStyle = (DWORD)SendMessage(TB_GETSTYLE, 0L, 0L);\n\t\t\t\tint nStyle = GetButtonStyle(dwItem);\n\n\t\t\t\tint nButton = (int)SendMessage(TB_COMMANDTOINDEX, (WPARAM) dwItem, 0L);\n\t\t\t\tTBBUTTON tbb = {0};\n\t\t\t\tSendMessage(TB_GETBUTTON, nButton, (LPARAM)&tbb);\n\t\t\t\tint iImage = (int)tbb.dwData;\n\n\t\t\t\t// Calculate text size\n\t\t\t\tstd::vector<TCHAR> vText(MAX_MENU_STRING, _T('\\0'));\n\t\t\t\tTCHAR* pszText = &vText[0];\n\t\t\t\tCSize TextSize;\n\t\t\t\tif (HasText())\t// Does any button have text?\n\t\t\t\t{\n\t\t\t\t\tpDrawDC->SelectObject(GetFont());\n\t\t\t\t\tif (SendMessage(TB_GETBUTTONTEXT, dwItem, (LPARAM)pszText)> 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tTextSize = pDrawDC->GetTextExtentPoint32(pszText, lstrlen(pszText));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Draw outline rectangle\n\t\t\t\tif (nState & (CDIS_HOT | CDIS_SELECTED | CDIS_CHECKED))\n\t\t\t\t{\n\t\t\t\t\tpDrawDC->CreatePen(PS_SOLID, 1, m_Theme.clrOutline);\n\t\t\t\t\tpDrawDC->MoveTo(rcRect.left, rcRect.top);\n\t\t\t\t\tpDrawDC->LineTo(rcRect.left, rcRect.bottom-1);\n\t\t\t\t\tpDrawDC->LineTo(rcRect.right-1, rcRect.bottom-1);\n\t\t\t\t\tpDrawDC->LineTo(rcRect.right-1, rcRect.top);\n\t\t\t\t\tpDrawDC->LineTo(rcRect.left, rcRect.top);\n\t\t\t\t}\n\n\t\t\t\t// Draw filled gradient background\n\t\t\t\trcRect.InflateRect(-1, -1);\n\t\t\t\tif ((nState & (CDIS_SELECTED|CDIS_CHECKED)) || (GetButtonState(dwItem) & TBSTATE_PRESSED))\n\t\t\t\t{\n\t\t\t\t\tpDrawDC->GradientFill(m_Theme.clrPressed1, m_Theme.clrPressed2, rcRect, FALSE);\n\t\t\t\t}\n\t\t\t\telse if (nState & CDIS_HOT)\n\t\t\t\t{\n\t\t\t\t\tpDrawDC->GradientFill(m_Theme.clrHot1, m_Theme.clrHot2, rcRect, FALSE);\n\t\t\t\t}\n\n\t\t\t\t// Get the appropriate image list depending on the button state\n\t\t\t\tHIMAGELIST himlToolBar;\n\t\t\t\tif (nState & CDIS_DISABLED)\n\t\t\t\t{\n\t\t\t\t\thimlToolBar = (HIMAGELIST)SendMessage(TB_GETDISABLEDIMAGELIST, 0L, 0L);\n\t\t\t\t}\n\t\t\t\telse if (nState & (CDIS_HOT | CDIS_SELECTED | CDIS_CHECKED))\n\t\t\t\t{\n\t\t\t\t\thimlToolBar = (HIMAGELIST)SendMessage(TB_GETHOTIMAGELIST, 0L, 0L);\n\t\t\t\t\tif (0 == himlToolBar)\n\t\t\t\t\t\thimlToolBar = (HIMAGELIST)SendMessage(TB_GETIMAGELIST, 0L, 0L);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\thimlToolBar = (HIMAGELIST)SendMessage(TB_GETIMAGELIST, 0L, 0L);\n\t\t\t\t}\n\n\t\t\t\tBOOL IsWin95 = (1400 == (GetWinVersion()) || (2400 == GetWinVersion()));\n\n\t\t\t\t// Calculate image position\n\t\t\t\tint cxImage = 0;\n\t\t\t\tint cyImage = 0;\n\t\t\t\tImageList_GetIconSize(himlToolBar, &cxImage, &cyImage);\n\n\t\t\t\tint yImage = (rcRect.bottom - rcRect.top - cyImage - TextSize.cy +2)/2;\n\t\t\t\tint xImage = (rcRect.right + rcRect.left - cxImage)/2 + ((nState & (CDIS_SELECTED|CDIS_CHECKED))? 1:0);\n\t\t\t\tif (dwTBStyle & TBSTYLE_LIST)\n\t\t\t\t{\n\t\t\t\t\txImage = rcRect.left + (IsXPThemed()?2:4) + ((nState & CDIS_SELECTED)? 1:0);\n\t\t\t\t\tyImage = (rcRect.bottom -rcRect.top - cyImage +2)/2 + ((nState & (CDIS_SELECTED|CDIS_CHECKED))? 1:0);\n\t\t\t\t}\n\n\t\t\t\t// Handle the TBSTYLE_DROPDOWN and BTNS_WHOLEDROPDOWN styles\n\t\t\t\tif ((nStyle & TBSTYLE_DROPDOWN) || ((nStyle & 0x0080) && (!IsWin95)))\n\t\t\t\t{\n\t\t\t\t\t// Calculate the dropdown arrow position\n\t\t\t\t\tint xAPos = (nStyle & TBSTYLE_DROPDOWN)? rcRect.right -6 : (rcRect.right + rcRect.left + cxImage + 4)/2;\n\t\t\t\t\tint yAPos = (nStyle & TBSTYLE_DROPDOWN)? (rcRect.bottom - rcRect.top +1)/2 : (cyImage)/2;\n\t\t\t\t\tif (dwTBStyle & TBSTYLE_LIST)\n\t\t\t\t\t{\n\t\t\t\t\t\txAPos = (nStyle & TBSTYLE_DROPDOWN)?rcRect.right -6:rcRect.right -5;\n\t\t\t\t\t\tyAPos =\t(rcRect.bottom - rcRect.top +1)/2 + ((nStyle & TBSTYLE_DROPDOWN)?0:1);\n\t\t\t\t\t}\n\n\t\t\t\t\txImage -= (nStyle & TBSTYLE_DROPDOWN)?((dwTBStyle & TBSTYLE_LIST)? (IsXPThemed()?-4:0):6):((dwTBStyle & TBSTYLE_LIST)? 0:4);\n\n\t\t\t\t\t// Draw separate background for dropdown arrow\n\t\t\t\t\tif ((m_bDrawArrowBkgrnd) && (nState & CDIS_HOT))\n\t\t\t\t\t{\n\t\t\t\t\t\tCRect rcArrowBkgnd = rcRect;\n\t\t\t\t\t\trcArrowBkgnd.left = rcArrowBkgnd.right - 13;\n\t\t\t\t\t\tpDrawDC->GradientFill(m_Theme.clrPressed1, m_Theme.clrPressed2, rcArrowBkgnd, FALSE);\n\t\t\t\t\t}\n\n\t\t\t\t\tm_bDrawArrowBkgrnd = FALSE;\n\n\t\t\t\t\t// Manually draw the dropdown arrow\n\t\t\t\t\tpDrawDC->CreatePen(PS_SOLID, 1, RGB(0,0,0));\n\t\t\t\t\tfor (int i = 2; i >= 0; --i)\n\t\t\t\t\t{\n\t\t\t\t\t\tpDrawDC->MoveTo(xAPos -i-1, yAPos - i+1);\n\t\t\t\t\t\tpDrawDC->LineTo(xAPos +i,   yAPos - i+1);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Draw line between icon and dropdown arrow\n\t\t\t\t\tif ((nStyle & TBSTYLE_DROPDOWN) && ((nState & CDIS_SELECTED) || nState & CDIS_HOT))\n\t\t\t\t\t{\n\t\t\t\t\t\tpDrawDC->CreatePen(PS_SOLID, 1, m_Theme.clrOutline);\n\t\t\t\t\t\tpDrawDC->MoveTo(rcRect.right - 13, rcRect.top);\n\t\t\t\t\t\tpDrawDC->LineTo(rcRect.right - 13, rcRect.bottom);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Draw the button image\n\t\t\t\tif (xImage > 0)\n\t\t\t\t{\n\t\t\t\t\tImageList_Draw(himlToolBar, iImage, *pDrawDC, xImage, yImage, ILD_TRANSPARENT);\n\t\t\t\t}\n\n\t\t\t\t//Draw Text\n\t\t\t\tif (lstrlen(pszText) > 0)\n\t\t\t\t{\n\t\t\t\t\tint iWidth = rcRect.right - rcRect.left - ((nStyle & TBSTYLE_DROPDOWN)?13:0);\n\t\t\t\t\tCRect rcText(0, 0, MIN(TextSize.cx, iWidth), TextSize.cy);\n\n\t\t\t\t\tint xOffset = (rcRect.right + rcRect.left - rcText.right + rcText.left - ((nStyle & TBSTYLE_DROPDOWN)? 11 : 1))/2;\n\t\t\t\t\tint yOffset = yImage + cyImage +1;\n\n\t\t\t\t\tif (dwTBStyle & TBSTYLE_LIST)\n\t\t\t\t\t{\n\t\t\t\t\t\txOffset = rcRect.left + cxImage + ((nStyle & TBSTYLE_DROPDOWN)?(IsXPThemed()?10:6): 6) + ((nState & CDIS_SELECTED)? 1:0);\n\t\t\t\t\t\tyOffset = (2+rcRect.bottom - rcRect.top - rcText.bottom + rcText.top)/2 + ((nState & CDIS_SELECTED)? 1:0);\n\t\t\t\t\t\trcText.right = MIN(rcText.right,  rcRect.right - xOffset);\n\t\t\t\t\t}\n\n\t\t\t\t\tOffsetRect(&rcText, xOffset, yOffset);\n\n\t\t\t\t\tint iMode = pDrawDC->SetBkMode(TRANSPARENT);\n\t\t\t\t\tpDrawDC->SelectObject(GetFont());\n\n\t\t\t\t\tif (nState & (CDIS_DISABLED))\n\t\t\t\t\t{\n\t\t\t\t\t\t// Draw text twice for embossed look\n\t\t\t\t\t\trcText.OffsetRect(1, 1);\n\t\t\t\t\t\tpDrawDC->SetTextColor(RGB(255,255,255));\n\t\t\t\t\t\tpDrawDC->DrawText(pszText, lstrlen(pszText), rcText, DT_LEFT);\n\t\t\t\t\t\trcText.OffsetRect(-1, -1);\n\t\t\t\t\t\tpDrawDC->SetTextColor(GetSysColor(COLOR_GRAYTEXT));\n\t\t\t\t\t\tpDrawDC->DrawText(pszText, lstrlen(pszText), rcText, DT_LEFT);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tpDrawDC->SetTextColor(GetSysColor(COLOR_BTNTEXT));\n\t\t\t\t\t\tpDrawDC->DrawText(pszText, lstrlen(pszText), rcText, DT_LEFT | DT_END_ELLIPSIS);\n\t\t\t\t\t}\n\t\t\t\t\tpDrawDC->SetBkMode(iMode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn CDRF_SKIPDEFAULT;  // No further drawing\n\t\t}\n\t\treturn 0L;\n\t}\n\n\tinline void CToolBar::OnDestroy()\n\t{\n\t\tHIMAGELIST himlToolBar    = (HIMAGELIST)SendMessage(TB_GETIMAGELIST,    0L, 0L);\n\t\tHIMAGELIST himlToolBarHot = (HIMAGELIST)SendMessage(TB_GETHOTIMAGELIST, 0L, 0L);\n\t\tHIMAGELIST himlToolBarDis = (HIMAGELIST)SendMessage(TB_GETDISABLEDIMAGELIST, 0L, 0L);\n\t\tImageList_Destroy(himlToolBar);\n\t\tImageList_Destroy(himlToolBarHot);\n\t\tImageList_Destroy(himlToolBarDis);\n\t}\n\n\tinline LRESULT CToolBar::OnNotifyReflect(WPARAM wParam, LPARAM lParam)\n\t// Notifications sent to the parent window are reflected back here\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\n\t\tswitch (((LPNMHDR)lParam)->code)\n\t\t{\n\t\t\tcase NM_CUSTOMDRAW:\n\t\t\t{\n\t\t\t\tif (m_Theme.UseThemes)\n\t\t\t\t\treturn OnCustomDraw((LPNMHDR) lParam);\n\t\t\t}\n\t\t\tbreak;\n\n\t\t\tcase TBN_DROPDOWN:\n\t\t\t{\n\t\t\t\tint iItem = ((LPNMTOOLBAR) lParam)->iItem;\n\n\t\t\t\t// a boolean expression\n\t\t\t\tm_bDrawArrowBkgrnd = (GetButtonStyle(iItem) & TBSTYLE_DROPDOWN);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\treturn 0L;\n\t}\n\n\tinline void CToolBar::OnWindowPosChanging(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\n\t\t// Adjust size for toolbars inside a rebar\n\t\tCWnd* pParent = GetParent();\n\t\tif (lstrcmp(pParent->GetClassName(), _T(\"ReBarWindow32\")) == 0)\n\t\t{\n\t\t\tReBarTheme* pTheme = (ReBarTheme*)pParent->SendMessage(UWM_GETREBARTHEME, 0, 0);\n\n\t\t\tif (pTheme && pTheme->UseThemes && pTheme->ShortBands)\n\t\t\t{\n\t\t\t\tLPWINDOWPOS pWinPos = (LPWINDOWPOS)lParam;\n\t\t\t\tpWinPos->cx = GetMaxSize().cx+2;\n\t\t\t}\n\t\t}\n\t}\n\n\tinline void CToolBar::PreCreate(CREATESTRUCT &cs)\n\t{\n\t\t// Sets the CREATESTRUCT parameters prior to window creation\n\t\tcs.style = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | TBSTYLE_TOOLTIPS | TBSTYLE_FLAT;\n\t}\n\n\tinline void CToolBar::PreRegisterClass(WNDCLASS &wc)\n\t{\n\t\t// Set the Window Class\n\t\twc.lpszClassName =  TOOLBARCLASSNAME;\n\t}\n\n\tinline BOOL CToolBar::PressButton(int idButton, BOOL fPress) const\n\t// Presses or releases the specified button in a toolbar.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(TB_PRESSBUTTON, (WPARAM)idButton, (LPARAM)MAKELONG(fPress, 0));\n\t}\n\n\tinline BOOL CToolBar::ReplaceBitmap(UINT NewToolBarID)\n\t// Replaces an existing bitmap with a new bitmap.\n\n\t// Note: ReplaceBitmap supports a maximum colour depth of 8 bits (256 colours)\n\t//       For more colours, use an ImageList instead\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tint iNumButtons = 0;\n\t\tstd::vector<UINT>::iterator iter;\n\t\tfor (iter = GetToolBarData().begin(); iter < GetToolBarData().end(); ++iter)\n\t\t\tif ((*iter) != 0) ++iNumButtons;\n\n\t\tTBREPLACEBITMAP tbrb = {0};\n\t\ttbrb.hInstNew = GetApp()->GetResourceHandle();\n\t\ttbrb.hInstOld = GetApp()->GetResourceHandle();\n\t\ttbrb.nIDNew = NewToolBarID;\n\t\ttbrb.nIDOld = m_OldToolBarID;\n\t\ttbrb.nButtons  = iNumButtons;\n\n\t\tBOOL bResult = (BOOL)SendMessage(TB_REPLACEBITMAP, iNumButtons, (LPARAM)&tbrb);\n\t\tif (bResult)\n\t\t\tm_OldToolBarID = NewToolBarID;\n\n\t\treturn bResult;\n\t}\n\n\tinline void CToolBar::SaveRestore(BOOL fSave, TBSAVEPARAMS* ptbsp) const\n\t// Presses or releases the specified button in a toolbar.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(TB_PRESSBUTTON, (WPARAM)fSave, (LPARAM)ptbsp);\n\t}\n\n\tinline BOOL CToolBar::SetBitmap(UINT nID)\n\t// Set the button images\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tCBitmap Bitmap(nID);\n\t\tassert (Bitmap.GetHandle());\n\t\tBITMAP bm = Bitmap.GetBitmapData();\n\n\t\tint iNumButtons = 0;\n\t\tstd::vector<UINT>::iterator iter;\n\t\tfor (iter = GetToolBarData().begin(); iter < GetToolBarData().end(); ++iter)\n\t\t\tif ((*iter) != 0) ++iNumButtons;\n\n\t\tint iImageWidth  = bm.bmWidth / iNumButtons;\n\t\tint iImageHeight = bm.bmHeight;\n\n\t\t// Set the bitmap size first\n\t\tSetBitmapSize(iImageWidth, iImageHeight);\n\n\t\tBOOL bResult = FALSE;\n\t\tif (m_OldToolBarID)\n\t\t\tbResult = ReplaceBitmap(nID);\n\t\telse\n\t\t\tbResult = (BOOL)AddBitmap(nID);\n\n\t\treturn bResult;\n\t}\n\n\tinline BOOL CToolBar::SetBitmapSize(int cx, int cy) const\n\t// Sets the size of the bitmapped images to be added to a toolbar.\n\n\t// Needs to be used when the image size is not the default 16 x 15\n\t// Call this function before using AddBitmap or ReplaceBitmap\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(TB_SETBITMAPSIZE, 0L, MAKELONG(cx, cy));\n\t}\n\n\tinline int CToolBar::SetButtons(const std::vector<UINT>& vToolBarData) const\n\t// Assigns a resource ID to each toolbar button\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tint iImages = 0;\n\t\tUINT iNumButtons = (UINT)vToolBarData.size();\n\n\t\t// Remove any existing buttons\n\t\twhile (SendMessage(TB_BUTTONCOUNT,  0L, 0L) > 0)\n\t\t{\n\t\t\tif(!SendMessage(TB_DELETEBUTTON, 0L, 0L))\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (iNumButtons > 0)\n\t\t{\n\t\t\t// TBBUTTON structure for each button in the toolbar\n\t\t\tTBBUTTON tbb = {0};\n\n\t\t\tfor (UINT j = 0 ; j < iNumButtons; ++j)\n\t\t\t{\n\t\t\t\tZeroMemory(&tbb, sizeof(TBBUTTON));\n\n\t\t\t\tif (0 == vToolBarData[j])\n\t\t\t\t{\n\t\t\t\t\ttbb.fsStyle = TBSTYLE_SEP;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\ttbb.dwData  = iImages;\n\t\t\t\t\ttbb.iBitmap = iImages;\n\t\t\t\t\ttbb.idCommand = vToolBarData[j];\n\t\t\t\t\ttbb.fsState = TBSTATE_ENABLED;\n\t\t\t\t\ttbb.fsStyle = TBSTYLE_BUTTON;\n\t\t\t\t}\n\n\t\t\t\t// Add the button to the toolbar\n\t\t\t\tif (SendMessage(TB_ADDBUTTONS, 1L, (LPARAM)&tbb))\n\t\t\t\t\tiImages++;\n\t\t\t\telse\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn iImages;\n\t}\n\n\tinline BOOL CToolBar::SetButtonSize(int cx, int cy) const\n\t// Sets the size of the buttons to be added to a toolbar\n\t// The size can be set only before adding any buttons to the toolbar\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(TB_SETBUTTONSIZE, 0L, MAKELONG(cx, cy));\n\t}\n\n\tinline BOOL CToolBar::SetButtonState(int idButton, UINT State) const\n\t{\n\t// Set the state of an individual button\n\t//\tTBSTATE_CHECKED\t\tThe button has the TBSTYLE_CHECK style and is being clicked.\n\t//\tTBSTATE_ELLIPSES\tThe button's text is cut off and an ellipsis is displayed.\n\t//\tTBSTATE_ENABLED\t\tThe button accepts user input. A button that doesn't have this state is grayed.\n\t//\tTBSTATE_HIDDEN\t\tThe button is not visible and cannot receive user input.\n\t//\tTBSTATE_INDETERMINATE\tThe button is grayed.\n\t//\tTBSTATE_MARKED\t\tThe button is marked. The interpretation of a marked item is dependent upon the application.\n\t//\tTBSTATE_PRESSED\t\tThe button is being clicked.\n\t//\tTBSTATE_WRAP\t\tThe button is followed by a line break.\n\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(TB_SETSTATE, (WPARAM) idButton, (LPARAM)MAKELONG (State, 0));\n \t}\n\n\tinline BOOL CToolBar::SetButtonStyle(int idButton, BYTE Style) const\n\t//\tThe the style of the toolbar control. The following button styles are supported:\n\t//\tTBSTYLE_BUTTON\t\tStandard pushbutton (default)\n\t//\tTBSTYLE_SEP\t\t\tSeparator\n\t//\tTBSTYLE_CHECK\t\tAuto check-box button\n\t//\tTBSTYLE_GROUP\t\tMarks the start of a group of buttons\n\t//\tTBSTYLE_CHECKGROUP\tMarks the start of a group of check-box buttons\n\t//\tTBSTYLE_DROPDOWN\tCreates a drop-down list button\n\t//\tTBSTYLE_AUTOSIZE\tThe button's width will be calculated based on the text of the button, not on the size of the image\n\t//\tTBSTYLE_NOPREFIX\tThe button text will not have an accelerator prefix associated with it\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tTBBUTTONINFO tbbi = {0};\n\t\ttbbi.cbSize = sizeof(TBBUTTONINFO);\n\t\ttbbi.dwMask = TBIF_STYLE;\n\t\ttbbi.fsStyle = Style;\n\n\t\t// Note:  TB_SETBUTTONINFO requires comctl32.dll version 4.71 or later\n\t\t//        i.e. Win95 with IE4 / NT with IE4   or later\n\t\treturn (BOOL)SendMessage(TB_SETBUTTONINFO, idButton, (LPARAM) &tbbi);\n\t}\n\n\tinline BOOL CToolBar::SetButtonText(int idButton, LPCTSTR szText)\n\t// This rather convoluted approach to setting toolbar button text supports\n\t// all versions of Windows, including Win95 with COMCTL32.DLL version 4.0\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tint iIndex = CommandToIndex(idButton);\n\t\tassert(-1 != iIndex);\n\n\t\tBOOL Succeeded = TRUE;\n\t\ttString sString = szText;\n\t\tstd::map<tString, int>::iterator m;\n\t\tint iString;\n\n\t\t// Check to see if the string is already added\n\t\tm = m_StringMap.find(sString);\n\t\tif (m_StringMap.end() == m)\n\t\t{\n\t\t\tif (0 == m_StringMap.size())\n\t\t\t{\n\t\t\t\t// Place a blank string first in the string table, in case some\n\t\t\t\t// buttons don't have text\n\t\t\t\tTCHAR szString[3] = _T(\" \");\n\t\t\t\tszString[2] = _T('\\0');\t\t// Double-null terminate\n\t\t\t\tSendMessage(TB_ADDSTRING, 0L, (LPARAM)szString);\n\t\t\t}\n\n\t\t\t// No index for this string exists, so create it now\n\t\t\tTCHAR szBuf[80] = _T(\"\");\n\t\t\tlstrcpyn(szBuf, szText, 79);\n\t\t\tszBuf[lstrlen(szBuf)+1] = _T('\\0');\t\t// Double-null terminate\n\n\t\t\tiString = (int)SendMessage(TB_ADDSTRING, 0L, (LPARAM)szBuf);\n\t\t\tif (-1 == iString )\n\t\t\t\tSucceeded = FALSE;\n\n\t\t\t// Save the string its index in our map\n\t\t\tm_StringMap.insert(std::make_pair(sString, iString));\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// String found, use the index from our map\n\t\t\tiString = m->second;\n\t\t}\n\n\t\tif (Succeeded)\n\t\t{\n\t\t\tTBBUTTON tbb = {0};\n\t\t\tSucceeded = (BOOL)SendMessage(TB_GETBUTTON, iIndex, (LPARAM)&tbb);\n\n\t\t\ttbb.iString = iString;\n\n\t\t\t// Turn off ToolBar drawing\n\t\t\tSendMessage(WM_SETREDRAW, FALSE, 0L);\n\n\t\t\tif (Succeeded)\n\t\t\t\tSucceeded = (BOOL)SendMessage(TB_DELETEBUTTON, iIndex, 0L);\n\n\t\t\tif (Succeeded)\n\t\t\t\tSucceeded = (BOOL)SendMessage(TB_INSERTBUTTON, iIndex, (LPARAM)&tbb);\n\n\t\t\t// Ensure the button now includes some text rows\n\t\t\tif (0 == SendMessage(TB_GETTEXTROWS, 0L, 0L))\n\t\t\t\tSendMessage(TB_SETMAXTEXTROWS, 1L, 0L);\n\n\t\t\t// Turn on ToolBar drawing\n\t\t\tSendMessage(WM_SETREDRAW, TRUE, 0L);\n\t\t}\n\t\t// Redraw button\n\t\tCRect r = GetItemRect(iIndex);\n\t\tInvalidateRect(&r, TRUE);\n\n\t\treturn Succeeded;\n\t}\n\n\tinline BOOL CToolBar::SetButtonWidth(int idButton, int nWidth) const\n\t// The set button width can adjust the width of the button after it is created.\n\t// This is useful when replacing a button with a ComboBox or other control.\n\t// Note:  TB_SETBUTTONINFO requires comctl32.dll version 4.71 or later\n\t//        i.e. Win95 with IE4 / NT with IE4   or later\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tTBBUTTONINFO tbbi = {0};\n\t\ttbbi.cbSize = sizeof(TBBUTTONINFO);\n\t\ttbbi.dwMask = TBIF_SIZE;\n\t\ttbbi.cx = (WORD)nWidth;\n\t\tBOOL bResult = (BOOL)SendMessage(TB_SETBUTTONINFO, (WPARAM)idButton, (LPARAM)&tbbi);\n\n\t\t// Send a changed message to the parent (used by the rebar)\n\t\tSIZE MaxSize = GetMaxSize();\n\t\tGetParent()->SendMessage(UWM_TOOLBAR_RESIZE, (WPARAM)m_hWnd, (LPARAM)&MaxSize);\n\n\t\treturn bResult;\n\t}\n\n\tinline BOOL CToolBar::SetCommandID(int iIndex, int idButton) const\n\t// Sets the command identifier of a toolbar button\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(TB_SETCMDID, iIndex, idButton);\n\t}\n\n\tinline HIMAGELIST CToolBar::SetDisableImageList(HIMAGELIST himlNewDisabled) const\n\t// Sets the image list that the toolbar control will use to display disabled buttons.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HIMAGELIST)SendMessage(TB_SETDISABLEDIMAGELIST, 0L, (LPARAM)himlNewDisabled);\n\t}\n\n\tinline DWORD CToolBar::SetDrawTextFlags(DWORD dwMask, DWORD dwDTFlags) const\n\t// Sets the text drawing flags for the toolbar.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (DWORD)SendMessage(TB_SETDRAWTEXTFLAGS, (WPARAM)dwMask, (LPARAM)dwDTFlags);\n\t}\n\n\tinline DWORD CToolBar::SetExtendedStyle(DWORD dwExStyle) const\n\t// Sets the text drawing flags for the toolbar.\n\t// Extended styles include: TBSTYLE_EX_DRAWDDARROWS, TBSTYLE_EX_HIDECLIPPEDBUTTONS, TBSTYLE_EX_DOUBLEBUFFER and TBSTYLE_EX_MIXEDBUTTONS\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (DWORD)SendMessage(TB_SETEXTENDEDSTYLE, 0L, (LPARAM)dwExStyle);\n\t}\n\n\tinline HIMAGELIST CToolBar::SetHotImageList(HIMAGELIST himlNewHot) const\n\t// Sets the image list that the toolbar control will use to display hot buttons.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HIMAGELIST)SendMessage(TB_SETHOTIMAGELIST, 0L, (LPARAM)himlNewHot);\n\t}\n\t\n\tinline int CToolBar::SetHotItem(int iHot) const\n\t// Sets the hot item in a toolbar.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (int)SendMessage(TB_SETHOTITEM, (WPARAM)iHot, 0L);\n\t}\n\n\tinline HIMAGELIST CToolBar::SetImageList(HIMAGELIST himlNew) const\n\t// Sets the image list that the toolbar will use to display buttons that are in their default state.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HIMAGELIST)SendMessage(TB_SETIMAGELIST, 0L, (LPARAM)himlNew);\n\t}\n\n\tinline BOOL CToolBar::SetImages(COLORREF crMask, UINT ToolBarID, UINT ToolBarHotID, UINT ToolBarDisabledID)\n\t// Either sets the imagelist or adds/replaces bitmap depending on ComCtl32.dll version\n\t// Assumes the width of the button image = bitmap_size / buttons\n\t// Assumes buttons have been already been added via AdddToolBarButton\n\t// The colour mask is often grey RGB(192,192,192) or magenta (255,0,255);\n\t// The color mask is ignored for 32bit bitmap resources\n\t// The Hot and disiabled bitmap resources can be 0\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\t// ToolBar ImageLists require Comctl32.dll version 4.7 or later\n\t\tif (400 == GetComCtlVersion())\n\t\t{\n\t\t\t// We are using COMCTL32.DLL version 4.0, so we can't use an imagelist.\n\t\t\t// Instead we simply set the bitmap.\n\t\t\treturn SetBitmap(ToolBarID);\n\t\t}\n\n\t\tint iNumButtons = 0;\n\t\tstd::vector<UINT>::iterator iter;\n\t\tfor (iter = GetToolBarData().begin(); iter < GetToolBarData().end(); ++iter)\n\t\t\tif ((*iter) != 0) ++iNumButtons;\n\n\t\tif (iNumButtons > 0)\n\t\t{\n\t\t\t// Set the button images\n\t\t\tCBitmap Bitmap(ToolBarID);\n\t\t\tassert(Bitmap.GetHandle());\n\n\t\t\tBITMAP bm = Bitmap.GetBitmapData();\n\t\t\tint iImageWidth  = bm.bmWidth / iNumButtons;\n\t\t\tint iImageHeight = bm.bmHeight;\n\n\t\t\tHIMAGELIST himlToolBar    = (HIMAGELIST)SendMessage(TB_GETIMAGELIST,    0L, 0L);\n\t\t\tHIMAGELIST himlToolBarHot = (HIMAGELIST)SendMessage(TB_GETHOTIMAGELIST, 0L, 0L);\n\t\t\tHIMAGELIST himlToolBarDis = (HIMAGELIST)SendMessage(TB_GETDISABLEDIMAGELIST, 0L, 0L);\n\t\t\tImageList_Destroy(himlToolBar);\n\t\t\tImageList_Destroy(himlToolBarHot);\n\t\t\tImageList_Destroy(himlToolBarDis);\n\n\t\t\thimlToolBar = ImageList_Create(iImageWidth, iImageHeight, ILC_COLOR32 | ILC_MASK, iNumButtons, 0);\n\t\t\tassert(himlToolBar);\n\n\t\t\tImageList_AddMasked(himlToolBar, Bitmap, crMask);\n\t\t\tSendMessage(TB_SETIMAGELIST, 0L, (LPARAM)himlToolBar);\n\n\t\t\tif (ToolBarHotID)\n\t\t\t{\n\t\t\t\tCBitmap BitmapHot(ToolBarHotID);\n\t\t\t\tassert(BitmapHot);\n\n\t\t\t\thimlToolBarHot = ImageList_Create(iImageWidth, iImageHeight, ILC_COLOR32 | ILC_MASK, iNumButtons, 0);\n\t\t\t\tassert(himlToolBarHot);\n\n\t\t\t\tImageList_AddMasked(himlToolBarHot, BitmapHot, crMask);\n\t\t\t\tSendMessage(TB_SETHOTIMAGELIST, 0L, (LPARAM)himlToolBarHot);\n\t\t\t}\n\n\t\t\tif (ToolBarDisabledID)\n\t\t\t{\n\t\t\t\tCBitmap BitmapDisabled(ToolBarDisabledID);\n\t\t\t\tassert(BitmapDisabled);\n\n\t\t\t\thimlToolBarDis = ImageList_Create(iImageWidth, iImageHeight, ILC_COLOR32 | ILC_MASK, iNumButtons, 0);\n\t\t\t\tassert(himlToolBarDis);\n\n\t\t\t\tImageList_AddMasked(himlToolBarDis, BitmapDisabled, crMask);\n\t\t\t\tSendMessage(TB_SETDISABLEDIMAGELIST, 0L, (LPARAM)himlToolBarDis);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\thimlToolBarDis = CreateDisabledImageList(himlToolBar);\n\t\t\t\tSendMessage(TB_SETDISABLEDIMAGELIST, 0L, (LPARAM)himlToolBarDis);\n\t\t\t}\n\n\t\t\t// Inform the parent of the change (rebar needs this)\n\t\t\tSIZE MaxSize = GetMaxSize();\n\t\t\tGetParent()->SendMessage(UWM_TOOLBAR_RESIZE, (WPARAM)m_hWnd, (LPARAM)&MaxSize);\n\t\t}\n\n\t\treturn TRUE;\n\t}\n\n\tinline BOOL CToolBar::SetIndent(int iIndent) const\n\t// Sets the indentation for the first button in a toolbar control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(TB_SETINDENT, (WPARAM)iIndent, 0L);\n\t}\n\n\tinline BOOL CToolBar::SetMaxTextRows(int iMaxRows) const\n\t// Sets the maximum number of text rows displayed on a toolbar button.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(TB_SETMAXTEXTROWS, (WPARAM)iMaxRows, 0L);\n\t}\n\n\tinline BOOL CToolBar::SetPadding(int cx, int cy) const\n\t// Sets the padding for a toolbar control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)SendMessage(TB_SETPADDING, 0L, (WPARAM)MAKELONG(cx, cy));\n\t}\n\n\tinline void CToolBar::SetToolBarTheme(ToolBarTheme& Theme)\n\t{\n\t\tm_Theme.UseThemes   = Theme.UseThemes;\n\t\tm_Theme.clrHot1     = Theme.clrHot1;\n\t\tm_Theme.clrHot2     = Theme.clrHot2;\n\t\tm_Theme.clrPressed1 = Theme.clrPressed1;\n\t\tm_Theme.clrPressed2 = Theme.clrPressed2;\n\t\tm_Theme.clrOutline  = Theme.clrOutline;\n\n\t\tif (IsWindow())\n\t\t\tInvalidate();\n\t}\n\n\tinline void CToolBar::SetToolTips(HWND hwndToolTip) const\n\t// Associates a ToolTip control with a toolbar.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tSendMessage(TB_SETTOOLTIPS, (WPARAM)hwndToolTip, 0L);\n\t}\n\n\tinline LRESULT CToolBar::WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\tswitch (uMsg)\n\t\t{\n\t\tcase WM_DESTROY:\n\t\t\tOnDestroy();\n\t\t\tbreak;\n\t\tcase UWM_GETTOOLBARTHEME:\n\t\t\t{\n\t\t\t\tToolBarTheme& tt = GetToolBarTheme();\n\t\t\t\treturn (LRESULT)&tt;\n\t\t\t}\n\t\tcase WM_WINDOWPOSCHANGING:\n\t\t\tOnWindowPosChanging(wParam, lParam);\n\t\t\tbreak;\n\t\t}\n\n\t\t// pass unhandled messages on for default processing\n\t\treturn CWnd::WndProcDefault(uMsg, wParam, lParam);\n\t}\n\n} // namespace Win32xx\n\n#endif // #ifndef _WIN32XX_TOOLBAR_H_\n"
  },
  {
    "path": "external/win32cpp/include/treeview.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n\n\n\n#ifndef _WIN32XX_TREEVIEW_H_\n#define _WIN32XX_TREEVIEW_H_\n\n#include \"wincore.h\"\n#include \"commctrl.h\"\n\n// Disable macros from Windowsx.h\n#undef GetNextSibling\n#undef GetPrevSibling\n\nnamespace Win32xx\n{\n\n\tclass CTreeView : public CWnd\n\t{\n\tpublic:\n\t\tCTreeView() {}\n\t\tvirtual ~CTreeView() {}\n\t\tvirtual void PreRegisterClass(WNDCLASS &wc);\n\n// Attributes\n\t\tCOLORREF GetBkColor() const;\n\t\tHTREEITEM GetChild(HTREEITEM hItem) const;\n\t\tUINT  GetCount() const;\n\t\tHTREEITEM GetDropHiLightItem() const;\n\t\tHWND GetEditControl() const;\n\t\tHTREEITEM GetFirstVisible() const;\n\t\tHIMAGELIST GetImageList(int iImageType) const;\n\t\tUINT  GetIndent() const;\n\t\tCOLORREF GetInsertMarkColor() const;\n\t\tBOOL GetItem(TVITEM& Item) const;\n\t\tDWORD_PTR GetItemData(HTREEITEM hItem) const;\n\t\tint  GetItemHeight() const;\n\t\tBOOL GetItemImage(HTREEITEM hItem, int& nImage, int& nSelectedImage ) const;\n\t\tBOOL GetItemRect(HTREEITEM hItem, CRect& rc, BOOL bTextOnly) const;\n\t\ttString GetItemText(HTREEITEM hItem, UINT nTextMax /* = 260 */) const;\n\t\tHTREEITEM GetLastVisible() const;\n\t\tHTREEITEM GetNextItem(HTREEITEM hItem, UINT nCode) const;\n\t\tHTREEITEM GetNextSibling(HTREEITEM hItem) const;\n\t\tHTREEITEM GetNextVisible(HTREEITEM hItem) const;\n\t\tHTREEITEM GetParentItem(HTREEITEM hItem) const;\n\t\tHTREEITEM GetPrevSibling(HTREEITEM hItem) const;\n\t\tHTREEITEM GetPrevVisible(HTREEITEM hItem) const;\n\t\tHTREEITEM GetRootItem() const;\n\t\tint GetScrollTime() const;\n\t\tHTREEITEM GetSelection() const;\n\t\tCOLORREF GetTextColor() const;\n\t\tHWND GetToolTips() const;\n\t\tUINT GetVisibleCount() const;\n\t\tBOOL ItemHasChildren(HTREEITEM hItem) const;\n\t\tCOLORREF SetBkColor(COLORREF clrBk) const;\n\t\tHIMAGELIST SetImageList(HIMAGELIST himl, int nType) const;\n\t\tvoid SetIndent(int indent) const;\n\t\tBOOL SetInsertMark(HTREEITEM hItem, BOOL fAfter = TRUE) const;\n\t\tCOLORREF SetInsertMarkColor(COLORREF clrInsertMark) const;\n\t\tBOOL SetItem(TVITEM& Item) const;\n\t\tBOOL SetItem(HTREEITEM hItem, UINT nMask, LPCTSTR szText, int nImage, int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam) const;\n\t\tBOOL SetItemData(HTREEITEM hItem, DWORD_PTR dwData) const;\n\t\tint  SetItemHeight(SHORT cyItem) const;\n\t\tBOOL SetItemImage(HTREEITEM hItem, int nImage, int nSelectedImage) const;\n\t\tBOOL SetItemText(HTREEITEM hItem, LPCTSTR szText) const;\n\t\tUINT SetScrollTime(UINT uScrollTime) const;\n\t\tCOLORREF SetTextColor(COLORREF clrText) const;\n\t\tHWND SetToolTips(HWND hwndTooltip) const;\n\n// Operations\n\t\tHIMAGELIST CreateDragImage(HTREEITEM hItem) const;\n\t\tBOOL DeleteAllItems() const;\n\t\tBOOL DeleteItem(HTREEITEM hItem) const;\n\t\tHWND EditLabel(HTREEITEM hItem) const;\n\t\tBOOL EndEditLabelNow(BOOL fCancel) const;\n\t\tBOOL EnsureVisible(HTREEITEM hItem) const;\n\t\tBOOL Expand(HTREEITEM hItem, UINT nCode) const;\n\t\tHTREEITEM HitTest(TVHITTESTINFO& ht) const;\n\t\tHTREEITEM InsertItem(TVINSERTSTRUCT& tvIS) const;\n\t\tBOOL Select(HTREEITEM hitem, UINT flag) const;\n\t\tBOOL SelectDropTarget(HTREEITEM hItem) const;\n\t\tBOOL SelectItem(HTREEITEM hItem) const;\n\t\tBOOL SelectSetFirstVisible(HTREEITEM hItem) const;\n\t\tBOOL SortChildren(HTREEITEM hItem, BOOL fRecurse) const;\n\t\tBOOL SortChildrenCB(TVSORTCB& sort, BOOL fRecurse) const;\n\n\tprivate:\n\t\tCTreeView(const CTreeView&);\t\t\t\t// Disable copy construction\n\t\tCTreeView& operator = (const CTreeView&); // Disable assignment operator\n\n\t};\n\t\n}\n\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nnamespace Win32xx\n{\n\n\tinline void CTreeView::PreRegisterClass(WNDCLASS &wc)\n\t{\n\t\t// Set the Window Class\n\t\twc.lpszClassName =  WC_TREEVIEW;\n\t}\n\n// Attributes\n\tinline COLORREF CTreeView::GetBkColor() const\n\t// Retrieves the current background color of the control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetBkColor( m_hWnd );\n\t}\n\n\tinline HTREEITEM CTreeView::GetChild(HTREEITEM hItem) const\n\t// Retrieves the first child item of the specified tree-view item.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetChild(m_hWnd, hItem);\n\t}\n\n\tinline UINT  CTreeView::GetCount() const\n\t// Retrieves a count of the items in a tree-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetCount( m_hWnd );\n\t}\n\n\tinline HTREEITEM CTreeView::GetDropHiLightItem() const\n\t// Retrieves the tree-view item that is the target of a drag-and-drop operation.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetDropHilight(m_hWnd);\n\t}\n\n\tinline HWND CTreeView::GetEditControl() const\n\t// Retrieves the handle to the edit control being used to edit a tree-view item's text.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetEditControl( m_hWnd );\n\t}\n\n\tinline HTREEITEM CTreeView::GetFirstVisible() const\n\t// Retrieves the first visible item in a tree-view control window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetFirstVisible(m_hWnd);\n\t}\n\n\tinline HIMAGELIST CTreeView::GetImageList(int iImageType) const\n\t// Retrieves the handle to the normal or state image list associated with a tree-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetImageList( m_hWnd, iImageType );\n\t}\n\n\tinline UINT  CTreeView::GetIndent() const\n\t// Retrieves the amount, in pixels, that child items are indented relative to their parent items.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetIndent( m_hWnd );\n\t}\n\n\tinline COLORREF CTreeView::GetInsertMarkColor() const\n\t// Retrieves the color used to draw the insertion mark for the tree view.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetInsertMarkColor( m_hWnd );\n\t}\n\n\tinline BOOL CTreeView::GetItem(TVITEM& Item) const\n\t// Retrieves some or all of a tree-view item's attributes.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetItem( m_hWnd, &Item );\n\t}\n\n\tinline DWORD_PTR CTreeView::GetItemData(HTREEITEM hItem) const\n\t// Retrieves a tree-view item's application data.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tTVITEM tvi = {0};\n\t\ttvi.mask = TVIF_PARAM;\n\t\ttvi.hItem = hItem;\n\t\tTreeView_GetItem( m_hWnd, &tvi );\n\t\treturn tvi.lParam;\n\t}\n\n\tinline int  CTreeView::GetItemHeight() const\n\t// Retrieves the current height of the tree-view item.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetItemHeight( m_hWnd );\n\t}\n\n\tinline BOOL CTreeView::GetItemImage(HTREEITEM hItem, int& nImage, int& nSelectedImage ) const\n\t// Retrieves the index of the tree-view item's image and selected image.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tTVITEM tvi = {0};\n\t\ttvi.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE;\n\t\ttvi.hItem = hItem;\n\t\tBOOL bResult = TreeView_GetItem( m_hWnd, &tvi );\n\t\tnImage = tvi.iImage;\n\t\tnSelectedImage = tvi.iSelectedImage;\n\t\treturn bResult;\n\t}\n\n\tinline BOOL CTreeView::GetItemRect(HTREEITEM hItem, CRect& rc, BOOL bTextOnly) const\n\t// Retrieves the bounding rectangle for a tree-view item and indicates whether the item is visible.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetItemRect( m_hWnd, hItem, &rc, bTextOnly );\n\t}\n\n\tinline tString CTreeView::GetItemText(HTREEITEM hItem, UINT nTextMax /* = 260 */) const\n\t// Retrieves the text for a tree-view item.\n\t// Note: Although the tree-view control allows any length string to be stored \n\t//       as item text, only the first 260 characters are displayed.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\ttString t;\n\t\tif (nTextMax > 0)\n\t\t{\n\t\t\tTVITEM tvi = {0};\n\t\t\ttvi.hItem = hItem;\n\t\t\ttvi.mask = TVIF_TEXT;\n\t\t\ttvi.cchTextMax = nTextMax;\n\t\t\tstd::vector<TCHAR> vTChar(nTextMax +1, _T('\\0'));\n\t\t\tTCHAR* pTCharArray = &vTChar.front();\n\t\t\ttvi.pszText = pTCharArray;\n\t\t\t::SendMessage(m_hWnd, TVM_GETITEM, 0L, (LPARAM)&tvi);\n\t\t\tt = tvi.pszText;\n\t\t}\n\t\treturn t;\n\t}\n\n\tinline HTREEITEM CTreeView::GetLastVisible() const\n\t// Retrieves the last expanded item in a tree-view control.\n\t// This does not retrieve the last item visible in the tree-view window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetLastVisible(m_hWnd);\n\t}\n\n\tinline HTREEITEM CTreeView::GetNextItem(HTREEITEM hItem, UINT nCode) const\n\t// Retrieves the tree-view item that bears the specified relationship to a specified item.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetNextItem( m_hWnd, hItem, nCode);\n\t}\n\n\tinline HTREEITEM CTreeView::GetNextSibling(HTREEITEM hItem) const\n\t// Retrieves the next sibling item of a specified item in a tree-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetNextSibling(m_hWnd, hItem);\n\t}\n\n\tinline HTREEITEM CTreeView::GetNextVisible(HTREEITEM hItem) const\n\t// Retrieves the next visible item that follows a specified item in a tree-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetNextVisible(m_hWnd, hItem);\n\t}\n\n\tinline HTREEITEM CTreeView::GetParentItem(HTREEITEM hItem) const\n\t// Retrieves the parent item of the specified tree-view item.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetParent(m_hWnd, hItem);\n\t}\n\n\tinline HTREEITEM CTreeView::GetPrevSibling(HTREEITEM hItem) const\n\t// Retrieves the previous sibling item of a specified item in a tree-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetPrevSibling(m_hWnd, hItem);\n\t}\n\n\tinline HTREEITEM CTreeView::GetPrevVisible(HTREEITEM hItem) const\n\t// Retrieves the first visible item that precedes a specified item in a tree-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetPrevSibling(m_hWnd, hItem);\n\t}\n\n\tinline HTREEITEM CTreeView::GetRootItem() const\n\t// Retrieves the topmost or very first item of the tree-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetRoot(m_hWnd);\n\t}\n\n\tinline int CTreeView::GetScrollTime() const\n\t// Retrieves the maximum scroll time for the tree-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetScrollTime( m_hWnd );\n\t}\n\n\tinline HTREEITEM CTreeView::GetSelection() const\n\t// Retrieves the currently selected item in a tree-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetSelection(m_hWnd);\n\t}\n\n\tinline COLORREF CTreeView::GetTextColor() const\n\t// Retrieves the current text color of the control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetTextColor( m_hWnd );\n\t}\n\n\tinline HWND CTreeView::GetToolTips() const\n\t// Retrieves the handle to the child ToolTip control used by a tree-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetToolTips( m_hWnd );\n\t}\n\n\tinline UINT CTreeView::GetVisibleCount() const\n\t// Obtains the number of items that can be fully visible in the client window of a tree-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_GetVisibleCount( m_hWnd );\n\t}\n\n\tinline BOOL CTreeView::ItemHasChildren(HTREEITEM hItem) const\n\t// Returns true of the tree-view item has one or more children\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tif (TreeView_GetChild( m_hWnd, hItem ))\n\t\t\treturn TRUE;\n\n\t\treturn FALSE;\n\t}\n\n\tinline COLORREF CTreeView::SetBkColor(COLORREF clrBk) const\n\t// Sets the background color of the control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_SetBkColor( m_hWnd, clrBk );\n\t}\n\n\tinline HIMAGELIST CTreeView::SetImageList(HIMAGELIST himl, int nType) const\n\t// Sets the normal or state image list for a tree-view control\n\t//  and redraws the control using the new images.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_SetImageList( m_hWnd, himl, nType );\n\t}\n\n\tinline void CTreeView::SetIndent(int indent) const\n\t// Sets the width of indentation for a tree-view control\n\t//  and redraws the control to reflect the new width.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tTreeView_SetIndent( m_hWnd, indent );\n\t}\n\n\tinline BOOL CTreeView::SetInsertMark(HTREEITEM hItem, BOOL fAfter/* = TRUE*/) const\n\t// Sets the insertion mark in a tree-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_SetInsertMark( m_hWnd, hItem, fAfter );\n\t}\n\n\tinline COLORREF CTreeView::SetInsertMarkColor(COLORREF clrInsertMark) const\n\t// Sets the color used to draw the insertion mark for the tree view.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_SetInsertMarkColor( m_hWnd, clrInsertMark );\n\t}\n\n\tinline BOOL CTreeView::SetItem(TVITEM& Item) const\n\t// Sets some or all of a tree-view item's attributes.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_SetItem( m_hWnd, &Item );\n\t}\n\n\tinline BOOL CTreeView::SetItem(HTREEITEM hItem, UINT nMask, LPCTSTR szText, int nImage, int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam) const\n\t// Sets some or all of a tree-view item's attributes.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tTVITEM tvi = {0};\n\t\ttvi.hItem = hItem;\n\t\ttvi.mask  = nMask;\n\t\ttvi.pszText = (LPTSTR)szText;\n\t\ttvi.iImage  = nImage;\n\t\ttvi.iSelectedImage = nSelectedImage;\n\t\ttvi.state = nState;\n\t\ttvi.stateMask = nStateMask;\n\t\ttvi.lParam = lParam;\n\t\treturn TreeView_SetItem( m_hWnd, &tvi );\n\t}\n\n\tinline BOOL CTreeView::SetItemData(HTREEITEM hItem, DWORD_PTR dwData) const\n\t// Sets the tree-view item's application data.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tTVITEM tvi = {0};\n\t\ttvi.hItem = hItem;\n\t\ttvi.mask = TVIF_PARAM;\n\t\ttvi.lParam = dwData;\n\t\treturn TreeView_SetItem( m_hWnd, &tvi );\n\t}\n\n\tinline int  CTreeView::SetItemHeight(SHORT cyItem) const\n\t// Sets the height of the tree-view items.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_SetItemHeight( m_hWnd, cyItem );\n\t}\n\n\tinline BOOL CTreeView::SetItemImage(HTREEITEM hItem, int nImage, int nSelectedImage) const\n\t// Sets the tree-view item's application image.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tTVITEM tvi = {0};\n\t\ttvi.hItem = hItem;\n\t\ttvi.iImage = nImage;\n\t\ttvi.iSelectedImage = nSelectedImage;\n\t\ttvi.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE;\n\t\treturn TreeView_SetItem(m_hWnd, &tvi );\n\t}\n\n\tinline BOOL CTreeView::SetItemText(HTREEITEM hItem, LPCTSTR szText) const\n\t// Sets the tree-view item's application text.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tTVITEM tvi = {0};\n\t\ttvi.hItem = hItem;\n\t\ttvi.pszText = (LPTSTR)szText;\n\t\ttvi.mask = TVIF_TEXT;\n\t\treturn TreeView_SetItem(m_hWnd, &tvi );\n\t}\n\n\tinline UINT CTreeView::SetScrollTime(UINT uScrollTime) const\n\t// Sets the maximum scroll time for the tree-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_SetScrollTime( m_hWnd, uScrollTime );\n\t}\n\n\tinline COLORREF CTreeView::SetTextColor(COLORREF clrText) const\n\t// Sets the text color of the control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_SetTextColor( m_hWnd, clrText );\n\t}\n\n\tinline HWND CTreeView::SetToolTips(HWND hwndTooltip) const\n\t// Sets a tree-view control's child ToolTip control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_SetToolTips( m_hWnd, hwndTooltip );\n\t}\n\n\t// Operations\n\n\tinline HIMAGELIST CTreeView::CreateDragImage(HTREEITEM hItem) const\n\t// Creates a dragging bitmap for the specified item in a tree-view control.\n\t// It also creates an image list for the bitmap and adds the bitmap to the image list.\n\t// An application can display the image when dragging the item by using the image list functions.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_CreateDragImage( m_hWnd, hItem );\n\t}\n\n\tinline BOOL CTreeView::DeleteAllItems() const\n\t// Deletes all items from a tree-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_DeleteAllItems( m_hWnd );\n\t}\n\n\tinline BOOL CTreeView::DeleteItem(HTREEITEM hItem) const\n\t// Removes an item and all its children from a tree-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_DeleteItem( m_hWnd, hItem );\n\t}\n\n\tinline HWND CTreeView::EditLabel(HTREEITEM hItem) const\n\t// Begins in-place editing of the specified item's text, replacing the text of the item\n\t// with a single-line edit control containing the text.\n\t// The specified item  is implicitly selected and focused.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_EditLabel( m_hWnd, hItem );\n\t}\n\n\tinline BOOL CTreeView::EndEditLabelNow(BOOL fCancel) const\n\t// Ends the editing of a tree-view item's label.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_EndEditLabelNow(m_hWnd, fCancel);\n\t}\n\n\tinline BOOL CTreeView::EnsureVisible(HTREEITEM hItem) const\n\t// Ensures that a tree-view item is visible, expanding the parent item or\n\t// scrolling the tree-view control, if necessary.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_EnsureVisible( m_hWnd, hItem );\n\t}\n\n\tinline BOOL CTreeView::Expand(HTREEITEM hItem, UINT nCode) const\n\t// The TreeView_Expand macro expands or collapses the list of child items associated\n\t// with the specified parent item, if any.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_Expand( m_hWnd, hItem, nCode );\n\t}\n\n\tinline HTREEITEM CTreeView::HitTest(TVHITTESTINFO& ht) const\n\t// Determines the location of the specified point relative to the client area of a tree-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_HitTest( m_hWnd, &ht );\n\t}\n\n\tinline HTREEITEM CTreeView::InsertItem(TVINSERTSTRUCT& tvIS) const\n\t// Inserts a new item in a tree-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_InsertItem( m_hWnd, &tvIS );\n\t}\n\n\tinline BOOL CTreeView::Select(HTREEITEM hitem, UINT flag) const\n\t// Selects the specified tree-view item, scrolls the item into view, or redraws\n\t// the item in the style used to indicate the target of a drag-and-drop operation.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_Select(m_hWnd, hitem, flag );\n\t}\n\n\tinline BOOL CTreeView::SelectDropTarget(HTREEITEM hItem) const\n\t// Redraws a specified tree-view control item in the style used to indicate the\n\t// target of a drag-and-drop operation.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_SelectDropTarget(m_hWnd, hItem);\n\t}\n\n\tinline BOOL CTreeView::SelectItem(HTREEITEM hItem) const\n\t// Selects the specified tree-view item.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_SelectItem(m_hWnd, hItem);\n\t}\n\n\tinline BOOL CTreeView::SelectSetFirstVisible(HTREEITEM hItem) const\n\t// Scrolls the tree-view control vertically to ensure that the specified item is visible.\n\t// If possible, the specified item becomes the first visible item at the top of the control's window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_SelectSetFirstVisible(m_hWnd, hItem);\n\t}\n\n\tinline BOOL CTreeView::SortChildren(HTREEITEM hItem, BOOL fRecurse) const\n\t// Sorts the child items of the specified parent item in a tree-view control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_SortChildren( m_hWnd, hItem, fRecurse );\n\t}\n\n\tinline BOOL CTreeView::SortChildrenCB(TVSORTCB& sort, BOOL fRecurse) const\n\t// Sorts tree-view items using an application-defined callback function that compares the items.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn TreeView_SortChildrenCB( m_hWnd, &sort, fRecurse );\n\t}\n\n\n} // namespace Win32xx\n\n#endif // #ifndef _WIN32XX_TREEVIEW_H_\n\n"
  },
  {
    "path": "external/win32cpp/include/wceframe.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n\n//////////////////////////////////////////////////////\n// WceFrame.h\n// Definitions for the CCmdBar and CWceFrame\n\n// These classes are provide a frame window for use on Window CE devices such\n// as Pocket PCs. The frame uses CommandBar (a control unique to the Windows CE\n// operating systems) to display the menu and toolbar.\n//\n// Use the PocketPCWceFrame generic application as the starting point for your own\n// frame based applications on the Pocket PC.\n//\n// Refer to the Scribble demo application for an example of how these classes\n// can be used.\n\n\n#ifndef _WIN32XX_WCEFRAME_H_\n#define _WIN32XX_WCEFRAME_H_\n\n\n#include \"wincore.h\"\n#include <commctrl.h>\n#include <vector>\n#include \"default_resource.h\"\n\n#if defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP)\n  #define SHELL_AYGSHELL\n#endif\n\n#ifdef SHELL_AYGSHELL\n  #include <aygshell.h>\n  #pragma comment(lib, \"aygshell.lib\")\n#endif // SHELL_AYGSHELL\n\n#if (_WIN32_WCE < 0x500 && defined(SHELL_AYGSHELL)) || _WIN32_WCE == 420\n  #pragma comment(lib, \"ccrtrtti.lib\")\n#endif\n\n\nnamespace Win32xx\n{\n\n\t////////////////////////////////////\n\t// Declaration of the CCmdBar class\n\t//\n\tclass CCmdBar : public CWnd\n\t{\n\tpublic:\n\t\tCCmdBar();\n\t\tvirtual ~CCmdBar();\n\t\tvirtual BOOL AddAdornments(DWORD dwFlags);\n\t\tvirtual int  AddBitmap(int idBitmap, int iNumImages, int iImageWidth, int iImageHeight);\n\t\tvirtual BOOL AddButtons(int nButtons, TBBUTTON* pTBButton);\n\t\tvirtual HWND Create(HWND hwndParent);\n\t\tvirtual int  GetHeight() const;\n\t\tvirtual HWND InsertComboBox(int iWidth, UINT dwStyle, WORD idComboBox, WORD iButton);\n\t\tvirtual BOOL IsVisible();\n\t\tvirtual BOOL Show(BOOL fShow);\n\n\tprivate:\n\n#ifdef SHELL_AYGSHELL\n\t\tSHMENUBARINFO m_mbi;\n#endif\n\n\t};\n\n\n\t//////////////////////////////////////\n\t// Declaration of the CWceFrame class\n\t//  A mini frame based on CCmdBar\n\tclass CWceFrame : public CWnd\n\t{\n\tpublic:\n\t\tCWceFrame();\n\t\tvirtual ~CWceFrame();\n\t\tvirtual void AddToolBarButton(UINT nID);\n\t\tCRect GetViewRect() const;\n\t\tCCmdBar& GetMenuBar() const {return (CCmdBar&)m_MenuBar;}\n\t\tvirtual void OnActivate(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void OnCreate();\t\t\n\t\tvirtual void PreCreate(CREATESTRUCT &cs);\n\t\tvirtual void RecalcLayout();\n\t\tvirtual void SetButtons(const std::vector<UINT> ToolBarData);\n\t\tvirtual\tLRESULT WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\n\tprotected:\n\t\tstd::vector<UINT> m_ToolBarData;\n\n\tprivate:\n\t\tCCmdBar m_MenuBar;\n\t\ttString m_tsAppName;\n\n#ifdef SHELL_AYGSHELL\n\t\tSHACTIVATEINFO m_sai;\n#endif\n\n\t};\n\n\t//////////////////////////////////////////\n\t// Definitions for the CCmdBar class\n\t//  This class wraps CommandBar_Create which\n\t//  creates a CommandBar at the top of the window\n\tinline CCmdBar::CCmdBar()\n\t{\n\t}\n\n\tinline CCmdBar::~CCmdBar()\n\t{\n\t\tif (IsWindow())\n\t\t\t::CommandBar_Destroy(m_hWnd);\n\t}\n\n\n\tinline BOOL CCmdBar::AddAdornments(DWORD dwFlags)\n\t{\n\t\tBOOL bReturn = CommandBar_AddAdornments(m_hWnd, dwFlags, 0);\n\n\t\tif (!bReturn)\n\t\t\tthrow CWinException(_T(\"AddAdornments failed\"));\n\n\t\treturn bReturn;\n\t}\n\n\tinline int CCmdBar::AddBitmap(int idBitmap, int iNumImages, int iImageWidth, int iImageHeight)\n\t{\n\t\tHINSTANCE hInst = GetApp()->GetInstanceHandle();\n\t\treturn \tCommandBar_AddBitmap(m_hWnd, hInst, idBitmap, iNumImages, iImageWidth, iImageHeight);\n\t}\n\n\tinline BOOL CCmdBar::AddButtons(int nButtons, TBBUTTON* pTBButton)\n\t{\n\t\t BOOL bReturn = CommandBar_AddButtons(m_hWnd, nButtons, pTBButton);\n\t\t if (!bReturn)\n\t\t\t throw CWinException(_T(\"Failed to add buttons to commandbar\"));\n\n\t\t return bReturn;\n\t}\n\n\tinline HWND CCmdBar::Create(HWND hParent)\n\t{\n#ifdef SHELL_AYGSHELL\n\t\tSHMENUBARINFO mbi;\n\n\t\tmemset(&mbi, 0, sizeof(SHMENUBARINFO));\n\t\tmbi.cbSize     = sizeof(SHMENUBARINFO);\n\t\tmbi.hwndParent = hParent;\n\t\tmbi.nToolBarId = IDW_MAIN;\n\t\tmbi.hInstRes   = GetApp()->GetInstanceHandle();\n\t\tmbi.nBmpId     = 0;\n\t\tmbi.cBmpImages = 0;\n\n\t\tif (SHCreateMenuBar(&mbi))\n\t\t{\n\t\t\tm_hWnd = mbi.hwndMB;\n\t\t}\n\t\telse\n\t\t\tthrow CWinException(_T(\"Failed to create MenuBar\"));\n\t\t\n#else\n\t\tm_hWnd = CommandBar_Create(GetApp()->GetInstanceHandle(), hParent, IDW_MENUBAR);\n\n\t\tif (m_hWnd == NULL)\n\t\t\tthrow CWinException(_T(\"Failed to create CommandBar\"));\n\n\t\tCommandBar_InsertMenubar(m_hWnd, GetApp()->GetInstanceHandle(), IDW_MAIN, 0);\n#endif\n\t\treturn m_hWnd;\n\t}\n\n\tinline int CCmdBar::GetHeight() const\n\t{\n\t\treturn CommandBar_Height(m_hWnd);\n\t}\n\n\tinline HWND CCmdBar::InsertComboBox(int iWidth, UINT dwStyle, WORD idComboBox, WORD iButton)\n\t{\n\t\tHINSTANCE hInst = GetApp()->GetInstanceHandle();\n\t\tHWND hWnd = CommandBar_InsertComboBox(m_hWnd, hInst, iWidth, dwStyle, idComboBox, iButton);\n\n\t\tif (!hWnd)\n\t\t\tthrow CWinException(_T(\"InsertComboBox failed\"));\n\n\t\treturn hWnd;\n\t}\n\n\tinline BOOL CCmdBar::IsVisible()\n\t{\n\t\treturn ::CommandBar_IsVisible(m_hWnd);\n\t}\n\n\tinline BOOL CCmdBar::Show(BOOL fShow)\n\t{\n\t\treturn ::CommandBar_Show(m_hWnd, fShow);\n\t}\n\n\n\t/////////////////////////////////////////\n\t// Definitions for the CWceFrame class\n\t//  This class creates a simple frame using CCmdBar\n\tinline CWceFrame::CWceFrame()\n\t{\n#ifdef SHELL_AYGSHELL\n\t\t// Initialize the shell activate info structure\n\t\tmemset (&m_sai, 0, sizeof (m_sai));\n\t\tm_sai.cbSize = sizeof (m_sai);\n#endif\n\t}\n\n\tinline CWceFrame::~CWceFrame()\n\t{\n\t}\n\n\tinline void CWceFrame::AddToolBarButton(UINT nID)\n\t// Adds Resource IDs to toolbar buttons.\n\t// A resource ID of 0 is a separator\n\t{\n\t\tm_ToolBarData.push_back(nID);\n\t}\n\n\tinline CRect CWceFrame::GetViewRect() const\n\t{\n\t\tCRect r;\n\t\t::GetClientRect(m_hWnd, &r);\n\n#ifndef SHELL_AYGSHELL\n\t\t// Reduce the size of the client rectange, by the commandbar height\n\t\tr.top += m_MenuBar.GetHeight();\n#endif\n\n\t\treturn r;\n\t}\n\n\tinline void CWceFrame::OnCreate()\n\t{\n\t\t// Create the Commandbar\n\t\tm_MenuBar.Create(m_hWnd);\n\n\t\t// Set the keyboard accelerators\n\t\tHACCEL hAccel = LoadAccelerators(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(IDW_MAIN));\n\t\tGetApp()->SetAccelerators(hAccel, this);\n\n\t\t// Add the toolbar buttons\n\t\tif (m_ToolBarData.size() > 0)\n\t\t\tSetButtons(m_ToolBarData);\n\n#ifndef SHELL_AYGSHELL\n\t\t// Add close button\n\t\tm_MenuBar.AddAdornments(0);\n#endif\n\n\t}\n\n\tinline void CWceFrame::OnActivate(WPARAM wParam, LPARAM lParam)\n\t{\n#ifdef SHELL_AYGSHELL\n\t\t// Notify shell of our activate message\n\t\tSHHandleWMActivate(m_hWnd, wParam, lParam, &m_sai, FALSE);\n\n\t\tUINT fActive = LOWORD(wParam);\n\t\tif ((fActive == WA_ACTIVE) || (fActive == WA_CLICKACTIVE))\n\t\t{\n\t\t\t// Reposition the window when it's activated\n\t\t\tRecalcLayout();\n\t\t}\n#endif\n\t}\n\n\tinline void CWceFrame::PreCreate(CREATESTRUCT &cs)\n\t{\n\t\tcs.style = WS_VISIBLE;\n\t\tm_tsAppName = _T(\"Win32++ Application\");\n\n\t\t// Choose a unique class name for this app\n\t\tif (LoadString(IDW_MAIN) != _T(\"\"))\n\t\t{\n\t\t\tm_tsAppName = LoadString(IDW_MAIN);\n\t\t}\n\t\t\t\n\t\tcs.lpszClass = m_tsAppName.c_str();\n\t}\n\n/*\tinline BOOL CWceFrame::PreTranslateMessage(MSG* pMsg)\n\t{\n\t\tHACCEL hAccelTable = ::LoadAccelerators(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(IDW_MAIN));\n\t\tif (WM_KEYFIRST <= pMsg->message && pMsg->message <= WM_KEYLAST)\n\t\t{\n\t\t\tif (TranslateAccelerator(m_hWnd, hAccelTable, pMsg))\n\t\t\t\treturn TRUE;\n\t\t}\n\t\treturn CWnd::PreTranslateMessage(pMsg);\n\t} */\n\n\tinline void CWceFrame::RecalcLayout()\n\t{\n\t\tHWND hwndCB = m_MenuBar.GetHwnd();\n\t\tif (hwndCB)\n\t\t{\n\t\t\tCRect rc;\t\t\t// Desktop window size\n\t\t\tCRect rcMenuBar;\t// MenuBar window size\n\n\t\t\t::SystemParametersInfo(SPI_GETWORKAREA, 0, &rc, 0);\n\t\t\t::GetWindowRect(hwndCB, &rcMenuBar);\n\t\t\trc.bottom -= (rcMenuBar.bottom - rcMenuBar.top);\n\n\t\t\tMoveWindow(rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, FALSE);\n\t\t}\n\n\t\tShowWindow(TRUE);\n\t\tUpdateWindow();\n\t}\n\n\tinline void CWceFrame::SetButtons(const std::vector<UINT> ToolBarData)\n\t// Define the resource IDs for the toolbar like this in the Frame's constructor\n\t// m_ToolBarData.push_back ( 0 );\t\t\t\t// Separator\n\t// m_ToolBarData.clear();\n\t// m_ToolBarData.push_back ( IDM_FILE_NEW   );\n\t// m_ToolBarData.push_back ( IDM_FILE_OPEN  );\n\t// m_ToolBarData.push_back ( IDM_FILE_SAVE  );\n\n\t{\n\t\tint iImages = 0;\n\t\tint iNumButtons = (int)ToolBarData.size();\n\n\n\t\tif (iNumButtons > 0)\n\t\t{\n\t\t\t// Create the TBBUTTON array for each button\n\t\t\tstd::vector<TBBUTTON> vTBB(iNumButtons);\n\t\t\tTBBUTTON* tbbArray = &vTBB.front();\n\n\t\t\tfor (int j = 0 ; j < iNumButtons; j++)\n\t\t\t{\n\t\t\t\tZeroMemory(&tbbArray[j], sizeof(TBBUTTON));\n\n\t\t\t\tif (ToolBarData[j] == 0)\n\t\t\t\t{\n\t\t\t\t\ttbbArray[j].fsStyle = TBSTYLE_SEP;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\ttbbArray[j].iBitmap = iImages++;\n\t\t\t\t\ttbbArray[j].idCommand = ToolBarData[j];\n\t\t\t\t\ttbbArray[j].fsState = TBSTATE_ENABLED;\n\t\t\t\t\ttbbArray[j].fsStyle = TBSTYLE_BUTTON;\n\t\t\t\t\ttbbArray[j].iString = -1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the bitmap\n\t\t\tGetMenuBar().AddBitmap(IDW_MAIN, iImages , 16, 16);\n\n\t\t\t// Add the buttons\n\t\t\tGetMenuBar().AddButtons(iNumButtons, tbbArray);\n\t\t}\n\t}\n\n\tinline LRESULT CWceFrame::WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\tswitch (uMsg)\n\t\t{\n\t\t\tcase WM_DESTROY:\n\t\t\t\tPostQuitMessage(0);\n\t\t\t\tbreak;\n\t\t\tcase WM_ACTIVATE:\n\t\t\t\tOnActivate(wParam, lParam);\n     \t\t\tbreak;\n\n#ifdef SHELL_AYGSHELL\n\n\t\t\tcase WM_SETTINGCHANGE:\n\t\t\t\tSHHandleWMSettingChange(m_hWnd, wParam, lParam, &m_sai);\n     \t\t\tbreak;\n#endif\n\n\t\t}\n\t\treturn CWnd::WndProcDefault(uMsg, wParam, lParam);\n\t}\n\n\n} // namespace Win32xx\n\n#endif // _WIN32XX_WCEFRAME_H_\n\n"
  },
  {
    "path": "external/win32cpp/include/wcestddef.h",
    "content": "\n#pragma once\n\n#pragma comment(linker, \"/nodefaultlib:libc.lib\")\n#pragma comment(linker, \"/nodefaultlib:libcd.lib\")\n\n\n#include <ceconfig.h>\n#if defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP)\n  #define SHELL_AYGSHELL\n#endif\n\n#ifdef _CE_DCOM\n  #define _ATL_APARTMENT_THREADED\n#endif\n\n#if defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP)\n  #ifndef _DEVICE_RESOLUTION_AWARE\n    #define _DEVICE_RESOLUTION_AWARE\n  #endif\n#endif\n\n\n#if _WIN32_WCE == 420 || _WIN32_WCE == 0x420\n  // For Pocket PC 2003\n  #pragma comment(lib, \"ccrtrtti.lib\")\n#endif\n\n#if _MSC_VER >= 1300\n\n  // NOTE - this value is not strongly correlated to the Windows CE OS version being targeted\n  #undef  WINVER\n  #define WINVER _WIN32_WCE\n\n  #ifdef _DEVICE_RESOLUTION_AWARE\n    #include \"DeviceResolutionAware.h\"\n  #endif\n\n  #if _WIN32_WCE < 0x500 && ( defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP) )\n    #ifdef _X86_\n      #if defined(_DEBUG)\n        #pragma comment(lib, \"libcmtx86d.lib\")\n      #else\n        #pragma comment(lib, \"libcmtx86.lib\")\n      #endif\n    #endif\n  #endif\n\n  #include <altcecrt.h>\n\n#endif// _MSC_VER >= 1300\n\n#ifdef SHELL_AYGSHELL\n  #include <aygshell.h>\n  #pragma comment(lib, \"aygshell.lib\")\n#endif // SHELL_AYGSHELL\n\n// TODO: reference additional headers your program requires here\n"
  },
  {
    "path": "external/win32cpp/include/webbrowser.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n#ifndef _WIN32XX_WEBBROWSER_H_\n#define _WIN32XX_WEBBROWSER_H_\n\n#include <exdisp.h>\n#include <ocidl.h>\n\n\nnamespace Win32xx\n{\n\t///////////////////////////////////////////////////\n\t// Declaration of the CAXWindow class\n\t// This class implements an ActiveX control container\n\tclass CAXWindow : public IOleClientSite, public IOleInPlaceSite, public IOleInPlaceFrame,\n\t\t\t\t\t\t\tpublic IOleControlSite, public IDispatch\n\t{\n\tpublic:\n\t\tCAXWindow();\n\t\tvirtual ~CAXWindow();\n\t\tvirtual void Activate(BOOL fFocus);\n\t\tvirtual void CreateControl(BSTR bstrClsid);\n\t\tvirtual void CreateControl(CLSID clsid);\n\t\tvirtual void Remove();\n\t\tvirtual void SetParent(HWND hWndParent);\n\t\tvirtual void SetLocation(int x, int y, int width, int height);\n\t\tvirtual void SetVisible(BOOL fVisible);\n\t\tvirtual void SetStatusWindow(HWND hWndStatus);\n\t\tvirtual void TranslateKey(MSG msg);\n\t\tIDispatch* GetDispatch();\n\t\tIUnknown* GetUnknown();\n\n\t\t// IUnknown Methods\n\t\tSTDMETHODIMP QueryInterface(REFIID riid, void** ppvObject);\n\t\tSTDMETHODIMP_(ULONG) AddRef();\n\t\tSTDMETHODIMP_(ULONG) Release();\n\n\t\t// IOleClientSite Methods\n\t\tSTDMETHODIMP SaveObject();\n\t\tSTDMETHODIMP GetMoniker(DWORD dwAssign, DWORD dwWhichMoniker, LPMONIKER* ppMk);\n\t\tSTDMETHODIMP GetContainer(LPOLECONTAINER* ppContainer);\n\t\tSTDMETHODIMP ShowObject();\n\t\tSTDMETHODIMP OnShowWindow(BOOL fShow);\n\t\tSTDMETHODIMP RequestNewObjectLayout();\n\n\t\t// IOleWindow Methods\n\t\tSTDMETHODIMP GetWindow(HWND* phwnd);\n\t\tSTDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode);\n\n\t\t// IOleInPlaceSite Methods\n\t\tSTDMETHODIMP CanInPlaceActivate();\n\t\tSTDMETHODIMP OnInPlaceActivate();\n\t\tSTDMETHODIMP OnUIActivate();\n\t\tSTDMETHODIMP GetWindowContext(IOleInPlaceFrame** ppFrame, IOleInPlaceUIWindow** ppDoc, LPRECT lprcPosRect, LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo);\n\t\tSTDMETHODIMP Scroll(SIZE scrollExtent);\n\t\tSTDMETHODIMP OnUIDeactivate(BOOL fUndoable);\n\t\tSTDMETHODIMP OnInPlaceDeactivate();\n\t\tSTDMETHODIMP DiscardUndoState();\n\t\tSTDMETHODIMP DeactivateAndUndo();\n\t\tSTDMETHODIMP OnPosRectChange(LPCRECT lprcPosRect);\n\n\t\t// IOleInPlaceUIWindow Methods\n\t\tSTDMETHODIMP GetBorder(LPRECT lprectBorder);\n\t\tSTDMETHODIMP RequestBorderSpace(LPCBORDERWIDTHS lpborderwidths);\n\t\tSTDMETHODIMP SetBorderSpace(LPCBORDERWIDTHS lpborderwidths);\n\t\tSTDMETHODIMP SetActiveObject(IOleInPlaceActiveObject* pActiveObject, LPCOLESTR lpszObjName);\n\n\t\t// IOleInPlaceFrame Methods\n\t\tSTDMETHODIMP InsertMenus(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths);\n\t\tSTDMETHODIMP SetMenu(HMENU hmenuShared, HOLEMENU holemenu, HWND hwndActiveObject);\n\t\tSTDMETHODIMP RemoveMenus(HMENU hmenuShared);\n\t\tSTDMETHODIMP SetStatusText(LPCOLESTR pszStatusText);\n\t\tSTDMETHODIMP EnableModeless(BOOL fEnable);\n\t\tSTDMETHODIMP TranslateAccelerator(LPMSG lpmsg, WORD wID);\n\n\t\t// IOleControlSite Methods\n\t\tSTDMETHODIMP OnControlInfoChanged();\n\t\tSTDMETHODIMP LockInPlaceActive(BOOL fLock);\n\t\tSTDMETHODIMP GetExtendedControl(IDispatch** ppDisp);\n\t\tSTDMETHODIMP TransformCoords(POINTL* pptlHimetric, POINTF* pptfContainer, DWORD dwFlags);\n\t\tSTDMETHODIMP TranslateAccelerator(LPMSG pMsg, DWORD grfModifiers);\n\t\tSTDMETHODIMP OnFocus(BOOL fGotFocus);\n\t\tSTDMETHODIMP ShowPropertyFrame();\n\n\t\t// IDispatch Methods\n\t\tSTDMETHODIMP GetIDsOfNames(REFIID riid, OLECHAR** rgszNames, unsigned int cNames, LCID lcid, DISPID* rgdispid);\n\t\tSTDMETHODIMP GetTypeInfo(unsigned int itinfo, LCID lcid, ITypeInfo** pptinfo);\n\t\tSTDMETHODIMP GetTypeInfoCount(unsigned int* pctinfo);\n\t\tSTDMETHODIMP Invoke(DISPID dispid, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pdispparams, VARIANT* pvarResult, EXCEPINFO* pexecinfo, unsigned int* puArgErr);\n\n\tprivate:\n\t\t ULONG       m_cRefs;       // ref count\n\t\t HWND        m_hWnd;        // window handle of the container\n\t\t HWND        m_hWndStatus;  // status window handle\n\t\t IUnknown*   m_pUnk;\t\t// IUnknown of contained object\n\t\t CRect       m_rcControl;\t// size of control\n\t};\n\n\n\t///////////////////////////////////////////////\n\t// Declaration of the CWebBrowser class\n\t// This class uses an AciveX Container provided by\n\t// CAXWindow to host the IWebBrower2 interface.\n\tclass CWebBrowser : public CWnd\n\t{\n\tpublic:\n\t\tCWebBrowser();\n\t\tvirtual ~CWebBrowser();\n\t\tvirtual void AddWebBrowserControl(void);\n\t\tvirtual CAXWindow& GetAXWindow() const { return (CAXWindow&)m_AXContainer; }\n\t\tvirtual IWebBrowser2* GetIWebBrowser2() const { return m_pIWebBrowser2; }\n\t\tvirtual void Navigate(LPCTSTR str);\n\n\tprotected:\n\t\tvirtual void OnCreate();\n\t\tvirtual void OnSize(int width, int height);\n\t\tvirtual LRESULT WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\n\tprivate:\n\t\tCAXWindow\tm_AXContainer;\t\t// The ActiveX Container\n\t\tIWebBrowser2*\tm_pIWebBrowser2;// Interface to the ActiveX web browser control\n\t};\n\n}\n\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nnamespace Win32xx\n{\n\t/////////////////////////////////////////\n\t// Definitions for the CAXWindow class\n\t//\n\tinline CAXWindow::CAXWindow() : m_cRefs(1), m_hWnd(NULL), m_pUnk(NULL)\n\t{\n\t}\n\n\tinline CAXWindow::~CAXWindow()\n\t{\n\t}\n\n\tinline void CAXWindow::CreateControl(BSTR bstrClsid)\n\t{\n\t\tCLSID   clsid;\n\t\tCLSIDFromString(bstrClsid, &clsid);\n\t\tCreateControl(clsid);\n\t}\n\n\tinline void CAXWindow::Activate(BOOL fFocus)\n\t{\n\t\tif (!m_pUnk)\n\t\t\treturn;\n\n\t\tif (fFocus)\n\t\t{\n\t\t\tIOleObject* pioo;\n\t \t\tHRESULT hr = m_pUnk->QueryInterface(IID_IOleObject, (void**)&pioo);\n\t \t\tif (FAILED(hr))\n\t \t\t\treturn;\n\n\t \t\tpioo->DoVerb(OLEIVERB_UIACTIVATE, NULL, this, 0, m_hWnd, &m_rcControl);\n\t \t\tpioo->Release();\n\t\t}\n\t}\n\n\tinline void CAXWindow::CreateControl(CLSID clsid)\n\t{\n\t\tCoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IID_IUnknown, (void**)&m_pUnk);\n\n\t\tif (!m_pUnk)\n\t\t\treturn;\n\n\t\tIOleObject* pioo;\n\t\tHRESULT hr = m_pUnk->QueryInterface(IID_IOleObject, (void**)&pioo);\n\t\tif (FAILED(hr))\n\t\t\treturn;\n\n\t\tpioo->SetClientSite(this);\n\t\tpioo->Release();\n\n\t\tIPersistStreamInit* ppsi;\n\t\thr = m_pUnk->QueryInterface(IID_IPersistStreamInit, (void**)&ppsi);\n\t\tif (SUCCEEDED(hr))\n\t\t{\n\t\t\tppsi->InitNew();\n\t\t\tppsi->Release();\n\t\t}\n\t}\n\n\tinline STDMETHODIMP_(ULONG) CAXWindow::AddRef()\n\t{\n\t\treturn ++m_cRefs;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::CanInPlaceActivate()\n\t{\n\t\treturn S_OK;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::ContextSensitiveHelp(BOOL fEnterMode)\n\t{\n\t\tUNREFERENCED_PARAMETER(fEnterMode);\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::DeactivateAndUndo()\n\t{\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::DiscardUndoState()\n\t{\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::EnableModeless(BOOL fEnable)\n\t{\n\t\tUNREFERENCED_PARAMETER(fEnable);\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::GetBorder(LPRECT lprectBorder)\n\t{\n\t\tUNREFERENCED_PARAMETER(lprectBorder);\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::GetContainer(LPOLECONTAINER* ppContainer)\n\t{\n\t\tUNREFERENCED_PARAMETER(ppContainer);\n\t\treturn E_NOINTERFACE;\n\t}\n\n\tinline IDispatch* CAXWindow::GetDispatch()\n\t{\n\t\tif (!m_pUnk)\n\t\t\treturn NULL;\n\n\t\tHRESULT     hr;\n\t\tIDispatch*  pdisp;\n\n\t\thr = m_pUnk->QueryInterface(IID_IDispatch, (void**)&pdisp);\n\t\treturn pdisp;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::GetExtendedControl(IDispatch** ppDisp)\n\t{\n\t\tif (ppDisp == NULL)\n\t\t\treturn E_INVALIDARG;\n\n\t\t*ppDisp = (IDispatch*)this;\n\t\t(*ppDisp)->AddRef();\n\n\t\treturn S_OK;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::GetIDsOfNames(REFIID riid, OLECHAR** rgszNames, unsigned int cNames, LCID lcid, DISPID* rgdispid)\n\t{\n\t\tUNREFERENCED_PARAMETER((IID)riid);\t\t// IID cast required for the MinGW compiler\n\t\tUNREFERENCED_PARAMETER(rgszNames);\n\t\tUNREFERENCED_PARAMETER(cNames);\n\t\tUNREFERENCED_PARAMETER(lcid);\n\n\t\t*rgdispid = DISPID_UNKNOWN;\n\t\treturn DISP_E_UNKNOWNNAME;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::GetMoniker(DWORD dwAssign, DWORD dwWhichMoniker, LPMONIKER* ppMk)\n\t{\n\t\tUNREFERENCED_PARAMETER(dwAssign);\n\t\tUNREFERENCED_PARAMETER(dwWhichMoniker);\n\t\tUNREFERENCED_PARAMETER(ppMk);\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::GetTypeInfo(unsigned int itinfo, LCID lcid, ITypeInfo** pptinfo)\n\t{\n\t\tUNREFERENCED_PARAMETER(itinfo);\n\t\tUNREFERENCED_PARAMETER(lcid);\n\t\tUNREFERENCED_PARAMETER(pptinfo);\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::GetTypeInfoCount(unsigned int* pctinfo)\n\t{\n\t\tUNREFERENCED_PARAMETER(pctinfo);\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline IUnknown* CAXWindow::GetUnknown()\n\t{\n\t\tif (!m_pUnk)\n\t\t\treturn NULL;\n\n\t\tm_pUnk->AddRef();\n\t\treturn m_pUnk;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::GetWindow(HWND* lphwnd)\n\t{\n\t\tif (!IsWindow(m_hWnd))\n\t\t\treturn S_FALSE;\n\n\t\t*lphwnd = m_hWnd;\n\t\treturn S_OK;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::GetWindowContext (IOleInPlaceFrame** ppFrame, IOleInPlaceUIWindow** ppIIPUIWin,\n\t\t\t\t\t\t\t\t\t  LPRECT lprcPosRect, LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo)\n\t{\n\t\t*ppFrame = (IOleInPlaceFrame*)this;\n\t\t*ppIIPUIWin = NULL;\n\n\t\tRECT rect;\n\t\tGetClientRect(m_hWnd, &rect);\n\t\tlprcPosRect->left       = 0;\n\t\tlprcPosRect->top        = 0;\n\t\tlprcPosRect->right      = rect.right;\n\t\tlprcPosRect->bottom     = rect.bottom;\n\n\t\tCopyRect(lprcClipRect, lprcPosRect);\n\n\t\tlpFrameInfo->cb             = sizeof(OLEINPLACEFRAMEINFO);\n\t\tlpFrameInfo->fMDIApp        = FALSE;\n\t\tlpFrameInfo->hwndFrame      = m_hWnd;\n\t\tlpFrameInfo->haccel         = 0;\n\t\tlpFrameInfo->cAccelEntries  = 0;\n\n\t\t(*ppFrame)->AddRef();\n\t\treturn S_OK;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::InsertMenus(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths)\n\t{\n\t\tUNREFERENCED_PARAMETER(hmenuShared);\n\t\tUNREFERENCED_PARAMETER(lpMenuWidths);\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::Invoke(DISPID dispid, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pdispparams, VARIANT* pvarResult, EXCEPINFO* pexecinfo, unsigned int* puArgErr)\n\t{\n\t\tUNREFERENCED_PARAMETER(dispid);\n\t\tUNREFERENCED_PARAMETER((IID)riid);\t\t// IID cast required for the MinGW compiler\n\t\tUNREFERENCED_PARAMETER(lcid);\n\t\tUNREFERENCED_PARAMETER(wFlags);\n\t\tUNREFERENCED_PARAMETER(pdispparams);\n\t\tUNREFERENCED_PARAMETER(pvarResult);\n\t\tUNREFERENCED_PARAMETER(pexecinfo);\n\t\tUNREFERENCED_PARAMETER(puArgErr);\n\t\treturn DISP_E_MEMBERNOTFOUND;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::LockInPlaceActive(BOOL fLock)\n\t{\n\t\tUNREFERENCED_PARAMETER(fLock);\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::OnControlInfoChanged()\n\t{\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::OnFocus(BOOL fGotFocus)\n\t{\n\t\tUNREFERENCED_PARAMETER(fGotFocus);\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::OnInPlaceActivate()\n\t{\n\t\treturn S_OK;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::OnInPlaceDeactivate()\n\t{\n\t\treturn S_OK;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::OnPosRectChange(LPCRECT lprcPosRect)\n\t{\n\t\tUNREFERENCED_PARAMETER(lprcPosRect);\n\t\treturn S_OK;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::OnShowWindow(BOOL fShow)\n\t{\n\t\tUNREFERENCED_PARAMETER(fShow);\n\t\treturn S_OK;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::OnUIActivate()\n\t{\n\t\treturn S_OK;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::OnUIDeactivate(BOOL fUndoable)\n\t{\n\t\tUNREFERENCED_PARAMETER(fUndoable);\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::QueryInterface(REFIID riid, void** ppvObject)\n\t{\n\t\tif (!ppvObject)\n\t\t\treturn E_POINTER;\n\n\t\tif (IsEqualIID(riid, IID_IOleClientSite))\n\t\t\t*ppvObject = (IOleClientSite*)this;\n\t\telse if (IsEqualIID(riid, IID_IOleInPlaceSite))\n\t\t\t*ppvObject = (IOleInPlaceSite*)this;\n\t\telse if (IsEqualIID(riid, IID_IOleInPlaceFrame))\n\t\t\t*ppvObject = (IOleInPlaceFrame*)this;\n\t\telse if (IsEqualIID(riid, IID_IOleInPlaceUIWindow))\n\t\t\t*ppvObject = (IOleInPlaceUIWindow*)this;\n\t\telse if (IsEqualIID(riid, IID_IOleControlSite))\n\t\t\t*ppvObject = (IOleControlSite*)this;\n\t\telse if (IsEqualIID(riid, IID_IOleWindow))\n\t\t\t*ppvObject = this;\n\t\telse if (IsEqualIID(riid, IID_IDispatch))\n\t\t\t*ppvObject = (IDispatch*)this;\n\t\telse if (IsEqualIID(riid, IID_IUnknown))\n\t\t\t*ppvObject = this;\n\t\telse\n\t\t{\n\t\t\t*ppvObject = NULL;\n\t\t\treturn E_NOINTERFACE;\n\t\t}\n\n\t\tAddRef();\n\t\treturn S_OK;\n\t}\n\n\tinline STDMETHODIMP_(ULONG) CAXWindow::Release()\n\t{\n\t\treturn --m_cRefs;\n\t}\n\n\tinline void CAXWindow::Remove()\n\t{\n\t\tif (!m_pUnk)\n\t\t\treturn;\n\n\t\tIOleObject* pioo;\n\t\tHRESULT hr = m_pUnk->QueryInterface(IID_IOleObject, (void**)&pioo);\n\t\tif (SUCCEEDED(hr))\n\t\t{\n\t\t\tpioo->Close(OLECLOSE_NOSAVE);\n\t\t\tpioo->SetClientSite(NULL);\n\t\t\tpioo->Release();\n\t\t}\n\n\t\tIOleInPlaceObject* pipo;\n\t\thr = m_pUnk->QueryInterface(IID_IOleInPlaceObject, (void**)&pipo);\n\t\tif (SUCCEEDED(hr))\n\t\t{\n\t\t\tpipo->UIDeactivate();\n\t\t\tpipo->InPlaceDeactivate();\n\t\t\tpipo->Release();\n\t\t}\n\n\t\tm_pUnk->Release();\n\t\tm_pUnk = NULL;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::RemoveMenus(HMENU hmenuShared)\n\t{\n\t\tUNREFERENCED_PARAMETER(hmenuShared);\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::RequestBorderSpace(LPCBORDERWIDTHS lpborderwidths)\n\t{\n\t\tUNREFERENCED_PARAMETER(lpborderwidths);\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::RequestNewObjectLayout()\n\t{\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::SaveObject()\n\t{\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::Scroll(SIZE scrollExtent)\n\t{\n\t\tUNREFERENCED_PARAMETER(scrollExtent);\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::SetActiveObject(IOleInPlaceActiveObject* pActiveObject, LPCOLESTR lpszObjName)\n\t{\n\t\tUNREFERENCED_PARAMETER(pActiveObject);\n\t\tUNREFERENCED_PARAMETER(lpszObjName);\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::SetBorderSpace(LPCBORDERWIDTHS lpborderwidths)\n\t{\n\t\tUNREFERENCED_PARAMETER(lpborderwidths);\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline void CAXWindow::SetLocation(int x, int y, int width, int height)\n\t{\n\t\tm_rcControl.SetRect(x, y, x + width, y + height);\n\n\t\tif (!m_pUnk)\n\t\t\treturn;\n\n\t\tIOleInPlaceObject* pipo;\n\t\tHRESULT hr = m_pUnk->QueryInterface(IID_IOleInPlaceObject, (void**)&pipo);\n\t\tif (FAILED(hr))\n\t\t\treturn;\n\n\t\tpipo->SetObjectRects(&m_rcControl, &m_rcControl);\n\t\tpipo->Release();\n\t}\n\n\tinline STDMETHODIMP CAXWindow::SetMenu(HMENU hmenuShared, HOLEMENU holemenu, HWND hwndActiveObject)\n\t{\n\t\tUNREFERENCED_PARAMETER(hmenuShared);\n\t\tUNREFERENCED_PARAMETER(holemenu);\n\t\tUNREFERENCED_PARAMETER(hwndActiveObject);\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline void CAXWindow::SetParent(HWND hWndParent)\n\t{\n\t\tm_hWnd = hWndParent;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::SetStatusText(LPCOLESTR pszStatusText)\n\t{\n\t\tif (NULL == pszStatusText)\n\t\t\treturn E_POINTER;\n\n\t#ifndef _UNICODE\n\t\tchar status[MAX_PATH];\n\t\t// Convert the Wide string to char\n\t\tWideCharToMultiByte(CP_ACP, 0, pszStatusText, -1, status, MAX_PATH, NULL, NULL);\n\n\t\tif (IsWindow(m_hWndStatus))\n\t\t\tSendMessage(m_hWndStatus, SB_SETTEXT, (WPARAM)0, (LPARAM)status);\n\t#else\n\t\tif (IsWindow(m_hWndStatus))\n\t\t\tSendMessage(m_hWndStatus, SB_SETTEXT, (WPARAM)0, (LPARAM)pszStatusText);\n\t#endif\n\n\t\treturn (S_OK);\n\t}\n\n\tinline void CAXWindow::SetStatusWindow(HWND hWndStatus)\n\t{\n\t\tm_hWndStatus = hWndStatus;\n\t}\n\n\tinline void CAXWindow::SetVisible(BOOL fVisible)\n\t{\n\t\tif (!m_pUnk)\n\t\t\treturn;\n\n\t\tIOleObject* pioo;\n\t\tHRESULT hr = m_pUnk->QueryInterface(IID_IOleObject, (void**)&pioo);\n\t\tif (FAILED(hr))\n\t\t\treturn;\n\n\t\tif (fVisible)\n\t\t{\n\t\t\tpioo->DoVerb(OLEIVERB_INPLACEACTIVATE, NULL, this, 0, m_hWnd, &m_rcControl);\n\t\t\tpioo->DoVerb(OLEIVERB_SHOW, NULL, this, 0, m_hWnd, &m_rcControl);\n\t\t}\n\t\telse\n\t\t\tpioo->DoVerb(OLEIVERB_HIDE, NULL, this, 0, m_hWnd, NULL);\n\n\t\tpioo->Release();\n\t}\n\n\tinline STDMETHODIMP CAXWindow::ShowObject()\n\t{\n\t\treturn S_OK;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::ShowPropertyFrame()\n\t{\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::TransformCoords(POINTL* pptlHimetric, POINTF* pptfContainer, DWORD dwFlags)\n\t{\n\t\tUNREFERENCED_PARAMETER(pptlHimetric);\n\t\tUNREFERENCED_PARAMETER(pptfContainer);\n\t\tUNREFERENCED_PARAMETER(dwFlags);\n\t\treturn E_NOTIMPL;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::TranslateAccelerator(LPMSG lpmsg, WORD wID)\n\t{\n\t\tUNREFERENCED_PARAMETER(lpmsg);\n\t\tUNREFERENCED_PARAMETER(wID);\n\t\treturn S_OK;\n\t}\n\n\tinline STDMETHODIMP CAXWindow::TranslateAccelerator(LPMSG pMsg, DWORD grfModifiers)\n\t{\n\t\tUNREFERENCED_PARAMETER(pMsg);\n\t\tUNREFERENCED_PARAMETER(grfModifiers);\n\t\treturn S_FALSE;\n\t}\n\n\tinline void CAXWindow::TranslateKey(MSG msg)\n\t{\n\t\tif (!m_pUnk)\n\t\t\treturn;\n\n\t\tIOleInPlaceActiveObject* pao;\n\t\tHRESULT hr = m_pUnk->QueryInterface(IID_IOleInPlaceActiveObject, (void**)&pao);\n\t\tif (FAILED(hr))\n\t\t\treturn;\n\n\t\tpao->TranslateAccelerator(&msg);\n\t\tpao->Release();\n\t}\n\n\n\t////////////////////////////////////////\n\t// Definitions for the CWebBrowser class\n\t//\n\tinline CWebBrowser::CWebBrowser() : m_pIWebBrowser2(0)\n\t{\n\t\tOleInitialize(NULL);\n\t}\n\n\tinline CWebBrowser::~CWebBrowser()\n\t{\n\t\tif (m_pIWebBrowser2)\n\t\t{\n\t\t\tm_pIWebBrowser2->Stop();\n\t\t\tm_pIWebBrowser2->Release();\n\t\t}\n\n\t\tOleUninitialize();\n\t}\n\n\tinline void CWebBrowser::AddWebBrowserControl()\n\t{\n\t\tGetAXWindow().CreateControl(CLSID_WebBrowser);\n\t\tGetAXWindow().SetParent(m_hWnd);\n\t\tGetAXWindow().SetVisible(TRUE);\n\t\tGetAXWindow().Activate(TRUE);\n\n\t\tIUnknown* pUnk = GetAXWindow().GetUnknown();\n\t\tif(pUnk)\n\t\t{\n\t\t\t// Store the pointer to the WebBrowser control\n\t\t\tHRESULT hr = pUnk->QueryInterface(IID_IWebBrowser2, (void**)&m_pIWebBrowser2);\n\t\t\tpUnk->Release();\n\n\t\t\t// Navigate to an empty page\n\t\t\tif (SUCCEEDED(hr))\n\t\t\t{\n\t\t\t\tVARIANT vURL;\n\t\t\t\tvURL.vt = VT_BSTR;\n\t\t\t\tvURL.bstrVal = SysAllocString(L\"about:blank\");\n\t\t\t\tVARIANT ve1, ve2, ve3, ve4;\n\t\t\t\tve1.vt = VT_EMPTY;\n\t\t\t\tve2.vt = VT_EMPTY;\n\t\t\t\tve3.vt = VT_EMPTY;\n\t\t\t\tve4.vt = VT_EMPTY;\n\n\t\t\t\tm_pIWebBrowser2->Navigate2(&vURL, &ve1, &ve2, &ve3, &ve4);\n\n\t\t\t\tVariantClear(&vURL);\n\t\t\t}\n\t\t}\n\t}\n\n\tinline void CWebBrowser::Navigate(LPCTSTR pTChar)\n\t{\n\t\t// Navigate to our web page\n\t\tVARIANT vURL;\n\t\tvURL.vt = VT_BSTR;\n\t\tvURL.bstrVal = SysAllocString(T2W(pTChar));\n\t\tVARIANT ve1, ve2, ve3, ve4;\n\t\tve1.vt = VT_EMPTY;\n\t\tve2.vt = VT_EMPTY;\n\t\tve3.vt = VT_EMPTY;\n\t\tve4.vt = VT_EMPTY;\n\n\t\tGetIWebBrowser2()->Navigate2(&vURL, &ve1, &ve2, &ve3, &ve4);\n\n\t\tVariantClear(&vURL);\t// Also frees memory allocated by SysAllocateString\n\t}\n\n\tinline void CWebBrowser::OnCreate()\n\t{\n\t\tAddWebBrowserControl();\n\t}\n\n\tinline void CWebBrowser::OnSize(int width, int height)\n\t{\n\t\t// position the container\n\t\tGetAXWindow().SetLocation(0, 0, width, height);\n\t}\n\n\tinline LRESULT CWebBrowser::WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\tswitch(uMsg)\n\t\t{\n\t\tcase WM_SIZE:\n\t\t\tOnSize(LOWORD(lParam), HIWORD(lParam));\n\t\t\tbreak;\n\t\tcase WM_DESTROY:\n\t\t\tGetAXWindow().Remove();\n\t\t\tbreak;\n\t\t}\n\n\t\treturn CWnd::WndProcDefault(uMsg, wParam, lParam);\n\t}\n\n}\n\n#endif  // _WIN32XX_WEBBROWSER_H_\n\n"
  },
  {
    "path": "external/win32cpp/include/wincore.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n\n///////////////////////////////////////////////////////\n// wincore.h\n//  Declaration of the following classes:\n//  CWinApp, CWnd, CWinException, CCriticalSection,\n//  CPoint, CRect, and CSize\n//\n// This file contains the declarations for the core set of classes required to\n// create simple windows using Win32++.\n//\n// 1) CCriticalSection: This class is used internally to manage thread access\n//            to shared resources. You can also use this class to lock and\n//            release your own critical sections.\n//\n// 2) CWinException: This class is used internally by Win32++ to handle\n//            exceptions. You can also use it to throw and catch exceptions.\n//\n// 3) WinApp: This class is used start Win32++ and run the message loop. You\n//            should inherit from this class to start Win32++ in your own\n//            application.\n//\n// 4) CWnd:   This class is used to represent a window. It provides a means\n//            of creating the window, and handling its messages. Inherit\n//            from this class to define and control windows.\n//\n//\n// Note: This header file (or another Win32++ header file which includes it)\n//       should be included before all other header files. It sets some\n//       important macros which need to be set before including Windows.h\n//       Including this file first also allows it to disable some pointless\n//       warning messages (see below).\n\n\n\n#ifndef _WIN32XX_WINCORE_H_\n#define _WIN32XX_WINCORE_H_\n\n\n// Remove pointless warning messages\n#ifdef _MSC_VER\n  #pragma warning (disable : 4996) // function or variable may be unsafe (deprecated)\n  #ifndef _CRT_SECURE_NO_WARNINGS\n    #define _CRT_SECURE_NO_WARNINGS // eliminate deprecation warnings for VS2005/VS2010\n  #endif\n  #if _MSC_VER < 1500\n    #pragma warning (disable : 4511) // copy operator could not be generated\n    #pragma warning (disable : 4512) // assignment operator could not be generated\n    #pragma warning (disable : 4702) // unreachable code (bugs in Microsoft's STL)\n    #pragma warning (disable : 4786) // identifier was truncated\n  #endif\n#endif\n\n#ifdef __BORLANDC__\n  #pragma option -w-8019\t\t\t// code has no effect\n  #pragma option -w-8026            // functions with exception specifiations are not expanded inline\n  #pragma option -w-8027\t\t    // function not expanded inline\n  #define STRICT 1\n#endif\n\n#ifdef __GNUC__\n  #pragma GCC diagnostic ignored \"-Wmissing-braces\"\n  #pragma GCC diagnostic ignored \"-Wunused-value\"\n#endif\n\n#ifdef _WIN32_WCE\n  #include \"wcestddef.h\"\n#endif\n\n#define _WINSOCKAPI_            // Prevent winsock.h #include's.\n\n#include <assert.h>\n#include <vector>\n#include <algorithm>\n#include <string>\n#include <map>\n#include <windows.h>\n#include <commctrl.h>\n#include <stdio.h>\n#include <tchar.h>\n#include <shlwapi.h>\n#include \"shared_ptr.h\"\n//#include \"winutils.h\"\t\t\t// included later in this file\n//#include \"cstring.h\"\t\t\t// included later in this file\n//#include \"gdi.h\"\t\t\t\t// included later in this file\n//#include \"menu.h\"\t\t\t\t// included later in this file\n\n// For compilers lacking Win64 support\n#ifndef  GetWindowLongPtr\n  #define GetWindowLongPtr   GetWindowLong\n  #define SetWindowLongPtr   SetWindowLong\n  #define GWLP_WNDPROC       GWL_WNDPROC\n  #define GWLP_HINSTANCE     GWL_HINSTANCE\n  #define GWLP_ID            GWL_ID\n  #define GWLP_USERDATA      GWL_USERDATA\n  #define DWLP_DLGPROC       DWL_DLGPROC\n  #define DWLP_MSGRESULT     DWL_MSGRESULT\n  #define DWLP_USER          DWL_USER\n  #define DWORD_PTR          DWORD\n  #define LONG_PTR           LONG\n  #define ULONG_PTR          LONG\n#endif\n#ifndef GetClassLongPtr\n  #define GetClassLongPtr    GetClassLong\n  #define SetClassLongPtr    SetClassLong\n  #define GCLP_HBRBACKGROUND GCL_HBRBACKGROUND\n  #define GCLP_HCURSOR       GCL_HCURSOR\n  #define GCLP_HICON         GCL_HICON\n  #define GCLP_HICONSM       GCL_HICONSM\n  #define GCLP_HMODULE       GCL_HMODULE\n  #define GCLP_MENUNAME      GCL_MENUNAME\n  #define GCLP_WNDPROC       GCL_WNDPROC\n#endif\n\n\n// Messages defined by Win32++\n#define UWM_POPUPMENU\t\t(WM_APP + 1)\t// Message - creates the menubar popup menu\n#define UWM_DOCK_START\t\t(WM_APP + 2)\t// Notification - about to start undocking\n#define UWM_DOCK_MOVE\t\t(WM_APP + 3)\t// Notification - undocked docker is being moved\n#define UWM_DOCK_END\t\t(WM_APP + 4)\t// Notification - docker has been docked\n#define UWM_BAR_START\t\t(WM_APP + 5)\t// Notification - docker bar selected for move\n#define UWM_BAR_MOVE\t\t(WM_APP + 6)\t// Notification - docker bar moved\n#define UWM_BAR_END\t\t\t(WM_APP + 7)\t// Notification - end of docker bar move\n#define UWM_UNDOCKED\t\t(WM_APP + 8)\t// Notification - sent by docker when undocked\n#define UWM_FRAMELOSTFOCUS\t(WM_APP + 9)    // Notification - sent by frame to view window when focus lost\n#define UWM_FRAMEGOTFOCUS\t(WM_APP + 10)   // Notification - sent by frame to view window when focus acquired\n#define UWM_DOCK_DESTROYED\t(WM_APP + 11)\t// Message - posted when docker is destroyed\n#define UWM_TAB_CHANGED     (WM_APP + 12)\t// Notification - tab layout changed\n#define UWM_TOOLBAR_RESIZE  (WM_APP + 13)   // Message - sent by toolbar to parent. Used by the rebar\n#define UWM_UPDATE_COMMAND  (WM_APP + 14)   // Message - sent before a menu is displayed. Used by OnUpdate\n#define UWM_DOCK_ACTIVATED  (WM_APP + 15)   // Message - sent to dock ancestor when a docker is activated or deactivated.\n#define UWM_GETMENUTHEME    (WM_APP + 16)\t// Message - returns a pointer to MenuTheme\n#define UWM_GETREBARTHEME   (WM_APP + 17)\t// Message - returns a pointer to CToolBar\n#define UWM_GETTOOLBARTHEME (WM_APP + 18)   // Message - returns a pointer to ToolBarTheme\n#define UWM_CLEANUPTEMPS\t(WM_APP + 19)\t// Message - posted to cleanup temporary CDCs\n\n\n// Automatically include the Win32xx namespace\n// define NO_USING_NAMESPACE to skip this step\nnamespace Win32xx {}\n#ifndef NO_USING_NAMESPACE\n  using namespace Win32xx;\n#endif\n\n// Required for WinCE\n#ifndef TLS_OUT_OF_INDEXES\n  #define TLS_OUT_OF_INDEXES ((DWORD_PTR) -1)\n#endif\n#ifndef WM_PARENTNOTIFY\n  #define WM_PARENTNOTIFY 0x0210\n#endif\n\n\nnamespace Win32xx\n{\n\n\t////////////////////////////////////////////////\n\t// Forward declarations.\n\t//  These classes are defined later or elsewhere\n\tclass CDC;\n\tclass CGDIObject;\n\tclass CMenu;\n\tclass CWinApp;\n\tclass CWnd;\n\tclass CBitmap;\n\tclass CBrush;\n\tclass CFont;\n\tclass CPalette;\n\tclass CPen;\n\tclass CRgn;\n\n\t// tString is a TCHAR std::string\n\ttypedef std::basic_string<TCHAR> tString;\n\n\t// tStringStream is a TCHAR std::stringstream\n\ttypedef std::basic_stringstream<TCHAR> tStringStream;\n\n\t// Some useful smart pointers\n\ttypedef Shared_Ptr<CDC> DCPtr;\n\ttypedef Shared_Ptr<CGDIObject> GDIPtr;\n\ttypedef Shared_Ptr<CMenu> MenuPtr;\n\ttypedef Shared_Ptr<CWnd> WndPtr;\n\ttypedef Shared_Ptr<CBitmap> BitmapPtr;\n\ttypedef Shared_Ptr<CBrush> BrushPtr;\n\ttypedef Shared_Ptr<CFont> FontPtr;\n\ttypedef Shared_Ptr<CPalette> PalettePtr;\n\ttypedef Shared_Ptr<CPen> PenPtr;\n\ttypedef Shared_Ptr<CRgn> RgnPtr;\n\n\tenum Constants\t\t\t// Defines the maximum size for TCHAR strings\n\t{\n\t\tMAX_MENU_STRING = 80,\n\t\tMAX_STRING_SIZE = 255,\n\t};\n\n\tstruct CompareHDC\t\t// The comparison function object used by CWinApp::m_mapHDC\n\t{\n\t\tbool operator()(HDC const a, const HDC b) const\n\t\t\t{return ((DWORD_PTR)a < (DWORD_PTR)b);}\n\t};\n\n\tstruct CompareGDI\t\t// The comparison function object used by CWinApp::m_mapGDI\n\t{\n\t\tbool operator()(HGDIOBJ const a, const HGDIOBJ b) const\n\t\t\t{return ((DWORD_PTR)a < (DWORD_PTR)b);}\n\t};\n\n\tstruct CompareHMENU\t\t// The comparison function object used by CWinApp::m_mapHMENU\n\t{\n\t\tbool operator()(HMENU const a, const HMENU b) const\n\t\t\t{return ((DWORD_PTR)a < (DWORD_PTR)b);}\n\t};\n\n\tstruct CompareHWND\t\t// The comparison function object used by CWinApp::m_mapHWND\n\t{\n\t\tbool operator()(HWND const a, const HWND b) const\n\t\t\t{return ((DWORD_PTR)a < (DWORD_PTR)b);}\n\t};\n\n\tstruct TLSData\t\t\t// Used for Thread Local Storage (TLS)\n\t{\n\t\tCWnd* pCWnd;\t\t// pointer to CWnd object for Window creation\n\t\tCWnd* pMenuBar;\t\t// pointer to CMenuBar object used for the WH_MSGFILTER hook\n\t\tHHOOK hHook;\t\t// WH_MSGFILTER hook for CMenuBar and Modeless Dialogs\n\n\t\tstd::vector<DCPtr> vTmpDCs;\t\t// A vector of temporary CDC pointers\n\t\tstd::vector<GDIPtr> vTmpGDIs;\t// A vector of temporary CGDIObject pointers\n\t\tstd::vector<WndPtr> vTmpWnds;\t// A vector of temporary CWnd pointers\n\t\tTLSData() : pCWnd(0), pMenuBar(0), hHook(0) {}\n\n#ifndef _WIN32_WCE\n\t\tstd::vector<MenuPtr> vTmpMenus;\t// A vector of temporary CMenu pointers\n#endif\n\t};\n\n\n\t/////////////////////////////////////////\n\t// Declarations for the CCriticalSection class\n\t// This class is used for thread synchronisation\n\tclass CCriticalSection\n\t{\n\tpublic:\n\t\tCCriticalSection()\t{ ::InitializeCriticalSection(&m_cs); }\n\t\t~CCriticalSection()\t{ ::DeleteCriticalSection(&m_cs); }\n\n\t\tvoid Lock() \t{ ::EnterCriticalSection(&m_cs); }\n\t\tvoid Release()\t{ ::LeaveCriticalSection(&m_cs); }\n\n\tprivate:\n\t\tCCriticalSection ( const CCriticalSection& );\n\t\tCCriticalSection& operator = ( const CCriticalSection& );\n\n\t\tCRITICAL_SECTION m_cs;\n\t};\n\n\n\t////////////////////////////////////////\n\t// Declaration of the CWinException class\n\t//\n\t// Note: Each function guarantees not to throw an exception\n\n\tclass CWinException : public std::exception\n\t{\n\tpublic:\n\t\tCWinException(LPCTSTR pszText) throw ();\n\t\t~CWinException() throw() {}\n\t\tDWORD GetError() const throw ();\n\t\tLPCTSTR GetErrorString() const throw ();\n\t\tconst char * what () const throw ();\n\n\tprivate:\n\t\tDWORD  m_Error;\n\t\tLPCTSTR m_pszText;\n\t\tTCHAR m_szErrorString[MAX_STRING_SIZE];\n\t};\n\n\n\t///////////////////////////////////\n\t// Declaration of the CWinApp class\n\t//\n\tclass CWinApp\n\t{\n\t\t// Provide these access to CWinApp's private members: \n\t\tfriend class CDC;\n\t\tfriend class CDialog;\n\t\tfriend class CGDIObject;\n\t\tfriend class CMenu;\n\t\tfriend class CMenuBar;\n\t\tfriend class CPropertyPage;\n\t\tfriend class CPropertySheet;\n\t\tfriend class CTaskDialog;\n\t\tfriend class CWnd;\n\t\tfriend CWinApp* GetApp();\n\t\tfriend CGDIObject* FromHandle(HGDIOBJ hObject);\n\t\tfriend CBitmap* FromHandle(HBITMAP hBitmap);\n\t\tfriend CBrush* FromHandle(HBRUSH hBrush);\n\t\tfriend CFont* FromHandle(HFONT hFont);\n\t\tfriend CPalette* FromHandle(HPALETTE hPalette);\n\t\tfriend CPen* FromHandle(HPEN hPen);\n\t\tfriend CRgn* FromHandle(HRGN hRgn);\n\t\tfriend CDC* FromHandle(HDC hDC);\n\t\tfriend CWnd* FromHandle(HWND hWnd);\n#ifndef _WIN32_WCE\n\t\tfriend CMenu* FromHandle(HMENU hMenu);\n#endif\n\n\t\ttypedef Shared_Ptr<TLSData> TLSDataPtr;\n\n\tpublic:\n\t\tCWinApp();\n\t\tvirtual ~CWinApp();\n\n\t\tHACCEL GetAccelerators() const { return m_hAccel; }\n\t\tHINSTANCE GetInstanceHandle() const { return m_hInstance; }\n\t\tHINSTANCE GetResourceHandle() const { return (m_hResource ? m_hResource : m_hInstance); }\n\t\tvoid SetAccelerators(HACCEL hAccel, CWnd* pWndAccel);\n\t\tvoid SetResourceHandle(HINSTANCE hResource);\n\n\t\t// These are the functions you might wish to override\n\t\tvirtual BOOL InitInstance();\n\t\tvirtual int  MessageLoop();\n\t\tvirtual int Run();\n\n\tprotected:\n\t\tvirtual BOOL OnIdle(LONG lCount);\n\t\tvirtual BOOL PreTranslateMessage(MSG Msg);\n\n\tprivate:\n\t\tCWinApp(const CWinApp&);\t\t\t\t// Disable copy construction\n\t\tCWinApp& operator = (const CWinApp&);\t// Disable assignment operator\n\t\tCDC* GetCDCFromMap(HDC hDC);\n\t\tCGDIObject* GetCGDIObjectFromMap(HGDIOBJ hObject);\t\t\n\t\tCMenu* GetCMenuFromMap(HMENU hMenu);\n\t\tCWnd* GetCWndFromMap(HWND hWnd);\n\n\t\tvoid\tAddTmpDC(CDC* pDC);\n\t\tvoid\tAddTmpGDI(CGDIObject* pObject);\n\t\tCMenu*\tAddTmpMenu(HMENU hMenu);\n\t\tCWnd*\tAddTmpWnd(HWND hWnd);\n\t\tvoid\tCleanupTemps();\n\t\tDWORD\tGetTlsIndex() const {return m_dwTlsIndex;}\n\t\tvoid\tSetCallback();\n\t\tTLSData* SetTlsIndex();\n\t\tstatic CWinApp* SetnGetThis(CWinApp* pThis = 0);\n\n\t\tstd::map<HDC, CDC*, CompareHDC> m_mapHDC;\t\t\t// maps device context handles to CDC objects\n\t\tstd::map<HGDIOBJ, CGDIObject*, CompareGDI> m_mapGDI;\t// maps GDI handles to CGDIObjects.\n\t\tstd::map<HMENU, CMenu*, CompareHMENU> m_mapHMENU;\t// maps menu handles to CMenu objects\n\t\tstd::map<HWND, CWnd*, CompareHWND> m_mapHWND;\t\t// maps window handles to CWnd objects\n\t\tstd::vector<TLSDataPtr> m_vTLSData;\t\t// vector of TLSData smart pointers, one for each thread\n\t\tCCriticalSection m_csMapLock;\t// thread synchronisation for m_mapHWND\n\t\tCCriticalSection m_csTLSLock;\t// thread synchronisation for m_vTLSData\n\t\tCCriticalSection m_csAppStart;\t// thread synchronisation for application startup\n\t\tHINSTANCE m_hInstance;\t\t\t// handle to the applications instance\n\t\tHINSTANCE m_hResource;\t\t\t// handle to the applications resources\n\t\tDWORD m_dwTlsIndex;\t\t\t\t// Thread Local Storage index\n\t\tWNDPROC m_Callback;\t\t\t\t// callback address of CWnd::StaticWndowProc\n\t\tHACCEL m_hAccel;\t\t\t\t// handle to the accelerator table\n\t\tCWnd* m_pWndAccel;\t\t\t\t// handle to the window for accelerator keys\n\n\t};\n\n}\n\n#include \"winutils.h\"\n#include \"cstring.h\"\n\n\nnamespace Win32xx\n{\n\t////////////////////////////////\n\t// Declaration of the CWnd class\n\t//\n\tclass CWnd\n\t{\n\tfriend class CMDIChild;\n\tfriend class CDialog;\n\tfriend class CPropertyPage;\n\tfriend class CTaskDialog;\n\tfriend class CWinApp;\n\n\tpublic:\n\t\tCWnd();\t\t\t\t// Constructor\n\t\tvirtual ~CWnd();\t// Destructor\n\n\t\t// These virtual functions can be overridden\n\t\tvirtual BOOL Attach(HWND hWnd);\n\t\tvirtual BOOL AttachDlgItem(UINT nID, CWnd* pParent);\n\t\tvirtual void CenterWindow() const;\n\t\tvirtual HWND Create(CWnd* pParent = NULL);\n\t\tvirtual HWND CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, CWnd* pParent, CMenu* pMenu, LPVOID lpParam = NULL);\n\t\tvirtual HWND CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rc, CWnd* pParent, CMenu* pMenu, LPVOID lpParam = NULL);\n\t\tvirtual void Destroy();\n\t\tvirtual HWND Detach();\n\t\tvirtual HICON SetIconLarge(int nIcon);\n\t\tvirtual HICON SetIconSmall(int nIcon);\n\n\t\t// Attributes\n\t\tHWND GetHwnd() const\t\t\t\t{ return m_hWnd; }\n\t\tWNDPROC GetPrevWindowProc() const\t{ return m_PrevWindowProc; }\n\n\t\t// Wrappers for Win32 API functions\n\t\t// These functions aren't virtual, and shouldn't be overridden\n\t\tCDC*  BeginPaint(PAINTSTRUCT& ps) const;\n\t\tBOOL  BringWindowToTop() const;\n\t\tLRESULT CallWindowProc(WNDPROC lpPrevWndFunc, UINT Msg, WPARAM wParam, LPARAM lParam) const;\n\t\tBOOL  CheckDlgButton(int nIDButton, UINT uCheck) const;\n\t\tBOOL  CheckRadioButton(int nIDFirstButton, int nIDLastButton, int nIDCheckButton) const;\n\t\tCWnd* ChildWindowFromPoint(POINT pt) const;\n\t\tBOOL  ClientToScreen(POINT& pt) const;\n\t\tBOOL  ClientToScreen(RECT& rc) const;\n\t\tLRESULT DefWindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam) const;\n\t\tHDWP  DeferWindowPos(HDWP hWinPosInfo, HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT uFlags) const;\n\t\tHDWP  DeferWindowPos(HDWP hWinPosInfo, HWND hWndInsertAfter, const RECT& rc, UINT uFlags) const;\n\t\tBOOL  DrawMenuBar() const;\n\t\tBOOL  EnableWindow(BOOL bEnable = TRUE) const;\n\t\tBOOL  EndPaint(PAINTSTRUCT& ps) const;\n\t\tCWnd* GetActiveWindow() const;\n\t\tCWnd* GetAncestor(UINT gaFlag = 3 /*= GA_ROOTOWNER*/) const;\n\t\tCWnd* GetCapture() const;\n\t\tULONG_PTR GetClassLongPtr(int nIndex) const;\n\t\tCString GetClassName() const;\n\t\tCRect GetClientRect() const;\n\t\tCDC*  GetDC() const;\n\t\tCDC*  GetDCEx(HRGN hrgnClip, DWORD flags) const;\n\t\tCWnd* GetDesktopWindow() const;\n\t\tCWnd* GetDlgItem(int nIDDlgItem) const;\n\t\tUINT  GetDlgItemInt(int nIDDlgItem, BOOL* lpTranslated, BOOL bSigned) const;\n\t\tCString GetDlgItemText(int nIDDlgItem) const;\n\t\tCWnd* GetFocus() const;\n\t\tCFont* GetFont() const;\n\t\tHICON GetIcon(BOOL bBigIcon) const;\n\t\tCWnd* GetNextDlgGroupItem(CWnd* pCtl, BOOL bPrevious) const;\n\t\tCWnd* GetNextDlgTabItem(CWnd* pCtl, BOOL bPrevious) const;\n\t\tCWnd* GetParent() const;\n\t\tBOOL  GetScrollInfo(int fnBar, SCROLLINFO& si) const;\n\t\tCRect GetUpdateRect(BOOL bErase) const;\n\t\tint GetUpdateRgn(CRgn* pRgn, BOOL bErase) const;\n\t\tCWnd* GetWindow(UINT uCmd) const;\n\t\tCDC*  GetWindowDC() const;\n\t\tLONG_PTR GetWindowLongPtr(int nIndex) const;\n\t\tCRect GetWindowRect() const;\n\t\tCString GetWindowText() const;\n\t\tint   GetWindowTextLength() const;\n\t\tvoid  Invalidate(BOOL bErase = TRUE) const;\n\t\tBOOL  InvalidateRect(LPCRECT lpRect, BOOL bErase = TRUE) const;\n\t\tBOOL  InvalidateRgn(CRgn* pRgn, BOOL bErase = TRUE) const;\n\t\tBOOL  IsChild(CWnd* pChild) const;\n\t\tBOOL  IsDialogMessage(LPMSG lpMsg) const;\n\t\tUINT  IsDlgButtonChecked(int nIDButton) const;\n\t\tBOOL  IsWindow() const;\n\t\tBOOL  IsWindowEnabled() const;\n\t\tBOOL  IsWindowVisible() const;\n\t\tBOOL  KillTimer(UINT_PTR uIDEvent) const;\n\t\tint   MessageBox(LPCTSTR lpText, LPCTSTR lpCaption, UINT uType) const;\n\t\tvoid  MapWindowPoints(CWnd* pWndTo, POINT& pt) const;\n\t\tvoid  MapWindowPoints(CWnd* pWndTo, RECT& rc) const;\n\t\tvoid  MapWindowPoints(CWnd* pWndTo, LPPOINT ptArray, UINT nCount) const;\n\t\tBOOL  MoveWindow(int x, int y, int nWidth, int nHeight, BOOL bRepaint = TRUE) const;\n\t\tBOOL  MoveWindow(const RECT& rc, BOOL bRepaint = TRUE) const;\n\t\tBOOL  PostMessage(UINT uMsg, WPARAM wParam = 0L, LPARAM lParam = 0L) const;\n\t\tBOOL  PostMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) const;\n\t\tBOOL  RedrawWindow(LPCRECT lpRectUpdate = NULL, CRgn* pRgn = NULL, UINT flags = RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE | RDW_ALLCHILDREN) const;\n\t\tint   ReleaseDC(CDC* pDC) const;\n\t\tBOOL  ScreenToClient(POINT& Point) const;\n\t\tBOOL  ScreenToClient(RECT& rc) const;\n\t\tLRESULT SendDlgItemMessage(int nIDDlgItem, UINT Msg, WPARAM wParam, LPARAM lParam) const;\n\t\tLRESULT SendMessage(UINT uMsg, WPARAM wParam = 0L, LPARAM lParam = 0L) const;\n\t\tLRESULT SendMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) const;\n\t\tBOOL  SendNotifyMessage(UINT Msg, WPARAM wParam, LPARAM lParam) const;\n\t\tCWnd* SetActiveWindow() const;\n\t\tCWnd* SetCapture() const;\n\t\tULONG_PTR SetClassLongPtr(int nIndex, LONG_PTR dwNewLong) const;\n\t\tBOOL  SetDlgItemInt(int nIDDlgItem, UINT uValue, BOOL bSigned) const;\n\t\tBOOL  SetDlgItemText(int nIDDlgItem, LPCTSTR lpString) const;\n\t\tCWnd* SetFocus() const;\n\t\tvoid  SetFont(CFont* pFont, BOOL bRedraw = TRUE) const;\n\t\tBOOL  SetForegroundWindow() const;\n\t\tHICON SetIcon(HICON hIcon, BOOL bBigIcon) const;\n\t\tCWnd* SetParent(CWnd* pWndParent) const;\n\t\tBOOL  SetRedraw(BOOL bRedraw = TRUE) const;\n\t\tint   SetScrollInfo(int fnBar, const SCROLLINFO& si, BOOL fRedraw) const;\n\t\tUINT_PTR SetTimer(UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc) const;\n\t\tLONG_PTR SetWindowLongPtr(int nIndex, LONG_PTR dwNewLong) const;\n\t\tBOOL  SetWindowPos(HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT uFlags) const;\n\t\tBOOL  SetWindowPos(HWND hWndInsertAfter, const RECT& rc, UINT uFlags) const;\n\t\tint   SetWindowRgn(CRgn* pRgn, BOOL bRedraw = TRUE) const;\n\t\tBOOL  SetWindowText(LPCTSTR lpString) const;\n\t\tHRESULT SetWindowTheme(LPCWSTR pszSubAppName, LPCWSTR pszSubIdList) const;\n\t\tBOOL  ShowWindow(int nCmdShow = SW_SHOWNORMAL) const;\n\t\tBOOL  UpdateWindow() const;\n\t\tBOOL  ValidateRect(LPCRECT prc) const;\n\t\tBOOL  ValidateRgn(CRgn* pRgn) const;\n\t\tstatic CWnd* WindowFromPoint(POINT pt);\n\n  #ifndef _WIN32_WCE\n\t\tBOOL  CloseWindow() const;\n\t\tint   DlgDirList(LPTSTR lpPathSpec, int nIDListBox, int nIDStaticPath, UINT uFileType) const;\n\t\tint   DlgDirListComboBox(LPTSTR lpPathSpec, int nIDComboBox, int nIDStaticPath, UINT uFiletype) const;\n\t\tBOOL  DlgDirSelectEx(LPTSTR lpString, int nCount, int nIDListBox) const;\n\t\tBOOL  DlgDirSelectComboBoxEx(LPTSTR lpString, int nCount, int nIDComboBox) const;\n\t\tBOOL  DrawAnimatedRects(int idAni, RECT& rcFrom, RECT& rcTo) const;\n\t\tBOOL  DrawCaption(CDC* pDC, RECT& rc, UINT uFlags) const;\n\t\tBOOL  EnableScrollBar(UINT uSBflags, UINT uArrows) const;\n\t\tCWnd* GetLastActivePopup() const;\n\t\tCMenu* GetMenu() const;\n\t\tint   GetScrollPos(int nBar) const;\n\t\tBOOL  GetScrollRange(int nBar, int& MinPos, int& MaxPos) const;\n\t\tCMenu* GetSystemMenu(BOOL bRevert) const;\n\t\tCWnd* GetTopWindow() const;\n\t\tBOOL  GetWindowPlacement(WINDOWPLACEMENT& pWndpl) const;\n\t\tBOOL  HiliteMenuItem(CMenu* pMenu, UINT uItemHilite, UINT uHilite) const;\n\t\tBOOL  IsIconic() const;\n\t\tBOOL  IsZoomed() const;\n\t\tBOOL  LockWindowUpdate() const;\n\t\tBOOL  OpenIcon() const;\n\t\tvoid  Print(CDC* pDC, DWORD dwFlags) const;\n\t\tBOOL  SetMenu(CMenu* pMenu) const;\n\t\tBOOL  ScrollWindow(int XAmount, int YAmount, LPCRECT lprcScroll, LPCRECT lprcClip) const;\n\t\tint   ScrollWindowEx(int dx, int dy, LPCRECT lprcScroll, LPCRECT lprcClip, CRgn* prgnUpdate, LPRECT lprcUpdate, UINT flags) const;\n\t\tint   SetScrollPos(int nBar, int nPos, BOOL bRedraw) const;\n\t\tBOOL  SetScrollRange(int nBar, int nMinPos, int nMaxPos, BOOL bRedraw) const;\n\t\tBOOL  SetWindowPlacement(const WINDOWPLACEMENT& wndpl) const;\n\t\tBOOL  ShowOwnedPopups(BOOL fShow) const;\n\t\tBOOL  ShowScrollBar(int nBar, BOOL bShow) const;\n\t\tBOOL  ShowWindowAsync(int nCmdShow) const;\n\t\tBOOL  UnLockWindowUpdate() const;\n\t\tCWnd* WindowFromDC(CDC* pDC) const;\n\n    #ifndef WIN32_LEAN_AND_MEAN\n\t\tvoid  DragAcceptFiles(BOOL fAccept) const;\n    #endif\n  #endif\n\n\t\tstatic LRESULT CALLBACK StaticWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);\n\t\toperator HWND() const { return m_hWnd; }\n\n\tprotected:\n\t\t// Override these functions as required\n\t\tvirtual LRESULT FinalWindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\t\tvirtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void OnCreate();\n\t\tvirtual void OnDraw(CDC* pDC);\n\t\tvirtual BOOL OnEraseBkgnd(CDC* pDC);\n\t\tvirtual void OnInitialUpdate();\n\t\tvirtual void OnMenuUpdate(UINT nID);\n\t\tvirtual LRESULT OnMessageReflect(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\t\tvirtual LRESULT OnNotify(WPARAM wParam, LPARAM lParam);\n\t\tvirtual LRESULT OnNotifyReflect(WPARAM wParam, LPARAM lParam);\n\t\tvirtual void PreCreate(CREATESTRUCT& cs);\n\t\tvirtual void PreRegisterClass(WNDCLASS& wc);\n\t\tvirtual BOOL PreTranslateMessage(MSG* pMsg);\n\t\tvirtual LRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\t\tvirtual LRESULT WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\n\t\tHWND m_hWnd;\t\t\t\t\t// handle to this object's window\n\n\tprivate:\n\t\tCWnd(const CWnd&);\t\t\t\t// Disable copy construction\n\t\tCWnd& operator = (const CWnd&); // Disable assignment operator\n\t\tvoid AddToMap();\n\t\tvoid Cleanup();\n\t\tLRESULT MessageReflect(HWND hwndParent, UINT uMsg, WPARAM wParam, LPARAM lParam);\n\t\tBOOL RegisterClass(WNDCLASS& wc);\n\t\tBOOL RemoveFromMap();\n\t\tvoid Subclass(HWND hWnd);\n\n\t\tShared_Ptr<WNDCLASS> m_pwc;\t\t// defines initialisation parameters for PreRegisterClass\n\t\tShared_Ptr<CREATESTRUCT> m_pcs;\t// defines initialisation parameters for PreCreate and Create\n\t\tWNDPROC m_PrevWindowProc;\t\t// pre-subclassed Window Procedure\n\t\tBOOL m_IsTmpWnd;\t\t\t\t// True if this CWnd is a TmpWnd\n\n\t}; // class CWnd\n\n}\n\n//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n#include \"gdi.h\"\t\n#include \"menu.h\"\n\nnamespace Win32xx\n{\n\n\t//////////////////////////////////////////\n\t// Definitions for the CWinException class\n\t//\n\tinline CWinException::CWinException(LPCTSTR pszText) throw () : m_Error(::GetLastError()), m_pszText(pszText)\n\t{\n\t\tmemset(m_szErrorString, 0, MAX_STRING_SIZE * sizeof(TCHAR));\n\n\t\tif (m_Error != 0)\n\t\t{\n\t\t\tDWORD dwFlags = FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS;\n\t\t\t::FormatMessage(dwFlags, NULL, m_Error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), m_szErrorString, MAX_STRING_SIZE-1, NULL);\n\t\t}\n\t}\n\n\tinline DWORD CWinException::GetError() const throw ()\n\t{\n\t\treturn m_Error;\n\t}\n\n\tinline LPCTSTR CWinException::GetErrorString() const throw ()\n\t{\n\t\treturn m_szErrorString;\n\t}\n\n\tinline const char * CWinException::what() const throw ()\n\t{\n\t\t// Sends the last error string to the debugger (typically displayed in the IDE's output window).\n\t\t::OutputDebugString(m_szErrorString);\n\t\treturn \"CWinException thrown\";\n\t}\n\n\n\t////////////////////////////////////\n\t// Definitions for the CWinApp class\n\t//\n\n\t// To begin Win32++, inherit your application class from this one.\n\t// You must run only one instance of the class inherited from this.\n\tinline CWinApp::CWinApp() : m_Callback(NULL), m_hAccel(0), m_pWndAccel(0)\n\t{\n\t\ttry\n\t\t{\n\t\t\tm_csAppStart.Lock();\n\t\t\tassert( 0 == SetnGetThis() );\t// Test if this is the first instance of CWinApp\n\n\t\t\tm_dwTlsIndex = ::TlsAlloc();\n\t\t\tif (m_dwTlsIndex == TLS_OUT_OF_INDEXES)\n\t\t\t{\n\t\t\t\t// We only get here in the unlikely event that all TLS indexes are already allocated by this app\n\t\t\t\t// At least 64 TLS indexes per process are allowed. Win32++ requires only one TLS index.\n\t\t\t\tm_csAppStart.Release();\n\t\t\t\tthrow CWinException(_T(\"CWinApp::CWinApp  Failed to allocate TLS Index\"));\n\t\t\t}\n\n\t\t\tSetnGetThis(this);\n\t\t\tm_csAppStart.Release();\n\n\t\t\t// Set the instance handle\n\t#ifdef _WIN32_WCE\n\t\t\tm_hInstance = (HINSTANCE)GetModuleHandle(0);\n\t#else\n\t\t\tMEMORY_BASIC_INFORMATION mbi = {0};\n\t\t\tVirtualQuery( (LPCVOID)SetnGetThis, &mbi, sizeof(mbi) );\n\t\t\tassert(mbi.AllocationBase);\n\t\t\tm_hInstance = (HINSTANCE)mbi.AllocationBase;\n\t#endif\n\n\t\t\tm_hResource = m_hInstance;\n\t\t\tSetCallback();\n\t\t}\n\n\t\tcatch (const CWinException &e)\n\t\t{\n\t\t\te.what();\n\t\t\tthrow;\n\t\t}\n\t}\n\n\tinline CWinApp::~CWinApp()\n\t{\n\t\tstd::vector<TLSDataPtr>::iterator iter;\n\t\tfor (iter = m_vTLSData.begin(); iter < m_vTLSData.end(); ++iter)\n\t\t{\n\t\t\t(*iter)->vTmpDCs.clear();\n#ifndef _WIN32_WCE\n\t\t\t(*iter)->vTmpMenus.clear();\n#endif\n\t\t\t(*iter)->vTmpWnds.clear();\n\t\t}\n\n\t\t// Check that all CWnd windows are destroyed\n\t\tstd::map<HWND, CWnd*, CompareHWND>::iterator m;\n\t\tfor (m = m_mapHWND.begin(); m != m_mapHWND.end(); ++m)\n\t\t{\n\t\t\tHWND hWnd = (*m).first;\n\t\t\tif (::IsWindow(hWnd))\n\t\t\t\t::DestroyWindow(hWnd);\n\t\t}\n\t\tm_mapHWND.clear();\n\t\tm_mapGDI.clear();\n\t\tm_mapHDC.clear();\n\t\tm_mapHMENU.clear();\n\n\t\t// Do remaining tidy up\n\t\tif (m_dwTlsIndex != TLS_OUT_OF_INDEXES)\n\t\t{\n\t\t\t::TlsSetValue(GetTlsIndex(), NULL);\n\t\t\t::TlsFree(m_dwTlsIndex);\n\t\t}\n\n\t\tSetnGetThis((CWinApp*)-1);\n\t}\n\n\tinline void CWinApp::AddTmpDC(CDC* pDC)\n\t{\n\t\t// The TmpMenus are created by GetSybMenu.\n\t\t// They are removed by CleanupTemps\n\t\tassert(pDC);\n\n\t\t// Ensure this thread has the TLS index set\n\t\tTLSData* pTLSData = GetApp()->SetTlsIndex();\n\t\tpTLSData->vTmpDCs.push_back(pDC); // save pDC as a smart pointer\n\t}\n\n\tinline void CWinApp::AddTmpGDI(CGDIObject* pObject)\n\t{\n\t\t// The temporary CGDIObjects are removed by CleanupTemps\n\t\tassert(pObject);\n\t\n\t\t// Ensure this thread has the TLS index set\n\t\tTLSData* pTLSData = GetApp()->SetTlsIndex();\n\t\tpTLSData->vTmpGDIs.push_back(pObject); // save pObject as a smart pointer\n\t}\n\n#ifndef _WIN32_WCE\n\tinline CMenu* CWinApp::AddTmpMenu(HMENU hMenu)\n\t{\n\t\t// The TmpMenus are created by GetSybMenu.\n\t\t// They are removed by CleanupTemps\n\t\tassert(::IsMenu(hMenu));\n\t\tassert(!GetCMenuFromMap(hMenu));\n\n\t\tCMenu* pMenu = new CMenu;\n\t\tpMenu->m_hMenu = hMenu;\n\t\tm_csMapLock.Lock();\n\t\tm_mapHMENU.insert(std::make_pair(hMenu, pMenu));\n\t\tm_csMapLock.Release();\n\t\tpMenu->m_IsTmpMenu = TRUE;\n\n\t\t// Ensure this thread has the TLS index set\n\t\tTLSData* pTLSData = GetApp()->SetTlsIndex();\n\t\tpTLSData->vTmpMenus.push_back(pMenu); // save pMenu as a smart pointer\n\t\treturn pMenu;\n\t}\n#endif\n\n\tinline CWnd* CWinApp::AddTmpWnd(HWND hWnd)\n\t{\n\t\t// TmpWnds are created if required to support functions like CWnd::GetParent.\n\t\t// They are removed by CleanupTemps\n\t\tassert(::IsWindow(hWnd));\n\t\tassert(!GetCWndFromMap(hWnd));\n\n\t\tCWnd* pWnd = new CWnd;\n\t\tpWnd->m_hWnd = hWnd;\n\t\tpWnd->AddToMap();\n\t\tpWnd->m_IsTmpWnd = TRUE;\n\n\t\t// Ensure this thread has the TLS index set\n\t\tTLSData* pTLSData = GetApp()->SetTlsIndex();\n\t\tpTLSData->vTmpWnds.push_back(pWnd); // save pWnd as a smart pointer\n\t\treturn pWnd;\n\t}\n\n\tinline void CWinApp::CleanupTemps()\n\t// Removes all Temporary CWnds and CMenus belonging to this thread\n\t{\n\t\t// Retrieve the pointer to the TLS Data\n\t\tTLSData* pTLSData = (TLSData*)TlsGetValue(GetApp()->GetTlsIndex());\n\t\tassert(pTLSData);\n\n\t\tpTLSData->vTmpDCs.clear();\n\t\tpTLSData->vTmpGDIs.clear();\n\t\tpTLSData->vTmpWnds.clear();\n\n\n\t#ifndef _WIN32_WCE\n\t\tpTLSData->vTmpMenus.clear();\n\t#endif\n\t}\n\n\tinline CDC* CWinApp::GetCDCFromMap(HDC hDC)\n\t{\n\t\t// Allocate an iterator for our HWND map\n\t\tstd::map<HDC, CDC*, CompareHDC>::iterator m;\n\n\t\t// Find the CDC pointer mapped to this HDC\n\t\tCDC* pDC = 0;\n\t\tm_csMapLock.Lock();\n\t\tm = m_mapHDC.find(hDC);\n\n\t\tif (m != m_mapHDC.end())\n\t\t\tpDC = m->second;\n\n\t\tm_csMapLock.Release();\n\t\treturn pDC;\n\t}\n\n\tinline CGDIObject* CWinApp::GetCGDIObjectFromMap(HGDIOBJ hObject)\n\t{\n\t\t// Allocate an iterator for our HWND map\n\t\tstd::map<HGDIOBJ, CGDIObject*, CompareGDI>::iterator m;\n\n\t\t// Find the CGDIObject pointer mapped to this HGDIOBJ\n\t\tCGDIObject* pObject = 0;\n\t\tm_csMapLock.Lock();\n\t\tm = m_mapGDI.find(hObject);\n\n\t\tif (m != m_mapGDI.end())\n\t\t\tpObject = m->second;\n\n\t\tm_csMapLock.Release();\n\t\treturn pObject;\n\t}\n\n\tinline CMenu* CWinApp::GetCMenuFromMap(HMENU hMenu)\n\t{\n\t\tstd::map<HMENU, CMenu*, CompareHMENU>::iterator m;\n\n\t\t// Find the CMenu pointer mapped to this HMENU\n\t\tCMenu* pMenu = 0;\n\t\tm_csMapLock.Lock();\n\t\tm = m_mapHMENU.find(hMenu);\n\n\t\tif (m != m_mapHMENU.end())\n\t\t\tpMenu = m->second;\n\n\t\tm_csMapLock.Release();\n\t\treturn pMenu;\n\t}\n\n\tinline CWnd* CWinApp::GetCWndFromMap(HWND hWnd)\n\t{\n\t\t// Allocate an iterator for our HWND map\n\t\tstd::map<HWND, CWnd*, CompareHWND>::iterator m;\n\n\t\t// Find the CWnd pointer mapped to this HWND\n\t\tCWnd* pWnd = 0;\n\t\tm_csMapLock.Lock();\n\t\tm = m_mapHWND.find(hWnd);\n\n\t\tif (m != m_mapHWND.end())\n\t\t\tpWnd = m->second;\n\n\t\tm_csMapLock.Release();\n\t\treturn pWnd;\n\t}\n\n\tinline BOOL CWinApp::InitInstance()\n\t{\n\t\t// InitInstance contains the initialization code for your application\n\t\t// You should override this function with the code to run when the application starts.\n\n\t\t// return TRUE to indicate success. FALSE will end the application\n\t\treturn TRUE;\n\t}\n\n\tinline int CWinApp::MessageLoop()\n\t{\n\t\t// This gets any messages queued for the application, and dispatches them.\n\t\tMSG Msg = {0};\n\t\tint status = 1;\n\t\tLONG lCount = 0;\n\n\t\twhile (status != 0)\n\t\t{\t\t\n\t\t\t// While idle, perform idle processing until OnIdle returns FALSE\n\t\t\twhile (!::PeekMessage(&Msg, 0, 0, 0, PM_NOREMOVE) && OnIdle(lCount) == TRUE)\n\t\t\t{\n\t\t\t\t++lCount;\n\t\t\t}\n\t\t\t\n\t\t\tlCount = 0;\n\n\t\t\t// Now wait until we get a message\n\t\t\tif ((status = ::GetMessage(&Msg, NULL, 0, 0)) == -1)\n\t\t\t\treturn -1;\n\n\t\t\tif (!PreTranslateMessage(Msg))\n\t\t\t{\n\t\t\t\t::TranslateMessage(&Msg);\n\t\t\t\t::DispatchMessage(&Msg);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn LOWORD(Msg.wParam);\n\t}\n\n\tinline BOOL CWinApp::OnIdle(LONG lCount)\n\t{\n\t\tif (lCount == 0)\n\t\t\tCleanupTemps();\n\n\t\treturn FALSE;\n\t}\n\n\tinline BOOL CWinApp::PreTranslateMessage(MSG Msg)\n\t{\n\t\t// This functions is called by the MessageLoop. It processes the\n\t\t// keyboard accelerator keys and calls CWnd::PreTranslateMessage for\n\t\t// keyboard and mouse events.\n\n\t\tBOOL Processed = FALSE;\n\n\t\t// only pre-translate mouse and keyboard input events\n\t\tif ((Msg.message >= WM_KEYFIRST && Msg.message <= WM_KEYLAST) ||\n\t\t\t(Msg.message >= WM_MOUSEFIRST && Msg.message <= WM_MOUSELAST))\n\t\t{\n\t\t\t// Process keyboard accelerators\n\t\t\tif (m_pWndAccel && ::TranslateAccelerator(*m_pWndAccel, m_hAccel, &Msg))\n\t\t\t\tProcessed = TRUE;\n\t\t\telse\n\t\t\t{\n\t\t\t\t// Search the chain of parents for pretranslated messages.\n\t\t\t\tfor (HWND hWnd = Msg.hwnd; hWnd != NULL; hWnd = ::GetParent(hWnd))\n\t\t\t\t{\n\t\t\t\t\tCWnd* pWnd = GetCWndFromMap(hWnd);\n\t\t\t\t\tif (pWnd)\n\t\t\t\t\t{\n\t\t\t\t\t\tProcessed = pWnd->PreTranslateMessage(&Msg);\n\t\t\t\t\t\tif(Processed)\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn Processed;\n\t}\n\n\tinline int CWinApp::Run()\n\t{\n\t\t// InitInstance runs the App's initialization code\n\t\tif (InitInstance())\n\t\t{\n\t\t\t// Dispatch the window messages\n\t\t\treturn MessageLoop();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tTRACE(_T(\"InitInstance failed!  Terminating program\\n\"));\n\t\t\t::PostQuitMessage(-1);\n\t\t\treturn -1;\n\t\t}\n\t}\n\n\tinline void CWinApp::SetAccelerators(HACCEL hAccel, CWnd* pWndAccel)\n\t// nID is the resource ID of the accelerator table\n\t// pWndAccel is the window pointer for translated messages\n\t{\n\t\tassert (hAccel);\n\t\tassert (pWndAccel);\n\n\t\tm_pWndAccel = pWndAccel;\n\t\tm_hAccel = hAccel;\n\t}\n\n\tinline void CWinApp::SetCallback()\n\t{\n\t\t// Registers a temporary window class so we can get the callback\n\t\t// address of CWnd::StaticWindowProc.\n\t\t// This technique works for all Window versions, including WinCE.\n\n\t\tWNDCLASS wcDefault = {0};\n\n\t\tLPCTSTR szClassName\t\t= _T(\"Win32++ Temporary Window Class\");\n\t\twcDefault.hInstance\t\t= GetInstanceHandle();\n\t\twcDefault.lpfnWndProc\t= CWnd::StaticWindowProc;\n\t\twcDefault.lpszClassName = szClassName;\n\n\t\t::RegisterClass(&wcDefault);\n\n\t\t// Retrieve the class information\n\t\tZeroMemory(&wcDefault, sizeof(wcDefault));\n\t\t::GetClassInfo(GetInstanceHandle(), szClassName, &wcDefault);\n\n\t\t// Save the callback address of CWnd::StaticWindowProc\n\t\tassert(wcDefault.lpfnWndProc);\t// Assert fails when running UNICODE build on ANSI OS.\n\t\tm_Callback = wcDefault.lpfnWndProc;\n\t\t::UnregisterClass(szClassName, GetInstanceHandle());\n\t}\n\n\tinline CWinApp* CWinApp::SetnGetThis(CWinApp* pThis /*= 0*/)\n\t{\n\t\t// This function stores the 'this' pointer in a static variable.\n\t\t// Once stored, it can be used later to return the 'this' pointer.\n\t\t// CWinApp's Destructor calls this function with a value of -1.\n\n\t\tstatic CWinApp* pWinApp = 0;\n\n\t\tif ((CWinApp*)-1 == pThis)\n\t\t\tpWinApp = 0;\n\t\telse if (0 == pWinApp)\n\t\t\tpWinApp = pThis;\n\n\t\treturn pWinApp;\n\t}\n\n\tinline void CWinApp::SetResourceHandle(HINSTANCE hResource)\n\t{\n\t\t// This function can be used to load a resource dll.\n\t\t// A resource dll can be used to define resources in different languages.\n\t\t// To use this function, place code like this in InitInstance\n\t\t//\n\t\t// HINSTANCE hResource = LoadLibrary(_T(\"MyResourceDLL.dll\"));\n\t\t// SetResourceHandle(hResource);\n\n\t\tm_hResource = hResource;\n\t}\n\n\tinline TLSData* CWinApp::SetTlsIndex()\n\t{\n\t\tTLSData* pTLSData = (TLSData*)::TlsGetValue(GetTlsIndex());\n\t\tif (NULL == pTLSData)\n\t\t{\n\t\t\tpTLSData = new TLSData;\n\n\t\t\tm_csTLSLock.Lock();\n\t\t\tm_vTLSData.push_back(pTLSData);\t// store as a Shared_Ptr\n\t\t\tm_csTLSLock.Release();\n\n\t\t\t::TlsSetValue(GetTlsIndex(), pTLSData);\n\t\t}\n\n\t\treturn pTLSData;\n\t}\n\n\n\t////////////////////////////////////////\n\t// Definitions for the CWnd class\n\t//\n\tinline CWnd::CWnd() : m_hWnd(NULL), m_PrevWindowProc(NULL), m_IsTmpWnd(FALSE)\n\t{\n\t\t// Note: m_hWnd is set in CWnd::CreateEx(...)\n\t\tm_pcs = new CREATESTRUCT;\t// store the CREATESTRICT in a smart pointer\n\t\tm_pwc = new WNDCLASS;\t\t// store the WNDCLASS in a smart pointer\n\t\t::ZeroMemory(m_pcs.get(), sizeof(CREATESTRUCT));\n\t\t::ZeroMemory(m_pwc.get(), sizeof(WNDCLASS));\n\t}\n\n\tinline CWnd::~CWnd()\n\t{\n\t\t// Destroys the window for this object and cleans up resources.\n\t\tDestroy();\n\t}\n\n\tinline void CWnd::AddToMap()\n\t// Store the window handle and CWnd pointer in the HWND map\n\t{\n\t\tassert( GetApp() );\n\t\tGetApp()->m_csMapLock.Lock();\n\n\t\tassert(::IsWindow(m_hWnd));\n\t\tassert(!GetApp()->GetCWndFromMap(m_hWnd));\n\n\t\tGetApp()->m_mapHWND.insert(std::make_pair(m_hWnd, this));\n\t\tGetApp()->m_csMapLock.Release();\n\t}\n\n\tinline BOOL CWnd::Attach(HWND hWnd)\n\t// Subclass an existing window and attach it to a CWnd\n\t{\n\t\tassert( GetApp() );\n\t\tassert(::IsWindow(hWnd));\n\n\t\t// Ensure this thread has the TLS index set\n\t\t// Note: Perform the attach from the same thread as the window's message loop\n\t\tGetApp()->SetTlsIndex();\n\n\t\tif (m_PrevWindowProc)\n\t\t\tDetach();\n\n\t\tSubclass(hWnd);\n\n\t\t// Store the CWnd pointer in the HWND map\n\t\tAddToMap();\n\t\tOnCreate();\n\t\tOnInitialUpdate();\n\n\t\treturn TRUE;\n\t}\n\n\tinline BOOL CWnd::AttachDlgItem(UINT nID, CWnd* pParent)\n\t// Converts a dialog item to a CWnd object\n\t{\n\t\tassert(pParent->IsWindow());\n\n\t\tHWND hWnd = ::GetDlgItem(pParent->GetHwnd(), nID);\n\t\treturn Attach(hWnd);\n\t}\n\n\tinline void CWnd::CenterWindow() const\n\t// Centers this window over it's parent\n\t{\n\n\t// required for multi-monitor support with Dev-C++ and VC6\n\t#ifndef _WIN32_WCE\n\t#ifndef MONITOR_DEFAULTTONEAREST\n\t\t#define MONITOR_DEFAULTTONEAREST    0x00000002\n\t#endif\n\t#ifndef HMONITOR\n\t\tDECLARE_HANDLE(HMONITOR);\n\t#endif\n\t#ifndef MONITORINFO\n\t\ttypedef struct tagMONITORINFO\n\t\t{\n\t\t\tDWORD   cbSize;\n\t\t\tRECT    rcMonitor;\n\t\t\tRECT    rcWork;\n\t\t\tDWORD   dwFlags;\n\t\t} MONITORINFO, *LPMONITORINFO;\n\t#endif\t// MONITOR_DEFAULTTONEAREST\n\t#endif\t// _WIN32_WCE\n\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tCRect rc = GetWindowRect();\n\t\tCRect rcParent;\n\t\tCRect rcDesktop;\n\n\t\t// Get screen dimensions excluding task bar\n\t\t::SystemParametersInfo(SPI_GETWORKAREA, 0, &rcDesktop, 0);\n\n\t\t// Get the parent window dimensions (parent could be the desktop)\n\t\tif (GetParent() != NULL) rcParent = GetParent()->GetWindowRect();\n\t\telse rcParent = rcDesktop;\n\n\t#ifndef _WIN32_WCE\n\t\t// Import the GetMonitorInfo and MonitorFromWindow functions\n\t\tHMODULE hUser32 = LoadLibrary(_T(\"USER32.DLL\"));\n\t\ttypedef BOOL (WINAPI* LPGMI)(HMONITOR hMonitor, LPMONITORINFO lpmi);\n\t\ttypedef HMONITOR (WINAPI* LPMFW)(HWND hwnd, DWORD dwFlags);\n\t\tLPMFW pfnMonitorFromWindow = (LPMFW)::GetProcAddress(hUser32, \"MonitorFromWindow\");\n\t#ifdef _UNICODE\n\t\tLPGMI pfnGetMonitorInfo = (LPGMI)::GetProcAddress(hUser32, \"GetMonitorInfoW\");\n\t#else\n\t\tLPGMI pfnGetMonitorInfo = (LPGMI)::GetProcAddress(hUser32, \"GetMonitorInfoA\");\n\t#endif\n\n\t\t// Take multi-monitor systems into account\n\t\tif (pfnGetMonitorInfo && pfnMonitorFromWindow)\n\t\t{\n\t\t\tHMONITOR hActiveMonitor = pfnMonitorFromWindow(m_hWnd, MONITOR_DEFAULTTONEAREST);\n\t\t\tMONITORINFO mi = { sizeof(mi), 0};\n\n\t\t\tif(pfnGetMonitorInfo(hActiveMonitor, &mi))\n\t\t\t{\n\t\t\t\trcDesktop = mi.rcWork;\n\t\t\t\tif (GetParent() == NULL) rcParent = mi.rcWork;\n\t\t\t}\n\t\t}\n\t\tFreeLibrary(hUser32);\n  #endif\n\n\t\t// Calculate point to center the dialog over the portion of parent window on this monitor\n\t\trcParent.IntersectRect(rcParent, rcDesktop);\n\t\tint x = rcParent.left + (rcParent.Width() - rc.Width())/2;\n\t\tint y = rcParent.top + (rcParent.Height() - rc.Height())/2;\n\n\t\t// Keep the dialog wholly on the monitor display\n\t\tx = (x < rcDesktop.left)? rcDesktop.left : x;\n\t\tx = (x > rcDesktop.right - rc.Width())? rcDesktop.right - rc.Width() : x;\n\t\ty = (y < rcDesktop.top) ? rcDesktop.top: y;\n\t\ty = (y > rcDesktop.bottom - rc.Height())? rcDesktop.bottom - rc.Height() : y;\n\n\t\tSetWindowPos(HWND_TOP, x, y, 0, 0, SWP_NOSIZE);\n\t}\n\n\tinline void CWnd::Cleanup()\n\t// Returns the CWnd to its default state\n\t{\n\t\tif ( GetApp() ) RemoveFromMap();\n\t\tm_hWnd = NULL;\n\t\tm_PrevWindowProc = NULL;\n\t\tm_IsTmpWnd = FALSE;\n\t}\n\n\tinline HWND CWnd::Create(CWnd* pParent /* = NULL */)\n\t// Creates the window. This is the default method of window creation.\n\t{\n\n\t\t// Test if Win32++ has been started\n\t\tassert( GetApp() );\n\n\t\t// Set the WNDCLASS parameters\n\t\tPreRegisterClass(*m_pwc);\n\t\tif (m_pwc->lpszClassName)\n\t\t{\n\t\t\tRegisterClass(*m_pwc);\n\t\t\tm_pcs->lpszClass = m_pwc->lpszClassName;\n\t\t}\n\n\t\t// Set the CREATESTRUCT parameters\n\t\tPreCreate(*m_pcs);\n\n\t\t// Set the Window Class Name\n\t\tif (!m_pcs->lpszClass)\n\t\t\tm_pcs->lpszClass = _T(\"Win32++ Window\");\n\n\t\t// Set Parent\n\t\tHWND hWndParent = pParent? pParent->GetHwnd() : 0;\n\t\tif (!hWndParent && m_pcs->hwndParent)\n\t\t\thWndParent = m_pcs->hwndParent;\n\n\t\t// Set the window style\n\t\tDWORD dwStyle;\n\t\tDWORD dwOverlappedStyle = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX;\n\t\tif (m_pcs->style)\n\t\t\tdwStyle = m_pcs->style;\n\t\telse\n\t\t\tdwStyle = WS_VISIBLE | ((hWndParent)? WS_CHILD : dwOverlappedStyle);\n\n\t\t// Set window size and position\n\t\tint x  = (m_pcs->cx || m_pcs->cy)? m_pcs->x  : CW_USEDEFAULT;\n\t\tint cx = (m_pcs->cx || m_pcs->cy)? m_pcs->cx : CW_USEDEFAULT;\n\t\tint y  = (m_pcs->cx || m_pcs->cy)? m_pcs->y  : CW_USEDEFAULT;\n\t\tint cy = (m_pcs->cx || m_pcs->cy)? m_pcs->cy : CW_USEDEFAULT;\n\n\t\t// Create the window\n#ifndef _WIN32_WCE\n\t\tCreateEx(m_pcs->dwExStyle, m_pcs->lpszClass, m_pcs->lpszName, dwStyle, x, y,\n\t\t\t\tcx, cy, pParent, FromHandle(m_pcs->hMenu), m_pcs->lpCreateParams);\n#else\n\t\tCreateEx(m_pcs->dwExStyle, m_pcs->lpszClass, m_pcs->lpszName, dwStyle, x, y,\n\t\t\t\tcx, cy, pParent, 0, m_pcs->lpCreateParams);\n#endif\n\n\t\treturn m_hWnd;\n\t}\n\n\tinline HWND CWnd::CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rc, CWnd* pParent, CMenu* pMenu, LPVOID lpParam /*= NULL*/)\n\t// Creates the window by specifying all the window creation parameters\n\t{\n\t\tint x = rc.left;\n\t\tint y = rc.top;\n\t\tint cx = rc.right - rc.left;\n\t\tint cy = rc.bottom - rc.top;\n\t\treturn CreateEx(dwExStyle, lpszClassName, lpszWindowName, dwStyle, x, y, cx, cy, pParent, pMenu, lpParam);\n\t}\n\n\tinline HWND CWnd::CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, CWnd* pParent, CMenu* pMenu, LPVOID lpParam /*= NULL*/)\n\t// Creates the window by specifying all the window creation parameters\n\t{\n\n\t\tassert( GetApp() );\t\t// Test if Win32++ has been started\n\t\tassert(!::IsWindow(m_hWnd));\t// Only one window per CWnd instance allowed\n\n\t\ttry\n\t\t{\n\t\t\t// Prepare the CWnd if it has been reused\n\t\t\tDestroy();\n\n\t\t\t// Ensure a window class is registered\n\t\t\tstd::vector<TCHAR> vTChar( MAX_STRING_SIZE+1, _T('\\0') );\n\t\t\tTCHAR* ClassName = &vTChar[0];\n\t\t\tif (0 == lpszClassName || 0 == lstrlen(lpszClassName) )\n\t\t\t\tlstrcpyn (ClassName, _T(\"Win32++ Window\"), MAX_STRING_SIZE);\n\t\t\telse\n\t\t\t\t// Create our own local copy of szClassName.\n\t\t\t\tlstrcpyn(ClassName, lpszClassName, MAX_STRING_SIZE);\n\n\t\t\tWNDCLASS wc = {0};\n\t\t\twc.lpszClassName = ClassName;\n\t\t\twc.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH);\n\t\t\twc.hCursor\t\t = ::LoadCursor(NULL, IDC_ARROW);\n\n\t\t\t// Register the window class (if not already registered)\n\t\t\tif (!RegisterClass(wc))\n\t\t\t\tthrow CWinException(_T(\"Failed to register window class\"));\n\n\t\t\tHWND hWndParent = pParent? pParent->GetHwnd() : 0;\n\n\t\t\t// Ensure this thread has the TLS index set\n\t\t\tTLSData* pTLSData = GetApp()->SetTlsIndex();\n\n\t\t\t// Store the CWnd pointer in thread local storage\n\t\t\tpTLSData->pCWnd = this;\n\n\t\t\t// Create window\n#ifdef _WIN32_WCE\n\t\t\tm_hWnd = ::CreateWindowEx(dwExStyle, ClassName, lpszWindowName, dwStyle, x, y, nWidth, nHeight,\n\t\t\t\t\t\t\t\t\thWndParent, 0, GetApp()->GetInstanceHandle(), lpParam);\n#else\n\t\t\tHMENU hMenu = pMenu? pMenu->GetHandle() : NULL;\n\t\t\tm_hWnd = ::CreateWindowEx(dwExStyle, ClassName, lpszWindowName, dwStyle, x, y, nWidth, nHeight,\n\t\t\t\t\t\t\t\t\thWndParent, hMenu, GetApp()->GetInstanceHandle(), lpParam);\n#endif\n\n\t\t\t// Now handle window creation failure\n\t\t\tif (!m_hWnd)\n\t\t\t\tthrow CWinException(_T(\"Failed to Create Window\"));\n\n\t\t\t// Automatically subclass predefined window class types\n\t\t\t::GetClassInfo(GetApp()->GetInstanceHandle(), lpszClassName, &wc);\n\t\t\tif (wc.lpfnWndProc != GetApp()->m_Callback)\n\t\t\t{\n\t\t\t\tSubclass(m_hWnd);\n\n\t\t\t\t// Send a message to force the HWND to be added to the map\n\t\t\t\tSendMessage(WM_NULL, 0L, 0L);\n\n\t\t\t\tOnCreate(); // We missed the WM_CREATE message, so call OnCreate now\n\t\t\t}\n\n\t\t\t// Clear the CWnd pointer from TLS\n\t\t\tpTLSData->pCWnd = NULL;\n\t\t}\n\n\t\tcatch (const CWinException &e)\n\t\t{\n\t\t\tTRACE(_T(\"\\n*** Failed to create window ***\\n\"));\n\t\t\te.what();\t// Display the last error message.\n\n\t\t\t// eat the exception (don't rethrow)\n\t\t}\n\n\t\t// Window creation is complete. Now call OnInitialUpdate\n\t\tOnInitialUpdate();\n\n\t\treturn m_hWnd;\n\t}\n\n\tinline void CWnd::Destroy()\n\t// Destroys the window and returns the CWnd back to its default state, ready for reuse.\n\t{\n\t\tif (m_IsTmpWnd)\n\t\t\tm_hWnd = NULL;\n\n\t\tif (IsWindow())\n\t\t\t::DestroyWindow(m_hWnd);\n\n\t\t// Return the CWnd to its default state\n\t\tCleanup();\n\t}\n\n\tinline HWND CWnd::Detach()\n\t// Reverse an Attach\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tassert(0 != m_PrevWindowProc);\t// Only a subclassed window can be detached\n\n\t\tSetWindowLongPtr(GWLP_WNDPROC, (LONG_PTR)m_PrevWindowProc);\n\t\tHWND hWnd = m_hWnd;\n\t\tCleanup();\n\n\t\treturn hWnd;\n\t}\n\n\tinline LRESULT CWnd::FinalWindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t// Pass messages on to the appropriate default window procedure\n\t// CMDIChild and CMDIFrame override this function\n\t{\n\t\treturn ::DefWindowProc(m_hWnd, uMsg, wParam, lParam);\n\t}\n\n\tinline CWnd* CWnd::GetAncestor(UINT gaFlags /*= GA_ROOTOWNER*/) const\n\t// The GetAncestor function retrieves a pointer to the ancestor (root parent)\n\t// of the window. Supports Win95.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tHWND hWnd;\n\n#if (WINVER < 0x0500)\t// Win2000 and above\n\t\tUNREFERENCED_PARAMETER(gaFlags);\n\t\thWnd = m_hWnd;\n\t\tHWND hWndParent = ::GetParent(hWnd);\n\t\twhile (::IsChild(hWndParent, hWnd))\n\t\t{\n\t\t\thWnd = hWndParent;\n\t\t\thWndParent = ::GetParent(hWnd);\n\t\t}\n#else\n\t\thWnd = ::GetAncestor(m_hWnd, gaFlags);\n#endif\n\n\t\treturn FromHandle(hWnd);\n\n\t}\n\n\tinline CString CWnd::GetClassName() const\n\t// Retrieves the name of the class to which the specified window belongs.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tCString str;\n\t\tLPTSTR szStr = str.GetBuffer(MAX_STRING_SIZE+1);\n\t\t::GetClassName(m_hWnd, szStr, MAX_STRING_SIZE+1);\n\t\tstr.ReleaseBuffer();\n\t\treturn str;\n\t}\n\n\tinline CString CWnd::GetDlgItemText(int nIDDlgItem) const\n\t// Retrieves the title or text associated with a control in a dialog box.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tint nLength = ::GetWindowTextLength(::GetDlgItem(m_hWnd, nIDDlgItem));\n\t\tCString str;\n\t\tLPTSTR szStr = str.GetBuffer(nLength+1);\n\t\t::GetDlgItemText(m_hWnd, nIDDlgItem, szStr, nLength+1);\n\t\tstr.ReleaseBuffer();\n\t\treturn str;\n\t}\n\n\tinline CString CWnd::GetWindowText() const\n\t// Retrieves the text of the window's title bar.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tint nLength = ::GetWindowTextLength(m_hWnd);\n\t\tCString str;\n\t\tLPTSTR szStr = str.GetBuffer(nLength+1);\n\t\t::GetWindowText(m_hWnd, szStr, nLength+1);\n\t\tstr.ReleaseBuffer();\n\t\treturn str;\n\t}\n\n\tinline BOOL CWnd::OnCommand(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\t\tUNREFERENCED_PARAMETER(lParam);\n\n\t\t// Override this to handle WM_COMMAND messages, for example\n\n\t\t//\tswitch (LOWORD(wParam))\n\t\t//\t{\n\t\t//\tcase IDM_FILE_NEW:\n\t\t//\t\tOnFileNew();\n\t\t//\t\tTRUE;\t// return TRUE for handled commands\n\t\t//\t}\n\n\t\t// return FALSE for unhandled commands\n\t\treturn FALSE;\n\t}\n\n\tinline void CWnd::OnCreate()\n\t{\n\t\t// This function is called when a WM_CREATE message is recieved\n\t\t// Override it in your derived class to automatically perform tasks\n\t\t//  during window creation.\n\t}\n\n\tinline void CWnd::OnDraw(CDC* pDC)\n\t// Called when part of the client area of the window needs to be drawn\n\t{\n\t\tUNREFERENCED_PARAMETER(pDC);\n\n\t    // Override this function in your derived class to perform drawing tasks.\n\t}\n\n\tinline BOOL CWnd::OnEraseBkgnd(CDC* pDC)\n\t// Called when the background of the window's client area needs to be erased.\n\t{\n\t\tUNREFERENCED_PARAMETER(pDC);\n\n\t    // Override this function in your derived class to perform drawing tasks.\n\n\t\t// Return Value: Return FALSE to also permit default erasure of the background\n\t\t//\t\t\t\t Return TRUE to prevent default erasure of the background\n\n\t\treturn FALSE;\n\t}\n\n\n\tinline void CWnd::OnInitialUpdate()\n\t{\n\t\t// This function is called automatically once the window is created\n\t\t// Override it in your derived class to automatically perform tasks\n\t\t// after window creation.\n\t}\n\n\tinline LRESULT CWnd::MessageReflect(HWND hWndParent, UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\t// A function used to call OnMessageReflect. You shouldn't need to call or\n\t\t//  override this function.\n\n\t\tHWND hWnd = NULL;\n\t\tswitch (uMsg)\n\t\t{\n\t\tcase WM_COMMAND:\n\t\tcase WM_CTLCOLORBTN:\n\t\tcase WM_CTLCOLOREDIT:\n\t\tcase WM_CTLCOLORDLG:\n\t\tcase WM_CTLCOLORLISTBOX:\n\t\tcase WM_CTLCOLORSCROLLBAR:\n\t\tcase WM_CTLCOLORSTATIC:\n\t\tcase WM_CHARTOITEM:\n\t\tcase WM_VKEYTOITEM:\n\t\tcase WM_HSCROLL:\n\t\tcase WM_VSCROLL:\n\t\t\thWnd = (HWND)lParam;\n\t\t\tbreak;\n\n\t\tcase WM_DRAWITEM:\n\t\tcase WM_MEASUREITEM:\n\t\tcase WM_DELETEITEM:\n\t\tcase WM_COMPAREITEM:\n\t\t\thWnd = ::GetDlgItem(hWndParent, (int)wParam);\n\t\t\tbreak;\n\n\t\tcase WM_PARENTNOTIFY:\n\t\t\tswitch(LOWORD(wParam))\n\t\t\t{\n\t\t\tcase WM_CREATE:\n\t\t\tcase WM_DESTROY:\n\t\t\t\thWnd = (HWND)lParam;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tCWnd* Wnd = GetApp()->GetCWndFromMap(hWnd);\n\n\t\tif (Wnd != NULL)\n\t\t\treturn Wnd->OnMessageReflect(uMsg, wParam, lParam);\n\n\t\treturn 0L;\n\t}\n\n\tinline LRESULT CWnd::OnMessageReflect(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(uMsg);\n\t\tUNREFERENCED_PARAMETER(wParam);\n\t\tUNREFERENCED_PARAMETER(lParam);\n\t\t// This function processes those special messages (see above) sent\n\t\t// by some older controls, and reflects them back to the originating CWnd object.\n\t\t// Override this function in your derrived class to handle these special messages.\n\n\t\t// Your overriding function should look like this ...\n\n\t\t// switch (uMsg)\n\t\t// {\n\t\t//\t\tHandle your reflected messages here\n\t\t// }\n\n\t\t// return 0L for unhandled messages\n\t\treturn 0L;\n\t}\n\n\tinline LRESULT CWnd::OnNotify(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\t\tUNREFERENCED_PARAMETER(lParam);\n\n\t\t// You can use either OnNotifyReflect or OnNotify to handle notifications\n\t\t// Override OnNotifyReflect to handle notifications in the CWnd class that\n\t\t//   generated the notification.   OR\n\t\t// Override OnNotify to handle notifications in the PARENT of the CWnd class\n\t\t//   that generated the notification.\n\n\t\t// Your overriding function should look like this ...\n\n\t\t// switch (((LPNMHDR)lParam)->code)\n\t\t// {\n\t\t//\t\tHandle your notifications from the CHILD window here\n\t\t//      Return the value recommended by the Windows API documentation.\n\t\t//      For many notifications, the return value doesn't matter, but for some it does.\n\t\t// }\n\n\t\t// return 0L for unhandled notifications\n\t\treturn 0L;\n\t}\n\n\tinline LRESULT CWnd::OnNotifyReflect(WPARAM wParam, LPARAM lParam)\n\t{\n\t\tUNREFERENCED_PARAMETER(wParam);\n\t\tUNREFERENCED_PARAMETER(lParam);\n\n\t\t// Override OnNotifyReflect to handle notifications in the CWnd class that\n\t\t//   generated the notification.\n\n\t\t// Your overriding function should look like this ...\n\n\t\t// switch (((LPNMHDR)lParam)->code)\n\t\t// {\n\t\t//\t\tHandle your notifications from this window here\n\t\t//      Return the value recommended by the Windows API documentation.\n\t\t// }\n\n\t\t// return 0L for unhandled notifications\n\t\treturn 0L;\n\t}\n\n\tinline void CWnd::OnMenuUpdate(UINT nID)\n\t// Called when menu items are about to be displayed\n\t{\n\t\tUNREFERENCED_PARAMETER(nID);\n\n\t\t// Override this function to modify the behaviour of menu items,\n\t\t// such as adding or removing checkmarks\n\t}\n\n\tinline void CWnd::PreCreate(CREATESTRUCT& cs)\n\t// Called by CWnd::Create to set some window parameters\n\t{\n\t\t// Test if Win32++ has been started\n\t\tassert(GetApp());\t// Test if Win32++ has been started\n\n\t\tm_pcs->cx             = cs.cx;\n\t\tm_pcs->cy             = cs.cy;\n\t\tm_pcs->dwExStyle      = cs.dwExStyle;\n\t\tm_pcs->hInstance      = GetApp()->GetInstanceHandle();\n\t\tm_pcs->hMenu          = cs.hMenu;\n\t\tm_pcs->hwndParent     = cs.hwndParent;\n\t\tm_pcs->lpCreateParams = cs.lpCreateParams;\n\t\tm_pcs->lpszClass      = cs.lpszClass;\n\t\tm_pcs->lpszName       = cs.lpszName;\n\t\tm_pcs->style          = cs.style;\n\t\tm_pcs->x              = cs.x;\n\t\tm_pcs->y              = cs.y;\n\n\t\t// Overide this function in your derived class to set the\n\t\t// CREATESTRUCT values prior to window creation.\n\t\t// The cs.lpszClass parameter should NOT be specified if the\n\t\t// PreRegisterClass function is used to create a window class.\n\t}\n\n\tinline void CWnd::PreRegisterClass(WNDCLASS& wc)\n\t// Called by CWnd::Create to set some window parameters\n\t//  Useful for setting the background brush and cursor\n\t{\n\t\t// Test if Win32++ has been started\n\t\tassert( GetApp() );\n\n\t\tm_pwc->style\t\t\t= wc.style;\n\t\tm_pwc->lpfnWndProc\t\t= CWnd::StaticWindowProc;\n\t\tm_pwc->cbClsExtra\t\t= wc.cbClsExtra;\n\t\tm_pwc->cbWndExtra\t\t= wc.cbWndExtra;\n\t\tm_pwc->hInstance\t\t= GetApp()->GetInstanceHandle();\n\t\tm_pwc->hIcon\t\t\t= wc.hIcon;\n\t\tm_pwc->hCursor\t\t\t= wc.hCursor;\n\t\tm_pwc->hbrBackground\t= wc.hbrBackground;\n\t\tm_pwc->lpszMenuName\t\t= wc.lpszMenuName;\n\t\tm_pwc->lpszClassName\t= wc.lpszClassName;\n\n\t\t// Overide this function in your derived class to set the\n\t\t// WNDCLASS values prior to window creation.\n\n\t\t// ADDITIONAL NOTES:\n\t\t// 1) The lpszClassName must be set for this function to take effect.\n\t\t// 2) The lpfnWndProc is always CWnd::StaticWindowProc.\n\t\t// 3) No other defaults are set, so the following settings might prove useful\n\t\t//     wc.hCursor = ::LoadCursor(NULL, IDC_ARROW);\n\t\t//     wc.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH);\n\t\t//     wc.hIcon = ::LoadIcon(NULL, IDI_APPLICATION);\n\t\t// 4) The styles that can be set here are WNDCLASS styles. These are a different\n\t\t//     set of styles to those set by CREATESTRUCT (used in PreCreate).\n\t\t// 5) RegisterClassEx is not used because its not supported on WinCE.\n\t\t//     To set a small icon for the window, use SetIconSmall.\n\t}\n\n\tinline BOOL CWnd::PreTranslateMessage(MSG* pMsg)\n\t{\n\t\tUNREFERENCED_PARAMETER(pMsg);\n\n\t\t// Override this function if your class requires input messages to be\n\t\t// translated before normal processing. Function which translate messages\n\t\t// include TranslateAccelerator, TranslateMDISysAccel and IsDialogMessage.\n\t\t// Return TRUE if the message is translated.\n\n\t\treturn FALSE;\n\t}\n\n\tinline BOOL CWnd::RegisterClass(WNDCLASS& wc)\n\t// A private function used by the PreRegisterClass function to register a\n\t//  window class prior to window creation\n\t{\n\t\tassert( GetApp() );\n\t\tassert( (0 != lstrlen(wc.lpszClassName) && ( lstrlen(wc.lpszClassName) <=  MAX_STRING_SIZE) ) );\n\n\t\t// Check to see if this classname is already registered\n\t\tWNDCLASS wcTest = {0};\n\t\tBOOL Done = FALSE;\n\n\t\tif (::GetClassInfo(GetApp()->GetInstanceHandle(), wc.lpszClassName, &wcTest))\n\t\t{\n\t\t\twc = wcTest;\n\t\t\tDone = TRUE;\n\t\t}\n\n\t\tif (!Done)\n\t\t{\n\t\t\t// Set defaults\n\t\t\twc.hInstance\t= GetApp()->GetInstanceHandle();\n\t\t\twc.lpfnWndProc\t= CWnd::StaticWindowProc;\n\n\t\t\t// Register the WNDCLASS structure\n\t\t\tif ( !::RegisterClass(&wc) )\n\t\t\t\tthrow CWinException(_T(\"Failed to register window class\"));\n\n\t\t\tDone = TRUE;\n\t\t}\n\n\t\treturn Done;\n\t}\n\n\tinline BOOL CWnd::RemoveFromMap()\n\t{\n\t\tBOOL Success = FALSE;\n\n\t\tif (GetApp())\n\t\t{\n\n\t\t\t// Allocate an iterator for our HWND map\n\t\t\tstd::map<HWND, CWnd*, CompareHWND>::iterator m;\n\n\t\t\tCWinApp* pApp = GetApp();\n\t\t\tif (pApp)\n\t\t\t{\n\t\t\t\t// Erase the CWnd pointer entry from the map\n\t\t\t\tpApp->m_csMapLock.Lock();\n\t\t\t\tfor (m = pApp->m_mapHWND.begin(); m != pApp->m_mapHWND.end(); ++m)\n\t\t\t\t{\n\t\t\t\t\tif (this == m->second)\n\t\t\t\t\t{\n\t\t\t\t\t\tpApp->m_mapHWND.erase(m);\n\t\t\t\t\t\tSuccess = TRUE;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tpApp->m_csMapLock.Release();\n\t\t\t}\n\t\t}\n\n\t\treturn Success;\n\t}\n\n\tinline HICON CWnd::SetIconLarge(int nIcon)\n\t// Sets the large icon associated with the window\n\t{\n\t\tassert( GetApp() );\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tHICON hIconLarge = (HICON) (::LoadImage (GetApp()->GetResourceHandle(), MAKEINTRESOURCE (nIcon), IMAGE_ICON,\n\t\t::GetSystemMetrics (SM_CXICON), ::GetSystemMetrics (SM_CYICON), 0));\n\n\t\tif (hIconLarge)\n\t\t\tSendMessage (WM_SETICON, WPARAM (ICON_BIG), LPARAM (hIconLarge));\n\t\telse\n\t\t\tTRACE(_T(\"**WARNING** SetIconLarge Failed\\n\"));\n\n\t\treturn hIconLarge;\n\t}\n\n\tinline HICON CWnd::SetIconSmall(int nIcon)\n\t// Sets the small icon associated with the window\n\t{\n\t\tassert( GetApp() );\n\t\tassert(::IsWindow(m_hWnd));\n\n\t\tHICON hIconSmall = (HICON) (::LoadImage (GetApp()->GetResourceHandle(), MAKEINTRESOURCE (nIcon), IMAGE_ICON,\n\t\t::GetSystemMetrics (SM_CXSMICON), ::GetSystemMetrics (SM_CYSMICON), 0));\n\n\t\tif (hIconSmall)\n\t\t\tSendMessage (WM_SETICON, WPARAM (ICON_SMALL), LPARAM (hIconSmall));\n\t\telse\n\t\t\tTRACE(_T(\"**WARNING** SetIconSmall Failed\\n\"));\n\n\t\treturn hIconSmall;\n\t}\n\n\tinline LRESULT CALLBACK CWnd::StaticWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t// All CWnd windows direct their messages here. This function redirects the message\n\t// to the CWnd's WndProc function.\n\t{\n\t\tassert( GetApp() );\n\n\t\tCWnd* w = GetApp()->GetCWndFromMap(hWnd);\n\t\tif (0 == w)\n\t\t{\n\t\t\t// The CWnd pointer wasn't found in the map, so add it now\n\n\t\t\t// Retrieve the pointer to the TLS Data\n\t\t\tTLSData* pTLSData = (TLSData*)TlsGetValue(GetApp()->GetTlsIndex());\n\t\t\tassert(pTLSData);\n\n\t\t\t// Retrieve pointer to CWnd object from Thread Local Storage TLS\n\t\t\tw = pTLSData->pCWnd;\n\t\t\tassert(w);\t\t\t\t// pTLSData->pCWnd is assigned in CreateEx\n\t\t\tpTLSData->pCWnd = NULL;\n\n\t\t\t// Store the CWnd pointer in the HWND map\n\t\t\tw->m_hWnd = hWnd;\n\t\t\tw->AddToMap();\n\t\t}\n\n\t\treturn w->WndProc(uMsg, wParam, lParam);\n\n\t} // LRESULT CALLBACK StaticWindowProc(...)\n\n\tinline void CWnd::Subclass(HWND hWnd)\n\t// A private function used by CreateEx, Attach and AttachDlgItem\n\t{\n\t\tassert(::IsWindow(hWnd));\n\n\t\tm_PrevWindowProc = (WNDPROC)::SetWindowLongPtr(hWnd, GWLP_WNDPROC, (LONG_PTR)CWnd::StaticWindowProc);\n\t\tm_hWnd = hWnd;\n\t}\n\n\tinline LRESULT CWnd::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t{\n\t\t// Override this function in your class derrived from CWnd to handle\n\t\t//  window messages. A typical function might look like this:\n\n\t\t//\tswitch (uMsg)\n\t\t//\t{\n\t\t//\tcase MESSAGE1:\t\t// Some Windows API message\n\t\t//\t\tOnMessage1();\t// A user defined function\n\t\t//\t\tbreak;\t\t\t// Also do default processing\n\t\t//\tcase MESSAGE2:\n\t\t//\t\tOnMessage2();\n\t\t//\t\treturn x;\t\t// Don't do default processing, but instead return\n\t\t//\t\t\t\t\t\t//  a value recommended by the Windows API documentation\n\t\t//\t}\n\n\t\t// Always pass unhandled messages on to WndProcDefault\n\t\treturn WndProcDefault(uMsg, wParam, lParam);\n\t}\n\n\tinline LRESULT CWnd::WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam)\n\t// All WndProc functions should pass unhandled window messages to this function\n\t{\n\t\tLRESULT lr = 0L;\n\n    \tswitch (uMsg)\n\t\t{\n\t\tcase UWM_CLEANUPTEMPS:\n\t\t\t{\n\t\t\t\tTLSData* pTLSData = (TLSData*)TlsGetValue(GetApp()->GetTlsIndex());\n\t\t\t\tpTLSData->vTmpWnds.clear();\n\t\t\t}\n\t\t\tbreak;\n\t\tcase WM_COMMAND:\n\t\t\t{\n\t\t\t\t// Refelect this message if it's from a control\n\t\t\t\tCWnd* pWnd = GetApp()->GetCWndFromMap((HWND)lParam);\n\t\t\t\tif (pWnd != NULL)\n\t\t\t\t\tlr = pWnd->OnCommand(wParam, lParam);\n\n\t\t\t\t// Handle user commands\n\t\t\t\tif (!lr)\n\t\t\t\t\tlr =  OnCommand(wParam, lParam);\n\n\t\t\t\tif (lr) return 0L;\n\t\t\t}\n\t\t\tbreak;  // Note: Some MDI commands require default processing\n\t\tcase WM_CREATE:\n\t\t\tOnCreate();\n\t\t\tbreak;\n\t// An example of how to end the application when the window closes\n\t//  If needed, put this in the class you inherit from CWnd\n\t//\tcase WM_DESTROY:\n\t//\t\t::PostQuitMessage(0);\n\t//\t\treturn 0L;\n\t\tcase WM_NOTIFY:\n\t\t\t{\n\t\t\t\t// Do Notification reflection if it came from a CWnd object\n\t\t\t\tHWND hwndFrom = ((LPNMHDR)lParam)->hwndFrom;\n\t\t\t\tCWnd* pWndFrom = GetApp()->GetCWndFromMap(hwndFrom);\n\n\t\t\t\tif (lstrcmp(GetClassName(), _T(\"ReBarWindow32\")) != 0)\t// Skip notification reflection for rebars to avoid double handling\n\t\t\t\t{\n\t\t\t\t\tif (pWndFrom != NULL)\n\t\t\t\t\t\tlr = pWndFrom->OnNotifyReflect(wParam, lParam);\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// Some controls (eg ListView) have child windows.\n\t\t\t\t\t\t// Reflect those notifications too.\n\t\t\t\t\t\tCWnd* pWndFromParent = GetApp()->GetCWndFromMap(::GetParent(hwndFrom));\n\t\t\t\t\t\tif (pWndFromParent != NULL)\n\t\t\t\t\t\t\tlr = pWndFromParent->OnNotifyReflect(wParam, lParam);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Handle user notifications\n\t\t\t\tif (!lr) lr = OnNotify(wParam, lParam);\n\t\t\t\tif (lr) return lr;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase WM_PAINT:\n\t\t\t{\n\t\t\t\t// Subclassed controls expect to do their own painting.\n\t\t\t\t// CustomDraw or OwnerDraw are normally used to modify the drawing of controls.\n\t\t\t\tif (m_PrevWindowProc) break;\n\n\t\t\t\tif (::GetUpdateRect(m_hWnd, NULL, FALSE))\n\t\t\t\t{\n\t\t\t\t\tCPaintDC dc(this);\n\t\t\t\t\tOnDraw(&dc);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t// RedrawWindow can require repainting without an update rect\n\t\t\t\t{\n\t\t\t\t\tCClientDC dc(this);\n\t\t\t\t\tOnDraw(&dc);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn 0L;\n\n\t\tcase WM_ERASEBKGND:\n\t\t\t{\n\t\t\t\tCDC dc((HDC)wParam);\n\t\t\t\tBOOL bResult = OnEraseBkgnd(&dc);\n\t\t\t\tdc.Detach();\n\t\t\t\tif (bResult) return TRUE;\n\t\t\t}\n\t\t\tbreak;\n\n\t\t// A set of messages to be reflected back to the control that generated them\n\t\tcase WM_CTLCOLORBTN:\n\t\tcase WM_CTLCOLOREDIT:\n\t\tcase WM_CTLCOLORDLG:\n\t\tcase WM_CTLCOLORLISTBOX:\n\t\tcase WM_CTLCOLORSCROLLBAR:\n\t\tcase WM_CTLCOLORSTATIC:\n\t\tcase WM_DRAWITEM:\n\t\tcase WM_MEASUREITEM:\n\t\tcase WM_DELETEITEM:\n\t\tcase WM_COMPAREITEM:\n\t\tcase WM_CHARTOITEM:\n\t\tcase WM_VKEYTOITEM:\n\t\tcase WM_HSCROLL:\n\t\tcase WM_VSCROLL:\n\t\tcase WM_PARENTNOTIFY:\n\t\t\t{\n\t\t\t//\tif (m_PrevWindowProc) break; // Suppress for subclassed windows\n\n\t\t\t\tLRESULT lr = MessageReflect(m_hWnd, uMsg, wParam, lParam);\n\t\t\t\tif (lr) return lr;\t// Message processed so return\n\t\t\t}\n\t\t\tbreak;\t\t\t\t// Do default processing when message not already processed\n\n\t\tcase UWM_UPDATE_COMMAND:\n\t\t\tOnMenuUpdate((UINT)wParam); // Perform menu updates\n\t\tbreak;\n\n\t\t} // switch (uMsg)\n\n\t\t// Now hand all messages to the default procedure\n\t\tif (m_PrevWindowProc)\n\t\t\treturn ::CallWindowProc(m_PrevWindowProc, m_hWnd, uMsg, wParam, lParam);\n\t\telse\n\t\t\treturn FinalWindowProc(uMsg, wParam, lParam);\n\n\t} // LRESULT CWnd::WindowProc(...)\n\n\n\t//\n\t// Wrappers for Win32 API functions\n\t//\n\n\tinline CDC* CWnd::BeginPaint(PAINTSTRUCT& ps) const\n\t// The BeginPaint function prepares the specified window for painting and fills a PAINTSTRUCT structure with\n\t// information about the painting.\n\t{\n        assert(::IsWindow(m_hWnd));\n\t\treturn FromHandle(::BeginPaint(m_hWnd, &ps));\n\t}\n\n\tinline BOOL CWnd::BringWindowToTop() const\n\t// The BringWindowToTop function brings the specified window to the top\n\t// of the Z order. If the window is a top-level window, it is activated.\n\t{\n        assert(::IsWindow(m_hWnd));\n\t\treturn ::BringWindowToTop(m_hWnd);\n\t}\n\n\tinline LRESULT CWnd::CallWindowProc(WNDPROC lpPrevWndFunc, UINT Msg, WPARAM wParam, LPARAM lParam) const\n\t{\n        assert(::IsWindow(m_hWnd));\n\t\treturn ::CallWindowProc(lpPrevWndFunc, m_hWnd, Msg, wParam, lParam);\n\t}\n\n\tinline BOOL CWnd::CheckDlgButton(int nIDButton, UINT uCheck) const\n\t// The CheckDlgButton function changes the check state of a button control.\n\t{\n        assert(::IsWindow(m_hWnd));\n\t\treturn ::CheckDlgButton(m_hWnd, nIDButton, uCheck);\n\t}\n\n\tinline BOOL CWnd::CheckRadioButton(int nIDFirstButton, int nIDLastButton, int nIDCheckButton) const\n\t// The CheckRadioButton function adds a check mark to (checks) a specified radio button in a group\n\t// and removes a check mark from (clears) all other radio buttons in the group.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::CheckRadioButton(m_hWnd, nIDFirstButton, nIDLastButton, nIDCheckButton);\n\t}\n\n\tinline CWnd* CWnd::ChildWindowFromPoint(POINT pt) const\n\t// determines which, if any, of the child windows belonging to a parent window contains\n\t// the specified point. The search is restricted to immediate child windows. \n\t// Grandchildren, and deeper descendant windows are not searched.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn FromHandle(::ChildWindowFromPoint(m_hWnd, pt));\n\t}\n\n\tinline BOOL CWnd::ClientToScreen(POINT& pt) const\n\t// The ClientToScreen function converts the client-area coordinates of a specified point to screen coordinates.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::ClientToScreen(m_hWnd, &pt);\n\t}\n\n\tinline BOOL CWnd::ClientToScreen(RECT& rc) const\n\t// The ClientToScreen function converts the client-area coordinates of a specified RECT to screen coordinates.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)::MapWindowPoints(m_hWnd, NULL, (LPPOINT)&rc, 2);\n\t}\n\n\tinline HDWP CWnd::DeferWindowPos(HDWP hWinPosInfo, HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT uFlags) const\n\t// The DeferWindowPos function updates the specified multiple-window  position structure for the window.\n\t{\n        assert(::IsWindow(m_hWnd));\n\t\treturn ::DeferWindowPos(hWinPosInfo, m_hWnd, hWndInsertAfter, x, y, cx, cy, uFlags);\n\t}\n\n\tinline HDWP CWnd::DeferWindowPos(HDWP hWinPosInfo, HWND hWndInsertAfter, const RECT& rc, UINT uFlags) const\n\t// The DeferWindowPos function updates the specified multiple-window  position structure for the window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::DeferWindowPos(hWinPosInfo, m_hWnd, hWndInsertAfter, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, uFlags);\n\t}\n\n\tinline LRESULT CWnd::DefWindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam) const\n\t// This function provides default processing for any window messages that an application does not process.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::DefWindowProc(m_hWnd, uMsg, wParam, lParam);\n\t}\n\n\tinline BOOL CWnd::DrawMenuBar() const\n\t// The DrawMenuBar function redraws the menu bar of the specified window. If the menu bar changes after\n\t// the system has created the window, this function must be called to draw the changed menu bar.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::DrawMenuBar(m_hWnd);\n\t}\n\n\tinline BOOL CWnd::EnableWindow(BOOL bEnable /*= TRUE*/) const\n\t// The EnableWindow function enables or disables mouse and\n\t// keyboard input to the window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::EnableWindow(m_hWnd, bEnable);\n\t}\n\n\tinline BOOL CWnd::EndPaint(PAINTSTRUCT& ps) const\n\t// The EndPaint function marks the end of painting in the specified window. This function is required for\n\t// each call to the BeginPaint function, but only after painting is complete.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::EndPaint(m_hWnd, &ps);\n\t}\n\n\tinline CWnd* CWnd::GetActiveWindow() const\n\t// The GetActiveWindow function retrieves a pointer to the active window attached to the calling\n\t// thread's message queue.\n\t{\n\t\treturn FromHandle( ::GetActiveWindow() );\n\t}\n\n\tinline CWnd* CWnd::GetCapture() const\n\t// The GetCapture function retrieves a pointer to the window (if any) that has captured the mouse.\n\t{\n\t\treturn FromHandle( ::GetCapture() );\n\t}\n\n\tinline ULONG_PTR CWnd::GetClassLongPtr(int nIndex) const\n\t// The GetClassLongPtr function retrieves the specified value from the\n\t// WNDCLASSEX structure associated with the window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::GetClassLongPtr(m_hWnd, nIndex);\n\t}\n\n\tinline CRect CWnd::GetClientRect() const\n\t// The GetClientRect function retrieves the coordinates of a window's client area.\n\t// The client coordinates specify the upper-left and lower-right corners of the\n\t// client area. Because client coordinates are relative to the upper-left corner\n\t// of a window's client area, the coordinates of the upper-left corner are (0,0).\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tCRect rc;\n\t\t::GetClientRect(m_hWnd, &rc);\n\t\treturn rc;\n\t}\n\n\tinline CDC* CWnd::GetDC() const\n\t// The GetDC function retrieves a handle to a display device context (DC) for the\n\t// client area of the window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn CDC::AddTempHDC(::GetDC(m_hWnd), m_hWnd);\n\t}\n\n\tinline CDC* CWnd::GetDCEx(HRGN hrgnClip, DWORD flags) const\n\t// The GetDCEx function retrieves a handle to a display device context (DC) for the\n\t// client area or entire area of a window\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn CDC::AddTempHDC(::GetDCEx(m_hWnd, hrgnClip, flags), m_hWnd);\n\t}\n\n\tinline CWnd* CWnd::GetDesktopWindow() const\n\t// The GetDesktopWindow function retrieves a pointer to the desktop window.\n\t{\n\t\treturn FromHandle( ::GetDesktopWindow() );\n\t}\n\n\tinline CWnd* CWnd::GetDlgItem(int nIDDlgItem) const\n\t// The GetDlgItem function retrieves a handle to a control in the dialog box.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn FromHandle( ::GetDlgItem(m_hWnd, nIDDlgItem) );\n\t}\n\n\tinline UINT CWnd::GetDlgItemInt(int nIDDlgItem, BOOL* lpTranslated, BOOL bSigned) const\n\t// The GetDlgItemInt function translates the text of a specified control in a dialog box into an integer value.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::GetDlgItemInt(m_hWnd, nIDDlgItem, lpTranslated, bSigned);\n\t}\n\n\tinline CWnd* CWnd::GetFocus() const\n\t// The GetFocus function retrieves a pointer to the window that has the keyboard focus, if the window\n\t// is attached to the calling thread's message queue.\n\t{\n\t\treturn FromHandle( ::GetFocus() );\n\t}\n\n\tinline CFont* CWnd::GetFont() const\n\t// Retrieves the font with which the window is currently drawing its text.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn FromHandle((HFONT)SendMessage(WM_GETFONT, 0, 0));\n\t}\n\n\tinline HICON CWnd::GetIcon(BOOL bBigIcon) const\n\t// Retrieves a handle to the large or small icon associated with a window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HICON)SendMessage(WM_GETICON, (WPARAM)bBigIcon, 0);\n\t}\n\n\tinline CWnd* CWnd::GetNextDlgGroupItem(CWnd* pCtl, BOOL bPrevious) const\n\t// The GetNextDlgGroupItem function retrieves a pointer to the first control in a group of controls that\n\t// precedes (or follows) the specified control in a dialog box.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tassert(pCtl);\n\t\treturn FromHandle(::GetNextDlgGroupItem(m_hWnd, pCtl->GetHwnd(), bPrevious));\n\t}\n\n\tinline CWnd* CWnd::GetNextDlgTabItem(CWnd* pCtl, BOOL bPrevious) const\n\t// The GetNextDlgTabItem function retrieves a pointer to the first control that has the WS_TABSTOP style\n\t// that precedes (or follows) the specified control.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tassert(pCtl);\n\t\treturn FromHandle(::GetNextDlgTabItem(m_hWnd, pCtl->GetHwnd(), bPrevious));\n\t}\n\n\tinline CWnd* CWnd::GetParent() const\n\t// The GetParent function retrieves a pointer to the specified window's parent or owner.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn FromHandle( ::GetParent(m_hWnd) );\n\t}\n\n\tinline LONG_PTR CWnd::GetWindowLongPtr(int nIndex) const\n\t// The GetWindowLongPtr function retrieves information about the window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::GetWindowLongPtr(m_hWnd, nIndex);\n\t}\n\n\tinline BOOL CWnd::GetScrollInfo(int fnBar, SCROLLINFO& si) const\n\t// The GetScrollInfo function retrieves the parameters of a scroll bar, including\n\t// the minimum and maximum scrolling positions, the page size, and the position\n\t// of the scroll box (thumb).\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::GetScrollInfo(m_hWnd, fnBar, &si);\n\t}\n\n\tinline CRect CWnd::GetUpdateRect(BOOL bErase) const\n\t// The GetUpdateRect function retrieves the coordinates of the smallest rectangle that completely\n\t// encloses the update region of the specified window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tCRect rc;\n\t\t::GetUpdateRect(m_hWnd, &rc, bErase);\n\t\treturn rc;\n\t}\n\n\tinline int CWnd::GetUpdateRgn(CRgn* pRgn, BOOL bErase) const\n\t// The GetUpdateRgn function retrieves the update region of a window by copying it into the specified region.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tassert(pRgn);\n\t\tHRGN hRgn = (HRGN)pRgn->GetHandle();\n\t\treturn ::GetUpdateRgn(m_hWnd, hRgn, bErase);\n\t}\n\n\tinline CWnd* CWnd::GetWindow(UINT uCmd) const\n\t// The GetWindow function retrieves a pointer to a window that has the specified\n\t// relationship (Z-Order or owner) to the specified window.\n\t// Possible uCmd values: GW_CHILD, GW_ENABLEDPOPUP, GW_HWNDFIRST, GW_HWNDLAST,\n\t// GW_HWNDNEXT, GW_HWNDPREV, GW_OWNER\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn FromHandle( ::GetWindow(m_hWnd, uCmd) );\n\t}\n\n\tinline CDC* CWnd::GetWindowDC() const\n\t// The GetWindowDC function retrieves the device context (DC) for the entire\n\t// window, including title bar, menus, and scroll bars.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn CDC::AddTempHDC(::GetWindowDC(m_hWnd), m_hWnd);\n\t}\n\n\tinline CRect CWnd::GetWindowRect() const\n\t// retrieves the dimensions of the bounding rectangle of the window.\n\t// The dimensions are given in screen coordinates that are relative to the\n\t// upper-left corner of the screen.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tCRect rc;\n\t\t::GetWindowRect(m_hWnd, &rc);\n\t\treturn rc;\n\t}\n\n\tinline int CWnd::GetWindowTextLength() const\n\t// The GetWindowTextLength function retrieves the length, in characters, of the specified window's\n\t// title bar text (if the window has a title bar).\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::GetWindowTextLength(m_hWnd);\n\t}\n\n\tinline void CWnd::Invalidate(BOOL bErase /*= TRUE*/) const\n\t// The Invalidate function adds the entire client area the window's update region.\n\t// The update region represents the portion of the window's client area that must be redrawn.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\t::InvalidateRect(m_hWnd, NULL, bErase);\n\t}\n\n\tinline BOOL CWnd::InvalidateRect(LPCRECT lpRect, BOOL bErase /*= TRUE*/) const\n\t// The InvalidateRect function adds a rectangle to the window's update region.\n\t// The update region represents the portion of the window's client area that must be redrawn.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::InvalidateRect(m_hWnd, lpRect, bErase);\n\t}\n\n\tinline BOOL CWnd::InvalidateRgn(CRgn* pRgn, BOOL bErase /*= TRUE*/) const\n\t// The InvalidateRgn function invalidates the client area within the specified region\n\t// by adding it to the current update region of a window. The invalidated region,\n\t// along with all other areas in the update region, is marked for painting when the\n\t// next WM_PAINT message occurs.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tHRGN hRgn = pRgn? (HRGN)pRgn->GetHandle() : NULL;\n\t\treturn ::InvalidateRgn(m_hWnd, hRgn, bErase);\n\t}\n\n\tinline BOOL CWnd::IsChild(CWnd* pChild) const\n\t// The IsChild function tests whether a window is a child window or descendant window\n\t// of a parent window's CWnd.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::IsChild(m_hWnd, pChild->GetHwnd());\n\t}\n\n\tinline BOOL CWnd::IsDialogMessage(LPMSG lpMsg) const\n\t// The IsDialogMessage function determines whether a message is intended for the specified dialog box and,\n\t// if it is, processes the message.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::IsDialogMessage(m_hWnd, lpMsg);\n\t}\n\n\tinline UINT CWnd::IsDlgButtonChecked(int nIDButton) const\n\t// The IsDlgButtonChecked function determines whether a button control has a check mark next to it\n\t// or whether a three-state button control is grayed, checked, or neither.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::IsDlgButtonChecked(m_hWnd, nIDButton);\n\t}\n\n\tinline BOOL CWnd::IsWindowEnabled() const\n\t// The IsWindowEnabled function determines whether the window is enabled\n\t// for mouse and keyboard input.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::IsWindowEnabled(m_hWnd);\n\t}\n\n\tinline BOOL CWnd::IsWindowVisible() const\n\t// The IsWindowVisible function retrieves the visibility state of the window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::IsWindowVisible(m_hWnd);\n\t}\n\n\tinline BOOL CWnd::IsWindow() const\n\t// The IsWindow function determines whether the window exists.\n\t{\n\t\treturn ::IsWindow(m_hWnd);\n\t}\n\n\tinline void  CWnd::MapWindowPoints(CWnd* pWndTo, POINT& pt) const\n\t// The MapWindowPoints function converts (maps) a set of points from a coordinate space relative to one\n\t// window to a coordinate space relative to another window.\n\t{\n\t\tassert (m_hWnd);\n\t\tif(pWndTo)\n\t\t{\n\t\t\tassert (pWndTo->GetHwnd());\n\t\t\t::MapWindowPoints(m_hWnd, pWndTo->GetHwnd(), &pt, 1);\n\t\t}\n\t\telse\n\t\t\t::MapWindowPoints(m_hWnd, NULL, &pt, 1);\n\t}\n\n\tinline void CWnd::MapWindowPoints(CWnd* pWndTo, RECT& rc) const\n\t// The MapWindowPoints function converts (maps) a set of points from a coordinate space relative to one\n\t// window to a coordinate space relative to another window.\n\t{\n\t\tassert (m_hWnd);\n\t\tif(pWndTo)\n\t\t{\n\t\t\tassert (pWndTo->GetHwnd());\n\t\t\t::MapWindowPoints(m_hWnd, pWndTo->GetHwnd(), (LPPOINT)&rc, 2);\n\t\t}\n\t\telse\n\t\t\t::MapWindowPoints(m_hWnd, NULL, (LPPOINT)&rc, 2);\n\t}\n\n\tinline void CWnd::MapWindowPoints(CWnd* pWndTo, LPPOINT ptArray, UINT nCount) const\n\t// The MapWindowPoints function converts (maps) a set of points from a coordinate space relative to one\n\t// window to a coordinate space relative to another window.\n\t{\n\t\tassert (m_hWnd);\n\t\tif (pWndTo)\n\t\t{\n\t\t\tassert (pWndTo->GetHwnd());\n\t\t\t::MapWindowPoints(m_hWnd, pWndTo->GetHwnd(), (LPPOINT)ptArray, nCount);\n\t\t}\n\t\telse\n\t\t\t::MapWindowPoints(m_hWnd, NULL, (LPPOINT)ptArray, nCount);\n\t}\n\n\tinline int CWnd::MessageBox(LPCTSTR lpText, LPCTSTR lpCaption, UINT uType) const\n\t// The MessageBox function creates, displays, and operates a message box.\n\t// Possible combinations of uType values include: MB_OK, MB_HELP, MB_OKCANCEL, MB_RETRYCANCEL,\n\t// MB_YESNO, MB_YESNOCANCEL, MB_ICONEXCLAMATION, MB_ICONWARNING, MB_ICONERROR (+ many others).\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::MessageBox(m_hWnd, lpText, lpCaption, uType);\n\t}\n\n\tinline BOOL CWnd::MoveWindow(int x, int y, int nWidth, int nHeight, BOOL bRepaint /* = TRUE*/) const\n\t// The MoveWindow function changes the position and dimensions of the window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::MoveWindow(m_hWnd, x, y, nWidth, nHeight, bRepaint = TRUE);\n\t}\n\n\tinline BOOL CWnd::MoveWindow(const RECT& rc, BOOL bRepaint /* = TRUE*/) const\n\t// The MoveWindow function changes the position and dimensions of the window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::MoveWindow(m_hWnd, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, bRepaint);\n\t}\n\n\tinline BOOL CWnd::PostMessage(UINT uMsg, WPARAM wParam /*= 0L*/, LPARAM lParam /*= 0L*/) const\n\t// The PostMessage function places (posts) a message in the message queue\n\t// associated with the thread that created the window and returns without\n\t// waiting for the thread to process the message.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::PostMessage(m_hWnd, uMsg, wParam, lParam);\n\t}\n\n\tinline BOOL CWnd::PostMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) const\n\t// Required by by some macros\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::PostMessage(hWnd, uMsg, wParam, lParam);\n\t}\n\n\tinline BOOL CWnd::RedrawWindow(LPCRECT lpRectUpdate, CRgn* pRgn, UINT flags) const\n\t// The RedrawWindow function updates the specified rectangle or region in a window's client area.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tHRGN hRgn = pRgn? (HRGN)pRgn->GetHandle() : NULL;\n\t\treturn ::RedrawWindow(m_hWnd, lpRectUpdate, hRgn, flags);\n\t}\n\n\tinline int CWnd::ReleaseDC(CDC* pDC) const\n\t// The ReleaseDC function releases a device context (DC), freeing it for use\n\t// by other applications.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tassert(pDC);\n\t\treturn ::ReleaseDC(m_hWnd, pDC->GetHDC());\n\t}\n\n\tinline BOOL CWnd::ScreenToClient(POINT& Point) const\n\t// The ScreenToClient function converts the screen coordinates of a specified point on the screen to client-area coordinates.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::ScreenToClient(m_hWnd, &Point);\n\t}\n\n\tinline BOOL CWnd::ScreenToClient(RECT& rc) const\n\t// The ScreenToClient function converts the screen coordinates of a specified RECT on the screen to client-area coordinates.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)::MapWindowPoints(NULL, m_hWnd, (LPPOINT)&rc, 2);\n\t}\n\n\tinline LRESULT CWnd::SendDlgItemMessage(int nIDDlgItem, UINT Msg, WPARAM wParam, LPARAM lParam) const\n\t// The SendDlgItemMessage function sends a message to the specified control in a dialog box.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::SendDlgItemMessage(m_hWnd, nIDDlgItem, Msg, wParam, lParam);\n\t}\n\n\tinline LRESULT CWnd::SendMessage(UINT uMsg, WPARAM wParam /*= 0L*/, LPARAM lParam /*= 0L*/) const\n\t// The SendMessage function sends the specified message to a window or windows.\n\t// It calls the window procedure for the window and does not return until the\n\t// window procedure has processed the message.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::SendMessage(m_hWnd, uMsg, wParam, lParam);\n\t}\n\n\tinline LRESULT CWnd::SendMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) const\n\t// Required by by some macros\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::SendMessage(hWnd, uMsg, wParam, lParam);\n\t}\n\n\tinline BOOL CWnd::SendNotifyMessage(UINT Msg, WPARAM wParam, LPARAM lParam) const\n\t// The SendNotifyMessage function sends the specified message to a window or windows. If the window was created by the\n\t// calling thread, SendNotifyMessage calls the window procedure for the window and does not return until the window procedure\n\t// has processed the message. If the window was created by a different thread, SendNotifyMessage passes the message to the\n\t// window procedure and returns immediately; it does not wait for the window procedure to finish processing the message.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::SendNotifyMessage(m_hWnd, Msg, wParam, lParam);\n\t}\n\n\tinline CWnd* CWnd::SetActiveWindow() const\n\t// The SetActiveWindow function activates the window, but\n\t// not if the application is in the background.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn FromHandle( ::SetActiveWindow(m_hWnd) );\n\t}\n\n\tinline CWnd* CWnd::SetCapture() const\n\t// The SetCapture function sets the mouse capture to the window.\n\t// SetCapture captures mouse input either when the mouse is over the capturing\n\t// window, or when the mouse button was pressed while the mouse was over the\n\t// capturing window and the button is still down.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn FromHandle( ::SetCapture(m_hWnd) );\n\t}\n\n\tinline ULONG_PTR CWnd::SetClassLongPtr(int nIndex, LONG_PTR dwNewLong) const\n\t// The SetClassLongPtr function replaces the specified value at the specified offset in the\n\t// extra class memory or the WNDCLASSEX structure for the class to which the window belongs.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::SetClassLongPtr(m_hWnd, nIndex, dwNewLong);\n\t}\n\n\tinline CWnd* CWnd::SetFocus() const\n\t// The SetFocus function sets the keyboard focus to the window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn FromHandle( ::SetFocus(m_hWnd) );\n\t}\n\n\tinline void CWnd::SetFont(CFont* pFont, BOOL bRedraw /* = TRUE*/) const\n\t// Specifies the font that the window will use when drawing text.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tassert(pFont);\n\t\tSendMessage(WM_SETFONT, (WPARAM)pFont->GetHandle(), (LPARAM)bRedraw);\n\t}\n\n\tinline HICON CWnd::SetIcon(HICON hIcon, BOOL bBigIcon) const\n\t// Associates a new large or small icon with a window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (HICON)SendMessage(WM_SETICON, (WPARAM)bBigIcon, (LPARAM)hIcon);\n\t}\n\n\tinline BOOL CWnd::SetForegroundWindow() const\n\t// The SetForegroundWindow function puts the thread that created the window into the\n\t// foreground and activates the window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::SetForegroundWindow(m_hWnd);\n\t}\n\n\tinline CWnd* CWnd::SetParent(CWnd* pWndParent) const\n\t// The SetParent function changes the parent window of the child window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tif (pWndParent)\n\t\t{\n\t\t\tHWND hParent = pWndParent->GetHwnd();\n\t\t\treturn FromHandle(::SetParent(m_hWnd, hParent));\n\t\t}\n\t\telse\n\t\t\treturn FromHandle(::SetParent(m_hWnd, 0));\n\t}\n\n\tinline BOOL CWnd::SetRedraw(BOOL bRedraw /*= TRUE*/) const\n\t// This function allows changes in that window to be redrawn or prevents changes\n\t// in that window from being redrawn.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn (BOOL)::SendMessage(m_hWnd, WM_SETREDRAW, (WPARAM)bRedraw, 0L);\n\t}\n\n\tinline LONG_PTR CWnd::SetWindowLongPtr(int nIndex, LONG_PTR dwNewLong) const\n\t// The SetWindowLongPtr function changes an attribute of the window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::SetWindowLongPtr(m_hWnd, nIndex, dwNewLong);\n\t}\n\n\tinline BOOL CWnd::SetWindowPos(HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT uFlags) const\n\t// The SetWindowPos function changes the size, position, and Z order of a child, pop-up,\n\t// or top-level window. The hWndInsertAfter can be a HWND or one of:\n\t// HWND_BOTTOM, HWND_NOTOPMOST, HWND_TOP, HWND_TOPMOST\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::SetWindowPos(m_hWnd, hWndInsertAfter, x, y, cx, cy, uFlags);\n\t}\n\n\tinline BOOL CWnd::SetWindowPos(HWND hWndInsertAfter, const RECT& rc, UINT uFlags) const\n\t// The SetWindowPos function changes the size, position, and Z order of a child, pop-up,\n\t// or top-level window. The hWndInsertAfter can be a HWND or one of:\n\t// HWND_BOTTOM, HWND_NOTOPMOST, HWND_TOP, HWND_TOPMOST\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::SetWindowPos(m_hWnd, hWndInsertAfter, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, uFlags);\n\t}\n\n\tinline int CWnd::SetWindowRgn(CRgn* pRgn, BOOL bRedraw /*= TRUE*/) const\n\t// The SetWindowRgn function sets the window region of the window.\n\t// The window region determines the area within the window where the system permits drawing.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tHRGN hRgn = pRgn? (HRGN)pRgn->GetHandle() : NULL;\n\t\tint iResult = ::SetWindowRgn(m_hWnd, hRgn, bRedraw);\n\t\tif (iResult && pRgn)\n\t\t\tpRgn->Detach();\t// The system owns the region now\n\t\treturn iResult;\n\t}\n\n\tinline BOOL CWnd::SetDlgItemInt(int nIDDlgItem, UINT uValue, BOOL bSigned) const\n\t// The SetDlgItemInt function sets the text of a control in a dialog box to the string representation of a specified integer value.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::SetDlgItemInt(m_hWnd, nIDDlgItem, uValue, bSigned);\n\t}\n\n\tinline BOOL CWnd::SetDlgItemText(int nIDDlgItem, LPCTSTR lpString) const\n\t// The SetDlgItemText function sets the title or text of a control in a dialog box.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::SetDlgItemText(m_hWnd, nIDDlgItem, lpString);\n\t}\n\n\tinline UINT_PTR CWnd::SetTimer(UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc) const\n\t// Creates a timer with the specified time-out value.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::SetTimer(m_hWnd, nIDEvent, uElapse, lpTimerFunc);\n\t}\n\n\tinline BOOL CWnd::SetWindowText(LPCTSTR lpString) const\n\t// The SetWindowText function changes the text of the window's title bar (if it has one).\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::SetWindowText(m_hWnd, lpString);\n\t}\n\n\tinline HRESULT CWnd::SetWindowTheme(LPCWSTR pszSubAppName, LPCWSTR pszSubIdList) const\n\t// Set the XP Theme for a window.\n\t// Exampes:\n\t//  SetWindowTheme(NULL, NULL);\t\t// Reverts the window's XP theme back to default\n\t//  SetWindowTheme(L\" \", L\" \");\t\t// Disables XP theme for the window\n\t{\n\t\tHRESULT hr = E_NOTIMPL;\n\n#ifndef\t_WIN32_WCE\n\n\t\tHMODULE hMod = ::LoadLibrary(_T(\"uxtheme.dll\"));\n\t\tif(hMod)\n\t\t{\n\t\t\ttypedef HRESULT (__stdcall *PFNSETWINDOWTHEME)(HWND hWnd, LPCWSTR pszSubAppName, LPCWSTR pszSubIdList);\n\t\t\tPFNSETWINDOWTHEME pfn = (PFNSETWINDOWTHEME)GetProcAddress(hMod, \"SetWindowTheme\");\n\n\t\t\thr = (*pfn)(m_hWnd, pszSubAppName, pszSubIdList);\n\n\t\t\t::FreeLibrary(hMod);\n\t\t}\n\n#endif\n\n\t\treturn hr;\n\t}\n\n\tinline BOOL CWnd::ShowWindow(int nCmdShow /*= SW_SHOWNORMAL*/) const\n\t// The ShowWindow function sets the window's show state.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::ShowWindow(m_hWnd, nCmdShow);\n\t}\n\n\tinline BOOL CWnd::UpdateWindow() const\n\t// The UpdateWindow function updates the client area of the window by sending a\n\t// WM_PAINT message to the window if the window's update region is not empty.\n\t// If the update region is empty, no message is sent.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::UpdateWindow(m_hWnd);\n\t}\n\n\tinline BOOL CWnd::ValidateRect(LPCRECT prc) const\n\t// The ValidateRect function validates the client area within a rectangle by\n\t// removing the rectangle from the update region of the window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::ValidateRect(m_hWnd, prc);\n\t}\n\n\tinline BOOL CWnd::ValidateRgn(CRgn* pRgn) const\n\t// The ValidateRgn function validates the client area within a region by\n\t// removing the region from the current update region of the window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tHRGN hRgn = pRgn? (HRGN)pRgn->GetHandle() : NULL;\n\t\treturn ::ValidateRgn(m_hWnd, hRgn);\n\t}\n\n\tinline CWnd* CWnd::WindowFromPoint(POINT pt)\n\t// Retrieves the window that contains the specified point (in screen coodinates).\n\t{\n\t\treturn FromHandle(::WindowFromPoint(pt));\n\t}\n\n\t//\n\t// These functions aren't supported on WinCE\n\t//\n  #ifndef _WIN32_WCE\n\tinline BOOL CWnd::CloseWindow() const\n\t// The CloseWindow function minimizes (but does not destroy) the window.\n\t// To destroy a window, an application can use the Destroy function.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::CloseWindow(m_hWnd);\n\t}\n\n\tinline int CWnd::DlgDirList(LPTSTR lpPathSpec, int nIDListBox, int nIDStaticPath, UINT uFileType) const\n\t// The DlgDirList function replaces the contents of a list box with the names of the subdirectories and files\n\t// in a specified directory. You can filter the list of names by specifying a set of file attributes.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::DlgDirList(m_hWnd, lpPathSpec, nIDListBox, nIDStaticPath, uFileType);\n\t}\n\n\tinline int CWnd::DlgDirListComboBox(LPTSTR lpPathSpec, int nIDComboBox, int nIDStaticPath, UINT uFiletype) const\n\t// The DlgDirListComboBox function replaces the contents of a combo box with the names of the subdirectories\n\t// and files in a specified directory. You can filter the list of names by specifying a set of file attributes.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::DlgDirListComboBox(m_hWnd, lpPathSpec, nIDComboBox, nIDStaticPath, uFiletype);\n\t}\n\n\tinline BOOL CWnd::DlgDirSelectEx(LPTSTR lpString, int nCount, int nIDListBox) const\n\t// The DlgDirSelectEx function retrieves the current selection from a single-selection list box. It assumes that the list box\n\t// has been filled by the DlgDirList function and that the selection is a drive letter, filename, or directory name.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::DlgDirSelectEx(m_hWnd, lpString, nCount, nIDListBox);\n\t}\n\n\tinline BOOL CWnd::DlgDirSelectComboBoxEx(LPTSTR lpString, int nCount, int nIDComboBox) const\n\t// The DlgDirSelectComboBoxEx function retrieves the current selection from a combo box filled by using the\n\t// DlgDirListComboBox function. The selection is interpreted as a drive letter, a file, or a directory name.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::DlgDirSelectComboBoxEx(m_hWnd, lpString, nCount, nIDComboBox);\n\t}\n\n    #ifndef WIN32_LEAN_AND_MEAN\n    inline void CWnd::DragAcceptFiles(BOOL fAccept) const\n\t// Registers whether a window accepts dropped files.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\t::DragAcceptFiles(m_hWnd, fAccept);\n\t}\n    #endif\n\n\tinline BOOL CWnd::DrawAnimatedRects(int idAni, RECT& rcFrom, RECT& rcTo) const\n\t// The DrawAnimatedRects function draws a wire-frame rectangle and animates it to indicate the opening of\n\t// an icon or the minimizing or maximizing of a window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::DrawAnimatedRects(m_hWnd, idAni, &rcFrom, &rcTo);\n\t}\n\n\tinline BOOL CWnd::DrawCaption(CDC* pDC, RECT& rc, UINT uFlags) const\n\t// The DrawCaption function draws a window caption.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tassert(pDC);\n\t\treturn ::DrawCaption(m_hWnd, pDC->GetHDC(), &rc, uFlags);\n\t}\n\n\tinline BOOL CWnd::EnableScrollBar(UINT uSBflags, UINT uArrows) const\n\t// The EnableScrollBar function enables or disables one or both scroll bar arrows.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::EnableScrollBar(m_hWnd, uSBflags, uArrows);\n\t}\n\n\tinline CWnd* CWnd::GetLastActivePopup() const\n\t// The GetLastActivePopup function determines which pop-up window owned by the specified window was most recently active.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn FromHandle( ::GetLastActivePopup(m_hWnd) );\n\t}\n\n\tinline CMenu* CWnd::GetMenu() const\n\t// The GetMenu function retrieves a handle to the menu assigned to the window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn FromHandle(::GetMenu(m_hWnd));\n\t}\n\n\tinline int CWnd::GetScrollPos(int nBar) const\n\t// The GetScrollPos function retrieves the current position of the scroll box\n\t// (thumb) in the specified scroll bar.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::GetScrollPos(m_hWnd, nBar);\n\t}\n\n\tinline BOOL CWnd::GetScrollRange(int nBar, int& MinPos, int& MaxPos) const\n\t// The GetScrollRange function retrieves the current minimum and maximum scroll box\n\t// (thumb) positions for the specified scroll bar.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::GetScrollRange(m_hWnd, nBar, &MinPos, &MaxPos );\n\t}\n\n\tinline CMenu* CWnd::GetSystemMenu(BOOL bRevert) const\n\t// The GetSystemMenu function allows the application to access the window menu (also known as the system menu\n\t// or the control menu) for copying and modifying.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn FromHandle(::GetSystemMenu(m_hWnd, bRevert));\n\t}\n\n\tinline CWnd* CWnd::GetTopWindow() const\n\t// The GetTopWindow function examines the Z order of the child windows associated with the parent window and\n\t// retrieves a handle to the child window at the top of the Z order.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn FromHandle( ::GetTopWindow(m_hWnd) );\n\t}\n\n\tinline BOOL CWnd::GetWindowPlacement(WINDOWPLACEMENT& wndpl) const\n\t// The GetWindowPlacement function retrieves the show state and the restored,\n\t// minimized, and maximized positions of the window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::GetWindowPlacement(m_hWnd, &wndpl);\n\t}\n\n\tinline BOOL CWnd::HiliteMenuItem(CMenu* pMenu, UINT uItemHilite, UINT uHilite) const\n\t// The HiliteMenuItem function highlights or removes the highlighting from an item in a menu bar.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tassert(pMenu);\n\t\treturn ::HiliteMenuItem(m_hWnd, pMenu->GetHandle(), uItemHilite, uHilite);\n\t}\n\n\tinline BOOL CWnd::IsIconic() const\n\t// The IsIconic function determines whether the window is minimized (iconic).\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::IsIconic(m_hWnd);\n\t}\n\n\tinline BOOL CWnd::IsZoomed() const\n\t// The IsZoomed function determines whether the window is maximized.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::IsZoomed(m_hWnd);\n\t}\n\n\tinline BOOL CWnd::KillTimer(UINT_PTR uIDEvent) const\n\t// Destroys the specified timer.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::KillTimer(m_hWnd, uIDEvent);\n\t}\n\n\tinline BOOL CWnd::LockWindowUpdate() const\n\t// Disables drawing in the window. Only one window can be locked at a time.\n\t// Use UnLockWindowUpdate to re-enable drawing in the window\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::LockWindowUpdate(m_hWnd);\n\t}\n\n\tinline BOOL CWnd::OpenIcon() const\n\t// The OpenIcon function restores a minimized (iconic) window to its previous size and position.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::OpenIcon(m_hWnd);\n\t}\n\n\tinline void CWnd::Print(CDC* pDC, DWORD dwFlags) const\n\t// Requests that the window draw itself in the specified device context, most commonly in a printer device context.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tassert(pDC);\n\t\tSendMessage(m_hWnd, WM_PRINT, (WPARAM)pDC, (LPARAM)dwFlags);\n\t}\n\n\tinline BOOL CWnd::ScrollWindow(int XAmount, int YAmount, LPCRECT lprcScroll, LPCRECT lprcClip) const\n\t// The ScrollWindow function scrolls the contents of the specified window's client area.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::ScrollWindow(m_hWnd, XAmount, YAmount, lprcScroll, lprcClip);\n\t}\n\n\tinline int CWnd::ScrollWindowEx(int dx, int dy, LPCRECT lprcScroll, LPCRECT lprcClip, CRgn* prgnUpdate, LPRECT lprcUpdate, UINT flags) const\n\t// The ScrollWindow function scrolls the contents of the window's client area.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\tHRGN hrgnUpdate = prgnUpdate? (HRGN)prgnUpdate->GetHandle() : NULL;\n\t\treturn ::ScrollWindowEx(m_hWnd, dx, dy, lprcScroll, lprcClip, hrgnUpdate, lprcUpdate, flags);\n\t}\n\n\tinline BOOL CWnd::SetMenu(CMenu* pMenu) const\n\t// The SetMenu function assigns a menu to the specified window.\n\t// A hMenu of NULL removes the menu.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::SetMenu(m_hWnd, pMenu? pMenu->GetHandle() : NULL);\n\t}\n\n\tinline int CWnd::SetScrollInfo(int fnBar, const SCROLLINFO& si, BOOL fRedraw) const\n\t// The SetScrollInfo function sets the parameters of a scroll bar, including\n\t// the minimum and maximum scrolling positions, the page size, and the\n\t// position of the scroll box (thumb).\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::SetScrollInfo(m_hWnd, fnBar, &si, fRedraw);\n\t}\n\n\tinline int CWnd::SetScrollPos(int nBar, int nPos, BOOL bRedraw) const\n\t// The SetScrollPos function sets the position of the scroll box (thumb) in\n\t// the specified scroll bar.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::SetScrollPos(m_hWnd, nBar, nPos, bRedraw);\n\t}\n\n\tinline BOOL CWnd::SetScrollRange(int nBar, int nMinPos, int nMaxPos, BOOL bRedraw) const\n\t// The SetScrollRange function sets the minimum and maximum scroll box positions for the scroll bar.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::SetScrollRange(m_hWnd, nBar, nMinPos, nMaxPos, bRedraw);\n\t}\n\n\tinline BOOL CWnd::SetWindowPlacement(const WINDOWPLACEMENT& wndpl) const\n\t// The SetWindowPlacement function sets the show state and the restored, minimized,\n\t// and maximized positions of the window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::SetWindowPlacement(m_hWnd, &wndpl);\n\t}\n\n\tinline BOOL CWnd::ShowOwnedPopups(BOOL fShow) const\n\t// The ShowOwnedPopups function shows or hides all pop-up windows owned by the specified window.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::ShowOwnedPopups(m_hWnd, fShow);\n\t}\n\n\tinline BOOL CWnd::ShowScrollBar(int nBar, BOOL bShow) const\n\t// The ShowScrollBar function shows or hides the specified scroll bar.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::ShowScrollBar(m_hWnd, nBar, bShow);\n\t}\n\n\tinline BOOL CWnd::ShowWindowAsync(int nCmdShow) const\n\t// The ShowWindowAsync function sets the show state of a window created by a different thread.\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::ShowWindowAsync(m_hWnd, nCmdShow);\n\t}\n\n\tinline BOOL CWnd::UnLockWindowUpdate() const\n\t// Enables drawing in the window. Only one window can be locked at a time.\n\t// Use LockWindowUpdate to disable drawing in the window\n\t{\n\t\tassert(::IsWindow(m_hWnd));\n\t\treturn ::LockWindowUpdate(0);\n\t}\n\n\tinline CWnd* CWnd::WindowFromDC(CDC* pDC) const\n\t// The WindowFromDC function returns a handle to the window associated with the specified display device context (DC).\n\t{\n\t\tassert(pDC);\n\t\treturn FromHandle( ::WindowFromDC(pDC->GetHDC()) );\n\t}\n\n  #endif\n\n}; // namespace Win32xx\n\n\n#endif // _WIN32XX_WINCORE_H_\n\n"
  },
  {
    "path": "external/win32cpp/include/winutils.h",
    "content": "// Win32++   Version 7.2\n// Released: 5th AUgust 2011\n//\n//      David Nash\n//      email: dnash@bigpond.net.au\n//      url: https://sourceforge.net/projects/win32-framework\n//\n//\n// Copyright (c) 2005-2011  David Nash\n//\n// Permission is hereby granted, free of charge, to\n// any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom\n// the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice\n// shall be included in all copies or substantial portions\n// of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\n// OR OTHER DEALINGS IN THE SOFTWARE.\n//\n////////////////////////////////////////////////////////\n\n#ifndef _WIN32XX_WINUTILS_H_\n#define _WIN32XX_WINUTILS_H_\n\n\n// define useful macros from WindowsX.h\n#ifndef GET_X_LPARAM\n  #define GET_X_LPARAM(lp)  ((int)(short)LOWORD(lp))\n#endif\n#ifndef GET_Y_LPARAM\n  #define GET_Y_LPARAM(lp)  ((int)(short)HIWORD(lp))\n#endif\n\n// Define our own MIN and MAX macros\n// this avoids inconsistencies with Dev-C++ and other compilers, and\n// avoids conflicts between typical min/max macros and std::min/std::max\n#define MAX(a,b)            (((a) > (b)) ? (a) : (b))\n#define MIN(a,b)            (((a) < (b)) ? (a) : (b))\n\n\nnamespace Win32xx\n{\n\t// Forward declarations\n\tclass CPoint;\n\tclass CRect;\n\tCWinApp* GetApp();\n\tvoid TRACE(LPCTSTR str);\n\n\n\t/////////////////////////////////////////\n\t// Definition of the CSize class\n\t// This class can be used to replace the SIZE structure\n\tclass CSize : public SIZE\n\t{\n\tpublic:\n\t\tCSize()\t\t\t\t\t\t\t\t{ cx = 0; cy = 0; }\n\t\tCSize(int CX, int CY)\t\t\t\t{ cx = CX; cy = CY; }\n\t\tCSize(SIZE sz)\t\t\t\t\t\t{ cx = sz.cx; cy = sz.cy; }\n\t\tCSize(POINT pt)\t\t\t\t\t\t{ cx = pt.x;  cy = pt.y; }\n\t\tCSize(DWORD dw)\t\t\t\t\t\t{ cx = (short)LOWORD(dw); cy = (short)HIWORD(dw); }\n\t\tvoid SetSize(int CX, int CY)\t\t{ cx = CX; cy = CY; }\n\n\t\t// Operators\n\t\toperator LPSIZE()\t\t\t\t\t{ return this; }\n\t\tBOOL operator == (SIZE sz) const\t{ return (cx == sz.cx && cy == sz.cy); }\n\t\tBOOL operator != (SIZE sz) const\t{ return (cx != sz.cx || cy != sz.cy); }\n\t\tvoid operator += (SIZE sz)\t\t\t{ cx += sz.cx; cy += sz.cy; }\n\t\tvoid operator -= (SIZE sz)\t\t\t{ cx -= sz.cx; cy -= sz.cy; }\n\n\t\t// Operators returning CSize\n\t\tCSize operator - () const\t\t\t{ return CSize (-cx, -cy); }\n\t\tCSize operator + (SIZE sz) const\t{ return CSize (cx + sz.cx, cy + sz.cy); }\n\t\tCSize operator - (SIZE sz) const\t{ return CSize (cx - sz.cx, cy - sz.cy); }\n\n\t\t// Operators returning CPoint\n\t\tCPoint operator + (POINT point) const;\n\t\tCPoint operator - (POINT point) const;\n\n\t\t// Operators returning CRect\n\t\tCRect operator + (RECT rc) const;\n\t\tCRect operator - (RECT rc) const;\n\t};\n\n\n\t/////////////////////////////////////////\n\t// Definition of the CPoint class\n\t// This class can be used to replace the POINT structure\n\tclass CPoint : public POINT\n\t{\n\tpublic:\n\t\tCPoint()\t\t\t\t\t\t\t{ x = 0; y = 0; }\n\t\tCPoint(int X, int Y)\t\t\t\t{ x = X; y = Y; }\n\t\tCPoint(POINT pt)\t\t\t\t\t{ x = pt.x ; y = pt.y; }\n\t\tCPoint(POINTS pts)\t\t\t\t\t{ x = pts.x; y = pts.y; }\n\t\tCPoint(SIZE sz)\t\t\t\t\t\t{ x = sz.cx; y = sz.cy; }\n\t\tCPoint(DWORD dw)\t\t\t\t\t{ x = (short) LOWORD(dw); y = (short) HIWORD(dw); }\n\n\t\tvoid Offset(int dx, int dy)\t\t\t{ x += dx; y += dy; }\n\t\tvoid Offset(POINT pt)\t\t\t\t{ x += pt.x; y += pt.y; }\n\t\tvoid Offset(SIZE sz)\t\t\t\t{ x += sz.cx; y += sz.cy; }\n\t\tvoid SetPoint(int X, int Y)\t\t\t{ x = X; y = Y; }\n\n\t\t// Operators\n\t\toperator LPPOINT()\t\t\t\t\t{ return this; }\n\t\tBOOL operator == (POINT pt) const\t{ return ((x == pt.x) && (y == pt.y)); }\n\t\tBOOL operator != (POINT pt) const\t{ return ((x != pt.x) || (y != pt.y)); }\n\t\tvoid operator += (SIZE sz)\t\t\t{ x += sz.cx; y += sz.cy; }\n\t\tvoid operator -= (SIZE sz)\t\t\t{ x -= sz.cx; y -= sz.cy; }\n\t\tvoid operator += (POINT pt)\t\t\t{ x += pt.x; y += pt.y; }\n\t\tvoid operator -= (POINT pt)\t\t\t{ x -= pt.x; y -= pt.y; }\n\n\t\t// Operators returning CPoint\n\t\tCPoint operator - () const\t\t\t{ return CPoint(-x, -y); }\n\t\tCPoint operator + (SIZE sz) const\t{ return CPoint(x + sz.cx, y + sz.cy); }\n\t\tCPoint operator - (SIZE sz) const\t{ return CPoint(x - sz.cx, y - sz.cy); }\n\t\tCPoint operator + (POINT pt) const\t{ return CPoint(x + pt.x, y + pt.y); }\n\t\tCPoint operator - (POINT pt) const\t{ return CPoint(x - pt.x, y - pt.y); }\n\n\t\t// Operators returning CRect\n\t\tCRect operator + (RECT rc) const;\n\t\tCRect operator - (RECT rc) const;\n\t};\n\n\n\t/////////////////////////////////////////\n\t// Definition of the CRect class\n\t// This class can be used to replace the RECT structure.\n\tclass CRect : public RECT\n\t{\n\tpublic:\n\t\tCRect()\t\t\t\t\t\t\t\t\t\t{ left = top = right = bottom = 0; }\n\t\tCRect(int l, int t, int r, int b)\t\t\t{ left = l; top = t; right = r; bottom = b; }\n\t\tCRect(RECT rc)\t\t\t\t\t\t\t\t{ left = rc.left; top = rc.top; right = rc.right; bottom = rc.bottom; }\n\t\tCRect(POINT pt, SIZE sz)\t\t\t\t\t{ right = (left = pt.x) + sz.cx; bottom = (top = pt.y) + sz.cy; }\n\t\tCRect(POINT topLeft, POINT bottomRight)\t\t{ left = topLeft.x; top = topLeft.y; right = bottomRight.x; bottom = bottomRight.y; }\n\n\t\tBOOL CopyRect(RECT rc)\t\t\t\t\t\t{ return ::CopyRect(this, &rc); }\n\t\tBOOL DeflateRect(int x, int y)\t\t\t\t{ return ::InflateRect(this, -x, -y); }\n\t\tBOOL DeflateRect(SIZE size)\t\t\t\t\t{ return ::InflateRect(this, -size.cx, -size.cy); }\n\t\tBOOL DeflateRect(RECT rc)\t\t\t\t\t{ return ::InflateRect(this, rc.left - rc.right, rc.top - rc.bottom); }\n\t\tBOOL DeflateRect(int l, int t, int r, int b){ return ::InflateRect(this, l - r, t - b); }\n\t\tBOOL EqualRect(RECT rc) const\t\t\t\t{ return ::EqualRect(&rc, this); }\n\t\tBOOL InflateRect(int dx, int dy)\t\t\t{ return ::InflateRect(this, dx, dy); }\n\t\tBOOL InflateRect(SIZE sz)\t\t\t\t\t{ return ::InflateRect(this, sz.cx, sz.cy); }\n\t\tBOOL InflateRect(RECT rc)\t\t\t\t\t{ return ::InflateRect(this, rc.right - rc.left, rc.bottom - rc.top); }\n\t\tBOOL InflateRect(int l, int t, int r, int b){ return ::InflateRect(this, r - l, b - t); }\n\t\tBOOL IntersectRect(RECT rc1, RECT rc2)\t\t{ return ::IntersectRect(this, &rc1, &rc2); }\n\t\tBOOL IsRectEmpty() const\t\t\t\t\t{ return ::IsRectEmpty(this);}\n\t\tBOOL IsRectNull() const\t\t\t\t\t\t{ return (left == 0 && right == 0 && top == 0 && bottom == 0); }\n\t\tCRect MulDiv(int nMult, int nDiv) const\t\t{ return CRect ((left * nMult) / nDiv, (top * nMult) / nDiv,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(right * nMult) / nDiv, (bottom * nMult) / nDiv); }\n\t\tvoid NormalizeRect()\t\t\t\t\t\t{ int nTemp; if (left > right) { nTemp = left; left = right; right = nTemp; }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (top > bottom) { nTemp = top; top = bottom; bottom = nTemp; } }\n\t\tBOOL OffsetRect(int dx, int dy)\t\t\t\t{ return ::OffsetRect(this, dx, dy); }\n\t\tBOOL OffsetRect(POINT pt)\t\t\t\t\t{ return ::OffsetRect(this, pt.x, pt.y); }\n\t\tBOOL OffsetRect(SIZE size)\t\t\t\t\t{ return ::OffsetRect(this, size.cx, size.cy); }\n\t\tBOOL PtInRect(POINT pt) const\t\t\t\t{ return ::PtInRect(this, pt); }\n\t\tBOOL SetRect(int l, int t, int r, int b)\t{ return ::SetRect(this, l, t, r, b); }\n\t\tBOOL SetRect(POINT TopLeft, POINT BtmRight)\t{ return ::SetRect(this, TopLeft.x, TopLeft.y, BtmRight.x, BtmRight.y); }\n\t\tBOOL SetRectEmpty()\t\t\t\t\t\t\t{ return ::SetRectEmpty(this); }\n\t\tBOOL SubtractRect(RECT rc1, RECT rc2)\t\t{ return ::SubtractRect(this, &rc1, &rc2); }\n\t\tBOOL UnionRect(RECT rc1, RECT rc2)\t\t\t{ return ::UnionRect(this, &rc1, &rc2); }\n\n\t\t// Reposition rectangle\n\t\tvoid MoveToX (int x)\t\t\t\t\t\t{ right = Width() + x; left = x; }\n\t\tvoid MoveToY (int y)\t\t\t\t\t\t{ bottom = Height() + y; top = y; }\n\t\tvoid MoveToXY (int x, int y)\t\t\t\t{ MoveToX(x); MoveToY(y); }\n\t\tvoid MoveToXY (POINT pt)\t\t\t\t\t{ MoveToX (pt.x); MoveToY (pt.y); }\n\n\t\t// Attributes\n\t\tint Height() const\t\t\t\t\t\t\t{ return bottom - top; }\n\t\tint Width() const\t\t\t\t\t\t\t{ return right - left; }\n\t\tCSize Size() const\t\t\t\t\t\t\t{ return CSize(Width(), Height()); }\n\t\tCPoint CenterPoint() const\t\t\t\t\t{ return CPoint((left + right) / 2, (top + bottom) / 2); }\n\t\tCPoint TopLeft() const\t\t\t\t\t\t{ return CPoint(left, top); }\n\t\tCPoint BottomRight() const\t\t\t\t\t{ return CPoint(right, bottom); }\n\n\t\t// operators\n\t\toperator LPRECT()\t\t\t\t\t\t\t{ return this; }\n\t\tBOOL operator == (RECT rc) const\t\t\t{ return ::EqualRect(this, &rc); }\n\t\tBOOL operator != (RECT rc) const\t\t\t{ return !::EqualRect(this, &rc); }\n\t\tvoid operator += (POINT pt)\t\t\t\t\t{ ::OffsetRect(this, pt.x, pt.y); }\n\t\tvoid operator += (SIZE size)\t\t\t\t{ ::OffsetRect(this, size.cx, size.cy); }\n\t\tvoid operator += (RECT rc)\t\t\t\t\t{ ::InflateRect(this, rc.right - rc.left, rc.bottom - rc.top); }\n\t\tvoid operator -= (RECT rc)\t\t\t\t\t{ ::InflateRect(this, rc.left - rc.right, rc.top - rc.bottom); }\n\t\tvoid operator -= (POINT pt)\t\t\t\t\t{ ::OffsetRect(this, -pt.x, -pt.y); }\n\t\tvoid operator -= (SIZE sz)\t\t\t\t\t{ ::OffsetRect(this, -sz.cx, -sz.cy); }\n\t\tvoid operator &= (RECT rc)\t\t\t\t\t{ ::IntersectRect(this, this, &rc); }\n\t\tvoid operator |= (RECT rc)\t\t\t\t\t{ ::UnionRect(this, this, &rc); }\n\n\t\t// Operators returning CRect\n\t\tCRect operator + (POINT pt) const\t\t\t{ CRect rc(*this); ::OffsetRect(&rc, pt.x, pt.y); return rc; }\n\t\tCRect operator - (POINT pt) const\t\t\t{ CRect rc(*this); ::OffsetRect(&rc, -pt.x, -pt.y); return rc; }\n\t\tCRect operator + (SIZE sz) const\t\t\t{ CRect rc(*this); ::OffsetRect(&rc, sz.cx, sz.cy); return rc; }\n\t\tCRect operator - (SIZE sz) const\t\t\t{ CRect rc(*this); ::OffsetRect(&rc, -sz.cx, -sz.cy); return rc; }\n\t\tCRect operator + (RECT rc) const\t\t\t{ CRect rc1(*this); rc1.InflateRect(rc); return rc1; }\n\t\tCRect operator - (RECT rc) const\t\t\t{ CRect rc1(*this); rc1.DeflateRect(rc); return rc1; }\n\t\tCRect operator & (RECT rc) const\t\t\t{ CRect rc1; ::IntersectRect(&rc1, this, &rc); return rc1; }\n\t\tCRect operator | (RECT rc) const\t\t\t{ CRect rc1; ::UnionRect(&rc1, this, &rc); return rc1; }\n\t};\n\n\t// CSize member function definitions\n\tinline CPoint CSize::operator + (POINT pt) const\t{ return CPoint(pt) + *this; }\n\tinline CPoint CSize::operator - (POINT pt) const\t{ return CPoint(pt) - *this; }\n\tinline CRect CSize::operator + (RECT rc) const\t\t{ return CRect(rc) + *this; }\n\tinline CRect CSize::operator - (RECT rc) const\t\t{ return CRect(rc) - *this; }\n\n\t// CPoint member function definitions\n\tinline CRect CPoint::operator + (RECT rc) const\t\t{ return CRect(rc) + *this; }\n\tinline CRect CPoint::operator - (RECT rc) const\t\t{ return CRect(rc) - *this; }\n\n\n\t////////////////////////////////////////////////////////\n\t// Classes and functions (typedefs) for text conversions\n\t//\n\t//  This section defines the following text conversions:\n\t//  A2BSTR\t\tANSI  to BSTR\n\t//  A2OLE\t\tANSI  to OLE\n\t//\tA2T\t\t\tANSI  to TCHAR\n\t//\tA2W\t\t\tANSI  to WCHAR\n\t//  OLE2A\t\tOLE   to ANSI\n\t//  OLE2T\t\tOLE   to TCHAR\n\t//  OLE2W\t\tOLE   to WCHAR\n\t//  T2A\t\t\tTCHAR to ANSI\n\t//  T2BSTR\t\tTCHAR to BSTR\n\t//  T2OLE       TCHAR to OLE\n\t//  T2W\t\t\tTCHAR to WCHAR\n\t//  W2A\t\t\tWCHAR to ANSI\n\t//  W2BSTR\t\tWCHAR to BSTR\n\t//  W2OLE\t\tWCHAR to OLE\n\t//  W2T\t\t\tWCHAR to TCHAR\n\n\t// About different character and string types:\n\t// ------------------------------------------\n\t// char (or CHAR) character types are ANSI (8 bits).\n\t// wchar_t (or WCHAR) character types are Unicode (16 bits).\n\t// TCHAR characters are Unicode if the _UNICODE macro is defined, otherwise they are ANSI.\n\t// BSTR (Basic String) is a type of string used in Visual Basic and COM programming.\n\t// OLE is the same as WCHAR. It is used in Visual Basic and COM programming.\n\n\n\t// Forward declarations of our classes. They are defined later.\n\tclass CA2A;\n\tclass CA2W;\n\tclass CW2A;\n\tclass CW2W;\n\tclass CA2BSTR;\n\tclass CW2BSTR;\n\n\t// typedefs for the well known text conversions\n\ttypedef CA2W A2W;\n\ttypedef CW2A W2A;\n\ttypedef CW2BSTR W2BSTR;\n\ttypedef CA2BSTR A2BSTR;\n\ttypedef CW2A BSTR2A;\n\ttypedef CW2W BSTR2W;\n\n#ifdef _UNICODE\n\ttypedef CA2W A2T;\n\ttypedef CW2A T2A;\n\ttypedef CW2W T2W;\n\ttypedef CW2W W2T;\n\ttypedef CW2BSTR T2BSTR;\n\ttypedef BSTR2W BSTR2T;\n#else\n\ttypedef CA2A A2T;\n\ttypedef CA2A T2A;\n\ttypedef CA2W T2W;\n\ttypedef CW2A W2T;\n\ttypedef CA2BSTR T2BSTR;\n\ttypedef BSTR2A BSTR2T;\n#endif\n\n\ttypedef A2W  A2OLE;\n\ttypedef T2W  T2OLE;\n\ttypedef CW2W W2OLE;\n\ttypedef W2A  OLE2A;\n\ttypedef W2T  OLE2T;\n\ttypedef CW2W OLE2W;\n\n\tclass CA2W\n\t{\n\tpublic:\n\t\tCA2W(LPCSTR pStr) : m_pStr(pStr)\n\t\t{\n\t\t\tif (pStr)\n\t\t\t{\n\t\t\t\t// Resize the vector and assign null WCHAR to each element\n\t\t\t\tint length = (int)strlen(pStr)+1;\n\t\t\t\tm_vWideArray.assign(length, L'\\0');\n\n\t\t\t\t// Fill our vector with the converted WCHAR array\n\t\t\t\tMultiByteToWideChar(CP_ACP, 0, pStr, -1, &m_vWideArray[0], length);\n\t\t\t}\n\t\t}\n\t\t~CA2W() {}\n\t\toperator LPCWSTR() { return m_pStr? &m_vWideArray[0] : NULL; }\n\t\toperator LPOLESTR() { return m_pStr? (LPOLESTR)&m_vWideArray[0] : (LPOLESTR)NULL; }\n\t\toperator LPBSTR() { return m_pStr? (LPBSTR)&m_vWideArray[0] : (LPBSTR)NULL; }\n\n\tprivate:\n\t\tCA2W(const CA2W&);\n\t\tCA2W& operator= (const CA2W&);\n\t\tstd::vector<wchar_t> m_vWideArray;\n\t\tLPCSTR m_pStr;\n\t};\n\n\tclass CW2A\n\t{\n\tpublic:\n\t\tCW2A(LPCWSTR pWStr) : m_pWStr(pWStr)\n\t\t{\n\t\t\t// Resize the vector and assign null char to each element\n\t\t\tint length = (int)wcslen(pWStr)+1;\n\t\t\tm_vAnsiArray.assign(length, '\\0');\n\n\t\t\t// Fill our vector with the converted char array\n\t\t\tWideCharToMultiByte(CP_ACP, 0, pWStr, -1, &m_vAnsiArray[0], length, NULL,NULL);\n\t\t}\n\n\t\t~CW2A() {}\n\t\toperator LPCSTR() { return m_pWStr? &m_vAnsiArray[0] : NULL; }\n\n\tprivate:\n\t\tCW2A(const CW2A&);\n\t\tCW2A& operator= (const CW2A&);\n\t\tstd::vector<char> m_vAnsiArray;\n\t\tLPCWSTR m_pWStr;\n\t};\n\n\tclass CW2W\n\t{\n\tpublic:\n\t\tCW2W(LPCWSTR pWStr) : m_pWStr(pWStr) {}\n\t\toperator LPCWSTR() { return (LPWSTR)m_pWStr; }\n\t\toperator LPOLESTR() { return (LPOLESTR)m_pWStr; }\n\n\tprivate:\n\t\tCW2W(const CW2W&);\n\t\tCW2W& operator= (const CW2W&);\n\n\t\tLPCWSTR m_pWStr;\n\t};\n\n\tclass CA2A\n\t{\n\tpublic:\n\t\tCA2A(LPCSTR pStr) : m_pStr(pStr) {}\n\t\toperator LPCSTR() { return (LPSTR)m_pStr; }\n\n\tprivate:\n\t\tCA2A(const CA2A&);\n\t\tCA2A& operator= (const CA2A&);\n\n\t\tLPCSTR m_pStr;\n\t};\n\n\tclass CW2BSTR\n\t{\n\tpublic:\n\t\tCW2BSTR(LPCWSTR pWStr) { m_bstrString = ::SysAllocString(pWStr); }\n\t\t~CW2BSTR() { ::SysFreeString(m_bstrString); }\n\t\toperator BSTR() { return m_bstrString;}\n\n\tprivate:\n\t\tCW2BSTR(const CW2BSTR&);\n\t\tCW2BSTR& operator= (const CW2BSTR&);\n\t\tBSTR m_bstrString;\n\t};\n\n\tclass CA2BSTR\n\t{\n\tpublic:\n\t\tCA2BSTR(LPCSTR pStr) { m_bstrString = ::SysAllocString(A2W(pStr)); }\n\t\t~CA2BSTR() { ::SysFreeString(m_bstrString); }\n\t\toperator BSTR() { return m_bstrString;}\n\n\tprivate:\n\t\tCA2BSTR(const CA2BSTR&);\n\t\tCA2BSTR& operator= (const CA2BSTR&);\n\t\tBSTR m_bstrString;\n\t};\n\n\n\t////////////////////////////////////////\n\t// Global Functions\n\t//\n\n\tinline CWnd* FromHandle(HWND hWnd)\n\t// Returns the CWnd object associated with the window handle\n\t{\n\t\tassert( GetApp() );\n\t\tCWnd* pWnd = GetApp()->GetCWndFromMap(hWnd);\n\t\tif (::IsWindow(hWnd) && pWnd == 0)\n\t\t{\n\t\t\tGetApp()->AddTmpWnd(hWnd);\n\t\t\tpWnd = GetApp()->GetCWndFromMap(hWnd);\n\t\t\t::PostMessage(hWnd, UWM_CLEANUPTEMPS, 0, 0);\n\t\t}\n\n\t\treturn pWnd;\n\t}\n\n\t\n\tinline CWinApp* GetApp()\n\t// Returns a pointer to the CWinApp derrived class\n\t{\n\t\treturn CWinApp::SetnGetThis();\n\t}\n\n\tinline CPoint GetCursorPos()\n\t{\n\t\tCPoint pt;\n\t\t::GetCursorPos(&pt);\n\t\treturn pt;\n\t}\n\n\tinline HBITMAP LoadBitmap (LPCTSTR lpszName)\n\t{\n\t\tassert(GetApp());\n\n\t\tHBITMAP hBitmap = (HBITMAP)::LoadImage (GetApp()->GetResourceHandle(), lpszName, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);\n\t\treturn hBitmap;\n\t}\n\n\tinline HBITMAP LoadBitmap (int nID)\n\t{\n\t\treturn LoadBitmap(MAKEINTRESOURCE(nID));\n\t}\n\n\n\tinline void TRACE(LPCTSTR str)\n\t// TRACE sends a string to the debug/output pane, or an external debugger\n\t{\n  #ifdef _DEBUG\n\t\tOutputDebugString(str);\n  #else\n\t\tUNREFERENCED_PARAMETER(str); // no-op\n  #endif\n\t}\n\n  #ifndef _WIN32_WCE\t\t// for Win32/64 operating systems, not WinCE\n\n\tinline int GetWinVersion()\n\t{\n\t\tDWORD dwVersion = GetVersion();\n\t\tint Platform = (dwVersion < 0x80000000)? 2:1;\n\t\tint MajorVer = LOBYTE(LOWORD(dwVersion));\n\t\tint MinorVer = HIBYTE(LOWORD(dwVersion));\n\n\t\tint nVersion =  1000*Platform + 100*MajorVer + MinorVer;\n\n\t\t// Return values and window versions:\n\t\t//  1400     Windows 95\n\t\t//  1410     Windows 98\n\t\t//  1490     Windows ME\n\t\t//  2400     Windows NT\n\t\t//  2500     Windows 2000\n\t\t//  2501     Windows XP\n\t\t//  2502     Windows Server 2003\n\t\t//  2600     Windows Vista and Windows Server 2008\n\t\t//  2601     Windows 7\n\n\t\treturn nVersion;\n\t}\n\n\tinline int GetComCtlVersion()\n\t{\n\t\t// Load the Common Controls DLL\n\t\tHMODULE hComCtl = ::LoadLibraryA(\"COMCTL32.DLL\");\n\t\tif (!hComCtl)\n\t\t\treturn 0;\n\n\t\tint ComCtlVer = 400;\n\n\t\tif (::GetProcAddress(hComCtl, \"InitCommonControlsEx\"))\n\t\t{\n\t\t\t// InitCommonControlsEx is unique to 4.7 and later\n\t\t\tComCtlVer = 470;\n\n\t\t\tif (::GetProcAddress(hComCtl, \"DllGetVersion\"))\n\t\t\t{\n\t\t\t\ttypedef HRESULT CALLBACK DLLGETVERSION(DLLVERSIONINFO*);\n\t\t\t\tDLLGETVERSION* pfnDLLGetVersion = NULL;\n\n\t\t\t\tpfnDLLGetVersion = (DLLGETVERSION*)::GetProcAddress(hComCtl, \"DllGetVersion\");\n\t\t\t\tif(pfnDLLGetVersion)\n\t\t\t\t{\n\t\t\t\t\tDLLVERSIONINFO dvi;\n\t\t\t\t\tdvi.cbSize = sizeof dvi;\n\t\t\t\t\tif(NOERROR == pfnDLLGetVersion(&dvi))\n\t\t\t\t\t{\n\t\t\t\t\t\tDWORD dwVerMajor = dvi.dwMajorVersion;\n\t\t\t\t\t\tDWORD dwVerMinor = dvi.dwMinorVersion;\n\t\t\t\t\t\tComCtlVer = 100 * dwVerMajor + dwVerMinor;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (::GetProcAddress(hComCtl, \"InitializeFlatSB\"))\n\t\t\t\tComCtlVer = 471;\t// InitializeFlatSB is unique to version 4.71\n\t\t}\n\n\t\t::FreeLibrary(hComCtl);\n\n\t\t// return values and DLL versions\n\t\t// 400  dll ver 4.00\tWindows 95/Windows NT 4.0\n\t\t// 470  dll ver 4.70\tInternet Explorer 3.x\n\t\t// 471  dll ver 4.71\tInternet Explorer 4.0\n\t\t// 472  dll ver 4.72\tInternet Explorer 4.01 and Windows 98\n\t\t// 580  dll ver 5.80\tInternet Explorer 5\n\t\t// 581  dll ver 5.81\tWindows 2000 and Windows ME\n\t\t// 582  dll ver 5.82\tWindows XP or Vista without XP themes\n\t\t// 600  dll ver 6.00\tWindows XP with XP themes\n\t\t// 610  dll ver 6.10\tWindows Vista with XP themes\n\t\t// 616  dll ver 6.16    Windows Vista SP1 or Windows 7 with XP themes\n\n\t\treturn ComCtlVer;\n\t}\n\n\tinline UINT GetSizeofMenuItemInfo()\n\t{\n\t\tUINT uSize = sizeof(MENUITEMINFO);\n\t\t// For Win95 and NT, cbSize needs to be 44\n\t\tif (1400 == (GetWinVersion()) || (2400 == GetWinVersion()))\n\t\t\tuSize = 44;\n\n\t\treturn uSize;\n\t}\n\n\tinline UINT GetSizeofNonClientMetrics()\n\t{\n\t\t// This function correctly determines the sizeof NONCLIENTMETRICS\n\t\tUINT uSize = sizeof (NONCLIENTMETRICS);\n\n  #if (WINVER >= 0x0600)\n\t\tif (GetWinVersion() < 2600 && (uSize > 500))\t// Is OS version less than Vista\n\t\t\tuSize -= sizeof(int);\t\t// Adjust size back to correct value\n  #endif\n\n\t\treturn uSize;\n\t}\n\n\t\n\n\t// A global function to report the state of the left mouse button\n\tinline BOOL IsLeftButtonDown()\n\t{\n\t\tSHORT state;\n\t\tif (GetSystemMetrics(SM_SWAPBUTTON))\n\t\t\t// Mouse buttons are swapped\n\t\t\tstate = GetAsyncKeyState(VK_RBUTTON);\n\t\telse\n\t\t\t// Mouse buttons are not swapped\n\t\t\tstate = GetAsyncKeyState(VK_LBUTTON);\n\n\t\t// returns true if the left mouse button is down\n\t\treturn (state & 0x8000);\n\t}\n\n\tinline BOOL IsAeroThemed()\n\t{\n\t\tBOOL bIsAeroThemed = FALSE;\n\n\t\t// Test if Windows version is XP or greater\n\t\tif (GetWinVersion() >= 2501)\n\t\t{\n\t\t\tHMODULE hMod = ::LoadLibrary(_T(\"uxtheme.dll\"));\n\t\t\tif(hMod)\n\t\t\t{\n\t\t\t\t// Declare pointers to IsCompositionActive function\n\t\t\t\tFARPROC pIsCompositionActive = ::GetProcAddress(hMod, \"IsCompositionActive\");\n\n\t\t\t\tif(pIsCompositionActive)\n\t\t\t\t{\n\t\t\t\t\tif(pIsCompositionActive())\n\t\t\t\t\t{\n\t\t\t\t\t\tbIsAeroThemed = TRUE;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t::FreeLibrary(hMod);\n\t\t\t}\n\t\t}\n\n\t\treturn bIsAeroThemed;\n\t}\n\n\tinline BOOL IsXPThemed()\n\t{\n\t\tBOOL bIsXPThemed = FALSE;\n\n\t\t// Test if Windows version is XP or greater\n\t\tif (GetWinVersion() >= 2501)\n\t\t{\n\t\t\tHMODULE hMod = ::LoadLibrary(_T(\"uxtheme.dll\"));\n\t\t\tif(hMod)\n\t\t\t{\n\t\t\t\t// Declare pointers to functions\n\t\t\t\tFARPROC pIsAppThemed   = ::GetProcAddress(hMod, \"IsAppThemed\");\n\t\t\t\tFARPROC pIsThemeActive = ::GetProcAddress(hMod, \"IsThemeActive\");\n\n\t\t\t\tif(pIsAppThemed && pIsThemeActive)\n\t\t\t\t{\n\t\t\t\t\tif(pIsAppThemed() && pIsThemeActive())\n\t\t\t\t\t{\n\t\t\t\t\t\t// Test if ComCtl32 dll used is version 6 or later\n\t\t\t\t\t\tbIsXPThemed = (GetComCtlVersion() >= 600);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t::FreeLibrary(hMod);\n\t\t\t}\n\t\t}\n\n\t\treturn bIsXPThemed;\n\t}\n\n  #endif // #ifndef _WIN32_WCE\n\n  // Required for WinCE\n  #ifndef lstrcpyn\n\tinline LPTSTR lstrcpyn(LPTSTR lpstrDest, LPCTSTR lpstrSrc, int nLength)\n\t{\n\t\tif(NULL == lpstrDest || NULL == lpstrSrc || nLength <= 0)\n\t\t\treturn NULL;\n\t\tint nLen = MIN((int)lstrlen(lpstrSrc), nLength - 1);\n\t\tLPTSTR lpstrRet = (LPTSTR)memcpy(lpstrDest, lpstrSrc, nLen * sizeof(TCHAR));\n\t\tlpstrDest[nLen] = _T('\\0');\n\t\treturn lpstrRet;\n\t}\n  #endif // !lstrcpyn\n\n}\n\n\n#endif\t// _WIN32XX_WINUTILS_H_\n"
  },
  {
    "path": "external/win32cpp/tools/CleanSamples.bat",
    "content": "\nREM:A batch file to remove unnecessary files from\nREM: each Visual Studio project\n\nREM: Change the directory to the parent\npushd ..\\Samples\n\n::Remove directories\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q \"%%f\\ProjectFiles\\Borland\"\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q \"%%f\\ProjectFiles\\Debug\"\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q \"%%f\\ProjectFiles\\Debug_Build\"\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q \"%%f\\src\\Dev-C++\"\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q \"%%f\\ProjectFiles\\GNU\"\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q \"%%f\\ProjectFiles\\Microsoft\"\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q \"%%f\\ProjectFiles\\Release\"\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q \"%%f\\ProjectFiles\\Release_Build\"\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q \"%%f\\ProjectFiles\\x64\"\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q \"%%f\\ProjectFiles\\_UpgradeReport_Files\"\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q \"%%f\\ProjectFiles\\__history\"\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q \"%%f\\ProjectFiles\\ipch\n\n\n::Remove files\nFOR /D %%f IN (\"*.\") DO DEL /Q /AH \"%%f\\ProjectFiles\\*.suo\"\nFOR /D %%f IN (\"*.\") DO DEL /Q /AH \"%%f\\ProjectFiles\\*.old\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\ProjectFiles\\*.ncb\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\ProjectFiles\\*.plg\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\ProjectFiles\\err*.*\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\ProjectFiles\\tmp*.*\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\ProjectFiles\\*.pdb\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\ProjectFiles\\*.aps\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\ProjectFiles\\*.cbTemp\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\ProjectFiles\\*.opt\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\ProjectFiles\\*.user\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\ProjectFiles\\*.depend\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\ProjectFiles\\*.XML\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\ProjectFiles\\*.o\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\ProjectFiles\\*.old\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\ProjectFiles\\*.layout\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\ProjectFiles\\*.local\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\ProjectFiles\\*.log\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\ProjectFiles\\*.dat\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\ProjectFiles\\*.bak\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\ProjectFiles\\*.sdf\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\ProjectFiles\\*.vcb\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\ProjectFiles\\*.vcl\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\ProjectFiles\\*.vco\"\n\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\src\\*private.*\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\src\\Makefile.win\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\src\\*.aps\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\src\\*.bak\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\src\\*.bml\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\src\\*.layout\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\src\\RibbonUI.h\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\src\\RibbonUI.rc\"\n\nREM: Clean the Networking directory\npushd Networking\n\n::Remove directories\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\Borland\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\Debug\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\Debug_Build\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\Dev-C++\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\GNU\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\Microsoft\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\Release\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\Release_Build\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\x64\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\_UpgradeReport_Files\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\__history\nFOR /D %%f IN (\"*.\") DO DEL /Q /AH \"%%f\\*.suo\"\nFOR /D %%f IN (\"*.\") DO DEL /Q /AH \"%%f\\*.old\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.ncb\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.plg\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\err*.*\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\tmp*.*\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.pdb\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.aps\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.cbTemp\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.opt\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.user\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.depend\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.XML\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.o\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.old\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.layout\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.local\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.log\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.dat\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.bak\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.sdf\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.vcb\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.vcl\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.vco\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*private.*\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\Makefile.win\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.aps\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.bak\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.bml\"\nFOR /D %%f IN (\"*.\") DO DEL /Q \"%%f\\*.layout\"\n\n\npopd\npopd\n\n\n"
  },
  {
    "path": "external/win32cpp/tools/CleanTutorials.bat",
    "content": "\n::A batch file to remove unnecessary files from\n:: each Visual Studio project in Tutorials\n\nREM: Change the directory to the parent\npushd ..\\Tutorials\n\n\n::Remove directories\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\Borland\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\Debug\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\Debug_Build\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\Dev-C++\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\GNU\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\Microsoft\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\Release\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\Release_Build\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\x64\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\_UpgradeReport_Files\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\__history\nFOR /D %%f IN (\"*.\") DO RMDIR /S /Q %%f\\ipch\n\n\n::Remove files\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.layout\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.ncb\"\nFOR /D %%f IN (\"*.\") DO DEL /Q /AH %%f\\\"*.suo\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.plg\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*private.*\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"err*.*\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"tmp*.*\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.pdb\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.aps\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.opt\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.user\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.depend\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.XML\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.o\"\nFOR /D %%f IN (\"*.\") DO DEL /Q /AH %%f\\\"*.old\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.old\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.local\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.dat\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"Makefile.win\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.bak\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.vcb\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.vcl\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.vco\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.log\"\nFOR /D %%f IN (\"*.\") DO DEL /Q %%f\\\"*.sdf\"\n\n\npopd\n\n"
  },
  {
    "path": "external/win32cpp/tools/Compile All.bat",
    "content": "REM  Run the complete set of Compile scripts\n\ncall \"Compile CodeBlocks\"\ncall \"Compile VS2005\"\ncall \"Compile VS2008\"\ncall \"Compile VS2010\"\n\n\n"
  },
  {
    "path": "external/win32cpp/tools/Compile CodeBlocks.bat",
    "content": "REM: A batch program to rebuild the .. samples using Code::Blocks.\nREM: The contents of the log file is erased \n\n\nREM: Set the paths\n@set PATH=c:\\Program Files\\CodeBlocks;%PATH%\n@set PATH=c:\\Program Files (x86)\\CodeBlocks;%PATH%\n\nREM: Remove old files before we start\ncall CleanSamples\ncall CleanTutorials\n\nREM: Change the directory to the parent (Pushes the directory change on to the stack)\npushd ..\\Samples\nif exist \"..\\output\\Borland\" rmdir /s /q \"Win32++\\output\\Borland\"\nif exist \"..\\output\\VS2003\" rmdir /s /q \"Win32++\\output\\VS2003\"\nif exist \"..\\output\\MinGW\" rmdir /s /q \"Win32++\\output\\MinGW\"\n\n\nREM: Compile the code\n\ncodeblocks.exe --rebuild Browser\\ProjectFiles\\Browser.cbp                   >\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild CustomControl\\ProjectFiles\\CustomControl.cbp       >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild Dialog\\ProjectFiles\\Dialog.cbp                     >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild DialogBars\\ProjectFiles\\DialogBars.cbp             >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild DialogDemo\\ProjectFiles\\DialogDemo.cbp             >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild DialogTab\\ProjectFiles\\DialogTab.cbp               >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild Dock\\ProjectFiles\\Dock.cbp                         >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild DockContainer\\ProjectFiles\\DockContainer.cbp       >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild DockTabbedMDI\\ProjectFiles\\DockTabbedMDI.cbp       >>\"..\\output\\CodeBlocks.log\"\nREM codeblocks.exe --rebuild DX\\ProjectFiles\\DX.cbp                         >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild Explorer\\ProjectFiles\\Explorer.cbp                 >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild FastGDI\\ProjectFiles\\FastGDI.cbp                   >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild FormDemo\\ProjectFiles\\FormDemo.cbp                 >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild Frame\\ProjectFiles\\Frame.cbp                       >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild MDIFrame\\ProjectFiles\\MDIFrame.cbp                 >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild MDIFrameDemo\\ProjectFiles\\MDIDemo.cbp              >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild MDIFrameSplitter\\ProjectFiles\\MDIFrameSplitter.cbp >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild Networking\\ClientDlg\\Client.cbp                    >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild Networking\\ServerDlg\\Server.cbp                    >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild NotePad\\ProjectFiles\\Notepad.cbp                   >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild Performance\\ProjectFiles\\Performance.cbp           >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild Picture\\ProjectFiles\\Picture.cbp                   >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild PropertySheet\\ProjectFiles\\PropertySheet.cbp       >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild Scribble\\ProjectFiles\\Scribble.cbp                 >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild Simple\\ProjectFiles\\Simple.cbp                     >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild Splitter\\ProjectFiles\\Splitter.cbp                 >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild TabDemo\\ProjectFiles\\TabDemo.cbp                   >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild Themes\\ProjectFiles\\Themes.cbp                     >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild Threads\\ProjectFiles\\Threads.cbp                   >>\"..\\output\\CodeBlocks.log\"\ncodeblocks.exe --rebuild Tray\\ProjectFiles\\Tray.cbp                         >>\"..\\output\\CodeBlocks.log\"\n\nREM: Copy the executables to the testing directories\nmkdir \"..\\output\\VS2003\"\nmkdir \"..\\output\\VS2003\\Debug\"\n\nECHO \"Copying VS2003 Debug files\" >>\"..\\output\\CodeBlocks.log\"\ncopy Browser\\ProjectFiles\\Microsoft\\Debug\\Browser.exe                   \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy CustomControl\\ProjectFiles\\Microsoft\\Debug\\CustomControl.exe       \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Dialog\\ProjectFiles\\Microsoft\\Debug\\Dialog.exe                     \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DialogBars\\ProjectFiles\\Microsoft\\Debug\\DialogBars.exe             \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DialogDemo\\ProjectFiles\\Microsoft\\Debug\\DialogDemo.exe             \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DialogTab\\ProjectFiles\\Microsoft\\Debug\\DialogTab.exe               \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Dock\\ProjectFiles\\Microsoft\\Debug\\Dock.exe                         \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DockContainer\\ProjectFiles\\Microsoft\\Debug\\DockContainer.exe       \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DockTabbedMDI\\ProjectFiles\\Microsoft\\Debug\\DockTabbedMDI.exe       \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy FormDemo\\ProjectFiles\\Microsoft\\Debug\\FormDemo.exe                 \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\nREM copy DX\\ProjectFiles\\Microsoft\\Debug\\DX.exe                         \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Explorer\\ProjectFiles\\Microsoft\\Debug\\Explorer.exe                 \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy FastGDI\\ProjectFiles\\Microsoft\\Debug\\FastGDI.exe                   \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Frame\\ProjectFiles\\Microsoft\\Debug\\Frame.exe                       \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy MDIFrame\\ProjectFiles\\Microsoft\\Debug\\MDIFrame.exe                 \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy MDIFrameDemo\\ProjectFiles\\Microsoft\\Debug\\MDIDemo.exe              \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy MDIFrameSplitter\\ProjectFiles\\Microsoft\\Debug\\MDIFrameSplitter.exe \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Networking\\ClientDlg\\Microsoft\\Debug\\Client.exe                    \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Networking\\ServerDlg\\Microsoft\\Debug\\Server.exe                    \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy NotePad\\ProjectFiles\\Microsoft\\Debug\\Notepad.exe                   \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Performance\\ProjectFiles\\Microsoft\\Debug\\Performance.exe           \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Picture\\ProjectFiles\\Microsoft\\Debug\\Picture.exe                   \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy PropertySheet\\ProjectFiles\\Microsoft\\Debug\\PropertySheet.exe       \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Scribble\\ProjectFiles\\Microsoft\\Debug\\Scribble.exe                 \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Simple\\ProjectFiles\\Microsoft\\Debug\\Simple.exe                     \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Splitter\\ProjectFiles\\Microsoft\\Debug\\Splitter.exe                 \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy TabDemo\\ProjectFiles\\Microsoft\\Debug\\TabDemo.exe                   \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Themes\\ProjectFiles\\Microsoft\\Debug\\Themes.exe                     \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Threads\\ProjectFiles\\Microsoft\\Debug\\Threads.exe                   \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Tray\\ProjectFiles\\Microsoft\\Debug\\Tray.exe                         \"..\\output\\VS2003\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\n\nmkdir \"..\\output\\VS2003\\Release\"\n\nECHO \"Copying VS2003 Release files\" >>\"..\\output\\CodeBlocks.log\"\ncopy Browser\\ProjectFiles\\Microsoft\\Release\\Browser.exe                   \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy CustomControl\\ProjectFiles\\Microsoft\\Release\\CustomControl.exe       \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Dialog\\ProjectFiles\\Microsoft\\Release\\Dialog.exe                     \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DialogBars\\ProjectFiles\\Microsoft\\Release\\DialogBars.exe             \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DialogDemo\\ProjectFiles\\Microsoft\\Release\\DialogDemo.exe             \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DialogTab\\ProjectFiles\\Microsoft\\Release\\DialogTab.exe               \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Dock\\ProjectFiles\\Microsoft\\Release\\Dock.exe                         \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DockContainer\\ProjectFiles\\Microsoft\\Release\\DockContainer.exe       \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DockTabbedMDI\\ProjectFiles\\Microsoft\\Release\\DockTabbedMDI.exe       \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\nREM copy DX\\ProjectFiles\\Microsoft\\Release\\DX.exe                         \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Explorer\\ProjectFiles\\Microsoft\\Release\\Explorer.exe                 \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy FastGDI\\ProjectFiles\\Microsoft\\Release\\FastGDI.exe                   \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy FormDemo\\ProjectFiles\\Microsoft\\Release\\FormDemo.exe                 \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Frame\\ProjectFiles\\Microsoft\\Release\\Frame.exe                       \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy MDIFrame\\ProjectFiles\\Microsoft\\Release\\MDIFrame.exe                 \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy MDIFrameDemo\\ProjectFiles\\Microsoft\\Release\\MDIDemo.exe              \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy MDIFrameSplitter\\ProjectFiles\\Microsoft\\Release\\MDIFrameSplitter.exe \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Networking\\ClientDlg\\Microsoft\\Release\\Client.exe                    \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Networking\\ServerDlg\\Microsoft\\Release\\Server.exe                    \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy NotePad\\ProjectFiles\\Microsoft\\Release\\Notepad.exe                   \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Performance\\ProjectFiles\\Microsoft\\Release\\Performance.exe           \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Picture\\ProjectFiles\\Microsoft\\Release\\Picture.exe                   \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy PropertySheet\\ProjectFiles\\Microsoft\\Release\\PropertySheet.exe       \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Scribble\\ProjectFiles\\Microsoft\\Release\\Scribble.exe                 \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Simple\\ProjectFiles\\Microsoft\\Release\\Simple.exe                     \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Splitter\\ProjectFiles\\Microsoft\\Release\\Splitter.exe                 \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy TabDemo\\ProjectFiles\\Microsoft\\Release\\TabDemo.exe                   \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Themes\\ProjectFiles\\Microsoft\\Release\\Themes.exe                     \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Threads\\ProjectFiles\\Microsoft\\Release\\Threads.exe                   \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Tray\\ProjectFiles\\Microsoft\\Release\\Tray.exe                         \"..\\output\\VS2003\\Release\"    >>\"..\\output\\CodeBlocks.log\"\n\n\nREM: Copy the executables to the testing directories\nmkdir \"..\\output\\Borland\"\nmkdir \"..\\output\\Borland\\Debug\"\n\nECHO \"Copying Borland Debug files\" >>\"..\\output\\CodeBlocks.log\"\ncopy Browser\\ProjectFiles\\Borland\\Debug\\Browser.exe                   \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy CustomControl\\ProjectFiles\\Borland\\Debug\\CustomControl.exe       \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Dialog\\ProjectFiles\\Borland\\Debug\\Dialog.exe                     \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DialogBars\\ProjectFiles\\Borland\\Debug\\DialogBars.exe             \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DialogDemo\\ProjectFiles\\Borland\\Debug\\DialogDemo.exe             \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DialogTab\\ProjectFiles\\Borland\\Debug\\DialogTab.exe               \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Dock\\ProjectFiles\\Borland\\Debug\\Dock.exe                         \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DockContainer\\ProjectFiles\\Borland\\Debug\\DockContainer.exe       \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DockTabbedMDI\\ProjectFiles\\Borland\\Debug\\DockTabbedMDI.exe       \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\nREM copy DX\\ProjectFiles\\Borland\\Debug\\DX.exe                         \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Explorer\\ProjectFiles\\Borland\\Debug\\Explorer.exe                 \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy FastGDI\\ProjectFiles\\Borland\\Debug\\FastGDI.exe                   \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy FormDemo\\ProjectFiles\\Borland\\Debug\\FormDemo.exe                 \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Frame\\ProjectFiles\\Borland\\Debug\\Frame.exe                       \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy MDIFrame\\ProjectFiles\\Borland\\Debug\\MDIFrame.exe                 \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy MDIFrameDemo\\ProjectFiles\\Borland\\Debug\\MDIDemo.exe              \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy MDIFrameSplitter\\ProjectFiles\\Borland\\Debug\\MDIFrameSplitter.exe \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Networking\\ClientDlg\\Borland\\Debug\\Client.exe                    \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Networking\\ServerDlg\\Borland\\Debug\\Server.exe                    \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy NotePad\\ProjectFiles\\Borland\\Debug\\Notepad.exe                   \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Performance\\ProjectFiles\\Borland\\Debug\\Performance.exe           \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Picture\\ProjectFiles\\Borland\\Debug\\Picture.exe                   \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy PropertySheet\\ProjectFiles\\Borland\\Debug\\PropertySheet.exe       \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Scribble\\ProjectFiles\\Borland\\Debug\\Scribble.exe                 \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Simple\\ProjectFiles\\Borland\\Debug\\Simple.exe                     \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Splitter\\ProjectFiles\\Borland\\Debug\\Splitter.exe                 \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy TabDemo\\ProjectFiles\\Borland\\Debug\\TabDemo.exe                   \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Themes\\ProjectFiles\\Borland\\Debug\\Themes.exe                     \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Threads\\ProjectFiles\\Borland\\Debug\\Threads.exe                   \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Tray\\ProjectFiles\\Borland\\Debug\\Tray.exe                         \"..\\output\\Borland\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\n\nmkdir \"..\\output\\Borland\\Release\"\n\nECHO \"Copying Borland Release files\" >>\"..\\output\\CodeBlocks.log\"\ncopy Browser\\ProjectFiles\\Borland\\Release\\Browser.exe                   \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy CustomControl\\ProjectFiles\\Borland\\Release\\CustomControl.exe       \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Dialog\\ProjectFiles\\Borland\\Release\\Dialog.exe                     \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DialogBars\\ProjectFiles\\Borland\\Release\\DialogBars.exe             \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DialogDemo\\ProjectFiles\\Borland\\Release\\DialogDemo.exe             \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DialogTab\\ProjectFiles\\Borland\\Release\\DialogTab.exe               \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Dock\\ProjectFiles\\Borland\\Release\\Dock.exe                         \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DockContainer\\ProjectFiles\\Borland\\Release\\DockContainer.exe       \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DockTabbedMDI\\ProjectFiles\\Borland\\Release\\DockTabbedMDI.exe       \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\nREM copy DX\\ProjectFiles\\Borland\\Release\\DX.exe                         \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Explorer\\ProjectFiles\\Borland\\Release\\Explorer.exe                 \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy FastGDI\\ProjectFiles\\Borland\\Release\\FastGDI.exe                   \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy FormDemo\\ProjectFiles\\Borland\\Release\\FormDemo.exe                 \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Frame\\ProjectFiles\\Borland\\Release\\Frame.exe                       \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy MDIFrame\\ProjectFiles\\Borland\\Release\\MDIFrame.exe                 \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy MDIFrameDemo\\ProjectFiles\\Borland\\Release\\MDIDemo.exe              \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy MDIFrameSplitter\\ProjectFiles\\Borland\\Release\\MDIFrameSplitter.exe \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Networking\\ClientDlg\\Borland\\Release\\Client.exe                    \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Networking\\ServerDlg\\Borland\\Release\\Server.exe                    \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy NotePad\\ProjectFiles\\Borland\\Release\\Notepad.exe                   \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Performance\\ProjectFiles\\Borland\\Release\\Performance.exe           \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Picture\\ProjectFiles\\Borland\\Release\\Picture.exe                   \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy PropertySheet\\ProjectFiles\\Borland\\Release\\PropertySheet.exe       \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Scribble\\ProjectFiles\\Borland\\Release\\Scribble.exe                 \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Simple\\ProjectFiles\\Borland\\Release\\Simple.exe                     \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Splitter\\ProjectFiles\\Borland\\Release\\Splitter.exe                 \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy TabDemo\\ProjectFiles\\Borland\\Release\\TabDemo.exe                   \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Themes\\ProjectFiles\\Borland\\Release\\Themes.exe                     \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Threads\\ProjectFiles\\Borland\\Release\\Threads.exe                   \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Tray\\ProjectFiles\\Borland\\Release\\Tray.exe                         \"..\\output\\Borland\\Release\"    >>\"..\\output\\CodeBlocks.log\"\n\n\nREM: Copy the executables to the testing directories\nmkdir \"..\\output\\MinGW\"\nmkdir \"..\\output\\MinGW\\Debug\"\n\nECHO \"Copying MinGW Debug files\" >>\"..\\output\\CodeBlocks.log\"\ncopy Browser\\ProjectFiles\\GNU\\Debug\\Browser.exe                   \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy CustomControl\\ProjectFiles\\GNU\\Debug\\CustomControl.exe       \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Dialog\\ProjectFiles\\GNU\\Debug\\Dialog.exe                     \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DialogBars\\ProjectFiles\\GNU\\Debug\\DialogBars.exe             \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DialogDemo\\ProjectFiles\\GNU\\Debug\\DialogDemo.exe             \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DialogTab\\ProjectFiles\\GNU\\Debug\\DialogTab.exe               \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Dock\\ProjectFiles\\GNU\\Debug\\Dock.exe                         \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DockContainer\\ProjectFiles\\GNU\\Debug\\DockContainer.exe       \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DockTabbedMDI\\ProjectFiles\\GNU\\Debug\\DockTabbedMDI.exe       \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\nREM copy DX\\ProjectFiles\\GNU\\Debug\\DX.exe                         \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Explorer\\ProjectFiles\\GNU\\Debug\\Explorer.exe                 \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy FastGDI\\ProjectFiles\\GNU\\Debug\\FastGDI.exe                   \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy FormDemo\\ProjectFiles\\GNU\\Debug\\FormDemo.exe                 \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Frame\\ProjectFiles\\GNU\\Debug\\Frame.exe                       \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy MDIFrame\\ProjectFiles\\GNU\\Debug\\MDIFrame.exe                 \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy MDIFrameDemo\\ProjectFiles\\GNU\\Debug\\MDIDemo.exe              \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy MDIFrameSplitter\\ProjectFiles\\GNU\\Debug\\MDIFrameSplitter.exe \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Networking\\ClientDlg\\GNU\\Debug\\Client.exe                    \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Networking\\ServerDlg\\GNU\\Debug\\Server.exe                    \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy NotePad\\ProjectFiles\\GNU\\Debug\\Notepad.exe                   \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Performance\\ProjectFiles\\GNU\\Debug\\Performance.exe           \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Picture\\ProjectFiles\\GNU\\Debug\\Picture.exe                   \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy PropertySheet\\ProjectFiles\\GNU\\Debug\\PropertySheet.exe       \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Scribble\\ProjectFiles\\GNU\\Debug\\Scribble.exe                 \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Simple\\ProjectFiles\\GNU\\Debug\\Simple.exe                     \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Splitter\\ProjectFiles\\GNU\\Debug\\Splitter.exe                 \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy TabDemo\\ProjectFiles\\GNU\\Debug\\TabDemo.exe                   \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Themes\\ProjectFiles\\GNU\\Debug\\Themes.exe                     \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Threads\\ProjectFiles\\GNU\\Debug\\Threads.exe                   \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Tray\\ProjectFiles\\GNU\\Debug\\Tray.exe                         \"..\\output\\MinGW\\Debug\"    >>\"..\\output\\CodeBlocks.log\"\n\nmkdir \"..\\output\\MinGW\\Release\"\n\nECHO \"Copying MinGW Release files\" >>\"..\\output\\CodeBlocks.log\"\ncopy Browser\\ProjectFiles\\GNU\\Release\\Browser.exe                   \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy CustomControl\\ProjectFiles\\GNU\\Release\\CustomControl.exe       \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Dialog\\ProjectFiles\\GNU\\Release\\Dialog.exe                     \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DialogBars\\ProjectFiles\\GNU\\Release\\DialogBars.exe             \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DialogDemo\\ProjectFiles\\GNU\\Release\\DialogDemo.exe             \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DialogTab\\ProjectFiles\\GNU\\Release\\DialogTab.exe               \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Dock\\ProjectFiles\\GNU\\Release\\Dock.exe                         \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DockContainer\\ProjectFiles\\GNU\\Release\\DockContainer.exe       \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy DockTabbedMDI\\ProjectFiles\\GNU\\Release\\DockTabbedMDI.exe       \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\nREM copy DX\\ProjectFiles\\GNU\\Release\\DX.exe                         \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Explorer\\ProjectFiles\\GNU\\Release\\Explorer.exe                 \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy FastGDI\\ProjectFiles\\GNU\\Release\\FastGDI.exe                   \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy FormDemo\\ProjectFiles\\GNU\\Release\\FormDemo.exe                 \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Frame\\ProjectFiles\\GNU\\Release\\Frame.exe                       \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy MDIFrame\\ProjectFiles\\GNU\\Release\\MDIFrame.exe                 \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy MDIFrameDemo\\ProjectFiles\\GNU\\Release\\MDIDemo.exe              \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy MDIFrameSplitter\\ProjectFiles\\GNU\\Release\\MDIFrameSplitter.exe \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Networking\\ClientDlg\\GNU\\Release\\Client.exe                    \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Networking\\ServerDlg\\GNU\\Release\\Server.exe                    \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy NotePad\\ProjectFiles\\GNU\\Release\\Notepad.exe                   \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Performance\\ProjectFiles\\GNU\\Release\\Performance.exe           \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Picture\\ProjectFiles\\GNU\\Release\\Picture.exe                   \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy PropertySheet\\ProjectFiles\\GNU\\Release\\PropertySheet.exe       \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Scribble\\ProjectFiles\\GNU\\Release\\Scribble.exe                 \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Simple\\ProjectFiles\\GNU\\Release\\Simple.exe                     \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Splitter\\ProjectFiles\\GNU\\Release\\Splitter.exe                 \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy TabDemo\\ProjectFiles\\GNU\\Release\\TabDemo.exe                   \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Themes\\ProjectFiles\\GNU\\Release\\Themes.exe                     \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Threads\\ProjectFiles\\GNU\\Release\\Threads.exe                   \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\ncopy Tray\\ProjectFiles\\GNU\\Debug\\Tray.exe                           \"..\\output\\MinGW\\Release\"    >>\"..\\output\\CodeBlocks.log\"\n\n\nREM: Pop the directory change off the stack\npopd\n\n"
  },
  {
    "path": "external/win32cpp/tools/Compile VS2005 Express.bat",
    "content": "REM: A batch program to rebuild the Win32++ samples using VS2005 Express.\nREM: The contents of the log file is erased\nREM: The contents of the output\\VS2005 directory will be erased\n\nREM: Set the paths and environment variables\ncall \"C:\\Program Files (x86)\\Microsoft Visual Studio 8\\VC\\vcvarsall.bat\" x86\n\n\n::Cleanup\ncall CleanSamples\ncall CleanTutorials\n\n@echo on\n\nREM: Change the directory to the Samples parent\npushd ..\\Samples\nif exist \"..\\output\\VS2005\\Debug\" rmdir /s /q \"..\\output\\VS2005\\Debug\"\nif exist \"..\\output\\VS2005\\Release\" rmdir /s /q \"..\\output\\VS2005\\Release\"\nif exist \"..\\output\\VS2005\\Tutorials\" rmdir /s /q \"..\\output\\VS2005\\Tutorials\"\n\n\n::Compile code\nvcbuild /rebuild Browser\\ProjectFiles\\Browser_2005.vcproj debug                     > \"..\\output\\VS2005.log\"\nvcbuild /rebuild Browser\\ProjectFiles\\Browser_2005.vcproj release                   >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild CustomControl\\ProjectFiles\\CustomControl_2005.vcproj debug         >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild CustomControl\\ProjectFiles\\CustomControl_2005.vcproj release       >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Dialog\\ProjectFiles\\Dialog_2005.vcproj debug                       >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Dialog\\ProjectFiles\\Dialog_2005.vcproj release                     >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild DialogBars\\ProjectFiles\\DialogBars_2005.vcproj debug               >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild DialogBars\\ProjectFiles\\DialogBars_2005.vcproj release             >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild DialogDemo\\ProjectFiles\\DialogDemo_2005.vcproj debug               >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild DialogDemo\\ProjectFiles\\DialogDemo_2005.vcproj release             >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild DialogTab\\ProjectFiles\\DialogTab_2005.vcproj debug                 >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild DialogTab\\ProjectFiles\\DialogTab_2005.vcproj release               >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild DirectX\\ProjectFiles\\DirectX_2005.vcproj debug                     >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild DirectX\\ProjectFiles\\DirectX_2005.vcproj release                   >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Dock\\ProjectFiles\\Dock_2005.vcproj debug                           >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Dock\\ProjectFiles\\Dock_2005.vcproj release                         >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild DockContainer\\ProjectFiles\\DockContainer_2005.vcproj debug         >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild DockContainer\\ProjectFiles\\DockContainer_2005.vcproj release       >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild DockTabbedMDI\\ProjectFiles\\DockTabbedMDI_2005.vcproj debug         >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild DockTabbedMDI\\ProjectFiles\\DockTabbedMDI_2005.vcproj release       >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Explorer\\ProjectFiles\\Explorer_2005.vcproj debug                   >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Explorer\\ProjectFiles\\Explorer_2005.vcproj release                 >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild FastGDI\\ProjectFiles\\FastGDI_2005.vcproj debug                     >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild FastGDI\\ProjectFiles\\FastGDI_2005.vcproj release                   >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild FormDemo\\ProjectFiles\\FormDemo_2005.vcproj debug                   >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild FormDemo\\ProjectFiles\\FormDemo_2005.vcproj release                 >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Frame\\ProjectFiles\\Frame_2005.vcproj debug\t\t\t                >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Frame\\ProjectFiles\\Frame_2005.vcproj release                       >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild GDIPlus\\ProjectFiles\\GDIPlus_2005.vcproj debug\t\t\t            >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild GDIPlus\\ProjectFiles\\GDIPlus_2005.vcproj release                   >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild MDIFrame\\ProjectFiles\\MDIFrame_2005.vcproj debug                   >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild MDIFrame\\ProjectFiles\\MDIFrame_2005.vcproj release                 >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild MDIFrameDemo\\ProjectFiles\\MDIDemo_2005.vcproj debug                >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild MDIFrameDemo\\ProjectFiles\\MDIDemo_2005.vcproj release              >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild MDIFrameSplitter\\ProjectFiles\\MDIFrameSplitter_2005.vcproj debug   >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild MDIFrameSplitter\\ProjectFiles\\MDIFrameSplitter_2005.vcproj release >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Networking\\ClientDlg\\Client_2005.vcproj debug                      >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Networking\\ClientDlg\\Client_2005.vcproj release                    >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Networking\\ServerDlg\\Server_2005.vcproj debug                      >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Networking\\ServerDlg\\Server_2005.vcproj release                    >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild NotePad\\ProjectFiles\\Notepad_2005.vcproj debug                     >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild NotePad\\ProjectFiles\\Notepad_2005.vcproj release                   >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Performance\\ProjectFiles\\Performance_2005.vcproj debug             >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Performance\\ProjectFiles\\Performance_2005.vcproj release           >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Picture\\ProjectFiles\\Picture_2005.vcproj debug                     >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Picture\\ProjectFiles\\Picture_2005.vcproj release                   >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild PropertySheet\\ProjectFiles\\PropertySheet_2005.vcproj debug         >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild PropertySheet\\ProjectFiles\\PropertySheet_2005.vcproj release       >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Scribble\\ProjectFiles\\Scribble_2005.vcproj debug                   >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Scribble\\ProjectFiles\\Scribble_2005.vcproj release                 >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Simple\\ProjectFiles\\Simple_2005.vcproj debug                       >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Simple\\ProjectFiles\\Simple_2005.vcproj release                     >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Splitter\\ProjectFiles\\Splitter_2005.vcproj debug                   >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Splitter\\ProjectFiles\\Splitter_2005.vcproj release                 >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild RibbonFrame\\ProjectFiles\\RibbonFrame_2005.vcproj debug             >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild RibbonFrame\\ProjectFiles\\RibbonFrame_2005.vcproj release           >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild RibbonSimple\\ProjectFiles\\SimpleRibbon_2005.vcproj debug           >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild RibbonSimple\\ProjectFiles\\SimpleRibbon_2005.vcproj release         >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild TabDemo\\ProjectFiles\\TabDemo_2005.vcproj debug                     >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild TabDemo\\ProjectFiles\\TabDemo_2005.vcproj release                   >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild TaskDialog\\ProjectFiles\\TaskDialog_2005.vcproj debug               >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild TaskDialog\\ProjectFiles\\TaskDialog_2005.vcproj release             >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Themes\\ProjectFiles\\Themes_2005.vcproj debug                       >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Themes\\ProjectFiles\\Themes_2005.vcproj release                     >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Threads\\ProjectFiles\\Threads_2005.vcproj debug                     >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Threads\\ProjectFiles\\Threads_2005.vcproj release                   >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Tray\\ProjectFiles\\Tray_2005.vcproj debug                           >>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Tray\\ProjectFiles\\Tray_2005.vcproj release                         >>\"..\\output\\VS2005.log\"\n\nmkdir \"..\\output\\VS2005\"\nmkdir \"..\\output\\VS2005\\Debug\"\n\nECHO \"Copying Debug Samples\" >>\"..\\output\\VS2005.log\"\ncopy Browser\\ProjectFiles\\Debug\\Browser.exe                   \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy CustomControl\\ProjectFiles\\Debug\\CustomControl.exe       \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Dialog\\ProjectFiles\\Debug\\Dialog.exe                     \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy DialogBars\\ProjectFiles\\Debug\\DialogBars.exe             \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy DialogDemo\\ProjectFiles\\Debug\\DialogDemo.exe             \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy DialogTab\\ProjectFiles\\Debug\\DialogTab.exe               \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy DirectX\\ProjectFiles\\Debug\\DirectX.exe                   \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Dock\\ProjectFiles\\Debug\\Dock.exe                         \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy DockContainer\\ProjectFiles\\Debug\\DockContainer.exe       \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy DockTabbedMDI\\ProjectFiles\\Debug\\DockTabbedMDI.exe       \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Explorer\\ProjectFiles\\Debug\\Explorer.exe                 \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy FastGDI\\ProjectFiles\\Debug\\FastGDI.exe                   \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy FormDemo\\ProjectFiles\\Debug\\FormDemo.exe                 \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Frame\\ProjectFiles\\Debug\\Frame.exe                       \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy GDIPlus\\ProjectFiles\\Debug\\GDIPlus.exe                   \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy MDIFrame\\ProjectFiles\\Debug\\MDIFrame.exe                 \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy MDIFrameDemo\\ProjectFiles\\Debug\\MDIDemo.exe              \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy MDIFrameSplitter\\ProjectFiles\\Debug\\MDIFrameSplitter.exe \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Networking\\ClientDlg\\Debug\\Client.exe                    \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Networking\\ServerDlg\\Debug\\Server.exe                    \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy NotePad\\ProjectFiles\\Debug\\Notepad.exe                   \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Performance\\ProjectFiles\\Debug\\Performance.exe           \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Picture\\ProjectFiles\\Debug\\Picture.exe                   \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy PropertySheet\\ProjectFiles\\Debug\\PropertySheet.exe       \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy RibbonFrame\\ProjectFiles\\Debug\\RibbonFrame.exe           \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy RibbonSimple\\ProjectFiles\\Debug\\SimpleRibbon.exe         \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Scribble\\ProjectFiles\\Debug\\Scribble.exe                 \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Simple\\ProjectFiles\\Debug\\Simple.exe                     \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Splitter\\ProjectFiles\\Debug\\Splitter.exe                 \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy TabDemo\\ProjectFiles\\Debug\\TabDemo.exe                   \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy TaskDialog\\ProjectFiles\\Debug\\TaskDialog.exe             \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Themes\\ProjectFiles\\Debug\\Themes.exe                     \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Threads\\ProjectFiles\\Debug\\Threads.exe                   \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Tray\\ProjectFiles\\Debug\\Tray.exe                         \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\n\nmkdir \"..\\output\\VS2005\\Release\"\n\nECHO \"Copying Release Samples\" >>\"..\\output\\VS2005.log\"\ncopy Browser\\ProjectFiles\\Release\\Browser.exe                   \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy CustomControl\\ProjectFiles\\Release\\CustomControl.exe       \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Dialog\\ProjectFiles\\Release\\Dialog.exe                     \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy DialogBars\\ProjectFiles\\Release\\DialogBars.exe             \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy DialogDemo\\ProjectFiles\\Release\\DialogDemo.exe             \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy DialogTab\\ProjectFiles\\Release\\DialogTab.exe               \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy DirectX\\ProjectFiles\\Release\\DirectX.exe                   \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Dock\\ProjectFiles\\Release\\Dock.exe                         \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy DockContainer\\ProjectFiles\\Release\\DockContainer.exe       \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy DockTabbedMDI\\ProjectFiles\\Release\\DockTabbedMDI.exe       \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Explorer\\ProjectFiles\\Release\\Explorer.exe                 \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy FastGDI\\ProjectFiles\\Release\\FastGDI.exe                   \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy FormDemo\\ProjectFiles\\Release\\FormDemo.exe                 \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Frame\\ProjectFiles\\Release\\Frame.exe                       \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy GDIPlus\\ProjectFiles\\Release\\GDIPlus.exe                   \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy MDIFrame\\ProjectFiles\\Release\\MDIFrame.exe                 \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy MDIFrameDemo\\ProjectFiles\\Release\\MDIDemo.exe              \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy MDIFrameSplitter\\ProjectFiles\\Release\\MDIFrameSplitter.exe \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Networking\\ClientDlg\\Release\\Client.exe                    \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Networking\\ServerDlg\\Release\\Server.exe                    \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy NotePad\\ProjectFiles\\Release\\Notepad.exe                   \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Performance\\ProjectFiles\\Release\\Performance.exe           \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Picture\\ProjectFiles\\Release\\Picture.exe                   \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy PropertySheet\\ProjectFiles\\Release\\PropertySheet.exe       \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy RibbonFrame\\ProjectFiles\\Release\\RibbonFrame.exe           \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy RibbonSimple\\ProjectFiles\\Release\\SimpleRibbon.exe         \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Scribble\\ProjectFiles\\Release\\Scribble.exe                 \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Simple\\ProjectFiles\\Release\\Simple.exe                     \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Splitter\\ProjectFiles\\Release\\Splitter.exe                 \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy TabDemo\\ProjectFiles\\Release\\TabDemo.exe                   \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy TaskDialog\\ProjectFiles\\Release\\TaskDialog.exe             \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Themes\\ProjectFiles\\Release\\Themes.exe                     \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Threads\\ProjectFiles\\Release\\Threads.exe                   \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Tray\\ProjectFiles\\Release\\Tray.exe                         \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\n\nREM: Change the directory to the Tutorials parent\npopd\npushd ..\\Tutorials\n\nREM: Compile Tutorials\nECHO \"Compliling Tutorials\" >>\"..\\output\\VS2005.log\"\n::Compile code\nvcbuild /rebuild Tutorial1\\Tutorial1_2005.vcproj debug \t\t>>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Tutorial1\\Tutorial1_2005.vcproj release\t\t>>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Tutorial2\\Tutorial2_2005.vcproj debug\t\t>>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Tutorial2\\Tutorial2_2005.vcproj release\t\t>>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Tutorial3\\Tutorial3_2005.vcproj debug\t\t>>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Tutorial3\\Tutorial3_2005.vcproj release\t\t>>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Tutorial4\\Tutorial4_2005.vcproj debug\t\t>>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Tutorial4\\Tutorial4_2005.vcproj release\t\t>>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Tutorial5\\Tutorial5_2005.vcproj debug\t\t>>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Tutorial5\\Tutorial5_2005.vcproj release\t\t>>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Tutorial6\\Tutorial6_2005.vcproj debug\t\t>>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Tutorial6\\Tutorial6_2005.vcproj release\t\t>>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Tutorial7\\Tutorial7_2005.vcproj debug\t\t>>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Tutorial7\\Tutorial7_2005.vcproj release\t\t>>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Tutorial8\\Tutorial8_2005.vcproj debug\t\t>>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Tutorial8\\Tutorial8_2005.vcproj release\t\t>>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Tutorial9\\Tutorial9_2005.vcproj debug\t\t>>\"..\\output\\VS2005.log\"\nvcbuild /rebuild Tutorial9\\Tutorial9_2005.vcproj release\t\t>>\"..\\output\\VS2005.log\"\n\nmkdir \"..\\output\\VS2005\\Tutorials\"\nmkdir \"..\\output\\VS2005\\Tutorials\\Debug\"\n\nECHO \"Copying Debug Tutorials\" >>\"..\\output\\VS2005.log\"\ncopy Tutorial1\\Debug\\Tutorial1.exe         \"..\\output\\VS2005\\Tutorials\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial2\\Debug\\Tutorial2.exe         \"..\\output\\VS2005\\Tutorials\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial3\\Debug\\Tutorial3.exe         \"..\\output\\VS2005\\Tutorials\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial4\\Debug\\Tutorial4.exe         \"..\\output\\VS2005\\Tutorials\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial5\\Debug\\Tutorial5.exe         \"..\\output\\VS2005\\Tutorials\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial6\\Debug\\Tutorial6.exe         \"..\\output\\VS2005\\Tutorials\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial7\\Debug\\Tutorial7.exe         \"..\\output\\VS2005\\Tutorials\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial8\\Debug\\Tutorial8.exe         \"..\\output\\VS2005\\Tutorials\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial9\\Debug\\Tutorial9.exe         \"..\\output\\VS2005\\Tutorials\\Debug\"    >>\"..\\output\\VS2005.log\"\n\nmkdir \"..\\output\\VS2005\\Tutorials\\Release\"\n\nECHO \"Copying Release Tutorials\" >>\"..\\output\\VS2005.log\"\ncopy Tutorial1\\Release\\Tutorial1.exe       \"..\\output\\VS2005\\Tutorials\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial2\\Release\\Tutorial2.exe       \"..\\output\\VS2005\\Tutorials\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial3\\Release\\Tutorial3.exe       \"..\\output\\VS2005\\Tutorials\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial4\\Release\\Tutorial4.exe       \"..\\output\\VS2005\\Tutorials\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial5\\Release\\Tutorial5.exe       \"..\\output\\VS2005\\Tutorials\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial6\\Release\\Tutorial6.exe       \"..\\output\\VS2005\\Tutorials\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial7\\Release\\Tutorial7.exe       \"..\\output\\VS2005\\Tutorials\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial8\\Release\\Tutorial8.exe       \"..\\output\\VS2005\\Tutorials\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial9\\Release\\Tutorial9.exe       \"..\\output\\VS2005\\Tutorials\\Release\"    >>\"..\\output\\VS2005.log\"\n\nREM: Pop the directory change off the stack\npopd\n\n\n"
  },
  {
    "path": "external/win32cpp/tools/Compile VS2005.bat",
    "content": "REM: A batch program to rebuild the Win32++ samples using VS2005.\nREM: The contents of the log file is erased\nREM: The contents of the VS2005 directory will be erased\n\nREM: Set the paths and environment variables\ncall \"C:\\Program Files (x86)\\Microsoft Visual Studio 8\\VC\\vcvarsall.bat\" x86\n\n::Cleanup\ncall CleanSamples\ncall CleanTutorials\n\n@echo on\n\nREM: Change the directory to the Samples parent\npushd ..\\Samples\nif exist \"..\\output\\VS2005\\Debug\" rmdir /s /q \"..\\output\\VS2005\\Debug\"\nif exist \"..\\output\\VS2005\\Release\" rmdir /s /q \"..\\output\\VS2005\\Release\"\nif exist \"..\\output\\VS2005\\Tutorials\" rmdir /s /q \"..\\output\\VS2005\\Tutorials\"\n\n\n::Compile code\ndevenv /build Debug Browser\\ProjectFiles\\Browser_2005.sln                       > \"..\\output\\VS2005.log\"\ndevenv /build Release Browser\\ProjectFiles\\Browser_2005.sln                     >>\"..\\output\\VS2005.log\"\ndevenv /build Debug CustomControl\\ProjectFiles\\CustomControl_2005.sln           >>\"..\\output\\VS2005.log\"\ndevenv /build Release CustomControl\\ProjectFiles\\CustomControl_2005.sln         >>\"..\\output\\VS2005.log\"\ndevenv /build Debug Dialog\\ProjectFiles\\Dialog_2005.sln                         >>\"..\\output\\VS2005.log\"\ndevenv /build Release Dialog\\ProjectFiles\\Dialog_2005.sln                       >>\"..\\output\\VS2005.log\"\ndevenv /build Debug DialogBars\\ProjectFiles\\DialogBars_2005.sln                 >>\"..\\output\\VS2005.log\"\ndevenv /build Release DialogBars\\ProjectFiles\\DialogBars_2005.sln               >>\"..\\output\\VS2005.log\"\ndevenv /build Debug DialogDemo\\ProjectFiles\\DialogDemo_2005.sln                 >>\"..\\output\\VS2005.log\"\ndevenv /build Release DialogDemo\\ProjectFiles\\DialogDemo_2005.sln               >>\"..\\output\\VS2005.log\"\ndevenv /build Debug DialogTab\\ProjectFiles\\DialogTab_2005.sln                   >>\"..\\output\\VS2005.log\"\ndevenv /build Release DialogTab\\ProjectFiles\\DialogTab_2005.sln                 >>\"..\\output\\VS2005.log\"\ndevenv /build Debug DirectX\\ProjectFiles\\DirectX_2005.sln                       >>\"..\\output\\VS2005.log\"\ndevenv /build Release DirectX\\ProjectFiles\\DirectX_2005.sln                     >>\"..\\output\\VS2005.log\"\ndevenv /build Debug Dock\\ProjectFiles\\Dock_2005.sln                             >>\"..\\output\\VS2005.log\"\ndevenv /build Release Dock\\ProjectFiles\\Dock_2005.sln                           >>\"..\\output\\VS2005.log\"\ndevenv /build Debug DockContainer\\ProjectFiles\\DockContainer_2005.sln           >>\"..\\output\\VS2005.log\"\ndevenv /build Release DockContainer\\ProjectFiles\\DockContainer_2005.sln         >>\"..\\output\\VS2005.log\"\ndevenv /build Debug DockTabbedMDI\\ProjectFiles\\DockTabbedMDI_2005.sln           >>\"..\\output\\VS2005.log\"\ndevenv /build Release DockTabbedMDI\\ProjectFiles\\DockTabbedMDI_2005.sln         >>\"..\\output\\VS2005.log\"\ndevenv /build Debug Explorer\\ProjectFiles\\Explorer_2005.sln                     >>\"..\\output\\VS2005.log\"\ndevenv /build Release Explorer\\ProjectFiles\\Explorer_2005.sln \t\t\t        >>\"..\\output\\VS2005.log\"\ndevenv /build Debug FastGDI\\ProjectFiles\\FastGDI_2005.sln                       >>\"..\\output\\VS2005.log\"\ndevenv /build Release FastGDI\\ProjectFiles\\FastGDI_2005.sln                     >>\"..\\output\\VS2005.log\"\ndevenv /build Debug FormDemo\\ProjectFiles\\FormDemo_2005.sln                     >>\"..\\output\\VS2005.log\"\ndevenv /build Release FormDemo\\ProjectFiles\\FormDemo_2005.sln                   >>\"..\\output\\VS2005.log\"\ndevenv /build Debug Frame\\ProjectFiles\\Frame_2005.sln                           >>\"..\\output\\VS2005.log\"\ndevenv /build Release Frame\\ProjectFiles\\Frame_2005.sln                         >>\"..\\output\\VS2005.log\"\ndevenv /build Debug GDIPlus\\ProjectFiles\\GDIPlus_2005.sln                       >>\"..\\output\\VS2005.log\"\ndevenv /build Release GDIPlus\\ProjectFiles\\GDIPlus_2005.sln                     >>\"..\\output\\VS2005.log\"\ndevenv /build Debug MDIFrame\\ProjectFiles\\MDIFrame_2005.sln                     >>\"..\\output\\VS2005.log\"\ndevenv /build Release MDIFrame\\ProjectFiles\\MDIFrame_2005.sln                   >>\"..\\output\\VS2005.log\"\ndevenv /build Debug MDIFrameDemo\\ProjectFiles\\MDIDemo_2005.sln                  >>\"..\\output\\VS2005.log\"\ndevenv /build Release MDIFrameDemo\\ProjectFiles\\MDIDemo_2005.sln                >>\"..\\output\\VS2005.log\"\ndevenv /build Debug MDIFrameSplitter\\ProjectFiles\\MDIFrameSplitter_2005.sln     >>\"..\\output\\VS2005.log\"\ndevenv /build Release MDIFrameSplitter\\ProjectFiles\\MDIFrameSplitter_2005.sln   >>\"..\\output\\VS2005.log\"\ndevenv /build Debug Networking\\ClientDlg\\Client_2005.sln                        >>\"..\\output\\VS2005.log\"\ndevenv /build Release Networking\\ClientDlg\\Client_2005.sln                      >>\"..\\output\\VS2005.log\"\ndevenv /build Debug Networking\\ServerDlg\\Server_2005.sln                        >>\"..\\output\\VS2005.log\"\ndevenv /build Release Networking\\ServerDlg\\Server_2005.sln                      >>\"..\\output\\VS2005.log\"\ndevenv /build Debug NotePad\\ProjectFiles\\Notepad_2005.sln                       >>\"..\\output\\VS2005.log\"\ndevenv /build Release NotePad\\ProjectFiles\\Notepad_2005.sln                     >>\"..\\output\\VS2005.log\"\ndevenv /build Debug Performance\\ProjectFiles\\Performance_2005.sln               >>\"..\\output\\VS2005.log\"\ndevenv /build Release Performance\\ProjectFiles\\Performance_2005.sln             >>\"..\\output\\VS2005.log\"\ndevenv /build Debug Picture\\ProjectFiles\\Picture_2005.sln                       >>\"..\\output\\VS2005.log\"\ndevenv /build Release Picture\\ProjectFiles\\Picture_2005.sln                     >>\"..\\output\\VS2005.log\"\ndevenv /build Debug PropertySheet\\ProjectFiles\\PropertySheet_2005.sln           >>\"..\\output\\VS2005.log\"\ndevenv /build Release PropertySheet\\ProjectFiles\\PropertySheet_2005.sln         >>\"..\\output\\VS2005.log\"\ndevenv /build Debug RibbonFrame\\ProjectFiles\\RibbonFrame_2005.sln               >>\"..\\output\\VS2005.log\"\ndevenv /build Release RibbonFrame\\ProjectFiles\\RibbonFrame_2005.sln             >>\"..\\output\\VS2005.log\"\ndevenv /build Debug RibbonSimple\\ProjectFiles\\SimpleRibbon_2005.sln             >>\"..\\output\\VS2005.log\"\ndevenv /build Release RibbonSimple\\ProjectFiles\\SimpleRibbon_2005.sln           >>\"..\\output\\VS2005.log\"\ndevenv /build Debug Scribble\\ProjectFiles\\Scribble_2005.sln                     >>\"..\\output\\VS2005.log\"\ndevenv /build Release Scribble\\ProjectFiles\\Scribble_2005.sln                   >>\"..\\output\\VS2005.log\"\ndevenv /build Debug Simple\\ProjectFiles\\Simple_2005.sln                         >>\"..\\output\\VS2005.log\"\ndevenv /build Release Simple\\ProjectFiles\\Simple_2005.sln                       >>\"..\\output\\VS2005.log\"\ndevenv /build Debug Splitter\\ProjectFiles\\Splitter_2005.sln                     >>\"..\\output\\VS2005.log\"\ndevenv /build Release Splitter\\ProjectFiles\\Splitter_2005.sln                   >>\"..\\output\\VS2005.log\"\ndevenv /build Debug TabDemo\\ProjectFiles\\TabDemo_2005.sln                       >>\"..\\output\\VS2005.log\"\ndevenv /build Release TabDemo\\ProjectFiles\\TabDemo_2005.sln                     >>\"..\\output\\VS2005.log\"\ndevenv /build Debug TaskDialog\\ProjectFiles\\TaskDialog_2005.sln                 >>\"..\\output\\VS2005.log\"\ndevenv /build Release TaskDialog\\ProjectFiles\\TaskDialog_2005.sln               >>\"..\\output\\VS2005.log\"\ndevenv /build Debug Themes\\ProjectFiles\\Themes_2005.sln                         >>\"..\\output\\VS2005.log\"\ndevenv /build Release Themes\\ProjectFiles\\Themes_2005.sln                       >>\"..\\output\\VS2005.log\"\ndevenv /build Debug Threads\\ProjectFiles\\Threads_2005.sln                       >>\"..\\output\\VS2005.log\"\ndevenv /build Release Threads\\ProjectFiles\\Threads_2005.sln                     >>\"..\\output\\VS2005.log\"\ndevenv /build Debug Tray\\ProjectFiles\\Tray_2005.sln                             >>\"..\\output\\VS2005.log\"\ndevenv /build Release Tray\\ProjectFiles\\Tray_2005.sln                           >>\"..\\output\\VS2005.log\"\n\nmkdir \"..\\output\\VS2005\"\nmkdir \"..\\output\\VS2005\\Debug\"\n\nECHO \"Copying Debug Samples\" >>\"..\\output\\VS2005.log\"\ncopy Browser\\ProjectFiles\\Debug\\Browser.exe                   \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy CustomControl\\ProjectFiles\\Debug\\CustomControl.exe       \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Dialog\\ProjectFiles\\Debug\\Dialog.exe                     \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy DialogBars\\ProjectFiles\\Debug\\DialogBars.exe             \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy DialogDemo\\ProjectFiles\\Debug\\DialogDemo.exe             \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy DialogTab\\ProjectFiles\\Debug\\DialogTab.exe               \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy DirectX\\ProjectFiles\\Debug\\DirectX.exe                   \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Dock\\ProjectFiles\\Debug\\Dock.exe                         \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy DockContainer\\ProjectFiles\\Debug\\DockContainer.exe       \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy DockTabbedMDI\\ProjectFiles\\Debug\\DockTabbedMDI.exe       \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Explorer\\ProjectFiles\\Debug\\Explorer.exe                 \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy FastGDI\\ProjectFiles\\Debug\\FastGDI.exe                   \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy FormDemo\\ProjectFiles\\Debug\\FormDemo.exe                 \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Frame\\ProjectFiles\\Debug\\Frame.exe                       \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy GDIPlus\\ProjectFiles\\Debug\\GDIPlus.exe                   \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy MDIFrame\\ProjectFiles\\Debug\\MDIFrame.exe                 \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy MDIFrameDemo\\ProjectFiles\\Debug\\MDIDemo.exe              \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy MDIFrameSplitter\\ProjectFiles\\Debug\\MDIFrameSplitter.exe \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Networking\\ClientDlg\\Debug\\Client.exe                    \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Networking\\ServerDlg\\Debug\\Server.exe                    \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy NotePad\\ProjectFiles\\Debug\\Notepad.exe                   \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Performance\\ProjectFiles\\Debug\\Performance.exe           \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Picture\\ProjectFiles\\Debug\\Picture.exe                   \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy PropertySheet\\ProjectFiles\\Debug\\PropertySheet.exe       \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy RibbonFrame\\ProjectFiles\\Debug\\RibbonFrame.exe           \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy RibbonSimple\\ProjectFiles\\Debug\\SimpleRibbon.exe         \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Scribble\\ProjectFiles\\Debug\\Scribble.exe                 \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Simple\\ProjectFiles\\Debug\\Simple.exe                     \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Splitter\\ProjectFiles\\Debug\\Splitter.exe                 \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy TabDemo\\ProjectFiles\\Debug\\TabDemo.exe                   \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy TaskDialog\\ProjectFiles\\Debug\\TaskDialog.exe             \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Themes\\ProjectFiles\\Debug\\Themes.exe                     \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Threads\\ProjectFiles\\Debug\\Threads.exe                   \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Tray\\ProjectFiles\\Debug\\Tray.exe                         \"..\\output\\VS2005\\Debug\"    >>\"..\\output\\VS2005.log\"\n\nmkdir \"..\\output\\VS2005\\Release\"\n\nECHO \"Copying Release Samples\" >>\"..\\output\\VS2005.log\"\ncopy Browser\\ProjectFiles\\Release\\Browser.exe                   \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy CustomControl\\ProjectFiles\\Release\\CustomControl.exe       \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Dialog\\ProjectFiles\\Release\\Dialog.exe                     \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy DialogBars\\ProjectFiles\\Release\\DialogBars.exe             \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy DialogDemo\\ProjectFiles\\Release\\DialogDemo.exe             \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy DialogTab\\ProjectFiles\\Release\\DialogTab.exe               \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy DirectX\\ProjectFiles\\Release\\DirectX.exe                   \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Dock\\ProjectFiles\\Release\\Dock.exe                         \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy DockContainer\\ProjectFiles\\Release\\DockContainer.exe       \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy DockTabbedMDI\\ProjectFiles\\Release\\DockTabbedMDI.exe       \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Explorer\\ProjectFiles\\Release\\Explorer.exe                 \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy FastGDI\\ProjectFiles\\Release\\FastGDI.exe                   \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy FormDemo\\ProjectFiles\\Release\\FormDemo.exe                 \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Frame\\ProjectFiles\\Release\\Frame.exe                       \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy GDIPlus\\ProjectFiles\\Release\\GDIPlus.exe                   \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy MDIFrame\\ProjectFiles\\Release\\MDIFrame.exe                 \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy MDIFrameDemo\\ProjectFiles\\Release\\MDIDemo.exe              \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy MDIFrameSplitter\\ProjectFiles\\Release\\MDIFrameSplitter.exe \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Networking\\ClientDlg\\Release\\Client.exe                    \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Networking\\ServerDlg\\Release\\Server.exe                    \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy NotePad\\ProjectFiles\\Release\\Notepad.exe                   \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Performance\\ProjectFiles\\Release\\Performance.exe           \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Picture\\ProjectFiles\\Release\\Picture.exe                   \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy PropertySheet\\ProjectFiles\\Release\\PropertySheet.exe       \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy RibbonFrame\\ProjectFiles\\Release\\RibbonFrame.exe           \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy RibbonSimple\\ProjectFiles\\Release\\SimpleRibbon.exe         \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Scribble\\ProjectFiles\\Release\\Scribble.exe                 \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Simple\\ProjectFiles\\Release\\Simple.exe                     \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Splitter\\ProjectFiles\\Release\\Splitter.exe                 \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy TabDemo\\ProjectFiles\\Release\\TabDemo.exe                   \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy TaskDialog\\ProjectFiles\\Release\\TaskDialog.exe             \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Themes\\ProjectFiles\\Release\\Themes.exe                     \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Threads\\ProjectFiles\\Release\\Threads.exe                   \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Tray\\ProjectFiles\\Release\\Tray.exe                         \"..\\output\\VS2005\\Release\"    >>\"..\\output\\VS2005.log\"\n\n\nREM: Change the directory to the Tutorials parent\npopd\npushd ..\\Tutorials\n\n\nREM: Compile Tutorials\n::Compile code\ndevenv /build Debug Tutorial1\\Tutorial1_2005.sln      >>\"..\\output\\VS2005.log\"\ndevenv /build Release Tutorial1\\Tutorial1_2005.sln    >>\"..\\output\\VS2005.log\"\ndevenv /build Debug Tutorial2\\Tutorial2_2005.sln      >>\"..\\output\\VS2005.log\"\ndevenv /build Release Tutorial2\\Tutorial2_2005.sln    >>\"..\\output\\VS2005.log\"\ndevenv /build Debug Tutorial3\\Tutorial3_2005.sln      >>\"..\\output\\VS2005.log\"\ndevenv /build Release Tutorial3\\Tutorial3_2005.sln    >>\"..\\output\\VS2005.log\"\ndevenv /build Debug Tutorial4\\Tutorial4_2005.sln      >>\"..\\output\\VS2005.log\"\ndevenv /build Release Tutorial4\\Tutorial4_2005.sln    >>\"..\\output\\VS2005.log\"\ndevenv /build Debug Tutorial5\\Tutorial5_2005.sln      >>\"..\\output\\VS2005.log\"\ndevenv /build Release Tutorial5\\Tutorial5_2005.sln    >>\"..\\output\\VS2005.log\"\ndevenv /build Debug Tutorial6\\Tutorial6_2005.sln      >>\"..\\output\\VS2005.log\"\ndevenv /build Release Tutorial6\\Tutorial6_2005.sln    >>\"..\\output\\VS2005.log\"\ndevenv /build Debug Tutorial7\\Tutorial7_2005.sln      >>\"..\\output\\VS2005.log\"\ndevenv /build Release Tutorial7\\Tutorial7_2005.sln    >>\"..\\output\\VS2005.log\"\ndevenv /build Debug Tutorial8\\Tutorial8_2005.sln      >>\"..\\output\\VS2005.log\"\ndevenv /build Release Tutorial8\\Tutorial8_2005.sln    >>\"..\\output\\VS2005.log\"\ndevenv /build Debug Tutorial9\\Tutorial9_2005.sln      >>\"..\\output\\VS2005.log\"\ndevenv /build Release Tutorial9\\Tutorial9_2005.sln    >>\"..\\output\\VS2005.log\"\n\nmkdir \"..\\output\\VS2005\\Tutorials\"\nmkdir \"..\\output\\VS2005\\Tutorials\\Debug\"\n\nECHO \"Copying Debug Tutorials\" >>\"..\\output\\VS2005.log\"\ncopy Tutorial1\\Debug\\Tutorial1.exe         \"..\\output\\VS2005\\Tutorials\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial2\\Debug\\Tutorial2.exe         \"..\\output\\VS2005\\Tutorials\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial3\\Debug\\Tutorial3.exe         \"..\\output\\VS2005\\Tutorials\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial4\\Debug\\Tutorial4.exe         \"..\\output\\VS2005\\Tutorials\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial5\\Debug\\Tutorial5.exe         \"..\\output\\VS2005\\Tutorials\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial6\\Debug\\Tutorial6.exe         \"..\\output\\VS2005\\Tutorials\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial7\\Debug\\Tutorial7.exe         \"..\\output\\VS2005\\Tutorials\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial8\\Debug\\Tutorial8.exe         \"..\\output\\VS2005\\Tutorials\\Debug\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial9\\Debug\\Tutorial9.exe         \"..\\output\\VS2005\\Tutorials\\Debug\"    >>\"..\\output\\VS2005.log\"\n\nmkdir \"..\\output\\VS2005\\Tutorials\\Release\"\n\nECHO \"Copying Release Tutorials\" >>\"..\\output\\VS2005.log\"\ncopy Tutorial1\\Release\\Tutorial1.exe       \"..\\output\\VS2005\\Tutorials\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial2\\Release\\Tutorial2.exe       \"..\\output\\VS2005\\Tutorials\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial3\\Release\\Tutorial3.exe       \"..\\output\\VS2005\\Tutorials\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial4\\Release\\Tutorial4.exe       \"..\\output\\VS2005\\Tutorials\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial5\\Release\\Tutorial5.exe       \"..\\output\\VS2005\\Tutorials\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial6\\Release\\Tutorial6.exe       \"..\\output\\VS2005\\Tutorials\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial7\\Release\\Tutorial7.exe       \"..\\output\\VS2005\\Tutorials\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial8\\Release\\Tutorial8.exe       \"..\\output\\VS2005\\Tutorials\\Release\"    >>\"..\\output\\VS2005.log\"\ncopy Tutorial9\\Release\\Tutorial9.exe       \"..\\output\\VS2005\\Tutorials\\Release\"    >>\"..\\output\\VS2005.log\"\n\nREM: Pop the directory change off the stack\npopd\n\n\n"
  },
  {
    "path": "external/win32cpp/tools/Compile VS2008 Express.bat",
    "content": "REM: A batch program to rebuild the Win32++ samples using VS2008 Express\nREM: The contents of the log file is erased \n\nREM: Set the paths and environment variables\ncall \"C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\vcvarsall.bat\" x86\n\n\n::Cleanup\ncall CleanSamples\ncall CleanTutorials\n\n@echo on\n\nREM: Change the directory to the Samples parent\npushd ..\\Samples\nif exist \"..\\output\\VS2008\\Debug\" rmdir /s /q \"..\\output\\VS2008\\Debug\"\nif exist \"..\\output\\VS2008\\Release\" rmdir /s /q \"..\\output\\VS2008\\Release\"\nif exist \"..\\output\\VS2008\\Tutorials\" rmdir /s /q \"..\\output\\VS2008\\Tutorials\"\n\n\n::Compile code\nvcbuild /rebuild Browser\\ProjectFiles\\Browser_2008.vcproj debug                     > \"..\\output\\VS2008.log\"\nvcbuild /rebuild Browser\\ProjectFiles\\Browser_2008.vcproj release                   >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild CustomControl\\ProjectFiles\\CustomControl_2008.vcproj debug         >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild CustomControl\\ProjectFiles\\CustomControl_2008.vcproj release       >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Dialog\\ProjectFiles\\Dialog_2008.vcproj debug                       >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Dialog\\ProjectFiles\\Dialog_2008.vcproj release                     >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild DialogBars\\ProjectFiles\\DialogBars_2008.vcproj debug  \t            >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild DialogBars\\ProjectFiles\\DialogBars_2008.vcproj release             >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild DialogDemo\\ProjectFiles\\DialogDemo_2008.vcproj debug               >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild DialogDemo\\ProjectFiles\\DialogDemo_2008.vcproj release             >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild DialogTab\\ProjectFiles\\DialogTab_2008.vcproj debug                 >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild DialogTab\\ProjectFiles\\DialogTab_2008.vcproj release               >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild DirectX\\ProjectFiles\\DirectX_2008.vcproj debug                     >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild DirectX\\ProjectFiles\\DirectX_2008.vcproj release                   >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Dock\\ProjectFiles\\Dock_2008.vcproj debug                           >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Dock\\ProjectFiles\\Dock_2008.vcproj release                         >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild DockContainer\\ProjectFiles\\DockContainer_2008.vcproj debug         >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild DockContainer\\ProjectFiles\\DockContainer_2008.vcproj release       >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild DockTabbedMDI\\ProjectFiles\\DockTabbedMDI_2008.vcproj debug         >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild DockTabbedMDI\\ProjectFiles\\DockTabbedMDI_2008.vcproj release       >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Explorer\\ProjectFiles\\Explorer_2008.vcproj debug                   >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Explorer\\ProjectFiles\\Explorer_2008.vcproj release                 >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild FastGDI\\ProjectFiles\\FastGDI_2008.vcproj debug                     >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild FastGDI\\ProjectFiles\\FastGDI_2008.vcproj release                   >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild FormDemo\\ProjectFiles\\FormDemo_2008.vcproj debug                   >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild FormDemo\\ProjectFiles\\FormDemo_2008.vcproj release                 >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Frame\\ProjectFiles\\Frame_2008.vcproj debug                         >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Frame\\ProjectFiles\\Frame_2008.vcproj release                       >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild GDIPlus\\ProjectFiles\\GDIPlus_2008.vcproj debug                     >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild GDIPlus\\ProjectFiles\\GDIPlus_2008.vcproj release                   >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild MDIFrame\\ProjectFiles\\MDIFrame_2008.vcproj debug                   >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild MDIFrame\\ProjectFiles\\MDIFrame_2008.vcproj release                 >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild MDIFrameDemo\\ProjectFiles\\MDIDemo_2008.vcproj debug                >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild MDIFrameDemo\\ProjectFiles\\MDIDemo_2008.vcproj release              >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild MDIFrameSplitter\\ProjectFiles\\MDIFrameSplitter_2008.vcproj debug   >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild MDIFrameSplitter\\ProjectFiles\\MDIFrameSplitter_2008.vcproj release\t>>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Networking\\ClientDlg\\Client_2008.vcproj debug                      >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Networking\\ClientDlg\\Client_2008.vcproj release                    >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Networking\\ServerDlg\\Server_2008.vcproj debug                      >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Networking\\ServerDlg\\Server_2008.vcproj release                    >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild NotePad\\ProjectFiles\\Notepad_2008.vcproj debug                     >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild NotePad\\ProjectFiles\\Notepad_2008.vcproj release                   >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Performance\\ProjectFiles\\Performance_2008.vcproj debug             >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Performance\\ProjectFiles\\Performance_2008.vcproj release           >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Picture\\ProjectFiles\\Picture_2008.vcproj debug                     >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Picture\\ProjectFiles\\Picture_2008.vcproj release                   >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild PropertySheet\\ProjectFiles\\PropertySheet_2008.vcproj debug         >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild PropertySheet\\ProjectFiles\\PropertySheet_2008.vcproj release       >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Scribble\\ProjectFiles\\Scribble_2008.vcproj debug                   >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Scribble\\ProjectFiles\\Scribble_2008.vcproj release                 >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Simple\\ProjectFiles\\Simple_2008.vcproj debug                       >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Simple\\ProjectFiles\\Simple_2008.vcproj release                     >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Splitter\\ProjectFiles\\Splitter_2008.vcproj debug                   >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Splitter\\ProjectFiles\\Splitter_2008.vcproj release                 >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild RibbonFrame\\ProjectFiles\\RibbonFrame_2008.vcproj debug             >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild RibbonFrame\\ProjectFiles\\RibbonFrame_2008.vcproj release\t        >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild RibbonSimple\\ProjectFiles\\SimpleRibbon_2008.vcproj debug           >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild RibbonSimple\\ProjectFiles\\SimpleRibbon_2008.vcproj release         >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild TabDemo\\ProjectFiles\\TabDemo_2008.vcproj debug                     >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild TabDemo\\ProjectFiles\\TabDemo_2008.vcproj release                   >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild TaskDialog\\ProjectFiles\\TaskDialog_2008.vcproj debug               >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild TaskDialog\\ProjectFiles\\TaskDialog_2008.vcproj release             >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Themes\\ProjectFiles\\Themes_2008.vcproj debug                       >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Themes\\ProjectFiles\\Themes_2008.vcproj release                     >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Threads\\ProjectFiles\\Threads_2008.vcproj debug                     >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Threads\\ProjectFiles\\Threads_2008.vcproj release                   >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Tray\\ProjectFiles\\Tray_2008.vcproj debug                           >>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Tray\\ProjectFiles\\Tray_2008.vcproj release                         >>\"..\\output\\VS2008.log\"\n\nmkdir \"..\\output\\VS2008\"\nmkdir \"..\\output\\VS2008\\Debug\"\n\nECHO \"Copying Debug Samples\" >>\"..\\output\\VS2008.log\"\ncopy Browser\\ProjectFiles\\Debug\\Browser.exe                   \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy CustomControl\\ProjectFiles\\Debug\\CustomControl.exe       \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Dialog\\ProjectFiles\\Debug\\Dialog.exe                     \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy DialogBars\\ProjectFiles\\Debug\\DialogBars.exe             \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy DialogDemo\\ProjectFiles\\Debug\\DialogDemo.exe             \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy DialogTab\\ProjectFiles\\Debug\\DialogTab.exe               \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy DirectX\\ProjectFiles\\Debug\\DirectX.exe                   \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Dock\\ProjectFiles\\Debug\\Dock.exe                         \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy DockContainer\\ProjectFiles\\Debug\\DockContainer.exe       \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy DockTabbedMDI\\ProjectFiles\\Debug\\DockTabbedMDI.exe       \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Explorer\\ProjectFiles\\Debug\\Explorer.exe                 \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy FastGDI\\ProjectFiles\\Debug\\FastGDI.exe                   \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy FormDemo\\ProjectFiles\\Debug\\FormDemo.exe                 \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Frame\\ProjectFiles\\Debug\\Frame.exe                       \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy GDIPlus\\ProjectFiles\\Debug\\GDIPlus.exe                   \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy MDIFrame\\ProjectFiles\\Debug\\MDIFrame.exe                 \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy MDIFrameDemo\\ProjectFiles\\Debug\\MDIDemo.exe              \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy MDIFrameSplitter\\ProjectFiles\\Debug\\MDIFrameSplitter.exe \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Networking\\ClientDlg\\Debug\\Client.exe                    \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Networking\\ServerDlg\\Debug\\Server.exe                    \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy NotePad\\ProjectFiles\\Debug\\Notepad.exe                   \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Performance\\ProjectFiles\\Debug\\Performance.exe           \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Picture\\ProjectFiles\\Debug\\Picture.exe                   \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy PropertySheet\\ProjectFiles\\Debug\\PropertySheet.exe       \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy RibbonFrame\\ProjectFiles\\Debug\\RibbonFrame.exe           \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy RibbonSimple\\ProjectFiles\\Debug\\SimpleRibbon.exe         \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Scribble\\ProjectFiles\\Debug\\Scribble.exe                 \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Simple\\ProjectFiles\\Debug\\Simple.exe                     \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Splitter\\ProjectFiles\\Debug\\Splitter.exe                 \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy TabDemo\\ProjectFiles\\Debug\\TabDemo.exe                   \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy TaskDialog\\ProjectFiles\\Debug\\TaskDialog.exe             \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Themes\\ProjectFiles\\Debug\\Themes.exe                     \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Threads\\ProjectFiles\\Debug\\Threads.exe                   \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Tray\\ProjectFiles\\Debug\\Tray.exe                         \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\n\nmkdir \"..\\output\\VS2008\\Release\"\n\nECHO \"Copying Release Samples\" >>\"..\\output\\VS2008.log\"\ncopy Browser\\ProjectFiles\\Release\\Browser.exe                   \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy CustomControl\\ProjectFiles\\Release\\CustomControl.exe       \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Dialog\\ProjectFiles\\Release\\Dialog.exe                     \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy DialogBars\\ProjectFiles\\Release\\DialogBars.exe             \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy DialogDemo\\ProjectFiles\\Release\\DialogDemo.exe             \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy DialogTab\\ProjectFiles\\Release\\DialogTab.exe               \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy DirectX\\ProjectFiles\\Release\\DirectX.exe                   \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Dock\\ProjectFiles\\Release\\Dock.exe                         \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy DockContainer\\ProjectFiles\\Release\\DockContainer.exe       \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy DockTabbedMDI\\ProjectFiles\\Release\\DockTabbedMDI.exe       \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Explorer\\ProjectFiles\\Release\\Explorer.exe                 \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy FastGDI\\ProjectFiles\\Release\\FastGDI.exe                   \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy FormDemo\\ProjectFiles\\Release\\FormDemo.exe                 \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Frame\\ProjectFiles\\Release\\Frame.exe                       \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy GDIPlus\\ProjectFiles\\Release\\GDIPlus.exe                   \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy MDIFrame\\ProjectFiles\\Release\\MDIFrame.exe                 \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy MDIFrameDemo\\ProjectFiles\\Release\\MDIDemo.exe              \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy MDIFrameSplitter\\ProjectFiles\\Release\\MDIFrameSplitter.exe \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Networking\\ClientDlg\\Release\\Client.exe                    \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Networking\\ServerDlg\\Release\\Server.exe                    \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy NotePad\\ProjectFiles\\Release\\Notepad.exe                   \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Performance\\ProjectFiles\\Release\\Performance.exe           \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Picture\\ProjectFiles\\Release\\Picture.exe                   \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy PropertySheet\\ProjectFiles\\Release\\PropertySheet.exe       \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy RibbonFrame\\ProjectFiles\\Release\\RibbonFrame.exe           \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy RibbonSimple\\ProjectFiles\\Release\\SimpleRibbon.exe         \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Scribble\\ProjectFiles\\Release\\Scribble.exe                 \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Simple\\ProjectFiles\\Release\\Simple.exe                     \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Splitter\\ProjectFiles\\Release\\Splitter.exe                 \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy TabDemo\\ProjectFiles\\Release\\TabDemo.exe                   \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy TaskDialog\\ProjectFiles\\Release\\TaskDialog.exe             \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Themes\\ProjectFiles\\Release\\Themes.exe                     \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Threads\\ProjectFiles\\Release\\Threads.exe                   \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Tray\\ProjectFiles\\Release\\Tray.exe                         \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\n\nREM: Change the directory to the Tutorials parent\npopd\npushd ..\\Tutorials\n\nREM: Compile Tutorials\nECHO \"Compliling Tutorials\" >>\"..\\output\\VS2008.log\"\n::Compile code\nvcbuild /rebuild Tutorial1\\Tutorial1_2008.vcproj debug \t\t>>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Tutorial1\\Tutorial1_2008.vcproj release\t\t>>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Tutorial2\\Tutorial2_2008.vcproj debug\t\t>>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Tutorial2\\Tutorial2_2008.vcproj release\t\t>>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Tutorial3\\Tutorial3_2008.vcproj debug\t\t>>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Tutorial3\\Tutorial3_2008.vcproj release\t\t>>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Tutorial4\\Tutorial4_2008.vcproj debug\t\t>>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Tutorial4\\Tutorial4_2008.vcproj release\t\t>>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Tutorial5\\Tutorial5_2008.vcproj debug\t\t>>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Tutorial5\\Tutorial5_2008.vcproj release\t\t>>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Tutorial6\\Tutorial6_2008.vcproj debug\t\t>>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Tutorial6\\Tutorial6_2008.vcproj release\t\t>>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Tutorial7\\Tutorial7_2008.vcproj debug\t\t>>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Tutorial7\\Tutorial7_2008.vcproj release\t\t>>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Tutorial8\\Tutorial8_2008.vcproj debug\t\t>>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Tutorial8\\Tutorial8_2008.vcproj release\t\t>>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Tutorial9\\Tutorial9_2008.vcproj debug\t\t>>\"..\\output\\VS2008.log\"\nvcbuild /rebuild Tutorial9\\Tutorial9_2008.vcproj release\t\t>>\"..\\output\\VS2008.log\"\n\nmkdir \"..\\output\\VS2008\\Tutorials\"\nmkdir \"..\\output\\VS2008\\Tutorials\\Debug\"\n\nECHO \"Copying Debug Tutorials\" >>\"..\\output\\VS2008.log\"\ncopy Tutorial1\\Debug\\Tutorial1.exe         \"..\\output\\VS2008\\Tutorials\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial2\\Debug\\Tutorial2.exe         \"..\\output\\VS2008\\Tutorials\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial3\\Debug\\Tutorial3.exe         \"..\\output\\VS2008\\Tutorials\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial4\\Debug\\Tutorial4.exe         \"..\\output\\VS2008\\Tutorials\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial5\\Debug\\Tutorial5.exe         \"..\\output\\VS2008\\Tutorials\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial6\\Debug\\Tutorial6.exe         \"..\\output\\VS2008\\Tutorials\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial7\\Debug\\Tutorial7.exe         \"..\\output\\VS2008\\Tutorials\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial8\\Debug\\Tutorial8.exe         \"..\\output\\VS2008\\Tutorials\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial9\\Debug\\Tutorial9.exe         \"..\\output\\VS2008\\Tutorials\\Debug\"    >>\"..\\output\\VS2008.log\"\n\nmkdir \"..\\output\\VS2008\\Tutorials\\Release\"\n\nECHO \"Copying Release Tutorials\" >>\"..\\output\\VS2008.log\"\ncopy Tutorial1\\Release\\Tutorial1.exe       \"..\\output\\VS2008\\Tutorials\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial2\\Release\\Tutorial2.exe       \"..\\output\\VS2008\\Tutorials\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial3\\Release\\Tutorial3.exe       \"..\\output\\VS2008\\Tutorials\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial4\\Release\\Tutorial4.exe       \"..\\output\\VS2008\\Tutorials\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial5\\Release\\Tutorial5.exe       \"..\\output\\VS2008\\Tutorials\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial6\\Release\\Tutorial6.exe       \"..\\output\\VS2008\\Tutorials\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial7\\Release\\Tutorial7.exe       \"..\\output\\VS2008\\Tutorials\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial8\\Release\\Tutorial8.exe       \"..\\output\\VS2008\\Tutorials\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial9\\Release\\Tutorial9.exe       \"..\\output\\VS2008\\Tutorials\\Release\"    >>\"..\\output\\VS2008.log\"\n\nREM: Pop the directory change off the stack\npopd\n\n\n"
  },
  {
    "path": "external/win32cpp/tools/Compile VS2008.bat",
    "content": "REM: A batch program to rebuild the Win32++ samples using VS2008.\nREM: The contents of the log file is erased \n\nREM: Set the paths and environment variables\ncall \"C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\vcvarsall.bat\" x86\n\n::Cleanup\ncall CleanSamples\ncall CleanTutorials\n\nREM: Change the directory to the Samples parent\npushd ..\\Samples\nif exist \"..\\output\\VS2008\\Debug\" rmdir /s /q \"..\\output\\VS2008\\Debug\"\nif exist \"..\\output\\VS2008\\Release\" rmdir /s /q \"..\\output\\VS2008\\Release\"\nif exist \"..\\output\\VS2008\\Tutorials\" rmdir /s /q \"..\\output\\VS2008\\Tutorials\"\n\n@echo on\n\n::Compile code\ndevenv /build Debug Browser\\ProjectFiles\\Browser_2008.sln                     > \"..\\output\\VS2008.log\"\ndevenv /build Release Browser\\ProjectFiles\\Browser_2008.sln                   >>\"..\\output\\VS2008.log\"\ndevenv /build Debug CustomControl\\ProjectFiles\\CustomControl_2008.sln         >>\"..\\output\\VS2008.log\"\ndevenv /build Release CustomControl\\ProjectFiles\\CustomControl_2008.sln       >>\"..\\output\\VS2008.log\"\ndevenv /build Debug Dialog\\ProjectFiles\\Dialog_2008.sln                       >>\"..\\output\\VS2008.log\"\ndevenv /build Release Dialog\\ProjectFiles\\Dialog_2008.sln                     >>\"..\\output\\VS2008.log\"\ndevenv /build Debug DialogBars\\ProjectFiles\\DialogBars_2008.sln               >>\"..\\output\\VS2008.log\"\ndevenv /build Release DialogBars\\ProjectFiles\\DialogBars_2008.sln             >>\"..\\output\\VS2008.log\"\ndevenv /build Debug DialogDemo\\ProjectFiles\\DialogDemo_2008.sln               >>\"..\\output\\VS2008.log\"\ndevenv /build Release DialogDemo\\ProjectFiles\\DialogDemo_2008.sln             >>\"..\\output\\VS2008.log\"\ndevenv /build Debug DialogTab\\ProjectFiles\\DialogTab_2008.sln                 >>\"..\\output\\VS2008.log\"\ndevenv /build Release DialogTab\\ProjectFiles\\DialogTab_2008.sln               >>\"..\\output\\VS2008.log\"\ndevenv /build Debug DirectX\\ProjectFiles\\DirectX_2008.sln                     >>\"..\\output\\VS2008.log\"\ndevenv /build Release DirectX\\ProjectFiles\\DirectX_2008.sln                   >>\"..\\output\\VS2008.log\"\ndevenv /build Debug Dock\\ProjectFiles\\Dock_2008.sln                           >>\"..\\output\\VS2008.log\"\ndevenv /build Release Dock\\ProjectFiles\\Dock_2008.sln                         >>\"..\\output\\VS2008.log\"\ndevenv /build Debug DockContainer\\ProjectFiles\\DockContainer_2008.sln         >>\"..\\output\\VS2008.log\"\ndevenv /build Release DockContainer\\ProjectFiles\\DockContainer_2008.sln       >>\"..\\output\\VS2008.log\"\ndevenv /build Debug DockTabbedMDI\\ProjectFiles\\DockTabbedMDI_2008.sln         >>\"..\\output\\VS2008.log\"\ndevenv /build Release DockTabbedMDI\\ProjectFiles\\DockTabbedMDI_2008.sln       >>\"..\\output\\VS2008.log\"\ndevenv /build Debug Explorer\\ProjectFiles\\Explorer_2008.sln                   >>\"..\\output\\VS2008.log\"\ndevenv /build Release Explorer\\ProjectFiles\\Explorer_2008.sln                 >>\"..\\output\\VS2008.log\"\ndevenv /build Debug FastGDI\\ProjectFiles\\FastGDI_2008.sln                     >>\"..\\output\\VS2008.log\"\ndevenv /build Release FastGDI\\ProjectFiles\\FastGDI_2008.sln                   >>\"..\\output\\VS2008.log\"\ndevenv /build Debug FormDemo\\ProjectFiles\\FormDemo_2008.sln                   >>\"..\\output\\VS2008.log\"\ndevenv /build Release FormDemo\\ProjectFiles\\FormDemo_2008.sln                 >>\"..\\output\\VS2008.log\"\ndevenv /build Debug Frame\\ProjectFiles\\Frame_2008.sln                         >>\"..\\output\\VS2008.log\"\ndevenv /build Release Frame\\ProjectFiles\\Frame_2008.sln                       >>\"..\\output\\VS2008.log\"\ndevenv /build Debug GDIPlus\\ProjectFiles\\GDIPlus_2008.sln                     >>\"..\\output\\VS2008.log\"\ndevenv /build Release GDIPlus\\ProjectFiles\\GDIPlus_2008.sln                   >>\"..\\output\\VS2008.log\"\ndevenv /build Debug MDIFrame\\ProjectFiles\\MDIFrame_2008.sln                   >>\"..\\output\\VS2008.log\"\ndevenv /build Release MDIFrame\\ProjectFiles\\MDIFrame_2008.sln                 >>\"..\\output\\VS2008.log\"\ndevenv /build Debug MDIFrameDemo\\ProjectFiles\\MDIDemo_2008.sln                >>\"..\\output\\VS2008.log\"\ndevenv /build Release MDIFrameDemo\\ProjectFiles\\MDIDemo_2008.sln              >>\"..\\output\\VS2008.log\"\ndevenv /build Debug MDIFrameSplitter\\ProjectFiles\\MDIFrameSplitter_2008.sln   >>\"..\\output\\VS2008.log\"\ndevenv /build Release MDIFrameSplitter\\ProjectFiles\\MDIFrameSplitter_2008.sln >>\"..\\output\\VS2008.log\"\ndevenv /build Debug Networking\\ClientDlg\\Client_2008.sln                      >>\"..\\output\\VS2008.log\"\ndevenv /build Release Networking\\ClientDlg\\Client_2008.sln                    >>\"..\\output\\VS2008.log\"\ndevenv /build Debug Networking\\ServerDlg\\Server_2008.sln                      >>\"..\\output\\VS2008.log\"\ndevenv /build Release Networking\\ServerDlg\\Server_2008.sln                    >>\"..\\output\\VS2008.log\"\ndevenv /build Debug NotePad\\ProjectFiles\\Notepad_2008.sln                     >>\"..\\output\\VS2008.log\"\ndevenv /build Release NotePad\\ProjectFiles\\Notepad_2008.sln                   >>\"..\\output\\VS2008.log\"\ndevenv /build Debug Performance\\ProjectFiles\\Performance_2008.sln             >>\"..\\output\\VS2008.log\"\ndevenv /build Release Performance\\ProjectFiles\\Performance_2008.sln           >>\"..\\output\\VS2008.log\"\ndevenv /build Debug Picture\\ProjectFiles\\Picture_2008.sln                     >>\"..\\output\\VS2008.log\"\ndevenv /build Release Picture\\ProjectFiles\\Picture_2008.sln                   >>\"..\\output\\VS2008.log\"\ndevenv /build Debug PropertySheet\\ProjectFiles\\PropertySheet_2008.sln         >>\"..\\output\\VS2008.log\"\ndevenv /build Release PropertySheet\\ProjectFiles\\PropertySheet_2008.sln       >>\"..\\output\\VS2008.log\"\ndevenv /build Debug RibbonFrame\\ProjectFiles\\RibbonFrame_2008.sln             >>\"..\\output\\VS2008.log\"\ndevenv /build Release RibbonFrame\\ProjectFiles\\RibbonFrame_2008.sln           >>\"..\\output\\VS2008.log\"\ndevenv /build Debug RibbonSimple\\ProjectFiles\\SimpleRibbon_2008.sln           >>\"..\\output\\VS2008.log\"\ndevenv /build Release RibbonSimple\\ProjectFiles\\SimpleRibbon_2008.sln         >>\"..\\output\\VS2008.log\"\ndevenv /build Debug Scribble\\ProjectFiles\\Scribble_2008.sln                   >>\"..\\output\\VS2008.log\"\ndevenv /build Release Scribble\\ProjectFiles\\Scribble_2008.sln                 >>\"..\\output\\VS2008.log\"\ndevenv /build Debug Simple\\ProjectFiles\\Simple_2008.sln                       >>\"..\\output\\VS2008.log\"\ndevenv /build Release Simple\\ProjectFiles\\Simple_2008.sln                     >>\"..\\output\\VS2008.log\"\ndevenv /build Debug Splitter\\ProjectFiles\\Splitter_2008.sln                   >>\"..\\output\\VS2008.log\"\ndevenv /build Release Splitter\\ProjectFiles\\Splitter_2008.sln                 >>\"..\\output\\VS2008.log\"\ndevenv /build Debug TabDemo\\ProjectFiles\\TabDemo_2008.sln                     >>\"..\\output\\VS2008.log\"\ndevenv /build Release TabDemo\\ProjectFiles\\TabDemo_2008.sln                   >>\"..\\output\\VS2008.log\"\ndevenv /build Debug TaskDialog\\ProjectFiles\\TaskDialog_2008.sln               >>\"..\\output\\VS2008.log\"\ndevenv /build Release TaskDialog\\ProjectFiles\\TaskDialog_2008.sln             >>\"..\\output\\VS2008.log\"\ndevenv /build Debug Themes\\ProjectFiles\\Themes_2008.sln                       >>\"..\\output\\VS2008.log\"\ndevenv /build Release Themes\\ProjectFiles\\Themes_2008.sln                     >>\"..\\output\\VS2008.log\"\ndevenv /build Debug Threads\\ProjectFiles\\Threads_2008.sln                     >>\"..\\output\\VS2008.log\"\ndevenv /build Release Threads\\ProjectFiles\\Threads_2008.sln                   >>\"..\\output\\VS2008.log\"\ndevenv /build Debug Tray\\ProjectFiles\\Tray_2008.sln                           >>\"..\\output\\VS2008.log\"\ndevenv /build Release Tray\\ProjectFiles\\Tray_2008.sln                         >>\"..\\output\\VS2008.log\"\n\nmkdir \"..\\output\\VS2008\"\nmkdir \"..\\output\\VS2008\\Debug\"\n\nECHO \"Copying Debug Samples\" >>\"..\\output\\VS2008.log\"\ncopy Browser\\ProjectFiles\\Debug\\Browser.exe                   \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy CustomControl\\ProjectFiles\\Debug\\CustomControl.exe       \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy CustomControl\\ProjectFiles\\Debug\\CustomControl.exe       \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy DialogBars\\ProjectFiles\\Debug\\DialogBars.exe             \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy DialogDemo\\ProjectFiles\\Debug\\DialogDemo.exe             \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy DialogTab\\ProjectFiles\\Debug\\DialogTab.exe               \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy DirectX\\ProjectFiles\\Debug\\DirectX.exe                   \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Dock\\ProjectFiles\\Debug\\Dock.exe                         \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy DockContainer\\ProjectFiles\\Debug\\DockContainer.exe       \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy DockTabbedMDI\\ProjectFiles\\Debug\\DockTabbedMDI.exe       \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Explorer\\ProjectFiles\\Debug\\Explorer.exe                 \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy FastGDI\\ProjectFiles\\Debug\\FastGDI.exe                   \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy FormDemo\\ProjectFiles\\Debug\\FormDemo.exe                 \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Frame\\ProjectFiles\\Debug\\Frame.exe                       \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy GDIPlus\\ProjectFiles\\Debug\\GDIPlus.exe                   \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy MDIFrame\\ProjectFiles\\Debug\\MDIFrame.exe                 \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy MDIFrameDemo\\ProjectFiles\\Debug\\MDIDemo.exe              \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy MDIFrameSplitter\\ProjectFiles\\Debug\\MDIFrameSplitter.exe \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Networking\\ClientDlg\\Debug\\Client.exe                    \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Networking\\ServerDlg\\Debug\\Server.exe                    \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy NotePad\\ProjectFiles\\Debug\\Notepad.exe                   \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Performance\\ProjectFiles\\Debug\\Performance.exe           \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Picture\\ProjectFiles\\Debug\\Picture.exe                   \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy PropertySheet\\ProjectFiles\\Debug\\PropertySheet.exe       \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy RibbonFrame\\ProjectFiles\\Debug\\RibbonFrame.exe           \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy RibbonSimple\\ProjectFiles\\Debug\\SimpleRibbon.exe         \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Scribble\\ProjectFiles\\Debug\\Scribble.exe                 \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Simple\\ProjectFiles\\Debug\\Simple.exe                     \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Splitter\\ProjectFiles\\Debug\\Splitter.exe                 \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy TabDemo\\ProjectFiles\\Debug\\TabDemo.exe                   \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy TaskDialog\\ProjectFiles\\Debug\\TaskDialog.exe             \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Themes\\ProjectFiles\\Debug\\Themes.exe                     \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Threads\\ProjectFiles\\Debug\\Threads.exe                   \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Tray\\ProjectFiles\\Debug\\Tray.exe                         \"..\\output\\VS2008\\Debug\"    >>\"..\\output\\VS2008.log\"\n\nmkdir \"..\\output\\VS2008\\Release\"\n\nECHO \"Copying Release Samples\" >>\"..\\output\\VS2008.log\"\ncopy Browser\\ProjectFiles\\Release\\Browser.exe                   \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy CustomControl\\ProjectFiles\\Release\\CustomControl.exe       \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Dialog\\ProjectFiles\\Release\\Dialog.exe                     \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy DialogBars\\ProjectFiles\\Release\\DialogBars.exe             \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy DialogDemo\\ProjectFiles\\Release\\DialogDemo.exe             \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy DialogTab\\ProjectFiles\\Release\\DialogTab.exe               \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy DirectX\\ProjectFiles\\Release\\DirectX.exe                   \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Dock\\ProjectFiles\\Release\\Dock.exe                         \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy DockContainer\\ProjectFiles\\Release\\DockContainer.exe       \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy DockTabbedMDI\\ProjectFiles\\Release\\DockTabbedMDI.exe       \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Explorer\\ProjectFiles\\Release\\Explorer.exe                 \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy FastGDI\\ProjectFiles\\Release\\FastGDI.exe                   \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy FormDemo\\ProjectFiles\\Release\\FormDemo.exe                 \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Frame\\ProjectFiles\\Release\\Frame.exe                       \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy GDIPlus\\ProjectFiles\\Release\\GDIPlus.exe                   \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy MDIFrame\\ProjectFiles\\Release\\MDIFrame.exe                 \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy MDIFrameDemo\\ProjectFiles\\Release\\MDIDemo.exe              \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy MDIFrameSplitter\\ProjectFiles\\Release\\MDIFrameSplitter.exe \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Networking\\ClientDlg\\Release\\Client.exe                    \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Networking\\ServerDlg\\Release\\Server.exe                    \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy NotePad\\ProjectFiles\\Release\\Notepad.exe                   \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Performance\\ProjectFiles\\Release\\Performance.exe           \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Picture\\ProjectFiles\\Release\\Picture.exe                   \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy PropertySheet\\ProjectFiles\\Release\\PropertySheet.exe       \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy RibbonFrame\\ProjectFiles\\Release\\RibbonFrame.exe           \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy RibbonSimple\\ProjectFiles\\Release\\SimpleRibbon.exe         \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Scribble\\ProjectFiles\\Release\\Scribble.exe                 \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Simple\\ProjectFiles\\Release\\Simple.exe                     \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Splitter\\ProjectFiles\\Release\\Splitter.exe                 \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy TabDemo\\ProjectFiles\\Release\\TabDemo.exe                   \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy TaskDialog\\ProjectFiles\\Release\\TaskDialog.exe             \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Themes\\ProjectFiles\\Release\\Themes.exe                     \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Threads\\ProjectFiles\\Release\\Threads.exe                   \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Tray\\ProjectFiles\\Release\\Tray.exe                         \"..\\output\\VS2008\\Release\"    >>\"..\\output\\VS2008.log\"\n\nREM: Change the directory to the Tutorials parent\npopd\npushd ..\\Tutorials\n\nREM: Compile Tutorials\nECHO \"Compliling Tutorials\" >>\"..\\output\\VS2008.log\"\n::Compile code\ndevenv /build Debug Tutorial1\\Tutorial1_2008.sln       >>\"..\\output\\VS2008.log\"\ndevenv /build Release Tutorial1\\Tutorial1_2008.sln     >>\"..\\output\\VS2008.log\"\ndevenv /build Debug Tutorial2\\Tutorial2_2008.sln       >>\"..\\output\\VS2008.log\"\ndevenv /build Release Tutorial2\\Tutorial2_2008.sln     >>\"..\\output\\VS2008.log\"\ndevenv /build Debug Tutorial3\\Tutorial3_2008.sln       >>\"..\\output\\VS2008.log\"\ndevenv /build Release Tutorial3\\Tutorial3_2008.sln     >>\"..\\output\\VS2008.log\"\ndevenv /build Debug Tutorial4\\Tutorial4_2008.sln       >>\"..\\output\\VS2008.log\"\ndevenv /build Release Tutorial4\\Tutorial4_2008.sln     >>\"..\\output\\VS2008.log\"\ndevenv /build Debug Tutorial5\\Tutorial5_2008.sln       >>\"..\\output\\VS2008.log\"\ndevenv /build Release Tutorial5\\Tutorial5_2008.sln     >>\"..\\output\\VS2008.log\"\ndevenv /build Debug Tutorial6\\Tutorial6_2008.sln       >>\"..\\output\\VS2008.log\"\ndevenv /build Release Tutorial6\\Tutorial6_2008.sln     >>\"..\\output\\VS2008.log\"\ndevenv /build Debug Tutorial7\\Tutorial7_2008.sln       >>\"..\\output\\VS2008.log\"\ndevenv /build Release Tutorial7\\Tutorial7_2008.sln     >>\"..\\output\\VS2008.log\"\ndevenv /build Debug Tutorial8\\Tutorial8_2008.sln       >>\"..\\output\\VS2008.log\"\ndevenv /build Release Tutorial8\\Tutorial8_2008.sln     >>\"..\\output\\VS2008.log\"\ndevenv /build Debug Tutorial9\\Tutorial9_2008.sln       >>\"..\\output\\VS2008.log\"\ndevenv /build Release Tutorial9\\Tutorial9_2008.sln     >>\"..\\output\\VS2008.log\"\n\nmkdir \"..\\output\\VS2008\\Tutorials\"\nmkdir \"..\\output\\VS2008\\Tutorials\\Debug\"\n\nECHO \"Copying Debug Tutorials\" >>\"..\\output\\VS2008.log\"\ncopy Tutorial1\\Debug\\Tutorial1.exe         \"..\\output\\VS2008\\Tutorials\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial2\\Debug\\Tutorial2.exe         \"..\\output\\VS2008\\Tutorials\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial3\\Debug\\Tutorial3.exe         \"..\\output\\VS2008\\Tutorials\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial4\\Debug\\Tutorial4.exe         \"..\\output\\VS2008\\Tutorials\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial5\\Debug\\Tutorial5.exe         \"..\\output\\VS2008\\Tutorials\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial6\\Debug\\Tutorial6.exe         \"..\\output\\VS2008\\Tutorials\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial7\\Debug\\Tutorial7.exe         \"..\\output\\VS2008\\Tutorials\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial8\\Debug\\Tutorial8.exe         \"..\\output\\VS2008\\Tutorials\\Debug\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial9\\Debug\\Tutorial9.exe         \"..\\output\\VS2008\\Tutorials\\Debug\"    >>\"..\\output\\VS2008.log\"\n\nmkdir \"..\\output\\VS2008\\Tutorials\\Release\"\n\nECHO \"Copying Release Tutorials\" >>\"..\\output\\VS2008.log\"\ncopy Tutorial1\\Release\\Tutorial1.exe       \"..\\output\\VS2008\\Tutorials\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial2\\Release\\Tutorial2.exe       \"..\\output\\VS2008\\Tutorials\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial3\\Release\\Tutorial3.exe       \"..\\output\\VS2008\\Tutorials\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial4\\Release\\Tutorial4.exe       \"..\\output\\VS2008\\Tutorials\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial5\\Release\\Tutorial5.exe       \"..\\output\\VS2008\\Tutorials\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial6\\Release\\Tutorial6.exe       \"..\\output\\VS2008\\Tutorials\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial7\\Release\\Tutorial7.exe       \"..\\output\\VS2008\\Tutorials\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial8\\Release\\Tutorial8.exe       \"..\\output\\VS2008\\Tutorials\\Release\"    >>\"..\\output\\VS2008.log\"\ncopy Tutorial9\\Release\\Tutorial9.exe       \"..\\output\\VS2008\\Tutorials\\Release\"    >>\"..\\output\\VS2008.log\"\n\nREM: Pop the directory change off the stack\npopd\n\n\n"
  },
  {
    "path": "external/win32cpp/tools/Compile VS2010 Express.bat",
    "content": "REM: A batch program to rebuild the Win32++ samples using VS2010 Express.\nREM: The contents of the log file is erased \n\nREM: Set the paths and environment variables\ncall \"C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\vcvarsall.bat\" x86\n\n\n::Cleanup\ncall CleanSamples\ncall CleanTutorials\n\nREM: Change the directory to the Samples parent\npushd ..\\Samples\nif exist \"..\\output\\VS2010\\Debug\" rmdir /s /q \"..\\output\\VS2010\\Debug\"\nif exist \"..\\output\\VS2010\\Release\" rmdir /s /q \"..\\output\\VS2010\\Release\"\nif exist \"..\\output\\VS2010\\Tutorials\" rmdir /s /q \"..\\output\\VS2010\\Tutorials\"\n\n@echo on\n\n::Compile code\nMSBuild Browser\\ProjectFiles\\Browser_2010.sln /p:Configuration=Debug                     > \"..\\output\\VS2010.log\"\nMSBuild Browser\\ProjectFiles\\Browser_2010.sln /p:Configuration=Release                   >>\"..\\output\\VS2010.log\"\nMSBuild CustomControl\\ProjectFiles\\CustomControl_2010.sln /p:Configuration=Debug         >>\"..\\output\\VS2010.log\"\nMSBuild CustomControl\\ProjectFiles\\CustomControl_2010.sln /p:Configuration=Release       >>\"..\\output\\VS2010.log\"\nMSBuild Dialog\\ProjectFiles\\Dialog_2010.sln /p:Configuration=Debug                       >>\"..\\output\\VS2010.log\"\nMSBuild Dialog\\ProjectFiles\\Dialog_2010.sln /p:Configuration=Release                     >>\"..\\output\\VS2010.log\"\nMSBuild DialogBars\\ProjectFiles\\DialogBars_2010.sln /p:Configuration=Debug               >>\"..\\output\\VS2010.log\"\nMSBuild DialogBars\\ProjectFiles\\DialogBars_2010.sln /p:Configuration=Release             >>\"..\\output\\VS2010.log\"\nMSBuild DialogDemo\\ProjectFiles\\DialogDemo_2010.sln /p:Configuration=Debug               >>\"..\\output\\VS2010.log\"\nMSBuild DialogDemo\\ProjectFiles\\DialogDemo_2010.sln /p:Configuration=Release             >>\"..\\output\\VS2010.log\"\nMSBuild DialogTab\\ProjectFiles\\DialogTab_2010.sln /p:Configuration=Debug                 >>\"..\\output\\VS2010.log\"\nMSBuild DialogTab\\ProjectFiles\\DialogTab_2010.sln /p:Configuration=Release               >>\"..\\output\\VS2010.log\"\nREM MSBuild DirectX\\ProjectFiles\\DirectX_2010.sln /p:Configuration=Debug                 >>\"..\\output\\VS2010.log\"\nREM MSBuild DirectX\\ProjectFiles\\DirectX_2010.sln /p:Configuration=Release               >>\"..\\output\\VS2010.log\"\nMSBuild Dock\\ProjectFiles\\Dock_2010.sln /p:Configuration=Debug                           >>\"..\\output\\VS2010.log\"\nMSBuild Dock\\ProjectFiles\\Dock_2010.sln /p:Configuration=Release                         >>\"..\\output\\VS2010.log\"\nMSBuild DockContainer\\ProjectFiles\\DockContainer_2010.sln /p:Configuration=Debug         >>\"..\\output\\VS2010.log\"\nMSBuild DockContainer\\ProjectFiles\\DockContainer_2010.sln /p:Configuration=Release       >>\"..\\output\\VS2010.log\"\nMSBuild DockTabbedMDI\\ProjectFiles\\DockTabbedMDI_2010.sln /p:Configuration=Debug         >>\"..\\output\\VS2010.log\"\nMSBuild DockTabbedMDI\\ProjectFiles\\DockTabbedMDI_2010.sln /p:Configuration=Release       >>\"..\\output\\VS2010.log\"\nMSBuild Explorer\\ProjectFiles\\Explorer_2010.sln /p:Configuration=Debug                   >>\"..\\output\\VS2010.log\"\nMSBuild Explorer\\ProjectFiles\\Explorer_2010.sln /p:Configuration=Release                 >>\"..\\output\\VS2010.log\"\nMSBuild FastGDI\\ProjectFiles\\FastGDI_2010.sln /p:Configuration=Debug                     >>\"..\\output\\VS2010.log\"\nMSBuild FastGDI\\ProjectFiles\\FastGDI_2010.sln /p:Configuration=Release                   >>\"..\\output\\VS2010.log\"\nMSBuild FormDemo\\ProjectFiles\\FormDemo_2010.sln /p:Configuration=Debug                   >>\"..\\output\\VS2010.log\"\nMSBuild FormDemo\\ProjectFiles\\FormDemo_2010.sln /p:Configuration=Release                 >>\"..\\output\\VS2010.log\"\nMSBuild Frame\\ProjectFiles\\Frame_2010.sln /p:Configuration=Debug                         >>\"..\\output\\VS2010.log\"\nMSBuild Frame\\ProjectFiles\\Frame_2010.sln /p:Configuration=Release                       >>\"..\\output\\VS2010.log\"\nMSBuild GDIPlus\\ProjectFiles\\GDIPlus_2010.sln /p:Configuration=Debug                     >>\"..\\output\\VS2010.log\"\nMSBuild GDIPlus\\ProjectFiles\\GDIPlus_2010.sln /p:Configuration=Release                   >>\"..\\output\\VS2010.log\"\nMSBuild MDIFrame\\ProjectFiles\\MDIFrame_2010.sln /p:Configuration=Debug                   >>\"..\\output\\VS2010.log\"\nMSBuild MDIFrame\\ProjectFiles\\MDIFrame_2010.sln /p:Configuration=Release                 >>\"..\\output\\VS2010.log\"\nMSBuild MDIFrameDemo\\ProjectFiles\\MDIDemo_2010.sln /p:Configuration=Debug                >>\"..\\output\\VS2010.log\"\nMSBuild MDIFrameDemo\\ProjectFiles\\MDIDemo_2010.sln /p:Configuration=Release              >>\"..\\output\\VS2010.log\"\nMSBuild MDIFrameSplitter\\ProjectFiles\\MDIFrameSplitter_2010.sln /p:Configuration=Debug   >>\"..\\output\\VS2010.log\"\nMSBuild MDIFrameSplitter\\ProjectFiles\\MDIFrameSplitter_2010.sln /p:Configuration=Release >>\"..\\output\\VS2010.log\"\nMSBuild Networking\\ClientDlg\\Client_2010.sln /p:Configuration=Debug\t                     >>\"..\\output\\VS2010.log\"\nMSBuild Networking\\ClientDlg\\Client_2010.sln /p:Configuration=Release                    >>\"..\\output\\VS2010.log\"\nMSBuild Networking\\ServerDlg\\Server_2010.sln /p:Configuration=Debug                      >>\"..\\output\\VS2010.log\"\nMSBuild Networking\\ServerDlg\\Server_2010.sln /p:Configuration=Release                    >>\"..\\output\\VS2010.log\"\nMSBuild NotePad\\ProjectFiles\\Notepad_2010.sln /p:Configuration=Debug                     >>\"..\\output\\VS2010.log\"\nMSBuild NotePad\\ProjectFiles\\Notepad_2010.sln /p:Configuration=Release                   >>\"..\\output\\VS2010.log\"\nMSBuild Performance\\ProjectFiles\\Performance_2010.sln /p:Configuration=Debug             >>\"..\\output\\VS2010.log\"\nMSBuild Performance\\ProjectFiles\\Performance_2010.sln /p:Configuration=Release           >>\"..\\output\\VS2010.log\"\nMSBuild Picture\\ProjectFiles\\Picture_2010.sln /p:Configuration=Debug                     >>\"..\\output\\VS2010.log\"\nMSBuild Picture\\ProjectFiles\\Picture_2010.sln /p:Configuration=Release                   >>\"..\\output\\VS2010.log\"\nMSBuild PropertySheet\\ProjectFiles\\PropertySheet_2010.sln /p:Configuration=Debug         >>\"..\\output\\VS2010.log\"\nMSBuild PropertySheet\\ProjectFiles\\PropertySheet_2010.sln /p:Configuration=Release       >>\"..\\output\\VS2010.log\"\nMSBuild Scribble\\ProjectFiles\\Scribble_2010.sln /p:Configuration=Debug                   >>\"..\\output\\VS2010.log\"\nMSBuild Scribble\\ProjectFiles\\Scribble_2010.sln /p:Configuration=Release                 >>\"..\\output\\VS2010.log\"\nMSBuild Simple\\ProjectFiles\\Simple_2010.sln /p:Configuration=Debug                       >>\"..\\output\\VS2010.log\"\nMSBuild Simple\\ProjectFiles\\Simple_2010.sln /p:Configuration=Release                     >>\"..\\output\\VS2010.log\"\nMSBuild Splitter\\ProjectFiles\\Splitter_2010.sln /p:Configuration=Debug                   >>\"..\\output\\VS2010.log\"\nMSBuild Splitter\\ProjectFiles\\Splitter_2010.sln /p:Configuration=Release                 >>\"..\\output\\VS2010.log\"\nMSBuild RibbonFrame\\ProjectFiles\\RibbonFrame_2010.sln /p:Configuration=Debug             >>\"..\\output\\VS2010.log\"\nMSBuild RibbonFrame\\ProjectFiles\\RibbonFrame_2010.sln /p:Configuration=Release           >>\"..\\output\\VS2010.log\"\nMSBuild RibbonSimple\\ProjectFiles\\SimpleRibbon_2010.sln /p:Configuration=Debug           >>\"..\\output\\VS2010.log\"\nMSBuild RibbonSimple\\ProjectFiles\\SimpleRibbon_2010.sln /p:Configuration=Release         >>\"..\\output\\VS2010.log\"\nMSBuild TabDemo\\ProjectFiles\\TabDemo_2010.sln /p:Configuration=Debug                     >>\"..\\output\\VS2010.log\"\nMSBuild TabDemo\\ProjectFiles\\TabDemo_2010.sln /p:Configuration=Release                   >>\"..\\output\\VS2010.log\"\nMSBuild TaskDialog\\ProjectFiles\\TaskDialog_2010.sln /p:Configuration=Debug               >>\"..\\output\\VS2010.log\"\nMSBuild TaskDialog\\ProjectFiles\\TaskDialog_2010.sln /p:Configuration=Release             >>\"..\\output\\VS2010.log\"\nMSBuild Themes\\ProjectFiles\\Themes_2010.sln /p:Configuration=Debug                       >>\"..\\output\\VS2010.log\"\nMSBuild Themes\\ProjectFiles\\Themes_2010.sln /p:Configuration=Release                     >>\"..\\output\\VS2010.log\"\nMSBuild Threads\\ProjectFiles\\Threads_2010.sln /p:Configuration=Debug                     >>\"..\\output\\VS2010.log\"\nMSBuild Threads\\ProjectFiles\\Threads_2010.sln /p:Configuration=Release                   >>\"..\\output\\VS2010.log\"\nMSBuild Tray\\ProjectFiles\\Tray_2010.sln /p:Configuration=Debug                           >>\"..\\output\\VS2010.log\"\nMSBuild Tray\\ProjectFiles\\Tray_2010.sln /p:Configuration=Release                         >>\"..\\output\\VS2010.log\"\n\nmkdir \"..\\output\\VS2010\"\nmkdir \"..\\output\\VS2010\\Debug\"\n\nECHO \"Copying Debug Samples\" >>\"..\\output\\VS2010.log\"\ncopy Browser\\ProjectFiles\\Debug\\Browser.exe                   \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Dialog\\ProjectFiles\\Debug\\Dialog.exe                     \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy CustomControl\\ProjectFiles\\Debug\\CustomControl.exe       \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy DialogBars\\ProjectFiles\\Debug\\DialogBars.exe             \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy DialogDemo\\ProjectFiles\\Debug\\DialogDemo.exe             \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy DialogTab\\ProjectFiles\\Debug\\DialogTab.exe               \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\nREM copy DirectX\\ProjectFiles\\Debug\\DirectX.exe               \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Dock\\ProjectFiles\\Debug\\Dock.exe                         \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy DockContainer\\ProjectFiles\\Debug\\DockContainer.exe       \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy DockTabbedMDI\\ProjectFiles\\Debug\\DockTabbedMDI.exe       \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Explorer\\ProjectFiles\\Debug\\Explorer.exe                 \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy FastGDI\\ProjectFiles\\Debug\\FastGDI.exe                   \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy FormDemo\\ProjectFiles\\Debug\\FormDemo.exe                 \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Frame\\ProjectFiles\\Debug\\Frame.exe                       \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy GDIPlus\\ProjectFiles\\Debug\\GDIPlus.exe                   \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy MDIFrame\\ProjectFiles\\Debug\\MDIFrame.exe                 \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy MDIFrameDemo\\ProjectFiles\\Debug\\MDIDemo.exe              \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy MDIFrameSplitter\\ProjectFiles\\Debug\\MDIFrameSplitter.exe \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Networking\\ClientDlg\\Debug\\Client.exe                    \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Networking\\ServerDlg\\Debug\\Server.exe                    \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy NotePad\\ProjectFiles\\Debug\\Notepad.exe                   \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Performance\\ProjectFiles\\Debug\\Performance.exe           \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Picture\\ProjectFiles\\Debug\\Picture.exe                   \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy PropertySheet\\ProjectFiles\\Debug\\PropertySheet.exe       \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy RibbonFrame\\ProjectFiles\\Debug\\RibbonFrame.exe           \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy RibbonSimple\\ProjectFiles\\Debug\\SimpleRibbon.exe         \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Scribble\\ProjectFiles\\Debug\\Scribble.exe                 \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Simple\\ProjectFiles\\Debug\\Simple.exe                     \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Splitter\\ProjectFiles\\Debug\\Splitter.exe                 \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy TabDemo\\ProjectFiles\\Debug\\TabDemo.exe                   \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy TaskDialog\\ProjectFiles\\Debug\\TaskDialog.exe             \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Themes\\ProjectFiles\\Debug\\Themes.exe                     \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Threads\\ProjectFiles\\Debug\\Threads.exe                   \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Tray\\ProjectFiles\\Debug\\Tray.exe                         \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\n\nmkdir \"..\\output\\VS2010\\Release\"\n\nECHO \"Copying Release Samples\" >>\"..\\output\\VS2010.log\"\ncopy Browser\\ProjectFiles\\Release\\Browser.exe                 \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy CustomControl\\ProjectFiles\\Release\\CustomControl.exe     \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Dialog\\ProjectFiles\\Release\\Dialog.exe                   \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy DialogBars\\ProjectFiles\\Release\\DialogBars.exe           \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy DialogDemo\\ProjectFiles\\Release\\DialogDemo.exe           \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy DialogTab\\ProjectFiles\\Release\\DialogTab.exe             \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\nREM copy DirectX\\ProjectFiles\\Release\\DirectX.exe             \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Dock\\ProjectFiles\\Release\\Dock.exe                       \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy DockContainer\\ProjectFiles\\Release\\DockContainer.exe     \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy DockTabbedMDI\\ProjectFiles\\Release\\DockTabbedMDI.exe     \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Explorer\\ProjectFiles\\Release\\Explorer.exe               \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy FastGDI\\ProjectFiles\\Release\\FastGDI.exe                 \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy FormDemo\\ProjectFiles\\Release\\FormDemo.exe               \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Frame\\ProjectFiles\\Release\\Frame.exe                     \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy GDIPlus\\ProjectFiles\\Release\\GDIPlus.exe                 \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy MDIFrame\\ProjectFiles\\Release\\MDIFrame.exe               \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy MDIFrameDemo\\ProjectFiles\\Release\\MDIDemo.exe            \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy MDIFrameSplitter\\ProjectFiles\\Release\\MDIFrameSplitter.exe \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Networking\\ClientDlg\\Release\\Client.exe                  \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Networking\\ServerDlg\\Release\\Server.exe                  \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy NotePad\\ProjectFiles\\Release\\Notepad.exe                 \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Performance\\ProjectFiles\\Release\\Performance.exe         \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Picture\\ProjectFiles\\Release\\Picture.exe                 \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy PropertySheet\\ProjectFiles\\Release\\PropertySheet.exe     \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy RibbonFrame\\ProjectFiles\\Release\\RibbonFrame.exe         \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy RibbonSimple\\ProjectFiles\\Release\\SimpleRibbon.exe       \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Scribble\\ProjectFiles\\Release\\Scribble.exe               \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Simple\\ProjectFiles\\Release\\Simple.exe                   \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Splitter\\ProjectFiles\\Release\\Splitter.exe               \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy TabDemo\\ProjectFiles\\Release\\TabDemo.exe                 \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy TaskDialog\\ProjectFiles\\Release\\TaskDialog.exe           \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Themes\\ProjectFiles\\Release\\Themes.exe                   \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Threads\\ProjectFiles\\Release\\Threads.exe                 \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Tray\\ProjectFiles\\Release\\Tray.exe                       \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\n\n\nREM: Change the directory to the Tutorials parent\npopd\npushd ..\\Tutorials\n\nREM: Compile Tutorials\nECHO \"Compliling Tutorials\" >>\"..\\output\\VS2010.log\"\n::Compile code\nMSBuild Tutorial1\\Tutorial1_2010.sln /p:Configuration=Debug       >>\"..\\output\\VS2010.log\"\nMSBuild Tutorial1\\Tutorial1_2010.sln /p:Configuration=Release     >>\"..\\output\\VS2010.log\"\nMSBuild Tutorial2\\Tutorial2_2010.sln /p:Configuration=Debug       >>\"..\\output\\VS2010.log\"\nMSBuild Tutorial2\\Tutorial2_2010.sln /p:Configuration=Release     >>\"..\\output\\VS2010.log\"\nMSBuild Tutorial3\\Tutorial3_2010.sln /p:Configuration=Debug       >>\"..\\output\\VS2010.log\"\nMSBuild Tutorial3\\Tutorial3_2010.sln /p:Configuration=Release     >>\"..\\output\\VS2010.log\"\nMSBuild Tutorial4\\Tutorial4_2010.sln /p:Configuration=Debug       >>\"..\\output\\VS2010.log\"\nMSBuild Tutorial4\\Tutorial4_2010.sln /p:Configuration=Release     >>\"..\\output\\VS2010.log\"\nMSBuild Tutorial5\\Tutorial5_2010.sln /p:Configuration=Debug       >>\"..\\output\\VS2010.log\"\nMSBuild Tutorial5\\Tutorial5_2010.sln /p:Configuration=Release     >>\"..\\output\\VS2010.log\"\nMSBuild Tutorial6\\Tutorial6_2010.sln /p:Configuration=Debug       >>\"..\\output\\VS2010.log\"\nMSBuild Tutorial6\\Tutorial6_2010.sln /p:Configuration=Release     >>\"..\\output\\VS2010.log\"\nMSBuild Tutorial7\\Tutorial7_2010.sln /p:Configuration=Debug       >>\"..\\output\\VS2010.log\"\nMSBuild Tutorial7\\Tutorial7_2010.sln /p:Configuration=Release     >>\"..\\output\\VS2010.log\"\nMSBuild Tutorial8\\Tutorial8_2010.sln /p:Configuration=Debug       >>\"..\\output\\VS2010.log\"\nMSBuild Tutorial8\\Tutorial8_2010.sln /p:Configuration=Release     >>\"..\\output\\VS2010.log\"\nMSBuild Tutorial9\\Tutorial9_2010.sln /p:Configuration=Debug       >>\"..\\output\\VS2010.log\"\nMSBuild Tutorial9\\Tutorial9_2010.sln /p:Configuration=Release     >>\"..\\output\\VS2010.log\"\n\nmkdir \"..\\output\\VS2010\\Tutorials\"\nmkdir \"..\\output\\VS2010\\Tutorials\\Debug\"\n\nECHO \"Copying Debug Tutorials\" >>\"..\\output\\VS2010.log\"\ncopy Tutorial1\\Debug\\Tutorial1.exe         \"..\\output\\VS2010\\Tutorials\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial2\\Debug\\Tutorial2.exe         \"..\\output\\VS2010\\Tutorials\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial3\\Debug\\Tutorial3.exe         \"..\\output\\VS2010\\Tutorials\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial4\\Debug\\Tutorial4.exe         \"..\\output\\VS2010\\Tutorials\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial5\\Debug\\Tutorial5.exe         \"..\\output\\VS2010\\Tutorials\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial6\\Debug\\Tutorial6.exe         \"..\\output\\VS2010\\Tutorials\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial7\\Debug\\Tutorial7.exe         \"..\\output\\VS2010\\Tutorials\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial8\\Debug\\Tutorial8.exe         \"..\\output\\VS2010\\Tutorials\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial9\\Debug\\Tutorial9.exe         \"..\\output\\VS2010\\Tutorials\\Debug\"    >>\"..\\output\\VS2010.log\"\n\nmkdir \"..\\output\\VS2010\\Tutorials\\Release\"\n\nECHO \"Copying Release Tutorials\" >>\"..\\output\\VS2010.log\"\ncopy Tutorial1\\Release\\Tutorial1.exe       \"..\\output\\VS2010\\Tutorials\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial2\\Release\\Tutorial2.exe       \"..\\output\\VS2010\\Tutorials\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial3\\Release\\Tutorial3.exe       \"..\\output\\VS2010\\Tutorials\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial4\\Release\\Tutorial4.exe       \"..\\output\\VS2010\\Tutorials\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial5\\Release\\Tutorial5.exe       \"..\\output\\VS2010\\Tutorials\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial6\\Release\\Tutorial6.exe       \"..\\output\\VS2010\\Tutorials\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial7\\Release\\Tutorial7.exe       \"..\\output\\VS2010\\Tutorials\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial8\\Release\\Tutorial8.exe       \"..\\output\\VS2010\\Tutorials\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial9\\Release\\Tutorial9.exe       \"..\\output\\VS2010\\Tutorials\\Release\"    >>\"..\\output\\VS2010.log\"\n\nREM: Pop the directory change off the stack\npopd\n\n\n"
  },
  {
    "path": "external/win32cpp/tools/Compile VS2010.bat",
    "content": "REM: A batch program to rebuild the Win32++ samples using VS2010.\nREM: The contents of the log file is erased \n\nREM: Set the paths and environment variables\ncall \"C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\vcvarsall.bat\" x86\n\n::Cleanup\ncall CleanSamples\ncall CleanTutorials\n\n@echo on\n\nREM: Change the directory to the Samples parent\npushd ..\\Samples\nif exist \"..\\output\\VS2010\\Debug\" rmdir /s /q \"..\\output\\VS2010\\Debug\"\nif exist \"..\\output\\VS2010\\Release\" rmdir /s /q \"..\\output\\VS2010\\Release\"\nif exist \"..\\output\\VS2010\\Tutorials\" rmdir /s /q \"..\\output\\VS2010\\Tutorials\"\n\n\n::Compile code\ndevenv /build Debug Browser\\ProjectFiles\\Browser_2010.sln               > \"..\\output\\VS2010.log\"\ndevenv /build Release Browser\\ProjectFiles\\Browser_2010.sln             >>\"..\\output\\VS2010.log\"\ndevenv /build Debug CustomControl\\ProjectFiles\\CustomControl_2010.sln   >>\"..\\output\\VS2010.log\"\ndevenv /build Release CustomControl\\ProjectFiles\\CustomControl_2010.sln >>\"..\\output\\VS2010.log\"\ndevenv /build Debug Dialog\\ProjectFiles\\Dialog_2010.sln                 >>\"..\\output\\VS2010.log\"\ndevenv /build Release Dialog\\ProjectFiles\\Dialog_2010.sln               >>\"..\\output\\VS2010.log\"\ndevenv /build Debug DialogBars\\ProjectFiles\\DialogBars_2010.sln         >>\"..\\output\\VS2010.log\"\ndevenv /build Release DialogBars\\ProjectFiles\\DialogBars_2010.sln       >>\"..\\output\\VS2010.log\"\ndevenv /build Debug DialogDemo\\ProjectFiles\\DialogDemo_2010.sln         >>\"..\\output\\VS2010.log\"\ndevenv /build Release DialogDemo\\ProjectFiles\\DialogDemo_2010.sln       >>\"..\\output\\VS2010.log\"\ndevenv /build Debug DialogTab\\ProjectFiles\\DialogTab_2010.sln           >>\"..\\output\\VS2010.log\"\ndevenv /build Release DialogTab\\ProjectFiles\\DialogTab_2010.sln         >>\"..\\output\\VS2010.log\"\nREM devenv /build Debug DirectX\\ProjectFiles\\DirectX_2010.sln           >>\"..\\output\\VS2010.log\"\nREM devenv /build Release DirectX\\ProjectFiles\\DirectX_2010.sln         >>\"..\\output\\VS2010.log\"\ndevenv /build Debug Dock\\ProjectFiles\\Dock_2010.sln                     >>\"..\\output\\VS2010.log\"\ndevenv /build Release Dock\\ProjectFiles\\Dock_2010.sln                   >>\"..\\output\\VS2010.log\"\ndevenv /build Debug DockContainer\\ProjectFiles\\DockContainer_2010.sln   >>\"..\\output\\VS2010.log\"\ndevenv /build Release DockContainer\\ProjectFiles\\DockContainer_2010.sln >>\"..\\output\\VS2010.log\"\ndevenv /build Debug DockTabbedMDI\\ProjectFiles\\DockTabbedMDI_2010.sln   >>\"..\\output\\VS2010.log\"\ndevenv /build Release DockTabbedMDI\\ProjectFiles\\DockTabbedMDI_2010.sln >>\"..\\output\\VS2010.log\"\ndevenv /build Debug Explorer\\ProjectFiles\\Explorer_2010.sln             >>\"..\\output\\VS2010.log\"\ndevenv /build Release Explorer\\ProjectFiles\\Explorer_2010.sln           >>\"..\\output\\VS2010.log\"\ndevenv /build Debug FastGDI\\ProjectFiles\\FastGDI_2010.sln               >>\"..\\output\\VS2010.log\"\ndevenv /build Release FastGDI\\ProjectFiles\\FastGDI_2010.sln             >>\"..\\output\\VS2010.log\"\ndevenv /build Debug FormDemo\\ProjectFiles\\FormDemo_2010.sln             >>\"..\\output\\VS2010.log\"\ndevenv /build Release FormDemo\\ProjectFiles\\FormDemo_2010.sln           >>\"..\\output\\VS2010.log\"\ndevenv /build Debug Frame\\ProjectFiles\\Frame_2010.sln                   >>\"..\\output\\VS2010.log\"\ndevenv /build Release Frame\\ProjectFiles\\Frame_2010.sln                 >>\"..\\output\\VS2010.log\"\ndevenv /build Debug GDIPlus\\ProjectFiles\\GDIPlus_2010.sln                   >>\"..\\output\\VS2010.log\"\ndevenv /build Release GDIPlus\\ProjectFiles\\GDIPlus_2010.sln                 >>\"..\\output\\VS2010.log\"\ndevenv /build Debug MDIFrame\\ProjectFiles\\MDIFrame_2010.sln             >>\"..\\output\\VS2010.log\"\ndevenv /build Release MDIFrame\\ProjectFiles\\MDIFrame_2010.sln           >>\"..\\output\\VS2010.log\"\ndevenv /build Debug MDIFrameDemo\\ProjectFiles\\MDIDemo_2010.sln          >>\"..\\output\\VS2010.log\"\ndevenv /build Release MDIFrameDemo\\ProjectFiles\\MDIDemo_2010.sln        >>\"..\\output\\VS2010.log\"\ndevenv /build Debug MDIFrameSplitter\\ProjectFiles\\MDIFrameSplitter_2010.sln >>\"..\\output\\VS2010.log\"\ndevenv /build Release MDIFrameSplitter\\ProjectFiles\\MDIFrameSplitter_2010.sln >>\"..\\output\\VS2010.log\"\ndevenv /build Debug Networking\\ClientDlg\\Client_2010.sln                >>\"..\\output\\VS2010.log\"\ndevenv /build Release Networking\\ClientDlg\\Client_2010.sln              >>\"..\\output\\VS2010.log\"\ndevenv /build Debug Networking\\ServerDlg\\Server_2010.sln                >>\"..\\output\\VS2010.log\"\ndevenv /build Release Networking\\ServerDlg\\Server_2010.sln              >>\"..\\output\\VS2010.log\"\ndevenv /build Debug NotePad\\ProjectFiles\\Notepad_2010.sln               >>\"..\\output\\VS2010.log\"\ndevenv /build Release NotePad\\ProjectFiles\\Notepad_2010.sln             >>\"..\\output\\VS2010.log\"\ndevenv /build Debug Performance\\ProjectFiles\\Performance_2010.sln       >>\"..\\output\\VS2010.log\"\ndevenv /build Release Performance\\ProjectFiles\\Performance_2010.sln     >>\"..\\output\\VS2010.log\"\ndevenv /build Debug Picture\\ProjectFiles\\Picture_2010.sln               >>\"..\\output\\VS2010.log\"\ndevenv /build Release Picture\\ProjectFiles\\Picture_2010.sln             >>\"..\\output\\VS2010.log\"\ndevenv /build Debug PropertySheet\\ProjectFiles\\PropertySheet_2010.sln   >>\"..\\output\\VS2010.log\"\ndevenv /build Release PropertySheet\\ProjectFiles\\PropertySheet_2010.sln >>\"..\\output\\VS2010.log\"\ndevenv /build Debug RibbonFrame\\ProjectFiles\\RibbonFrame_2010.sln       >>\"..\\output\\VS2010.log\"\ndevenv /build Release RibbonFrame\\ProjectFiles\\RibbonFrame_2010.sln     >>\"..\\output\\VS2010.log\"\ndevenv /build Debug RibbonSimple\\ProjectFiles\\SimpleRibbon_2010.sln     >>\"..\\output\\VS2010.log\"\ndevenv /build Release RibbonSimple\\ProjectFiles\\SimpleRibbon_2010.sln   >>\"..\\output\\VS2010.log\"\ndevenv /build Debug Scribble\\ProjectFiles\\Scribble_2010.sln             >>\"..\\output\\VS2010.log\"\ndevenv /build Release Scribble\\ProjectFiles\\Scribble_2010.sln           >>\"..\\output\\VS2010.log\"\ndevenv /build Debug Simple\\ProjectFiles\\Simple_2010.sln                 >>\"..\\output\\VS2010.log\"\ndevenv /build Release Simple\\ProjectFiles\\Simple_2010.sln               >>\"..\\output\\VS2010.log\"\ndevenv /build Debug Splitter\\ProjectFiles\\Splitter_2010.sln             >>\"..\\output\\VS2010.log\"\ndevenv /build Release Splitter\\ProjectFiles\\Splitter_2010.sln           >>\"..\\output\\VS2010.log\"\ndevenv /build Debug TabDemo\\ProjectFiles\\TabDemo_2010.sln               >>\"..\\output\\VS2010.log\"\ndevenv /build Release TabDemo\\ProjectFiles\\TabDemo_2010.sln             >>\"..\\output\\VS2010.log\"\ndevenv /build Debug TaskDialog\\ProjectFiles\\TaskDialog_2010.sln         >>\"..\\output\\VS2010.log\"\ndevenv /build Release TaskDialog\\ProjectFiles\\TaskDialog_2010.sln       >>\"..\\output\\VS2010.log\"\ndevenv /build Debug Themes\\ProjectFiles\\Themes_2010.sln                 >>\"..\\output\\VS2010.log\"\ndevenv /build Release Themes\\ProjectFiles\\Themes_2010.sln               >>\"..\\output\\VS2010.log\"\ndevenv /build Debug Threads\\ProjectFiles\\Threads_2010.sln               >>\"..\\output\\VS2010.log\"\ndevenv /build Release Threads\\ProjectFiles\\Threads_2010.sln             >>\"..\\output\\VS2010.log\"\ndevenv /build Debug Tray\\ProjectFiles\\Tray_2010.sln                     >>\"..\\output\\VS2010.log\"\ndevenv /build Release Tray\\ProjectFiles\\Tray_2010.sln                   >>\"..\\output\\VS2010.log\"\n\nmkdir \"..\\output\\VS2010\"\nmkdir \"..\\output\\VS2010\\Debug\"\n\nECHO \"Copying Debug Samples\" >>\"..\\output\\VS2010.log\"\ncopy Browser\\ProjectFiles\\Debug\\Browser.exe                   \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy CustomControl\\ProjectFiles\\Debug\\CustomControl.exe       \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Dialog\\ProjectFiles\\Debug\\Dialog.exe                     \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy DialogBars\\ProjectFiles\\Debug\\DialogBars.exe             \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy DialogDemo\\ProjectFiles\\Debug\\DialogDemo.exe             \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy DialogTab\\ProjectFiles\\Debug\\DialogTab.exe               \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\nREM copy DirectX\\ProjectFiles\\Debug\\DirectX.exe               \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Dock\\ProjectFiles\\Debug\\Dock.exe                         \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy DockContainer\\ProjectFiles\\Debug\\DockContainer.exe       \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy DockTabbedMDI\\ProjectFiles\\Debug\\DockTabbedMDI.exe       \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Explorer\\ProjectFiles\\Debug\\Explorer.exe                 \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy FastGDI\\ProjectFiles\\Debug\\FastGDI.exe                   \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy FormDemo\\ProjectFiles\\Debug\\FormDemo.exe                 \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Frame\\ProjectFiles\\Debug\\Frame.exe                       \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy GDIPlus\\ProjectFiles\\Debug\\GDIPlus.exe                   \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy MDIFrame\\ProjectFiles\\Debug\\MDIFrame.exe                 \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy MDIFrameDemo\\ProjectFiles\\Debug\\MDIDemo.exe              \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy MDIFrameSplitter\\ProjectFiles\\Debug\\MDIFrameSplitter.exe \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Networking\\ClientDlg\\Debug\\Client.exe                    \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Networking\\ServerDlg\\Debug\\Server.exe                    \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy NotePad\\ProjectFiles\\Debug\\Notepad.exe                   \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Performance\\ProjectFiles\\Debug\\Performance.exe           \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Picture\\ProjectFiles\\Debug\\Picture.exe                   \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy PropertySheet\\ProjectFiles\\Debug\\PropertySheet.exe       \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy RibbonFrame\\ProjectFiles\\Debug\\RibbonFrame.exe           \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy RibbonSimple\\ProjectFiles\\Debug\\SimpleRibbon.exe         \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Scribble\\ProjectFiles\\Debug\\Scribble.exe                 \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Simple\\ProjectFiles\\Debug\\Simple.exe                     \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Splitter\\ProjectFiles\\Debug\\Splitter.exe                 \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy TabDemo\\ProjectFiles\\Debug\\TabDemo.exe                   \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy TaskDialog\\ProjectFiles\\Debug\\TaskDialog.exe             \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Themes\\ProjectFiles\\Debug\\Themes.exe                     \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Threads\\ProjectFiles\\Debug\\Threads.exe                   \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Tray\\ProjectFiles\\Debug\\Tray.exe                         \"..\\output\\VS2010\\Debug\"    >>\"..\\output\\VS2010.log\"\n\nmkdir \"..\\output\\VS2010\\Release\"\n\nECHO \"Copying Release Samples\" >>\"..\\output\\VS2010.log\"\ncopy Browser\\ProjectFiles\\Release\\Browser.exe                   \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy CustomControl\\ProjectFiles\\Release\\CustomControl.exe       \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Dialog\\ProjectFiles\\Release\\Dialog.exe                     \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy DialogBars\\ProjectFiles\\Release\\DialogBars.exe             \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy DialogDemo\\ProjectFiles\\Release\\DialogDemo.exe             \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy DialogTab\\ProjectFiles\\Release\\DialogTab.exe               \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\nREM copy DirectX\\ProjectFiles\\Release\\DirectX.exe               \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Dock\\ProjectFiles\\Release\\Dock.exe                         \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy DockContainer\\ProjectFiles\\Release\\DockContainer.exe       \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy DockTabbedMDI\\ProjectFiles\\Release\\DockTabbedMDI.exe       \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Explorer\\ProjectFiles\\Release\\Explorer.exe                 \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy FastGDI\\ProjectFiles\\Release\\FastGDI.exe                   \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy FormDemo\\ProjectFiles\\Release\\FormDemo.exe                 \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Frame\\ProjectFiles\\Release\\Frame.exe                       \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy GDIPlus\\ProjectFiles\\Release\\GDIPlus.exe                   \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy MDIFrame\\ProjectFiles\\Release\\MDIFrame.exe                 \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy MDIFrameDemo\\ProjectFiles\\Release\\MDIDemo.exe              \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy MDIFrameSplitter\\ProjectFiles\\Release\\MDIFrameSplitter.exe \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Networking\\ClientDlg\\Release\\Client.exe                    \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Networking\\ServerDlg\\Release\\Server.exe                    \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy NotePad\\ProjectFiles\\Release\\Notepad.exe                   \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Performance\\ProjectFiles\\Release\\Performance.exe           \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Picture\\ProjectFiles\\Release\\Picture.exe                   \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy PropertySheet\\ProjectFiles\\Release\\PropertySheet.exe       \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy RibbonFrame\\ProjectFiles\\Release\\RibbonFrame.exe           \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy RibbonSimple\\ProjectFiles\\Release\\SimpleRibbon.exe         \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Scribble\\ProjectFiles\\Release\\Scribble.exe                 \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Simple\\ProjectFiles\\Release\\Simple.exe                     \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Splitter\\ProjectFiles\\Release\\Splitter.exe                 \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy TabDemo\\ProjectFiles\\Release\\TabDemo.exe                   \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy TaskDialog\\ProjectFiles\\Release\\TaskDialog.exe             \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Themes\\ProjectFiles\\Release\\Themes.exe                     \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Threads\\ProjectFiles\\Release\\Threads.exe                   \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Tray\\ProjectFiles\\Release\\Tray.exe                         \"..\\output\\VS2010\\Release\"    >>\"..\\output\\VS2010.log\"\n\nREM: Change the directory to the Tutorials parent\npopd\npushd ..\\Tutorials\n\nREM: Compile Tutorials\nECHO \"Compliling Tutorials\" >>\"..\\output\\VS2010.log\"\n::Compile code\ndevenv /build Debug Tutorial1\\Tutorial1_2010.sln      >>\"..\\output\\VS2010.log\"\ndevenv /build Release Tutorial1\\Tutorial1_2010.sln    >>\"..\\output\\VS2010.log\"\ndevenv /build Debug Tutorial2\\Tutorial2_2010.sln      >>\"..\\output\\VS2010.log\"\ndevenv /build Release Tutorial2\\Tutorial2_2010.sln    >>\"..\\output\\VS2010.log\"\ndevenv /build Debug Tutorial3\\Tutorial3_2010.sln      >>\"..\\output\\VS2010.log\"\ndevenv /build Release Tutorial3\\Tutorial3_2010.sln    >>\"..\\output\\VS2010.log\"\ndevenv /build Debug Tutorial4\\Tutorial4_2010.sln      >>\"..\\output\\VS2010.log\"\ndevenv /build Release Tutorial4\\Tutorial4_2010.sln    >>\"..\\output\\VS2010.log\"\ndevenv /build Debug Tutorial5\\Tutorial5_2010.sln      >>\"..\\output\\VS2010.log\"\ndevenv /build Release Tutorial5\\Tutorial5_2010.sln    >>\"..\\output\\VS2010.log\"\ndevenv /build Debug Tutorial6\\Tutorial6_2010.sln      >>\"..\\output\\VS2010.log\"\ndevenv /build Release Tutorial6\\Tutorial6_2010.sln    >>\"..\\output\\VS2010.log\"\ndevenv /build Debug Tutorial7\\Tutorial7_2010.sln      >>\"..\\output\\VS2010.log\"\ndevenv /build Release Tutorial7\\Tutorial7_2010.sln    >>\"..\\output\\VS2010.log\"\ndevenv /build Debug Tutorial8\\Tutorial8_2010.sln      >>\"..\\output\\VS2010.log\"\ndevenv /build Release Tutorial8\\Tutorial8_2010.sln    >>\"..\\output\\VS2010.log\"\ndevenv /build Debug Tutorial9\\Tutorial9_2010.sln      >>\"..\\output\\VS2010.log\"\ndevenv /build Release Tutorial9\\Tutorial9_2010.sln    >>\"..\\output\\VS2010.log\"\n\nmkdir \"..\\output\\VS2010\\Tutorials\"\nmkdir \"..\\output\\VS2010\\Tutorials\\Debug\"\n\nECHO \"Copying Debug Tutorials\" >>\"..\\output\\VS2010.log\"\ncopy Tutorial1\\Debug\\Tutorial1.exe         \"..\\output\\VS2010\\Tutorials\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial2\\Debug\\Tutorial2.exe         \"..\\output\\VS2010\\Tutorials\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial3\\Debug\\Tutorial3.exe         \"..\\output\\VS2010\\Tutorials\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial4\\Debug\\Tutorial4.exe         \"..\\output\\VS2010\\Tutorials\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial5\\Debug\\Tutorial5.exe         \"..\\output\\VS2010\\Tutorials\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial6\\Debug\\Tutorial6.exe         \"..\\output\\VS2010\\Tutorials\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial7\\Debug\\Tutorial7.exe         \"..\\output\\VS2010\\Tutorials\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial8\\Debug\\Tutorial8.exe         \"..\\output\\VS2010\\Tutorials\\Debug\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial9\\Debug\\Tutorial9.exe         \"..\\output\\VS2010\\Tutorials\\Debug\"    >>\"..\\output\\VS2010.log\"\n\nmkdir \"..\\output\\VS2010\\Tutorials\\Release\"\n\nECHO \"Copying Release Tutorials\" >>\"..\\output\\VS2010.log\"\ncopy Tutorial1\\Release\\Tutorial1.exe       \"..\\output\\VS2010\\Tutorials\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial2\\Release\\Tutorial2.exe       \"..\\output\\VS2010\\Tutorials\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial3\\Release\\Tutorial3.exe       \"..\\output\\VS2010\\Tutorials\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial4\\Release\\Tutorial4.exe       \"..\\output\\VS2010\\Tutorials\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial5\\Release\\Tutorial5.exe       \"..\\output\\VS2010\\Tutorials\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial6\\Release\\Tutorial6.exe       \"..\\output\\VS2010\\Tutorials\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial7\\Release\\Tutorial7.exe       \"..\\output\\VS2010\\Tutorials\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial8\\Release\\Tutorial8.exe       \"..\\output\\VS2010\\Tutorials\\Release\"    >>\"..\\output\\VS2010.log\"\ncopy Tutorial9\\Release\\Tutorial9.exe       \"..\\output\\VS2010\\Tutorials\\Release\"    >>\"..\\output\\VS2010.log\"\n\nREM: Pop the directory change off the stack\npopd\n\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Readme.txt",
    "content": "Tutorials\n=========\nThe description of these tutorials is contained within the documentation that\nships with Win32++. This documentation is located within the \"help\" directory. \n\nThis set of tutorials demonstrate a step by step approach to building a typical\napplication with Win32++.\n\n\n\n\n\n\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial1/Tutorial1.bdsproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<BorlandProject>\n\t<PersonalityInfo>\n\t\t<Option>\n\t\t\t<Option Name=\"Personality\">CPlusPlusBuilder.Personality</Option>\n\t\t\t<Option Name=\"ProjectType\">CppGuiApplication</Option>\n\t\t\t<Option Name=\"Version\">1.0</Option>\n\t\t\t<Option Name=\"GUID\">{D89B38BC-DF6B-4DE6-B007-C3EB16A9D851}</Option>\n\t\t</Option>\n\t</PersonalityInfo>\n\t<CPlusPlusBuilder.Personality>\n\t\t<Source>\n\t\t\t<Source Name=\"MainSource\">Tutorial1.bpf</Source>\n\t\t</Source>\n\t\t<BCBPROJECT>\n      <project version=\"10.0\">\n        <property category=\"build.config\" name=\"active\" value=\"0\"/>\n        <property category=\"build.config\" name=\"count\" value=\"1\"/>\n        <property category=\"build.config\" name=\"excludedefaultforzero\" value=\"0\"/>\n        <property category=\"build.config.0\" name=\"builddir\" value=\"Debug\"/>\n        <property category=\"build.config.0\" name=\"key\" value=\"Debug_Build\"/>\n        <property category=\"build.config.0\" name=\"name\" value=\"Debug Build\"/>\n        <property category=\"build.config.0\" name=\"settings.win32b\" value=\"default\"/>\n        <property category=\"build.config.0\" name=\"type\" value=\"Toolset\"/>\n        <property category=\"build.config.0\" name=\"win32.win32b.builddir\" value=\"Debug_Build\"/>\n        <property category=\"build.config.1\" name=\"key\" value=\"Release_Build\"/>\n        <property category=\"build.config.1\" name=\"name\" value=\"Release Build\"/>\n        <property category=\"build.config.1\" name=\"settings.win32b\" value=\"default\"/>\n        <property category=\"build.config.1\" name=\"type\" value=\"Toolset\"/>\n        <property category=\"build.config.1\" name=\"win32.win32b.builddir\" value=\"Release_Build\"/>\n        <property category=\"build.node\" name=\"name\" value=\"Tutorial1.exe\"/>\n        <property category=\"build.node\" name=\"packages\" value=\"vclx;vcl;rtl;dbrtl;vcldb;adortl;dbxcds;dbexpress;xmlrtl;vclie;inet;inetdbbde;inetdbxpress;soaprtl;dsnap;bdertl;vcldbx\"/>\n        <property category=\"build.node\" name=\"use_packages\" value=\"1\"/>\n        <property category=\"build.platform\" name=\"active\" value=\"win32\"/>\n        <property category=\"build.platform\" name=\"win32.Debug_Build.toolset\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.Release_Build.toolset\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.default\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.enabled\" value=\"1\"/>\n        <property category=\"build.platform\" name=\"win32.win32b.enabled\" value=\"1\"/>\n        <property category=\"win32.*.win32b.dcc32\" name=\"param.filenames.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.listfile.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.objfile.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.xreffile.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.arg.1\" value=\"_DEBUG\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.Od.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.k.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.r.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.v.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.vi.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.y.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.$D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.$O.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.arg.1\" value=\"DEBUG\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.V.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.arg.1\" value=\"$(BDS)\\lib\\debug\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.z.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.zd.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.zi.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.arg.1\" value=\"NDEBUG\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.O2.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.k.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.r.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.vi.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.$D.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.$O.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.V.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.arg.1\" value=\"$(BDS)\\lib\\release\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.z.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zd.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zi.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zn.enabled\" value=\"1\"/>\n        <optionset name=\"all_configurations\">\n          <property category=\"node\" name=\"displayname\" value=\"All Configurations\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.arg.1\" value=\"$(BDS)\\lib\\vcl100.csm\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Hc.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.He.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Hs.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.2\" value=\"$(BDS)\\include\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.3\" value=\"$(BDS)\\include\\dinkumware\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.4\" value=\"$(BDS)\\include\\vcl\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Ve.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.b.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.1\" value=\"_RTLDLL\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.2\" value=\"USEPACKAGES\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.3\" value=\"NO_STRICT\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.4\" value=\"_NO_VCL\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tW.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWC.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWD.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWM.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.2\" value=\".\\\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.3\" value=\"$(BDS)\\lib\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.4\" value=\"$(BDS)\\lib\\obj\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"param.filenames.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Gi.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.2\" value=\"$(BDS)\\lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.3\" value=\"$(BDS)\\lib\\obj\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.4\" value=\"$(BDS)\\lib\\psdk\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpd.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpe.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpp.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.aa.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.ap.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.dynamicrtl.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.1\" value=\"import32.lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.2\" value=\"cw32mti.lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.1\" value=\"c0w32.obj\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.2\" value=\"$(PACKAGES)\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.merge\" value=\"1\"/>\n        </optionset>\n      </project>\n      <FILELIST>\n        <FILE FILENAME=\"main.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"main\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\WinCore.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n      </FILELIST>\n      <IDEOPTIONS>\n        <VersionInfo>\n          <VersionInfo Name=\"IncludeVerInfo\">False</VersionInfo>\n          <VersionInfo Name=\"AutoIncBuild\">False</VersionInfo>\n          <VersionInfo Name=\"MajorVer\">1</VersionInfo>\n          <VersionInfo Name=\"MinorVer\">0</VersionInfo>\n          <VersionInfo Name=\"Release\">0</VersionInfo>\n          <VersionInfo Name=\"Build\">0</VersionInfo>\n          <VersionInfo Name=\"Debug\">False</VersionInfo>\n          <VersionInfo Name=\"PreRelease\">False</VersionInfo>\n          <VersionInfo Name=\"Special\">False</VersionInfo>\n          <VersionInfo Name=\"Private\">False</VersionInfo>\n          <VersionInfo Name=\"DLL\">False</VersionInfo>\n          <VersionInfo Name=\"Locale\">3081</VersionInfo>\n          <VersionInfo Name=\"CodePage\">1252</VersionInfo>\n        </VersionInfo>\n        <VersionInfoKeys>\n          <VersionInfoKeys Name=\"CompanyName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"FileDescription\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"FileVersion\">1.0.0.0</VersionInfoKeys>\n          <VersionInfoKeys Name=\"InternalName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"LegalCopyright\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"LegalTrademarks\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"OriginalFilename\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"ProductName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"ProductVersion\">1.0.0.0</VersionInfoKeys>\n          <VersionInfoKeys Name=\"Comments\"></VersionInfoKeys>\n        </VersionInfoKeys>\n        <Debugging>\n          <Debugging Name=\"DebugSourceDirs\"></Debugging>\n        </Debugging>\n        <Parameters>\n          <Parameters Name=\"RunParams\"></Parameters>\n          <Parameters Name=\"Launcher\"></Parameters>\n          <Parameters Name=\"UseLauncher\">False</Parameters>\n          <Parameters Name=\"DebugCWD\"></Parameters>\n          <Parameters Name=\"HostApplication\"></Parameters>\n          <Parameters Name=\"RemoteHost\"></Parameters>\n          <Parameters Name=\"RemotePath\"></Parameters>\n          <Parameters Name=\"RemoteParams\"></Parameters>\n          <Parameters Name=\"RemoteLauncher\"></Parameters>\n          <Parameters Name=\"UseRemoteLauncher\">False</Parameters>\n          <Parameters Name=\"RemoteCWD\"></Parameters>\n          <Parameters Name=\"RemoteDebug\">False</Parameters>\n          <Parameters Name=\"Debug Symbols Search Path\"></Parameters>\n          <Parameters Name=\"LoadAllSymbols\">True</Parameters>\n          <Parameters Name=\"LoadUnspecifiedSymbols\">False</Parameters>\n        </Parameters>\n        <Linker>\n          <Linker Name=\"LibPrefix\"></Linker>\n          <Linker Name=\"LibSuffix\"></Linker>\n          <Linker Name=\"LibVersion\"></Linker>\n        </Linker>\n      </IDEOPTIONS>\n    </BCBPROJECT>\n\t\t<buildevents/>\n\t</CPlusPlusBuilder.Personality>\n</BorlandProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial1/Tutorial1.bpf",
    "content": "This file is used by the project manager only and should be treated like the project file\n\nTo add a file to this project use the Project menu 'Add to Project'\n\nWinMain"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial1/Tutorial1.dev",
    "content": "[Project]\nFileName=Tutorial1.dev\nName=Tutorial1\nUnitCount=2\nType=0\nVer=1\nObjFiles=\nIncludes=..\\..\\include\nLibs=\nPrivateResource=\nResourceIncludes=..\\..\\include\nMakeIncludes=\nCompiler=\nCppCompiler=-D _WIN32_IE=0x0400_@@_\nLinker=_@@_\nIsCpp=1\nIcon=\nExeOutput=.\\Dev-C++\nObjectOutput=.\\Dev-C++\nOverrideOutput=0\nOverrideOutputName=Tutorial1.exe\nHostApplication=\nFolders=Win32++\nCommandLine=\nUseCustomMakefile=0\nCustomMakefile=\nIncludeVersionInfo=0\nSupportXPThemes=0\nCompilerSet=0\nCompilerSettings=0000000000000000000000\n\n[Unit1]\nFileName=main.cpp\nCompileCpp=1\nFolder=Tutorial1\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[VersionInfo]\nMajor=0\nMinor=1\nRelease=1\nBuild=1\nLanguageID=1033\nCharsetID=1252\nCompanyName=\nFileVersion=\nFileDescription=Developed using the Dev-C++ IDE\nInternalName=\nLegalCopyright=\nLegalTrademarks=\nOriginalFilename=\nProductName=\nProductVersion=\nAutoIncBuildNr=0\n\n[Unit2]\nFileName=..\\..\\include\\wincore.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial1/Tutorial1.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"Tutorial1\" - Package Owner=<4>\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\n# ** DO NOT EDIT **\n\n# TARGTYPE \"Win32 (x86) Application\" 0x0101\n\nCFG=Tutorial1 - Win32 Debug\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\n!MESSAGE use the Export Makefile command and run\n!MESSAGE \n!MESSAGE NMAKE /f \"Tutorial1.mak\".\n!MESSAGE \n!MESSAGE You can specify a configuration when running NMAKE\n!MESSAGE by defining the macro CFG on the command line. For example:\n!MESSAGE \n!MESSAGE NMAKE /f \"Tutorial1.mak\" CFG=\"Tutorial1 - Win32 Debug\"\n!MESSAGE \n!MESSAGE Possible choices for configuration are:\n!MESSAGE \n!MESSAGE \"Tutorial1 - Win32 Release\" (based on \"Win32 (x86) Application\")\n!MESSAGE \"Tutorial1 - Win32 Debug\" (based on \"Win32 (x86) Application\")\n!MESSAGE \n\n# Begin Project\n# PROP AllowPerConfigDependencies 0\n# PROP Scc_ProjName \"\"\n# PROP Scc_LocalPath \"\"\nCPP=cl.exe\nMTL=midl.exe\nRSC=rc.exe\n\n!IF  \"$(CFG)\" == \"Tutorial1 - Win32 Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"Release\"\n# PROP BASE Intermediate_Dir \"Release\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"Release\"\n# PROP Intermediate_Dir \"Release\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\n# ADD CPP /nologo /W3 /GR /GX /O2 /I \"..\\..\\include\" /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\n# ADD BASE RSC /l 0xc09 /d \"NDEBUG\"\n# ADD RSC /l 0xc09 /d \"NDEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386\n\n!ELSEIF  \"$(CFG)\" == \"Tutorial1 - Win32 Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"Debug\"\n# PROP BASE Intermediate_Dir \"Debug\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"Debug\"\n# PROP Intermediate_Dir \"Debug\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\n# ADD CPP /nologo /W3 /Gm /GR /GX /ZI /Od /I \"..\\..\\include\" /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\n# ADD BASE RSC /l 0xc09 /d \"_DEBUG\"\n# ADD RSC /l 0xc09 /d \"_DEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\n\n!ENDIF \n\n# Begin Target\n\n# Name \"Tutorial1 - Win32 Release\"\n# Name \"Tutorial1 - Win32 Debug\"\n# Begin Group \"Source Files\"\n\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n# Begin Source File\n\nSOURCE=.\\main.cpp\n# End Source File\n# End Group\n# Begin Group \"Header Files\"\n\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\n# End Group\n# Begin Group \"Resource Files\"\n\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n# End Group\n# Begin Group \"Win32++\"\n\n# PROP Default_Filter \"\"\n# Begin Source File\n\nSOURCE=..\\..\\include\\wincore.h\n# End Source File\n# End Group\n# End Target\n# End Project\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial1/Tutorial1.dsw",
    "content": "Microsoft Developer Studio Workspace File, Format Version 6.00\n# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\n\n###############################################################################\n\nProject: \"Tutorial1\"=\".\\Tutorial1.dsp\" - Package Owner=<4>\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<4>\n{{{\n}}}\n\n###############################################################################\n\nGlobal:\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<3>\n{{{\n}}}\n\n###############################################################################\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial1/Tutorial1_2003.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 8.00\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial1\", \"Tutorial1_2003.vcproj\", \"{18D1A5CE-57B8-4396-98DA-73405EAFB1C3}\"\n\tProjectSection(ProjectDependencies) = postProject\n\tEndProjectSection\nEndProject\nGlobal\n\tGlobalSection(SolutionConfiguration) = preSolution\n\t\tDebug = Debug\n\t\tRelease = Release\n\tEndGlobalSection\n\tGlobalSection(ProjectConfiguration) = postSolution\n\t\t{18D1A5CE-57B8-4396-98DA-73405EAFB1C3}.Debug.ActiveCfg = Debug|Win32\n\t\t{18D1A5CE-57B8-4396-98DA-73405EAFB1C3}.Debug.Build.0 = Debug|Win32\n\t\t{18D1A5CE-57B8-4396-98DA-73405EAFB1C3}.Release.ActiveCfg = Release|Win32\n\t\t{18D1A5CE-57B8-4396-98DA-73405EAFB1C3}.Release.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityAddIns) = postSolution\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial1/Tutorial1_2003.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"7.10\"\n\tName=\"Tutorial1\"\n\tSccProjectName=\"\"\n\tSccLocalPath=\"\">\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"/>\n\t</Platforms>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"FALSE\"\n\t\t\tCharacterSet=\"0\">\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"TRUE\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"TRUE\"\n\t\t\t\tRuntimeTypeInfo=\"TRUE\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial1.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial1.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial1.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"TRUE\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial1.tlb\"\n\t\t\t\tHeaderFileName=\"\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"3081\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedWrapperGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAuxiliaryManagedWrapperGeneratorTool\"/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"FALSE\"\n\t\t\tCharacterSet=\"0\">\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tRuntimeTypeInfo=\"TRUE\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial1.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tDebugInformationFormat=\"0\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial1.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial1.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"TRUE\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial1.tlb\"\n\t\t\t\tHeaderFileName=\"\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tCulture=\"3081\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedWrapperGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAuxiliaryManagedWrapperGeneratorTool\"/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\">\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\">\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\tFilter=\"\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\">\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial1/Tutorial1_2005.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 9.00\n# Visual C++ Express 2005\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial1\", \"Tutorial1_2005.vcproj\", \"{3719A286-AB31-41B7-BADF-FEDCE4E82E05}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{3719A286-AB31-41B7-BADF-FEDCE4E82E05}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{3719A286-AB31-41B7-BADF-FEDCE4E82E05}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{3719A286-AB31-41B7-BADF-FEDCE4E82E05}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{3719A286-AB31-41B7-BADF-FEDCE4E82E05}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial1/Tutorial1_2005.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"8.00\"\n\tName=\"Tutorial1\"\n\tProjectGUID=\"{3719A286-AB31-41B7-BADF-FEDCE4E82E05}\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial1.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial1.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"3081\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial1.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial1.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial1.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial1.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial1.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tCulture=\"3081\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial1.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial1.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial1.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial1/Tutorial1_2008.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 10.00\n# Visual C++ Express 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial1\", \"Tutorial1_2008.vcproj\", \"{3719A286-AB31-41B7-BADF-FEDCE4E82E05}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{3719A286-AB31-41B7-BADF-FEDCE4E82E05}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{3719A286-AB31-41B7-BADF-FEDCE4E82E05}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{3719A286-AB31-41B7-BADF-FEDCE4E82E05}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{3719A286-AB31-41B7-BADF-FEDCE4E82E05}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial1/Tutorial1_2008.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"Tutorial1\"\n\tProjectGUID=\"{3719A286-AB31-41B7-BADF-FEDCE4E82E05}\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial1.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial1.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"3081\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial1.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial1.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial1.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial1.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial1.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tCulture=\"3081\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial1.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial1.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial1.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial1/Tutorial1_2010.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 11.00\n# Visual C++ Express 2010\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial1_2010\", \"Tutorial1_2010.vcxproj\", \"{19CEEA56-2973-4E6A-818E-17DB81197AB5}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial1/Tutorial1_2010.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"main.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\..\\include\\wincore.h\" />\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{19CEEA56-2973-4E6A-818E-17DB81197AB5}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>Tutorial1</RootNamespace>\n    <ProjectName>Tutorial1</ProjectName>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <EmbedManifest>false</EmbedManifest>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <EmbedManifest>false</EmbedManifest>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <MinimalRebuild>true</MinimalRebuild>\n      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\n      <Optimization>Disabled</Optimization>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <GenerateManifest>false</GenerateManifest>\n      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n    <ResourceCompile>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ResourceCompile>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <Optimization>MaxSpeed</Optimization>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateManifest>false</GenerateManifest>\n      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n    <ResourceCompile>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ResourceCompile>\n  </ItemDefinitionGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial1/Tutorial1_2010.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"Header Files\">\n      <UniqueIdentifier>{1762acc2-c2e7-4806-999a-09d5b62b42ee}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Resource Files\">\n      <UniqueIdentifier>{23dfff87-328e-41d9-95e8-b399d4a3ce47}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Source Files\">\n      <UniqueIdentifier>{efc000c1-54fc-4cac-b101-2f32f7eea75d}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Win32++\">\n      <UniqueIdentifier>{151df421-03ff-446d-b097-5c4200389101}</UniqueIdentifier>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"main.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\..\\include\\wincore.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial1/main.cpp",
    "content": "///////////////////////////////////////\n// main.cpp\n\n#include \"Wincore.h\"\n\n// Notes:  \n//  1) This application doesn't end when the window is closed\n//  2) Add the Win32++\\include  directory to project's additional include directories\n\n\n\nint APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, int)\n{\n\t// Start Win32++\n\tCWinApp MyApp;\n\n\t// Create a CWnd object\n\tCWnd MyWindow;\n\n\t// Create (and display) the window\n\tMyWindow.Create();\n\n\t// Run the application\n\treturn MyApp.Run();\n}\n\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial2/Tutorial2.bdsproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<BorlandProject>\n\t<PersonalityInfo>\n\t\t<Option>\n\t\t\t<Option Name=\"Personality\">CPlusPlusBuilder.Personality</Option>\n\t\t\t<Option Name=\"ProjectType\">CppGuiApplication</Option>\n\t\t\t<Option Name=\"Version\">1.0</Option>\n\t\t\t<Option Name=\"GUID\">{D89B38BC-DF6B-4DE6-B007-C3EB16A9D851}</Option>\n\t\t</Option>\n\t</PersonalityInfo>\n\t<CPlusPlusBuilder.Personality>\n\t\t<Source>\n\t\t\t<Source Name=\"MainSource\">Tutorial2.bpf</Source>\n\t\t</Source>\n\t\t<BCBPROJECT>\n      <project version=\"10.0\">\n        <property category=\"build.config\" name=\"active\" value=\"0\"/>\n        <property category=\"build.config\" name=\"count\" value=\"1\"/>\n        <property category=\"build.config\" name=\"excludedefaultforzero\" value=\"0\"/>\n        <property category=\"build.config.0\" name=\"builddir\" value=\"Debug\"/>\n        <property category=\"build.config.0\" name=\"key\" value=\"Debug_Build\"/>\n        <property category=\"build.config.0\" name=\"name\" value=\"Debug Build\"/>\n        <property category=\"build.config.0\" name=\"settings.win32b\" value=\"default\"/>\n        <property category=\"build.config.0\" name=\"type\" value=\"Toolset\"/>\n        <property category=\"build.config.0\" name=\"win32.win32b.builddir\" value=\"Debug_Build\"/>\n        <property category=\"build.config.1\" name=\"key\" value=\"Release_Build\"/>\n        <property category=\"build.config.1\" name=\"name\" value=\"Release Build\"/>\n        <property category=\"build.config.1\" name=\"settings.win32b\" value=\"default\"/>\n        <property category=\"build.config.1\" name=\"type\" value=\"Toolset\"/>\n        <property category=\"build.config.1\" name=\"win32.win32b.builddir\" value=\"Release_Build\"/>\n        <property category=\"build.node\" name=\"name\" value=\"Tutorial2.exe\"/>\n        <property category=\"build.node\" name=\"packages\" value=\"vclx;vcl;rtl;dbrtl;vcldb;adortl;dbxcds;dbexpress;xmlrtl;vclie;inet;inetdbbde;inetdbxpress;soaprtl;dsnap;bdertl;vcldbx\"/>\n        <property category=\"build.node\" name=\"use_packages\" value=\"1\"/>\n        <property category=\"build.platform\" name=\"active\" value=\"win32\"/>\n        <property category=\"build.platform\" name=\"win32.Debug_Build.toolset\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.Release_Build.toolset\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.default\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.enabled\" value=\"1\"/>\n        <property category=\"build.platform\" name=\"win32.win32b.enabled\" value=\"1\"/>\n        <property category=\"win32.*.win32b.dcc32\" name=\"param.filenames.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.listfile.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.objfile.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.xreffile.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.arg.1\" value=\"_DEBUG\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.Od.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.k.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.r.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.v.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.vi.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.y.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.$D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.$O.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.arg.1\" value=\"DEBUG\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.V.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.arg.1\" value=\"$(BDS)\\lib\\debug\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.z.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.zd.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.zi.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.arg.1\" value=\"NDEBUG\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.O2.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.k.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.r.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.vi.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.$D.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.$O.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.V.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.arg.1\" value=\"$(BDS)\\lib\\release\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.z.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zd.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zi.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zn.enabled\" value=\"1\"/>\n        <optionset name=\"all_configurations\">\n          <property category=\"node\" name=\"displayname\" value=\"All Configurations\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.arg.1\" value=\"$(BDS)\\lib\\vcl100.csm\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Hc.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.He.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Hs.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.2\" value=\"$(BDS)\\include\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.3\" value=\"$(BDS)\\include\\dinkumware\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.4\" value=\"$(BDS)\\include\\vcl\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Ve.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.b.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.1\" value=\"_RTLDLL\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.2\" value=\"USEPACKAGES\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.3\" value=\"NO_STRICT\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.4\" value=\"_NO_VCL\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tW.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWC.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWD.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWM.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.2\" value=\".\\\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.3\" value=\"$(BDS)\\lib\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.4\" value=\"$(BDS)\\lib\\obj\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"param.filenames.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Gi.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.2\" value=\"$(BDS)\\lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.3\" value=\"$(BDS)\\lib\\obj\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.4\" value=\"$(BDS)\\lib\\psdk\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpd.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpe.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpp.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.aa.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.ap.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.dynamicrtl.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.1\" value=\"import32.lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.2\" value=\"cw32mti.lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.1\" value=\"c0w32.obj\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.2\" value=\"$(PACKAGES)\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.merge\" value=\"1\"/>\n        </optionset>\n      </project>\n      <FILELIST>\n        <FILE FILENAME=\"main.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"main\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\WinCore.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n      </FILELIST>\n      <IDEOPTIONS>\n        <VersionInfo>\n          <VersionInfo Name=\"IncludeVerInfo\">False</VersionInfo>\n          <VersionInfo Name=\"AutoIncBuild\">False</VersionInfo>\n          <VersionInfo Name=\"MajorVer\">1</VersionInfo>\n          <VersionInfo Name=\"MinorVer\">0</VersionInfo>\n          <VersionInfo Name=\"Release\">0</VersionInfo>\n          <VersionInfo Name=\"Build\">0</VersionInfo>\n          <VersionInfo Name=\"Debug\">False</VersionInfo>\n          <VersionInfo Name=\"PreRelease\">False</VersionInfo>\n          <VersionInfo Name=\"Special\">False</VersionInfo>\n          <VersionInfo Name=\"Private\">False</VersionInfo>\n          <VersionInfo Name=\"DLL\">False</VersionInfo>\n          <VersionInfo Name=\"Locale\">3081</VersionInfo>\n          <VersionInfo Name=\"CodePage\">1252</VersionInfo>\n        </VersionInfo>\n        <VersionInfoKeys>\n          <VersionInfoKeys Name=\"CompanyName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"FileDescription\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"FileVersion\">1.0.0.0</VersionInfoKeys>\n          <VersionInfoKeys Name=\"InternalName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"LegalCopyright\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"LegalTrademarks\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"OriginalFilename\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"ProductName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"ProductVersion\">1.0.0.0</VersionInfoKeys>\n          <VersionInfoKeys Name=\"Comments\"></VersionInfoKeys>\n        </VersionInfoKeys>\n        <Debugging>\n          <Debugging Name=\"DebugSourceDirs\"></Debugging>\n        </Debugging>\n        <Parameters>\n          <Parameters Name=\"RunParams\"></Parameters>\n          <Parameters Name=\"Launcher\"></Parameters>\n          <Parameters Name=\"UseLauncher\">False</Parameters>\n          <Parameters Name=\"DebugCWD\"></Parameters>\n          <Parameters Name=\"HostApplication\"></Parameters>\n          <Parameters Name=\"RemoteHost\"></Parameters>\n          <Parameters Name=\"RemotePath\"></Parameters>\n          <Parameters Name=\"RemoteParams\"></Parameters>\n          <Parameters Name=\"RemoteLauncher\"></Parameters>\n          <Parameters Name=\"UseRemoteLauncher\">False</Parameters>\n          <Parameters Name=\"RemoteCWD\"></Parameters>\n          <Parameters Name=\"RemoteDebug\">False</Parameters>\n          <Parameters Name=\"Debug Symbols Search Path\"></Parameters>\n          <Parameters Name=\"LoadAllSymbols\">True</Parameters>\n          <Parameters Name=\"LoadUnspecifiedSymbols\">False</Parameters>\n        </Parameters>\n        <Linker>\n          <Linker Name=\"LibPrefix\"></Linker>\n          <Linker Name=\"LibSuffix\"></Linker>\n          <Linker Name=\"LibVersion\"></Linker>\n        </Linker>\n      </IDEOPTIONS>\n    </BCBPROJECT>\n\t\t<buildevents/>\n\t</CPlusPlusBuilder.Personality>\n</BorlandProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial2/Tutorial2.bpf",
    "content": "This file is used by the project manager only and should be treated like the project file\n\nTo add a file to this project use the Project menu 'Add to Project'\n\nWinMain"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial2/Tutorial2.dev",
    "content": "[Project]\nFileName=Tutorial2.dev\nName=Tutorial2\nUnitCount=2\nType=0\nVer=1\nObjFiles=\nIncludes=..\\..\\include\nLibs=\nPrivateResource=\nResourceIncludes=\nMakeIncludes=\nCompiler=\nCppCompiler=-D _WIN32_IE=0x0400_@@_\nLinker=_@@_\nIsCpp=1\nIcon=\nExeOutput=.\\Dev-C++\nObjectOutput=.\\Dev-C++\nOverrideOutput=0\nOverrideOutputName=Tutorial2.exe\nHostApplication=\nFolders=Win32++\nCommandLine=\nUseCustomMakefile=0\nCustomMakefile=\nIncludeVersionInfo=0\nSupportXPThemes=0\nCompilerSet=0\nCompilerSettings=0000000000000000000000\n\n[VersionInfo]\nMajor=0\nMinor=1\nRelease=1\nBuild=1\nLanguageID=1033\nCharsetID=1252\nCompanyName=\nFileVersion=\nFileDescription=Developed using the Dev-C++ IDE\nInternalName=\nLegalCopyright=\nLegalTrademarks=\nOriginalFilename=\nProductName=\nProductVersion=\nAutoIncBuildNr=0\n\n[Unit1]\nFileName=main.cpp\nCompileCpp=1\nFolder=Tutorial2\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit2]\nFileName=..\\..\\include\\wincore.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial2/Tutorial2.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"Tutorial2\" - Package Owner=<4>\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\n# ** DO NOT EDIT **\n\n# TARGTYPE \"Win32 (x86) Application\" 0x0101\n\nCFG=Tutorial2 - Win32 Debug\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\n!MESSAGE use the Export Makefile command and run\n!MESSAGE \n!MESSAGE NMAKE /f \"Tutorial2.mak\".\n!MESSAGE \n!MESSAGE You can specify a configuration when running NMAKE\n!MESSAGE by defining the macro CFG on the command line. For example:\n!MESSAGE \n!MESSAGE NMAKE /f \"Tutorial2.mak\" CFG=\"Tutorial2 - Win32 Debug\"\n!MESSAGE \n!MESSAGE Possible choices for configuration are:\n!MESSAGE \n!MESSAGE \"Tutorial2 - Win32 Release\" (based on \"Win32 (x86) Application\")\n!MESSAGE \"Tutorial2 - Win32 Debug\" (based on \"Win32 (x86) Application\")\n!MESSAGE \n\n# Begin Project\n# PROP AllowPerConfigDependencies 0\n# PROP Scc_ProjName \"\"\n# PROP Scc_LocalPath \"\"\nCPP=cl.exe\nMTL=midl.exe\nRSC=rc.exe\n\n!IF  \"$(CFG)\" == \"Tutorial2 - Win32 Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"Release\"\n# PROP BASE Intermediate_Dir \"Release\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"Release\"\n# PROP Intermediate_Dir \"Release\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\n# ADD CPP /nologo /W3 /GR /GX /O2 /I \"..\\..\\include\" /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\n# ADD BASE RSC /l 0xc09 /d \"NDEBUG\"\n# ADD RSC /l 0xc09 /d \"NDEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386\n\n!ELSEIF  \"$(CFG)\" == \"Tutorial2 - Win32 Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"Debug\"\n# PROP BASE Intermediate_Dir \"Debug\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"Debug\"\n# PROP Intermediate_Dir \"Debug\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\n# ADD CPP /nologo /W3 /Gm /GR /GX /ZI /Od /I \"..\\..\\include\" /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\n# ADD BASE RSC /l 0xc09 /d \"_DEBUG\"\n# ADD RSC /l 0xc09 /d \"_DEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\n\n!ENDIF \n\n# Begin Target\n\n# Name \"Tutorial2 - Win32 Release\"\n# Name \"Tutorial2 - Win32 Debug\"\n# Begin Group \"Source Files\"\n\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n# Begin Source File\n\nSOURCE=.\\main.cpp\n# End Source File\n# End Group\n# Begin Group \"Header Files\"\n\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\n# End Group\n# Begin Group \"Resource Files\"\n\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n# End Group\n# Begin Group \"Win32++\"\n\n# PROP Default_Filter \"\"\n# Begin Source File\n\nSOURCE=..\\..\\include\\wincore.h\n# End Source File\n# End Group\n# End Target\n# End Project\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial2/Tutorial2.dsw",
    "content": "Microsoft Developer Studio Workspace File, Format Version 6.00\n# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\n\n###############################################################################\n\nProject: \"Tutorial2\"=\".\\Tutorial2.dsp\" - Package Owner=<4>\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<4>\n{{{\n}}}\n\n###############################################################################\n\nGlobal:\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<3>\n{{{\n}}}\n\n###############################################################################\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial2/Tutorial2_2003.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 8.00\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial2\", \"Tutorial2_2003.vcproj\", \"{7AB2A111-8182-489E-8DFD-E80FD97E3C23}\"\n\tProjectSection(ProjectDependencies) = postProject\n\tEndProjectSection\nEndProject\nGlobal\n\tGlobalSection(SolutionConfiguration) = preSolution\n\t\tDebug = Debug\n\t\tRelease = Release\n\tEndGlobalSection\n\tGlobalSection(ProjectConfiguration) = postSolution\n\t\t{7AB2A111-8182-489E-8DFD-E80FD97E3C23}.Debug.ActiveCfg = Debug|Win32\n\t\t{7AB2A111-8182-489E-8DFD-E80FD97E3C23}.Debug.Build.0 = Debug|Win32\n\t\t{7AB2A111-8182-489E-8DFD-E80FD97E3C23}.Release.ActiveCfg = Release|Win32\n\t\t{7AB2A111-8182-489E-8DFD-E80FD97E3C23}.Release.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityAddIns) = postSolution\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial2/Tutorial2_2003.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"7.10\"\n\tName=\"Tutorial2\"\n\tSccProjectName=\"\"\n\tSccLocalPath=\"\">\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"/>\n\t</Platforms>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"FALSE\"\n\t\t\tCharacterSet=\"0\">\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"TRUE\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"TRUE\"\n\t\t\t\tRuntimeTypeInfo=\"TRUE\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial2.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial2.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial2.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"TRUE\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial2.tlb\"\n\t\t\t\tHeaderFileName=\"\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"3081\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedWrapperGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAuxiliaryManagedWrapperGeneratorTool\"/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"FALSE\"\n\t\t\tCharacterSet=\"0\">\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tRuntimeTypeInfo=\"TRUE\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial2.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tDebugInformationFormat=\"0\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial2.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial2.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"TRUE\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial2.tlb\"\n\t\t\t\tHeaderFileName=\"\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tCulture=\"3081\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedWrapperGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAuxiliaryManagedWrapperGeneratorTool\"/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\">\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\">\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\tFilter=\"\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\">\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial2/Tutorial2_2005.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 9.00\n# Visual C++ Express 2005\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial2\", \"Tutorial2_2005.vcproj\", \"{6569F25F-C2BF-4B08-9605-AC95CB8D867F}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{6569F25F-C2BF-4B08-9605-AC95CB8D867F}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{6569F25F-C2BF-4B08-9605-AC95CB8D867F}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{6569F25F-C2BF-4B08-9605-AC95CB8D867F}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{6569F25F-C2BF-4B08-9605-AC95CB8D867F}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial2/Tutorial2_2005.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"8.00\"\n\tName=\"Tutorial2\"\n\tProjectGUID=\"{6569F25F-C2BF-4B08-9605-AC95CB8D867F}\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial2.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial2.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"3081\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib shlwapi.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial2.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial2.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial2.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial2.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial2.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tCulture=\"3081\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial2.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial2.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial2.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial2/Tutorial2_2008.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 10.00\n# Visual C++ Express 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial2\", \"Tutorial2_2008.vcproj\", \"{6569F25F-C2BF-4B08-9605-AC95CB8D867F}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{6569F25F-C2BF-4B08-9605-AC95CB8D867F}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{6569F25F-C2BF-4B08-9605-AC95CB8D867F}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{6569F25F-C2BF-4B08-9605-AC95CB8D867F}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{6569F25F-C2BF-4B08-9605-AC95CB8D867F}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial2/Tutorial2_2008.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"Tutorial2\"\n\tProjectGUID=\"{6569F25F-C2BF-4B08-9605-AC95CB8D867F}\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial2.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial2.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"3081\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib shlwapi.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial2.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial2.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial2.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial2.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial2.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tCulture=\"3081\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial2.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial2.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial2.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial2/Tutorial2_2010.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 11.00\n# Visual C++ Express 2010\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial2_2010\", \"Tutorial2_2010.vcxproj\", \"{19CEEA56-2973-4E6A-818E-17DB81197AB5}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial2/Tutorial2_2010.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"main.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\..\\include\\wincore.h\" />\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{19CEEA56-2973-4E6A-818E-17DB81197AB5}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>Tutorial2</RootNamespace>\n    <ProjectName>Tutorial2</ProjectName>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <EmbedManifest>false</EmbedManifest>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <EmbedManifest>false</EmbedManifest>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <MinimalRebuild>true</MinimalRebuild>\n      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\n      <Optimization>Disabled</Optimization>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <GenerateManifest>false</GenerateManifest>\n      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n    <ResourceCompile>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ResourceCompile>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <Optimization>MaxSpeed</Optimization>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateManifest>false</GenerateManifest>\n      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n    <ResourceCompile>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ResourceCompile>\n  </ItemDefinitionGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial2/Tutorial2_2010.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"Header Files\">\n      <UniqueIdentifier>{224ae526-5a47-4424-a856-f36cf1c3e567}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Resource Files\">\n      <UniqueIdentifier>{56fdf7e9-8eba-45dc-8590-4212d514c46d}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Source Files\">\n      <UniqueIdentifier>{9c4c51ce-d746-47b0-a94e-1fba5d6cb90a}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Win32++\">\n      <UniqueIdentifier>{2426e17d-0960-48b3-b0cb-6f6e5aba2e53}</UniqueIdentifier>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"main.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\..\\include\\wincore.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial2/main.cpp",
    "content": "///////////////////////////////////\n// main.cpp\n\n// Add the Win32++\\include  directory to project's additional include directories\n#include \"Wincore.h\"\n\n\nclass CView : public CWnd\n{\npublic:\n\tCView() {}\n\tvirtual ~CView() {}\n};\n\n\nclass CSimpleApp : public CWinApp\n{\npublic:\n\tCSimpleApp() {}\n    virtual ~CSimpleApp() {}\n\tvirtual BOOL InitInstance();\n\nprivate:\n    CView m_View;\n};\n\nBOOL CSimpleApp::InitInstance()\n{\n    // Create the Window\n    m_View.Create();\n\n\treturn TRUE;\n}\n\n// Note:  This application doesn't end when the window is closed\n\nint APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, int)\n{\n    // Start Win32++\n    CSimpleApp MyApp;\n\n\t// Run the application\n    return MyApp.Run();\n}\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial3/ScribbleApp.cpp",
    "content": "///////////////////////////////\n// ScribbleApp.cpp\n\n#include \"ScribbleApp.h\"\n\nCScribbleApp::CScribbleApp()\n{\n}\n\nBOOL CScribbleApp::InitInstance()\n{\n    //Create the Window\n    m_View.Create();\n\n\treturn TRUE;\n}\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial3/ScribbleApp.h",
    "content": "////////////////////////////////////\n// ScribbleApp.h\n\n#include \"WinCore.h\"\n#include \"View.h\"\n\n\nclass CScribbleApp : public CWinApp\n{\npublic:\n    CScribbleApp();\n    virtual ~CScribbleApp() {}\n\tvirtual BOOL InitInstance();\n\nprivate:\n    CView m_View;\n};\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial3/Tutorial3.bdsproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<BorlandProject>\n\t<PersonalityInfo>\n\t\t<Option>\n\t\t\t<Option Name=\"Personality\">CPlusPlusBuilder.Personality</Option>\n\t\t\t<Option Name=\"ProjectType\">CppGuiApplication</Option>\n\t\t\t<Option Name=\"Version\">1.0</Option>\n\t\t\t<Option Name=\"GUID\">{D89B38BC-DF6B-4DE6-B007-C3EB16A9D851}</Option>\n\t\t</Option>\n\t</PersonalityInfo>\n\t<CPlusPlusBuilder.Personality>\n\t\t<Source>\n\t\t\t<Source Name=\"MainSource\">Tutorial3.bpf</Source>\n\t\t</Source>\n\t\t<BCBPROJECT>\n      <project version=\"10.0\">\n        <property category=\"build.config\" name=\"active\" value=\"0\"/>\n        <property category=\"build.config\" name=\"count\" value=\"1\"/>\n        <property category=\"build.config\" name=\"excludedefaultforzero\" value=\"0\"/>\n        <property category=\"build.config.0\" name=\"builddir\" value=\"Debug\"/>\n        <property category=\"build.config.0\" name=\"key\" value=\"Debug_Build\"/>\n        <property category=\"build.config.0\" name=\"name\" value=\"Debug Build\"/>\n        <property category=\"build.config.0\" name=\"settings.win32b\" value=\"default\"/>\n        <property category=\"build.config.0\" name=\"type\" value=\"Toolset\"/>\n        <property category=\"build.config.0\" name=\"win32.win32b.builddir\" value=\"Debug_Build\"/>\n        <property category=\"build.config.1\" name=\"key\" value=\"Release_Build\"/>\n        <property category=\"build.config.1\" name=\"name\" value=\"Release Build\"/>\n        <property category=\"build.config.1\" name=\"settings.win32b\" value=\"default\"/>\n        <property category=\"build.config.1\" name=\"type\" value=\"Toolset\"/>\n        <property category=\"build.config.1\" name=\"win32.win32b.builddir\" value=\"Release_Build\"/>\n        <property category=\"build.node\" name=\"name\" value=\"Tutorial3.exe\"/>\n        <property category=\"build.node\" name=\"packages\" value=\"vclx;vcl;rtl;dbrtl;vcldb;adortl;dbxcds;dbexpress;xmlrtl;vclie;inet;inetdbbde;inetdbxpress;soaprtl;dsnap;bdertl;vcldbx\"/>\n        <property category=\"build.node\" name=\"use_packages\" value=\"1\"/>\n        <property category=\"build.platform\" name=\"active\" value=\"win32\"/>\n        <property category=\"build.platform\" name=\"win32.Debug_Build.toolset\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.Release_Build.toolset\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.default\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.enabled\" value=\"1\"/>\n        <property category=\"build.platform\" name=\"win32.win32b.enabled\" value=\"1\"/>\n        <property category=\"win32.*.win32b.dcc32\" name=\"param.filenames.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.listfile.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.objfile.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.xreffile.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.arg.1\" value=\"_DEBUG\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.Od.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.k.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.r.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.v.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.vi.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.y.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.$D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.$O.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.arg.1\" value=\"DEBUG\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.V.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.arg.1\" value=\"$(BDS)\\lib\\debug\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.z.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.zd.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.zi.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.arg.1\" value=\"NDEBUG\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.O2.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.k.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.r.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.vi.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.$D.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.$O.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.V.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.arg.1\" value=\"$(BDS)\\lib\\release\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.z.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zd.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zi.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zn.enabled\" value=\"1\"/>\n        <optionset name=\"all_configurations\">\n          <property category=\"node\" name=\"displayname\" value=\"All Configurations\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.arg.1\" value=\"$(BDS)\\lib\\vcl100.csm\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Hc.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.He.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Hs.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.2\" value=\"$(BDS)\\include\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.3\" value=\"$(BDS)\\include\\dinkumware\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.4\" value=\"$(BDS)\\include\\vcl\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Ve.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.b.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.1\" value=\"_RTLDLL\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.2\" value=\"USEPACKAGES\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.3\" value=\"NO_STRICT\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.4\" value=\"_NO_VCL\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tW.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWC.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWD.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWM.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.2\" value=\".\\\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.3\" value=\"$(BDS)\\lib\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.4\" value=\"$(BDS)\\lib\\obj\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"param.filenames.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Gi.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.2\" value=\"$(BDS)\\lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.3\" value=\"$(BDS)\\lib\\obj\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.4\" value=\"$(BDS)\\lib\\psdk\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpd.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpe.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpp.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.aa.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.ap.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.dynamicrtl.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.1\" value=\"import32.lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.2\" value=\"cw32mti.lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.1\" value=\"c0w32.obj\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.2\" value=\"$(PACKAGES)\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.merge\" value=\"1\"/>\n        </optionset>\n      </project>\n      <FILELIST>\n        <FILE FILENAME=\"main.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"main\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"ScribbleApp.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"ScribbleApp\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"View.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"View\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\WinCore.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"ScribbleApp.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"View.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n      </FILELIST>\n      <IDEOPTIONS>\n        <VersionInfo>\n          <VersionInfo Name=\"IncludeVerInfo\">False</VersionInfo>\n          <VersionInfo Name=\"AutoIncBuild\">False</VersionInfo>\n          <VersionInfo Name=\"MajorVer\">1</VersionInfo>\n          <VersionInfo Name=\"MinorVer\">0</VersionInfo>\n          <VersionInfo Name=\"Release\">0</VersionInfo>\n          <VersionInfo Name=\"Build\">0</VersionInfo>\n          <VersionInfo Name=\"Debug\">False</VersionInfo>\n          <VersionInfo Name=\"PreRelease\">False</VersionInfo>\n          <VersionInfo Name=\"Special\">False</VersionInfo>\n          <VersionInfo Name=\"Private\">False</VersionInfo>\n          <VersionInfo Name=\"DLL\">False</VersionInfo>\n          <VersionInfo Name=\"Locale\">3081</VersionInfo>\n          <VersionInfo Name=\"CodePage\">1252</VersionInfo>\n        </VersionInfo>\n        <VersionInfoKeys>\n          <VersionInfoKeys Name=\"CompanyName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"FileDescription\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"FileVersion\">1.0.0.0</VersionInfoKeys>\n          <VersionInfoKeys Name=\"InternalName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"LegalCopyright\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"LegalTrademarks\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"OriginalFilename\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"ProductName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"ProductVersion\">1.0.0.0</VersionInfoKeys>\n          <VersionInfoKeys Name=\"Comments\"></VersionInfoKeys>\n        </VersionInfoKeys>\n        <Debugging>\n          <Debugging Name=\"DebugSourceDirs\"></Debugging>\n        </Debugging>\n        <Parameters>\n          <Parameters Name=\"RunParams\"></Parameters>\n          <Parameters Name=\"Launcher\"></Parameters>\n          <Parameters Name=\"UseLauncher\">False</Parameters>\n          <Parameters Name=\"DebugCWD\"></Parameters>\n          <Parameters Name=\"HostApplication\"></Parameters>\n          <Parameters Name=\"RemoteHost\"></Parameters>\n          <Parameters Name=\"RemotePath\"></Parameters>\n          <Parameters Name=\"RemoteParams\"></Parameters>\n          <Parameters Name=\"RemoteLauncher\"></Parameters>\n          <Parameters Name=\"UseRemoteLauncher\">False</Parameters>\n          <Parameters Name=\"RemoteCWD\"></Parameters>\n          <Parameters Name=\"RemoteDebug\">False</Parameters>\n          <Parameters Name=\"Debug Symbols Search Path\"></Parameters>\n          <Parameters Name=\"LoadAllSymbols\">True</Parameters>\n          <Parameters Name=\"LoadUnspecifiedSymbols\">False</Parameters>\n        </Parameters>\n        <Linker>\n          <Linker Name=\"LibPrefix\"></Linker>\n          <Linker Name=\"LibSuffix\"></Linker>\n          <Linker Name=\"LibVersion\"></Linker>\n        </Linker>\n      </IDEOPTIONS>\n    </BCBPROJECT>\n\t\t<buildevents/>\n\t</CPlusPlusBuilder.Personality>\n</BorlandProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial3/Tutorial3.bpf",
    "content": "This file is used by the project manager only and should be treated like the project file\n\nTo add a file to this project use the Project menu 'Add to Project'\n\nWinMain"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial3/Tutorial3.dev",
    "content": "[Project]\nFileName=Tutorial3.dev\nName=Tutorial3\nUnitCount=6\nType=0\nVer=1\nObjFiles=\nIncludes=..\\..\\include\nLibs=\nPrivateResource=\nResourceIncludes=\nMakeIncludes=\nCompiler=\nCppCompiler=-D _WIN32_IE=0x0400_@@_\nLinker=_@@_\nIsCpp=1\nIcon=\nExeOutput=.\\Dev-C++\nObjectOutput=.\\Dev-C++\nOverrideOutput=1\nOverrideOutputName=Tutorial3.exe\nHostApplication=\nFolders=Header,Source,Win32++\nCommandLine=\nUseCustomMakefile=0\nCustomMakefile=\nIncludeVersionInfo=0\nSupportXPThemes=0\nCompilerSet=0\nCompilerSettings=0000000000000000000000\n\n[Unit4]\nFileName=View.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit5]\nFileName=View.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[VersionInfo]\nMajor=0\nMinor=1\nRelease=1\nBuild=1\nLanguageID=1033\nCharsetID=1252\nCompanyName=\nFileVersion=\nFileDescription=Developed using the Dev-C++ IDE\nInternalName=\nLegalCopyright=\nLegalTrademarks=\nOriginalFilename=\nProductName=\nProductVersion=\nAutoIncBuildNr=0\n\n[Unit1]\nFileName=main.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit2]\nFileName=ScribbleApp.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit3]\nFileName=ScribbleApp.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit6]\nFileName=..\\..\\include\\wincore.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial3/Tutorial3.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"Tutorial3\" - Package Owner=<4>\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\n# ** DO NOT EDIT **\n\n# TARGTYPE \"Win32 (x86) Application\" 0x0101\n\nCFG=Tutorial3 - Win32 Debug\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\n!MESSAGE use the Export Makefile command and run\n!MESSAGE \n!MESSAGE NMAKE /f \"Tutorial3.mak\".\n!MESSAGE \n!MESSAGE You can specify a configuration when running NMAKE\n!MESSAGE by defining the macro CFG on the command line. For example:\n!MESSAGE \n!MESSAGE NMAKE /f \"Tutorial3.mak\" CFG=\"Tutorial3 - Win32 Debug\"\n!MESSAGE \n!MESSAGE Possible choices for configuration are:\n!MESSAGE \n!MESSAGE \"Tutorial3 - Win32 Release\" (based on \"Win32 (x86) Application\")\n!MESSAGE \"Tutorial3 - Win32 Debug\" (based on \"Win32 (x86) Application\")\n!MESSAGE \n\n# Begin Project\n# PROP AllowPerConfigDependencies 0\n# PROP Scc_ProjName \"\"\n# PROP Scc_LocalPath \"\"\nCPP=cl.exe\nMTL=midl.exe\nRSC=rc.exe\n\n!IF  \"$(CFG)\" == \"Tutorial3 - Win32 Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"Release\"\n# PROP BASE Intermediate_Dir \"Release\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"Release\"\n# PROP Intermediate_Dir \"Release\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\n# ADD CPP /nologo /W3 /GR /GX /O2 /I \"..\\..\\include\" /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\n# ADD BASE RSC /l 0xc09 /d \"NDEBUG\"\n# ADD RSC /l 0xc09 /d \"NDEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386\n\n!ELSEIF  \"$(CFG)\" == \"Tutorial3 - Win32 Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"Debug\"\n# PROP BASE Intermediate_Dir \"Debug\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"Debug\"\n# PROP Intermediate_Dir \"Debug\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\n# ADD CPP /nologo /W3 /Gm /GR /GX /ZI /Od /I \"..\\..\\include\" /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\n# ADD BASE RSC /l 0xc09 /d \"_DEBUG\"\n# ADD RSC /l 0xc09 /d \"_DEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\n\n!ENDIF \n\n# Begin Target\n\n# Name \"Tutorial3 - Win32 Release\"\n# Name \"Tutorial3 - Win32 Debug\"\n# Begin Group \"Source Files\"\n\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n# Begin Source File\n\nSOURCE=.\\main.cpp\n# End Source File\n# Begin Source File\n\nSOURCE=.\\ScribbleApp.cpp\n# End Source File\n# Begin Source File\n\nSOURCE=.\\View.cpp\n# End Source File\n# End Group\n# Begin Group \"Header Files\"\n\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\n# Begin Source File\n\nSOURCE=.\\ScribbleApp.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\View.h\n# End Source File\n# End Group\n# Begin Group \"Resource Files\"\n\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n# End Group\n# Begin Group \"Win32++\"\n\n# PROP Default_Filter \"\"\n# Begin Source File\n\nSOURCE=..\\..\\include\\wincore.h\n# End Source File\n# End Group\n# End Target\n# End Project\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial3/Tutorial3.dsw",
    "content": "Microsoft Developer Studio Workspace File, Format Version 6.00\n# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\n\n###############################################################################\n\nProject: \"Tutorial3\"=\".\\Tutorial3.dsp\" - Package Owner=<4>\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<4>\n{{{\n}}}\n\n###############################################################################\n\nGlobal:\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<3>\n{{{\n}}}\n\n###############################################################################\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial3/Tutorial3_2003.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 8.00\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial3\", \"Tutorial3_2003.vcproj\", \"{2935452C-CFAB-41CE-899A-DEA25EB8A2C0}\"\n\tProjectSection(ProjectDependencies) = postProject\n\tEndProjectSection\nEndProject\nGlobal\n\tGlobalSection(SolutionConfiguration) = preSolution\n\t\tDebug = Debug\n\t\tRelease = Release\n\tEndGlobalSection\n\tGlobalSection(ProjectConfiguration) = postSolution\n\t\t{2935452C-CFAB-41CE-899A-DEA25EB8A2C0}.Debug.ActiveCfg = Debug|Win32\n\t\t{2935452C-CFAB-41CE-899A-DEA25EB8A2C0}.Debug.Build.0 = Debug|Win32\n\t\t{2935452C-CFAB-41CE-899A-DEA25EB8A2C0}.Release.ActiveCfg = Release|Win32\n\t\t{2935452C-CFAB-41CE-899A-DEA25EB8A2C0}.Release.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityAddIns) = postSolution\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial3/Tutorial3_2003.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"7.10\"\n\tName=\"Tutorial3\"\n\tSccProjectName=\"\"\n\tSccLocalPath=\"\">\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"/>\n\t</Platforms>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"FALSE\"\n\t\t\tCharacterSet=\"0\">\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"TRUE\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"TRUE\"\n\t\t\t\tRuntimeTypeInfo=\"TRUE\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial3.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"comctl32.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial3.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial3.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"TRUE\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial3.tlb\"\n\t\t\t\tHeaderFileName=\"\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"3081\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedWrapperGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAuxiliaryManagedWrapperGeneratorTool\"/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"FALSE\"\n\t\t\tCharacterSet=\"0\">\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tRuntimeTypeInfo=\"TRUE\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial3.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"4\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tDebugInformationFormat=\"4\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"comctl32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial3.exe\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial3.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"TRUE\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial3.tlb\"\n\t\t\t\tHeaderFileName=\"\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tCulture=\"3081\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedWrapperGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAuxiliaryManagedWrapperGeneratorTool\"/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.h\">\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\">\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\tFilter=\"\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\">\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial3/Tutorial3_2005.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 9.00\n# Visual C++ Express 2005\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial3\", \"Tutorial3_2005.vcproj\", \"{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial3/Tutorial3_2005.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"8.00\"\n\tName=\"Tutorial3\"\n\tProjectGUID=\"{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial3.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial3.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"3081\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial3.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial3.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial3.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial3.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial3.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tCulture=\"3081\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial3.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial3.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial3.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial3/Tutorial3_2008.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 10.00\n# Visual C++ Express 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial3\", \"Tutorial3_2008.vcproj\", \"{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial3/Tutorial3_2008.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"Tutorial3\"\n\tProjectGUID=\"{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial3.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial3.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"3081\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial3.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial3.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial3.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial3.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial3.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tCulture=\"3081\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial3.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial3.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial3.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial3/Tutorial3_2010.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 11.00\n# Visual C++ Express 2010\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial3_2010\", \"Tutorial3_2010.vcxproj\", \"{19CEEA56-2973-4E6A-818E-17DB81197AB5}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial3/Tutorial3_2010.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"main.cpp\" />\n    <ClCompile Include=\"ScribbleApp.cpp\" />\n    <ClCompile Include=\"View.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\..\\include\\wincore.h\" />\n    <ClInclude Include=\"ScribbleApp.h\" />\n    <ClInclude Include=\"View.h\" />\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{19CEEA56-2973-4E6A-818E-17DB81197AB5}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>Tutorial3</RootNamespace>\n    <ProjectName>Tutorial3</ProjectName>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <EmbedManifest>false</EmbedManifest>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <EmbedManifest>false</EmbedManifest>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <MinimalRebuild>true</MinimalRebuild>\n      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\n      <Optimization>Disabled</Optimization>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <GenerateManifest>false</GenerateManifest>\n      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n    <ResourceCompile>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ResourceCompile>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <Optimization>MaxSpeed</Optimization>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateManifest>false</GenerateManifest>\n      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n    <ResourceCompile>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ResourceCompile>\n  </ItemDefinitionGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial3/Tutorial3_2010.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"Header Files\">\n      <UniqueIdentifier>{81a17280-d8f2-4618-ae19-abdebe0941e1}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Resource Files\">\n      <UniqueIdentifier>{92cbf499-6043-4e08-afbd-5bb308e2f165}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Source Files\">\n      <UniqueIdentifier>{593386c5-279a-4ef6-8499-0712faa5da0a}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Win32++\">\n      <UniqueIdentifier>{484d8088-3c5f-4837-baf2-c9aa968bbbbc}</UniqueIdentifier>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"main.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"ScribbleApp.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"View.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\..\\Win32++\\include\\wincore.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"ScribbleApp.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"View.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial3/View.cpp",
    "content": "//////////////////////////////////////////////\n// View.cpp\n//  Definitions for the CView class\n\n#include \"view.h\"\n\n\nCView::CView()\n{\n}\n\nvoid CView::DrawLine(int x, int y)\n{\n\tCDC* pDC = GetDC();\n\tpDC->MoveTo(m_OldPt.x, m_OldPt.y);\n\tpDC->LineTo(x, y);\n}\n\nvoid CView::OnLButtonDown(LPARAM lParam)\n{\n \t// Capture mouse input.\n \tSetCapture();\n\n\tm_OldPt.x = GET_X_LPARAM(lParam);\n\tm_OldPt.y = GET_Y_LPARAM(lParam);\n}\n\nvoid CView::OnLButtonUp(LPARAM lParam)\n{\n\t{\n\t\t//Release the capture on the mouse\n\t\tReleaseCapture();\n\t}\n}\n\nvoid CView::OnMouseMove(WPARAM wParam, LPARAM lParam)\n{\n\t// hold down the left mouse button and move mouse to draw lines.\n\tif (wParam & MK_LBUTTON)\n\t{\n\t\tDrawLine(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));\n\t\tm_OldPt.x = GET_X_LPARAM(lParam);\n\t\tm_OldPt.y = GET_Y_LPARAM(lParam);\n\t}\n}\n\nLRESULT CView::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n\tswitch (uMsg)\n\t{\n\tcase WM_LBUTTONDOWN:\n\t\tOnLButtonDown(lParam);\n\t\tbreak;\n\n\tcase WM_MOUSEMOVE:\n\t\tOnMouseMove(wParam, lParam);\n        break;\n\n    case WM_LBUTTONUP:\n\t\tOnLButtonUp(lParam);\n\t\tbreak;\n\n\tcase WM_DESTROY:\n\t\t//End the program when window is destroyed\n\t\t::PostQuitMessage(0);\n\t\tbreak;\n\t}\n\n\t//Use the default message handling for remaining messages\n\treturn WndProcDefault(uMsg, wParam, lParam);\n}\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial3/View.h",
    "content": "//////////////////////////////////////////////////////\n// View.h\n//  Declaration of the CView class\n\n#ifndef VIEW_H\n#define VIEW_H\n\n#include \"WinCore.h\"\n#include <vector>\n\nusing std::vector;\n\n\nclass CView : public CWnd\n{\npublic:\n\tCView();\n\tvirtual ~CView(){}\n\nprotected:\n\tvirtual LRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\nprivate:\n\tvoid DrawLine(int x, int y);\n\tvoid OnLButtonDown(LPARAM lParam);\n\tvoid OnLButtonUp(LPARAM lParam);\n\tvoid OnMouseMove(WPARAM wParam, LPARAM lParam);\n\n\tPOINT m_OldPt;\n};\n\n\n#endif // CVIEW_H\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial3/main.cpp",
    "content": "//////////////////////////////////////\n// main.cpp\n\n// Add the Win32++\\include  directory to project's additional include directories\n#include \"ScribbleApp.h\"\n\n\nint APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, int)\n{\n    // Start Win32++\n    CScribbleApp MyApp;\n\n\t// Run the application\n    return MyApp.Run();\n}\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial4/ScribbleApp.cpp",
    "content": "///////////////////////////////\n// ScribbleApp.cpp\n\n#include \"ScribbleApp.h\"\n\nCScribbleApp::CScribbleApp()\n{\n}\n\nBOOL CScribbleApp::InitInstance()\n{\n    //Create the Window\n    m_View.Create();\n\n\treturn TRUE;\n}\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial4/ScribbleApp.h",
    "content": "////////////////////////////////////\n// ScribbleApp.h\n\n#include \"WinCore.h\"\n#include \"View.h\"\n\n\nclass CScribbleApp : public CWinApp\n{\npublic:\n    CScribbleApp();\n    virtual ~CScribbleApp() {}\n\tvirtual BOOL InitInstance();\n\nprivate:\n    CView m_View;\n};\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial4/Tutorial4.bdsproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<BorlandProject>\n\t<PersonalityInfo>\n\t\t<Option>\n\t\t\t<Option Name=\"Personality\">CPlusPlusBuilder.Personality</Option>\n\t\t\t<Option Name=\"ProjectType\">CppGuiApplication</Option>\n\t\t\t<Option Name=\"Version\">1.0</Option>\n\t\t\t<Option Name=\"GUID\">{D89B38BC-DF6B-4DE6-B007-C3EB16A9D851}</Option>\n\t\t</Option>\n\t</PersonalityInfo>\n\t<CPlusPlusBuilder.Personality>\n\t\t<Source>\n\t\t\t<Source Name=\"MainSource\">Tutorial4.bpf</Source>\n\t\t</Source>\n\t\t<BCBPROJECT>\n      <project version=\"10.0\">\n        <property category=\"build.config\" name=\"active\" value=\"0\"/>\n        <property category=\"build.config\" name=\"count\" value=\"1\"/>\n        <property category=\"build.config\" name=\"excludedefaultforzero\" value=\"0\"/>\n        <property category=\"build.config.0\" name=\"builddir\" value=\"Debug\"/>\n        <property category=\"build.config.0\" name=\"key\" value=\"Debug_Build\"/>\n        <property category=\"build.config.0\" name=\"name\" value=\"Debug Build\"/>\n        <property category=\"build.config.0\" name=\"settings.win32b\" value=\"default\"/>\n        <property category=\"build.config.0\" name=\"type\" value=\"Toolset\"/>\n        <property category=\"build.config.0\" name=\"win32.win32b.builddir\" value=\"Debug_Build\"/>\n        <property category=\"build.config.1\" name=\"key\" value=\"Release_Build\"/>\n        <property category=\"build.config.1\" name=\"name\" value=\"Release Build\"/>\n        <property category=\"build.config.1\" name=\"settings.win32b\" value=\"default\"/>\n        <property category=\"build.config.1\" name=\"type\" value=\"Toolset\"/>\n        <property category=\"build.config.1\" name=\"win32.win32b.builddir\" value=\"Release_Build\"/>\n        <property category=\"build.node\" name=\"name\" value=\"Tutorial4.exe\"/>\n        <property category=\"build.node\" name=\"packages\" value=\"vclx;vcl;rtl;dbrtl;vcldb;adortl;dbxcds;dbexpress;xmlrtl;vclie;inet;inetdbbde;inetdbxpress;soaprtl;dsnap;bdertl;vcldbx\"/>\n        <property category=\"build.node\" name=\"use_packages\" value=\"1\"/>\n        <property category=\"build.platform\" name=\"active\" value=\"win32\"/>\n        <property category=\"build.platform\" name=\"win32.Debug_Build.toolset\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.Release_Build.toolset\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.default\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.enabled\" value=\"1\"/>\n        <property category=\"build.platform\" name=\"win32.win32b.enabled\" value=\"1\"/>\n        <property category=\"win32.*.win32b.dcc32\" name=\"param.filenames.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.listfile.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.objfile.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.xreffile.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.arg.1\" value=\"_DEBUG\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.Od.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.k.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.r.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.v.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.vi.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.y.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.$D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.$O.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.arg.1\" value=\"DEBUG\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.V.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.arg.1\" value=\"$(BDS)\\lib\\debug\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.z.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.zd.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.zi.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.arg.1\" value=\"NDEBUG\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.O2.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.k.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.r.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.vi.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.$D.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.$O.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.V.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.arg.1\" value=\"$(BDS)\\lib\\release\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.z.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zd.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zi.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zn.enabled\" value=\"1\"/>\n        <optionset name=\"all_configurations\">\n          <property category=\"node\" name=\"displayname\" value=\"All Configurations\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.arg.1\" value=\"$(BDS)\\lib\\vcl100.csm\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Hc.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.He.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Hs.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.2\" value=\"$(BDS)\\include\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.3\" value=\"$(BDS)\\include\\dinkumware\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.4\" value=\"$(BDS)\\include\\vcl\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Ve.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.b.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.1\" value=\"_RTLDLL\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.2\" value=\"USEPACKAGES\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.3\" value=\"NO_STRICT\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.4\" value=\"_NO_VCL\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tW.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWC.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWD.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWM.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.2\" value=\".\\\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.3\" value=\"$(BDS)\\lib\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.4\" value=\"$(BDS)\\lib\\obj\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"param.filenames.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Gi.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.2\" value=\"$(BDS)\\lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.3\" value=\"$(BDS)\\lib\\obj\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.4\" value=\"$(BDS)\\lib\\psdk\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpd.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpe.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpp.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.aa.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.ap.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.dynamicrtl.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.1\" value=\"import32.lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.2\" value=\"cw32mti.lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.1\" value=\"c0w32.obj\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.2\" value=\"$(PACKAGES)\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.merge\" value=\"1\"/>\n        </optionset>\n      </project>\n      <FILELIST>\n        <FILE FILENAME=\"main.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"main\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"ScribbleApp.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"ScribbleApp\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"View.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"View\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\WinCore.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"ScribbleApp.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"View.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n      </FILELIST>\n      <IDEOPTIONS>\n        <VersionInfo>\n          <VersionInfo Name=\"IncludeVerInfo\">False</VersionInfo>\n          <VersionInfo Name=\"AutoIncBuild\">False</VersionInfo>\n          <VersionInfo Name=\"MajorVer\">1</VersionInfo>\n          <VersionInfo Name=\"MinorVer\">0</VersionInfo>\n          <VersionInfo Name=\"Release\">0</VersionInfo>\n          <VersionInfo Name=\"Build\">0</VersionInfo>\n          <VersionInfo Name=\"Debug\">False</VersionInfo>\n          <VersionInfo Name=\"PreRelease\">False</VersionInfo>\n          <VersionInfo Name=\"Special\">False</VersionInfo>\n          <VersionInfo Name=\"Private\">False</VersionInfo>\n          <VersionInfo Name=\"DLL\">False</VersionInfo>\n          <VersionInfo Name=\"Locale\">3081</VersionInfo>\n          <VersionInfo Name=\"CodePage\">1252</VersionInfo>\n        </VersionInfo>\n        <VersionInfoKeys>\n          <VersionInfoKeys Name=\"CompanyName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"FileDescription\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"FileVersion\">1.0.0.0</VersionInfoKeys>\n          <VersionInfoKeys Name=\"InternalName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"LegalCopyright\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"LegalTrademarks\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"OriginalFilename\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"ProductName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"ProductVersion\">1.0.0.0</VersionInfoKeys>\n          <VersionInfoKeys Name=\"Comments\"></VersionInfoKeys>\n        </VersionInfoKeys>\n        <Debugging>\n          <Debugging Name=\"DebugSourceDirs\"></Debugging>\n        </Debugging>\n        <Parameters>\n          <Parameters Name=\"RunParams\"></Parameters>\n          <Parameters Name=\"Launcher\"></Parameters>\n          <Parameters Name=\"UseLauncher\">False</Parameters>\n          <Parameters Name=\"DebugCWD\"></Parameters>\n          <Parameters Name=\"HostApplication\"></Parameters>\n          <Parameters Name=\"RemoteHost\"></Parameters>\n          <Parameters Name=\"RemotePath\"></Parameters>\n          <Parameters Name=\"RemoteParams\"></Parameters>\n          <Parameters Name=\"RemoteLauncher\"></Parameters>\n          <Parameters Name=\"UseRemoteLauncher\">False</Parameters>\n          <Parameters Name=\"RemoteCWD\"></Parameters>\n          <Parameters Name=\"RemoteDebug\">False</Parameters>\n          <Parameters Name=\"Debug Symbols Search Path\"></Parameters>\n          <Parameters Name=\"LoadAllSymbols\">True</Parameters>\n          <Parameters Name=\"LoadUnspecifiedSymbols\">False</Parameters>\n        </Parameters>\n        <Linker>\n          <Linker Name=\"LibPrefix\"></Linker>\n          <Linker Name=\"LibSuffix\"></Linker>\n          <Linker Name=\"LibVersion\"></Linker>\n        </Linker>\n      </IDEOPTIONS>\n    </BCBPROJECT>\n\t</CPlusPlusBuilder.Personality>\n</BorlandProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial4/Tutorial4.bpf",
    "content": "This file is used by the project manager only and should be treated like the project file\n\nTo add a file to this project use the Project menu 'Add to Project'\n\nWinMain"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial4/Tutorial4.dev",
    "content": "[Project]\nFileName=Tutorial4.dev\nName=Tutorial4\nUnitCount=6\nType=0\nVer=1\nObjFiles=\nIncludes=..\\..\\include\nLibs=\nPrivateResource=\nResourceIncludes=\nMakeIncludes=\nCompiler=\nCppCompiler=-D _WIN32_IE=0x0400_@@_\nLinker=_@@_\nIsCpp=1\nIcon=\nExeOutput=.\\Dev-C++\nObjectOutput=.\\Dev-C++\nOverrideOutput=0\nOverrideOutputName=Tutorial4.exe\nHostApplication=\nFolders=Header,Source,Win32++\nCommandLine=\nUseCustomMakefile=0\nCustomMakefile=\nIncludeVersionInfo=0\nSupportXPThemes=0\nCompilerSet=0\nCompilerSettings=0000000000000000000000\n\n[Unit1]\nFileName=main.cpp\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit2]\nFileName=ScribbleApp.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit3]\nFileName=ScribbleApp.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit4]\nFileName=View.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit5]\nFileName=View.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[VersionInfo]\nMajor=0\nMinor=1\nRelease=1\nBuild=1\nLanguageID=1033\nCharsetID=1252\nCompanyName=\nFileVersion=\nFileDescription=Developed using the Dev-C++ IDE\nInternalName=\nLegalCopyright=\nLegalTrademarks=\nOriginalFilename=\nProductName=\nProductVersion=\nAutoIncBuildNr=0\n\n[Unit6]\nFileName=..\\..\\include\\wincore.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial4/Tutorial4.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"Tutorial4\" - Package Owner=<4>\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\n# ** DO NOT EDIT **\n\n# TARGTYPE \"Win32 (x86) Application\" 0x0101\n\nCFG=Tutorial4 - Win32 Debug\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\n!MESSAGE use the Export Makefile command and run\n!MESSAGE \n!MESSAGE NMAKE /f \"Tutorial4.mak\".\n!MESSAGE \n!MESSAGE You can specify a configuration when running NMAKE\n!MESSAGE by defining the macro CFG on the command line. For example:\n!MESSAGE \n!MESSAGE NMAKE /f \"Tutorial4.mak\" CFG=\"Tutorial4 - Win32 Debug\"\n!MESSAGE \n!MESSAGE Possible choices for configuration are:\n!MESSAGE \n!MESSAGE \"Tutorial4 - Win32 Release\" (based on \"Win32 (x86) Application\")\n!MESSAGE \"Tutorial4 - Win32 Debug\" (based on \"Win32 (x86) Application\")\n!MESSAGE \n\n# Begin Project\n# PROP AllowPerConfigDependencies 0\n# PROP Scc_ProjName \"\"\n# PROP Scc_LocalPath \"\"\nCPP=cl.exe\nMTL=midl.exe\nRSC=rc.exe\n\n!IF  \"$(CFG)\" == \"Tutorial4 - Win32 Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"Release\"\n# PROP BASE Intermediate_Dir \"Release\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"Release\"\n# PROP Intermediate_Dir \"Release\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\n# ADD CPP /nologo /W3 /GR /GX /O2 /I \"..\\..\\include\" /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\n# ADD BASE RSC /l 0xc09 /d \"NDEBUG\"\n# ADD RSC /l 0xc09 /d \"NDEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386\n\n!ELSEIF  \"$(CFG)\" == \"Tutorial4 - Win32 Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"Debug\"\n# PROP BASE Intermediate_Dir \"Debug\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"Debug\"\n# PROP Intermediate_Dir \"Debug\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\n# ADD CPP /nologo /W3 /Gm /GR /GX /ZI /Od /I \"..\\..\\include\" /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\n# ADD BASE RSC /l 0xc09 /d \"_DEBUG\"\n# ADD RSC /l 0xc09 /d \"_DEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\n\n!ENDIF \n\n# Begin Target\n\n# Name \"Tutorial4 - Win32 Release\"\n# Name \"Tutorial4 - Win32 Debug\"\n# Begin Group \"Source Files\"\n\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n# Begin Source File\n\nSOURCE=.\\main.cpp\n# End Source File\n# Begin Source File\n\nSOURCE=.\\ScribbleApp.cpp\n# End Source File\n# Begin Source File\n\nSOURCE=.\\View.cpp\n# End Source File\n# End Group\n# Begin Group \"Header Files\"\n\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\n# Begin Source File\n\nSOURCE=.\\ScribbleApp.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\View.h\n# End Source File\n# End Group\n# Begin Group \"Resource Files\"\n\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n# End Group\n# Begin Group \"Win32++\"\n\n# PROP Default_Filter \"\"\n# Begin Source File\n\nSOURCE=..\\..\\include\\wincore.h\n# End Source File\n# End Group\n# End Target\n# End Project\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial4/Tutorial4.dsw",
    "content": "Microsoft Developer Studio Workspace File, Format Version 6.00\n# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\n\n###############################################################################\n\nProject: \"Tutorial4\"=\".\\Tutorial4.dsp\" - Package Owner=<4>\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<4>\n{{{\n}}}\n\n###############################################################################\n\nGlobal:\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<3>\n{{{\n}}}\n\n###############################################################################\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial4/Tutorial4_2003.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 8.00\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial4\", \"Tutorial4_2003.vcproj\", \"{2935452C-CFAB-41CE-899A-DEA25EB8A2C0}\"\n\tProjectSection(ProjectDependencies) = postProject\n\tEndProjectSection\nEndProject\nGlobal\n\tGlobalSection(SolutionConfiguration) = preSolution\n\t\tDebug = Debug\n\t\tRelease = Release\n\tEndGlobalSection\n\tGlobalSection(ProjectConfiguration) = postSolution\n\t\t{2935452C-CFAB-41CE-899A-DEA25EB8A2C0}.Debug.ActiveCfg = Debug|Win32\n\t\t{2935452C-CFAB-41CE-899A-DEA25EB8A2C0}.Debug.Build.0 = Debug|Win32\n\t\t{2935452C-CFAB-41CE-899A-DEA25EB8A2C0}.Release.ActiveCfg = Release|Win32\n\t\t{2935452C-CFAB-41CE-899A-DEA25EB8A2C0}.Release.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityAddIns) = postSolution\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial4/Tutorial4_2003.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"7.10\"\n\tName=\"Tutorial4\"\n\tSccProjectName=\"\"\n\tSccLocalPath=\"\">\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"/>\n\t</Platforms>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"FALSE\"\n\t\t\tCharacterSet=\"0\">\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"TRUE\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"TRUE\"\n\t\t\t\tRuntimeTypeInfo=\"TRUE\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial4.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"comctl32.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial4.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial4.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"TRUE\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial4.tlb\"\n\t\t\t\tHeaderFileName=\"\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"3081\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedWrapperGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAuxiliaryManagedWrapperGeneratorTool\"/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"FALSE\"\n\t\t\tCharacterSet=\"0\">\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tRuntimeTypeInfo=\"TRUE\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial4.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"4\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tDebugInformationFormat=\"4\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"comctl32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial4.exe\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial4.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"TRUE\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial4.tlb\"\n\t\t\t\tHeaderFileName=\"\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tCulture=\"3081\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedWrapperGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAuxiliaryManagedWrapperGeneratorTool\"/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.h\">\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\">\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\tFilter=\"\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\">\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial4/Tutorial4_2005.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 9.00\n# Visual C++ Express 2005\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial4\", \"Tutorial4_2005.vcproj\", \"{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial4/Tutorial4_2005.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"8.00\"\n\tName=\"Tutorial4\"\n\tProjectGUID=\"{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial4.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial4.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"3081\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial4.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial4.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial4.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial4.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial4.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tCulture=\"3081\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial4.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial4.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial4.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial4/Tutorial4_2008.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 10.00\n# Visual C++ Express 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial4\", \"Tutorial4_2008.vcproj\", \"{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial4/Tutorial4_2008.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"Tutorial4\"\n\tProjectGUID=\"{997E3C12-A5E6-470A-A683-5E5D2ED0D53E}\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial4.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial4.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"3081\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial4.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial4.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial4.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial4.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial4.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tCulture=\"3081\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial4.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial4.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial4.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial4/Tutorial4_2010.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 11.00\n# Visual C++ Express 2010\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial4_2010\", \"Tutorial4_2010.vcxproj\", \"{19CEEA56-2973-4E6A-818E-17DB81197AB5}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial4/Tutorial4_2010.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"ScribbleApp.h\" />\n    <ClInclude Include=\"View.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"main.cpp\" />\n    <ClCompile Include=\"ScribbleApp.cpp\" />\n    <ClCompile Include=\"View.cpp\" />\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{19CEEA56-2973-4E6A-818E-17DB81197AB5}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>Tutorial4</RootNamespace>\n    <ProjectName>Tutorial4</ProjectName>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <EmbedManifest>false</EmbedManifest>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <EmbedManifest>false</EmbedManifest>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <MinimalRebuild>true</MinimalRebuild>\n      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\n      <Optimization>Disabled</Optimization>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <GenerateManifest>false</GenerateManifest>\n      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n    <ResourceCompile>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ResourceCompile>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <Optimization>MaxSpeed</Optimization>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateManifest>false</GenerateManifest>\n      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n    <ResourceCompile>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ResourceCompile>\n  </ItemDefinitionGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial4/Tutorial4_2010.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"Header Files\">\n      <UniqueIdentifier>{45923be6-058e-42b6-bca5-9d36f003be35}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Resource Files\">\n      <UniqueIdentifier>{212251fa-96b0-48b3-8ae0-02da45ce4483}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Source Files\">\n      <UniqueIdentifier>{fa54a741-0d78-4f91-9379-b67b2a326208}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Win32++\">\n      <UniqueIdentifier>{17304d0a-6dc8-4f69-99be-d6e30ce7f3f8}</UniqueIdentifier>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"ScribbleApp.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"View.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"main.cpp\">\n      <Filter>Win32++</Filter>\n    </ClCompile>\n    <ClCompile Include=\"ScribbleApp.cpp\">\n      <Filter>Win32++</Filter>\n    </ClCompile>\n    <ClCompile Include=\"View.cpp\">\n      <Filter>Win32++</Filter>\n    </ClCompile>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial4/View.cpp",
    "content": "//////////////////////////////////////////////\n// View.cpp\n//  Definitions for the CView class\n\n#include \"view.h\"\n\n\nCView::CView()\n{\n}\n\nvoid CView::DrawLine(int x, int y)\n{\n\tCClientDC dcClient(this);\n\tdcClient.MoveTo(m_points.back().x, m_points.back().y);\n\tdcClient.LineTo(x, y);\n}\n\nvoid CView::OnDraw(CDC* pDC)\n{\n\tif (m_points.size() > 0)\n\t{\n\t\tbool bDraw = false;  //Start with the pen up\n\n\t\tfor (unsigned int i = 0 ; i < m_points.size(); i++)\n\t\t{\n\t\t\tif (bDraw) pDC->LineTo(m_points[i].x, m_points[i].y);\n\t\t\telse pDC->MoveTo(m_points[i].x, m_points[i].y);\n\t\t\tbDraw = m_points[i].PenDown;\n\t\t}\n\t}\n}\n\nvoid CView::StorePoint(int x, int y, bool PenDown)\n{\n\tPlotPoint P1;\n\tP1.x = x;\n\tP1.y = y;\n\tP1.PenDown = PenDown;\n\n\tm_points.push_back(P1); //Add the point to the vector\n}\n\nvoid CView::OnLButtonDown(LPARAM lParam)\n{\n \t// Capture mouse input.\n \tSetCapture();\n\n\tStorePoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), true);\n}\n\nvoid CView::OnLButtonUp(LPARAM lParam)\n{\n\t{\n\t\t//Release the capture on the mouse\n\t\tReleaseCapture();\n\n\t\tStorePoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), false);\n\t}\n}\n\nvoid CView::OnMouseMove(WPARAM wParam, LPARAM lParam)\n{\n\t// hold down the left mouse button and move mouse to draw lines.\n\tif ( (wParam & MK_LBUTTON) && (GetCapture() == this) )\n\t{\n\t\tDrawLine(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));\n\t\tStorePoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), true);\n\t}\n}\n\nLRESULT CView::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n\tswitch (uMsg)\n\t{\n\tcase WM_LBUTTONDOWN:\n\t\tOnLButtonDown(lParam);\n\t\tbreak;\n\n\tcase WM_MOUSEMOVE:\n\t\tOnMouseMove(wParam, lParam);\n        break;\n\n    case WM_LBUTTONUP:\n\t\tOnLButtonUp(lParam);\n\t\tbreak;\n\n\tcase WM_DESTROY:\n\t\t//End the program when window is destroyed\n\t\t::PostQuitMessage(0);\n\t\tbreak;\n\t}\n\n\t//Use the default message handling for remaining messages\n\treturn WndProcDefault(uMsg, wParam, lParam);\n}\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial4/View.h",
    "content": "//////////////////////////////////////////////////////\n// View.h\n//  Declaration of the CView class\n\n#ifndef VIEW_H\n#define VIEW_H\n\n#include \"WinCore.h\"\n#include <vector>\n\nusing std::vector;\n\n\nclass CView : public CWnd\n{\npublic:\n\tCView();\n\tvirtual ~CView(){}\n\nprotected:\n\tvirtual void OnDraw(CDC* pDC);\n\tvirtual LRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\nprivate:\n\tstruct PlotPoint\n\t{\n\t\tint x;\n\t\tint y;\n\t\tbool PenDown;\n\t};\n\n\tvoid DrawLine(int x, int y);\n\tvoid OnLButtonDown(LPARAM lParam);\n\tvoid OnLButtonUp(LPARAM lParam);\n\tvoid OnMouseMove(WPARAM wParam, LPARAM lParam);\n\tvoid StorePoint(int x, int y, bool PenDown);\n\n\tvector<PlotPoint> m_points;\t// Points of lines to draw\n};\n\n\n#endif // CVIEW_H\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial4/main.cpp",
    "content": "///////////////////////////////////////\n// main.cpp\n\n// Add the Win32++\\include  directory to project's additional include directories\n#include \"ScribbleApp.h\"\n\n\nint APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, int)\n{\n    // Start Win32++\n    CScribbleApp MyApp;\n\n\t// Run the application\n    return MyApp.Run();\n}\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/Mainfrm.cpp",
    "content": "////////////////////////////////////////////////////\n// Mainfrm.cpp  - definitions for the CMainFrame class\n\n#include \"mainfrm.h\"\n#include \"resource.h\"\n\nCMainFrame::CMainFrame()\n{\n\t//Set m_View as the view window of the frame\n\tSetView(m_View);\n}\n\nCMainFrame::~CMainFrame()\n{\n}\n\nBOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)\n{\n\t// Process the messages from the Menu and Tool Bar\n\tswitch (LOWORD(wParam))\n\t{\n\tcase IDM_FILE_EXIT:\n\t\t// End the application\n\t\t::PostMessage(m_hWnd, WM_CLOSE, 0, 0);\n\t\treturn TRUE;\n\tcase IDM_HELP_ABOUT:\n\t\t// Display the help dialog\n\t\tOnHelp();\n\t\treturn TRUE;\n\tcase IDM_FILE_NEW:\n\t\t::MessageBox(NULL, _T(\"File New  ... Implemented later\"), _T(\"Menu\"), MB_OK);\n\t\treturn TRUE;\n\tcase IDM_FILE_OPEN:\n\t\t::MessageBox(NULL, _T(\"File Open  ... Implemented later\"), _T(\"Menu\"), MB_OK);\n\t\treturn TRUE;\n\tcase IDM_FILE_SAVE:\n\t\t::MessageBox(NULL, _T(\"File Save  ... Implemented later\"), _T(\"Menu\"), MB_OK);\n\t\treturn TRUE;\n\tcase IDM_FILE_SAVEAS:\n\t\t::MessageBox(NULL, _T(\"File SaveAs  ... Implemented later\"), _T(\"Menu\"), MB_OK);\n\t\treturn TRUE;\n\tcase IDM_FILE_PRINT:\n\t\t::MessageBox(NULL, _T(\"File Print  ... Implemented later\"), _T(\"Menu\"), MB_OK);\n\t\treturn TRUE;\n\t}\n\n\treturn FALSE;\n}\n\nvoid CMainFrame::SetupToolBar()\n{\n\t// Set the Resource IDs for the toolbar buttons\n\tAddToolBarButton( IDM_FILE_NEW   );\n\tAddToolBarButton( IDM_FILE_OPEN  );\n\tAddToolBarButton( IDM_FILE_SAVE  );\n\t\n\tAddToolBarButton( 0 );\t\t\t\t// Separator\n\tAddToolBarButton( IDM_EDIT_CUT );\n\tAddToolBarButton( IDM_EDIT_COPY );\n\tAddToolBarButton( IDM_EDIT_PASTE );\n\t\n\tAddToolBarButton( 0 );\t\t\t\t// Separator\n\tAddToolBarButton( IDM_FILE_PRINT );\n\t\n\tAddToolBarButton( 0 );\t\t\t\t// Separator\n\tAddToolBarButton( IDM_HELP_ABOUT );\n}\n\nLRESULT CMainFrame::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n//\tswitch (uMsg)\n//\t{\n\n//\t} // switch (uMsg)\n\n\treturn WndProcDefault(uMsg, wParam, lParam);\n} // LRESULT CMainFrame::WndProc(...)\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/Mainfrm.h",
    "content": "///////////////////////////////////////////////////////\n// Mainfrm.h\n//  Declaration of the CMainFrame class\n\n#ifndef MAINFRM_H\n#define MAINFRM_H\n\n#include \"Frame.h\"\n#include \"View.h\"\n\n\nclass CMainFrame : public CFrame\n{\npublic:\n\tCMainFrame(void);\n\tvirtual ~CMainFrame();\n\nprotected:\n\tvirtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);\n\tvirtual void SetupToolBar();\n\tvirtual LRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\nprivate:\n\tCView m_View;\n};\n\n#endif //MAINFRM_H\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/Resource.rc",
    "content": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 2 resource.\n//\n#define APSTUDIO_HIDDEN_SYMBOLS\n#include \"windows.h\"\n#undef APSTUDIO_HIDDEN_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n#undef APSTUDIO_READONLY_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n// English (United States) resources\n\n#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\nLANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// RT_MANIFEST\n//\n\n1                       RT_MANIFEST             \"res/Win32++.manifest\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Menu\n//\n\nIDW_MAIN MENU\nBEGIN\n    POPUP \"&File\"\n    BEGIN\n        MENUITEM \"New...\",                      IDM_FILE_NEW\n        MENUITEM \"&Open...\",                    IDM_FILE_OPEN\n        MENUITEM \"&Save\",                       IDM_FILE_SAVE\n        MENUITEM \"Save &As...\",                 IDM_FILE_SAVEAS\n        MENUITEM SEPARATOR\n        MENUITEM \"&Print\",                      IDM_FILE_PRINT\n        MENUITEM SEPARATOR\n        MENUITEM \"E&xit\",                       IDM_FILE_EXIT\n    END\n    POPUP \"&View\"\n    BEGIN\n        MENUITEM \"&Tool Bar\",                   IDW_VIEW_TOOLBAR, CHECKED\n        MENUITEM \"&Status Bar\",                 IDW_VIEW_STATUSBAR, CHECKED\n    END\n    POPUP \"&Help\"\n    BEGIN\n        MENUITEM \"&About\",                      IDM_HELP_ABOUT\n    END\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Icon\n//\n\n// Icon with lowest ID value placed first to ensure application icon\n// remains consistent on all systems.\nIDW_MAIN                ICON                    \"res/pen.ico\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Bitmap\n//\n\nIDW_MAIN                BITMAP                  \"res/toolbar.bmp\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Dialog\n//\n\nIDW_ABOUT DIALOGEX 0, 0, 186, 90\nSTYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE |\n    WS_CAPTION | WS_SYSMENU\nCAPTION \"About\"\nFONT 8, \"MS Shell Dlg\", 400, 0\nBEGIN\n    DEFPUSHBUTTON   \"OK\",IDOK,68,49,50,14\n    CTEXT           \"Scribble Application\",IDC_STATIC,60,22,64,11\n    ICON            IDW_MAIN,0,4,4,20,20\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Accelerator\n//\n\nIDW_MAIN ACCELERATORS\nBEGIN\n    \"C\",            IDM_EDIT_COPY,          VIRTKEY, CONTROL, NOINVERT\n    VK_INSERT,      IDM_EDIT_COPY,          VIRTKEY, CONTROL, NOINVERT\n    VK_DELETE,      IDM_EDIT_CUT,           VIRTKEY, SHIFT, NOINVERT\n    \"X\",            IDM_EDIT_CUT,           VIRTKEY, CONTROL, NOINVERT\n    \"V\",            IDM_EDIT_PASTE,         VIRTKEY, CONTROL, NOINVERT\n    VK_INSERT,      IDM_EDIT_PASTE,         VIRTKEY, SHIFT, NOINVERT\n    VK_BACK,        IDM_EDIT_UNDO,          VIRTKEY, ALT, NOINVERT\n    \"Z\",            IDM_EDIT_UNDO,          VIRTKEY, CONTROL, NOINVERT\n    \"N\",            IDM_FILE_NEW,           VIRTKEY, CONTROL, NOINVERT\n    \"O\",            IDM_FILE_OPEN,          VIRTKEY, CONTROL, NOINVERT\n    \"P\",            IDM_FILE_PRINT,         VIRTKEY, CONTROL, NOINVERT\n    \"S\",            IDM_FILE_SAVE,          VIRTKEY, CONTROL, NOINVERT\n    VK_DELETE,      IDM_EDIT_DELETE,        VIRTKEY, NOINVERT\nEND\n\n\n#ifdef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// TEXTINCLUDE\n//\n\n1 TEXTINCLUDE \nBEGIN\n    \"resource.h\\0\"\nEND\n\n2 TEXTINCLUDE \nBEGIN\n    \"#define APSTUDIO_HIDDEN_SYMBOLS\\r\\n\"\n    \"#include \"\"windows.h\"\"\\r\\n\"\n    \"#undef APSTUDIO_HIDDEN_SYMBOLS\\r\\n\"\n    \"\\0\"\nEND\n\n3 TEXTINCLUDE \nBEGIN\n    \"\\r\\n\"\n    \"\\0\"\nEND\n\n#endif    // APSTUDIO_INVOKED\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// String Table\n//\n\nSTRINGTABLE\nBEGIN\n    IDW_MAIN                \"Scribble Application\"\n    IDW_VIEW_TOOLBAR        \"Show or hide the tool bar\"\n    IDW_VIEW_STATUSBAR      \"Show or hide the status bar\"\nEND\n\nSTRINGTABLE\nBEGIN\n    IDM_FILE_NEW            \"Create a New Document\"\n    IDM_FILE_OPEN           \"Open Existing Document\"\n    IDM_FILE_SAVE           \"Save the Document\"\n    IDM_FILE_SAVEAS         \"Save the Document with a new name\"\n    IDM_FILE_PRINT          \"Print the Document\"\n    IDM_FILE_EXIT           \"End the Program\"\n    IDM_EDIT_UNDO           \"Undo the last action\"\n    IDM_EDIT_REDO           \"Redo the previously undone action\"\nEND\n\nSTRINGTABLE\nBEGIN\n    IDM_EDIT_CUT            \"Cut the Selected Contents to the Clipboard\"\n    IDM_EDIT_COPY           \"Copy the Selected Contents to the Clipboard\"\n    IDM_EDIT_PASTE          \"Paste the Clipboard Contents to the Document\"\n    IDM_EDIT_DELETE         \"Erase the selected Contents\"\n    IDM_HELP_ABOUT          \"Display Information about this program\"\nEND\n\nSTRINGTABLE\nBEGIN\n    SC_CLOSE                \"Close the Window\"\n    SC_MAXIMIZE             \"Maximize the Window\"\n    SC_MINIMIZE             \"Minimize the WIndow\"\n    SC_MOVE                 \"Move the Window\"\n    SC_NEXTWINDOW           \"Select Next Window\"\n    SC_PREVWINDOW           \"Select Previous Window\"\n    SC_RESTORE              \"Restore the Window\"\n    SC_SIZE                 \"Resize the Window\"\nEND\n\n#endif    // English (U.S.) resources\n/////////////////////////////////////////////////////////////////////////////\n\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/ScribbleApp.cpp",
    "content": "//////////////////////////////////////\n// ScribbleApp.cpp\n\n#include \"ScribbleApp.h\"\n\nCScribbleApp::CScribbleApp()\n{\n}\n\nBOOL CScribbleApp::InitInstance()\n{\n    //Create the Window\n    m_Frame.Create();\n\n\treturn TRUE;\n}\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/ScribbleApp.h",
    "content": "////////////////////////////////////////\n// ScribbleApp.h\n\n#ifndef SCRIBBLEAPP_H\n#define SCRIBBLEAPP_H\n\n#include \"targetver.h\"\n#include \"Wincore.h\"\n#include \"Mainfrm.h\"\n\n\nclass CScribbleApp : public CWinApp\n{\npublic:\n    CScribbleApp();\n    virtual ~CScribbleApp() {}\n\tvirtual BOOL InitInstance();\n\nprivate:\n    CMainFrame m_Frame;\n};\n\n#endif // SCRIBBLEAPP_H\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/Tutorial5.bdsproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<BorlandProject>\n\t<PersonalityInfo>\n\t\t<Option>\n\t\t\t<Option Name=\"Personality\">CPlusPlusBuilder.Personality</Option>\n\t\t\t<Option Name=\"ProjectType\">CppGuiApplication</Option>\n\t\t\t<Option Name=\"Version\">1.0</Option>\n\t\t\t<Option Name=\"GUID\">{D89B38BC-DF6B-4DE6-B007-C3EB16A9D851}</Option>\n\t\t</Option>\n\t</PersonalityInfo>\n\t<CPlusPlusBuilder.Personality>\n\t\t<Source>\n\t\t\t<Source Name=\"MainSource\">Tutorial5.bpf</Source>\n\t\t</Source>\n\t\t<BCBPROJECT>\n      <project version=\"10.0\">\n        <property category=\"build.config\" name=\"active\" value=\"0\"/>\n        <property category=\"build.config\" name=\"count\" value=\"1\"/>\n        <property category=\"build.config\" name=\"excludedefaultforzero\" value=\"0\"/>\n        <property category=\"build.config.0\" name=\"builddir\" value=\"Debug\"/>\n        <property category=\"build.config.0\" name=\"key\" value=\"Debug_Build\"/>\n        <property category=\"build.config.0\" name=\"name\" value=\"Debug Build\"/>\n        <property category=\"build.config.0\" name=\"settings.win32b\" value=\"default\"/>\n        <property category=\"build.config.0\" name=\"type\" value=\"Toolset\"/>\n        <property category=\"build.config.0\" name=\"win32.win32b.builddir\" value=\"Debug_Build\"/>\n        <property category=\"build.config.1\" name=\"key\" value=\"Release_Build\"/>\n        <property category=\"build.config.1\" name=\"name\" value=\"Release Build\"/>\n        <property category=\"build.config.1\" name=\"settings.win32b\" value=\"default\"/>\n        <property category=\"build.config.1\" name=\"type\" value=\"Toolset\"/>\n        <property category=\"build.config.1\" name=\"win32.win32b.builddir\" value=\"Release_Build\"/>\n        <property category=\"build.node\" name=\"name\" value=\"Tutorial5.exe\"/>\n        <property category=\"build.node\" name=\"packages\" value=\"vclx;vcl;rtl;dbrtl;vcldb;adortl;dbxcds;dbexpress;xmlrtl;vclie;inet;inetdbbde;inetdbxpress;soaprtl;dsnap;bdertl;vcldbx\"/>\n        <property category=\"build.node\" name=\"sparelibs\" value=\"rtl.lib\"/>\n        <property category=\"build.node\" name=\"use_packages\" value=\"1\"/>\n        <property category=\"build.platform\" name=\"active\" value=\"win32\"/>\n        <property category=\"build.platform\" name=\"win32.Debug_Build.toolset\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.Release_Build.toolset\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.default\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.enabled\" value=\"1\"/>\n        <property category=\"build.platform\" name=\"win32.win32b.enabled\" value=\"1\"/>\n        <property category=\"win32.*.win32b.dcc32\" name=\"param.filenames.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.listfile.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.objfile.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.xreffile.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.arg.1\" value=\"_DEBUG\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.Od.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.k.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.r.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.v.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.vi.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.y.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.$D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.$O.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.arg.1\" value=\"DEBUG\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.V.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.arg.1\" value=\"$(BDS)\\lib\\debug\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.z.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.zd.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.zi.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.arg.1\" value=\"NDEBUG\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.O2.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.k.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.r.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.vi.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.$D.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.$O.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.V.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.arg.1\" value=\"$(BDS)\\lib\\release\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.z.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zd.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zi.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zn.enabled\" value=\"1\"/>\n        <optionset name=\"all_configurations\">\n          <property category=\"node\" name=\"displayname\" value=\"All Configurations\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.arg.1\" value=\"$(BDS)\\lib\\vcl100.csm\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Hc.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.He.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Hs.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.2\" value=\"$(BDS)\\include\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.3\" value=\"$(BDS)\\include\\dinkumware\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.4\" value=\"$(BDS)\\include\\vcl\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Ve.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.b.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.1\" value=\"_RTLDLL\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.2\" value=\"USEPACKAGES\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.3\" value=\"NO_STRICT\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.4\" value=\"_NO_VCL\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tW.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWC.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWD.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWM.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.2\" value=\".\\\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.3\" value=\"$(BDS)\\lib\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.4\" value=\"$(BDS)\\lib\\obj\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"param.filenames.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Gi.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.2\" value=\"$(BDS)\\lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.3\" value=\"$(BDS)\\lib\\obj\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.4\" value=\"$(BDS)\\lib\\psdk\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpd.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpe.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpp.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.aa.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.ap.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.dynamicrtl.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.1\" value=\"import32.lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.2\" value=\"cw32mti.lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.1\" value=\"c0w32.obj\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.2\" value=\"$(PACKAGES)\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.merge\" value=\"1\"/>\n        </optionset>\n      </project>\n      <FILELIST>\n        <FILE FILENAME=\"main.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"main\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"Mainfrm.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"Mainfrm\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"ScribbleApp.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"ScribbleApp\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"View.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"View\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\GDI.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\WinCore.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\Dialog.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\Frame.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"Mainfrm.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"resource.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"ScribbleApp.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"View.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"Resource.rc\" CONTAINERID=\"RCCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"Resource.rc\" FORMNAME=\"Resource.res\" DESIGNCLASS=\"\"/>\n      </FILELIST>\n      <IDEOPTIONS>\n        <VersionInfo>\n          <VersionInfo Name=\"IncludeVerInfo\">False</VersionInfo>\n          <VersionInfo Name=\"AutoIncBuild\">False</VersionInfo>\n          <VersionInfo Name=\"MajorVer\">1</VersionInfo>\n          <VersionInfo Name=\"MinorVer\">0</VersionInfo>\n          <VersionInfo Name=\"Release\">0</VersionInfo>\n          <VersionInfo Name=\"Build\">0</VersionInfo>\n          <VersionInfo Name=\"Debug\">False</VersionInfo>\n          <VersionInfo Name=\"PreRelease\">False</VersionInfo>\n          <VersionInfo Name=\"Special\">False</VersionInfo>\n          <VersionInfo Name=\"Private\">False</VersionInfo>\n          <VersionInfo Name=\"DLL\">False</VersionInfo>\n          <VersionInfo Name=\"Locale\">3081</VersionInfo>\n          <VersionInfo Name=\"CodePage\">1252</VersionInfo>\n        </VersionInfo>\n        <VersionInfoKeys>\n          <VersionInfoKeys Name=\"CompanyName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"FileDescription\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"FileVersion\">1.0.0.0</VersionInfoKeys>\n          <VersionInfoKeys Name=\"InternalName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"LegalCopyright\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"LegalTrademarks\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"OriginalFilename\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"ProductName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"ProductVersion\">1.0.0.0</VersionInfoKeys>\n          <VersionInfoKeys Name=\"Comments\"></VersionInfoKeys>\n        </VersionInfoKeys>\n        <Debugging>\n          <Debugging Name=\"DebugSourceDirs\"></Debugging>\n        </Debugging>\n        <Parameters>\n          <Parameters Name=\"RunParams\"></Parameters>\n          <Parameters Name=\"Launcher\"></Parameters>\n          <Parameters Name=\"UseLauncher\">False</Parameters>\n          <Parameters Name=\"DebugCWD\"></Parameters>\n          <Parameters Name=\"HostApplication\"></Parameters>\n          <Parameters Name=\"RemoteHost\"></Parameters>\n          <Parameters Name=\"RemotePath\"></Parameters>\n          <Parameters Name=\"RemoteParams\"></Parameters>\n          <Parameters Name=\"RemoteLauncher\"></Parameters>\n          <Parameters Name=\"UseRemoteLauncher\">False</Parameters>\n          <Parameters Name=\"RemoteCWD\"></Parameters>\n          <Parameters Name=\"RemoteDebug\">False</Parameters>\n          <Parameters Name=\"Debug Symbols Search Path\"></Parameters>\n          <Parameters Name=\"LoadAllSymbols\">True</Parameters>\n          <Parameters Name=\"LoadUnspecifiedSymbols\">False</Parameters>\n        </Parameters>\n        <Linker>\n          <Linker Name=\"LibPrefix\"></Linker>\n          <Linker Name=\"LibSuffix\"></Linker>\n          <Linker Name=\"LibVersion\"></Linker>\n        </Linker>\n      </IDEOPTIONS>\n    </BCBPROJECT>\n\t\t<buildevents/>\n\t</CPlusPlusBuilder.Personality>\n</BorlandProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/Tutorial5.bpf",
    "content": "This file is used by the project manager only and should be treated like the project file\n\nTo add a file to this project use the Project menu 'Add to Project'\n\nWinMain"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/Tutorial5.dev",
    "content": "[Project]\nFileName=Tutorial5.dev\nName=Tutorial5\nUnitCount=16\nType=0\nVer=1\nObjFiles=\nIncludes=..\\..\\include\nLibs=\nPrivateResource=Tutorial5_private.rc\nResourceIncludes=..\\..\\include\nMakeIncludes=\nCompiler=\nCppCompiler=-D _WIN32_IE=0x0400_@@_\nLinker=-lComctl32_@@__@@_\nIsCpp=1\nIcon=\nExeOutput=.\\Dev-C++\nObjectOutput=.\\Dev-C++\nOverrideOutput=0\nOverrideOutputName=Tutorial5.exe\nHostApplication=\nFolders=Header,Resource,Source,Win32++\nCommandLine=\nUseCustomMakefile=0\nCustomMakefile=\nIncludeVersionInfo=0\nSupportXPThemes=0\nCompilerSet=0\nCompilerSettings=0000000000000000000000\n\n[Unit1]\nFileName=main.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit2]\nFileName=Mainfrm.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit3]\nFileName=Mainfrm.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit4]\nFileName=resource.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit5]\nFileName=Resource.rc\nFolder=Resource\nCompile=1\nLink=0\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit6]\nFileName=ScribbleApp.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit7]\nFileName=ScribbleApp.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit8]\nFileName=View.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit9]\nFileName=View.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[VersionInfo]\nMajor=0\nMinor=1\nRelease=1\nBuild=1\nLanguageID=1033\nCharsetID=1252\nCompanyName=\nFileVersion=\nFileDescription=Developed using the Dev-C++ IDE\nInternalName=\nLegalCopyright=\nLegalTrademarks=\nOriginalFilename=\nProductName=\nProductVersion=\nAutoIncBuildNr=0\n\n[Unit16]\nFileName=..\\..\\include\\frame.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit10]\nFileName=..\\..\\include\\dialog.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit11]\nFileName=..\\..\\include\\gdi.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit12]\nFileName=..\\..\\include\\statusbar.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit13]\nFileName=..\\..\\include\\toolbar.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit14]\nFileName=..\\..\\include\\wincore.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit15]\nFileName=..\\..\\include\\winutils.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/Tutorial5.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"Tutorial5\" - Package Owner=<4>\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\n# ** DO NOT EDIT **\n\n# TARGTYPE \"Win32 (x86) Application\" 0x0101\n\nCFG=Tutorial5 - Win32 Debug\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\n!MESSAGE use the Export Makefile command and run\n!MESSAGE \n!MESSAGE NMAKE /f \"Tutorial5.mak\".\n!MESSAGE \n!MESSAGE You can specify a configuration when running NMAKE\n!MESSAGE by defining the macro CFG on the command line. For example:\n!MESSAGE \n!MESSAGE NMAKE /f \"Tutorial5.mak\" CFG=\"Tutorial5 - Win32 Debug\"\n!MESSAGE \n!MESSAGE Possible choices for configuration are:\n!MESSAGE \n!MESSAGE \"Tutorial5 - Win32 Release\" (based on \"Win32 (x86) Application\")\n!MESSAGE \"Tutorial5 - Win32 Debug\" (based on \"Win32 (x86) Application\")\n!MESSAGE \n\n# Begin Project\n# PROP AllowPerConfigDependencies 0\n# PROP Scc_ProjName \"\"\n# PROP Scc_LocalPath \"\"\nCPP=cl.exe\nMTL=midl.exe\nRSC=rc.exe\n\n!IF  \"$(CFG)\" == \"Tutorial5 - Win32 Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"Release\"\n# PROP BASE Intermediate_Dir \"Release\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"Release\"\n# PROP Intermediate_Dir \"Release\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\n# ADD CPP /nologo /W3 /GR /GX /O2 /I \"..\\..\\Win32++\\include\" /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\n# ADD BASE RSC /l 0xc09 /d \"NDEBUG\"\n# ADD RSC /l 0xc09 /d \"NDEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib /nologo /subsystem:windows /machine:I386\n\n!ELSEIF  \"$(CFG)\" == \"Tutorial5 - Win32 Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"Debug\"\n# PROP BASE Intermediate_Dir \"Debug\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"Debug\"\n# PROP Intermediate_Dir \"Debug\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\n# ADD CPP /nologo /W3 /Gm /GR /GX /ZI /Od /I \"..\\..\\Win32++\\include\" /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\n# ADD BASE RSC /l 0xc09 /d \"_DEBUG\"\n# ADD RSC /l 0xc09 /i \"..\\..\\Win32++\\include\" /d \"_DEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\n\n!ENDIF \n\n# Begin Target\n\n# Name \"Tutorial5 - Win32 Release\"\n# Name \"Tutorial5 - Win32 Debug\"\n# Begin Group \"Source Files\"\n\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n# Begin Source File\n\nSOURCE=.\\main.cpp\n# End Source File\n# Begin Source File\n\nSOURCE=.\\Mainfrm.cpp\n# End Source File\n# Begin Source File\n\nSOURCE=.\\ScribbleApp.cpp\n# End Source File\n# Begin Source File\n\nSOURCE=.\\View.cpp\n# End Source File\n# End Group\n# Begin Group \"Header Files\"\n\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\n# Begin Source File\n\nSOURCE=.\\Mainfrm.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\resource.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\ScribbleApp.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\View.h\n# End Source File\n# End Group\n# Begin Group \"Resource Files\"\n\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n# Begin Source File\n\nSOURCE=.\\Resource.rc\n# End Source File\n# End Group\n# Begin Group \"Win32++\"\n\n# PROP Default_Filter \"\"\n# Begin Source File\n\nSOURCE=..\\..\\include\\dialog.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\include\\frame.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\include\\gdi.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\include\\rebar.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\include\\statusbar.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\include\\toolbar.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\include\\wincore.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\include\\winutils.h\n# End Source File\n# End Group\n# End Target\n# End Project\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/Tutorial5.dsw",
    "content": "Microsoft Developer Studio Workspace File, Format Version 6.00\n# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\n\n###############################################################################\n\nProject: \"Tutorial5\"=\".\\Tutorial5.dsp\" - Package Owner=<4>\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<4>\n{{{\n}}}\n\n###############################################################################\n\nGlobal:\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<3>\n{{{\n}}}\n\n###############################################################################\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/Tutorial5_2003.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 8.00\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial5\", \"Tutorial5_2003.vcproj\", \"{7BF93D46-2C57-4179-BC00-2FCC18A4D864}\"\n\tProjectSection(ProjectDependencies) = postProject\n\tEndProjectSection\nEndProject\nGlobal\n\tGlobalSection(SolutionConfiguration) = preSolution\n\t\tDebug = Debug\n\t\tRelease = Release\n\tEndGlobalSection\n\tGlobalSection(ProjectConfiguration) = postSolution\n\t\t{7BF93D46-2C57-4179-BC00-2FCC18A4D864}.Debug.ActiveCfg = Debug|Win32\n\t\t{7BF93D46-2C57-4179-BC00-2FCC18A4D864}.Debug.Build.0 = Debug|Win32\n\t\t{7BF93D46-2C57-4179-BC00-2FCC18A4D864}.Release.ActiveCfg = Release|Win32\n\t\t{7BF93D46-2C57-4179-BC00-2FCC18A4D864}.Release.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityAddIns) = postSolution\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/Tutorial5_2003.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"7.10\"\n\tName=\"Tutorial5\"\n\tSccProjectName=\"\"\n\tSccLocalPath=\"\">\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"/>\n\t</Platforms>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"FALSE\"\n\t\t\tCharacterSet=\"0\">\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"TRUE\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"TRUE\"\n\t\t\t\tRuntimeTypeInfo=\"TRUE\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial5.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib comctl32.lib comdlg32.lib Advapi32.lib shell32.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial5.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial5.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"TRUE\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial5.tlb\"\n\t\t\t\tHeaderFileName=\"\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedWrapperGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAuxiliaryManagedWrapperGeneratorTool\"/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"FALSE\"\n\t\t\tCharacterSet=\"0\">\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tRuntimeTypeInfo=\"TRUE\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial5.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"4\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tDebugInformationFormat=\"4\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib comctl32.lib comdlg32.lib Advapi32.lib shell32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial5.exe\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial5.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"TRUE\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial5.tlb\"\n\t\t\t\tHeaderFileName=\"\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedWrapperGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAuxiliaryManagedWrapperGeneratorTool\"/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"resource.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.h\">\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"Resource.rc\">\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\tFilter=\"\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\dialog.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\gdi.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\rebar.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\statusbar.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\toolbar.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\winutils.h\">\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/Tutorial5_2005.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 9.00\n# Visual C++ Express 2005\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial5\", \"Tutorial5_2005.vcproj\", \"{04300427-CC1C-45E8-880D-F78D377CB985}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{04300427-CC1C-45E8-880D-F78D377CB985}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{04300427-CC1C-45E8-880D-F78D377CB985}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{04300427-CC1C-45E8-880D-F78D377CB985}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{04300427-CC1C-45E8-880D-F78D377CB985}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/Tutorial5_2005.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"8.00\"\n\tName=\"Tutorial5\"\n\tProjectGUID=\"{04300427-CC1C-45E8-880D-F78D377CB985}\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial5.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tRuntimeTypeInfo=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial5.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib comctl32.lib Comdlg32.lib Advapi32.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial5.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial5.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial5.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial5.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tRuntimeTypeInfo=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial5.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib comctl32.lib Comdlg32.lib Advapi32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial5.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial5.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial5.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"resource.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Resource.rc\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\dialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\frame.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\gdi.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\rebar.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\statusbar.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\toolbar.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\winutils.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/Tutorial5_2008.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 10.00\n# Visual C++ Express 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial5\", \"Tutorial5_2008.vcproj\", \"{04300427-CC1C-45E8-880D-F78D377CB985}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{04300427-CC1C-45E8-880D-F78D377CB985}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{04300427-CC1C-45E8-880D-F78D377CB985}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{04300427-CC1C-45E8-880D-F78D377CB985}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{04300427-CC1C-45E8-880D-F78D377CB985}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/Tutorial5_2008.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"Tutorial5\"\n\tProjectGUID=\"{04300427-CC1C-45E8-880D-F78D377CB985}\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial5.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tRuntimeTypeInfo=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial5.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib comctl32.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial5.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial5.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial5.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial5.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tRuntimeTypeInfo=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial5.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib comctl32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial5.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial5.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial5.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"resource.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Resource.rc\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\dialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\frame.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\gdi.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\rebar.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\statusbar.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\toolbar.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\winutils.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/Tutorial5_2010.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 11.00\n# Visual C++ Express 2010\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial5_2010\", \"Tutorial5_2010.vcxproj\", \"{19CEEA56-2973-4E6A-818E-17DB81197AB5}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/Tutorial5_2010.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"main.cpp\" />\n    <ClCompile Include=\"Mainfrm.cpp\" />\n    <ClCompile Include=\"ScribbleApp.cpp\" />\n    <ClCompile Include=\"View.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\..\\include\\dialog.h\" />\n    <ClInclude Include=\"..\\..\\include\\frame.h\" />\n    <ClInclude Include=\"..\\..\\include\\gdi.h\" />\n    <ClInclude Include=\"..\\..\\include\\rebar.h\" />\n    <ClInclude Include=\"..\\..\\include\\statusbar.h\" />\n    <ClInclude Include=\"..\\..\\include\\toolbar.h\" />\n    <ClInclude Include=\"..\\..\\include\\wincore.h\" />\n    <ClInclude Include=\"..\\..\\include\\winutils.h\" />\n    <ClInclude Include=\"Mainfrm.h\" />\n    <ClInclude Include=\"resource.h\" />\n    <ClInclude Include=\"ScribbleApp.h\" />\n    <ClInclude Include=\"View.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"Resource.rc\" />\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{19CEEA56-2973-4E6A-818E-17DB81197AB5}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>Tutorial5</RootNamespace>\n    <ProjectName>Tutorial5</ProjectName>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <EmbedManifest>false</EmbedManifest>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <EmbedManifest>false</EmbedManifest>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <MinimalRebuild>true</MinimalRebuild>\n      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\n      <Optimization>Disabled</Optimization>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <GenerateManifest>false</GenerateManifest>\n      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n    <ResourceCompile>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ResourceCompile>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <Optimization>MaxSpeed</Optimization>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateManifest>false</GenerateManifest>\n      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n    <ResourceCompile>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ResourceCompile>\n  </ItemDefinitionGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/Tutorial5_2010.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"Header Files\">\n      <UniqueIdentifier>{c21bbd03-f8c7-4445-9e3a-e86508c008cf}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Resource Files\">\n      <UniqueIdentifier>{d3759f8d-115b-489d-8565-7f361c9d0481}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Source Files\">\n      <UniqueIdentifier>{9c414f76-3eb8-409f-8798-140de9f9cf16}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Win32++\">\n      <UniqueIdentifier>{4436401f-fb86-46e8-b664-ff770c4e0fac}</UniqueIdentifier>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"main.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Mainfrm.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"ScribbleApp.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"View.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"Mainfrm.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"resource.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"ScribbleApp.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"View.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\dialog.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\frame.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\gdi.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\rebar.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\statusbar.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\toolbar.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\wincore.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\winutils.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"Resource.rc\">\n      <Filter>Resource Files</Filter>\n    </ResourceCompile>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/View.cpp",
    "content": "//////////////////////////////////////////////\n// View.cpp\n//  Definitions for the CView class\n\n#include \"view.h\"\n#include \"resource.h\"\n\n\nCView::CView()\n{\n}\n\nvoid CView::DrawLine(int x, int y)\n{\n\tCClientDC dcClient(this);\n\tdcClient.MoveTo(m_points.back().x, m_points.back().y);\n\tdcClient.LineTo(x, y);\n}\n\nvoid CView::OnDraw(CDC* pDC)\n{\n\tif (m_points.size() > 0)\n\t{\n\t\tbool bDraw = false;  //Start with the pen up\n\n\t\tfor (unsigned int i = 0 ; i < m_points.size(); i++)\n\t\t{\n\t\t\tif (bDraw) pDC->LineTo(m_points[i].x, m_points[i].y);\n\t\t\telse pDC->MoveTo(m_points[i].x, m_points[i].y);\n\t\t\tbDraw = m_points[i].PenDown;\n\t\t}\n\t}\n}\n\nvoid CView::StorePoint(int x, int y, bool PenDown)\n{\n\tPlotPoint P1;\n\tP1.x = x;\n\tP1.y = y;\n\tP1.PenDown = PenDown;\n\n\tm_points.push_back(P1); //Add the point to the vector\n}\n\nvoid CView::OnLButtonDown(LPARAM lParam)\n{\n \t// Capture mouse input.\n \tSetCapture();\n\n\tStorePoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), true);\n}\n\nvoid CView::OnLButtonUp(LPARAM lParam)\n{\n\t{\n\t\t//Release the capture on the mouse\n\t\tReleaseCapture();\n\n\t\tStorePoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), false);\n\t}\n}\n\nvoid CView::OnMouseMove(WPARAM wParam, LPARAM lParam)\n{\n\t// hold down the left mouse button and move mouse to draw lines.\n\tif ( (wParam & MK_LBUTTON) && (GetCapture() == this) )\n\t{\n\t\tDrawLine(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));\n\t\tStorePoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), true);\n\t}\n}\n\nLRESULT CView::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n\tswitch (uMsg)\n\t{\n\tcase WM_LBUTTONDOWN:\n\t\tOnLButtonDown(lParam);\n\t\tbreak;\n\n\tcase WM_MOUSEMOVE:\n\t\tOnMouseMove(wParam, lParam);\n        break;\n\n    case WM_LBUTTONUP:\n\t\tOnLButtonUp(lParam);\n\t\tbreak;\n\n\t// Note: No need to handle WM_DESTROY. The frame does this for us.\n\t// \tcase WM_DESTROY:\n\t//\t::PostQuitMessage(0);\n\t//\tbreak;\n\t}\n\n\t//Use the default message handling for remaining messages\n\treturn WndProcDefault(uMsg, wParam, lParam);\n}\n\n\n\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/View.h",
    "content": "//////////////////////////////////////////////////////\n// View.h\n//  Declaration of the CView class\n\n#ifndef VIEW_H\n#define VIEW_H\n\n#include \"WinCore.h\"\n#include <vector>\n\nusing std::vector;\n\n\nclass CView : public CWnd\n{\npublic:\n\tCView();\n\tvirtual ~CView(){}\n\nprotected:\n\tvirtual void OnDraw(CDC* pDC);\n\tvirtual LRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\nprivate:\n\tstruct PlotPoint\n\t{\n\t\tint x;\n\t\tint y;\n\t\tbool PenDown;\n\t};\n\n\tvoid DrawLine(int x, int y);\n\tvoid OnLButtonDown(LPARAM lParam);\n\tvoid OnLButtonUp(LPARAM lParam);\n\tvoid OnMouseMove(WPARAM wParam, LPARAM lParam);\n\tvoid StorePoint(int x, int y, bool PenDown);\n\n\tvector<PlotPoint> m_points;\t// Points of lines to draw\n};\n\n\n#endif // CVIEW_H\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/main.cpp",
    "content": "///////////////////////////////////////\n// main.cpp\n\n// Add the Win32++\\include  directory to project's additional include directories\n// Add the Win32++\\include  directory to project's additional resource directories\n#include \"ScribbleApp.h\"\n\n\nint APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, int)\n{\n    // Start Win32++\n    CScribbleApp MyApp;\n\n\t// Run the application\n    return MyApp.Run();\n}\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/res/Win32++.manifest",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\">\n<assemblyIdentity\n    version=\"1.0.0.0\"\n    processorArchitecture=\"*\"\n    name=\"XP Beautifier\"\n    type=\"win32\"\n/>\n<description>Adds XP Theme style to any program</description>\n<dependency>\n    <dependentAssembly>\n        <assemblyIdentity\n            type=\"win32\"\n            name=\"Microsoft.Windows.Common-Controls\"\n            version=\"6.0.0.0\"\n            processorArchitecture=\"*\"\n            publicKeyToken=\"6595b64144ccf1df\"\n            language=\"*\"\n        />\n    </dependentAssembly>\n</dependency>\n</assembly>\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/resource.h",
    "content": "//{{NO_DEPENDENCIES}}\n// Microsoft Visual C++ generated include file.\n// Used by Resource.rc\n//\n\n// include the Resource IDs defined by Win32++\n#include \"default_resource.h\"\n\n//Resource IDs for menu items and ToolBar items\n#define IDM_FILE_NEW                    101\n#define IDM_FILE_OPEN                   102\n#define IDM_FILE_SAVE                   103\n#define IDM_FILE_SAVEAS                 104\n#define IDM_FILE_PRINT                  105\n#define IDM_FILE_CLOSE                  106\n#define IDM_FILE_EXIT                   107\n#define IDM_EDIT_UNDO                   110\n#define IDM_EDIT_REDO                   111\n#define IDM_EDIT_CUT                    112\n#define IDM_EDIT_COPY                   113\n#define IDM_EDIT_PASTE                  114\n#define IDM_EDIT_DELETE                 115\n#define IDM_HELP_ABOUT                  120\n\n// Next default values for new objects\n// \n#ifdef APSTUDIO_INVOKED\n#ifndef APSTUDIO_READONLY_SYMBOLS\n#define _APS_NO_MFC                     1\n#define _APS_NEXT_RESOURCE_VALUE        129\n#define _APS_NEXT_COMMAND_VALUE         32771\n#define _APS_NEXT_CONTROL_VALUE         1000\n#define _APS_NEXT_SYMED_VALUE           130\n#endif\n#endif\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial5/targetver.h",
    "content": "///////////////////////////////////////////////////////////////////////\n// targetver.h is used to define the Windows API macros that target the \n// version of the Windows operating system you wish to support.\n\n\n// For Windows 95\n//#define WINVER          0x0400\n//#define _WIN32_WINDOWS  0x0400\n//#define _WIN32_IE       0x0300\n\n// For Windows 98\n#define WINVER          0x0410\n#define _WIN32_WINDOWS  0x0410\n#define _WIN32_IE       0x0401\n\n// For Windows NT4\n//#define WINVER          0x0400\n//#define _WIN32_WINNT    0x0400\n//#define _WIN32_IE       0x0200\n//#define NTDDI_VERSION   0x05000000\n\n// For Windows ME\n//#define WINVER          0x0500\n//#define _WIN32_WINNT    0x0500\n//#define _WIN32_IE       0x0500\n\n// For Windows 2000\n//#define WINVER          0x0500\n//#define _WIN32_WINNT    0x0500\n//#define _WIN32_IE       0x0500\n//#define NTDDI_VERSION   0x05000000\n\n// For Windows XP\n//#define WINVER          0x0501\n//#define _WIN32_WINNT    0x0501\n//#define _WIN32_IE       0x0501\n//#define NTDDI_VERSION   0x05010000\n\n// For Windows Vista\n//#define WINVER          0x0600\n//#define _WIN32_WINNT    0x0600\n//#define _WIN32_IE       0x0600\n//#define NTDDI_VERSION   0x06000000\n\n// For Windows 7\n//#define WINVER          0x0601\n//#define _WIN32_WINNT    0x0601\n//#define _WIN32_IE       0x0601\n//#define NTDDI_VERSION   0x06010000\n\n\n// Users of Visual Studio 10 can do this instead\n// #include \"SDKDDKver.h\"\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/Mainfrm.cpp",
    "content": "////////////////////////////////////////////////////\n// Mainfrm.cpp  - definitions for the CMainFrame class\n\n#include \"mainfrm.h\"\n#include \"resource.h\"\n\n\nCMainFrame::CMainFrame()\n{\n\t//Set m_View as the view window of the frame\n\tSetView(m_View);\n}\n\nCMainFrame::~CMainFrame()\n{\n}\n\nBOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)\n{\n\t// Process the messages from the Menu and Tool Bar\n\tswitch (LOWORD(wParam))\n\t{\n\tcase IDM_FILE_EXIT:\n\t\t// End the application\n\t\t::PostMessage(m_hWnd, WM_CLOSE, 0, 0);\n\t\treturn TRUE;\n\tcase IDM_HELP_ABOUT:\n\t\t// Display the help dialog\n\t\tOnHelp();\n\t\treturn TRUE;\n\tcase IDM_FILE_NEW:\n\t\t::MessageBox(NULL, _T(\"File New  ... Implemented later\"), _T(\"Menu\"), MB_OK);\n\t\treturn TRUE;\n\tcase IDM_FILE_OPEN:\n\t\t::MessageBox(NULL, _T(\"File Open  ... Implemented later\"), _T(\"Menu\"), MB_OK);\n\t\treturn TRUE;\n\tcase IDM_FILE_SAVE:\n\t\t::MessageBox(NULL, _T(\"File Save  ... Implemented later\"), _T(\"Menu\"), MB_OK);\n\t\treturn TRUE;\n\tcase IDM_FILE_SAVEAS:\n\t\t::MessageBox(NULL, _T(\"File SaveAs  ... Implemented later\"), _T(\"Menu\"), MB_OK);\n\t\treturn TRUE;\n\tcase IDM_FILE_PRINT:\n\t\t::MessageBox(NULL, _T(\"File Print  ... Implemented later\"), _T(\"Menu\"), MB_OK);\n\t\treturn TRUE;\n\t}\n\n\treturn FALSE;\n}\n\nvoid CMainFrame::SetupToolBar()\n{\n\t// Set the Resource IDs for the toolbar buttons\n\tAddToolBarButton( IDM_FILE_NEW   );\n\tAddToolBarButton( IDM_FILE_OPEN  );\n\tAddToolBarButton( IDM_FILE_SAVE  );\n\t\n\tAddToolBarButton( 0 );\t\t\t\t// Separator\n\tAddToolBarButton( IDM_EDIT_CUT );\n\tAddToolBarButton( IDM_EDIT_COPY );\n\tAddToolBarButton( IDM_EDIT_PASTE );\n\t\n\tAddToolBarButton( 0 );\t\t\t\t// Separator\n\tAddToolBarButton( IDM_FILE_PRINT );\n\t\n\tAddToolBarButton( 0 );\t\t\t\t// Separator\n\tAddToolBarButton( IDM_HELP_ABOUT );\n}\n\nLRESULT CMainFrame::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n//\tswitch (uMsg)\n//\t{\n\n//\t} // switch (uMsg)\n\n\treturn WndProcDefault(uMsg, wParam, lParam);\n} // LRESULT CMainFrame::WndProc(...)\n\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/Mainfrm.h",
    "content": "///////////////////////////////////////////////////////\n// Mainfrm.h\n//  Declaration of the CMainFrame class\n\n\n#ifndef MAINFRM_H\n#define MAINFRM_H\n\n#include \"frame.h\"\n#include \"View.h\"\n\n\nclass CMainFrame : public CFrame\n{\npublic:\n\tCMainFrame(void);\n\tvirtual ~CMainFrame();\n\nprotected:\n\tvirtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);\n\tvirtual void SetupToolBar();\n\tvirtual LRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\nprivate:\n\tCView m_View;\n\n};\n\n#endif //MAINFRM_H\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/Resource.rc",
    "content": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 2 resource.\n//\n#define APSTUDIO_HIDDEN_SYMBOLS\n#include \"windows.h\"\n#undef APSTUDIO_HIDDEN_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n#undef APSTUDIO_READONLY_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n// English (United States) resources\n\n#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\nLANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// RT_MANIFEST\n//\n\n1                       RT_MANIFEST             \"res/Win32++.manifest\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Menu\n//\n\nIDW_MAIN MENU\nBEGIN\n    POPUP \"&File\"\n    BEGIN\n        MENUITEM \"New...\",                      IDM_FILE_NEW\n        MENUITEM \"&Open...\",                    IDM_FILE_OPEN\n        MENUITEM \"&Save\",                       IDM_FILE_SAVE\n        MENUITEM \"Save &As...\",                 IDM_FILE_SAVEAS\n        MENUITEM SEPARATOR\n        MENUITEM \"&Print\",                      IDM_FILE_PRINT\n        MENUITEM SEPARATOR\n        MENUITEM \"E&xit\",                       IDM_FILE_EXIT\n    END\n    POPUP \"&View\"\n    BEGIN\n        MENUITEM \"&Tool Bar\",                   IDW_VIEW_TOOLBAR, CHECKED\n        MENUITEM \"&Status Bar\",                 IDW_VIEW_STATUSBAR, CHECKED\n    END\n    POPUP \"&Help\"\n    BEGIN\n        MENUITEM \"&About\",                      IDM_HELP_ABOUT\n    END\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Icon\n//\n\n// Icon with lowest ID value placed first to ensure application icon\n// remains consistent on all systems.\nIDW_MAIN                ICON                    \"res/pen.ico\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Bitmap\n//\n\nIDW_MAIN                BITMAP                  \"res/toolbar.bmp\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Dialog\n//\n\nIDW_ABOUT DIALOGEX 0, 0, 186, 90\nSTYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE |\n    WS_CAPTION | WS_SYSMENU\nCAPTION \"About\"\nFONT 8, \"MS Shell Dlg\", 400, 0\nBEGIN\n    DEFPUSHBUTTON   \"OK\",IDOK,68,49,50,14\n    CTEXT           \"Scribble Application\",IDC_STATIC,60,22,64,11\n    ICON            IDW_MAIN,0,4,4,20,20\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Accelerator\n//\n\nIDW_MAIN ACCELERATORS\nBEGIN\n    \"C\",            IDM_EDIT_COPY,          VIRTKEY, CONTROL, NOINVERT\n    VK_INSERT,      IDM_EDIT_COPY,          VIRTKEY, CONTROL, NOINVERT\n    VK_DELETE,      IDM_EDIT_CUT,           VIRTKEY, SHIFT, NOINVERT\n    \"X\",            IDM_EDIT_CUT,           VIRTKEY, CONTROL, NOINVERT\n    \"V\",            IDM_EDIT_PASTE,         VIRTKEY, CONTROL, NOINVERT\n    VK_INSERT,      IDM_EDIT_PASTE,         VIRTKEY, SHIFT, NOINVERT\n    VK_BACK,        IDM_EDIT_UNDO,          VIRTKEY, ALT, NOINVERT\n    \"Z\",            IDM_EDIT_UNDO,          VIRTKEY, CONTROL, NOINVERT\n    \"N\",            IDM_FILE_NEW,           VIRTKEY, CONTROL, NOINVERT\n    \"O\",            IDM_FILE_OPEN,          VIRTKEY, CONTROL, NOINVERT\n    \"P\",            IDM_FILE_PRINT,         VIRTKEY, CONTROL, NOINVERT\n    \"S\",            IDM_FILE_SAVE,          VIRTKEY, CONTROL, NOINVERT\n    VK_DELETE,      IDM_EDIT_DELETE,        VIRTKEY, NOINVERT\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Cursor\n//\n\nIDC_CURSOR1             CURSOR                  \"res/Cursor.cur\"\n\n\n#ifdef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// TEXTINCLUDE\n//\n\n1 TEXTINCLUDE \nBEGIN\n    \"resource.h\\0\"\nEND\n\n2 TEXTINCLUDE \nBEGIN\n    \"#define APSTUDIO_HIDDEN_SYMBOLS\\r\\n\"\n    \"#include \"\"windows.h\"\"\\r\\n\"\n    \"#undef APSTUDIO_HIDDEN_SYMBOLS\\r\\n\"\n    \"\\0\"\nEND\n\n3 TEXTINCLUDE \nBEGIN\n    \"\\r\\n\"\n    \"\\0\"\nEND\n\n#endif    // APSTUDIO_INVOKED\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// String Table\n//\n\nSTRINGTABLE\nBEGIN\n    IDW_MAIN                \"Scribble Application\"\n    IDW_VIEW_TOOLBAR        \"Show or hide the tool bar\"\n    IDW_VIEW_STATUSBAR      \"Show or hide the status bar\"\nEND\n\nSTRINGTABLE\nBEGIN\n    IDM_FILE_NEW            \"Create a New Document\"\n    IDM_FILE_OPEN           \"Open Existing Document\"\n    IDM_FILE_SAVE           \"Save the Document\"\n    IDM_FILE_SAVEAS         \"Save the Document with a new name\"\n    IDM_FILE_PRINT          \"Print the Document\"\n    IDM_FILE_EXIT           \"End the Program\"\n    IDM_EDIT_UNDO           \"Undo the last action\"\n    IDM_EDIT_REDO           \"Redo the previously undone action\"\nEND\n\nSTRINGTABLE\nBEGIN\n    IDM_EDIT_CUT            \"Cut the Selected Contents to the Clipboard\"\n    IDM_EDIT_COPY           \"Copy the Selected Contents to the Clipboard\"\n    IDM_EDIT_PASTE          \"Paste the Clipboard Contents to the Document\"\n    IDM_EDIT_DELETE         \"Erase the selected Contents\"\n    IDM_HELP_ABOUT          \"Display Information about this program\"\nEND\n\nSTRINGTABLE\nBEGIN\n    IDM_PEN_RED             \"Red Pen\"\n    IDM_PEN_BLUE            \"Blue Pen\"\n    IDM_PEN_GREEN           \"Green Pen\"\n    IDM_PEN_BLACK           \"Black Pen\"\nEND\n\nSTRINGTABLE\nBEGIN\n    SC_CLOSE                \"Close the Window\"\n    SC_MAXIMIZE             \"Maximize the Window\"\n    SC_MINIMIZE             \"Minimize the WIndow\"\n    SC_MOVE                 \"Move the Window\"\n    SC_NEXTWINDOW           \"Select Next Window\"\n    SC_PREVWINDOW           \"Select Previous Window\"\n    SC_RESTORE              \"Restore the Window\"\n    SC_SIZE                 \"Resize the Window\"\nEND\n\n#endif    // English (U.S.) resources\n/////////////////////////////////////////////////////////////////////////////\n\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/ScribbleApp.cpp",
    "content": "///////////////////////////////\n// ScribbleApp.cpp\n\n#include \"ScribbleApp.h\"\n\nCScribbleApp::CScribbleApp()\n{\n}\n\nBOOL CScribbleApp::InitInstance()\n{\n    //Create the Window\n    m_Frame.Create();\n\n\treturn TRUE;\n}\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/ScribbleApp.h",
    "content": "//////////////////////////////////\n// ScribbleApp.h\n\n\n#ifndef SCRIBBLEAPP_H\n#define SCRIBBLEAPP_H\n\n#include \"targetver.h\"\n#include \"Wincore.h\"\n#include \"Mainfrm.h\"\n\n\nclass CScribbleApp : public CWinApp\n{\npublic:\n    CScribbleApp();\n    virtual ~CScribbleApp() {}\n\tvirtual BOOL InitInstance();\n\nprivate:\n    CMainFrame m_Frame;\n};\n\n#endif //SCRIBBLEAPP_H\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/Tutorial6.bdsproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<BorlandProject>\n\t<PersonalityInfo>\n\t\t<Option>\n\t\t\t<Option Name=\"Personality\">CPlusPlusBuilder.Personality</Option>\n\t\t\t<Option Name=\"ProjectType\">CppGuiApplication</Option>\n\t\t\t<Option Name=\"Version\">1.0</Option>\n\t\t\t<Option Name=\"GUID\">{D89B38BC-DF6B-4DE6-B007-C3EB16A9D851}</Option>\n\t\t</Option>\n\t</PersonalityInfo>\n\t<CPlusPlusBuilder.Personality>\n\t\t<Source>\n\t\t\t<Source Name=\"MainSource\">Tutorial6.bpf</Source>\n\t\t</Source>\n\t\t<BCBPROJECT>\n      <project version=\"10.0\">\n        <property category=\"build.config\" name=\"active\" value=\"0\"/>\n        <property category=\"build.config\" name=\"count\" value=\"1\"/>\n        <property category=\"build.config\" name=\"excludedefaultforzero\" value=\"0\"/>\n        <property category=\"build.config.0\" name=\"builddir\" value=\"Debug\"/>\n        <property category=\"build.config.0\" name=\"key\" value=\"Debug_Build\"/>\n        <property category=\"build.config.0\" name=\"name\" value=\"Debug Build\"/>\n        <property category=\"build.config.0\" name=\"settings.win32b\" value=\"default\"/>\n        <property category=\"build.config.0\" name=\"type\" value=\"Toolset\"/>\n        <property category=\"build.config.0\" name=\"win32.win32b.builddir\" value=\"Debug_Build\"/>\n        <property category=\"build.config.1\" name=\"key\" value=\"Release_Build\"/>\n        <property category=\"build.config.1\" name=\"name\" value=\"Release Build\"/>\n        <property category=\"build.config.1\" name=\"settings.win32b\" value=\"default\"/>\n        <property category=\"build.config.1\" name=\"type\" value=\"Toolset\"/>\n        <property category=\"build.config.1\" name=\"win32.win32b.builddir\" value=\"Release_Build\"/>\n        <property category=\"build.node\" name=\"name\" value=\"Tutorial6.exe\"/>\n        <property category=\"build.node\" name=\"packages\" value=\"vclx;vcl;rtl;dbrtl;vcldb;adortl;dbxcds;dbexpress;xmlrtl;vclie;inet;inetdbbde;inetdbxpress;soaprtl;dsnap;bdertl;vcldbx\"/>\n        <property category=\"build.node\" name=\"sparelibs\" value=\"rtl.lib\"/>\n        <property category=\"build.node\" name=\"use_packages\" value=\"1\"/>\n        <property category=\"build.platform\" name=\"active\" value=\"win32\"/>\n        <property category=\"build.platform\" name=\"win32.Debug_Build.toolset\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.Release_Build.toolset\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.default\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.enabled\" value=\"1\"/>\n        <property category=\"build.platform\" name=\"win32.win32b.enabled\" value=\"1\"/>\n        <property category=\"win32.*.win32b.dcc32\" name=\"param.filenames.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.listfile.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.objfile.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.xreffile.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.arg.1\" value=\"_DEBUG\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.Od.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.k.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.r.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.v.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.vi.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.y.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.$D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.$O.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.arg.1\" value=\"DEBUG\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.V.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.arg.1\" value=\"$(BDS)\\lib\\debug\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.z.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.zd.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.zi.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.arg.1\" value=\"NDEBUG\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.O2.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.k.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.r.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.vi.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.$D.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.$O.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.V.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.arg.1\" value=\"$(BDS)\\lib\\release\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.z.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zd.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zi.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zn.enabled\" value=\"1\"/>\n        <optionset name=\"all_configurations\">\n          <property category=\"node\" name=\"displayname\" value=\"All Configurations\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.arg.1\" value=\"$(BDS)\\lib\\vcl100.csm\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Hc.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.He.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Hs.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.2\" value=\"$(BDS)\\include\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.3\" value=\"$(BDS)\\include\\dinkumware\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.4\" value=\"$(BDS)\\include\\vcl\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Ve.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.b.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.1\" value=\"_RTLDLL\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.2\" value=\"USEPACKAGES\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.3\" value=\"NO_STRICT\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.4\" value=\"_NO_VCL\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tW.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWC.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWD.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWM.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.2\" value=\".\\\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.3\" value=\"$(BDS)\\lib\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.4\" value=\"$(BDS)\\lib\\obj\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"param.filenames.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Gi.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.2\" value=\"$(BDS)\\lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.3\" value=\"$(BDS)\\lib\\obj\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.4\" value=\"$(BDS)\\lib\\psdk\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpd.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpe.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpp.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.aa.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.ap.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.dynamicrtl.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.1\" value=\"import32.lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.2\" value=\"cw32mti.lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.1\" value=\"c0w32.obj\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.2\" value=\"$(PACKAGES)\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.merge\" value=\"1\"/>\n        </optionset>\n      </project>\n      <FILELIST>\n        <FILE FILENAME=\"main.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"main\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"Mainfrm.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"Mainfrm\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"ScribbleApp.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"ScribbleApp\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"View.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"View\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\Dialog.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\Frame.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\GDI.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\WinCore.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"Mainfrm.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"resource.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"ScribbleApp.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"View.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"Resource.rc\" CONTAINERID=\"RCCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"Resource.rc\" FORMNAME=\"Resource.res\" DESIGNCLASS=\"\"/>\n      </FILELIST>\n      <IDEOPTIONS>\n        <VersionInfo>\n          <VersionInfo Name=\"IncludeVerInfo\">False</VersionInfo>\n          <VersionInfo Name=\"AutoIncBuild\">False</VersionInfo>\n          <VersionInfo Name=\"MajorVer\">1</VersionInfo>\n          <VersionInfo Name=\"MinorVer\">0</VersionInfo>\n          <VersionInfo Name=\"Release\">0</VersionInfo>\n          <VersionInfo Name=\"Build\">0</VersionInfo>\n          <VersionInfo Name=\"Debug\">False</VersionInfo>\n          <VersionInfo Name=\"PreRelease\">False</VersionInfo>\n          <VersionInfo Name=\"Special\">False</VersionInfo>\n          <VersionInfo Name=\"Private\">False</VersionInfo>\n          <VersionInfo Name=\"DLL\">False</VersionInfo>\n          <VersionInfo Name=\"Locale\">3081</VersionInfo>\n          <VersionInfo Name=\"CodePage\">1252</VersionInfo>\n        </VersionInfo>\n        <VersionInfoKeys>\n          <VersionInfoKeys Name=\"CompanyName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"FileDescription\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"FileVersion\">1.0.0.0</VersionInfoKeys>\n          <VersionInfoKeys Name=\"InternalName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"LegalCopyright\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"LegalTrademarks\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"OriginalFilename\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"ProductName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"ProductVersion\">1.0.0.0</VersionInfoKeys>\n          <VersionInfoKeys Name=\"Comments\"></VersionInfoKeys>\n        </VersionInfoKeys>\n        <Debugging>\n          <Debugging Name=\"DebugSourceDirs\"></Debugging>\n        </Debugging>\n        <Parameters>\n          <Parameters Name=\"RunParams\"></Parameters>\n          <Parameters Name=\"Launcher\"></Parameters>\n          <Parameters Name=\"UseLauncher\">False</Parameters>\n          <Parameters Name=\"DebugCWD\"></Parameters>\n          <Parameters Name=\"HostApplication\"></Parameters>\n          <Parameters Name=\"RemoteHost\"></Parameters>\n          <Parameters Name=\"RemotePath\"></Parameters>\n          <Parameters Name=\"RemoteParams\"></Parameters>\n          <Parameters Name=\"RemoteLauncher\"></Parameters>\n          <Parameters Name=\"UseRemoteLauncher\">False</Parameters>\n          <Parameters Name=\"RemoteCWD\"></Parameters>\n          <Parameters Name=\"RemoteDebug\">False</Parameters>\n          <Parameters Name=\"Debug Symbols Search Path\"></Parameters>\n          <Parameters Name=\"LoadAllSymbols\">True</Parameters>\n          <Parameters Name=\"LoadUnspecifiedSymbols\">False</Parameters>\n        </Parameters>\n        <Linker>\n          <Linker Name=\"LibPrefix\"></Linker>\n          <Linker Name=\"LibSuffix\"></Linker>\n          <Linker Name=\"LibVersion\"></Linker>\n        </Linker>\n      </IDEOPTIONS>\n    </BCBPROJECT>\n\t\t<buildevents/>\n\t</CPlusPlusBuilder.Personality>\n</BorlandProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/Tutorial6.bpf",
    "content": "This file is used by the project manager only and should be treated like the project file\n\nTo add a file to this project use the Project menu 'Add to Project'\n\nWinMain"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/Tutorial6.dev",
    "content": "[Project]\nFileName=Tutorial6.dev\nName=Tutorial6\nUnitCount=16\nType=0\nVer=1\nObjFiles=\nIncludes=..\\..\\include\nLibs=\nPrivateResource=Tutorial6_private.rc\nResourceIncludes=..\\..\\include\nMakeIncludes=\nCompiler=\nCppCompiler=-D _WIN32_IE=0x0400_@@_\nLinker=-lComctl32_@@__@@_\nIsCpp=1\nIcon=\nExeOutput=.\\Dev-C++\nObjectOutput=.\\Dev-C++\nOverrideOutput=0\nOverrideOutputName=Tutorial6.exe\nHostApplication=\nFolders=Header,Resource,Source,Win32++\nCommandLine=\nUseCustomMakefile=0\nCustomMakefile=\nIncludeVersionInfo=0\nSupportXPThemes=0\nCompilerSet=0\nCompilerSettings=0000000000000000000000\n\n[Unit1]\nFileName=main.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit2]\nFileName=Mainfrm.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit3]\nFileName=Mainfrm.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit4]\nFileName=resource.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit5]\nFileName=Resource.rc\nFolder=Resource\nCompile=1\nLink=0\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit6]\nFileName=ScribbleApp.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit7]\nFileName=ScribbleApp.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit8]\nFileName=View.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit9]\nFileName=View.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[VersionInfo]\nMajor=0\nMinor=1\nRelease=1\nBuild=1\nLanguageID=1033\nCharsetID=1252\nCompanyName=\nFileVersion=\nFileDescription=Developed using the Dev-C++ IDE\nInternalName=\nLegalCopyright=\nLegalTrademarks=\nOriginalFilename=\nProductName=\nProductVersion=\nAutoIncBuildNr=0\n\n[Unit10]\nFileName=..\\..\\include\\dialog.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit11]\nFileName=..\\..\\include\\frame.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit12]\nFileName=..\\..\\include\\gdi.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit13]\nFileName=..\\..\\include\\rebar.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit14]\nFileName=..\\..\\include\\statusbar.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit15]\nFileName=..\\..\\include\\toolbar.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit16]\nFileName=..\\..\\include\\wincore.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/Tutorial6.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"Tutorial6\" - Package Owner=<4>\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\n# ** DO NOT EDIT **\n\n# TARGTYPE \"Win32 (x86) Application\" 0x0101\n\nCFG=Tutorial6 - Win32 Debug\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\n!MESSAGE use the Export Makefile command and run\n!MESSAGE \n!MESSAGE NMAKE /f \"Tutorial6.mak\".\n!MESSAGE \n!MESSAGE You can specify a configuration when running NMAKE\n!MESSAGE by defining the macro CFG on the command line. For example:\n!MESSAGE \n!MESSAGE NMAKE /f \"Tutorial6.mak\" CFG=\"Tutorial6 - Win32 Debug\"\n!MESSAGE \n!MESSAGE Possible choices for configuration are:\n!MESSAGE \n!MESSAGE \"Tutorial6 - Win32 Release\" (based on \"Win32 (x86) Application\")\n!MESSAGE \"Tutorial6 - Win32 Debug\" (based on \"Win32 (x86) Application\")\n!MESSAGE \n\n# Begin Project\n# PROP AllowPerConfigDependencies 0\n# PROP Scc_ProjName \"\"\n# PROP Scc_LocalPath \"\"\nCPP=cl.exe\nMTL=midl.exe\nRSC=rc.exe\n\n!IF  \"$(CFG)\" == \"Tutorial6 - Win32 Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"Release\"\n# PROP BASE Intermediate_Dir \"Release\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"Release\"\n# PROP Intermediate_Dir \"Release\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\n# ADD CPP /nologo /W3 /GR /GX /O2 /I \"..\\..\\include\" /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\n# ADD BASE RSC /l 0xc09 /d \"NDEBUG\"\n# ADD RSC /l 0xc09 /i \"..\\..\\include\" /d \"NDEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib /nologo /subsystem:windows /machine:I386\n\n!ELSEIF  \"$(CFG)\" == \"Tutorial6 - Win32 Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"Debug\"\n# PROP BASE Intermediate_Dir \"Debug\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"Debug\"\n# PROP Intermediate_Dir \"Debug\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\n# ADD CPP /nologo /W3 /Gm /GR /GX /ZI /Od /I \"..\\..\\include\" /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\n# ADD BASE RSC /l 0xc09 /d \"_DEBUG\"\n# ADD RSC /l 0xc09 /i \"..\\..\\Win32++\\include\" /i \"..\\..\\include\" /d \"_DEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\n\n!ENDIF \n\n# Begin Target\n\n# Name \"Tutorial6 - Win32 Release\"\n# Name \"Tutorial6 - Win32 Debug\"\n# Begin Group \"Source Files\"\n\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n# Begin Source File\n\nSOURCE=.\\main.cpp\n# End Source File\n# Begin Source File\n\nSOURCE=.\\Mainfrm.cpp\n# End Source File\n# Begin Source File\n\nSOURCE=.\\ScribbleApp.cpp\n# End Source File\n# Begin Source File\n\nSOURCE=.\\View.cpp\n# End Source File\n# End Group\n# Begin Group \"Header Files\"\n\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\n# Begin Source File\n\nSOURCE=.\\Mainfrm.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\resource.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\ScribbleApp.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\View.h\n# End Source File\n# End Group\n# Begin Group \"Resource Files\"\n\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n# Begin Source File\n\nSOURCE=.\\Resource.rc\n# End Source File\n# End Group\n# Begin Group \"Win32++\"\n\n# PROP Default_Filter \"\"\n# Begin Source File\n\nSOURCE=..\\..\\include\\dialog.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\include\\frame.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\include\\gdi.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\include\\rebar.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\include\\statusbar.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\include\\toolbar.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\include\\wincore.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\include\\winutils.h\n# End Source File\n# End Group\n# End Target\n# End Project\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/Tutorial6.dsw",
    "content": "Microsoft Developer Studio Workspace File, Format Version 6.00\n# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\n\n###############################################################################\n\nProject: \"Tutorial6\"=\".\\Tutorial6.dsp\" - Package Owner=<4>\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<4>\n{{{\n}}}\n\n###############################################################################\n\nGlobal:\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<3>\n{{{\n}}}\n\n###############################################################################\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/Tutorial6_2003.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 8.00\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial6\", \"Tutorial6_2003.vcproj\", \"{1A46808C-904E-4EC2-A75D-DD48F60A56A0}\"\n\tProjectSection(ProjectDependencies) = postProject\n\tEndProjectSection\nEndProject\nGlobal\n\tGlobalSection(SolutionConfiguration) = preSolution\n\t\tDebug = Debug\n\t\tRelease = Release\n\tEndGlobalSection\n\tGlobalSection(ProjectConfiguration) = postSolution\n\t\t{1A46808C-904E-4EC2-A75D-DD48F60A56A0}.Debug.ActiveCfg = Debug|Win32\n\t\t{1A46808C-904E-4EC2-A75D-DD48F60A56A0}.Debug.Build.0 = Debug|Win32\n\t\t{1A46808C-904E-4EC2-A75D-DD48F60A56A0}.Release.ActiveCfg = Release|Win32\n\t\t{1A46808C-904E-4EC2-A75D-DD48F60A56A0}.Release.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityAddIns) = postSolution\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/Tutorial6_2003.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"7.10\"\n\tName=\"Tutorial6\"\n\tSccProjectName=\"\"\n\tSccLocalPath=\"\">\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"/>\n\t</Platforms>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"FALSE\"\n\t\t\tCharacterSet=\"0\">\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tRuntimeTypeInfo=\"TRUE\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial6.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tDebugInformationFormat=\"4\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"comctl32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial6.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial6.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"TRUE\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial6.tlb\"\n\t\t\t\tHeaderFileName=\"\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedWrapperGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAuxiliaryManagedWrapperGeneratorTool\"/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"FALSE\"\n\t\t\tCharacterSet=\"0\">\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"TRUE\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"TRUE\"\n\t\t\t\tRuntimeTypeInfo=\"TRUE\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial6.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"comctl32.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial6.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial6.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"TRUE\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial6.tlb\"\n\t\t\t\tHeaderFileName=\"\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedWrapperGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAuxiliaryManagedWrapperGeneratorTool\"/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"resource.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.h\">\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"Resource.rc\">\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\tFilter=\"\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\dialog.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\frame.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\gdi.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\rebar.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\statusbar.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\toolbar.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\winutils.h\">\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/Tutorial6_2005.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 9.00\n# Visual C++ Express 2005\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial6\", \"Tutorial6_2005.vcproj\", \"{ADFE324C-E928-40A3-8A6B-0BC8DCF3D8DD}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{ADFE324C-E928-40A3-8A6B-0BC8DCF3D8DD}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{ADFE324C-E928-40A3-8A6B-0BC8DCF3D8DD}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{ADFE324C-E928-40A3-8A6B-0BC8DCF3D8DD}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{ADFE324C-E928-40A3-8A6B-0BC8DCF3D8DD}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/Tutorial6_2005.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"8.00\"\n\tName=\"Tutorial6\"\n\tProjectGUID=\"{ADFE324C-E928-40A3-8A6B-0BC8DCF3D8DD}\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial6.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tRuntimeTypeInfo=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial6.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib comctl32.lib Comdlg32.lib Advapi32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial6.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial6.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial6.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial6.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tRuntimeTypeInfo=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial6.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib comctl32.lib Comdlg32.lib Advapi32.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial6.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial6.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial6.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"resource.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Resource.rc\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\dialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\frame.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\gdi.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\rebar.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\statusbar.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\toolbar.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\winutils.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/Tutorial6_2008.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 10.00\n# Visual C++ Express 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial6\", \"Tutorial6_2008.vcproj\", \"{ADFE324C-E928-40A3-8A6B-0BC8DCF3D8DD}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{ADFE324C-E928-40A3-8A6B-0BC8DCF3D8DD}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{ADFE324C-E928-40A3-8A6B-0BC8DCF3D8DD}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{ADFE324C-E928-40A3-8A6B-0BC8DCF3D8DD}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{ADFE324C-E928-40A3-8A6B-0BC8DCF3D8DD}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/Tutorial6_2008.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"Tutorial6\"\n\tProjectGUID=\"{ADFE324C-E928-40A3-8A6B-0BC8DCF3D8DD}\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial6.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tRuntimeTypeInfo=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial6.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib comctl32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial6.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial6.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial6.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial6.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tRuntimeTypeInfo=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial6.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib comctl32.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial6.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial6.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial6.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"resource.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Resource.rc\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\dialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\frame.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\gdi.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\rebar.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\statusbar.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\toolbar.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\winutils.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/Tutorial6_2010.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 11.00\n# Visual C++ Express 2010\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial6_2010\", \"Tutorial6_2010.vcxproj\", \"{19CEEA56-2973-4E6A-818E-17DB81197AB5}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/Tutorial6_2010.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"main.cpp\" />\n    <ClCompile Include=\"Mainfrm.cpp\" />\n    <ClCompile Include=\"ScribbleApp.cpp\" />\n    <ClCompile Include=\"View.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\..\\include\\dialog.h\" />\n    <ClInclude Include=\"..\\..\\include\\frame.h\" />\n    <ClInclude Include=\"..\\..\\include\\gdi.h\" />\n    <ClInclude Include=\"..\\..\\include\\rebar.h\" />\n    <ClInclude Include=\"..\\..\\include\\statusbar.h\" />\n    <ClInclude Include=\"..\\..\\include\\toolbar.h\" />\n    <ClInclude Include=\"..\\..\\include\\wincore.h\" />\n    <ClInclude Include=\"..\\..\\include\\winutils.h\" />\n    <ClInclude Include=\"Mainfrm.h\" />\n    <ClInclude Include=\"resource.h\" />\n    <ClInclude Include=\"ScribbleApp.h\" />\n    <ClInclude Include=\"View.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"Resource.rc\" />\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{19CEEA56-2973-4E6A-818E-17DB81197AB5}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>Tutorial6</RootNamespace>\n    <ProjectName>Tutorial6</ProjectName>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <EmbedManifest>false</EmbedManifest>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <EmbedManifest>false</EmbedManifest>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <MinimalRebuild>true</MinimalRebuild>\n      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\n      <Optimization>Disabled</Optimization>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <GenerateManifest>false</GenerateManifest>\n      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n    <ResourceCompile>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ResourceCompile>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <Optimization>MaxSpeed</Optimization>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateManifest>false</GenerateManifest>\n      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n    <ResourceCompile>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ResourceCompile>\n  </ItemDefinitionGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/Tutorial6_2010.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"Header Files\">\n      <UniqueIdentifier>{9875b9a3-d7ab-426b-b69f-d210ab15892b}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Resource Files\">\n      <UniqueIdentifier>{5a17a594-62ae-44c4-95e2-69258b2b0831}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Source Files\">\n      <UniqueIdentifier>{be619946-fa9e-40eb-bd92-91ae9a150f58}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Win32++\">\n      <UniqueIdentifier>{eed6c8f8-92f1-43c9-a5cf-0d1f161ea72b}</UniqueIdentifier>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"main.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Mainfrm.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"ScribbleApp.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"View.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"Mainfrm.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"resource.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"ScribbleApp.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"View.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\dialog.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\frame.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\gdi.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\rebar.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\statusbar.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\toolbar.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\wincore.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\winutils.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"Resource.rc\">\n      <Filter>Resource Files</Filter>\n    </ResourceCompile>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/View.cpp",
    "content": "//////////////////////////////////////////////\n// View.cpp\n//  Definitions for the CView class\n\n#include \"view.h\"\n#include \"resource.h\"\n\n\nCView::CView()\n{\n\tm_Brush.CreateSolidBrush(RGB(255,255,230));\n}\n\nCView::~CView()\n{\n}\n\nvoid CView::DrawLine(int x, int y)\n{\n\tCClientDC dcClient(this);\n\tdcClient.MoveTo(m_points.back().x, m_points.back().y);\n\tdcClient.LineTo(x, y);\n}\n\nvoid CView::OnDraw(CDC* pDC)\n{\n\tif (m_points.size() > 0)\n\t{\n\t\tbool bDraw = false;  //Start with the pen up\n\n\t\tfor (unsigned int i = 0 ; i < m_points.size(); i++)\n\t\t{\n\t\t\tif (bDraw) pDC->LineTo(m_points[i].x, m_points[i].y);\n\t\t\telse pDC->MoveTo(m_points[i].x, m_points[i].y);\n\t\t\tbDraw = m_points[i].PenDown;\n\t\t}\n\t}\n}\n\nvoid CView::PreCreate(CREATESTRUCT &cs)\n{\n\t// Set the extra style to provide a sunken edge\n\tcs.dwExStyle = WS_EX_CLIENTEDGE;\n}\n\nvoid CView::PreRegisterClass(WNDCLASS &wc)\n{\n\t// Set the background brush and cursor\n\twc.hbrBackground = m_Brush;\n\twc.lpszClassName = _T(\"Scribble Window\");\n\twc.hCursor = ::LoadCursor(GetApp()->GetInstanceHandle(), MAKEINTRESOURCE(IDC_CURSOR1));\n}\n\nvoid CView::StorePoint(int x, int y, bool PenDown)\n{\n\tPlotPoint P1;\n\tP1.x = x;\n\tP1.y = y;\n\tP1.PenDown = PenDown;\n\n\tm_points.push_back(P1); //Add the point to the vector\n}\n\nvoid CView::OnLButtonDown(LPARAM lParam)\n{\n \t// Capture mouse input.\n \tSetCapture();\n\n\tStorePoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), true);\n}\n\nvoid CView::OnLButtonUp(LPARAM lParam)\n{\n\t{\n\t\t//Release the capture on the mouse\n\t\tReleaseCapture();\n\n\t\tStorePoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), false);\n\t}\n}\n\nvoid CView::OnMouseMove(WPARAM wParam, LPARAM lParam)\n{\n\t// hold down the left mouse button and move mouse to draw lines.\n\tif ( (wParam & MK_LBUTTON) && (GetCapture() == this) )\n\t{\n\t\tDrawLine(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));\n\t\tStorePoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), true);\n\t}\n}\n\nLRESULT CView::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n\tswitch (uMsg)\n\t{\n\tcase WM_LBUTTONDOWN:\n\t\tOnLButtonDown(lParam);\n\t\tbreak;\n\n\tcase WM_MOUSEMOVE:\n\t\tOnMouseMove(wParam, lParam);\n        break;\n\n    case WM_LBUTTONUP:\n\t\tOnLButtonUp(lParam);\n\t\tbreak;\n\t}\n\n\t//Use the default message handling for remaining messages\n\treturn WndProcDefault(uMsg, wParam, lParam);\n}\n\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/View.h",
    "content": "//////////////////////////////////////////////////////\n// View.h\n//  Declaration of the CView class\n\n\n#ifndef VIEW_H\n#define VIEW_H\n\n\n#include \"WinCore.h\"\n#include <vector>\n\nusing std::vector;\n\n\nclass CView : public CWnd\n{\npublic:\n\tCView();\n\tvirtual ~CView();\n\nprotected:\n\tvirtual void OnDraw(CDC* pDC);\n\tvirtual void PreCreate(CREATESTRUCT &cs);\n\tvirtual void PreRegisterClass(WNDCLASS &wc);\n\tvirtual LRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\nprivate:\n\tstruct PlotPoint\n\t{\n\t\tint x;\n\t\tint y;\n\t\tbool PenDown;\n\t};\n\n\tvoid DrawLine(int x, int y);\n\tvoid OnLButtonDown(LPARAM lParam);\n\tvoid OnLButtonUp(LPARAM lParam);\n\tvoid OnMouseMove(WPARAM wParam, LPARAM lParam);\n\tvoid StorePoint(int x, int y, bool PenDown);\n\n\tCBrush m_Brush;\n\tvector<PlotPoint> m_points;\t// Points of lines to draw\n};\n\n\n#endif // CVIEW_H\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/main.cpp",
    "content": "///////////////////////////////////////\n// main.cpp\n\n// Add the Win32++\\include  directory to project's additional include directories\n// Add the Win32++\\include  directory to project's additional resource directories\n#include \"ScribbleApp.h\"\n\n\nint APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, int)\n{\n    // Start Win32++\n    CScribbleApp MyApp;\n\n\t// Run the application\n    return MyApp.Run();\n}\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/res/Win32++.manifest",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\">\n<assemblyIdentity\n    version=\"1.0.0.0\"\n    processorArchitecture=\"*\"\n    name=\"XP Beautifier\"\n    type=\"win32\"\n/>\n<description>Adds XP Theme style to any program</description>\n<dependency>\n    <dependentAssembly>\n        <assemblyIdentity\n            type=\"win32\"\n            name=\"Microsoft.Windows.Common-Controls\"\n            version=\"6.0.0.0\"\n            processorArchitecture=\"*\"\n            publicKeyToken=\"6595b64144ccf1df\"\n            language=\"*\"\n        />\n    </dependentAssembly>\n</dependency>\n</assembly>\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/resource.h",
    "content": "//{{NO_DEPENDENCIES}}\n// Microsoft Visual C++ generated include file.\n// Used by Resource.rc\n//\n\n// include the Resource IDs defined by Win32++\n#include \"default_resource.h\"\n\n//Resource IDs for menu items and ToolBar items\n#define IDM_FILE_NEW                    101\n#define IDM_FILE_OPEN                   102\n#define IDM_FILE_SAVE                   103\n#define IDM_FILE_SAVEAS                 104\n#define IDM_FILE_PRINT                  105\n#define IDM_FILE_CLOSE                  106\n#define IDM_FILE_EXIT                   107\n#define IDM_EDIT_UNDO                   110\n#define IDM_EDIT_REDO                   111\n#define IDM_EDIT_CUT                    112\n#define IDM_EDIT_COPY                   113\n#define IDM_EDIT_PASTE                  114\n#define IDM_EDIT_DELETE                 115\n#define IDM_HELP_ABOUT                  120\n\n//Resource IDs for menu items\n#define IDM_PEN_RED                     200\n#define IDM_PEN_BLUE                    201\n#define IDM_PEN_GREEN                   202\n#define IDM_PEN_BLACK                   203\n\n//Resource ID for the cursor\n#define IDC_CURSOR1                     210\n\n// Next default values for new objects\n// \n#ifdef APSTUDIO_INVOKED\n#ifndef APSTUDIO_READONLY_SYMBOLS\n#define _APS_NO_MFC                     1\n#define _APS_NEXT_RESOURCE_VALUE        129\n#define _APS_NEXT_COMMAND_VALUE         32771\n#define _APS_NEXT_CONTROL_VALUE         1000\n#define _APS_NEXT_SYMED_VALUE           130\n#endif\n#endif\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial6/targetver.h",
    "content": "///////////////////////////////////////////////////////////////////////\n// targetver.h is used to define the Windows API macros that target the \n// version of the Windows operating system you wish to support.\n\n\n// For Windows 95\n//#define WINVER          0x0400\n//#define _WIN32_WINDOWS  0x0400\n//#define _WIN32_IE       0x0300\n\n// For Windows 98\n#define WINVER          0x0410\n#define _WIN32_WINDOWS  0x0410\n#define _WIN32_IE       0x0401\n\n// For Windows NT4\n//#define WINVER          0x0400\n//#define _WIN32_WINNT    0x0400\n//#define _WIN32_IE       0x0200\n//#define NTDDI_VERSION   0x05000000\n\n// For Windows ME\n//#define WINVER          0x0500\n//#define _WIN32_WINNT    0x0500\n//#define _WIN32_IE       0x0500\n\n// For Windows 2000\n//#define WINVER          0x0500\n//#define _WIN32_WINNT    0x0500\n//#define _WIN32_IE       0x0500\n//#define NTDDI_VERSION   0x05000000\n\n// For Windows XP\n//#define WINVER          0x0501\n//#define _WIN32_WINNT    0x0501\n//#define _WIN32_IE       0x0501\n//#define NTDDI_VERSION   0x05010000\n\n// For Windows Vista\n//#define WINVER          0x0600\n//#define _WIN32_WINNT    0x0600\n//#define _WIN32_IE       0x0600\n//#define NTDDI_VERSION   0x06000000\n\n// For Windows 7\n//#define WINVER          0x0601\n//#define _WIN32_WINNT    0x0601\n//#define _WIN32_IE       0x0601\n//#define NTDDI_VERSION   0x06010000\n\n\n// Users of Visual Studio 10 can do this instead\n// #include \"SDKDDKver.h\"\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/Mainfrm.cpp",
    "content": "////////////////////////////////////////////////////\n// Mainfrm.cpp  - definitions for the CMainFrame class\n\n#include \"mainfrm.h\"\n#include \"resource.h\"\n\n\nCMainFrame::CMainFrame()\n{\n\t//Set m_View as the view window of the frame\n\tSetView(m_View);\n}\n\nCMainFrame::~CMainFrame()\n{\n}\n\nBOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)\n{\n\t// Process the messages from the Menu and Tool Bar\n\tswitch (LOWORD(wParam))\n\t{\n\tcase IDM_FILE_EXIT:\n\t\t// End the application\n\t\t::PostMessage(m_hWnd, WM_CLOSE, 0, 0);\n\t\treturn TRUE;\n\tcase IDM_HELP_ABOUT:\n\t\t// Display the help dialog\n\t\tOnHelp();\n\t\treturn TRUE;\n\tcase IDM_FILE_NEW:\n\t\t::MessageBox(NULL, _T(\"File New  ... Implemented later\"), _T(\"Menu\"), MB_OK);\n\t\treturn TRUE;\n\tcase IDM_FILE_OPEN:\n\t\t::MessageBox(NULL, _T(\"File Open  ... Implemented later\"), _T(\"Menu\"), MB_OK);\n\t\treturn TRUE;\n\tcase IDM_FILE_SAVE:\n\t\t::MessageBox(NULL, _T(\"File Save  ... Implemented later\"), _T(\"Menu\"), MB_OK);\n\t\treturn TRUE;\n\tcase IDM_FILE_SAVEAS:\n\t\t::MessageBox(NULL, _T(\"File SaveAs  ... Implemented later\"), _T(\"Menu\"), MB_OK);\n\t\treturn TRUE;\n\tcase IDM_FILE_PRINT:\n\t\t::MessageBox(NULL, _T(\"File Print  ... Implemented later\"), _T(\"Menu\"), MB_OK);\n\t\treturn TRUE;\n\tcase IDM_PEN_RED:\n\t\tm_View.SetPen(RGB(255,0,0));\n\t\treturn TRUE;\n\tcase IDM_PEN_BLUE:\n\t\tm_View.SetPen(RGB(0,0,255));\n\t\treturn TRUE;\n\tcase IDM_PEN_GREEN:\n\t\tm_View.SetPen(RGB(0,196,0));\n\t\treturn TRUE;\n\tcase IDM_PEN_BLACK:\n\t\tm_View.SetPen(RGB(0,0,0));\n\t\treturn TRUE;\n\t}\n\n\treturn FALSE;\n}\n\nvoid CMainFrame::SetupToolBar()\n{\n\t// Set the Resource IDs for the toolbar buttons\n\tAddToolBarButton( IDM_FILE_NEW   );\n\tAddToolBarButton( IDM_FILE_OPEN  );\n\tAddToolBarButton( IDM_FILE_SAVE  );\n\t\n\tAddToolBarButton( 0 );\t\t\t\t// Separator\n\tAddToolBarButton( IDM_EDIT_CUT );\n\tAddToolBarButton( IDM_EDIT_COPY );\n\tAddToolBarButton( IDM_EDIT_PASTE );\n\t\n\tAddToolBarButton( 0 );\t\t\t\t// Separator\n\tAddToolBarButton( IDM_FILE_PRINT );\n\t\n\tAddToolBarButton( 0 );\t\t\t\t// Separator\n\tAddToolBarButton ( IDM_PEN_RED    );\t\n\tAddToolBarButton ( IDM_PEN_BLUE   );\n\tAddToolBarButton ( IDM_PEN_GREEN  );\n\tAddToolBarButton ( IDM_PEN_BLACK  );\n\tAddToolBarButton ( IDM_HELP_ABOUT );\n}\n\nLRESULT CMainFrame::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n//\tswitch (uMsg)\n//\t{\n\n//\t} // switch (uMsg)\n\n\treturn WndProcDefault(uMsg, wParam, lParam);\n} // LRESULT CMainFrame::WndProc(...)\n\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/Mainfrm.h",
    "content": "///////////////////////////////////////////////////////\n// Mainfrm.h\n//  Declaration of the CMainFrame class\n\n#ifndef MAINFRM_H\n#define MAINFRM_H\n\n#include \"frame.h\"\n#include \"View.h\"\n\n\nclass CMainFrame : public CFrame\n{\npublic:\n\tCMainFrame(void);\n\tvirtual ~CMainFrame();\n\nprotected:\n\tvirtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);\n\tvirtual void SetupToolBar();\n\tvirtual LRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\nprivate:\n\tenum Pens\n\t{\n\t\tRED, BLUE, GREEN, BLACK\n\t};\n\t\n\tCView m_View;\n};\n\n#endif //MAINFRM_H\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/Resource.rc",
    "content": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 2 resource.\n//\n#define APSTUDIO_HIDDEN_SYMBOLS\n#include \"windows.h\"\n#undef APSTUDIO_HIDDEN_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n#undef APSTUDIO_READONLY_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n// English (United States) resources\n\n#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\nLANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// RT_MANIFEST\n//\n\n1                       RT_MANIFEST             \"res/Win32++.manifest\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Menu\n//\n\nIDW_MAIN MENU\nBEGIN\n    POPUP \"&File\"\n    BEGIN\n        MENUITEM \"New...\",                      IDM_FILE_NEW\n        MENUITEM \"&Open...\",                    IDM_FILE_OPEN\n        MENUITEM \"&Save\",                       IDM_FILE_SAVE\n        MENUITEM \"Save &As...\",                 IDM_FILE_SAVEAS\n        MENUITEM SEPARATOR\n        MENUITEM \"&Print\",                      IDM_FILE_PRINT\n        MENUITEM SEPARATOR\n        MENUITEM \"E&xit\",                       IDM_FILE_EXIT\n    END\n    POPUP \"&View\"\n    BEGIN\n        MENUITEM \"&Tool Bar\",                   IDW_VIEW_TOOLBAR, CHECKED\n        MENUITEM \"&Status Bar\",                 IDW_VIEW_STATUSBAR, CHECKED\n    END\n    POPUP \"&Help\"\n    BEGIN\n        MENUITEM \"&About\",                      IDM_HELP_ABOUT\n    END\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Icon\n//\n\n// Icon with lowest ID value placed first to ensure application icon\n// remains consistent on all systems.\nIDW_MAIN                ICON                    \"res/pen.ico\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Bitmap\n//\n\nIDW_MAIN                BITMAP                  \"res/toolbar.bmp\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Dialog\n//\n\nIDW_ABOUT DIALOGEX 0, 0, 186, 90\nSTYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE |\n    WS_CAPTION | WS_SYSMENU\nCAPTION \"About\"\nFONT 8, \"MS Shell Dlg\", 400, 0\nBEGIN\n    DEFPUSHBUTTON   \"OK\",IDOK,68,49,50,14\n    CTEXT           \"Scribble Application\",IDC_STATIC,60,22,64,11\n    ICON            IDW_MAIN,0,4,4,20,20\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Accelerator\n//\n\nIDW_MAIN ACCELERATORS\nBEGIN\n    \"C\",            IDM_EDIT_COPY,          VIRTKEY, CONTROL, NOINVERT\n    VK_INSERT,      IDM_EDIT_COPY,          VIRTKEY, CONTROL, NOINVERT\n    VK_DELETE,      IDM_EDIT_CUT,           VIRTKEY, SHIFT, NOINVERT\n    \"X\",            IDM_EDIT_CUT,           VIRTKEY, CONTROL, NOINVERT\n    \"V\",            IDM_EDIT_PASTE,         VIRTKEY, CONTROL, NOINVERT\n    VK_INSERT,      IDM_EDIT_PASTE,         VIRTKEY, SHIFT, NOINVERT\n    VK_BACK,        IDM_EDIT_UNDO,          VIRTKEY, ALT, NOINVERT\n    \"Z\",            IDM_EDIT_UNDO,          VIRTKEY, CONTROL, NOINVERT\n    \"N\",            IDM_FILE_NEW,           VIRTKEY, CONTROL, NOINVERT\n    \"O\",            IDM_FILE_OPEN,          VIRTKEY, CONTROL, NOINVERT\n    \"P\",            IDM_FILE_PRINT,         VIRTKEY, CONTROL, NOINVERT\n    \"S\",            IDM_FILE_SAVE,          VIRTKEY, CONTROL, NOINVERT\n    VK_DELETE,      IDM_EDIT_DELETE,        VIRTKEY, NOINVERT\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Cursor\n//\n\nIDC_CURSOR1             CURSOR                  \"res/Cursor.cur\"\n\n\n#ifdef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// TEXTINCLUDE\n//\n\n1 TEXTINCLUDE \nBEGIN\n    \"resource.h\\0\"\nEND\n\n2 TEXTINCLUDE \nBEGIN\n    \"#define APSTUDIO_HIDDEN_SYMBOLS\\r\\n\"\n    \"#include \"\"windows.h\"\"\\r\\n\"\n    \"#undef APSTUDIO_HIDDEN_SYMBOLS\\r\\n\"\n    \"\\0\"\nEND\n\n3 TEXTINCLUDE \nBEGIN\n    \"\\r\\n\"\n    \"\\0\"\nEND\n\n#endif    // APSTUDIO_INVOKED\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// String Table\n//\n\nSTRINGTABLE\nBEGIN\n    IDW_MAIN                \"Scribble Application\"\n    IDW_VIEW_TOOLBAR        \"Show or hide the tool bar\"\n    IDW_VIEW_STATUSBAR      \"Show or hide the status bar\"\nEND\n\nSTRINGTABLE\nBEGIN\n    IDM_FILE_NEW            \"Create a New Document\"\n    IDM_FILE_OPEN           \"Open Existing Document\"\n    IDM_FILE_SAVE           \"Save the Document\"\n    IDM_FILE_SAVEAS         \"Save the Document with a new name\"\n    IDM_FILE_PRINT          \"Print the Document\"\n    IDM_FILE_EXIT           \"End the Program\"\n    IDM_EDIT_UNDO           \"Undo the last action\"\n    IDM_EDIT_REDO           \"Redo the previously undone action\"\nEND\n\nSTRINGTABLE\nBEGIN\n    IDM_EDIT_CUT            \"Cut the Selected Contents to the Clipboard\"\n    IDM_EDIT_COPY           \"Copy the Selected Contents to the Clipboard\"\n    IDM_EDIT_PASTE          \"Paste the Clipboard Contents to the Document\"\n    IDM_EDIT_DELETE         \"Erase the selected Contents\"\n    IDM_HELP_ABOUT          \"Display Information about this program\"\nEND\n\nSTRINGTABLE\nBEGIN\n    IDM_PEN_RED             \"Red Pen\"\n    IDM_PEN_BLUE            \"Blue Pen\"\n    IDM_PEN_GREEN           \"Green Pen\"\n    IDM_PEN_BLACK           \"Black Pen\"\nEND\n\nSTRINGTABLE\nBEGIN\n    SC_CLOSE                \"Close the Window\"\n    SC_MAXIMIZE             \"Maximize the Window\"\n    SC_MINIMIZE             \"Minimize the WIndow\"\n    SC_MOVE                 \"Move the Window\"\n    SC_NEXTWINDOW           \"Select Next Window\"\n    SC_PREVWINDOW           \"Select Previous Window\"\n    SC_RESTORE              \"Restore the Window\"\n    SC_SIZE                 \"Resize the Window\"\nEND\n\n#endif    // English (U.S.) resources\n/////////////////////////////////////////////////////////////////////////////\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/ScribbleApp.cpp",
    "content": "//////////////////////////////////////\n// ScribbleApp.h\n\n#include \"ScribbleApp.h\"\n\nCScribbleApp::CScribbleApp()\n{\n}\n\nBOOL CScribbleApp::InitInstance()\n{\n    //Create the Window\n    m_Frame.Create();\n\n\treturn TRUE;\n}\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/ScribbleApp.h",
    "content": "///////////////////////////////////\n// ScribbleApp.h\n\n#ifndef SCRIBBLEAPP_H\n#define SCRIBBLEAPP_H\n\n#include \"targetver.h\"\n#include \"Wincore.h\"\n#include \"Mainfrm.h\"\n\n\nclass CScribbleApp : public CWinApp\n{\npublic:\n    CScribbleApp();\n    virtual ~CScribbleApp() {}\n\tvirtual BOOL InitInstance();\n\nprivate:\n    CMainFrame m_Frame;\n};\n\n#endif //SCRIBBLEAPP_H\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/Tutorial7.bdsproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<BorlandProject>\n\t<PersonalityInfo>\n\t\t<Option>\n\t\t\t<Option Name=\"Personality\">CPlusPlusBuilder.Personality</Option>\n\t\t\t<Option Name=\"ProjectType\">CppGuiApplication</Option>\n\t\t\t<Option Name=\"Version\">1.0</Option>\n\t\t\t<Option Name=\"GUID\">{D89B38BC-DF6B-4DE6-B007-C3EB16A9D851}</Option>\n\t\t</Option>\n\t</PersonalityInfo>\n\t<CPlusPlusBuilder.Personality>\n\t\t<Source>\n\t\t\t<Source Name=\"MainSource\">Tutorial7.bpf</Source>\n\t\t</Source>\n\t\t<BCBPROJECT>\n      <project version=\"10.0\">\n        <property category=\"build.config\" name=\"active\" value=\"0\"/>\n        <property category=\"build.config\" name=\"count\" value=\"1\"/>\n        <property category=\"build.config\" name=\"excludedefaultforzero\" value=\"0\"/>\n        <property category=\"build.config.0\" name=\"builddir\" value=\"Debug\"/>\n        <property category=\"build.config.0\" name=\"key\" value=\"Debug_Build\"/>\n        <property category=\"build.config.0\" name=\"name\" value=\"Debug Build\"/>\n        <property category=\"build.config.0\" name=\"settings.win32b\" value=\"default\"/>\n        <property category=\"build.config.0\" name=\"type\" value=\"Toolset\"/>\n        <property category=\"build.config.0\" name=\"win32.win32b.builddir\" value=\"Debug_Build\"/>\n        <property category=\"build.config.1\" name=\"key\" value=\"Release_Build\"/>\n        <property category=\"build.config.1\" name=\"name\" value=\"Release Build\"/>\n        <property category=\"build.config.1\" name=\"settings.win32b\" value=\"default\"/>\n        <property category=\"build.config.1\" name=\"type\" value=\"Toolset\"/>\n        <property category=\"build.config.1\" name=\"win32.win32b.builddir\" value=\"Release_Build\"/>\n        <property category=\"build.node\" name=\"name\" value=\"Tutorial7.exe\"/>\n        <property category=\"build.node\" name=\"packages\" value=\"vclx;vcl;rtl;dbrtl;vcldb;adortl;dbxcds;dbexpress;xmlrtl;vclie;inet;inetdbbde;inetdbxpress;soaprtl;dsnap;bdertl;vcldbx\"/>\n        <property category=\"build.node\" name=\"sparelibs\" value=\"rtl.lib\"/>\n        <property category=\"build.node\" name=\"use_packages\" value=\"1\"/>\n        <property category=\"build.platform\" name=\"active\" value=\"win32\"/>\n        <property category=\"build.platform\" name=\"win32.Debug_Build.toolset\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.Release_Build.toolset\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.default\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.enabled\" value=\"1\"/>\n        <property category=\"build.platform\" name=\"win32.win32b.enabled\" value=\"1\"/>\n        <property category=\"win32.*.win32b.dcc32\" name=\"param.filenames.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.listfile.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.objfile.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.xreffile.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.arg.1\" value=\"_DEBUG\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.Od.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.k.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.r.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.v.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.vi.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.y.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.$D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.$O.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.arg.1\" value=\"DEBUG\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.V.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.arg.1\" value=\"$(BDS)\\lib\\debug\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.z.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.zd.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.zi.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.arg.1\" value=\"NDEBUG\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.O2.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.k.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.r.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.vi.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.$D.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.$O.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.V.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.arg.1\" value=\"$(BDS)\\lib\\release\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.z.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zd.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zi.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zn.enabled\" value=\"1\"/>\n        <optionset name=\"all_configurations\">\n          <property category=\"node\" name=\"displayname\" value=\"All Configurations\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.arg.1\" value=\"$(BDS)\\lib\\vcl100.csm\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Hc.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.He.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Hs.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.2\" value=\"$(BDS)\\include\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.3\" value=\"$(BDS)\\include\\dinkumware\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.4\" value=\"$(BDS)\\include\\vcl\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Ve.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.b.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.1\" value=\"_RTLDLL\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.2\" value=\"USEPACKAGES\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.3\" value=\"NO_STRICT\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.4\" value=\"_NO_VCL\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tW.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWC.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWD.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWM.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.2\" value=\".\\\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.3\" value=\"$(BDS)\\lib\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.4\" value=\"$(BDS)\\lib\\obj\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"param.filenames.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Gi.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.2\" value=\"$(BDS)\\lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.3\" value=\"$(BDS)\\lib\\obj\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.4\" value=\"$(BDS)\\lib\\psdk\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpd.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpe.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpp.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.aa.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.ap.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.dynamicrtl.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.1\" value=\"import32.lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.2\" value=\"cw32mti.lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.1\" value=\"c0w32.obj\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.2\" value=\"$(PACKAGES)\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.merge\" value=\"1\"/>\n        </optionset>\n      </project>\n      <FILELIST>\n        <FILE FILENAME=\"main.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"main\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"Mainfrm.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"Mainfrm\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"ScribbleApp.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"ScribbleApp\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"View.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"View\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"Resource.rc\" CONTAINERID=\"RCCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"Resource.rc\" FORMNAME=\"Resource.res\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"Mainfrm.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"resource.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"ScribbleApp.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"View.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\Dialog.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\Frame.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\GDI.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\WinCore.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n      </FILELIST>\n      <IDEOPTIONS>\n        <VersionInfo>\n          <VersionInfo Name=\"IncludeVerInfo\">False</VersionInfo>\n          <VersionInfo Name=\"AutoIncBuild\">False</VersionInfo>\n          <VersionInfo Name=\"MajorVer\">1</VersionInfo>\n          <VersionInfo Name=\"MinorVer\">0</VersionInfo>\n          <VersionInfo Name=\"Release\">0</VersionInfo>\n          <VersionInfo Name=\"Build\">0</VersionInfo>\n          <VersionInfo Name=\"Debug\">False</VersionInfo>\n          <VersionInfo Name=\"PreRelease\">False</VersionInfo>\n          <VersionInfo Name=\"Special\">False</VersionInfo>\n          <VersionInfo Name=\"Private\">False</VersionInfo>\n          <VersionInfo Name=\"DLL\">False</VersionInfo>\n          <VersionInfo Name=\"Locale\">3081</VersionInfo>\n          <VersionInfo Name=\"CodePage\">1252</VersionInfo>\n        </VersionInfo>\n        <VersionInfoKeys>\n          <VersionInfoKeys Name=\"CompanyName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"FileDescription\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"FileVersion\">1.0.0.0</VersionInfoKeys>\n          <VersionInfoKeys Name=\"InternalName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"LegalCopyright\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"LegalTrademarks\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"OriginalFilename\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"ProductName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"ProductVersion\">1.0.0.0</VersionInfoKeys>\n          <VersionInfoKeys Name=\"Comments\"></VersionInfoKeys>\n        </VersionInfoKeys>\n        <Debugging>\n          <Debugging Name=\"DebugSourceDirs\"></Debugging>\n        </Debugging>\n        <Parameters>\n          <Parameters Name=\"RunParams\"></Parameters>\n          <Parameters Name=\"Launcher\"></Parameters>\n          <Parameters Name=\"UseLauncher\">False</Parameters>\n          <Parameters Name=\"DebugCWD\"></Parameters>\n          <Parameters Name=\"HostApplication\"></Parameters>\n          <Parameters Name=\"RemoteHost\"></Parameters>\n          <Parameters Name=\"RemotePath\"></Parameters>\n          <Parameters Name=\"RemoteParams\"></Parameters>\n          <Parameters Name=\"RemoteLauncher\"></Parameters>\n          <Parameters Name=\"UseRemoteLauncher\">False</Parameters>\n          <Parameters Name=\"RemoteCWD\"></Parameters>\n          <Parameters Name=\"RemoteDebug\">False</Parameters>\n          <Parameters Name=\"Debug Symbols Search Path\"></Parameters>\n          <Parameters Name=\"LoadAllSymbols\">True</Parameters>\n          <Parameters Name=\"LoadUnspecifiedSymbols\">False</Parameters>\n        </Parameters>\n        <Linker>\n          <Linker Name=\"LibPrefix\"></Linker>\n          <Linker Name=\"LibSuffix\"></Linker>\n          <Linker Name=\"LibVersion\"></Linker>\n        </Linker>\n      </IDEOPTIONS>\n    </BCBPROJECT>\n\t\t<buildevents/>\n\t</CPlusPlusBuilder.Personality>\n</BorlandProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/Tutorial7.bpf",
    "content": "This file is used by the project manager only and should be treated like the project file\n\nTo add a file to this project use the Project menu 'Add to Project'\n\nWinMain"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/Tutorial7.dev",
    "content": "[Project]\nFileName=Tutorial7.dev\nName=Tutorial7\nUnitCount=14\nType=0\nVer=1\nObjFiles=\nIncludes=..\\..\\include\nLibs=\nPrivateResource=Tutorial7_private.rc\nResourceIncludes=..\\..\\include\nMakeIncludes=\nCompiler=\nCppCompiler=-D _WIN32_IE=0x0400_@@_\nLinker=-lComctl32_@@__@@_\nIsCpp=1\nIcon=\nExeOutput=.\\Dev-C++\nObjectOutput=.\\Dev-C++\nOverrideOutput=0\nOverrideOutputName=Tutorial7.exe\nHostApplication=\nFolders=Header,Resource,Source,Win32++\nCommandLine=\nUseCustomMakefile=0\nCustomMakefile=\nIncludeVersionInfo=0\nSupportXPThemes=0\nCompilerSet=0\nCompilerSettings=0000000000000000000000\n\n[Unit1]\nFileName=main.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit2]\nFileName=Mainfrm.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit3]\nFileName=Mainfrm.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit4]\nFileName=resource.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit5]\nFileName=Resource.rc\nFolder=Resource\nCompile=1\nLink=0\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit6]\nFileName=ScribbleApp.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit7]\nFileName=ScribbleApp.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit8]\nFileName=View.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit9]\nFileName=View.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit10]\nFileName=..\\..\\include\\dialog.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit11]\nFileName=..\\..\\include\\frame.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit12]\nFileName=..\\..\\include\\gdi.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit13]\nFileName=..\\..\\include\\wincore.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit14]\nFileName=..\\..\\include\\winutils.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[VersionInfo]\nMajor=0\nMinor=1\nRelease=1\nBuild=1\nLanguageID=1033\nCharsetID=1252\nCompanyName=\nFileVersion=0.1\nFileDescription=Developed using the Dev-C++ IDE\nInternalName=\nLegalCopyright=\nLegalTrademarks=\nOriginalFilename=Tutorial7.exe\nProductName=Tutorial7\nProductVersion=0.1\nAutoIncBuildNr=0\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/Tutorial7.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"Tutorial7\" - Package Owner=<4>\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\n# ** DO NOT EDIT **\n\n# TARGTYPE \"Win32 (x86) Application\" 0x0101\n\nCFG=Tutorial7 - Win32 Debug\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\n!MESSAGE use the Export Makefile command and run\n!MESSAGE \n!MESSAGE NMAKE /f \"Tutorial7.mak\".\n!MESSAGE \n!MESSAGE You can specify a configuration when running NMAKE\n!MESSAGE by defining the macro CFG on the command line. For example:\n!MESSAGE \n!MESSAGE NMAKE /f \"Tutorial7.mak\" CFG=\"Tutorial7 - Win32 Debug\"\n!MESSAGE \n!MESSAGE Possible choices for configuration are:\n!MESSAGE \n!MESSAGE \"Tutorial7 - Win32 Release\" (based on \"Win32 (x86) Application\")\n!MESSAGE \"Tutorial7 - Win32 Debug\" (based on \"Win32 (x86) Application\")\n!MESSAGE \n\n# Begin Project\n# PROP AllowPerConfigDependencies 0\n# PROP Scc_ProjName \"\"\n# PROP Scc_LocalPath \"\"\nCPP=cl.exe\nMTL=midl.exe\nRSC=rc.exe\n\n!IF  \"$(CFG)\" == \"Tutorial7 - Win32 Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"Release\"\n# PROP BASE Intermediate_Dir \"Release\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"Release\"\n# PROP Intermediate_Dir \"Release\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\n# ADD CPP /nologo /W3 /GR /GX /O2 /I \"..\\..\\include\" /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\n# ADD BASE RSC /l 0xc09 /d \"NDEBUG\"\n# ADD RSC /l 0xc09 /i \"..\\..\\include\" /d \"NDEBUG\" /d \"..\\..\\Win32++\\include\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib /nologo /subsystem:windows /machine:I386\n\n!ELSEIF  \"$(CFG)\" == \"Tutorial7 - Win32 Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"Debug\"\n# PROP BASE Intermediate_Dir \"Debug\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"Debug\"\n# PROP Intermediate_Dir \"Debug\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\n# ADD CPP /nologo /W3 /Gm /GR /GX /ZI /Od /I \"..\\..\\include\" /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\n# ADD BASE RSC /l 0xc09 /d \"_DEBUG\"\n# ADD RSC /l 0xc09 /i \"..\\..\\Win32++\\include\" /i \"..\\..\\include\" /d \"_DEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\n\n!ENDIF \n\n# Begin Target\n\n# Name \"Tutorial7 - Win32 Release\"\n# Name \"Tutorial7 - Win32 Debug\"\n# Begin Group \"Source Files\"\n\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n# Begin Source File\n\nSOURCE=.\\main.cpp\n# End Source File\n# Begin Source File\n\nSOURCE=.\\Mainfrm.cpp\n# End Source File\n# Begin Source File\n\nSOURCE=.\\ScribbleApp.cpp\n# End Source File\n# Begin Source File\n\nSOURCE=.\\View.cpp\n# End Source File\n# End Group\n# Begin Group \"Header Files\"\n\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\n# Begin Source File\n\nSOURCE=.\\Mainfrm.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\resource.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\ScribbleApp.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\View.h\n# End Source File\n# End Group\n# Begin Group \"Resource Files\"\n\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n# Begin Source File\n\nSOURCE=.\\Resource.rc\n# End Source File\n# End Group\n# Begin Group \"Win32++\"\n\n# PROP Default_Filter \"\"\n# Begin Source File\n\nSOURCE=..\\..\\include\\dialog.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\include\\frame.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\include\\gdi.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\include\\wincore.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\include\\winutils.h\n# End Source File\n# End Group\n# End Target\n# End Project\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/Tutorial7.dsw",
    "content": "Microsoft Developer Studio Workspace File, Format Version 6.00\n# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\n\n###############################################################################\n\nProject: \"Tutorial7\"=\".\\Tutorial7.dsp\" - Package Owner=<4>\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<4>\n{{{\n}}}\n\n###############################################################################\n\nGlobal:\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<3>\n{{{\n}}}\n\n###############################################################################\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/Tutorial7_2003.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 8.00\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial7\", \"Tutorial7_2003.vcproj\", \"{8884E9A0-7FB6-421B-922D-BB55A5342AB4}\"\n\tProjectSection(ProjectDependencies) = postProject\n\tEndProjectSection\nEndProject\nGlobal\n\tGlobalSection(SolutionConfiguration) = preSolution\n\t\tDebug = Debug\n\t\tRelease = Release\n\tEndGlobalSection\n\tGlobalSection(ProjectConfiguration) = postSolution\n\t\t{8884E9A0-7FB6-421B-922D-BB55A5342AB4}.Debug.ActiveCfg = Debug|Win32\n\t\t{8884E9A0-7FB6-421B-922D-BB55A5342AB4}.Debug.Build.0 = Debug|Win32\n\t\t{8884E9A0-7FB6-421B-922D-BB55A5342AB4}.Release.ActiveCfg = Release|Win32\n\t\t{8884E9A0-7FB6-421B-922D-BB55A5342AB4}.Release.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityAddIns) = postSolution\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/Tutorial7_2003.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"7.10\"\n\tName=\"Tutorial7\"\n\tSccProjectName=\"\"\n\tSccLocalPath=\"\">\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"/>\n\t</Platforms>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"FALSE\"\n\t\t\tCharacterSet=\"0\">\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"TRUE\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"TRUE\"\n\t\t\t\tRuntimeTypeInfo=\"TRUE\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial7.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tDebugInformationFormat=\"0\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"comctl32.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial7.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial7.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"TRUE\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial7.tlb\"\n\t\t\t\tHeaderFileName=\"\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedWrapperGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAuxiliaryManagedWrapperGeneratorTool\"/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"FALSE\"\n\t\t\tCharacterSet=\"0\">\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tRuntimeTypeInfo=\"TRUE\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial7.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"4\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tDebugInformationFormat=\"4\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"comctl32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial7.exe\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial7.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"TRUE\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial7.tlb\"\n\t\t\t\tHeaderFileName=\"\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedWrapperGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAuxiliaryManagedWrapperGeneratorTool\"/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"resource.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\resrc1.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.h\">\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"Resource.rc\">\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\tFilter=\"\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\dialog.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\frame.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\gdi.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\winutils.h\">\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/Tutorial7_2005.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 9.00\n# Visual C++ Express 2005\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial7\", \"Tutorial7_2005.vcproj\", \"{BDDE1786-F908-4CAB-84BC-AF9325A16D10}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{BDDE1786-F908-4CAB-84BC-AF9325A16D10}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{BDDE1786-F908-4CAB-84BC-AF9325A16D10}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{BDDE1786-F908-4CAB-84BC-AF9325A16D10}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{BDDE1786-F908-4CAB-84BC-AF9325A16D10}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/Tutorial7_2005.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"8.00\"\n\tName=\"Tutorial7\"\n\tProjectGUID=\"{BDDE1786-F908-4CAB-84BC-AF9325A16D10}\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial7.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tRuntimeTypeInfo=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial7.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib comctl32.lib Comdlg32.lib Advapi32.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial7.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial7.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial7.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial7.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tRuntimeTypeInfo=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial7.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib comctl32.lib Comdlg32.lib Advapi32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial7.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial7.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial7.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"resource.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Resource.rc\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\dialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\frame.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\gdi.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\winutils.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/Tutorial7_2008.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 10.00\n# Visual C++ Express 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial7\", \"Tutorial7_2008.vcproj\", \"{BDDE1786-F908-4CAB-84BC-AF9325A16D10}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{BDDE1786-F908-4CAB-84BC-AF9325A16D10}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{BDDE1786-F908-4CAB-84BC-AF9325A16D10}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{BDDE1786-F908-4CAB-84BC-AF9325A16D10}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{BDDE1786-F908-4CAB-84BC-AF9325A16D10}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/Tutorial7_2008.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"Tutorial7\"\n\tProjectGUID=\"{BDDE1786-F908-4CAB-84BC-AF9325A16D10}\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial7.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tRuntimeTypeInfo=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial7.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib comctl32.lib shlwapi.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial7.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial7.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial7.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial7.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tRuntimeTypeInfo=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial7.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib comctl32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial7.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial7.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial7.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"resource.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Resource.rc\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\dialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\frame.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\gdi.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\winutils.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/Tutorial7_2010.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 11.00\n# Visual C++ Express 2010\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial7_2010\", \"Tutorial7_2010.vcxproj\", \"{19CEEA56-2973-4E6A-818E-17DB81197AB5}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/Tutorial7_2010.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"main.cpp\" />\n    <ClCompile Include=\"Mainfrm.cpp\" />\n    <ClCompile Include=\"ScribbleApp.cpp\" />\n    <ClCompile Include=\"View.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\..\\include\\dialog.h\" />\n    <ClInclude Include=\"..\\..\\include\\frame.h\" />\n    <ClInclude Include=\"..\\..\\include\\gdi.h\" />\n    <ClInclude Include=\"..\\..\\include\\wincore.h\" />\n    <ClInclude Include=\"..\\..\\include\\winutils.h\" />\n    <ClInclude Include=\"Mainfrm.h\" />\n    <ClInclude Include=\"resource.h\" />\n    <ClInclude Include=\"ScribbleApp.h\" />\n    <ClInclude Include=\"View.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"Resource.rc\" />\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{19CEEA56-2973-4E6A-818E-17DB81197AB5}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>Tutorial7</RootNamespace>\n    <ProjectName>Tutorial7</ProjectName>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <EmbedManifest>false</EmbedManifest>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <EmbedManifest>false</EmbedManifest>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <MinimalRebuild>true</MinimalRebuild>\n      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\n      <Optimization>Disabled</Optimization>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <GenerateManifest>false</GenerateManifest>\n      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n    <ResourceCompile>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ResourceCompile>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <Optimization>MaxSpeed</Optimization>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateManifest>false</GenerateManifest>\n      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n    <ResourceCompile>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ResourceCompile>\n  </ItemDefinitionGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/Tutorial7_2010.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"Header Files\">\n      <UniqueIdentifier>{716bb943-2b72-446d-830e-891678a5a564}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Resource Files\">\n      <UniqueIdentifier>{ae1974a9-7712-4339-a82c-f4f53ef706e5}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Source Files\">\n      <UniqueIdentifier>{0d05cde0-b622-48c3-b773-41e13b9794be}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Win32++\">\n      <UniqueIdentifier>{74aca91d-53f6-4436-abde-3e19054bb381}</UniqueIdentifier>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"main.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Mainfrm.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"ScribbleApp.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"View.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"Mainfrm.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"resource.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"ScribbleApp.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"View.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\dialog.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\frame.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\gdi.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\wincore.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\winutils.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"Resource.rc\">\n      <Filter>Resource Files</Filter>\n    </ResourceCompile>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/View.cpp",
    "content": "//////////////////////////////////////////////\n// View.cpp\n//  Definitions for the CView class\n\n#include \"view.h\"\n#include \"resource.h\"\n\n\nCView::CView() : m_PenColor(RGB(0,0,0))\n{\n\tm_Brush.CreateSolidBrush(RGB(255,255,230));\n}\n\nCView::~CView()\n{\n}\n\nvoid CView::DrawLine(int x, int y)\n{\n\tCClientDC dcClient(this);\n\tdcClient.CreatePen(PS_SOLID, 1, m_points.back().color);\n\tdcClient.MoveTo(m_points.back().x, m_points.back().y);\n\tdcClient.LineTo(x, y);\n}\n\nvoid CView::OnDraw(CDC* pDC)\n{\n\tif (m_points.size() > 0)\n\t{\n\t\tbool bDraw = false;  //Start with the pen up\n\t\tfor (unsigned int i = 0 ; i < m_points.size(); i++)\n\t\t{\n\t\t\tpDC->CreatePen(PS_SOLID, 1, m_points[i].color);\n\t\t\tif (bDraw)\n\t\t\t\tpDC->LineTo(m_points[i].x, m_points[i].y);\n\t\t\telse\n\t\t\t\tpDC->MoveTo(m_points[i].x, m_points[i].y);\n\t\t\t\n\t\t\tbDraw = m_points[i].PenDown;\n\t\t}\n\t}\n}\n\nvoid CView::PreCreate(CREATESTRUCT &cs)\n{\n\t// Set the extra style to provide a sunken edge\n\tcs.dwExStyle = WS_EX_CLIENTEDGE;\n}\n\nvoid CView::PreRegisterClass(WNDCLASS &wc)\n{\n\t// Set the background brush and cursor\n\twc.hbrBackground = m_Brush;\n\twc.lpszClassName = _T(\"Scribble Window\");\n\twc.hCursor = ::LoadCursor(GetApp()->GetInstanceHandle(), MAKEINTRESOURCE(IDC_CURSOR1));\n}\n\nvoid CView::SetPen(COLORREF color)\n{\n\tm_PenColor = color;\n}\n\nvoid CView::StorePoint(int x, int y, bool PenDown)\n{\n\tPlotPoint P1;\n\tP1.x = x;\n\tP1.y = y;\n\tP1.PenDown = PenDown;\n\tP1.color = m_PenColor;\n\n\tm_points.push_back(P1); //Add the point to the vector\n}\n\nvoid CView::OnLButtonDown(LPARAM lParam)\n{\n \t// Capture mouse input.\n \tSetCapture();\n\n\tStorePoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), true);\n}\n\nvoid CView::OnLButtonUp(LPARAM lParam)\n{\n\t{\n\t\t//Release the capture on the mouse\n\t\tReleaseCapture();\n\n\t\tStorePoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), false);\n\t}\n}\n\nvoid CView::OnMouseMove(WPARAM wParam, LPARAM lParam)\n{\n\t// hold down the left mouse button and move mouse to draw lines.\n\tif ( (wParam & MK_LBUTTON) && (GetCapture() == this) )\n\t{\n\t\tDrawLine(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));\n\t\tStorePoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), true);\n\t}\n}\n\nLRESULT CView::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n\tswitch (uMsg)\n\t{\n\tcase WM_LBUTTONDOWN:\n\t\tOnLButtonDown(lParam);\n\t\tbreak;\n\n\tcase WM_MOUSEMOVE:\n\t\tOnMouseMove(wParam, lParam);\n        break;\n\n    case WM_LBUTTONUP:\n\t\tOnLButtonUp(lParam);\n\t\tbreak;\n\t}\n\n\t//Use the default message handling for remaining messages\n\treturn WndProcDefault(uMsg, wParam, lParam);\n}\n\n\n\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/View.h",
    "content": "//////////////////////////////////////////////////////\n// View.h\n//  Declaration of the CView class\n\n#ifndef VIEW_H\n#define VIEW_H\n\n\n#include \"WinCore.h\"\n#include <vector>\n\nusing std::vector;\n\n\nclass CView : public CWnd\n{\npublic:\n\tCView();\n\tvirtual ~CView();\n\tvirtual void SetPen(COLORREF  Color);\n\nprotected:\n\tvirtual void OnDraw(CDC* pDC);\n\tvirtual void PreCreate(CREATESTRUCT &cs);\n\tvirtual void PreRegisterClass(WNDCLASS &wc);\n\tvirtual LRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\nprivate:\n\tstruct PlotPoint\n\t{\n\t\tint x;\n\t\tint y;\n\t\tbool PenDown;\n\t\tCOLORREF color;\n\t};\n\n\tvoid DrawLine(int x, int y);\n\tvoid OnLButtonDown(LPARAM lParam);\n\tvoid OnLButtonUp(LPARAM lParam);\n\tvoid OnMouseMove(WPARAM wParam, LPARAM lParam);\n\tvoid StorePoint(int x, int y, bool PenDown);\n\n\tCBrush m_Brush;\n\tvector<PlotPoint> m_points;\t// Points of lines to draw\n\tCOLORREF m_PenColor;\n};\n\n\n#endif // CVIEW_H\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/main.cpp",
    "content": "///////////////////////////////////////\n// main.cpp\n\n// Add the Win32++\\include  directory to project's additional include directories\n// Add the Win32++\\include  directory to project's additional resource directories\n#include \"ScribbleApp.h\"\n\n\nint APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, int)\n{\n    // Start Win32++\n    CScribbleApp MyApp;\n\n\t// Run the application\n    return MyApp.Run();\n}\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/res/Win32++.manifest",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\">\n<assemblyIdentity\n    version=\"1.0.0.0\"\n    processorArchitecture=\"*\"\n    name=\"XP Beautifier\"\n    type=\"win32\"\n/>\n<description>Adds XP Theme style to any program</description>\n<dependency>\n    <dependentAssembly>\n        <assemblyIdentity\n            type=\"win32\"\n            name=\"Microsoft.Windows.Common-Controls\"\n            version=\"6.0.0.0\"\n            processorArchitecture=\"*\"\n            publicKeyToken=\"6595b64144ccf1df\"\n            language=\"*\"\n        />\n    </dependentAssembly>\n</dependency>\n</assembly>\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/resource.h",
    "content": "//{{NO_DEPENDENCIES}}\n// Microsoft Visual C++ generated include file.\n// Used by Resource.rc\n//\n\n// include the Resource IDs defined by Win32++\n#include \"default_resource.h\"\n\n//Resource IDs for menu items and ToolBar items\n#define IDM_FILE_NEW                    101\n#define IDM_FILE_OPEN                   102\n#define IDM_FILE_SAVE                   103\n#define IDM_FILE_SAVEAS                 104\n#define IDM_FILE_PRINT                  105\n#define IDM_FILE_CLOSE                  106\n#define IDM_FILE_EXIT                   107\n#define IDM_EDIT_UNDO                   110\n#define IDM_EDIT_REDO                   111\n#define IDM_EDIT_CUT                    112\n#define IDM_EDIT_COPY                   113\n#define IDM_EDIT_PASTE                  114\n#define IDM_EDIT_DELETE                 115\n#define IDM_HELP_ABOUT                  120\n\n#define IDM_PEN_RED                     200\n#define IDM_PEN_BLUE                    201\n#define IDM_PEN_GREEN                   202\n#define IDM_PEN_BLACK                   203\n\n//Resource ID for the cursor\n#define IDC_CURSOR1                     210\n\n// Next default values for new objects\n// \n#ifdef APSTUDIO_INVOKED\n#ifndef APSTUDIO_READONLY_SYMBOLS\n#define _APS_NO_MFC                     1\n#define _APS_NEXT_RESOURCE_VALUE        129\n#define _APS_NEXT_COMMAND_VALUE         32771\n#define _APS_NEXT_CONTROL_VALUE         1000\n#define _APS_NEXT_SYMED_VALUE           130\n#endif\n#endif\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial7/targetver.h",
    "content": "///////////////////////////////////////////////////////////////////////\n// targetver.h is used to define the Windows API macros that target the \n// version of the Windows operating system you wish to support.\n\n\n// For Windows 95\n//#define WINVER          0x0400\n//#define _WIN32_WINDOWS  0x0400\n//#define _WIN32_IE       0x0300\n\n// For Windows 98\n#define WINVER          0x0410\n#define _WIN32_WINDOWS  0x0410\n#define _WIN32_IE       0x0401\n\n// For Windows NT4\n//#define WINVER          0x0400\n//#define _WIN32_WINNT    0x0400\n//#define _WIN32_IE       0x0200\n//#define NTDDI_VERSION   0x05000000\n\n// For Windows ME\n//#define WINVER          0x0500\n//#define _WIN32_WINNT    0x0500\n//#define _WIN32_IE       0x0500\n\n// For Windows 2000\n//#define WINVER          0x0500\n//#define _WIN32_WINNT    0x0500\n//#define _WIN32_IE       0x0500\n//#define NTDDI_VERSION   0x05000000\n\n// For Windows XP\n//#define WINVER          0x0501\n//#define _WIN32_WINNT    0x0501\n//#define _WIN32_IE       0x0501\n//#define NTDDI_VERSION   0x05010000\n\n// For Windows Vista\n//#define WINVER          0x0600\n//#define _WIN32_WINNT    0x0600\n//#define _WIN32_IE       0x0600\n//#define NTDDI_VERSION   0x06000000\n\n// For Windows 7\n//#define WINVER          0x0601\n//#define _WIN32_WINNT    0x0601\n//#define _WIN32_IE       0x0601\n//#define NTDDI_VERSION   0x06010000\n\n\n// Users of Visual Studio 10 can do this instead\n// #include \"SDKDDKver.h\"\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/Mainfrm.cpp",
    "content": "////////////////////////////////////////////////////\n// Mainfrm.cpp  - definitions for the CMainFrame class\n\n#include \"mainfrm.h\"\n#include \"resource.h\"\n\n\nCMainFrame::CMainFrame()\n{\n\t// Set m_View as the view window of the frame\n\tSetView(m_View);\n}\n\nCMainFrame::~CMainFrame()\n{\n}\n\nBOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)\n{\n\t// Process the messages from the Menu and Tool Bar\n\tswitch (LOWORD(wParam))\n\t{\n\tcase IDM_FILE_NEW:\n\t\tm_View.ClearPoints();\n\t\tm_PathName = _T(\"\");\n\t\treturn TRUE;\n\tcase IDM_FILE_OPEN:\n\t\tOnFileOpen();\n\t\treturn TRUE;\n\tcase IDM_FILE_SAVE:\n\t\tOnFileSave();\n\t\treturn TRUE;\n\tcase IDM_FILE_SAVEAS:\n\t\tOnFileSaveAs();\n\t\treturn TRUE;\n\tcase IDM_FILE_PRINT:\n\t\t::MessageBox(NULL, _T(\"File Print Implemented Later\"), _T(\"Menu\"), MB_OK);\n\t\treturn TRUE;\n\tcase IDM_PEN_RED:\n\t\tm_View.SetPen(RGB(255,0,0));\n\t\treturn TRUE;\n\tcase IDM_PEN_BLUE:\n\t\tm_View.SetPen(RGB(0,0,255));\n\t\treturn TRUE;\n\tcase IDM_PEN_GREEN:\n\t\tm_View.SetPen(RGB(0,196,0));\n\t\treturn TRUE;\n\tcase IDM_PEN_BLACK:\n\t\tm_View.SetPen(RGB(0,0,0));\n\t\treturn TRUE;\n\tcase IDM_HELP_ABOUT:\n\t\tOnHelp();\n\t\treturn TRUE;\n\tcase IDM_FILE_EXIT:\n\t\t::PostMessage(m_hWnd, WM_CLOSE, 0, 0);\n\t\treturn TRUE;\n\t}\n\n\treturn FALSE;\n}\n\nvoid CMainFrame::OnFileOpen()\n{\n\tCFile File;\n\tCString str = File.OpenFileDialog(0, OFN_FILEMUSTEXIST, _T(\"Scribble Files (*.dat)\\0*.dat\\0\\0\"), this);\n\n\tif (!str.IsEmpty())\n\t{\n\t\t// Retrieve the PlotPoint data\n\t\tif (m_View.FileOpen(str))\n\t\t{\n\t\t\t// Save the filename\n\t\t\tm_PathName = str;\n\t\t\tAddMRUEntry(str);\n\t\t}\n\t\telse\n\t\t\tm_PathName=_T(\"\");\n\t}\n}\n\nvoid CMainFrame::OnFileSave()\n{\n\tif (m_PathName == _T(\"\"))\n\t\tOnFileSaveAs();\n\telse\n\t\tm_View.FileSave(m_PathName.c_str());\n}\n\nvoid CMainFrame::OnFileSaveAs()\n{\n\tCFile File;\n\tCString str = File.SaveFileDialog(0, OFN_OVERWRITEPROMPT, _T(\"Scribble Files (*.dat)\\0*.dat\\0\\0\"), _T(\"dat\"), this);\n\n\t// Store the PlotPoint data in the file\n\tif (!str.IsEmpty())\n\t{\n\t\tm_PathName = str;\n\n\t\t// Save the file name\n\t\tm_View.FileSave(str);\n\t\tAddMRUEntry(str);\n\t}\n}\n\nvoid CMainFrame::SetupToolBar()\n{\n\t// Set the Resource IDs for the toolbar buttons\n\tAddToolBarButton( IDM_FILE_NEW   );\n\tAddToolBarButton( IDM_FILE_OPEN  );\n\tAddToolBarButton( IDM_FILE_SAVE  );\n\t\n\tAddToolBarButton( 0 );\t\t\t\t// Separator\n\tAddToolBarButton( IDM_EDIT_CUT );\n\tAddToolBarButton( IDM_EDIT_COPY );\n\tAddToolBarButton( IDM_EDIT_PASTE );\n\t\n\tAddToolBarButton( 0 );\t\t\t\t// Separator\n\tAddToolBarButton( IDM_FILE_PRINT );\n\t\n\tAddToolBarButton( 0 );\t\t\t\t// Separator\n\tAddToolBarButton ( IDM_PEN_RED    );\t\n\tAddToolBarButton ( IDM_PEN_BLUE   );\n\tAddToolBarButton ( IDM_PEN_GREEN  );\n\tAddToolBarButton ( IDM_PEN_BLACK  );\n\tAddToolBarButton ( IDM_HELP_ABOUT );\n}\n\nLRESULT CMainFrame::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n//\tswitch (uMsg)\n//\t{\n\n//\t} // switch (uMsg)\n\n\treturn WndProcDefault(uMsg, wParam, lParam);\n} // LRESULT CMainFrame::WndProc(...)\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/Mainfrm.h",
    "content": "///////////////////////////////////////////////////////\n// Mainfrm.h\n//  Declaration of the CMainFrame class\n\n#ifndef MAINFRM_H\n#define MAINFRM_H\n\n#include \"Frame.h\"\n#include \"file.h\"\n#include \"View.h\"\n\n// required for Dev-C++\n#ifndef OPENFILENAME_SIZE_VERSION_400\n#define OPENFILENAME_SIZE_VERSION_400 sizeof(OPENFILENAME)\n#endif\n\nclass CMainFrame : public CFrame\n{\npublic:\n\tCMainFrame(void);\n\tvirtual ~CMainFrame();\n\nprotected:\n\tvirtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);\n\tvirtual void OnFileOpen();\n\tvirtual void OnFileSave();\n\tvirtual void OnFileSaveAs();\n\tvirtual void CMainFrame::SetupToolBar();\n\tvirtual LRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\nprivate:\n\tenum Pens\n\t{\n\t\tRED, BLUE, GREEN, BLACK\n\t};\n\n\tCView m_View;\n\ttString m_PathName;\n};\n\n#endif //MAINFRM_H\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/Resource.rc",
    "content": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 2 resource.\n//\n#define APSTUDIO_HIDDEN_SYMBOLS\n#include \"windows.h\"\n#undef APSTUDIO_HIDDEN_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n#undef APSTUDIO_READONLY_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n// English (United States) resources\n\n#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\nLANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// RT_MANIFEST\n//\n\n1                       RT_MANIFEST             \"res/Win32++.manifest\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Menu\n//\n\nIDW_MAIN MENU\nBEGIN\n    POPUP \"&File\"\n    BEGIN\n        MENUITEM \"New...\",                      IDM_FILE_NEW\n        MENUITEM \"&Open...\",                    IDM_FILE_OPEN\n        MENUITEM \"&Save\",                       IDM_FILE_SAVE\n        MENUITEM \"Save &As...\",                 IDM_FILE_SAVEAS\n        MENUITEM SEPARATOR\n        MENUITEM \"&Print\",                      IDM_FILE_PRINT\n        MENUITEM SEPARATOR\n        MENUITEM \"E&xit\",                       IDM_FILE_EXIT\n    END\n    POPUP \"&View\"\n    BEGIN\n        MENUITEM \"&Tool Bar\",                   IDW_VIEW_TOOLBAR, CHECKED\n        MENUITEM \"&Status Bar\",                 IDW_VIEW_STATUSBAR, CHECKED\n    END\n    POPUP \"&Help\"\n    BEGIN\n        MENUITEM \"&About\",                      IDM_HELP_ABOUT\n    END\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Icon\n//\n\n// Icon with lowest ID value placed first to ensure application icon\n// remains consistent on all systems.\nIDW_MAIN                ICON                    \"res/pen.ico\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Bitmap\n//\n\nIDW_MAIN                BITMAP                  \"res/toolbar.bmp\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Dialog\n//\n\nIDW_ABOUT DIALOGEX 0, 0, 186, 90\nSTYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE |\n    WS_CAPTION | WS_SYSMENU\nCAPTION \"About\"\nFONT 8, \"MS Shell Dlg\", 400, 0\nBEGIN\n    DEFPUSHBUTTON   \"OK\",IDOK,68,49,50,14\n    CTEXT           \"Scribble Application\",IDC_STATIC,60,22,64,11\n    ICON            IDW_MAIN,0,4,4,20,20\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Accelerator\n//\n\nIDW_MAIN ACCELERATORS\nBEGIN\n    \"C\",            IDM_EDIT_COPY,          VIRTKEY, CONTROL, NOINVERT\n    VK_INSERT,      IDM_EDIT_COPY,          VIRTKEY, CONTROL, NOINVERT\n    VK_DELETE,      IDM_EDIT_CUT,           VIRTKEY, SHIFT, NOINVERT\n    \"X\",            IDM_EDIT_CUT,           VIRTKEY, CONTROL, NOINVERT\n    \"V\",            IDM_EDIT_PASTE,         VIRTKEY, CONTROL, NOINVERT\n    VK_INSERT,      IDM_EDIT_PASTE,         VIRTKEY, SHIFT, NOINVERT\n    VK_BACK,        IDM_EDIT_UNDO,          VIRTKEY, ALT, NOINVERT\n    \"Z\",            IDM_EDIT_UNDO,          VIRTKEY, CONTROL, NOINVERT\n    \"N\",            IDM_FILE_NEW,           VIRTKEY, CONTROL, NOINVERT\n    \"O\",            IDM_FILE_OPEN,          VIRTKEY, CONTROL, NOINVERT\n    \"P\",            IDM_FILE_PRINT,         VIRTKEY, CONTROL, NOINVERT\n    \"S\",            IDM_FILE_SAVE,          VIRTKEY, CONTROL, NOINVERT\n    VK_DELETE,      IDM_EDIT_DELETE,        VIRTKEY, NOINVERT\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Cursor\n//\n\nIDC_CURSOR1             CURSOR                  \"res/Cursor.cur\"\n\n\n#ifdef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// TEXTINCLUDE\n//\n\n1 TEXTINCLUDE \nBEGIN\n    \"resource.h\\0\"\nEND\n\n2 TEXTINCLUDE \nBEGIN\n    \"#define APSTUDIO_HIDDEN_SYMBOLS\\r\\n\"\n    \"#include \"\"windows.h\"\"\\r\\n\"\n    \"#undef APSTUDIO_HIDDEN_SYMBOLS\\r\\n\"\n    \"\\0\"\nEND\n\n3 TEXTINCLUDE \nBEGIN\n    \"\\r\\n\"\n    \"\\0\"\nEND\n\n#endif    // APSTUDIO_INVOKED\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// String Table\n//\n\nSTRINGTABLE\nBEGIN\n    IDW_MAIN                \"Scribble Application\"\n    IDW_VIEW_TOOLBAR        \"Show or hide the tool bar\"\n    IDW_VIEW_STATUSBAR      \"Show or hide the status bar\"\nEND\n\nSTRINGTABLE\nBEGIN\n    IDM_FILE_NEW            \"Create a New Document\"\n    IDM_FILE_OPEN           \"Open Existing Document\"\n    IDM_FILE_SAVE           \"Save the Document\"\n    IDM_FILE_SAVEAS         \"Save the Document with a new name\"\n    IDM_FILE_PRINT          \"Print the Document\"\n    IDM_FILE_EXIT           \"End the Program\"\n    IDM_EDIT_UNDO           \"Undo the last action\"\n    IDM_EDIT_REDO           \"Redo the previously undone action\"\nEND\n\nSTRINGTABLE\nBEGIN\n    IDM_EDIT_CUT            \"Cut the Selected Contents to the Clipboard\"\n    IDM_EDIT_COPY           \"Copy the Selected Contents to the Clipboard\"\n    IDM_EDIT_PASTE          \"Paste the Clipboard Contents to the Document\"\n    IDM_EDIT_DELETE         \"Erase the selected Contents\"\n    IDM_HELP_ABOUT          \"Display Information about this program\"\nEND\n\nSTRINGTABLE\nBEGIN\n    IDM_PEN_RED             \"Red Pen\"\n    IDM_PEN_BLUE            \"Blue Pen\"\n    IDM_PEN_GREEN           \"Green Pen\"\n    IDM_PEN_BLACK           \"Black Pen\"\nEND\n\nSTRINGTABLE\nBEGIN\n    SC_CLOSE                \"Close the Window\"\n    SC_MAXIMIZE             \"Maximize the Window\"\n    SC_MINIMIZE             \"Minimize the WIndow\"\n    SC_MOVE                 \"Move the Window\"\n    SC_NEXTWINDOW           \"Select Next Window\"\n    SC_PREVWINDOW           \"Select Previous Window\"\n    SC_RESTORE              \"Restore the Window\"\n    SC_SIZE                 \"Resize the Window\"\nEND\n\n#endif    // English (U.S.) resources\n/////////////////////////////////////////////////////////////////////////////\n\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/ScribbleApp.cpp",
    "content": "//////////////////////////////////\n// ScribbleApp.cpp\n\n#include \"ScribbleApp.h\"\n\nCScribbleApp::CScribbleApp()\n{\n}\n\nBOOL CScribbleApp::InitInstance()\n{\n    //Create the Window\n    m_Frame.Create();\n\n\treturn TRUE;\n}\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/ScribbleApp.h",
    "content": "////////////////////////////////////////\n// ScribbleApp.h\n\n#ifndef SCRIBBLEAPP_H\n#define SCRIBBLEAPP_H\n\n#include \"targetver.h\"\n#include \"Wincore.h\"\n#include \"Mainfrm.h\"\n\n\nclass CScribbleApp : public CWinApp\n{\npublic:\n    CScribbleApp();\n    virtual ~CScribbleApp() {}\n\tvirtual BOOL InitInstance();\n\nprivate:\n    CMainFrame m_Frame;\n};\n\n#endif //SCRIBBLEAPP_H\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/Tutorial8.bdsproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<BorlandProject>\n\t<PersonalityInfo>\n\t\t<Option>\n\t\t\t<Option Name=\"Personality\">CPlusPlusBuilder.Personality</Option>\n\t\t\t<Option Name=\"ProjectType\">CppGuiApplication</Option>\n\t\t\t<Option Name=\"Version\">1.0</Option>\n\t\t\t<Option Name=\"GUID\">{D89B38BC-DF6B-4DE6-B007-C3EB16A9D851}</Option>\n\t\t</Option>\n\t</PersonalityInfo>\n\t<CPlusPlusBuilder.Personality>\n\t\t<Source>\n\t\t\t<Source Name=\"MainSource\">Tutorial8.bpf</Source>\n\t\t</Source>\n\t\t<BCBPROJECT>\n      <project version=\"10.0\">\n        <property category=\"build.config\" name=\"active\" value=\"0\"/>\n        <property category=\"build.config\" name=\"count\" value=\"1\"/>\n        <property category=\"build.config\" name=\"excludedefaultforzero\" value=\"0\"/>\n        <property category=\"build.config.0\" name=\"builddir\" value=\"Debug\"/>\n        <property category=\"build.config.0\" name=\"key\" value=\"Debug_Build\"/>\n        <property category=\"build.config.0\" name=\"name\" value=\"Debug Build\"/>\n        <property category=\"build.config.0\" name=\"settings.win32b\" value=\"default\"/>\n        <property category=\"build.config.0\" name=\"type\" value=\"Toolset\"/>\n        <property category=\"build.config.0\" name=\"win32.win32b.builddir\" value=\"Debug_Build\"/>\n        <property category=\"build.config.1\" name=\"key\" value=\"Release_Build\"/>\n        <property category=\"build.config.1\" name=\"name\" value=\"Release Build\"/>\n        <property category=\"build.config.1\" name=\"settings.win32b\" value=\"default\"/>\n        <property category=\"build.config.1\" name=\"type\" value=\"Toolset\"/>\n        <property category=\"build.config.1\" name=\"win32.win32b.builddir\" value=\"Release_Build\"/>\n        <property category=\"build.node\" name=\"name\" value=\"Tutorial8.exe\"/>\n        <property category=\"build.node\" name=\"packages\" value=\"vclx;vcl;rtl;dbrtl;vcldb;adortl;dbxcds;dbexpress;xmlrtl;vclie;inet;inetdbbde;inetdbxpress;soaprtl;dsnap;bdertl;vcldbx\"/>\n        <property category=\"build.node\" name=\"sparelibs\" value=\"rtl.lib\"/>\n        <property category=\"build.node\" name=\"use_packages\" value=\"1\"/>\n        <property category=\"build.platform\" name=\"active\" value=\"win32\"/>\n        <property category=\"build.platform\" name=\"win32.Debug_Build.toolset\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.Release_Build.toolset\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.default\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.enabled\" value=\"1\"/>\n        <property category=\"build.platform\" name=\"win32.win32b.enabled\" value=\"1\"/>\n        <property category=\"win32.*.win32b.dcc32\" name=\"param.filenames.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.listfile.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.objfile.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.xreffile.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.arg.1\" value=\"_DEBUG\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.Od.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.k.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.r.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.v.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.vi.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.y.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.$D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.$O.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.arg.1\" value=\"DEBUG\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.V.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.arg.1\" value=\"$(BDS)\\lib\\debug\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.z.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.zd.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.zi.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.arg.1\" value=\"NDEBUG\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.O2.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.k.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.r.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.vi.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.$D.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.$O.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.V.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.arg.1\" value=\"$(BDS)\\lib\\release\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.z.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zd.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zi.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zn.enabled\" value=\"1\"/>\n        <optionset name=\"all_configurations\">\n          <property category=\"node\" name=\"displayname\" value=\"All Configurations\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.arg.1\" value=\"$(BDS)\\lib\\vcl100.csm\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Hc.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.He.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Hs.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.2\" value=\"$(BDS)\\include\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.3\" value=\"$(BDS)\\include\\dinkumware\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.4\" value=\"$(BDS)\\include\\vcl\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Ve.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.b.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.1\" value=\"_RTLDLL\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.2\" value=\"USEPACKAGES\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.3\" value=\"NO_STRICT\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.4\" value=\"_NO_VCL\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tW.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWC.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWD.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWM.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.2\" value=\".\\\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.3\" value=\"$(BDS)\\lib\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.4\" value=\"$(BDS)\\lib\\obj\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"param.filenames.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Gi.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.2\" value=\"$(BDS)\\lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.3\" value=\"$(BDS)\\lib\\obj\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.4\" value=\"$(BDS)\\lib\\psdk\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpd.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpe.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpp.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.aa.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.ap.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.dynamicrtl.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.1\" value=\"import32.lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.2\" value=\"cw32mti.lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.1\" value=\"c0w32.obj\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.2\" value=\"$(PACKAGES)\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.merge\" value=\"1\"/>\n        </optionset>\n      </project>\n      <FILELIST>\n        <FILE FILENAME=\"main.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"main\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"Mainfrm.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"Mainfrm\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"ScribbleApp.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"ScribbleApp\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"View.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"View\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\WinCore.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\Dialog.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\Frame.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\GDI.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"Resource.rc\" CONTAINERID=\"RCCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"Resource.rc\" FORMNAME=\"Resource.res\" DESIGNCLASS=\"\"/>\n      </FILELIST>\n      <IDEOPTIONS>\n        <VersionInfo>\n          <VersionInfo Name=\"IncludeVerInfo\">False</VersionInfo>\n          <VersionInfo Name=\"AutoIncBuild\">False</VersionInfo>\n          <VersionInfo Name=\"MajorVer\">1</VersionInfo>\n          <VersionInfo Name=\"MinorVer\">0</VersionInfo>\n          <VersionInfo Name=\"Release\">0</VersionInfo>\n          <VersionInfo Name=\"Build\">0</VersionInfo>\n          <VersionInfo Name=\"Debug\">False</VersionInfo>\n          <VersionInfo Name=\"PreRelease\">False</VersionInfo>\n          <VersionInfo Name=\"Special\">False</VersionInfo>\n          <VersionInfo Name=\"Private\">False</VersionInfo>\n          <VersionInfo Name=\"DLL\">False</VersionInfo>\n          <VersionInfo Name=\"Locale\">3081</VersionInfo>\n          <VersionInfo Name=\"CodePage\">1252</VersionInfo>\n        </VersionInfo>\n        <VersionInfoKeys>\n          <VersionInfoKeys Name=\"CompanyName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"FileDescription\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"FileVersion\">1.0.0.0</VersionInfoKeys>\n          <VersionInfoKeys Name=\"InternalName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"LegalCopyright\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"LegalTrademarks\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"OriginalFilename\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"ProductName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"ProductVersion\">1.0.0.0</VersionInfoKeys>\n          <VersionInfoKeys Name=\"Comments\"></VersionInfoKeys>\n        </VersionInfoKeys>\n        <Debugging>\n          <Debugging Name=\"DebugSourceDirs\"></Debugging>\n        </Debugging>\n        <Parameters>\n          <Parameters Name=\"RunParams\"></Parameters>\n          <Parameters Name=\"Launcher\"></Parameters>\n          <Parameters Name=\"UseLauncher\">False</Parameters>\n          <Parameters Name=\"DebugCWD\"></Parameters>\n          <Parameters Name=\"HostApplication\"></Parameters>\n          <Parameters Name=\"RemoteHost\"></Parameters>\n          <Parameters Name=\"RemotePath\"></Parameters>\n          <Parameters Name=\"RemoteParams\"></Parameters>\n          <Parameters Name=\"RemoteLauncher\"></Parameters>\n          <Parameters Name=\"UseRemoteLauncher\">False</Parameters>\n          <Parameters Name=\"RemoteCWD\"></Parameters>\n          <Parameters Name=\"RemoteDebug\">False</Parameters>\n          <Parameters Name=\"Debug Symbols Search Path\"></Parameters>\n          <Parameters Name=\"LoadAllSymbols\">True</Parameters>\n          <Parameters Name=\"LoadUnspecifiedSymbols\">False</Parameters>\n        </Parameters>\n        <Linker>\n          <Linker Name=\"LibPrefix\"></Linker>\n          <Linker Name=\"LibSuffix\"></Linker>\n          <Linker Name=\"LibVersion\"></Linker>\n        </Linker>\n      </IDEOPTIONS>\n    </BCBPROJECT>\n\t\t<buildevents/>\n\t</CPlusPlusBuilder.Personality>\n</BorlandProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/Tutorial8.bpf",
    "content": "This file is used by the project manager only and should be treated like the project file\n\nTo add a file to this project use the Project menu 'Add to Project'\n\nWinMain"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/Tutorial8.dev",
    "content": "[Project]\nFileName=Tutorial8.dev\nName=Tutorial8\nUnitCount=14\nType=0\nVer=1\nObjFiles=\nIncludes=..\\..\\include\nLibs=\nPrivateResource=Tutorial8_private.rc\nResourceIncludes=..\\..\\include\nMakeIncludes=\nCompiler=\nCppCompiler=-D _DEBUG_@@_-D _WIN32_IE=0x0400_@@__@@_\nLinker=-lComctl32_@@__@@_\nIsCpp=1\nIcon=\nExeOutput=.\\Dev-C++\\DEBUG\nObjectOutput=.\\Dev-C++\\DEBUG\nOverrideOutput=0\nOverrideOutputName=Tutorial8.exe\nHostApplication=\nFolders=Header,Resource,Source,Win32++\nCommandLine=\nUseCustomMakefile=0\nCustomMakefile=\nIncludeVersionInfo=0\nSupportXPThemes=0\nCompilerSet=0\nCompilerSettings=0000000000000000000000\n\n[Unit1]\nFileName=main.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit2]\nFileName=Mainfrm.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit3]\nFileName=Mainfrm.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit4]\nFileName=resource.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit5]\nFileName=Resource.rc\nFolder=Resource\nCompile=1\nLink=0\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit6]\nFileName=ScribbleApp.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit7]\nFileName=ScribbleApp.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit8]\nFileName=View.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit9]\nFileName=View.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit10]\nFileName=..\\..\\include\\dialog.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit11]\nFileName=..\\..\\include\\frame.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit12]\nFileName=..\\..\\include\\gdi.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit13]\nFileName=..\\..\\include\\wincore.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit14]\nFileName=..\\..\\include\\winutils.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[VersionInfo]\nMajor=0\nMinor=1\nRelease=1\nBuild=1\nLanguageID=1033\nCharsetID=1252\nCompanyName=\nFileVersion=0.1\nFileDescription=Developed using the Dev-C++ IDE\nInternalName=\nLegalCopyright=\nLegalTrademarks=\nOriginalFilename=Tutorial8.exe\nProductName=Tutorial8\nProductVersion=0.1\nAutoIncBuildNr=0\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/Tutorial8.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"Tutorial8\" - Package Owner=<4>\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\n# ** DO NOT EDIT **\n\n# TARGTYPE \"Win32 (x86) Application\" 0x0101\n\nCFG=Tutorial8 - Win32 Debug\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\n!MESSAGE use the Export Makefile command and run\n!MESSAGE \n!MESSAGE NMAKE /f \"Tutorial8.mak\".\n!MESSAGE \n!MESSAGE You can specify a configuration when running NMAKE\n!MESSAGE by defining the macro CFG on the command line. For example:\n!MESSAGE \n!MESSAGE NMAKE /f \"Tutorial8.mak\" CFG=\"Tutorial8 - Win32 Debug\"\n!MESSAGE \n!MESSAGE Possible choices for configuration are:\n!MESSAGE \n!MESSAGE \"Tutorial8 - Win32 Release\" (based on \"Win32 (x86) Application\")\n!MESSAGE \"Tutorial8 - Win32 Debug\" (based on \"Win32 (x86) Application\")\n!MESSAGE \n\n# Begin Project\n# PROP AllowPerConfigDependencies 0\n# PROP Scc_ProjName \"\"\n# PROP Scc_LocalPath \"\"\nCPP=cl.exe\nMTL=midl.exe\nRSC=rc.exe\n\n!IF  \"$(CFG)\" == \"Tutorial8 - Win32 Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"Release\"\n# PROP BASE Intermediate_Dir \"Release\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"Release\"\n# PROP Intermediate_Dir \"Release\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\n# ADD CPP /nologo /W3 /GR /GX /O2 /I \"..\\..\\include\" /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\n# ADD RSC /l 0x409 /i \"..\\..\\include\" /d \"NDEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib /nologo /subsystem:windows /machine:I386\n\n!ELSEIF  \"$(CFG)\" == \"Tutorial8 - Win32 Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"Debug\"\n# PROP BASE Intermediate_Dir \"Debug\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"Debug\"\n# PROP Intermediate_Dir \"Debug\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\n# ADD CPP /nologo /W3 /Gm /GR /GX /ZI /Od /I \"..\\..\\include\" /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\n# ADD RSC /l 0x409 /i \"..\\..\\include\" /d \"_DEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\n\n!ENDIF \n\n# Begin Target\n\n# Name \"Tutorial8 - Win32 Release\"\n# Name \"Tutorial8 - Win32 Debug\"\n# Begin Group \"Source Files\"\n\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n# Begin Source File\n\nSOURCE=.\\main.cpp\n# End Source File\n# Begin Source File\n\nSOURCE=.\\Mainfrm.cpp\n# End Source File\n# Begin Source File\n\nSOURCE=.\\ScribbleApp.cpp\n# End Source File\n# Begin Source File\n\nSOURCE=.\\View.cpp\n# End Source File\n# End Group\n# Begin Group \"Header Files\"\n\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\n# Begin Source File\n\nSOURCE=.\\Mainfrm.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\resource.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\ScribbleApp.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\View.h\n# End Source File\n# End Group\n# Begin Group \"Resource Files\"\n\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n# Begin Source File\n\nSOURCE=.\\Resource.rc\n# End Source File\n# End Group\n# Begin Group \"Win32++\"\n\n# PROP Default_Filter \"\"\n# Begin Source File\n\nSOURCE=\"..\\Win32++\\Default_Resource.h\"\n# End Source File\n# Begin Source File\n\nSOURCE=\"..\\Win32++\\Dialog.h\"\n# End Source File\n# Begin Source File\n\nSOURCE=\"..\\Win32++\\Frame.h\"\n# End Source File\n# Begin Source File\n\nSOURCE=\"..\\Win32++\\GDI.h\"\n# End Source File\n# Begin Source File\n\nSOURCE=\"..\\Win32++\\WinCore.h\"\n# End Source File\n# End Group\n# End Target\n# End Project\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/Tutorial8.dsw",
    "content": "Microsoft Developer Studio Workspace File, Format Version 6.00\n# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\n\n###############################################################################\n\nProject: \"Tutorial8\"=\".\\Tutorial8.dsp\" - Package Owner=<4>\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<4>\n{{{\n}}}\n\n###############################################################################\n\nGlobal:\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<3>\n{{{\n}}}\n\n###############################################################################\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/Tutorial8_2003.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 8.00\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial8\", \"Tutorial8_2003.vcproj\", \"{7617A5DD-F4DE-4802-A0BE-05ABC91182D8}\"\n\tProjectSection(ProjectDependencies) = postProject\n\tEndProjectSection\nEndProject\nGlobal\n\tGlobalSection(SolutionConfiguration) = preSolution\n\t\tDebug = Debug\n\t\tRelease = Release\n\tEndGlobalSection\n\tGlobalSection(ProjectConfiguration) = postSolution\n\t\t{7617A5DD-F4DE-4802-A0BE-05ABC91182D8}.Debug.ActiveCfg = Debug|Win32\n\t\t{7617A5DD-F4DE-4802-A0BE-05ABC91182D8}.Debug.Build.0 = Debug|Win32\n\t\t{7617A5DD-F4DE-4802-A0BE-05ABC91182D8}.Release.ActiveCfg = Release|Win32\n\t\t{7617A5DD-F4DE-4802-A0BE-05ABC91182D8}.Release.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityAddIns) = postSolution\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/Tutorial8_2003.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"7.10\"\n\tName=\"Tutorial8\"\n\tSccProjectName=\"\"\n\tSccLocalPath=\"\">\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"/>\n\t</Platforms>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"FALSE\"\n\t\t\tCharacterSet=\"0\">\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tRuntimeTypeInfo=\"TRUE\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial8.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tDebugInformationFormat=\"4\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"comctl32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial8.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial8.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"TRUE\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial8.tlb\"\n\t\t\t\tHeaderFileName=\"\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedWrapperGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAuxiliaryManagedWrapperGeneratorTool\"/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"FALSE\"\n\t\t\tCharacterSet=\"0\">\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"TRUE\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"TRUE\"\n\t\t\t\tRuntimeTypeInfo=\"TRUE\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial8.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"comctl32.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial8.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial8.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"TRUE\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial8.tlb\"\n\t\t\t\tHeaderFileName=\"\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedWrapperGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAuxiliaryManagedWrapperGeneratorTool\"/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"resource.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.h\">\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\">\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\Cursor.cur\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\Pen.ico\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Resource.rc\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\toolbar.bmp\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\Win32++.manifest\">\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\tFilter=\"\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\dialog.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\frame.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\gdi.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\winutils.h\">\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/Tutorial8_2005.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 9.00\n# Visual C++ Express 2005\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial8\", \"Tutorial8_2005.vcproj\", \"{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/Tutorial8_2005.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"8.00\"\n\tName=\"Tutorial8\"\n\tProjectGUID=\"{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}\"\n\tRootNamespace=\"Tutorial8\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial8.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tRuntimeTypeInfo=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial8.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib comctl32.lib Comdlg32.lib Advapi32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial8.exe\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial8.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial8.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial8.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib comctl32.lib Comdlg32.lib Advapi32.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial8.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial8.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"resource.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\resrc1.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Resource.rc\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\dialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\frame.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\gdi.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\winutils.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/Tutorial8_2008.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 10.00\n# Visual C++ Express 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial8\", \"Tutorial8_2008.vcproj\", \"{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/Tutorial8_2008.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"Tutorial8\"\n\tProjectGUID=\"{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial8.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tRuntimeTypeInfo=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial8.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib comctl32.lib Comdlg32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial8.exe\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial8.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial8.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial8.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib comctl32.lib Comdlg32.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial8.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial8.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"resource.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\resrc1.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Resource.rc\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\dialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\frame.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\gdi.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\winutils.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/Tutorial8_2010.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 11.00\n# Visual C++ Express 2010\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial8_2010\", \"Tutorial8_2010.vcxproj\", \"{19CEEA56-2973-4E6A-818E-17DB81197AB5}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/Tutorial8_2010.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"main.cpp\" />\n    <ClCompile Include=\"Mainfrm.cpp\" />\n    <ClCompile Include=\"ScribbleApp.cpp\" />\n    <ClCompile Include=\"View.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\..\\include\\dialog.h\" />\n    <ClInclude Include=\"..\\..\\include\\frame.h\" />\n    <ClInclude Include=\"..\\..\\include\\gdi.h\" />\n    <ClInclude Include=\"..\\..\\include\\wincore.h\" />\n    <ClInclude Include=\"..\\..\\include\\winutils.h\" />\n    <ClInclude Include=\"Mainfrm.h\" />\n    <ClInclude Include=\"resource.h\" />\n    <ClInclude Include=\"ScribbleApp.h\" />\n    <ClInclude Include=\"View.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"Resource.rc\" />\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{19CEEA56-2973-4E6A-818E-17DB81197AB5}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>Tutorial8</RootNamespace>\n    <ProjectName>Tutorial8</ProjectName>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <EmbedManifest>false</EmbedManifest>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <EmbedManifest>false</EmbedManifest>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <MinimalRebuild>true</MinimalRebuild>\n      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\n      <Optimization>Disabled</Optimization>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <GenerateManifest>false</GenerateManifest>\n      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n    <ResourceCompile>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ResourceCompile>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <Optimization>MaxSpeed</Optimization>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateManifest>false</GenerateManifest>\n      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n    <ResourceCompile>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ResourceCompile>\n  </ItemDefinitionGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/Tutorial8_2010.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"Header Files\">\n      <UniqueIdentifier>{b1292777-9385-425e-89e0-7c88a014fdf7}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Resource Files\">\n      <UniqueIdentifier>{df81705c-5ba7-416f-8c7f-503563de1e2c}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Source Files\">\n      <UniqueIdentifier>{40733630-35cf-4448-b029-98a3bbebf01b}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Win32++\">\n      <UniqueIdentifier>{12c6c561-6e50-4489-8503-f9a05a31dad7}</UniqueIdentifier>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"main.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Mainfrm.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"ScribbleApp.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"View.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"Mainfrm.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"resource.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"ScribbleApp.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"View.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\dialog.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\frame.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\gdi.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\wincore.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\winutils.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"Resource.rc\">\n      <Filter>Resource Files</Filter>\n    </ResourceCompile>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/View.cpp",
    "content": "//////////////////////////////////////////////\n// View.cpp\n//  Definitions for the CView class\n\n#include \"view.h\"\n#include \"GDI.h\"\n#include \"file.h\"\n#include \"resource.h\"\n\nusing namespace std;\n\nCView::CView() : m_PenColor(RGB(0,0,0))\n{\n\tm_Brush.CreateSolidBrush(RGB(255,255,230));\n}\n\nCView::~CView()\n{\n}\n\nvoid CView::ClearPoints()\n{\n\tm_points.clear();\n\tInvalidate();\n}\n\nvoid CView::DrawLine(int x, int y)\n{\n\tCClientDC dcClient(this);\n\tdcClient.CreatePen(PS_SOLID, 1, m_points.back().color);\n\tdcClient.MoveTo(m_points.back().x, m_points.back().y);\n\tdcClient.LineTo(x, y);\n}\n\nvoid CView::OnDraw(CDC* pDC)\n{\n\tif (m_points.size() > 0)\n\t{\n\t\tbool bDraw = false;  //Start with the pen up\n\t\tfor (unsigned int i = 0 ; i < m_points.size(); i++)\n\t\t{\n\t\t\tpDC->CreatePen(PS_SOLID, 1, m_points[i].color);\n\t\t\tif (bDraw)\n\t\t\t\tpDC->LineTo(m_points[i].x, m_points[i].y);\n\t\t\telse\n\t\t\t\tpDC->MoveTo(m_points[i].x, m_points[i].y);\n\t\t\t\n\t\t\tbDraw = m_points[i].PenDown;\n\t\t}\n\t}\n}\n\nvoid CView::PreCreate(CREATESTRUCT &cs)\n{\n\t// Set the extra style to provide a sunken effect\n\tcs.dwExStyle = WS_EX_CLIENTEDGE;\n}\n\nvoid CView::PreRegisterClass(WNDCLASS &wc)\n{\n\t// Set the background brush, class name and cursor\n\twc.hbrBackground = m_Brush;\n\twc.lpszClassName = _T(\"Scribble Window\");\n\twc.hCursor = ::LoadCursor(GetApp()->GetInstanceHandle(), MAKEINTRESOURCE(IDC_CURSOR1));\n}\n\nBOOL CView::FileOpen(LPCTSTR szFilename)\n{\n\t// empty the PlotPoint vector\n\tm_points.clear();\n\tDWORD nBytesRead;\n\tBOOL bResult = FALSE;\n\n\t// Create a handle to the file\n\tCFile File;\n\tif (File.Open(szFilename, OPEN_EXISTING))\n\t{\n\t\tdo\n\t\t{\n\t\t\tPlotPoint pp;\n\t\t\tnBytesRead = File.Read(&pp, sizeof(PlotPoint));\n\t\t\tif (nBytesRead == sizeof(PlotPoint))\n\t\t\t\tm_points.push_back(pp);\t\n\n\t\t} while (nBytesRead == sizeof(PlotPoint));\n\n\t\tif ((0 != nBytesRead) || (m_points.empty()))\n\t\t{\n\t\t\t// Failed to read all of the file\n\t\t\tm_points.clear();\n\t\t\t::MessageBox (0, _T(\"Invalid data in file\"), _T(\"Error\"), MB_ICONEXCLAMATION | MB_OK);\n\t\t}\n\t\telse\n\t\t\tbResult = TRUE;\n\n\t}\n\telse\n\t{\n\t\ttString tsErrMsg = _T(\"Failed to open file \");\n\t\ttsErrMsg += szFilename;\n\t\t::MessageBox (0, tsErrMsg.c_str(), _T(\"Error\"), MB_ICONEXCLAMATION | MB_OK);\n\t}\n\n\tInvalidate();\n\treturn bResult;\n}\n\nBOOL CView::FileSave(LPCTSTR szFilename)\n{\n\tBOOL bResult = TRUE;\n\tCFile hFile;\n\tif (!hFile.Open(szFilename, CREATE_ALWAYS))\n\t{\n\t\t::MessageBox (0, _T(\"Failed to open file for writing\"), _T(\"Error\"), MB_ICONEXCLAMATION | MB_OK);\n\t\tbResult = FALSE;\n\t}\n\t\n\tif (bResult)\n\t{\n\t\t// Write the file\n\t\tfor (size_t i = 0; i < m_points.size(); ++i)\n\t\t{\n\t\t\tif (!hFile.Write(&m_points[i], sizeof(PlotPoint)))\n\t\t\t{\n\t\t\t\t::MessageBox (0, _T(\"Error while writing to file\"), _T(\"Error\"), MB_ICONEXCLAMATION | MB_OK);\n\t\t\t\tbResult = FALSE;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Verify file length\n\t\tif (hFile.GetLength() != m_points.size() * sizeof(PlotPoint))\n\t\t{\n\t\t\t::MessageBox (0, _T(\"Error while writing to file\"), _T(\"Error\"), MB_ICONEXCLAMATION | MB_OK);\n\t\t\tbResult = FALSE;\n\t\t}\n\t}\n\n\treturn bResult;\n}\n\nvoid CView::SetPen(COLORREF color)\n{\n\tm_PenColor = color;\n}\n\nvoid CView::StorePoint(int x, int y, bool PenDown)\n{\n\tPlotPoint P1;\n\tP1.x = x;\n\tP1.y = y;\n\tP1.PenDown = PenDown;\n\tP1.color = m_PenColor;\n\n\tm_points.push_back(P1); //Add the point to the vector\n}\n\nvoid CView::OnLButtonDown(LPARAM lParam)\n{\n \t// Capture mouse input.\n \tSetCapture();\n\n\tStorePoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), true);\n}\n\nvoid CView::OnLButtonUp(LPARAM lParam)\n{\n\t{\n\t\t//Release the capture on the mouse\n\t\tReleaseCapture();\n\n\t\tStorePoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), false);\n\t}\n}\n\nvoid CView::OnMouseMove(WPARAM wParam, LPARAM lParam)\n{\n\t// hold down the left mouse button and move mouse to draw lines.\n\tif ( (wParam & MK_LBUTTON) && (GetCapture() == this) )\n\t{\n\t\tDrawLine(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));\n\t\tStorePoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), true);\n\t}\n}\n\nLRESULT CView::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n\tswitch (uMsg)\n\t{\n\tcase WM_LBUTTONDOWN:\n\t\tOnLButtonDown(lParam);\n\t\tbreak;\n\n\tcase WM_MOUSEMOVE:\n\t\tOnMouseMove(wParam, lParam);\n        break;\n\n    case WM_LBUTTONUP:\n\t\tOnLButtonUp(lParam);\n\t\tbreak;\n\t}\n\n\t//Use the default message handling for remaining messages\n\treturn WndProcDefault(uMsg, wParam, lParam);\n}\n\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/View.h",
    "content": "//////////////////////////////////////////////////////\n// View.h\n//  Declaration of the CView class\n\n#ifndef VIEW_H\n#define VIEW_H\n\n#include \"WinCore.h\"\n#include <vector>\n\nusing std::vector;\n\n\nclass CView : public CWnd\n{\npublic:\n\tCView();\n\tvirtual ~CView();\n\tvirtual void ClearPoints();\n\tvirtual BOOL FileOpen(LPCTSTR szFilename);\n\tvirtual BOOL FileSave(LPCTSTR szFilename);\n\tvirtual void SetPen(COLORREF Color);\n\nprotected:\n\tvirtual void OnDraw(CDC* pDC);\n\tvirtual void PreCreate(CREATESTRUCT &cs);\n\tvirtual void PreRegisterClass(WNDCLASS &wc);\n\tvirtual LRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\nprivate:\n\tstruct PlotPoint\n\t{\n\t\tint x;\n\t\tint y;\n\t\tbool PenDown;\n\t\tCOLORREF color;\n\t};\n\n\tvoid DrawLine(int x, int y);\n\tvoid OnLButtonDown(LPARAM lParam);\n\tvoid OnLButtonUp(LPARAM lParam);\n\tvoid OnMouseMove(WPARAM wParam, LPARAM lParam);\n\tvoid StorePoint(int x, int y, bool PenDown);\n\n\tCBrush m_Brush;\n\tvector<PlotPoint> m_points;\t// Points of lines to draw\n\tCOLORREF m_PenColor;\n};\n\n\n#endif // CVIEW_H\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/main.cpp",
    "content": "////////////////////////////////\n// Main.cpp\n\n// Add the Win32++\\include  directory to project's additional include directories\n// Add the Win32++\\include  directory to project's additional resource directories\n#include \"ScribbleApp.h\"\n\n\nint APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, int)\n{\n    // Start Win32++\n    CScribbleApp MyApp;\n\n\t// Run the application\n    return MyApp.Run();\n}\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/res/Win32++.manifest",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\">\n<assemblyIdentity\n    version=\"1.0.0.0\"\n    processorArchitecture=\"*\"\n    name=\"XP Beautifier\"\n    type=\"win32\"\n/>\n<description>Adds XP Theme style to any program</description>\n<dependency>\n    <dependentAssembly>\n        <assemblyIdentity\n            type=\"win32\"\n            name=\"Microsoft.Windows.Common-Controls\"\n            version=\"6.0.0.0\"\n            processorArchitecture=\"*\"\n            publicKeyToken=\"6595b64144ccf1df\"\n            language=\"*\"\n        />\n    </dependentAssembly>\n</dependency>\n</assembly>\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/resource.h",
    "content": "//{{NO_DEPENDENCIES}}\n// Microsoft Visual C++ generated include file.\n// Used by Resource.rc\n//\n\n// include the Resource IDs defined by Win32++\n#include \"default_resource.h\"\n\n//Resource IDs for menu items and ToolBar items\n#define IDM_FILE_NEW                    101\n#define IDM_FILE_OPEN                   102\n#define IDM_FILE_SAVE                   103\n#define IDM_FILE_SAVEAS                 104\n#define IDM_FILE_PRINT                  105\n#define IDM_FILE_CLOSE                  106\n#define IDM_FILE_EXIT                   107\n#define IDM_EDIT_UNDO                   110\n#define IDM_EDIT_REDO                   111\n#define IDM_EDIT_CUT                    112\n#define IDM_EDIT_COPY                   113\n#define IDM_EDIT_PASTE                  114\n#define IDM_EDIT_DELETE                 115\n#define IDM_HELP_ABOUT                  120\n\n#define IDM_PEN_RED                     130\n#define IDM_PEN_BLUE                    131\n#define IDM_PEN_GREEN                   132\n#define IDM_PEN_BLACK                   133\n\n//Resource ID for the cursor\n#define IDC_CURSOR1                     140\n\n// Next default values for new objects\n// \n#ifdef APSTUDIO_INVOKED\n#ifndef APSTUDIO_READONLY_SYMBOLS\n#define _APS_NO_MFC                     1\n#define _APS_NEXT_RESOURCE_VALUE        149\n#define _APS_NEXT_COMMAND_VALUE         32771\n#define _APS_NEXT_CONTROL_VALUE         1000\n#define _APS_NEXT_SYMED_VALUE           150\n#endif\n#endif\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial8/targetver.h",
    "content": "///////////////////////////////////////////////////////////////////////\n// targetver.h is used to define the Windows API macros that target the \n// version of the Windows operating system you wish to support.\n\n\n// For Windows 95\n//#define WINVER          0x0400\n//#define _WIN32_WINDOWS  0x0400\n//#define _WIN32_IE       0x0300\n\n// For Windows 98\n#define WINVER          0x0410\n#define _WIN32_WINDOWS  0x0410\n#define _WIN32_IE       0x0401\n\n// For Windows NT4\n//#define WINVER          0x0400\n//#define _WIN32_WINNT    0x0400\n//#define _WIN32_IE       0x0200\n//#define NTDDI_VERSION   0x05000000\n\n// For Windows ME\n//#define WINVER          0x0500\n//#define _WIN32_WINNT    0x0500\n//#define _WIN32_IE       0x0500\n\n// For Windows 2000\n//#define WINVER          0x0500\n//#define _WIN32_WINNT    0x0500\n//#define _WIN32_IE       0x0500\n//#define NTDDI_VERSION   0x05000000\n\n// For Windows XP\n//#define WINVER          0x0501\n//#define _WIN32_WINNT    0x0501\n//#define _WIN32_IE       0x0501\n//#define NTDDI_VERSION   0x05010000\n\n// For Windows Vista\n//#define WINVER          0x0600\n//#define _WIN32_WINNT    0x0600\n//#define _WIN32_IE       0x0600\n//#define NTDDI_VERSION   0x06000000\n\n// For Windows 7\n//#define WINVER          0x0601\n//#define _WIN32_WINNT    0x0601\n//#define _WIN32_IE       0x0601\n//#define NTDDI_VERSION   0x06010000\n\n\n// Users of Visual Studio 10 can do this instead\n// #include \"SDKDDKver.h\"\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/Mainfrm.cpp",
    "content": "////////////////////////////////////////////////////\n// Mainfrm.cpp  - definitions for the CMainFrame class\n\n#include \"mainfrm.h\"\n#include \"resource.h\"\n\n\nCMainFrame::CMainFrame()\n{\n\t// Set m_View as the view window of the frame\n\tSetView(m_View);\n}\n\nCMainFrame::~CMainFrame()\n{\n}\n\nBOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)\n{\n\t// Process the messages from the Menu and Tool Bar\n\tswitch (LOWORD(wParam))\n\t{\n\tcase IDM_FILE_NEW:\n\t\tm_View.ClearPoints();\n\t\tm_PathName = _T(\"\");\n\t\treturn TRUE;\n\tcase IDM_FILE_OPEN:\n\t\tOnFileOpen();\n\t\treturn TRUE;\n\tcase IDM_FILE_SAVE:\n\t\tOnFileSave();\n\t\treturn TRUE;\n\tcase IDM_FILE_SAVEAS:\n\t\tOnFileSaveAs();\n\t\treturn TRUE;\n\tcase IDM_FILE_PRINT:\n\t\tOnFilePrint();\n\t\treturn TRUE;\n\tcase IDM_PEN_RED:\n\t\tm_View.SetPen(RGB(255,0,0));\n\t\treturn TRUE;\n\tcase IDM_PEN_BLUE:\n\t\tm_View.SetPen(RGB(0,0,255));\n\t\treturn TRUE;\n\tcase IDM_PEN_GREEN:\n\t\tm_View.SetPen(RGB(0,196,0));\n\t\treturn TRUE;\n\tcase IDM_PEN_BLACK:\n\t\tm_View.SetPen(RGB(0,0,0));\n\t\treturn TRUE;\n\tcase IDM_HELP_ABOUT:\n\t\tOnHelp();\n\t\treturn TRUE;\n\tcase IDM_FILE_EXIT:\n\t\t::PostMessage(m_hWnd, WM_CLOSE, 0, 0);\n\t\treturn TRUE;\n\t}\n\n\treturn FALSE;\n}\n\nvoid CMainFrame::OnFileOpen()\n{\n\tCFile File;\n\tCString str = File.OpenFileDialog(0, OFN_FILEMUSTEXIST, _T(\"Scribble Files (*.dat)\\0*.dat\\0\\0\"), this);\n\n\tif (!str.IsEmpty())\n\t{\n\t\t// Retrieve the PlotPoint data\n\t\tif (m_View.FileOpen(str))\n\t\t{\n\t\t\t// Save the filename\n\t\t\tm_PathName = str;\n\t\t\tAddMRUEntry(str);\n\t\t}\n\t\telse\n\t\t\tm_PathName=_T(\"\");\n\t}\n}\n\nvoid CMainFrame::OnFileSave()\n{\n\tif (m_PathName == _T(\"\"))\n\t\tOnFileSaveAs();\n\telse\n\t\tm_View.FileSave(m_PathName.c_str());\n}\n\nvoid CMainFrame::OnFileSaveAs()\n{\n\tCFile File;\n\tCString str = File.SaveFileDialog(0, OFN_OVERWRITEPROMPT, _T(\"Scribble Files (*.dat)\\0*.dat\\0\\0\"), _T(\"dat\"), this);\n\n\t// Store the PlotPoint data in the file\n\tif (!str.IsEmpty())\n\t{\n\t\tm_PathName = str;\n\n\t\t// Save the file name\n\t\tm_View.FileSave(str);\n\t\tAddMRUEntry(str);\n\t}\n}\n\n// Sends the bitmap extracted from the View window to a printer of your choice\n// This function provides a useful reference for printing bitmaps in general\nvoid CMainFrame::OnFilePrint()\n{\n\t// Get the dimensions of the View window\n\tCRect rcView = m_View.GetClientRect();\n\tint Width = rcView.Width();\n\tint Height = rcView.Height();\n\n\t// Copy the bitmap from the View window\n\tCClientDC dcView(&m_View);\n\tCMemDC MemDC(&dcView);\n\tCBitmap bmView;\n\tbmView.CreateCompatibleBitmap(&dcView, Width, Height);\n\tMemDC.SelectObject(&bmView);\n\tMemDC.BitBlt(0, 0, Width, Height, &dcView, 0, 0, SRCCOPY);\n\n\t// Bring up a dialog to choose the printer\n\tPRINTDLG pd = {0};\n\tpd.lStructSize = sizeof( pd );\n\tpd.Flags = PD_RETURNDC;\n\tpd.hwndOwner = m_hWnd;\n\n\t// Retrieve the printer DC\n\tif( !PrintDlg( &pd ) )\n\t{\n\t\tTRACE(_T(\"PrintDlg canceled\"));\n\t\treturn;\n\t}\n\n\t// Zero and then initialize the members of a DOCINFO structure.\n\tDOCINFO di;\n\tmemset( &di, 0, sizeof(DOCINFO) );\n\tdi.cbSize = sizeof(DOCINFO);\n\tdi.lpszDocName = _T(\"Scribble Printout\");\n\tdi.lpszOutput = (LPTSTR) NULL;\n\tdi.lpszDatatype = (LPTSTR) NULL;\n\tdi.fwType = 0;\n\n\t// Begin a print job by calling the StartDoc function.\n\tif (SP_ERROR == StartDoc(pd.hDC, &di))\n\t\tthrow CWinException(_T(\"Failed to start print job\"));\n\n\t// Inform the driver that the application is about to begin sending data.\n\tif (0 > StartPage(pd.hDC))\n\t\tthrow CWinException(_T(\"StartPage failed\"));\n\n\tBITMAPINFOHEADER bi = {0};\n\tbi.biSize = sizeof(BITMAPINFOHEADER);\n\tbi.biHeight = Height;\n\tbi.biWidth = Width;\n\tbi.biPlanes = 1;\n\tbi.biBitCount =  24;\n\tbi.biCompression = BI_RGB;\n\n\t// Note: BITMAPINFO and BITMAPINFOHEADER are the same for 24 bit bitmaps\n\t// Get the size of the image data\n\tMemDC.GetDIBits(&bmView, 0, Height, NULL, (BITMAPINFO*)&bi, DIB_RGB_COLORS);\n\n\t// Retrieve the image data\n\tstd::vector<byte> vBits(bi.biSizeImage, 0);\t// a vector to hold the byte array\n\tbyte* pByteArray = &vBits.front();\n\tMemDC.GetDIBits(&bmView, 0, Height, pByteArray, (BITMAPINFO*)&bi, DIB_RGB_COLORS);\n\n\t// Determine the scaling factors required to print the bitmap and retain its original proportions.\n\tfloat fLogPelsX1 = (float) dcView.GetDeviceCaps(LOGPIXELSX);\n\tfloat fLogPelsY1 = (float) dcView.GetDeviceCaps(LOGPIXELSY);\n\tfloat fLogPelsX2 = (float) GetDeviceCaps(pd.hDC, LOGPIXELSX);\n\tfloat fLogPelsY2 = (float) GetDeviceCaps(pd.hDC, LOGPIXELSY);\n\tfloat fScaleX = MAX(fLogPelsX1, fLogPelsX2) / MIN(fLogPelsX1, fLogPelsX2);\n\tfloat fScaleY = MAX(fLogPelsY1, fLogPelsY2) / MIN(fLogPelsY1, fLogPelsY2);\n\n    // Compute the coordinates of the upper left corner of the centered bitmap.\n\tint cWidthPels = GetDeviceCaps(pd.hDC, HORZRES);\n\tint xLeft = ((cWidthPels / 2) - ((int) (((float) Width) * fScaleX)) / 2);\n\tint cHeightPels = GetDeviceCaps(pd.hDC, VERTRES);\n\tint yTop = ((cHeightPels / 2) - ((int) (((float) Height) * fScaleY)) / 2);\n\n    // Use StretchDIBits to scale the bitmap and maintain its original proportions\n\tif (GDI_ERROR == (UINT)StretchDIBits(pd.hDC, xLeft, yTop, (int) ((float) Width * fScaleX),\n\t\t(int) ((float) Height * fScaleY), 0, 0, Width, Height, pByteArray, (BITMAPINFO*)&bi, DIB_RGB_COLORS, SRCCOPY))\n\t{\n\t\tthrow CWinException(_T(\"Failed to resize image for printing\"));\n\t}\n\n\t// Inform the driver that the page is finished.\n\tif (0 > EndPage(pd.hDC))\n\t\tthrow CWinException(_T(\"EndPage failed\"));\n\n\t// Inform the driver that document has ended.\n\tif(0 > EndDoc(pd.hDC))\n\t\tthrow CWinException(_T(\"EndDoc failed\"));\n}\n\nvoid CMainFrame::SetupToolBar()\n{\n\t// Set the Resource IDs for the toolbar buttons\n\tAddToolBarButton( IDM_FILE_NEW   );\n\tAddToolBarButton( IDM_FILE_OPEN  );\n\tAddToolBarButton( IDM_FILE_SAVE  );\n\t\n\tAddToolBarButton( 0 );\t\t\t\t// Separator\n\tAddToolBarButton( IDM_EDIT_CUT );\n\tAddToolBarButton( IDM_EDIT_COPY );\n\tAddToolBarButton( IDM_EDIT_PASTE );\n\t\n\tAddToolBarButton( 0 );\t\t\t\t// Separator\n\tAddToolBarButton( IDM_FILE_PRINT );\n\t\n\tAddToolBarButton( 0 );\t\t\t\t// Separator\n\tAddToolBarButton ( IDM_PEN_RED    );\t\n\tAddToolBarButton ( IDM_PEN_BLUE   );\n\tAddToolBarButton ( IDM_PEN_GREEN  );\n\tAddToolBarButton ( IDM_PEN_BLACK  );\n\tAddToolBarButton ( IDM_HELP_ABOUT );\n}\n\nLRESULT CMainFrame::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n//\tswitch (uMsg)\n//\t{\n\n//\t} // switch (uMsg)\n\n\treturn WndProcDefault(uMsg, wParam, lParam);\n} // LRESULT CMainFrame::WndProc(...)\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/Mainfrm.h",
    "content": "///////////////////////////////////////////////////////\n// Mainfrm.h\n//  Declaration of the CMainFrame class\n\n#ifndef MAINFRM_H\n#define MAINFRM_H\n\n#include \"Frame.h\"\n#include \"File.h\"\n#include \"View.h\"\n\n// required for Dev-C++\n#ifndef OPENFILENAME_SIZE_VERSION_400\n#define OPENFILENAME_SIZE_VERSION_400 sizeof(OPENFILENAME)\n#endif\n\nclass CMainFrame : public CFrame\n{\npublic:\n\tCMainFrame(void);\n\tvirtual ~CMainFrame();\n\nprotected:\n\tvirtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);\n\tvirtual void OnFileOpen();\n\tvirtual void OnFileSave();\n\tvirtual void OnFileSaveAs();\n\tvirtual void OnFilePrint();\n\tvirtual void SetupToolBar();\n\tvirtual LRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\nprivate:\n\tenum Pens\n\t{\n\t\tRED, BLUE, GREEN, BLACK\n\t};\n\n\tCView m_View;\n\ttString m_PathName;\n};\n\n#endif //MAINFRM_H\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/Resource.rc",
    "content": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 2 resource.\n//\n#define APSTUDIO_HIDDEN_SYMBOLS\n#include \"windows.h\"\n#undef APSTUDIO_HIDDEN_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n#undef APSTUDIO_READONLY_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n// English (United States) resources\n\n#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\nLANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// RT_MANIFEST\n//\n\n1                       RT_MANIFEST             \"res/Win32++.manifest\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Menu\n//\n\nIDW_MAIN MENU\nBEGIN\n    POPUP \"&File\"\n    BEGIN\n        MENUITEM \"New...\",                      IDM_FILE_NEW\n        MENUITEM \"&Open...\",                    IDM_FILE_OPEN\n        MENUITEM \"&Save\",                       IDM_FILE_SAVE\n        MENUITEM \"Save &As...\",                 IDM_FILE_SAVEAS\n        MENUITEM SEPARATOR\n        MENUITEM \"&Print\",                      IDM_FILE_PRINT\n        MENUITEM SEPARATOR\n        MENUITEM \"E&xit\",                       IDM_FILE_EXIT\n    END\n    POPUP \"&View\"\n    BEGIN\n        MENUITEM \"&Tool Bar\",                   IDW_VIEW_TOOLBAR, CHECKED\n        MENUITEM \"&Status Bar\",                 IDW_VIEW_STATUSBAR, CHECKED\n    END\n    POPUP \"&Help\"\n    BEGIN\n        MENUITEM \"&About\",                      IDM_HELP_ABOUT\n    END\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Icon\n//\n\n// Icon with lowest ID value placed first to ensure application icon\n// remains consistent on all systems.\nIDW_MAIN                 ICON                    \"res/pen.ico\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Bitmap\n//\n\nIDW_MAIN                 BITMAP                  \"res/toolbar.bmp\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Dialog\n//\n\nIDW_ABOUT DIALOGEX 0, 0, 186, 90\nSTYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE |\n    WS_CAPTION | WS_SYSMENU\nCAPTION \"About\"\n//FONT 8, \"MS Shell Dlg\", 400, 0, 0x1\nFONT 8, \"MS Shell Dlg\", 400, 0\nBEGIN\n    DEFPUSHBUTTON   \"OK\",IDOK,68,49,50,14\n    CTEXT           \"Scribble Application\",IDC_STATIC,60,22,64,11\n    ICON            IDW_MAIN,0,4,4,20,20\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Accelerator\n//\n\nIDW_MAIN ACCELERATORS\nBEGIN\n    \"C\",            IDM_EDIT_COPY,          VIRTKEY, CONTROL, NOINVERT\n    VK_INSERT,      IDM_EDIT_COPY,          VIRTKEY, CONTROL, NOINVERT\n    VK_DELETE,      IDM_EDIT_CUT,           VIRTKEY, SHIFT, NOINVERT\n    \"X\",            IDM_EDIT_CUT,           VIRTKEY, CONTROL, NOINVERT\n    \"V\",            IDM_EDIT_PASTE,         VIRTKEY, CONTROL, NOINVERT\n    VK_INSERT,      IDM_EDIT_PASTE,         VIRTKEY, SHIFT, NOINVERT\n    VK_BACK,        IDM_EDIT_UNDO,          VIRTKEY, ALT, NOINVERT\n    \"Z\",            IDM_EDIT_UNDO,          VIRTKEY, CONTROL, NOINVERT\n    \"N\",            IDM_FILE_NEW,           VIRTKEY, CONTROL, NOINVERT\n    \"O\",            IDM_FILE_OPEN,          VIRTKEY, CONTROL, NOINVERT\n    \"P\",            IDM_FILE_PRINT,         VIRTKEY, CONTROL, NOINVERT\n    \"S\",            IDM_FILE_SAVE,          VIRTKEY, CONTROL, NOINVERT\n    VK_DELETE,      IDM_EDIT_DELETE,        VIRTKEY, NOINVERT\nEND\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Cursor\n//\n\nIDC_CURSOR1             CURSOR                  \"res/Cursor.cur\"\n\n\n#ifdef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// TEXTINCLUDE\n//\n\n1 TEXTINCLUDE \nBEGIN\n    \"resource.h\\0\"\nEND\n\n2 TEXTINCLUDE \nBEGIN\n    \"#define APSTUDIO_HIDDEN_SYMBOLS\\r\\n\"\n    \"#include \"\"windows.h\"\"\\r\\n\"\n    \"#undef APSTUDIO_HIDDEN_SYMBOLS\\r\\n\"\n    \"\\0\"\nEND\n\n3 TEXTINCLUDE \nBEGIN\n    \"\\r\\n\"\n    \"\\0\"\nEND\n\n#endif    // APSTUDIO_INVOKED\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// String Table\n//\n\nSTRINGTABLE\nBEGIN\n    IDW_MAIN                 \"Scribble Application\"\nEND\n\nSTRINGTABLE\nBEGIN\n    IDM_FILE_NEW            \"Create a New Document\"\n    IDM_FILE_OPEN           \"Open Existing Document\"\n    IDM_FILE_SAVE           \"Save the Document\"\n    IDM_FILE_SAVEAS         \"Save the Document with a new name\"\n    IDM_FILE_PRINT          \"Print the Document\"\n    IDM_FILE_EXIT           \"End the Program\"\nEND\n\nSTRINGTABLE\nBEGIN\n    IDM_EDIT_UNDO           \"Undo the last action\"\n    IDM_EDIT_REDO           \"Redo the previously undone action\"\n    IDM_EDIT_CUT            \"Cut the Selected Contents to the Clipboard\"\n    IDM_EDIT_COPY           \"Copy the Selected Contents to the Clipboard\"\n    IDM_EDIT_PASTE          \"Paste the Clipboard Contents to the Document\"\n    IDM_EDIT_DELETE         \"Erase the selected Contents\"\n    IDW_VIEW_TOOLBAR        \"Show or hide the tool bar\"\n    IDW_VIEW_STATUSBAR      \"Show or hide the status bar\"\nEND\n\nSTRINGTABLE\nBEGIN\n    IDM_PEN_RED              \"Red Pen\"\n    IDM_PEN_BLUE             \"Blue Pen\"\n    IDM_PEN_GREEN            \"Green Pen\"\n    IDM_PEN_BLACK            \"Black Pen\"\nEND\n\nSTRINGTABLE\nBEGIN\n    IDM_HELP_ABOUT          \"Display Information about this program\"\nEND\n\nSTRINGTABLE\nBEGIN\n    SC_CLOSE                \"Close the Window\"\n    SC_MAXIMIZE             \"Maximize the Window\"\n    SC_MINIMIZE             \"Minimize the WIndow\"\n    SC_MOVE                 \"Move the Window\"\n    SC_NEXTWINDOW           \"Select Next Window\"\n    SC_PREVWINDOW           \"Select Previous Window\"\n    SC_RESTORE              \"Restore the Window\"\n    SC_SIZE                 \"Resize the Window\"\nEND\n\n#endif    // English (U.S.) resources\n/////////////////////////////////////////////////////////////////////////////\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/ScribbleApp.cpp",
    "content": "//////////////////////////////////\n// ScribbleApp.cpp\n\n#include \"ScribbleApp.h\"\n\nCScribbleApp::CScribbleApp()\n{\n}\n\nBOOL CScribbleApp::InitInstance()\n{\n    //Create the Window\n    m_Frame.Create();\n\n\treturn TRUE;\n}\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/ScribbleApp.h",
    "content": "////////////////////////////////////////\n// ScribbleApp.h\n\n#ifndef SCRIBBLEAPP_H\n#define SCRIBBLEAPP_H\n\n#include \"targetver.h\"\n#include \"Wincore.h\"\n#include \"Mainfrm.h\"\n\n\nclass CScribbleApp : public CWinApp\n{\npublic:\n    CScribbleApp();\n    virtual ~CScribbleApp() {}\n\tvirtual BOOL InitInstance();\n\nprivate:\n    CMainFrame m_Frame;\n};\n\n#endif //SCRIBBLEAPP_H\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/Tutorial9.bdsproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<BorlandProject>\n\t<PersonalityInfo>\n\t\t<Option>\n\t\t\t<Option Name=\"Personality\">CPlusPlusBuilder.Personality</Option>\n\t\t\t<Option Name=\"ProjectType\">CppGuiApplication</Option>\n\t\t\t<Option Name=\"Version\">1.0</Option>\n\t\t\t<Option Name=\"GUID\">{D89B38BC-DF6B-4DE6-B007-C3EB16A9D851}</Option>\n\t\t</Option>\n\t</PersonalityInfo>\n\t<CPlusPlusBuilder.Personality>\n\t\t<Source>\n\t\t\t<Source Name=\"MainSource\">Tutorial9.bpf</Source>\n\t\t</Source>\n\t\t<BCBPROJECT>\n      <project version=\"10.0\">\n        <property category=\"build.config\" name=\"active\" value=\"0\"/>\n        <property category=\"build.config\" name=\"count\" value=\"1\"/>\n        <property category=\"build.config\" name=\"excludedefaultforzero\" value=\"0\"/>\n        <property category=\"build.config.0\" name=\"builddir\" value=\"Debug\"/>\n        <property category=\"build.config.0\" name=\"key\" value=\"Debug_Build\"/>\n        <property category=\"build.config.0\" name=\"name\" value=\"Debug Build\"/>\n        <property category=\"build.config.0\" name=\"settings.win32b\" value=\"default\"/>\n        <property category=\"build.config.0\" name=\"type\" value=\"Toolset\"/>\n        <property category=\"build.config.0\" name=\"win32.win32b.builddir\" value=\"Debug_Build\"/>\n        <property category=\"build.config.1\" name=\"key\" value=\"Release_Build\"/>\n        <property category=\"build.config.1\" name=\"name\" value=\"Release Build\"/>\n        <property category=\"build.config.1\" name=\"settings.win32b\" value=\"default\"/>\n        <property category=\"build.config.1\" name=\"type\" value=\"Toolset\"/>\n        <property category=\"build.config.1\" name=\"win32.win32b.builddir\" value=\"Release_Build\"/>\n        <property category=\"build.node\" name=\"name\" value=\"Tutorial9.exe\"/>\n        <property category=\"build.node\" name=\"packages\" value=\"vclx;vcl;rtl;dbrtl;vcldb;adortl;dbxcds;dbexpress;xmlrtl;vclie;inet;inetdbbde;inetdbxpress;soaprtl;dsnap;bdertl;vcldbx\"/>\n        <property category=\"build.node\" name=\"sparelibs\" value=\"rtl.lib\"/>\n        <property category=\"build.node\" name=\"use_packages\" value=\"1\"/>\n        <property category=\"build.platform\" name=\"active\" value=\"win32\"/>\n        <property category=\"build.platform\" name=\"win32.Debug_Build.toolset\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.Release_Build.toolset\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.default\" value=\"win32b\"/>\n        <property category=\"build.platform\" name=\"win32.enabled\" value=\"1\"/>\n        <property category=\"build.platform\" name=\"win32.win32b.enabled\" value=\"1\"/>\n        <property category=\"win32.*.win32b.dcc32\" name=\"param.filenames.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.listfile.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.objfile.merge\" value=\"1\"/>\n        <property category=\"win32.*.win32b.tasm32\" name=\"param.xreffile.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.arg.1\" value=\"_DEBUG\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.Od.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.k.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.r.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.v.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.vi.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.bcc32\" name=\"option.y.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.$D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.$O.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.arg.1\" value=\"DEBUG\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.dcc32\" name=\"option.V.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.arg.1\" value=\"$(BDS)\\lib\\debug\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.z.enabled\" value=\"1\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.zd.enabled\" value=\"0\"/>\n        <property category=\"win32.Debug_Build.win32b.tasm32\" name=\"option.zi.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.arg.1\" value=\"NDEBUG\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.D.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.O2.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.k.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.r.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.bcc32\" name=\"option.vi.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.$D.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.$O.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.dcc32\" name=\"option.V.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.arg.1\" value=\"$(BDS)\\lib\\release\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.z.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zd.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zi.enabled\" value=\"0\"/>\n        <property category=\"win32.Release_Build.win32b.tasm32\" name=\"option.zn.enabled\" value=\"1\"/>\n        <optionset name=\"all_configurations\">\n          <property category=\"node\" name=\"displayname\" value=\"All Configurations\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.arg.1\" value=\"$(BDS)\\lib\\vcl100.csm\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.H=.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Hc.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.He.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Hs.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.2\" value=\"$(BDS)\\include\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.3\" value=\"$(BDS)\\include\\dinkumware\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.4\" value=\"$(BDS)\\include\\vcl\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.I.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.Ve.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.b.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.1\" value=\"_RTLDLL\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.2\" value=\"USEPACKAGES\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.3\" value=\"NO_STRICT\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.4\" value=\"_NO_VCL\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.sysdefines.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tW.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWC.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWD.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.bcc32\" name=\"option.tWM.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.I.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.O.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.R.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.2\" value=\".\\\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.3\" value=\"$(BDS)\\lib\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.4\" value=\"$(BDS)\\lib\\obj\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"option.U.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.dcc32\" name=\"param.filenames.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.idl2cpp\" name=\"option.I.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Gi.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.2\" value=\"$(BDS)\\lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.3\" value=\"$(BDS)\\lib\\obj\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.4\" value=\"$(BDS)\\lib\\psdk\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.L.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpd.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpe.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.Tpp.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.aa.enabled\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.ap.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.dynamicrtl.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.arg.1\" value=\"..\\..\\include\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.arg.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"option.j.enabled\" value=\"0\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.1\" value=\"import32.lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.2\" value=\"cw32mti.lib\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.libfiles.merge\" value=\"1\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.1\" value=\"c0w32.obj\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.2\" value=\"$(PACKAGES)\"/>\n          <property category=\"win32.*.win32b.ilink32\" name=\"param.objfiles.merge\" value=\"1\"/>\n        </optionset>\n      </project>\n      <FILELIST>\n        <FILE FILENAME=\"main.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"main\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"Mainfrm.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"Mainfrm\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"ScribbleApp.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"ScribbleApp\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"View.cpp\" CONTAINERID=\"CCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"View\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\WinCore.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\Dialog.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\Frame.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"..\\..\\include\\GDI.h\" CONTAINERID=\"\" LOCALCOMMAND=\"\" UNITNAME=\"\" FORMNAME=\"\" DESIGNCLASS=\"\"/>\n        <FILE FILENAME=\"Resource.rc\" CONTAINERID=\"RCCompiler\" LOCALCOMMAND=\"\" UNITNAME=\"Resource.rc\" FORMNAME=\"Resource.res\" DESIGNCLASS=\"\"/>\n      </FILELIST>\n      <IDEOPTIONS>\n        <VersionInfo>\n          <VersionInfo Name=\"IncludeVerInfo\">False</VersionInfo>\n          <VersionInfo Name=\"AutoIncBuild\">False</VersionInfo>\n          <VersionInfo Name=\"MajorVer\">1</VersionInfo>\n          <VersionInfo Name=\"MinorVer\">0</VersionInfo>\n          <VersionInfo Name=\"Release\">0</VersionInfo>\n          <VersionInfo Name=\"Build\">0</VersionInfo>\n          <VersionInfo Name=\"Debug\">False</VersionInfo>\n          <VersionInfo Name=\"PreRelease\">False</VersionInfo>\n          <VersionInfo Name=\"Special\">False</VersionInfo>\n          <VersionInfo Name=\"Private\">False</VersionInfo>\n          <VersionInfo Name=\"DLL\">False</VersionInfo>\n          <VersionInfo Name=\"Locale\">3081</VersionInfo>\n          <VersionInfo Name=\"CodePage\">1252</VersionInfo>\n        </VersionInfo>\n        <VersionInfoKeys>\n          <VersionInfoKeys Name=\"CompanyName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"FileDescription\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"FileVersion\">1.0.0.0</VersionInfoKeys>\n          <VersionInfoKeys Name=\"InternalName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"LegalCopyright\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"LegalTrademarks\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"OriginalFilename\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"ProductName\"></VersionInfoKeys>\n          <VersionInfoKeys Name=\"ProductVersion\">1.0.0.0</VersionInfoKeys>\n          <VersionInfoKeys Name=\"Comments\"></VersionInfoKeys>\n        </VersionInfoKeys>\n        <Debugging>\n          <Debugging Name=\"DebugSourceDirs\"></Debugging>\n        </Debugging>\n        <Parameters>\n          <Parameters Name=\"RunParams\"></Parameters>\n          <Parameters Name=\"Launcher\"></Parameters>\n          <Parameters Name=\"UseLauncher\">False</Parameters>\n          <Parameters Name=\"DebugCWD\"></Parameters>\n          <Parameters Name=\"HostApplication\"></Parameters>\n          <Parameters Name=\"RemoteHost\"></Parameters>\n          <Parameters Name=\"RemotePath\"></Parameters>\n          <Parameters Name=\"RemoteParams\"></Parameters>\n          <Parameters Name=\"RemoteLauncher\"></Parameters>\n          <Parameters Name=\"UseRemoteLauncher\">False</Parameters>\n          <Parameters Name=\"RemoteCWD\"></Parameters>\n          <Parameters Name=\"RemoteDebug\">False</Parameters>\n          <Parameters Name=\"Debug Symbols Search Path\"></Parameters>\n          <Parameters Name=\"LoadAllSymbols\">True</Parameters>\n          <Parameters Name=\"LoadUnspecifiedSymbols\">False</Parameters>\n        </Parameters>\n        <Linker>\n          <Linker Name=\"LibPrefix\"></Linker>\n          <Linker Name=\"LibSuffix\"></Linker>\n          <Linker Name=\"LibVersion\"></Linker>\n        </Linker>\n      </IDEOPTIONS>\n    </BCBPROJECT>\n\t\t<buildevents/>\n\t</CPlusPlusBuilder.Personality>\n</BorlandProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/Tutorial9.bpf",
    "content": "This file is used by the project manager only and should be treated like the project file\n\nTo add a file to this project use the Project menu 'Add to Project'\n\nWinMain"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/Tutorial9.dev",
    "content": "[Project]\nFileName=Tutorial9.dev\nName=Tutorial9\nUnitCount=14\nType=0\nVer=1\nObjFiles=\nIncludes=..\\..\\include\nLibs=\nPrivateResource=Tutorial9_private.rc\nResourceIncludes=..\\..\\include\nMakeIncludes=\nCompiler=\nCppCompiler=-D _DEBUG_@@_-D _WIN32_IE=0x0400_@@__@@_\nLinker=-lComctl32_@@__@@_\nIsCpp=1\nIcon=\nExeOutput=.\\Dev-C++\\DEBUG\nObjectOutput=.\\Dev-C++\\DEBUG\nOverrideOutput=0\nOverrideOutputName=Tutorial9.exe\nHostApplication=\nFolders=Header,Resource,Source,Win32++\nCommandLine=\nUseCustomMakefile=0\nCustomMakefile=\nIncludeVersionInfo=0\nSupportXPThemes=0\nCompilerSet=0\nCompilerSettings=0000000000000000000000\n\n[Unit1]\nFileName=main.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit2]\nFileName=Mainfrm.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit3]\nFileName=Mainfrm.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit4]\nFileName=resource.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit5]\nFileName=Resource.rc\nFolder=Resource\nCompile=1\nLink=0\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit6]\nFileName=ScribbleApp.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit7]\nFileName=ScribbleApp.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit8]\nFileName=View.cpp\nCompileCpp=1\nFolder=Source\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit9]\nFileName=View.h\nCompileCpp=1\nFolder=Header\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[VersionInfo]\nMajor=0\nMinor=1\nRelease=1\nBuild=1\nLanguageID=1033\nCharsetID=1252\nCompanyName=\nFileVersion=\nFileDescription=Developed using the Dev-C++ IDE\nInternalName=\nLegalCopyright=\nLegalTrademarks=\nOriginalFilename=\nProductName=\nProductVersion=\nAutoIncBuildNr=0\n\n[Unit10]\nFileName=..\\..\\include\\dialog.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit11]\nFileName=..\\..\\include\\frame.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit12]\nFileName=..\\..\\include\\gdi.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit13]\nFileName=..\\..\\include\\wincore.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n[Unit14]\nFileName=..\\..\\include\\winutils.h\nCompileCpp=1\nFolder=Win32++\nCompile=1\nLink=1\nPriority=1000\nOverrideBuildCmd=0\nBuildCmd=\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/Tutorial9.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"Tutorial9\" - Package Owner=<4>\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\n# ** DO NOT EDIT **\n\n# TARGTYPE \"Win32 (x86) Application\" 0x0101\n\nCFG=Tutorial9 - Win32 Debug\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\n!MESSAGE use the Export Makefile command and run\n!MESSAGE \n!MESSAGE NMAKE /f \"Tutorial9.mak\".\n!MESSAGE \n!MESSAGE You can specify a configuration when running NMAKE\n!MESSAGE by defining the macro CFG on the command line. For example:\n!MESSAGE \n!MESSAGE NMAKE /f \"Tutorial9.mak\" CFG=\"Tutorial9 - Win32 Debug\"\n!MESSAGE \n!MESSAGE Possible choices for configuration are:\n!MESSAGE \n!MESSAGE \"Tutorial9 - Win32 Release\" (based on \"Win32 (x86) Application\")\n!MESSAGE \"Tutorial9 - Win32 Debug\" (based on \"Win32 (x86) Application\")\n!MESSAGE \n\n# Begin Project\n# PROP AllowPerConfigDependencies 0\n# PROP Scc_ProjName \"\"\n# PROP Scc_LocalPath \"\"\nCPP=cl.exe\nMTL=midl.exe\nRSC=rc.exe\n\n!IF  \"$(CFG)\" == \"Tutorial9 - Win32 Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"Release\"\n# PROP BASE Intermediate_Dir \"Release\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"Release\"\n# PROP Intermediate_Dir \"Release\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\n# ADD CPP /nologo /W3 /GR /GX /O2 /I \"..\\..\\include\" /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\n# ADD RSC /l 0x409 /i \"..\\..\\include\" /d \"NDEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib /nologo /subsystem:windows /machine:I386\n\n!ELSEIF  \"$(CFG)\" == \"Tutorial9 - Win32 Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"Debug\"\n# PROP BASE Intermediate_Dir \"Debug\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"Debug\"\n# PROP Intermediate_Dir \"Debug\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\n# ADD CPP /nologo /W3 /Gm /GR /GX /ZI /Od /I \"..\\..\\include\" /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\n# ADD RSC /l 0x409 /i \"..\\\\\" /i \"..\\..\\include\" /d \"_DEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\n\n!ENDIF \n\n# Begin Target\n\n# Name \"Tutorial9 - Win32 Release\"\n# Name \"Tutorial9 - Win32 Debug\"\n# Begin Group \"Source Files\"\n\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n# Begin Source File\n\nSOURCE=.\\main.cpp\n# End Source File\n# Begin Source File\n\nSOURCE=.\\Mainfrm.cpp\n# End Source File\n# Begin Source File\n\nSOURCE=.\\ScribbleApp.cpp\n# End Source File\n# Begin Source File\n\nSOURCE=.\\View.cpp\n# End Source File\n# End Group\n# Begin Group \"Header Files\"\n\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\n# Begin Source File\n\nSOURCE=.\\Mainfrm.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\resource.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\ScribbleApp.h\n# End Source File\n# Begin Source File\n\nSOURCE=.\\View.h\n# End Source File\n# End Group\n# Begin Group \"Resource Files\"\n\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n# Begin Source File\n\nSOURCE=.\\Resource.rc\n# End Source File\n# End Group\n# Begin Group \"Win32++\"\n\n# PROP Default_Filter \"\"\n# Begin Source File\n\nSOURCE=..\\..\\include\\controls.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\include\\dialog.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\include\\frame.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\include\\gdi.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\include\\wincore.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\include\\winutils.h\n# End Source File\n# End Group\n# End Target\n# End Project\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/Tutorial9.dsw",
    "content": "Microsoft Developer Studio Workspace File, Format Version 6.00\n# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\n\n###############################################################################\n\nProject: \"Tutorial9\"=\".\\Tutorial9.dsp\" - Package Owner=<4>\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<4>\n{{{\n}}}\n\n###############################################################################\n\nGlobal:\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<3>\n{{{\n}}}\n\n###############################################################################\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/Tutorial9_2003.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 8.00\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial9\", \"Tutorial9_2003.vcproj\", \"{C5973307-05B3-497F-B6D7-5CBD1DE06B72}\"\n\tProjectSection(ProjectDependencies) = postProject\n\tEndProjectSection\nEndProject\nGlobal\n\tGlobalSection(SolutionConfiguration) = preSolution\n\t\tDebug = Debug\n\t\tRelease = Release\n\tEndGlobalSection\n\tGlobalSection(ProjectConfiguration) = postSolution\n\t\t{C5973307-05B3-497F-B6D7-5CBD1DE06B72}.Debug.ActiveCfg = Debug|Win32\n\t\t{C5973307-05B3-497F-B6D7-5CBD1DE06B72}.Debug.Build.0 = Debug|Win32\n\t\t{C5973307-05B3-497F-B6D7-5CBD1DE06B72}.Release.ActiveCfg = Release|Win32\n\t\t{C5973307-05B3-497F-B6D7-5CBD1DE06B72}.Release.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityAddIns) = postSolution\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/Tutorial9_2003.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"7.10\"\n\tName=\"Tutorial9\"\n\tProjectGUID=\"{C5973307-05B3-497F-B6D7-5CBD1DE06B72}\"\n\tSccProjectName=\"\"\n\tSccLocalPath=\"\">\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"/>\n\t</Platforms>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"FALSE\"\n\t\t\tCharacterSet=\"0\">\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tRuntimeTypeInfo=\"TRUE\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial9.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tDebugInformationFormat=\"4\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"comctl32.lib Comdlg32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial9.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial9.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"TRUE\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial9.tlb\"\n\t\t\t\tHeaderFileName=\"\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedWrapperGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAuxiliaryManagedWrapperGeneratorTool\"/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"FALSE\"\n\t\t\tCharacterSet=\"0\">\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"TRUE\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"TRUE\"\n\t\t\t\tRuntimeTypeInfo=\"TRUE\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial9.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"comctl32.lib Comdlg32.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial9.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial9.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"TRUE\"\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial9.tlb\"\n\t\t\t\tHeaderFileName=\"\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedWrapperGeneratorTool\"/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAuxiliaryManagedWrapperGeneratorTool\"/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.cpp\">\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\">\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"resource.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.h\">\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"Resource.rc\">\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\tFilter=\"\">\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\dialog.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\frame.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\gdi.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\">\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\winutils.h\">\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/Tutorial9_2005.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 9.00\n# Visual Studio 2005\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial9\", \"Tutorial9_2005.vcproj\", \"{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/Tutorial9_2005.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"8.00\"\n\tName=\"Tutorial9\"\n\tProjectGUID=\"{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial9.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tRuntimeTypeInfo=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial9.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib comctl32.lib Comdlg32.lib Advapi32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial9.exe\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial9.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial9.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial9.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib comctl32.lib Comdlg32.lib Advapi32.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial9.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial9.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"resource.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\resrc1.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Resource.rc\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\dialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\frame.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\gdi.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\winutils.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/Tutorial9_2008.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 10.00\n# Visual C++ Express 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial9\", \"Tutorial9_2008.vcproj\", \"{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/Tutorial9_2008.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"Tutorial9\"\n\tProjectGUID=\"{9E62AAB0-CF82-4A1D-A448-13B2D487BC0F}\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/Tutorial9.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tRuntimeTypeInfo=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/Tutorial9.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib comctl32.lib Comdlg32.lib\"\n\t\t\t\tOutputFile=\".\\Debug/Tutorial9.exe\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/Tutorial9.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/Tutorial9.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/Tutorial9.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\include\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"user32.lib gdi32.lib comctl32.lib Comdlg32.lib\"\n\t\t\t\tOutputFile=\".\\Release/Tutorial9.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/Tutorial9.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"main.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"0\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tOptimization=\"2\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Mainfrm.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"resource.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\resrc1.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"ScribbleApp.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"View.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"Resource.rc\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Win32++\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\dialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\frame.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\gdi.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\wincore.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\include\\winutils.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/Tutorial9_2010.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 11.00\n# Visual C++ Express 2010\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Tutorial9_2010\", \"Tutorial9_2010.vcxproj\", \"{19CEEA56-2973-4E6A-818E-17DB81197AB5}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{19CEEA56-2973-4E6A-818E-17DB81197AB5}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/Tutorial9_2010.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"main.cpp\" />\n    <ClCompile Include=\"Mainfrm.cpp\" />\n    <ClCompile Include=\"ScribbleApp.cpp\" />\n    <ClCompile Include=\"View.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\..\\include\\dialog.h\" />\n    <ClInclude Include=\"..\\..\\include\\frame.h\" />\n    <ClInclude Include=\"..\\..\\include\\gdi.h\" />\n    <ClInclude Include=\"..\\..\\include\\wincore.h\" />\n    <ClInclude Include=\"..\\..\\include\\winutils.h\" />\n    <ClInclude Include=\"Mainfrm.h\" />\n    <ClInclude Include=\"resource.h\" />\n    <ClInclude Include=\"ScribbleApp.h\" />\n    <ClInclude Include=\"View.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"Resource.rc\" />\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{19CEEA56-2973-4E6A-818E-17DB81197AB5}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>Tutorial9</RootNamespace>\n    <ProjectName>Tutorial9</ProjectName>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <EmbedManifest>false</EmbedManifest>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <EmbedManifest>false</EmbedManifest>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <MinimalRebuild>true</MinimalRebuild>\n      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\n      <Optimization>Disabled</Optimization>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <GenerateManifest>false</GenerateManifest>\n      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n    <ResourceCompile>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ResourceCompile>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <Optimization>MaxSpeed</Optimization>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateManifest>false</GenerateManifest>\n      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n    <ResourceCompile>\n      <AdditionalIncludeDirectories>..\\..\\include</AdditionalIncludeDirectories>\n    </ResourceCompile>\n  </ItemDefinitionGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/Tutorial9_2010.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"Header Files\">\n      <UniqueIdentifier>{4e9baa2c-35df-41b9-a083-03384aa0d0e6}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Resource Files\">\n      <UniqueIdentifier>{359f8b80-1636-4ab9-a0d9-bcad5038c7c7}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Source Files\">\n      <UniqueIdentifier>{623e8af6-9fdd-4c08-b733-d9b09a9bbffc}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Win32++\">\n      <UniqueIdentifier>{ebf34318-2796-4293-813d-10984b94d087}</UniqueIdentifier>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"main.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Mainfrm.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"ScribbleApp.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"View.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"Mainfrm.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"resource.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"ScribbleApp.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"View.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\dialog.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\frame.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\gdi.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\wincore.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\include\\winutils.h\">\n      <Filter>Win32++</Filter>\n    </ClInclude>\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"Resource.rc\">\n      <Filter>Resource Files</Filter>\n    </ResourceCompile>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/View.cpp",
    "content": "//////////////////////////////////////////////\n// View.cpp\n//  Definitions for the CView class\n\n#include \"view.h\"\n#include \"GDI.h\"\n#include \"file.h\"\n#include \"resource.h\"\n\nusing namespace std;\n\nCView::CView() : m_PenColor(RGB(0,0,0))\n{\n\tm_Brush.CreateSolidBrush(RGB(255,255,230));\n}\n\nCView::~CView()\n{\n}\n\nvoid CView::ClearPoints()\n{\n\tm_points.clear();\n\tInvalidate();\n}\n\nvoid CView::DrawLine(int x, int y)\n{\n\tCClientDC dcClient(this);\n\tdcClient.CreatePen(PS_SOLID, 1, m_points.back().color);\n\tdcClient.MoveTo(m_points.back().x, m_points.back().y);\n\tdcClient.LineTo(x, y);\n}\n\nvoid CView::OnDraw(CDC* pDC)\n{\n\tif (m_points.size() > 0)\n\t{\n\t\tbool bDraw = false;  //Start with the pen up\n\t\tfor (unsigned int i = 0 ; i < m_points.size(); i++)\n\t\t{\n\t\t\tpDC->CreatePen(PS_SOLID, 1, m_points[i].color);\n\t\t\tif (bDraw)\n\t\t\t\tpDC->LineTo(m_points[i].x, m_points[i].y);\n\t\t\telse\n\t\t\t\tpDC->MoveTo(m_points[i].x, m_points[i].y);\n\t\t\t\n\t\t\tbDraw = m_points[i].PenDown;\n\t\t}\n\t}\n}\n\nvoid CView::PreCreate(CREATESTRUCT &cs)\n{\n\t// Set the extra style to provide a sunken effect\n\tcs.dwExStyle = WS_EX_CLIENTEDGE;\n}\n\nvoid CView::PreRegisterClass(WNDCLASS &wc)\n{\n\t// Set the background brush, class name and cursor\n\twc.hbrBackground = m_Brush;\n\twc.lpszClassName = _T(\"Scribble Window\");\n\twc.hCursor = ::LoadCursor(GetApp()->GetInstanceHandle(), MAKEINTRESOURCE(IDC_CURSOR1));\n}\n\nBOOL CView::FileOpen(LPCTSTR szFilename)\n{\n\t// empty the PlotPoint vector\n\tm_points.clear();\n\tDWORD nBytesRead;\n\tBOOL bResult = FALSE;\n\n\t// Create a handle to the file\n\tCFile File;\n\tif (File.Open(szFilename, OPEN_EXISTING))\n\t{\n\t\tdo\n\t\t{\n\t\t\tPlotPoint pp;\n\t\t\tnBytesRead = File.Read(&pp, sizeof(PlotPoint));\n\t\t\tif (nBytesRead == sizeof(PlotPoint))\n\t\t\t\tm_points.push_back(pp);\t\n\n\t\t} while (nBytesRead == sizeof(PlotPoint));\n\n\t\tif ((0 != nBytesRead) || (m_points.empty()))\n\t\t{\n\t\t\t// Failed to read all of the file\n\t\t\tm_points.clear();\n\t\t\t::MessageBox (0, _T(\"Invalid data in file\"), _T(\"Error\"), MB_ICONEXCLAMATION | MB_OK);\n\t\t}\n\t\telse\n\t\t\tbResult = TRUE;\n\n\t}\n\telse\n\t{\n\t\ttString tsErrMsg = _T(\"Failed to open file \");\n\t\ttsErrMsg += szFilename;\n\t\t::MessageBox (0, tsErrMsg.c_str(), _T(\"Error\"), MB_ICONEXCLAMATION | MB_OK);\n\t}\n\n\tInvalidate();\n\treturn bResult;\n}\n\nBOOL CView::FileSave(LPCTSTR szFilename)\n{\n\tBOOL bResult = TRUE;\n\tCFile hFile;\n\tif (!hFile.Open(szFilename, CREATE_ALWAYS))\n\t{\n\t\t::MessageBox (0, _T(\"Failed to open file for writing\"), _T(\"Error\"), MB_ICONEXCLAMATION | MB_OK);\n\t\tbResult = FALSE;\n\t}\n\t\n\tif (bResult)\n\t{\n\t\t// Write the file\n\t\tfor (size_t i = 0; i < m_points.size(); ++i)\n\t\t{\n\t\t\tif (!hFile.Write(&m_points[i], sizeof(PlotPoint)))\n\t\t\t{\n\t\t\t\t::MessageBox (0, _T(\"Error while writing to file\"), _T(\"Error\"), MB_ICONEXCLAMATION | MB_OK);\n\t\t\t\tbResult = FALSE;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Verify file length\n\t\tif (hFile.GetLength() != m_points.size() * sizeof(PlotPoint))\n\t\t{\n\t\t\t::MessageBox (0, _T(\"Error while writing to file\"), _T(\"Error\"), MB_ICONEXCLAMATION | MB_OK);\n\t\t\tbResult = FALSE;\n\t\t}\n\t}\n\n\treturn bResult;\n}\n\nvoid CView::SetPen(COLORREF color)\n{\n\tm_PenColor = color;\n}\n\nvoid CView::StorePoint(int x, int y, bool PenDown)\n{\n\tPlotPoint P1;\n\tP1.x = x;\n\tP1.y = y;\n\tP1.PenDown = PenDown;\n\tP1.color = m_PenColor;\n\n\tm_points.push_back(P1); //Add the point to the vector\n}\n\nvoid CView::OnLButtonDown(LPARAM lParam)\n{\n \t// Capture mouse input.\n \tSetCapture();\n\n\tStorePoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), true);\n}\n\nvoid CView::OnLButtonUp(LPARAM lParam)\n{\n\t{\n\t\t//Release the capture on the mouse\n\t\tReleaseCapture();\n\n\t\tStorePoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), false);\n\t}\n}\n\nvoid CView::OnMouseMove(WPARAM wParam, LPARAM lParam)\n{\n\t// hold down the left mouse button and move mouse to draw lines.\n\tif ( (wParam & MK_LBUTTON) && (GetCapture() == this) )\n\t{\n\t\tDrawLine(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));\n\t\tStorePoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), true);\n\t}\n}\n\nLRESULT CView::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n\tswitch (uMsg)\n\t{\n\tcase WM_LBUTTONDOWN:\n\t\tOnLButtonDown(lParam);\n\t\tbreak;\n\n\tcase WM_MOUSEMOVE:\n\t\tOnMouseMove(wParam, lParam);\n        break;\n\n    case WM_LBUTTONUP:\n\t\tOnLButtonUp(lParam);\n\t\tbreak;\n\t}\n\n\t//Use the default message handling for remaining messages\n\treturn WndProcDefault(uMsg, wParam, lParam);\n}\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/View.h",
    "content": "//////////////////////////////////////////////////////\n// View.h\n//  Declaration of the CView class\n\n#ifndef VIEW_H\n#define VIEW_H\n\n\n#include \"WinCore.h\"\n#include <vector>\n\nusing std::vector;\n\n\nclass CView : public CWnd\n{\npublic:\n\tCView();\n\tvirtual ~CView();\n\tvirtual void ClearPoints();\n\tvirtual BOOL FileOpen(LPCTSTR szFilename);\n\tvirtual BOOL FileSave(LPCTSTR szFilename);\n\tvirtual void SetPen(COLORREF Color);\n\nprotected:\n\tvirtual void OnDraw(CDC* pDC);\n\tvirtual void PreCreate(CREATESTRUCT &cs);\n\tvirtual void PreRegisterClass(WNDCLASS &wc);\n\tvirtual LRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);\n\nprivate:\n\tstruct PlotPoint\n\t{\n\t\tint x;\n\t\tint y;\n\t\tbool PenDown;\n\t\tCOLORREF color;\n\t};\n\n\tvoid DrawLine(int x, int y);\n\tvoid OnLButtonDown(LPARAM lParam);\n\tvoid OnLButtonUp(LPARAM lParam);\n\tvoid OnMouseMove(WPARAM wParam, LPARAM lParam);\n\tvoid StorePoint(int x, int y, bool PenDown);\n\n\tCBrush m_Brush;\n\tvector<PlotPoint> m_points;\t// Points of lines to draw\n\tCOLORREF m_PenColor;\n};\n\n\n#endif // CVIEW_H\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/main.cpp",
    "content": "////////////////////////////////\n// Main.cpp\n\n// Add the Win32++\\include  directory to project's additional include directories\n// Add the Win32++\\include  directory to project's additional resource directories\n#include \"ScribbleApp.h\"\n\n\nint APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, int)\n{\n    // Start Win32++\n    CScribbleApp MyApp;\n\n\t// Run the application\n    return MyApp.Run();\n}\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/res/Win32++.manifest",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\">\n<assemblyIdentity\n    version=\"1.0.0.0\"\n    processorArchitecture=\"*\"\n    name=\"XP Beautifier\"\n    type=\"win32\"\n/>\n<description>Adds XP Theme style to any program</description>\n<dependency>\n    <dependentAssembly>\n        <assemblyIdentity\n            type=\"win32\"\n            name=\"Microsoft.Windows.Common-Controls\"\n            version=\"6.0.0.0\"\n            processorArchitecture=\"*\"\n            publicKeyToken=\"6595b64144ccf1df\"\n            language=\"*\"\n        />\n    </dependentAssembly>\n</dependency>\n</assembly>\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/resource.h",
    "content": "//{{NO_DEPENDENCIES}}\n// Microsoft Visual C++ generated include file.\n// Used by Resource.rc\n//\n\n// include the Resource IDs defined by Win32++\n#include \"default_resource.h\"\n\n//Resource IDs for menu items and ToolBar items\n#define IDM_FILE_NEW                    101\n#define IDM_FILE_OPEN                   102\n#define IDM_FILE_SAVE                   103\n#define IDM_FILE_SAVEAS                 104\n#define IDM_FILE_PRINT                  105\n#define IDM_FILE_CLOSE                  106\n#define IDM_FILE_EXIT                   107\n#define IDM_EDIT_UNDO                   110\n#define IDM_EDIT_REDO                   111\n#define IDM_EDIT_CUT                    112\n#define IDM_EDIT_COPY                   113\n#define IDM_EDIT_PASTE                  114\n#define IDM_EDIT_DELETE                 115\n#define IDM_HELP_ABOUT                  120\n\n#define IDM_PEN_RED                     130\n#define IDM_PEN_BLUE                    131\n#define IDM_PEN_GREEN                   132\n#define IDM_PEN_BLACK                   133\n\n//Resource ID for the cursor\n#define IDC_CURSOR1                     140\n\n// Next default values for new objects\n// \n#ifdef APSTUDIO_INVOKED\n#ifndef APSTUDIO_READONLY_SYMBOLS\n#define _APS_NO_MFC                     1\n#define _APS_NEXT_RESOURCE_VALUE        149\n#define _APS_NEXT_COMMAND_VALUE         32771\n#define _APS_NEXT_CONTROL_VALUE         1000\n#define _APS_NEXT_SYMED_VALUE           150\n#endif\n#endif\n\n"
  },
  {
    "path": "external/win32cpp/tutorials/Tutorial9/targetver.h",
    "content": "///////////////////////////////////////////////////////////////////////\n// targetver.h is used to define the Windows API macros that target the \n// version of the Windows operating system you wish to support.\n\n\n// For Windows 95\n//#define WINVER          0x0400\n//#define _WIN32_WINDOWS  0x0400\n//#define _WIN32_IE       0x0300\n\n// For Windows 98\n#define WINVER          0x0410\n#define _WIN32_WINDOWS  0x0410\n#define _WIN32_IE       0x0401\n\n// For Windows NT4\n//#define WINVER          0x0400\n//#define _WIN32_WINNT    0x0400\n//#define _WIN32_IE       0x0200\n//#define NTDDI_VERSION   0x05000000\n\n// For Windows ME\n//#define WINVER          0x0500\n//#define _WIN32_WINNT    0x0500\n//#define _WIN32_IE       0x0500\n\n// For Windows 2000\n//#define WINVER          0x0500\n//#define _WIN32_WINNT    0x0500\n//#define _WIN32_IE       0x0500\n//#define NTDDI_VERSION   0x05000000\n\n// For Windows XP\n//#define WINVER          0x0501\n//#define _WIN32_WINNT    0x0501\n//#define _WIN32_IE       0x0501\n//#define NTDDI_VERSION   0x05010000\n\n// For Windows Vista\n//#define WINVER          0x0600\n//#define _WIN32_WINNT    0x0600\n//#define _WIN32_IE       0x0600\n//#define NTDDI_VERSION   0x06000000\n\n// For Windows 7\n//#define WINVER          0x0601\n//#define _WIN32_WINNT    0x0601\n//#define _WIN32_IE       0x0601\n//#define NTDDI_VERSION   0x06010000\n\n\n// Users of Visual Studio 10 can do this instead\n// #include \"SDKDDKver.h\"\n"
  },
  {
    "path": "external/zlib/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 2.4.4)\nset(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)\n\nproject(zlib C)\n\nif(NOT DEFINED BUILD_SHARED_LIBS)\n    option(BUILD_SHARED_LIBS \"Build a shared library form of zlib\" ON)\nendif()\n\ninclude(CheckTypeSize)\ninclude(CheckFunctionExists)\ninclude(CheckIncludeFile)\ninclude(CheckCSourceCompiles)\nenable_testing()\n\ncheck_include_file(sys/types.h HAVE_SYS_TYPES_H)\ncheck_include_file(stdint.h    HAVE_STDINT_H)\ncheck_include_file(stddef.h    HAVE_STDDEF_H)\n\n#\n# Check to see if we have large file support\n#\nset(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1)\n# We add these other definitions here because CheckTypeSize.cmake\n# in CMake 2.4.x does not automatically do so and we want\n# compatibility with CMake 2.4.x.\nif(HAVE_SYS_TYPES_H)\n    list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_SYS_TYPES_H)\nendif()\nif(HAVE_STDINT_H)\n    list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDINT_H)\nendif()\nif(HAVE_STDDEF_H)\n    list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDDEF_H)\nendif()\ncheck_type_size(off64_t OFF64_T)\nif(HAVE_OFF64_T)\n   add_definitions(-D_LARGEFILE64_SOURCE=1)\nendif()\nset(CMAKE_REQUIRED_DEFINITIONS) # clear variable\n\n#\n# Check for fseeko\n#\ncheck_function_exists(fseeko HAVE_FSEEKO)\nif(NOT HAVE_FSEEKO)\n    add_definitions(-DNO_FSEEKO)\nendif()\n\n#\n# Check for unistd.h\n#\ncheck_include_file(unistd.h Z_HAVE_UNISTD_H)\n\nif(MSVC)\n    set(CMAKE_DEBUG_POSTFIX \"d\")\n    add_definitions(-D_CRT_SECURE_NO_DEPRECATE)\n    add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE)\nendif()\n\nif(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)\n    # If we're doing an out of source build and the user has a zconf.h\n    # in their source tree...\n    if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h)\n        message(FATAL_ERROR\n            \"You must remove ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h \"\n            \"from the source tree.  This file is included with zlib \"\n            \"but CMake generates this file for you automatically \"\n            \"in the build directory.\")\n  endif()\nendif()\n\nconfigure_file(${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.cmakein\n               ${CMAKE_CURRENT_BINARY_DIR}/zconf.h @ONLY)\ninclude_directories(${CMAKE_CURRENT_BINARY_DIR})\n\n\n#============================================================================\n# zlib\n#============================================================================\n\nset(ZLIB_PUBLIC_HDRS\n    ${CMAKE_CURRENT_BINARY_DIR}/zconf.h\n    zlib.h\n)\nset(ZLIB_PRIVATE_HDRS\n    crc32.h\n    deflate.h\n    gzguts.h\n    inffast.h\n    inffixed.h\n    inflate.h\n    inftrees.h\n    trees.h\n    zutil.h\n)\nset(ZLIB_SRCS\n    adler32.c\n    compress.c\n    crc32.c\n    deflate.c\n    gzclose.c\n    gzlib.c\n    gzread.c\n    gzwrite.c\n    inflate.c\n    infback.c\n    inftrees.c\n    inffast.c\n    trees.c\n    uncompr.c\n    zutil.c\n    win32/zlib1.rc\n)\n\n# parse the full version number from zlib.h and include in ZLIB_FULL_VERSION\nfile(READ ${CMAKE_CURRENT_SOURCE_DIR}/zlib.h _zlib_h_contents)\nstring(REGEX REPLACE \".*#define[ \\t]+ZLIB_VERSION[ \\t]+\\\"([0-9A-Za-z.]+)\\\".*\"\n    \"\\\\1\" ZLIB_FULL_VERSION ${_zlib_h_contents})\n\nif(MINGW)\n    # This gets us DLL resource information when compiling on MinGW.\n    add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj\n                       COMMAND windres.exe\n                            -D GCC_WINDRES\n                            -I ${CMAKE_CURRENT_SOURCE_DIR}\n                            -I ${CMAKE_CURRENT_BINARY_DIR}\n                            -o ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj\n                            -i ${CMAKE_CURRENT_SOURCE_DIR}/win32/zlib1.rc)\n    set(ZLIB_SRCS ${ZLIB_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj)\nendif(MINGW)\n\nadd_library(zlib ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})\nset_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL)\n\nset_target_properties(zlib PROPERTIES SOVERSION 1)\n\nif(NOT CYGWIN)\n    # This property causes shared libraries on Linux to have the full version\n    # encoded into their final filename.  We disable this on Cygwin because\n    # it causes cygz-${ZLIB_FULL_VERSION}.dll to be created when cygz.dll\n    # seems to be the default.\n    #\n    # This has no effect with MSVC, on that platform the version info for\n    # the DLL comes from the resource file win32/zlib1.rc\n    set_target_properties(zlib PROPERTIES VERSION ${ZLIB_FULL_VERSION})\nendif()\n\nif(UNIX)\n    # On unix-like platforms the library is almost always called libz\n   set_target_properties(zlib PROPERTIES OUTPUT_NAME z)\nelseif(BUILD_SHARED_LIBS AND WIN32)\n    # Creates zlib1.dll when building shared library version\n    set_target_properties(zlib PROPERTIES SUFFIX \"1.dll\")\nendif()\n\nif(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )\n    install(TARGETS zlib\n        RUNTIME DESTINATION bin\n        ARCHIVE DESTINATION lib\n        LIBRARY DESTINATION lib )\nendif()\nif(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL )\n    install(FILES ${ZLIB_PUBLIC_HDRS} DESTINATION include)\nendif()\nif(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )\n    install(FILES zlib.3 DESTINATION share/man/man3)\nendif()\n\n#============================================================================\n# Example binaries\n#============================================================================\n\nadd_executable(example example.c)\ntarget_link_libraries(example zlib)\nadd_test(example example)\n\nadd_executable(minigzip minigzip.c)\ntarget_link_libraries(minigzip zlib)\n\nif(HAVE_OFF64_T)\n    add_executable(example64 example.c)\n    target_link_libraries(example64 zlib)\n    set_target_properties(example64 PROPERTIES COMPILE_FLAGS \"-D_FILE_OFFSET_BITS=64\")\n    add_test(example64 example64)\n\n    add_executable(minigzip64 minigzip.c)\n    target_link_libraries(minigzip64 zlib)\n    set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS \"-D_FILE_OFFSET_BITS=64\")\nendif()\n"
  },
  {
    "path": "external/zlib/ChangeLog",
    "content": "\n                ChangeLog file for zlib\n\nChanges in 1.2.5 (19 Apr 2010)\n- Disable visibility attribute in win32/Makefile.gcc [Bar-Lev]\n- Default to libdir as sharedlibdir in configure [Nieder]\n- Update copyright dates on modified source files\n- Update trees.c to be able to generate modified trees.h\n- Exit configure for MinGW, suggesting win32/Makefile.gcc\n\nChanges in 1.2.4.5 (18 Apr 2010)\n- Set sharedlibdir in configure [Torok]\n- Set LDFLAGS in Makefile.in [Bar-Lev]\n- Avoid mkdir objs race condition in Makefile.in [Bowler]\n- Add ZLIB_INTERNAL in front of internal inter-module functions and arrays\n- Define ZLIB_INTERNAL to hide internal functions and arrays for GNU C\n- Don't use hidden attribute when it is a warning generator (e.g. Solaris)\n\nChanges in 1.2.4.4 (18 Apr 2010)\n- Fix CROSS_PREFIX executable testing, CHOST extract, mingw* [Torok]\n- Undefine _LARGEFILE64_SOURCE in zconf.h if it is zero, but not if empty\n- Try to use bash or ksh regardless of functionality of /bin/sh\n- Fix configure incompatibility with NetBSD sh\n- Remove attempt to run under bash or ksh since have better NetBSD fix\n- Fix win32/Makefile.gcc for MinGW [Bar-Lev]\n- Add diagnostic messages when using CROSS_PREFIX in configure\n- Added --sharedlibdir option to configure [Weigelt]\n- Use hidden visibility attribute when available [Frysinger]\n\nChanges in 1.2.4.3 (10 Apr 2010)\n- Only use CROSS_PREFIX in configure for ar and ranlib if they exist\n- Use CROSS_PREFIX for nm [Bar-Lev]\n- Assume _LARGEFILE64_SOURCE defined is equivalent to true\n- Avoid use of undefined symbols in #if with && and ||\n- Make *64 prototypes in gzguts.h consistent with functions\n- Add -shared load option for MinGW in configure [Bowler]\n- Move z_off64_t to public interface, use instead of off64_t\n- Remove ! from shell test in configure (not portable to Solaris)\n- Change +0 macro tests to -0 for possibly increased portability\n\nChanges in 1.2.4.2 (9 Apr 2010)\n- Add consistent carriage returns to readme.txt's in masmx86 and masmx64\n- Really provide prototypes for *64 functions when building without LFS\n- Only define unlink() in minigzip.c if unistd.h not included\n- Update README to point to contrib/vstudio project files\n- Move projects/vc6 to old/ and remove projects/\n- Include stdlib.h in minigzip.c for setmode() definition under WinCE\n- Clean up assembler builds in win32/Makefile.msc [Rowe]\n- Include sys/types.h for Microsoft for off_t definition\n- Fix memory leak on error in gz_open()\n- Symbolize nm as $NM in configure [Weigelt]\n- Use TEST_LDSHARED instead of LDSHARED to link test programs [Weigelt]\n- Add +0 to _FILE_OFFSET_BITS and _LFS64_LARGEFILE in case not defined\n- Fix bug in gzeof() to take into account unused input data\n- Avoid initialization of structures with variables in puff.c\n- Updated win32/README-WIN32.txt [Rowe]\n\nChanges in 1.2.4.1 (28 Mar 2010)\n- Remove the use of [a-z] constructs for sed in configure [gentoo 310225]\n- Remove $(SHAREDLIB) from LIBS in Makefile.in [Creech]\n- Restore \"for debugging\" comment on sprintf() in gzlib.c\n- Remove fdopen for MVS from gzguts.h\n- Put new README-WIN32.txt in win32 [Rowe]\n- Add check for shell to configure and invoke another shell if needed\n- Fix big fat stinking bug in gzseek() on uncompressed files\n- Remove vestigial F_OPEN64 define in zutil.h\n- Set and check the value of _LARGEFILE_SOURCE and _LARGEFILE64_SOURCE\n- Avoid errors on non-LFS systems when applications define LFS macros\n- Set EXE to \".exe\" in configure for MINGW [Kahle]\n- Match crc32() in crc32.c exactly to the prototype in zlib.h [Sherrill]\n- Add prefix for cross-compilation in win32/makefile.gcc [Bar-Lev]\n- Add DLL install in win32/makefile.gcc [Bar-Lev]\n- Allow Linux* or linux* from uname in configure [Bar-Lev]\n- Allow ldconfig to be redefined in configure and Makefile.in [Bar-Lev]\n- Add cross-compilation prefixes to configure [Bar-Lev]\n- Match type exactly in gz_load() invocation in gzread.c\n- Match type exactly of zcalloc() in zutil.c to zlib.h alloc_func\n- Provide prototypes for *64 functions when building zlib without LFS\n- Don't use -lc when linking shared library on MinGW\n- Remove errno.h check in configure and vestigial errno code in zutil.h\n\nChanges in 1.2.4 (14 Mar 2010)\n- Fix VER3 extraction in configure for no fourth subversion\n- Update zlib.3, add docs to Makefile.in to make .pdf out of it\n- Add zlib.3.pdf to distribution\n- Don't set error code in gzerror() if passed pointer is NULL\n- Apply destination directory fixes to CMakeLists.txt [Lowman]\n- Move #cmakedefine's to a new zconf.in.cmakein\n- Restore zconf.h for builds that don't use configure or cmake\n- Add distclean to dummy Makefile for convenience\n- Update and improve INDEX, README, and FAQ\n- Update CMakeLists.txt for the return of zconf.h [Lowman]\n- Update contrib/vstudio/vc9 and vc10 [Vollant]\n- Change libz.dll.a back to libzdll.a in win32/Makefile.gcc\n- Apply license and readme changes to contrib/asm686 [Raiter]\n- Check file name lengths and add -c option in minigzip.c [Li]\n- Update contrib/amd64 and contrib/masmx86/ [Vollant]\n- Avoid use of \"eof\" parameter in trees.c to not shadow library variable\n- Update make_vms.com for removal of zlibdefs.h [Zinser]\n- Update assembler code and vstudio projects in contrib [Vollant]\n- Remove outdated assembler code contrib/masm686 and contrib/asm586\n- Remove old vc7 and vc8 from contrib/vstudio\n- Update win32/Makefile.msc, add ZLIB_VER_SUBREVISION [Rowe]\n- Fix memory leaks in gzclose_r() and gzclose_w(), file leak in gz_open()\n- Add contrib/gcc_gvmat64 for longest_match and inflate_fast [Vollant]\n- Remove *64 functions from win32/zlib.def (they're not 64-bit yet)\n- Fix bug in void-returning vsprintf() case in gzwrite.c\n- Fix name change from inflate.h in contrib/inflate86/inffas86.c\n- Check if temporary file exists before removing in make_vms.com [Zinser]\n- Fix make install and uninstall for --static option\n- Fix usage of _MSC_VER in gzguts.h and zutil.h [Truta]\n- Update readme.txt in contrib/masmx64 and masmx86 to assemble\n\nChanges in 1.2.3.9 (21 Feb 2010)\n- Expunge gzio.c\n- Move as400 build information to old\n- Fix updates in contrib/minizip and contrib/vstudio\n- Add const to vsnprintf test in configure to avoid warnings [Weigelt]\n- Delete zconf.h (made by configure) [Weigelt]\n- Change zconf.in.h to zconf.h.in per convention [Weigelt]\n- Check for NULL buf in gzgets()\n- Return empty string for gzgets() with len == 1 (like fgets())\n- Fix description of gzgets() in zlib.h for end-of-file, NULL return\n- Update minizip to 1.1 [Vollant]\n- Avoid MSVC loss of data warnings in gzread.c, gzwrite.c\n- Note in zlib.h that gzerror() should be used to distinguish from EOF\n- Remove use of snprintf() from gzlib.c\n- Fix bug in gzseek()\n- Update contrib/vstudio, adding vc9 and vc10 [Kuno, Vollant]\n- Fix zconf.h generation in CMakeLists.txt [Lowman]\n- Improve comments in zconf.h where modified by configure\n\nChanges in 1.2.3.8 (13 Feb 2010)\n- Clean up text files (tabs, trailing whitespace, etc.) [Oberhumer]\n- Use z_off64_t in gz_zero() and gz_skip() to match state->skip\n- Avoid comparison problem when sizeof(int) == sizeof(z_off64_t)\n- Revert to Makefile.in from 1.2.3.6 (live with the clutter)\n- Fix missing error return in gzflush(), add zlib.h note\n- Add *64 functions to zlib.map [Levin]\n- Fix signed/unsigned comparison in gz_comp()\n- Use SFLAGS when testing shared linking in configure\n- Add --64 option to ./configure to use -m64 with gcc\n- Fix ./configure --help to correctly name options\n- Have make fail if a test fails [Levin]\n- Avoid buffer overrun in contrib/masmx64/gvmat64.asm [Simpson]\n- Remove assembler object files from contrib\n\nChanges in 1.2.3.7 (24 Jan 2010)\n- Always gzopen() with O_LARGEFILE if available\n- Fix gzdirect() to work immediately after gzopen() or gzdopen()\n- Make gzdirect() more precise when the state changes while reading\n- Improve zlib.h documentation in many places\n- Catch memory allocation failure in gz_open()\n- Complete close operation if seek forward in gzclose_w() fails\n- Return Z_ERRNO from gzclose_r() if close() fails\n- Return Z_STREAM_ERROR instead of EOF for gzclose() being passed NULL\n- Return zero for gzwrite() errors to match zlib.h description\n- Return -1 on gzputs() error to match zlib.h description\n- Add zconf.in.h to allow recovery from configure modification [Weigelt]\n- Fix static library permissions in Makefile.in [Weigelt]\n- Avoid warnings in configure tests that hide functionality [Weigelt]\n- Add *BSD and DragonFly to Linux case in configure [gentoo 123571]\n- Change libzdll.a to libz.dll.a in win32/Makefile.gcc [gentoo 288212]\n- Avoid access of uninitialized data for first inflateReset2 call [Gomes]\n- Keep object files in subdirectories to reduce the clutter somewhat\n- Remove default Makefile and zlibdefs.h, add dummy Makefile\n- Add new external functions to Z_PREFIX, remove duplicates, z_z_ -> z_\n- Remove zlibdefs.h completely -- modify zconf.h instead\n\nChanges in 1.2.3.6 (17 Jan 2010)\n- Avoid void * arithmetic in gzread.c and gzwrite.c\n- Make compilers happier with const char * for gz_error message\n- Avoid unused parameter warning in inflate.c\n- Avoid signed-unsigned comparison warning in inflate.c\n- Indent #pragma's for traditional C\n- Fix usage of strwinerror() in glib.c, change to gz_strwinerror()\n- Correct email address in configure for system options\n- Update make_vms.com and add make_vms.com to contrib/minizip [Zinser]\n- Update zlib.map [Brown]\n- Fix Makefile.in for Solaris 10 make of example64 and minizip64 [Torok]\n- Apply various fixes to CMakeLists.txt [Lowman]\n- Add checks on len in gzread() and gzwrite()\n- Add error message for no more room for gzungetc()\n- Remove zlib version check in gzwrite()\n- Defer compression of gzprintf() result until need to\n- Use snprintf() in gzdopen() if available\n- Remove USE_MMAP configuration determination (only used by minigzip)\n- Remove examples/pigz.c (available separately)\n- Update examples/gun.c to 1.6\n\nChanges in 1.2.3.5 (8 Jan 2010)\n- Add space after #if in zutil.h for some compilers\n- Fix relatively harmless bug in deflate_fast() [Exarevsky]\n- Fix same problem in deflate_slow()\n- Add $(SHAREDLIBV) to LIBS in Makefile.in [Brown]\n- Add deflate_rle() for faster Z_RLE strategy run-length encoding\n- Add deflate_huff() for faster Z_HUFFMAN_ONLY encoding\n- Change name of \"write\" variable in inffast.c to avoid library collisions\n- Fix premature EOF from gzread() in gzio.c [Brown]\n- Use zlib header window size if windowBits is 0 in inflateInit2()\n- Remove compressBound() call in deflate.c to avoid linking compress.o\n- Replace use of errno in gz* with functions, support WinCE [Alves]\n- Provide alternative to perror() in minigzip.c for WinCE [Alves]\n- Don't use _vsnprintf on later versions of MSVC [Lowman]\n- Add CMake build script and input file [Lowman]\n- Update contrib/minizip to 1.1 [Svensson, Vollant]\n- Moved nintendods directory from contrib to .\n- Replace gzio.c with a new set of routines with the same functionality\n- Add gzbuffer(), gzoffset(), gzclose_r(), gzclose_w() as part of above\n- Update contrib/minizip to 1.1b\n- Change gzeof() to return 0 on error instead of -1 to agree with zlib.h\n\nChanges in 1.2.3.4 (21 Dec 2009)\n- Use old school .SUFFIXES in Makefile.in for FreeBSD compatibility\n- Update comments in configure and Makefile.in for default --shared\n- Fix test -z's in configure [Marquess]\n- Build examplesh and minigzipsh when not testing\n- Change NULL's to Z_NULL's in deflate.c and in comments in zlib.h\n- Import LDFLAGS from the environment in configure\n- Fix configure to populate SFLAGS with discovered CFLAGS options\n- Adapt make_vms.com to the new Makefile.in [Zinser]\n- Add zlib2ansi script for C++ compilation [Marquess]\n- Add _FILE_OFFSET_BITS=64 test to make test (when applicable)\n- Add AMD64 assembler code for longest match to contrib [Teterin]\n- Include options from $SFLAGS when doing $LDSHARED\n- Simplify 64-bit file support by introducing z_off64_t type\n- Make shared object files in objs directory to work around old Sun cc\n- Use only three-part version number for Darwin shared compiles\n- Add rc option to ar in Makefile.in for when ./configure not run\n- Add -WI,-rpath,. to LDFLAGS for OSF 1 V4*\n- Set LD_LIBRARYN32_PATH for SGI IRIX shared compile\n- Protect against _FILE_OFFSET_BITS being defined when compiling zlib\n- Rename Makefile.in targets allstatic to static and allshared to shared\n- Fix static and shared Makefile.in targets to be independent\n- Correct error return bug in gz_open() by setting state [Brown]\n- Put spaces before ;;'s in configure for better sh compatibility\n- Add pigz.c (parallel implementation of gzip) to examples/\n- Correct constant in crc32.c to UL [Leventhal]\n- Reject negative lengths in crc32_combine()\n- Add inflateReset2() function to work like inflateEnd()/inflateInit2()\n- Include sys/types.h for _LARGEFILE64_SOURCE [Brown]\n- Correct typo in doc/algorithm.txt [Janik]\n- Fix bug in adler32_combine() [Zhu]\n- Catch missing-end-of-block-code error in all inflates and in puff\n    Assures that random input to inflate eventually results in an error\n- Added enough.c (calculation of ENOUGH for inftrees.h) to examples/\n- Update ENOUGH and its usage to reflect discovered bounds\n- Fix gzerror() error report on empty input file [Brown]\n- Add ush casts in trees.c to avoid pedantic runtime errors\n- Fix typo in zlib.h uncompress() description [Reiss]\n- Correct inflate() comments with regard to automatic header detection\n- Remove deprecation comment on Z_PARTIAL_FLUSH (it stays)\n- Put new version of gzlog (2.0) in examples with interruption recovery\n- Add puff compile option to permit invalid distance-too-far streams\n- Add puff TEST command options, ability to read piped input\n- Prototype the *64 functions in zlib.h when _FILE_OFFSET_BITS == 64, but\n  _LARGEFILE64_SOURCE not defined\n- Fix Z_FULL_FLUSH to truly erase the past by resetting s->strstart\n- Fix deflateSetDictionary() to use all 32K for output consistency\n- Remove extraneous #define MIN_LOOKAHEAD in deflate.c (in deflate.h)\n- Clear bytes after deflate lookahead to avoid use of uninitialized data\n- Change a limit in inftrees.c to be more transparent to Coverity Prevent\n- Update win32/zlib.def with exported symbols from zlib.h\n- Correct spelling error in zlib.h [Willem]\n- Allow Z_BLOCK for deflate() to force a new block\n- Allow negative bits in inflatePrime() to delete existing bit buffer\n- Add Z_TREES flush option to inflate() to return at end of trees\n- Add inflateMark() to return current state information for random access\n- Add Makefile for NintendoDS to contrib [Costa]\n- Add -w in configure compile tests to avoid spurious warnings [Beucler]\n- Fix typos in zlib.h comments for deflateSetDictionary()\n- Fix EOF detection in transparent gzread() [Maier]\n\nChanges in 1.2.3.3 (2 October 2006)\n- Make --shared the default for configure, add a --static option\n- Add compile option to permit invalid distance-too-far streams\n- Add inflateUndermine() function which is required to enable above\n- Remove use of \"this\" variable name for C++ compatibility [Marquess]\n- Add testing of shared library in make test, if shared library built\n- Use ftello() and fseeko() if available instead of ftell() and fseek()\n- Provide two versions of all functions that use the z_off_t type for\n  binary compatibility -- a normal version and a 64-bit offset version,\n  per the Large File Support Extension when _LARGEFILE64_SOURCE is\n  defined; use the 64-bit versions by default when _FILE_OFFSET_BITS\n  is defined to be 64\n- Add a --uname= option to configure to perhaps help with cross-compiling\n\nChanges in 1.2.3.2 (3 September 2006)\n- Turn off silly Borland warnings [Hay]\n- Use off64_t and define _LARGEFILE64_SOURCE when present\n- Fix missing dependency on inffixed.h in Makefile.in\n- Rig configure --shared to build both shared and static [Teredesai, Truta]\n- Remove zconf.in.h and instead create a new zlibdefs.h file\n- Fix contrib/minizip/unzip.c non-encrypted after encrypted [Vollant]\n- Add treebuild.xml (see http://treebuild.metux.de/) [Weigelt]\n\nChanges in 1.2.3.1 (16 August 2006)\n- Add watcom directory with OpenWatcom make files [Daniel]\n- Remove #undef of FAR in zconf.in.h for MVS [Fedtke]\n- Update make_vms.com [Zinser]\n- Use -fPIC for shared build in configure [Teredesai, Nicholson]\n- Use only major version number for libz.so on IRIX and OSF1 [Reinholdtsen]\n- Use fdopen() (not _fdopen()) for Interix in zutil.h [Bck]\n- Add some FAQ entries about the contrib directory\n- Update the MVS question in the FAQ\n- Avoid extraneous reads after EOF in gzio.c [Brown]\n- Correct spelling of \"successfully\" in gzio.c [Randers-Pehrson]\n- Add comments to zlib.h about gzerror() usage [Brown]\n- Set extra flags in gzip header in gzopen() like deflate() does\n- Make configure options more compatible with double-dash conventions\n  [Weigelt]\n- Clean up compilation under Solaris SunStudio cc [Rowe, Reinholdtsen]\n- Fix uninstall target in Makefile.in [Truta]\n- Add pkgconfig support [Weigelt]\n- Use $(DESTDIR) macro in Makefile.in [Reinholdtsen, Weigelt]\n- Replace set_data_type() with a more accurate detect_data_type() in\n  trees.c, according to the txtvsbin.txt document [Truta]\n- Swap the order of #include <stdio.h> and #include \"zlib.h\" in\n  gzio.c, example.c and minigzip.c [Truta]\n- Shut up annoying VS2005 warnings about standard C deprecation [Rowe,\n  Truta] (where?)\n- Fix target \"clean\" from win32/Makefile.bor [Truta]\n- Create .pdb and .manifest files in win32/makefile.msc [Ziegler, Rowe]\n- Update zlib www home address in win32/DLL_FAQ.txt [Truta]\n- Update contrib/masmx86/inffas32.asm for VS2005 [Vollant, Van Wassenhove]\n- Enable browse info in the \"Debug\" and \"ASM Debug\" configurations in\n  the Visual C++ 6 project, and set (non-ASM) \"Debug\" as default [Truta]\n- Add pkgconfig support [Weigelt]\n- Add ZLIB_VER_MAJOR, ZLIB_VER_MINOR and ZLIB_VER_REVISION in zlib.h,\n  for use in win32/zlib1.rc [Polushin, Rowe, Truta]\n- Add a document that explains the new text detection scheme to\n  doc/txtvsbin.txt [Truta]\n- Add rfc1950.txt, rfc1951.txt and rfc1952.txt to doc/ [Truta]\n- Move algorithm.txt into doc/ [Truta]\n- Synchronize FAQ with website\n- Fix compressBound(), was low for some pathological cases [Fearnley]\n- Take into account wrapper variations in deflateBound()\n- Set examples/zpipe.c input and output to binary mode for Windows\n- Update examples/zlib_how.html with new zpipe.c (also web site)\n- Fix some warnings in examples/gzlog.c and examples/zran.c (it seems\n  that gcc became pickier in 4.0)\n- Add zlib.map for Linux: \"All symbols from zlib-1.1.4 remain\n  un-versioned, the patch adds versioning only for symbols introduced in\n  zlib-1.2.0 or later.  It also declares as local those symbols which are\n  not designed to be exported.\" [Levin]\n- Update Z_PREFIX list in zconf.in.h, add --zprefix option to configure\n- Do not initialize global static by default in trees.c, add a response\n  NO_INIT_GLOBAL_POINTERS to initialize them if needed [Marquess]\n- Don't use strerror() in gzio.c under WinCE [Yakimov]\n- Don't use errno.h in zutil.h under WinCE [Yakimov]\n- Move arguments for AR to its usage to allow replacing ar [Marot]\n- Add HAVE_VISIBILITY_PRAGMA in zconf.in.h for Mozilla [Randers-Pehrson]\n- Improve inflateInit() and inflateInit2() documentation\n- Fix structure size comment in inflate.h\n- Change configure help option from --h* to --help [Santos]\n\nChanges in 1.2.3 (18 July 2005)\n- Apply security vulnerability fixes to contrib/infback9 as well\n- Clean up some text files (carriage returns, trailing space)\n- Update testzlib, vstudio, masmx64, and masmx86 in contrib [Vollant]\n\nChanges in 1.2.2.4 (11 July 2005)\n- Add inflatePrime() function for starting inflation at bit boundary\n- Avoid some Visual C warnings in deflate.c\n- Avoid more silly Visual C warnings in inflate.c and inftrees.c for 64-bit\n  compile\n- Fix some spelling errors in comments [Betts]\n- Correct inflateInit2() error return documentation in zlib.h\n- Add zran.c example of compressed data random access to examples\n  directory, shows use of inflatePrime()\n- Fix cast for assignments to strm->state in inflate.c and infback.c\n- Fix zlibCompileFlags() in zutil.c to use 1L for long shifts [Oberhumer]\n- Move declarations of gf2 functions to right place in crc32.c [Oberhumer]\n- Add cast in trees.c t avoid a warning [Oberhumer]\n- Avoid some warnings in fitblk.c, gun.c, gzjoin.c in examples [Oberhumer]\n- Update make_vms.com [Zinser]\n- Initialize state->write in inflateReset() since copied in inflate_fast()\n- Be more strict on incomplete code sets in inflate_table() and increase\n  ENOUGH and MAXD -- this repairs a possible security vulnerability for\n  invalid inflate input.  Thanks to Tavis Ormandy and Markus Oberhumer for\n  discovering the vulnerability and providing test cases.\n- Add ia64 support to configure for HP-UX [Smith]\n- Add error return to gzread() for format or i/o error [Levin]\n- Use malloc.h for OS/2 [Necasek]\n\nChanges in 1.2.2.3 (27 May 2005)\n- Replace 1U constants in inflate.c and inftrees.c for 64-bit compile\n- Typecast fread() return values in gzio.c [Vollant]\n- Remove trailing space in minigzip.c outmode (VC++ can't deal with it)\n- Fix crc check bug in gzread() after gzungetc() [Heiner]\n- Add the deflateTune() function to adjust internal compression parameters\n- Add a fast gzip decompressor, gun.c, to examples (use of inflateBack)\n- Remove an incorrect assertion in examples/zpipe.c\n- Add C++ wrapper in infback9.h [Donais]\n- Fix bug in inflateCopy() when decoding fixed codes\n- Note in zlib.h how much deflateSetDictionary() actually uses\n- Remove USE_DICT_HEAD in deflate.c (would mess up inflate if used)\n- Add _WIN32_WCE to define WIN32 in zconf.in.h [Spencer]\n- Don't include stderr.h or errno.h for _WIN32_WCE in zutil.h [Spencer]\n- Add gzdirect() function to indicate transparent reads\n- Update contrib/minizip [Vollant]\n- Fix compilation of deflate.c when both ASMV and FASTEST [Oberhumer]\n- Add casts in crc32.c to avoid warnings [Oberhumer]\n- Add contrib/masmx64 [Vollant]\n- Update contrib/asm586, asm686, masmx86, testzlib, vstudio [Vollant]\n\nChanges in 1.2.2.2 (30 December 2004)\n- Replace structure assignments in deflate.c and inflate.c with zmemcpy to\n  avoid implicit memcpy calls (portability for no-library compilation)\n- Increase sprintf() buffer size in gzdopen() to allow for large numbers\n- Add INFLATE_STRICT to check distances against zlib header\n- Improve WinCE errno handling and comments [Chang]\n- Remove comment about no gzip header processing in FAQ\n- Add Z_FIXED strategy option to deflateInit2() to force fixed trees\n- Add updated make_vms.com [Coghlan], update README\n- Create a new \"examples\" directory, move gzappend.c there, add zpipe.c,\n  fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html.\n- Add FAQ entry and comments in deflate.c on uninitialized memory access\n- Add Solaris 9 make options in configure [Gilbert]\n- Allow strerror() usage in gzio.c for STDC\n- Fix DecompressBuf in contrib/delphi/ZLib.pas [ManChesTer]\n- Update contrib/masmx86/inffas32.asm and gvmat32.asm [Vollant]\n- Use z_off_t for adler32_combine() and crc32_combine() lengths\n- Make adler32() much faster for small len\n- Use OS_CODE in deflate() default gzip header\n\nChanges in 1.2.2.1 (31 October 2004)\n- Allow inflateSetDictionary() call for raw inflate\n- Fix inflate header crc check bug for file names and comments\n- Add deflateSetHeader() and gz_header structure for custom gzip headers\n- Add inflateGetheader() to retrieve gzip headers\n- Add crc32_combine() and adler32_combine() functions\n- Add alloc_func, free_func, in_func, out_func to Z_PREFIX list\n- Use zstreamp consistently in zlib.h (inflate_back functions)\n- Remove GUNZIP condition from definition of inflate_mode in inflate.h\n  and in contrib/inflate86/inffast.S [Truta, Anderson]\n- Add support for AMD64 in contrib/inflate86/inffas86.c [Anderson]\n- Update projects/README.projects and projects/visualc6 [Truta]\n- Update win32/DLL_FAQ.txt [Truta]\n- Avoid warning under NO_GZCOMPRESS in gzio.c; fix typo [Truta]\n- Deprecate Z_ASCII; use Z_TEXT instead [Truta]\n- Use a new algorithm for setting strm->data_type in trees.c [Truta]\n- Do not define an exit() prototype in zutil.c unless DEBUG defined\n- Remove prototype of exit() from zutil.c, example.c, minigzip.c [Truta]\n- Add comment in zlib.h for Z_NO_FLUSH parameter to deflate()\n- Fix Darwin build version identification [Peterson]\n\nChanges in 1.2.2 (3 October 2004)\n- Update zlib.h comments on gzip in-memory processing\n- Set adler to 1 in inflateReset() to support Java test suite [Walles]\n- Add contrib/dotzlib [Ravn]\n- Update win32/DLL_FAQ.txt [Truta]\n- Update contrib/minizip [Vollant]\n- Move contrib/visual-basic.txt to old/ [Truta]\n- Fix assembler builds in projects/visualc6/ [Truta]\n\nChanges in 1.2.1.2 (9 September 2004)\n- Update INDEX file\n- Fix trees.c to update strm->data_type (no one ever noticed!)\n- Fix bug in error case in inflate.c, infback.c, and infback9.c [Brown]\n- Add \"volatile\" to crc table flag declaration (for DYNAMIC_CRC_TABLE)\n- Add limited multitasking protection to DYNAMIC_CRC_TABLE\n- Add NO_vsnprintf for VMS in zutil.h [Mozilla]\n- Don't declare strerror() under VMS [Mozilla]\n- Add comment to DYNAMIC_CRC_TABLE to use get_crc_table() to initialize\n- Update contrib/ada [Anisimkov]\n- Update contrib/minizip [Vollant]\n- Fix configure to not hardcode directories for Darwin [Peterson]\n- Fix gzio.c to not return error on empty files [Brown]\n- Fix indentation; update version in contrib/delphi/ZLib.pas and\n  contrib/pascal/zlibpas.pas [Truta]\n- Update mkasm.bat in contrib/masmx86 [Truta]\n- Update contrib/untgz [Truta]\n- Add projects/README.projects [Truta]\n- Add project for MS Visual C++ 6.0 in projects/visualc6 [Cadieux, Truta]\n- Update win32/DLL_FAQ.txt [Truta]\n- Update list of Z_PREFIX symbols in zconf.h [Randers-Pehrson, Truta]\n- Remove an unnecessary assignment to curr in inftrees.c [Truta]\n- Add OS/2 to exe builds in configure [Poltorak]\n- Remove err dummy parameter in zlib.h [Kientzle]\n\nChanges in 1.2.1.1 (9 January 2004)\n- Update email address in README\n- Several FAQ updates\n- Fix a big fat bug in inftrees.c that prevented decoding valid\n  dynamic blocks with only literals and no distance codes --\n  Thanks to \"Hot Emu\" for the bug report and sample file\n- Add a note to puff.c on no distance codes case.\n\nChanges in 1.2.1 (17 November 2003)\n- Remove a tab in contrib/gzappend/gzappend.c\n- Update some interfaces in contrib for new zlib functions\n- Update zlib version number in some contrib entries\n- Add Windows CE definition for ptrdiff_t in zutil.h [Mai, Truta]\n- Support shared libraries on Hurd and KFreeBSD [Brown]\n- Fix error in NO_DIVIDE option of adler32.c\n\nChanges in 1.2.0.8 (4 November 2003)\n- Update version in contrib/delphi/ZLib.pas and contrib/pascal/zlibpas.pas\n- Add experimental NO_DIVIDE #define in adler32.c\n    - Possibly faster on some processors (let me know if it is)\n- Correct Z_BLOCK to not return on first inflate call if no wrap\n- Fix strm->data_type on inflate() return to correctly indicate EOB\n- Add deflatePrime() function for appending in the middle of a byte\n- Add contrib/gzappend for an example of appending to a stream\n- Update win32/DLL_FAQ.txt [Truta]\n- Delete Turbo C comment in README [Truta]\n- Improve some indentation in zconf.h [Truta]\n- Fix infinite loop on bad input in configure script [Church]\n- Fix gzeof() for concatenated gzip files [Johnson]\n- Add example to contrib/visual-basic.txt [Michael B.]\n- Add -p to mkdir's in Makefile.in [vda]\n- Fix configure to properly detect presence or lack of printf functions\n- Add AS400 support [Monnerat]\n- Add a little Cygwin support [Wilson]\n\nChanges in 1.2.0.7 (21 September 2003)\n- Correct some debug formats in contrib/infback9\n- Cast a type in a debug statement in trees.c\n- Change search and replace delimiter in configure from % to # [Beebe]\n- Update contrib/untgz to 0.2 with various fixes [Truta]\n- Add build support for Amiga [Nikl]\n- Remove some directories in old that have been updated to 1.2\n- Add dylib building for Mac OS X in configure and Makefile.in\n- Remove old distribution stuff from Makefile\n- Update README to point to DLL_FAQ.txt, and add comment on Mac OS X\n- Update links in README\n\nChanges in 1.2.0.6 (13 September 2003)\n- Minor FAQ updates\n- Update contrib/minizip to 1.00 [Vollant]\n- Remove test of gz functions in example.c when GZ_COMPRESS defined [Truta]\n- Update POSTINC comment for 68060 [Nikl]\n- Add contrib/infback9 with deflate64 decoding (unsupported)\n- For MVS define NO_vsnprintf and undefine FAR [van Burik]\n- Add pragma for fdopen on MVS [van Burik]\n\nChanges in 1.2.0.5 (8 September 2003)\n- Add OF to inflateBackEnd() declaration in zlib.h\n- Remember start when using gzdopen in the middle of a file\n- Use internal off_t counters in gz* functions to properly handle seeks\n- Perform more rigorous check for distance-too-far in inffast.c\n- Add Z_BLOCK flush option to return from inflate at block boundary\n- Set strm->data_type on return from inflate\n    - Indicate bits unused, if at block boundary, and if in last block\n- Replace size_t with ptrdiff_t in crc32.c, and check for correct size\n- Add condition so old NO_DEFLATE define still works for compatibility\n- FAQ update regarding the Windows DLL [Truta]\n- INDEX update: add qnx entry, remove aix entry [Truta]\n- Install zlib.3 into mandir [Wilson]\n- Move contrib/zlib_dll_FAQ.txt to win32/DLL_FAQ.txt; update [Truta]\n- Adapt the zlib interface to the new DLL convention guidelines [Truta]\n- Introduce ZLIB_WINAPI macro to allow the export of functions using\n  the WINAPI calling convention, for Visual Basic [Vollant, Truta]\n- Update msdos and win32 scripts and makefiles [Truta]\n- Export symbols by name, not by ordinal, in win32/zlib.def [Truta]\n- Add contrib/ada [Anisimkov]\n- Move asm files from contrib/vstudio/vc70_32 to contrib/asm386 [Truta]\n- Rename contrib/asm386 to contrib/masmx86 [Truta, Vollant]\n- Add contrib/masm686 [Truta]\n- Fix offsets in contrib/inflate86 and contrib/masmx86/inffas32.asm\n  [Truta, Vollant]\n- Update contrib/delphi; rename to contrib/pascal; add example [Truta]\n- Remove contrib/delphi2; add a new contrib/delphi [Truta]\n- Avoid inclusion of the nonstandard <memory.h> in contrib/iostream,\n  and fix some method prototypes [Truta]\n- Fix the ZCR_SEED2 constant to avoid warnings in contrib/minizip\n  [Truta]\n- Avoid the use of backslash (\\) in contrib/minizip [Vollant]\n- Fix file time handling in contrib/untgz; update makefiles [Truta]\n- Update contrib/vstudio/vc70_32 to comply with the new DLL guidelines\n  [Vollant]\n- Remove contrib/vstudio/vc15_16 [Vollant]\n- Rename contrib/vstudio/vc70_32 to contrib/vstudio/vc7 [Truta]\n- Update README.contrib [Truta]\n- Invert the assignment order of match_head and s->prev[...] in\n  INSERT_STRING [Truta]\n- Compare TOO_FAR with 32767 instead of 32768, to avoid 16-bit warnings\n  [Truta]\n- Compare function pointers with 0, not with NULL or Z_NULL [Truta]\n- Fix prototype of syncsearch in inflate.c [Truta]\n- Introduce ASMINF macro to be enabled when using an ASM implementation\n  of inflate_fast [Truta]\n- Change NO_DEFLATE to NO_GZCOMPRESS [Truta]\n- Modify test_gzio in example.c to take a single file name as a\n  parameter [Truta]\n- Exit the example.c program if gzopen fails [Truta]\n- Add type casts around strlen in example.c [Truta]\n- Remove casting to sizeof in minigzip.c; give a proper type\n  to the variable compared with SUFFIX_LEN [Truta]\n- Update definitions of STDC and STDC99 in zconf.h [Truta]\n- Synchronize zconf.h with the new Windows DLL interface [Truta]\n- Use SYS16BIT instead of __32BIT__ to distinguish between\n  16- and 32-bit platforms [Truta]\n- Use far memory allocators in small 16-bit memory models for\n  Turbo C [Truta]\n- Add info about the use of ASMV, ASMINF and ZLIB_WINAPI in\n  zlibCompileFlags [Truta]\n- Cygwin has vsnprintf [Wilson]\n- In Windows16, OS_CODE is 0, as in MSDOS [Truta]\n- In Cygwin, OS_CODE is 3 (Unix), not 11 (Windows32) [Wilson]\n\nChanges in 1.2.0.4 (10 August 2003)\n- Minor FAQ updates\n- Be more strict when checking inflateInit2's windowBits parameter\n- Change NO_GUNZIP compile option to NO_GZIP to cover deflate as well\n- Add gzip wrapper option to deflateInit2 using windowBits\n- Add updated QNX rule in configure and qnx directory [Bonnefoy]\n- Make inflate distance-too-far checks more rigorous\n- Clean up FAR usage in inflate\n- Add casting to sizeof() in gzio.c and minigzip.c\n\nChanges in 1.2.0.3 (19 July 2003)\n- Fix silly error in gzungetc() implementation [Vollant]\n- Update contrib/minizip and contrib/vstudio [Vollant]\n- Fix printf format in example.c\n- Correct cdecl support in zconf.in.h [Anisimkov]\n- Minor FAQ updates\n\nChanges in 1.2.0.2 (13 July 2003)\n- Add ZLIB_VERNUM in zlib.h for numerical preprocessor comparisons\n- Attempt to avoid warnings in crc32.c for pointer-int conversion\n- Add AIX to configure, remove aix directory [Bakker]\n- Add some casts to minigzip.c\n- Improve checking after insecure sprintf() or vsprintf() calls\n- Remove #elif's from crc32.c\n- Change leave label to inf_leave in inflate.c and infback.c to avoid\n  library conflicts\n- Remove inflate gzip decoding by default--only enable gzip decoding by\n  special request for stricter backward compatibility\n- Add zlibCompileFlags() function to return compilation information\n- More typecasting in deflate.c to avoid warnings\n- Remove leading underscore from _Capital #defines [Truta]\n- Fix configure to link shared library when testing\n- Add some Windows CE target adjustments [Mai]\n- Remove #define ZLIB_DLL in zconf.h [Vollant]\n- Add zlib.3 [Rodgers]\n- Update RFC URL in deflate.c and algorithm.txt [Mai]\n- Add zlib_dll_FAQ.txt to contrib [Truta]\n- Add UL to some constants [Truta]\n- Update minizip and vstudio [Vollant]\n- Remove vestigial NEED_DUMMY_RETURN from zconf.in.h\n- Expand use of NO_DUMMY_DECL to avoid all dummy structures\n- Added iostream3 to contrib [Schwardt]\n- Replace rewind() with fseek() for WinCE [Truta]\n- Improve setting of zlib format compression level flags\n    - Report 0 for huffman and rle strategies and for level == 0 or 1\n    - Report 2 only for level == 6\n- Only deal with 64K limit when necessary at compile time [Truta]\n- Allow TOO_FAR check to be turned off at compile time [Truta]\n- Add gzclearerr() function [Souza]\n- Add gzungetc() function\n\nChanges in 1.2.0.1 (17 March 2003)\n- Add Z_RLE strategy for run-length encoding [Truta]\n    - When Z_RLE requested, restrict matches to distance one\n    - Update zlib.h, minigzip.c, gzopen(), gzdopen() for Z_RLE\n- Correct FASTEST compilation to allow level == 0\n- Clean up what gets compiled for FASTEST\n- Incorporate changes to zconf.in.h [Vollant]\n    - Refine detection of Turbo C need for dummy returns\n    - Refine ZLIB_DLL compilation\n    - Include additional header file on VMS for off_t typedef\n- Try to use _vsnprintf where it supplants vsprintf [Vollant]\n- Add some casts in inffast.c\n- Enchance comments in zlib.h on what happens if gzprintf() tries to\n  write more than 4095 bytes before compression\n- Remove unused state from inflateBackEnd()\n- Remove exit(0) from minigzip.c, example.c\n- Get rid of all those darn tabs\n- Add \"check\" target to Makefile.in that does the same thing as \"test\"\n- Add \"mostlyclean\" and \"maintainer-clean\" targets to Makefile.in\n- Update contrib/inflate86 [Anderson]\n- Update contrib/testzlib, contrib/vstudio, contrib/minizip [Vollant]\n- Add msdos and win32 directories with makefiles [Truta]\n- More additions and improvements to the FAQ\n\nChanges in 1.2.0 (9 March 2003)\n- New and improved inflate code\n    - About 20% faster\n    - Does not allocate 32K window unless and until needed\n    - Automatically detects and decompresses gzip streams\n    - Raw inflate no longer needs an extra dummy byte at end\n    - Added inflateBack functions using a callback interface--even faster\n      than inflate, useful for file utilities (gzip, zip)\n    - Added inflateCopy() function to record state for random access on\n      externally generated deflate streams (e.g. in gzip files)\n    - More readable code (I hope)\n- New and improved crc32()\n    - About 50% faster, thanks to suggestions from Rodney Brown\n- Add deflateBound() and compressBound() functions\n- Fix memory leak in deflateInit2()\n- Permit setting dictionary for raw deflate (for parallel deflate)\n- Fix const declaration for gzwrite()\n- Check for some malloc() failures in gzio.c\n- Fix bug in gzopen() on single-byte file 0x1f\n- Fix bug in gzread() on concatenated file with 0x1f at end of buffer\n  and next buffer doesn't start with 0x8b\n- Fix uncompress() to return Z_DATA_ERROR on truncated input\n- Free memory at end of example.c\n- Remove MAX #define in trees.c (conflicted with some libraries)\n- Fix static const's in deflate.c, gzio.c, and zutil.[ch]\n- Declare malloc() and free() in gzio.c if STDC not defined\n- Use malloc() instead of calloc() in zutil.c if int big enough\n- Define STDC for AIX\n- Add aix/ with approach for compiling shared library on AIX\n- Add HP-UX support for shared libraries in configure\n- Add OpenUNIX support for shared libraries in configure\n- Use $cc instead of gcc to build shared library\n- Make prefix directory if needed when installing\n- Correct Macintosh avoidance of typedef Byte in zconf.h\n- Correct Turbo C memory allocation when under Linux\n- Use libz.a instead of -lz in Makefile (assure use of compiled library)\n- Update configure to check for snprintf or vsnprintf functions and their\n  return value, warn during make if using an insecure function\n- Fix configure problem with compile-time knowledge of HAVE_UNISTD_H that\n  is lost when library is used--resolution is to build new zconf.h\n- Documentation improvements (in zlib.h):\n    - Document raw deflate and inflate\n    - Update RFCs URL\n    - Point out that zlib and gzip formats are different\n    - Note that Z_BUF_ERROR is not fatal\n    - Document string limit for gzprintf() and possible buffer overflow\n    - Note requirement on avail_out when flushing\n    - Note permitted values of flush parameter of inflate()\n- Add some FAQs (and even answers) to the FAQ\n- Add contrib/inflate86/ for x86 faster inflate\n- Add contrib/blast/ for PKWare Data Compression Library decompression\n- Add contrib/puff/ simple inflate for deflate format description\n\nChanges in 1.1.4 (11 March 2002)\n- ZFREE was repeated on same allocation on some error conditions.\n  This creates a security problem described in\n  http://www.zlib.org/advisory-2002-03-11.txt\n- Returned incorrect error (Z_MEM_ERROR) on some invalid data\n- Avoid accesses before window for invalid distances with inflate window\n  less than 32K.\n- force windowBits > 8 to avoid a bug in the encoder for a window size\n  of 256 bytes. (A complete fix will be available in 1.1.5).\n\nChanges in 1.1.3 (9 July 1998)\n- fix \"an inflate input buffer bug that shows up on rare but persistent\n  occasions\" (Mark)\n- fix gzread and gztell for concatenated .gz files (Didier Le Botlan)\n- fix gzseek(..., SEEK_SET) in write mode\n- fix crc check after a gzeek (Frank Faubert)\n- fix miniunzip when the last entry in a zip file is itself a zip file\n  (J Lillge)\n- add contrib/asm586 and contrib/asm686 (Brian Raiter)\n  See http://www.muppetlabs.com/~breadbox/software/assembly.html\n- add support for Delphi 3 in contrib/delphi (Bob Dellaca)\n- add support for C++Builder 3 and Delphi 3 in contrib/delphi2 (Davide Moretti)\n- do not exit prematurely in untgz if 0 at start of block (Magnus Holmgren)\n- use macro EXTERN instead of extern to support DLL for BeOS (Sander Stoks)\n- added a FAQ file\n\n- Support gzdopen on Mac with Metrowerks (Jason Linhart)\n- Do not redefine Byte on Mac (Brad Pettit & Jason Linhart)\n- define SEEK_END too if SEEK_SET is not defined (Albert Chin-A-Young)\n- avoid some warnings with Borland C (Tom Tanner)\n- fix a problem in contrib/minizip/zip.c for 16-bit MSDOS (Gilles Vollant)\n- emulate utime() for WIN32 in contrib/untgz  (Gilles Vollant)\n- allow several arguments to configure (Tim Mooney, Frodo Looijaard)\n- use libdir and includedir in Makefile.in (Tim Mooney)\n- support shared libraries on OSF1 V4 (Tim Mooney)\n- remove so_locations in \"make clean\"  (Tim Mooney)\n- fix maketree.c compilation error (Glenn, Mark)\n- Python interface to zlib now in Python 1.5 (Jeremy Hylton)\n- new Makefile.riscos (Rich Walker)\n- initialize static descriptors in trees.c for embedded targets (Nick Smith)\n- use \"foo-gz\" in example.c for RISCOS and VMS (Nick Smith)\n- add the OS/2 files in Makefile.in too (Andrew Zabolotny)\n- fix fdopen and halloc macros for Microsoft C 6.0 (Tom Lane)\n- fix maketree.c to allow clean compilation of inffixed.h (Mark)\n- fix parameter check in deflateCopy (Gunther Nikl)\n- cleanup trees.c, use compressed_len only in debug mode (Christian Spieler)\n- Many portability patches by Christian Spieler:\n  . zutil.c, zutil.h: added \"const\" for zmem*\n  . Make_vms.com: fixed some typos\n  . Make_vms.com: msdos/Makefile.*: removed zutil.h from some dependency lists\n  . msdos/Makefile.msc: remove \"default rtl link library\" info from obj files\n  . msdos/Makefile.*: use model-dependent name for the built zlib library\n  . msdos/Makefile.emx, nt/Makefile.emx, nt/Makefile.gcc:\n     new makefiles, for emx (DOS/OS2), emx&rsxnt and mingw32 (Windows 9x / NT)\n- use define instead of typedef for Bytef also for MSC small/medium (Tom Lane)\n- replace __far with _far for better portability (Christian Spieler, Tom Lane)\n- fix test for errno.h in configure (Tim Newsham)\n\nChanges in 1.1.2 (19 March 98)\n- added contrib/minzip, mini zip and unzip based on zlib (Gilles Vollant)\n  See http://www.winimage.com/zLibDll/unzip.html\n- preinitialize the inflate tables for fixed codes, to make the code\n  completely thread safe (Mark)\n- some simplifications and slight speed-up to the inflate code (Mark)\n- fix gzeof on non-compressed files (Allan Schrum)\n- add -std1 option in configure for OSF1 to fix gzprintf (Martin Mokrejs)\n- use default value of 4K for Z_BUFSIZE for 16-bit MSDOS (Tim Wegner + Glenn)\n- added os2/Makefile.def and os2/zlib.def (Andrew Zabolotny)\n- add shared lib support for UNIX_SV4.2MP (MATSUURA Takanori)\n- do not wrap extern \"C\" around system includes (Tom Lane)\n- mention zlib binding for TCL in README (Andreas Kupries)\n- added amiga/Makefile.pup for Amiga powerUP SAS/C PPC (Andreas Kleinert)\n- allow \"make install prefix=...\" even after configure (Glenn Randers-Pehrson)\n- allow \"configure --prefix $HOME\" (Tim Mooney)\n- remove warnings in example.c and gzio.c (Glenn Randers-Pehrson)\n- move Makefile.sas to amiga/Makefile.sas\n\nChanges in 1.1.1 (27 Feb 98)\n- fix macros _tr_tally_* in deflate.h for debug mode  (Glenn Randers-Pehrson)\n- remove block truncation heuristic which had very marginal effect for zlib\n  (smaller lit_bufsize than in gzip 1.2.4) and degraded a little the\n  compression ratio on some files. This also allows inlining _tr_tally for\n  matches in deflate_slow.\n- added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier)\n\nChanges in 1.1.0 (24 Feb 98)\n- do not return STREAM_END prematurely in inflate (John Bowler)\n- revert to the zlib 1.0.8 inflate to avoid the gcc 2.8.0 bug (Jeremy Buhler)\n- compile with -DFASTEST to get compression code optimized for speed only\n- in minigzip, try mmap'ing the input file first (Miguel Albrecht)\n- increase size of I/O buffers in minigzip.c and gzio.c (not a big gain\n  on Sun but significant on HP)\n\n- add a pointer to experimental unzip library in README (Gilles Vollant)\n- initialize variable gcc in configure (Chris Herborth)\n\nChanges in 1.0.9 (17 Feb 1998)\n- added gzputs and gzgets functions\n- do not clear eof flag in gzseek (Mark Diekhans)\n- fix gzseek for files in transparent mode (Mark Diekhans)\n- do not assume that vsprintf returns the number of bytes written (Jens Krinke)\n- replace EXPORT with ZEXPORT to avoid conflict with other programs\n- added compress2 in zconf.h, zlib.def, zlib.dnt\n- new asm code from Gilles Vollant in contrib/asm386\n- simplify the inflate code (Mark):\n . Replace ZALLOC's in huft_build() with single ZALLOC in inflate_blocks_new()\n . ZALLOC the length list in inflate_trees_fixed() instead of using stack\n . ZALLOC the value area for huft_build() instead of using stack\n . Simplify Z_FINISH check in inflate()\n\n- Avoid gcc 2.8.0 comparison bug a little differently than zlib 1.0.8\n- in inftrees.c, avoid cc -O bug on HP (Farshid Elahi)\n- in zconf.h move the ZLIB_DLL stuff earlier to avoid problems with\n  the declaration of FAR (Gilles VOllant)\n- install libz.so* with mode 755 (executable) instead of 644 (Marc Lehmann)\n- read_buf buf parameter of type Bytef* instead of charf*\n- zmemcpy parameters are of type Bytef*, not charf* (Joseph Strout)\n- do not redeclare unlink in minigzip.c for WIN32 (John Bowler)\n- fix check for presence of directories in \"make install\" (Ian Willis)\n\nChanges in 1.0.8 (27 Jan 1998)\n- fixed offsets in contrib/asm386/gvmat32.asm (Gilles Vollant)\n- fix gzgetc and gzputc for big endian systems (Markus Oberhumer)\n- added compress2() to allow setting the compression level\n- include sys/types.h to get off_t on some systems (Marc Lehmann & QingLong)\n- use constant arrays for the static trees in trees.c instead of computing\n  them at run time (thanks to Ken Raeburn for this suggestion). To create\n  trees.h, compile with GEN_TREES_H and run \"make test\".\n- check return code of example in \"make test\" and display result\n- pass minigzip command line options to file_compress\n- simplifying code of inflateSync to avoid gcc 2.8 bug\n\n- support CC=\"gcc -Wall\" in configure -s (QingLong)\n- avoid a flush caused by ftell in gzopen for write mode (Ken Raeburn)\n- fix test for shared library support to avoid compiler warnings\n- zlib.lib -> zlib.dll in msdos/zlib.rc (Gilles Vollant)\n- check for TARGET_OS_MAC in addition to MACOS (Brad Pettit)\n- do not use fdopen for Metrowerks on Mac (Brad Pettit))\n- add checks for gzputc and gzputc in example.c\n- avoid warnings in gzio.c and deflate.c (Andreas Kleinert)\n- use const for the CRC table (Ken Raeburn)\n- fixed \"make uninstall\" for shared libraries\n- use Tracev instead of Trace in infblock.c\n- in example.c use correct compressed length for test_sync\n- suppress +vnocompatwarnings in configure for HPUX (not always supported)\n\nChanges in 1.0.7 (20 Jan 1998)\n- fix gzseek which was broken in write mode\n- return error for gzseek to negative absolute position\n- fix configure for Linux (Chun-Chung Chen)\n- increase stack space for MSC (Tim Wegner)\n- get_crc_table and inflateSyncPoint are EXPORTed (Gilles Vollant)\n- define EXPORTVA for gzprintf (Gilles Vollant)\n- added man page zlib.3 (Rick Rodgers)\n- for contrib/untgz, fix makedir() and improve Makefile\n\n- check gzseek in write mode in example.c\n- allocate extra buffer for seeks only if gzseek is actually called\n- avoid signed/unsigned comparisons (Tim Wegner, Gilles Vollant)\n- add inflateSyncPoint in zconf.h\n- fix list of exported functions in nt/zlib.dnt and mdsos/zlib.def\n\nChanges in 1.0.6 (19 Jan 1998)\n- add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and\n  gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code)\n- Fix a deflate bug occurring only with compression level 0 (thanks to\n  Andy Buckler for finding this one).\n- In minigzip, pass transparently also the first byte for .Z files.\n- return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress()\n- check Z_FINISH in inflate (thanks to Marc Schluper)\n- Implement deflateCopy (thanks to Adam Costello)\n- make static libraries by default in configure, add --shared option.\n- move MSDOS or Windows specific files to directory msdos\n- suppress the notion of partial flush to simplify the interface\n  (but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4)\n- suppress history buffer provided by application to simplify the interface\n  (this feature was not implemented anyway in 1.0.4)\n- next_in and avail_in must be initialized before calling inflateInit or\n  inflateInit2\n- add EXPORT in all exported functions (for Windows DLL)\n- added Makefile.nt (thanks to Stephen Williams)\n- added the unsupported \"contrib\" directory:\n   contrib/asm386/ by Gilles Vollant <info@winimage.com>\n        386 asm code replacing longest_match().\n   contrib/iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>\n        A C++ I/O streams interface to the zlib gz* functions\n   contrib/iostream2/  by Tyge Lvset <Tyge.Lovset@cmr.no>\n        Another C++ I/O streams interface\n   contrib/untgz/  by \"Pedro A. Aranda Guti\\irrez\" <paag@tid.es>\n        A very simple tar.gz file extractor using zlib\n   contrib/visual-basic.txt by Carlos Rios <c_rios@sonda.cl>\n        How to use compress(), uncompress() and the gz* functions from VB.\n- pass params -f (filtered data), -h (huffman only), -1 to -9 (compression\n  level) in minigzip (thanks to Tom Lane)\n\n- use const for rommable constants in deflate\n- added test for gzseek and gztell in example.c\n- add undocumented function inflateSyncPoint() (hack for Paul Mackerras)\n- add undocumented function zError to convert error code to string\n  (for Tim Smithers)\n- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code.\n- Use default memcpy for Symantec MSDOS compiler.\n- Add EXPORT keyword for check_func (needed for Windows DLL)\n- add current directory to LD_LIBRARY_PATH for \"make test\"\n- create also a link for libz.so.1\n- added support for FUJITSU UXP/DS (thanks to Toshiaki Nomura)\n- use $(SHAREDLIB) instead of libz.so in Makefile.in (for HPUX)\n- added -soname for Linux in configure (Chun-Chung Chen,\n- assign numbers to the exported functions in zlib.def (for Windows DLL)\n- add advice in zlib.h for best usage of deflateSetDictionary\n- work around compiler bug on Atari (cast Z_NULL in call of s->checkfn)\n- allow compilation with ANSI keywords only enabled for TurboC in large model\n- avoid \"versionString\"[0] (Borland bug)\n- add NEED_DUMMY_RETURN for Borland\n- use variable z_verbose for tracing in debug mode (L. Peter Deutsch).\n- allow compilation with CC\n- defined STDC for OS/2 (David Charlap)\n- limit external names to 8 chars for MVS (Thomas Lund)\n- in minigzip.c, use static buffers only for 16-bit systems\n- fix suffix check for \"minigzip -d foo.gz\"\n- do not return an error for the 2nd of two consecutive gzflush() (Felix Lee)\n- use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau)\n- added makelcc.bat for lcc-win32 (Tom St Denis)\n- in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe)\n- Avoid expanded $Id$. Use \"rcs -kb\" or \"cvs admin -kb\" to avoid Id expansion.\n- check for unistd.h in configure (for off_t)\n- remove useless check parameter in inflate_blocks_free\n- avoid useless assignment of s->check to itself in inflate_blocks_new\n- do not flush twice in gzclose (thanks to Ken Raeburn)\n- rename FOPEN as F_OPEN to avoid clash with /usr/include/sys/file.h\n- use NO_ERRNO_H instead of enumeration of operating systems with errno.h\n- work around buggy fclose on pipes for HP/UX\n- support zlib DLL with BORLAND C++ 5.0 (thanks to Glenn Randers-Pehrson)\n- fix configure if CC is already equal to gcc\n\nChanges in 1.0.5 (3 Jan 98)\n- Fix inflate to terminate gracefully when fed corrupted or invalid data\n- Use const for rommable constants in inflate\n- Eliminate memory leaks on error conditions in inflate\n- Removed some vestigial code in inflate\n- Update web address in README\n\nChanges in 1.0.4 (24 Jul 96)\n- In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF\n  bit, so the decompressor could decompress all the correct data but went\n  on to attempt decompressing extra garbage data. This affected minigzip too.\n- zlibVersion and gzerror return const char* (needed for DLL)\n- port to RISCOS (no fdopen, no multiple dots, no unlink, no fileno)\n- use z_error only for DEBUG (avoid problem with DLLs)\n\nChanges in 1.0.3 (2 Jul 96)\n- use z_streamp instead of z_stream *, which is now a far pointer in MSDOS\n  small and medium models; this makes the library incompatible with previous\n  versions for these models. (No effect in large model or on other systems.)\n- return OK instead of BUF_ERROR if previous deflate call returned with\n  avail_out as zero but there is nothing to do\n- added memcmp for non STDC compilers\n- define NO_DUMMY_DECL for more Mac compilers (.h files merged incorrectly)\n- define __32BIT__ if __386__ or i386 is defined (pb. with Watcom and SCO)\n- better check for 16-bit mode MSC (avoids problem with Symantec)\n\nChanges in 1.0.2 (23 May 96)\n- added Windows DLL support\n- added a function zlibVersion (for the DLL support)\n- fixed declarations using Bytef in infutil.c (pb with MSDOS medium model)\n- Bytef is define's instead of typedef'd only for Borland C\n- avoid reading uninitialized memory in example.c\n- mention in README that the zlib format is now RFC1950\n- updated Makefile.dj2\n- added algorithm.doc\n\nChanges in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion]\n- fix array overlay in deflate.c which sometimes caused bad compressed data\n- fix inflate bug with empty stored block\n- fix MSDOS medium model which was broken in 0.99\n- fix deflateParams() which could generated bad compressed data.\n- Bytef is define'd instead of typedef'ed (work around Borland bug)\n- added an INDEX file\n- new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32),\n  Watcom (Makefile.wat), Amiga SAS/C (Makefile.sas)\n- speed up adler32 for modern machines without auto-increment\n- added -ansi for IRIX in configure\n- static_init_done in trees.c is an int\n- define unlink as delete for VMS\n- fix configure for QNX\n- add configure branch for SCO and HPUX\n- avoid many warnings (unused variables, dead assignments, etc...)\n- no fdopen for BeOS\n- fix the Watcom fix for 32 bit mode (define FAR as empty)\n- removed redefinition of Byte for MKWERKS\n- work around an MWKERKS bug (incorrect merge of all .h files)\n\nChanges in 0.99 (27 Jan 96)\n- allow preset dictionary shared between compressor and decompressor\n- allow compression level 0 (no compression)\n- add deflateParams in zlib.h: allow dynamic change of compression level\n  and compression strategy.\n- test large buffers and deflateParams in example.c\n- add optional \"configure\" to build zlib as a shared library\n- suppress Makefile.qnx, use configure instead\n- fixed deflate for 64-bit systems (detected on Cray)\n- fixed inflate_blocks for 64-bit systems (detected on Alpha)\n- declare Z_DEFLATED in zlib.h (possible parameter for deflateInit2)\n- always return Z_BUF_ERROR when deflate() has nothing to do\n- deflateInit and inflateInit are now macros to allow version checking\n- prefix all global functions and types with z_ with -DZ_PREFIX\n- make falloc completely reentrant (inftrees.c)\n- fixed very unlikely race condition in ct_static_init\n- free in reverse order of allocation to help memory manager\n- use zlib-1.0/* instead of zlib/* inside the tar.gz\n- make zlib warning-free with \"gcc -O3 -Wall -Wwrite-strings -Wpointer-arith\n  -Wconversion -Wstrict-prototypes -Wmissing-prototypes\"\n- allow gzread on concatenated .gz files\n- deflateEnd now returns Z_DATA_ERROR if it was premature\n- deflate is finally (?) fully deterministic (no matches beyond end of input)\n- Document Z_SYNC_FLUSH\n- add uninstall in Makefile\n- Check for __cpluplus in zlib.h\n- Better test in ct_align for partial flush\n- avoid harmless warnings for Borland C++\n- initialize hash_head in deflate.c\n- avoid warning on fdopen (gzio.c) for HP cc -Aa\n- include stdlib.h for STDC compilers\n- include errno.h for Cray\n- ignore error if ranlib doesn't exist\n- call ranlib twice for NeXTSTEP\n- use exec_prefix instead of prefix for libz.a\n- renamed ct_* as _tr_* to avoid conflict with applications\n- clear z->msg in inflateInit2 before any error return\n- initialize opaque in example.c, gzio.c, deflate.c and inflate.c\n- fixed typo in zconf.h (_GNUC__ => __GNUC__)\n- check for WIN32 in zconf.h and zutil.c (avoid farmalloc in 32-bit mode)\n- fix typo in Make_vms.com (f$trnlnm -> f$getsyi)\n- in fcalloc, normalize pointer if size > 65520 bytes\n- don't use special fcalloc for 32 bit Borland C++\n- use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc...\n- use Z_BINARY instead of BINARY\n- document that gzclose after gzdopen will close the file\n- allow \"a\" as mode in gzopen.\n- fix error checking in gzread\n- allow skipping .gz extra-field on pipes\n- added reference to Perl interface in README\n- put the crc table in FAR data (I dislike more and more the medium model :)\n- added get_crc_table\n- added a dimension to all arrays (Borland C can't count).\n- workaround Borland C bug in declaration of inflate_codes_new & inflate_fast\n- guard against multiple inclusion of *.h (for precompiled header on Mac)\n- Watcom C pretends to be Microsoft C small model even in 32 bit mode.\n- don't use unsized arrays to avoid silly warnings by Visual C++:\n     warning C4746: 'inflate_mask' : unsized array treated as  '__far'\n     (what's wrong with far data in far model?).\n- define enum out of inflate_blocks_state to allow compilation with C++\n\nChanges in 0.95 (16 Aug 95)\n- fix MSDOS small and medium model (now easier to adapt to any compiler)\n- inlined send_bits\n- fix the final (:-) bug for deflate with flush (output was correct but\n  not completely flushed in rare occasions).\n- default window size is same for compression and decompression\n  (it's now sufficient to set MAX_WBITS in zconf.h).\n- voidp -> voidpf and voidnp -> voidp (for consistency with other\n  typedefs and because voidnp was not near in large model).\n\nChanges in 0.94 (13 Aug 95)\n- support MSDOS medium model\n- fix deflate with flush (could sometimes generate bad output)\n- fix deflateReset (zlib header was incorrectly suppressed)\n- added support for VMS\n- allow a compression level in gzopen()\n- gzflush now calls fflush\n- For deflate with flush, flush even if no more input is provided.\n- rename libgz.a as libz.a\n- avoid complex expression in infcodes.c triggering Turbo C bug\n- work around a problem with gcc on Alpha (in INSERT_STRING)\n- don't use inline functions (problem with some gcc versions)\n- allow renaming of Byte, uInt, etc... with #define.\n- avoid warning about (unused) pointer before start of array in deflate.c\n- avoid various warnings in gzio.c, example.c, infblock.c, adler32.c, zutil.c\n- avoid reserved word 'new' in trees.c\n\nChanges in 0.93 (25 June 95)\n- temporarily disable inline functions\n- make deflate deterministic\n- give enough lookahead for PARTIAL_FLUSH\n- Set binary mode for stdin/stdout in minigzip.c for OS/2\n- don't even use signed char in inflate (not portable enough)\n- fix inflate memory leak for segmented architectures\n\nChanges in 0.92 (3 May 95)\n- don't assume that char is signed (problem on SGI)\n- Clear bit buffer when starting a stored block\n- no memcpy on Pyramid\n- suppressed inftest.c\n- optimized fill_window, put longest_match inline for gcc\n- optimized inflate on stored blocks.\n- untabify all sources to simplify patches\n\nChanges in 0.91 (2 May 95)\n- Default MEM_LEVEL is 8 (not 9 for Unix) as documented in zlib.h\n- Document the memory requirements in zconf.h\n- added \"make install\"\n- fix sync search logic in inflateSync\n- deflate(Z_FULL_FLUSH) now works even if output buffer too short\n- after inflateSync, don't scare people with just \"lo world\"\n- added support for DJGPP\n\nChanges in 0.9 (1 May 95)\n- don't assume that zalloc clears the allocated memory (the TurboC bug\n  was Mark's bug after all :)\n- let again gzread copy uncompressed data unchanged (was working in 0.71)\n- deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented\n- added a test of inflateSync in example.c\n- moved MAX_WBITS to zconf.h because users might want to change that.\n- document explicitly that zalloc(64K) on MSDOS must return a normalized\n  pointer (zero offset)\n- added Makefiles for Microsoft C, Turbo C, Borland C++\n- faster crc32()\n\nChanges in 0.8 (29 April 95)\n- added fast inflate (inffast.c)\n- deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this\n  is incompatible with previous versions of zlib which returned Z_OK.\n- work around a TurboC compiler bug (bad code for b << 0, see infutil.h)\n  (actually that was not a compiler bug, see 0.81 above)\n- gzread no longer reads one extra byte in certain cases\n- In gzio destroy(), don't reference a freed structure\n- avoid many warnings for MSDOS\n- avoid the ERROR symbol which is used by MS Windows\n\nChanges in 0.71 (14 April 95)\n- Fixed more MSDOS compilation problems :( There is still a bug with\n  TurboC large model.\n\nChanges in 0.7 (14 April 95)\n- Added full inflate support.\n- Simplified the crc32() interface. The pre- and post-conditioning\n  (one's complement) is now done inside crc32(). WARNING: this is\n  incompatible with previous versions; see zlib.h for the new usage.\n\nChanges in 0.61 (12 April 95)\n- workaround for a bug in TurboC. example and minigzip now work on MSDOS.\n\nChanges in 0.6 (11 April 95)\n- added minigzip.c\n- added gzdopen to reopen a file descriptor as gzFile\n- added transparent reading of non-gziped files in gzread.\n- fixed bug in gzread (don't read crc as data)\n- fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose).\n- don't allocate big arrays in the stack (for MSDOS)\n- fix some MSDOS compilation problems\n\nChanges in 0.5:\n- do real compression in deflate.c. Z_PARTIAL_FLUSH is supported but\n  not yet Z_FULL_FLUSH.\n- support decompression but only in a single step (forced Z_FINISH)\n- added opaque object for zalloc and zfree.\n- added deflateReset and inflateReset\n- added a variable zlib_version for consistency checking.\n- renamed the 'filter' parameter of deflateInit2 as 'strategy'.\n  Added Z_FILTERED and Z_HUFFMAN_ONLY constants.\n\nChanges in 0.4:\n- avoid \"zip\" everywhere, use zlib instead of ziplib.\n- suppress Z_BLOCK_FLUSH, interpret Z_PARTIAL_FLUSH as block flush\n  if compression method == 8.\n- added adler32 and crc32\n- renamed deflateOptions as deflateInit2, call one or the other but not both\n- added the method parameter for deflateInit2.\n- added inflateInit2\n- simplied considerably deflateInit and inflateInit by not supporting\n  user-provided history buffer. This is supported only in deflateInit2\n  and inflateInit2.\n\nChanges in 0.3:\n- prefix all macro names with Z_\n- use Z_FINISH instead of deflateEnd to finish compression.\n- added Z_HUFFMAN_ONLY\n- added gzerror()\n"
  },
  {
    "path": "external/zlib/FAQ",
    "content": "\n                Frequently Asked Questions about zlib\n\n\nIf your question is not there, please check the zlib home page\nhttp://zlib.net/ which may have more recent information.\nThe lastest zlib FAQ is at http://zlib.net/zlib_faq.html\n\n\n 1. Is zlib Y2K-compliant?\n\n    Yes. zlib doesn't handle dates.\n\n 2. Where can I get a Windows DLL version?\n\n    The zlib sources can be compiled without change to produce a DLL.  See the\n    file win32/DLL_FAQ.txt in the zlib distribution.  Pointers to the\n    precompiled DLL are found in the zlib web site at http://zlib.net/ .\n\n 3. Where can I get a Visual Basic interface to zlib?\n\n    See\n        * http://marknelson.us/1997/01/01/zlib-engine/\n        * win32/DLL_FAQ.txt in the zlib distribution\n\n 4. compress() returns Z_BUF_ERROR.\n\n    Make sure that before the call of compress(), the length of the compressed\n    buffer is equal to the available size of the compressed buffer and not\n    zero.  For Visual Basic, check that this parameter is passed by reference\n    (\"as any\"), not by value (\"as long\").\n\n 5. deflate() or inflate() returns Z_BUF_ERROR.\n\n    Before making the call, make sure that avail_in and avail_out are not zero.\n    When setting the parameter flush equal to Z_FINISH, also make sure that\n    avail_out is big enough to allow processing all pending input.  Note that a\n    Z_BUF_ERROR is not fatal--another call to deflate() or inflate() can be\n    made with more input or output space.  A Z_BUF_ERROR may in fact be\n    unavoidable depending on how the functions are used, since it is not\n    possible to tell whether or not there is more output pending when\n    strm.avail_out returns with zero.  See http://zlib.net/zlib_how.html for a\n    heavily annotated example.\n\n 6. Where's the zlib documentation (man pages, etc.)?\n\n    It's in zlib.h .  Examples of zlib usage are in the files example.c and\n    minigzip.c, with more in examples/ .\n\n 7. Why don't you use GNU autoconf or libtool or ...?\n\n    Because we would like to keep zlib as a very small and simple package.\n    zlib is rather portable and doesn't need much configuration.\n\n 8. I found a bug in zlib.\n\n    Most of the time, such problems are due to an incorrect usage of zlib.\n    Please try to reproduce the problem with a small program and send the\n    corresponding source to us at zlib@gzip.org .  Do not send multi-megabyte\n    data files without prior agreement.\n\n 9. Why do I get \"undefined reference to gzputc\"?\n\n    If \"make test\" produces something like\n\n       example.o(.text+0x154): undefined reference to `gzputc'\n\n    check that you don't have old files libz.* in /usr/lib, /usr/local/lib or\n    /usr/X11R6/lib. Remove any old versions, then do \"make install\".\n\n10. I need a Delphi interface to zlib.\n\n    See the contrib/delphi directory in the zlib distribution.\n\n11. Can zlib handle .zip archives?\n\n    Not by itself, no.  See the directory contrib/minizip in the zlib\n    distribution.\n\n12. Can zlib handle .Z files?\n\n    No, sorry.  You have to spawn an uncompress or gunzip subprocess, or adapt\n    the code of uncompress on your own.\n\n13. How can I make a Unix shared library?\n\n    make clean\n    ./configure -s\n    make\n\n14. How do I install a shared zlib library on Unix?\n\n    After the above, then:\n\n    make install\n\n    However, many flavors of Unix come with a shared zlib already installed.\n    Before going to the trouble of compiling a shared version of zlib and\n    trying to install it, you may want to check if it's already there!  If you\n    can #include <zlib.h>, it's there.  The -lz option will probably link to\n    it.  You can check the version at the top of zlib.h or with the\n    ZLIB_VERSION symbol defined in zlib.h .\n\n15. I have a question about OttoPDF.\n\n    We are not the authors of OttoPDF. The real author is on the OttoPDF web\n    site: Joel Hainley, jhainley@myndkryme.com.\n\n16. Can zlib decode Flate data in an Adobe PDF file?\n\n    Yes. See http://www.pdflib.com/ . To modify PDF forms, see\n    http://sourceforge.net/projects/acroformtool/ .\n\n17. Why am I getting this \"register_frame_info not found\" error on Solaris?\n\n    After installing zlib 1.1.4 on Solaris 2.6, running applications using zlib\n    generates an error such as:\n\n        ld.so.1: rpm: fatal: relocation error: file /usr/local/lib/libz.so:\n        symbol __register_frame_info: referenced symbol not found\n\n    The symbol __register_frame_info is not part of zlib, it is generated by\n    the C compiler (cc or gcc).  You must recompile applications using zlib\n    which have this problem.  This problem is specific to Solaris.  See\n    http://www.sunfreeware.com for Solaris versions of zlib and applications\n    using zlib.\n\n18. Why does gzip give an error on a file I make with compress/deflate?\n\n    The compress and deflate functions produce data in the zlib format, which\n    is different and incompatible with the gzip format.  The gz* functions in\n    zlib on the other hand use the gzip format.  Both the zlib and gzip formats\n    use the same compressed data format internally, but have different headers\n    and trailers around the compressed data.\n\n19. Ok, so why are there two different formats?\n\n    The gzip format was designed to retain the directory information about a\n    single file, such as the name and last modification date.  The zlib format\n    on the other hand was designed for in-memory and communication channel\n    applications, and has a much more compact header and trailer and uses a\n    faster integrity check than gzip.\n\n20. Well that's nice, but how do I make a gzip file in memory?\n\n    You can request that deflate write the gzip format instead of the zlib\n    format using deflateInit2().  You can also request that inflate decode the\n    gzip format using inflateInit2().  Read zlib.h for more details.\n\n21. Is zlib thread-safe?\n\n    Yes.  However any library routines that zlib uses and any application-\n    provided memory allocation routines must also be thread-safe.  zlib's gz*\n    functions use stdio library routines, and most of zlib's functions use the\n    library memory allocation routines by default.  zlib's *Init* functions\n    allow for the application to provide custom memory allocation routines.\n\n    Of course, you should only operate on any given zlib or gzip stream from a\n    single thread at a time.\n\n22. Can I use zlib in my commercial application?\n\n    Yes.  Please read the license in zlib.h.\n\n23. Is zlib under the GNU license?\n\n    No.  Please read the license in zlib.h.\n\n24. The license says that altered source versions must be \"plainly marked\". So\n    what exactly do I need to do to meet that requirement?\n\n    You need to change the ZLIB_VERSION and ZLIB_VERNUM #defines in zlib.h.  In\n    particular, the final version number needs to be changed to \"f\", and an\n    identification string should be appended to ZLIB_VERSION.  Version numbers\n    x.x.x.f are reserved for modifications to zlib by others than the zlib\n    maintainers.  For example, if the version of the base zlib you are altering\n    is \"1.2.3.4\", then in zlib.h you should change ZLIB_VERNUM to 0x123f, and\n    ZLIB_VERSION to something like \"1.2.3.f-zachary-mods-v3\".  You can also\n    update the version strings in deflate.c and inftrees.c.\n\n    For altered source distributions, you should also note the origin and\n    nature of the changes in zlib.h, as well as in ChangeLog and README, along\n    with the dates of the alterations.  The origin should include at least your\n    name (or your company's name), and an email address to contact for help or\n    issues with the library.\n\n    Note that distributing a compiled zlib library along with zlib.h and\n    zconf.h is also a source distribution, and so you should change\n    ZLIB_VERSION and ZLIB_VERNUM and note the origin and nature of the changes\n    in zlib.h as you would for a full source distribution.\n\n25. Will zlib work on a big-endian or little-endian architecture, and can I\n    exchange compressed data between them?\n\n    Yes and yes.\n\n26. Will zlib work on a 64-bit machine?\n\n    Yes.  It has been tested on 64-bit machines, and has no dependence on any\n    data types being limited to 32-bits in length.  If you have any\n    difficulties, please provide a complete problem report to zlib@gzip.org\n\n27. Will zlib decompress data from the PKWare Data Compression Library?\n\n    No.  The PKWare DCL uses a completely different compressed data format than\n    does PKZIP and zlib.  However, you can look in zlib's contrib/blast\n    directory for a possible solution to your problem.\n\n28. Can I access data randomly in a compressed stream?\n\n    No, not without some preparation.  If when compressing you periodically use\n    Z_FULL_FLUSH, carefully write all the pending data at those points, and\n    keep an index of those locations, then you can start decompression at those\n    points.  You have to be careful to not use Z_FULL_FLUSH too often, since it\n    can significantly degrade compression.  Alternatively, you can scan a\n    deflate stream once to generate an index, and then use that index for\n    random access.  See examples/zran.c .\n\n29. Does zlib work on MVS, OS/390, CICS, etc.?\n\n    It has in the past, but we have not heard of any recent evidence.  There\n    were working ports of zlib 1.1.4 to MVS, but those links no longer work.\n    If you know of recent, successful applications of zlib on these operating\n    systems, please let us know.  Thanks.\n\n30. Is there some simpler, easier to read version of inflate I can look at to\n    understand the deflate format?\n\n    First off, you should read RFC 1951.  Second, yes.  Look in zlib's\n    contrib/puff directory.\n\n31. Does zlib infringe on any patents?\n\n    As far as we know, no.  In fact, that was originally the whole point behind\n    zlib.  Look here for some more information:\n\n    http://www.gzip.org/#faq11\n\n32. Can zlib work with greater than 4 GB of data?\n\n    Yes.  inflate() and deflate() will process any amount of data correctly.\n    Each call of inflate() or deflate() is limited to input and output chunks\n    of the maximum value that can be stored in the compiler's \"unsigned int\"\n    type, but there is no limit to the number of chunks.  Note however that the\n    strm.total_in and strm_total_out counters may be limited to 4 GB.  These\n    counters are provided as a convenience and are not used internally by\n    inflate() or deflate().  The application can easily set up its own counters\n    updated after each call of inflate() or deflate() to count beyond 4 GB.\n    compress() and uncompress() may be limited to 4 GB, since they operate in a\n    single call.  gzseek() and gztell() may be limited to 4 GB depending on how\n    zlib is compiled.  See the zlibCompileFlags() function in zlib.h.\n\n    The word \"may\" appears several times above since there is a 4 GB limit only\n    if the compiler's \"long\" type is 32 bits.  If the compiler's \"long\" type is\n    64 bits, then the limit is 16 exabytes.\n\n33. Does zlib have any security vulnerabilities?\n\n    The only one that we are aware of is potentially in gzprintf().  If zlib is\n    compiled to use sprintf() or vsprintf(), then there is no protection\n    against a buffer overflow of an 8K string space (or other value as set by\n    gzbuffer()), other than the caller of gzprintf() assuring that the output\n    will not exceed 8K.  On the other hand, if zlib is compiled to use\n    snprintf() or vsnprintf(), which should normally be the case, then there is\n    no vulnerability.  The ./configure script will display warnings if an\n    insecure variation of sprintf() will be used by gzprintf().  Also the\n    zlibCompileFlags() function will return information on what variant of\n    sprintf() is used by gzprintf().\n\n    If you don't have snprintf() or vsnprintf() and would like one, you can\n    find a portable implementation here:\n\n        http://www.ijs.si/software/snprintf/\n\n    Note that you should be using the most recent version of zlib.  Versions\n    1.1.3 and before were subject to a double-free vulnerability, and versions\n    1.2.1 and 1.2.2 were subject to an access exception when decompressing\n    invalid compressed data.\n\n34. Is there a Java version of zlib?\n\n    Probably what you want is to use zlib in Java. zlib is already included\n    as part of the Java SDK in the java.util.zip package. If you really want\n    a version of zlib written in the Java language, look on the zlib home\n    page for links: http://zlib.net/ .\n\n35. I get this or that compiler or source-code scanner warning when I crank it\n    up to maximally-pedantic. Can't you guys write proper code?\n\n    Many years ago, we gave up attempting to avoid warnings on every compiler\n    in the universe.  It just got to be a waste of time, and some compilers\n    were downright silly as well as contradicted each other.  So now, we simply\n    make sure that the code always works.\n\n36. Valgrind (or some similar memory access checker) says that deflate is\n    performing a conditional jump that depends on an uninitialized value.\n    Isn't that a bug?\n\n    No.  That is intentional for performance reasons, and the output of deflate\n    is not affected.  This only started showing up recently since zlib 1.2.x\n    uses malloc() by default for allocations, whereas earlier versions used\n    calloc(), which zeros out the allocated memory.  Even though the code was\n    correct, versions 1.2.4 and later was changed to not stimulate these\n    checkers.\n\n37. Will zlib read the (insert any ancient or arcane format here) compressed\n    data format?\n\n    Probably not. Look in the comp.compression FAQ for pointers to various\n    formats and associated software.\n\n38. How can I encrypt/decrypt zip files with zlib?\n\n    zlib doesn't support encryption.  The original PKZIP encryption is very\n    weak and can be broken with freely available programs.  To get strong\n    encryption, use GnuPG, http://www.gnupg.org/ , which already includes zlib\n    compression.  For PKZIP compatible \"encryption\", look at\n    http://www.info-zip.org/\n\n39. What's the difference between the \"gzip\" and \"deflate\" HTTP 1.1 encodings?\n\n    \"gzip\" is the gzip format, and \"deflate\" is the zlib format.  They should\n    probably have called the second one \"zlib\" instead to avoid confusion with\n    the raw deflate compressed data format.  While the HTTP 1.1 RFC 2616\n    correctly points to the zlib specification in RFC 1950 for the \"deflate\"\n    transfer encoding, there have been reports of servers and browsers that\n    incorrectly produce or expect raw deflate data per the deflate\n    specficiation in RFC 1951, most notably Microsoft.  So even though the\n    \"deflate\" transfer encoding using the zlib format would be the more\n    efficient approach (and in fact exactly what the zlib format was designed\n    for), using the \"gzip\" transfer encoding is probably more reliable due to\n    an unfortunate choice of name on the part of the HTTP 1.1 authors.\n\n    Bottom line: use the gzip format for HTTP 1.1 encoding.\n\n40. Does zlib support the new \"Deflate64\" format introduced by PKWare?\n\n    No.  PKWare has apparently decided to keep that format proprietary, since\n    they have not documented it as they have previous compression formats.  In\n    any case, the compression improvements are so modest compared to other more\n    modern approaches, that it's not worth the effort to implement.\n\n41. I'm having a problem with the zip functions in zlib, can you help?\n\n    There are no zip functions in zlib.  You are probably using minizip by\n    Giles Vollant, which is found in the contrib directory of zlib.  It is not\n    part of zlib.  In fact none of the stuff in contrib is part of zlib.  The\n    files in there are not supported by the zlib authors.  You need to contact\n    the authors of the respective contribution for help.\n\n42. The match.asm code in contrib is under the GNU General Public License.\n    Since it's part of zlib, doesn't that mean that all of zlib falls under the\n    GNU GPL?\n\n    No.  The files in contrib are not part of zlib.  They were contributed by\n    other authors and are provided as a convenience to the user within the zlib\n    distribution.  Each item in contrib has its own license.\n\n43. Is zlib subject to export controls?  What is its ECCN?\n\n    zlib is not subject to export controls, and so is classified as EAR99.\n\n44. Can you please sign these lengthy legal documents and fax them back to us\n    so that we can use your software in our product?\n\n    No. Go away. Shoo.\n"
  },
  {
    "path": "external/zlib/INDEX",
    "content": "CMakeLists.txt  cmake build file\nChangeLog       history of changes\nFAQ             Frequently Asked Questions about zlib\nINDEX           this file\nMakefile        dummy Makefile that tells you to ./configure\nMakefile.in     template for Unix Makefile\nREADME          guess what\nconfigure       configure script for Unix\nmake_vms.com    makefile for VMS\ntreebuild.xml   XML description of source file dependencies\nzconf.h.cmakein zconf.h template for cmake\nzconf.h.in      zconf.h template for configure\nzlib.3          Man page for zlib\nzlib.3.pdf      Man page in PDF format\nzlib.map        Linux symbol information\nzlib.pc.in      Template for pkg-config descriptor\nzlib2ansi       perl script to convert source files for C++ compilation\n\namiga/          makefiles for Amiga SAS C\ndoc/            documentation for formats and algorithms\nmsdos/          makefiles for MSDOS\nnintendods/     makefile for Nintendo DS\nold/            makefiles for various architectures and zlib documentation\n                files that have not yet been updated for zlib 1.2.x\nqnx/            makefiles for QNX\nwatcom/         makefiles for OpenWatcom\nwin32/          makefiles for Windows\n\n                zlib public header files (required for library use):\nzconf.h\nzlib.h\n\n                private source files used to build the zlib library:\nadler32.c\ncompress.c\ncrc32.c\ncrc32.h\ndeflate.c\ndeflate.h\ngzclose.c\ngzguts.h\ngzlib.c\ngzread.c\ngzwrite.c\ninfback.c\ninffast.c\ninffast.h\ninffixed.h\ninflate.c\ninflate.h\ninftrees.c\ninftrees.h\ntrees.c\ntrees.h\nuncompr.c\nzutil.c\nzutil.h\n\n                source files for sample programs:\nexample.c\nminigzip.c\nSee examples/README.examples for more\n\n                unsupported contribution by third parties\nSee contrib/README.contrib\n"
  },
  {
    "path": "external/zlib/Makefile",
    "content": "all:\n\t-@echo \"Please use ./configure first.  Thank you.\"\n\ndistclean:\n\tmake -f Makefile.in distclean\n"
  },
  {
    "path": "external/zlib/Makefile.in",
    "content": "# Makefile for zlib\n# Copyright (C) 1995-2010 Jean-loup Gailly.\n# For conditions of distribution and use, see copyright notice in zlib.h\n\n# To compile and test, type:\n#    ./configure; make test\n# Normally configure builds both a static and a shared library.\n# If you want to build just a static library, use: ./configure --static\n\n# To use the asm code, type:\n#    cp contrib/asm?86/match.S ./match.S\n#    make LOC=-DASMV OBJA=match.o\n\n# To install /usr/local/lib/libz.* and /usr/local/include/zlib.h, type:\n#    make install\n# To install in $HOME instead of /usr/local, use:\n#    make install prefix=$HOME\n\nCC=cc\n\nCFLAGS=-O\n#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7\n#CFLAGS=-g -DDEBUG\n#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \\\n#           -Wstrict-prototypes -Wmissing-prototypes\n\nSFLAGS=-O\nLDFLAGS=\nTEST_LDFLAGS=-L. libz.a\nLDSHARED=$(CC)\nCPP=$(CC) -E\n\nSTATICLIB=libz.a\nSHAREDLIB=libz.so\nSHAREDLIBV=libz.so.1.2.5\nSHAREDLIBM=libz.so.1\nLIBS=$(STATICLIB) $(SHAREDLIBV)\n\nAR=ar rc\nRANLIB=ranlib\nLDCONFIG=ldconfig\nLDSHAREDLIBC=-lc\nTAR=tar\nSHELL=/bin/sh\nEXE=\n\nprefix = /usr/local\nexec_prefix = ${prefix}\nlibdir = ${exec_prefix}/lib\nsharedlibdir = ${libdir}\nincludedir = ${prefix}/include\nmandir = ${prefix}/share/man\nman3dir = ${mandir}/man3\npkgconfigdir = ${libdir}/pkgconfig\n\nOBJC = adler32.o compress.o crc32.o deflate.o gzclose.o gzlib.o gzread.o \\\n\tgzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o\n\nPIC_OBJC = adler32.lo compress.lo crc32.lo deflate.lo gzclose.lo gzlib.lo gzread.lo \\\n\tgzwrite.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo uncompr.lo zutil.lo\n\n# to use the asm code: make OBJA=match.o, PIC_OBJA=match.lo\nOBJA =\nPIC_OBJA =\n\nOBJS = $(OBJC) $(OBJA)\n\nPIC_OBJS = $(PIC_OBJC) $(PIC_OBJA)\n\nall: static shared\n\nstatic: example$(EXE) minigzip$(EXE)\n\nshared: examplesh$(EXE) minigzipsh$(EXE)\n\nall64: example64$(EXE) minigzip64$(EXE)\n\ncheck: test\n\ntest: all teststatic testshared\n\nteststatic: static\n\t@if echo hello world | ./minigzip | ./minigzip -d && ./example; then \\\n\t  echo '\t\t*** zlib test OK ***'; \\\n\telse \\\n\t  echo '\t\t*** zlib test FAILED ***'; false; \\\n\tfi\n\t-@rm -f foo.gz\n\ntestshared: shared\n\t@LD_LIBRARY_PATH=`pwd`:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \\\n\tLD_LIBRARYN32_PATH=`pwd`:$(LD_LIBRARYN32_PATH) ; export LD_LIBRARYN32_PATH; \\\n\tDYLD_LIBRARY_PATH=`pwd`:$(DYLD_LIBRARY_PATH) ; export DYLD_LIBRARY_PATH; \\\n\tSHLIB_PATH=`pwd`:$(SHLIB_PATH) ; export SHLIB_PATH; \\\n\tif echo hello world | ./minigzipsh | ./minigzipsh -d && ./examplesh; then \\\n\t  echo '\t\t*** zlib shared test OK ***'; \\\n\telse \\\n\t  echo '\t\t*** zlib shared test FAILED ***'; false; \\\n\tfi\n\t-@rm -f foo.gz\n\ntest64: all64\n\t@if echo hello world | ./minigzip64 | ./minigzip64 -d && ./example64; then \\\n\t  echo '\t\t*** zlib 64-bit test OK ***'; \\\n\telse \\\n\t  echo '\t\t*** zlib 64-bit test FAILED ***'; false; \\\n\tfi\n\t-@rm -f foo.gz\n\nlibz.a: $(OBJS)\n\t$(AR) $@ $(OBJS)\n\t-@ ($(RANLIB) $@ || true) >/dev/null 2>&1\n\nmatch.o: match.S\n\t$(CPP) match.S > _match.s\n\t$(CC) -c _match.s\n\tmv _match.o match.o\n\trm -f _match.s\n\nmatch.lo: match.S\n\t$(CPP) match.S > _match.s\n\t$(CC) -c -fPIC _match.s\n\tmv _match.o match.lo\n\trm -f _match.s\n\nexample64.o: example.c zlib.h zconf.h\n\t$(CC) $(CFLAGS) -D_FILE_OFFSET_BITS=64 -c -o $@ example.c\n\nminigzip64.o: minigzip.c zlib.h zconf.h\n\t$(CC) $(CFLAGS) -D_FILE_OFFSET_BITS=64 -c -o $@ minigzip.c\n\n.SUFFIXES: .lo\n\n.c.lo:\n\t-@mkdir objs 2>/dev/null || test -d objs\n\t$(CC) $(SFLAGS) -DPIC -c -o objs/$*.o $<\n\t-@mv objs/$*.o $@\n\n$(SHAREDLIBV): $(PIC_OBJS)\n\t$(LDSHARED) $(SFLAGS) -o $@ $(PIC_OBJS) $(LDSHAREDLIBC) $(LDFLAGS)\n\trm -f $(SHAREDLIB) $(SHAREDLIBM)\n\tln -s $@ $(SHAREDLIB)\n\tln -s $@ $(SHAREDLIBM)\n\t-@rmdir objs\n\nexample$(EXE): example.o $(STATICLIB)\n\t$(CC) $(CFLAGS) -o $@ example.o $(TEST_LDFLAGS)\n\nminigzip$(EXE): minigzip.o $(STATICLIB)\n\t$(CC) $(CFLAGS) -o $@ minigzip.o $(TEST_LDFLAGS)\n\nexamplesh$(EXE): example.o $(SHAREDLIBV)\n\t$(CC) $(CFLAGS) -o $@ example.o -L. $(SHAREDLIBV)\n\nminigzipsh$(EXE): minigzip.o $(SHAREDLIBV)\n\t$(CC) $(CFLAGS) -o $@ minigzip.o -L. $(SHAREDLIBV)\n\nexample64$(EXE): example64.o $(STATICLIB)\n\t$(CC) $(CFLAGS) -o $@ example64.o $(TEST_LDFLAGS)\n\nminigzip64$(EXE): minigzip64.o $(STATICLIB)\n\t$(CC) $(CFLAGS) -o $@ minigzip64.o $(TEST_LDFLAGS)\n\ninstall-libs: $(LIBS)\n\t-@if [ ! -d $(DESTDIR)$(exec_prefix)  ]; then mkdir -p $(DESTDIR)$(exec_prefix); fi\n\t-@if [ ! -d $(DESTDIR)$(libdir)       ]; then mkdir -p $(DESTDIR)$(libdir); fi\n\t-@if [ ! -d $(DESTDIR)$(sharedlibdir) ]; then mkdir -p $(DESTDIR)$(sharedlibdir); fi\n\t-@if [ ! -d $(DESTDIR)$(man3dir)      ]; then mkdir -p $(DESTDIR)$(man3dir); fi\n\t-@if [ ! -d $(DESTDIR)$(pkgconfigdir) ]; then mkdir -p $(DESTDIR)$(pkgconfigdir); fi\n\tcp $(STATICLIB) $(DESTDIR)$(libdir)\n\tcp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)\n\tcd $(DESTDIR)$(libdir); chmod u=rw,go=r $(STATICLIB)\n\t-@(cd $(DESTDIR)$(libdir); $(RANLIB) libz.a || true) >/dev/null 2>&1\n\t-@cd $(DESTDIR)$(sharedlibdir); if test \"$(SHAREDLIBV)\" -a -f $(SHAREDLIBV); then \\\n\t  chmod 755 $(SHAREDLIBV); \\\n\t  rm -f $(SHAREDLIB) $(SHAREDLIBM); \\\n\t  ln -s $(SHAREDLIBV) $(SHAREDLIB); \\\n\t  ln -s $(SHAREDLIBV) $(SHAREDLIBM); \\\n\t  ($(LDCONFIG) || true)  >/dev/null 2>&1; \\\n\tfi\n\tcp zlib.3 $(DESTDIR)$(man3dir)\n\tchmod 644 $(DESTDIR)$(man3dir)/zlib.3\n\tcp zlib.pc $(DESTDIR)$(pkgconfigdir)\n\tchmod 644 $(DESTDIR)$(pkgconfigdir)/zlib.pc\n# The ranlib in install is needed on NeXTSTEP which checks file times\n# ldconfig is for Linux\n\ninstall: install-libs\n\t-@if [ ! -d $(DESTDIR)$(includedir)   ]; then mkdir -p $(DESTDIR)$(includedir); fi\n\tcp zlib.h zconf.h $(DESTDIR)$(includedir)\n\tchmod 644 $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h\n\nuninstall:\n\tcd $(DESTDIR)$(includedir); rm -f zlib.h zconf.h\n\tcd $(DESTDIR)$(libdir); rm -f libz.a; \\\n\tif test \"$(SHAREDLIBV)\" -a -f $(SHAREDLIBV); then \\\n\t  rm -f $(SHAREDLIBV) $(SHAREDLIB) $(SHAREDLIBM); \\\n\tfi\n\tcd $(DESTDIR)$(man3dir); rm -f zlib.3\n\tcd $(DESTDIR)$(pkgconfigdir); rm -f zlib.pc\n\ndocs: zlib.3.pdf\n\nzlib.3.pdf: zlib.3\n\tgroff -mandoc -f H -T ps zlib.3 | ps2pdf - zlib.3.pdf\n\nzconf.h.in: zconf.h.cmakein\n\tsed \"/^#cmakedefine/D\" < zconf.h.cmakein > zconf.h.in\n\ttouch -r zconf.h.cmakein zconf.h.in\n\nzconf: zconf.h.in\n\tcp -p zconf.h.in zconf.h\n\nmostlyclean: clean\nclean:\n\trm -f *.o *.lo *~ \\\n\t   example$(EXE) minigzip$(EXE) examplesh$(EXE) minigzipsh$(EXE) \\\n\t   example64$(EXE) minigzip64$(EXE) \\\n\t   libz.* foo.gz so_locations \\\n\t   _match.s maketree contrib/infback9/*.o\n\trm -rf objs\n\nmaintainer-clean: distclean\ndistclean: clean zconf docs\n\trm -f Makefile zlib.pc\n\t-@rm -f .DS_Store\n\t-@printf 'all:\\n\\t-@echo \"Please use ./configure first.  Thank you.\"\\n' > Makefile\n\t-@printf '\\ndistclean:\\n\\tmake -f Makefile.in distclean\\n' >> Makefile\n\t-@touch -r Makefile.in Makefile\n\ntags:\n\tetags *.[ch]\n\ndepend:\n\tmakedepend -- $(CFLAGS) -- *.[ch]\n\n# DO NOT DELETE THIS LINE -- make depend depends on it.\n\nadler32.o zutil.o: zutil.h zlib.h zconf.h\ngzclose.o gzlib.o gzread.o gzwrite.o: zlib.h zconf.h gzguts.h\ncompress.o example.o minigzip.o uncompr.o: zlib.h zconf.h\ncrc32.o: zutil.h zlib.h zconf.h crc32.h\ndeflate.o: deflate.h zutil.h zlib.h zconf.h\ninfback.o inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h\ninffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h\ninftrees.o: zutil.h zlib.h zconf.h inftrees.h\ntrees.o: deflate.h zutil.h zlib.h zconf.h trees.h\n\nadler32.lo zutil.lo: zutil.h zlib.h zconf.h\ngzclose.lo gzlib.lo gzread.lo gzwrite.lo: zlib.h zconf.h gzguts.h\ncompress.lo example.lo minigzip.lo uncompr.lo: zlib.h zconf.h\ncrc32.lo: zutil.h zlib.h zconf.h crc32.h\ndeflate.lo: deflate.h zutil.h zlib.h zconf.h\ninfback.lo inflate.lo: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h\ninffast.lo: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h\ninftrees.lo: zutil.h zlib.h zconf.h inftrees.h\ntrees.lo: deflate.h zutil.h zlib.h zconf.h trees.h\n"
  },
  {
    "path": "external/zlib/README",
    "content": "ZLIB DATA COMPRESSION LIBRARY\n\nzlib 1.2.5 is a general purpose data compression library.  All the code is\nthread safe.  The data format used by the zlib library is described by RFCs\n(Request for Comments) 1950 to 1952 in the files\nhttp://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format)\nand rfc1952.txt (gzip format).\n\nAll functions of the compression library are documented in the file zlib.h\n(volunteer to write man pages welcome, contact zlib@gzip.org).  A usage example\nof the library is given in the file example.c which also tests that the library\nis working correctly.  Another example is given in the file minigzip.c.  The\ncompression library itself is composed of all source files except example.c and\nminigzip.c.\n\nTo compile all files and run the test program, follow the instructions given at\nthe top of Makefile.in.  In short \"./configure; make test\", and if that goes\nwell, \"make install\" should work for most flavors of Unix.  For Windows, use one\nof the special makefiles in win32/ or contrib/vstudio/ .  For VMS, use\nmake_vms.com.\n\nQuestions about zlib should be sent to <zlib@gzip.org>, or to Gilles Vollant\n<info@winimage.com> for the Windows DLL version.  The zlib home page is\nhttp://zlib.net/ .  Before reporting a problem, please check this site to\nverify that you have the latest version of zlib; otherwise get the latest\nversion and check whether the problem still exists or not.\n\nPLEASE read the zlib FAQ http://zlib.net/zlib_faq.html before asking for help.\n\nMark Nelson <markn@ieee.org> wrote an article about zlib for the Jan.  1997\nissue of Dr.  Dobb's Journal; a copy of the article is available at\nhttp://marknelson.us/1997/01/01/zlib-engine/ .\n\nThe changes made in version 1.2.5 are documented in the file ChangeLog.\n\nUnsupported third party contributions are provided in directory contrib/ .\n\nzlib is available in Java using the java.util.zip package, documented at\nhttp://java.sun.com/developer/technicalArticles/Programming/compression/ .\n\nA Perl interface to zlib written by Paul Marquess <pmqs@cpan.org> is available\nat CPAN (Comprehensive Perl Archive Network) sites, including\nhttp://search.cpan.org/~pmqs/IO-Compress-Zlib/ .\n\nA Python interface to zlib written by A.M. Kuchling <amk@amk.ca> is\navailable in Python 1.5 and later versions, see\nhttp://www.python.org/doc/lib/module-zlib.html .\n\nzlib is built into tcl: http://wiki.tcl.tk/4610 .\n\nAn experimental package to read and write files in .zip format, written on top\nof zlib by Gilles Vollant <info@winimage.com>, is available in the\ncontrib/minizip directory of zlib.\n\n\nNotes for some targets:\n\n- For Windows DLL versions, please see win32/DLL_FAQ.txt\n\n- For 64-bit Irix, deflate.c must be compiled without any optimization. With\n  -O, one libpng test fails. The test works in 32 bit mode (with the -n32\n  compiler flag). The compiler bug has been reported to SGI.\n\n- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works\n  when compiled with cc.\n\n- On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is\n  necessary to get gzprintf working correctly. This is done by configure.\n\n- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with\n  other compilers. Use \"make test\" to check your compiler.\n\n- gzdopen is not supported on RISCOS or BEOS.\n\n- For PalmOs, see http://palmzlib.sourceforge.net/\n\n\nAcknowledgments:\n\n  The deflate format used by zlib was defined by Phil Katz.  The deflate and\n  zlib specifications were written by L.  Peter Deutsch.  Thanks to all the\n  people who reported problems and suggested various improvements in zlib; they\n  are too numerous to cite here.\n\nCopyright notice:\n\n (C) 1995-2010 Jean-loup Gailly and Mark Adler\n\n  This software is provided 'as-is', without any express or implied\n  warranty.  In no event will the authors be held liable for any damages\n  arising from the use of this software.\n\n  Permission is granted to anyone to use this software for any purpose,\n  including commercial applications, and to alter it and redistribute it\n  freely, subject to the following restrictions:\n\n  1. The origin of this software must not be misrepresented; you must not\n     claim that you wrote the original software. If you use this software\n     in a product, an acknowledgment in the product documentation would be\n     appreciated but is not required.\n  2. Altered source versions must be plainly marked as such, and must not be\n     misrepresented as being the original software.\n  3. This notice may not be removed or altered from any source distribution.\n\n  Jean-loup Gailly        Mark Adler\n  jloup@gzip.org          madler@alumni.caltech.edu\n\nIf you use the zlib library in a product, we would appreciate *not* receiving\nlengthy legal documents to sign.  The sources are provided for free but without\nwarranty of any kind.  The library has been entirely written by Jean-loup\nGailly and Mark Adler; it does not include third-party code.\n\nIf you redistribute modified sources, we would appreciate that you include in\nthe file ChangeLog history information documenting your changes.  Please read\nthe FAQ for more information on the distribution of modified source versions.\n"
  },
  {
    "path": "external/zlib/adler32.c",
    "content": "/* adler32.c -- compute the Adler-32 checksum of a data stream\n * Copyright (C) 1995-2007 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n/* @(#) $Id$ */\n\n#include \"zutil.h\"\n\n#define local static\n\nlocal uLong adler32_combine_(uLong adler1, uLong adler2, z_off64_t len2);\n\n#define BASE 65521UL    /* largest prime smaller than 65536 */\n#define NMAX 5552\n/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */\n\n#define DO1(buf,i)  {adler += (buf)[i]; sum2 += adler;}\n#define DO2(buf,i)  DO1(buf,i); DO1(buf,i+1);\n#define DO4(buf,i)  DO2(buf,i); DO2(buf,i+2);\n#define DO8(buf,i)  DO4(buf,i); DO4(buf,i+4);\n#define DO16(buf)   DO8(buf,0); DO8(buf,8);\n\n/* use NO_DIVIDE if your processor does not do division in hardware */\n#ifdef NO_DIVIDE\n#  define MOD(a) \\\n    do { \\\n        if (a >= (BASE << 16)) a -= (BASE << 16); \\\n        if (a >= (BASE << 15)) a -= (BASE << 15); \\\n        if (a >= (BASE << 14)) a -= (BASE << 14); \\\n        if (a >= (BASE << 13)) a -= (BASE << 13); \\\n        if (a >= (BASE << 12)) a -= (BASE << 12); \\\n        if (a >= (BASE << 11)) a -= (BASE << 11); \\\n        if (a >= (BASE << 10)) a -= (BASE << 10); \\\n        if (a >= (BASE << 9)) a -= (BASE << 9); \\\n        if (a >= (BASE << 8)) a -= (BASE << 8); \\\n        if (a >= (BASE << 7)) a -= (BASE << 7); \\\n        if (a >= (BASE << 6)) a -= (BASE << 6); \\\n        if (a >= (BASE << 5)) a -= (BASE << 5); \\\n        if (a >= (BASE << 4)) a -= (BASE << 4); \\\n        if (a >= (BASE << 3)) a -= (BASE << 3); \\\n        if (a >= (BASE << 2)) a -= (BASE << 2); \\\n        if (a >= (BASE << 1)) a -= (BASE << 1); \\\n        if (a >= BASE) a -= BASE; \\\n    } while (0)\n#  define MOD4(a) \\\n    do { \\\n        if (a >= (BASE << 4)) a -= (BASE << 4); \\\n        if (a >= (BASE << 3)) a -= (BASE << 3); \\\n        if (a >= (BASE << 2)) a -= (BASE << 2); \\\n        if (a >= (BASE << 1)) a -= (BASE << 1); \\\n        if (a >= BASE) a -= BASE; \\\n    } while (0)\n#else\n#  define MOD(a) a %= BASE\n#  define MOD4(a) a %= BASE\n#endif\n\n/* ========================================================================= */\nuLong ZEXPORT adler32(adler, buf, len)\n    uLong adler;\n    const Bytef *buf;\n    uInt len;\n{\n    unsigned long sum2;\n    unsigned n;\n\n    /* split Adler-32 into component sums */\n    sum2 = (adler >> 16) & 0xffff;\n    adler &= 0xffff;\n\n    /* in case user likes doing a byte at a time, keep it fast */\n    if (len == 1) {\n        adler += buf[0];\n        if (adler >= BASE)\n            adler -= BASE;\n        sum2 += adler;\n        if (sum2 >= BASE)\n            sum2 -= BASE;\n        return adler | (sum2 << 16);\n    }\n\n    /* initial Adler-32 value (deferred check for len == 1 speed) */\n    if (buf == Z_NULL)\n        return 1L;\n\n    /* in case short lengths are provided, keep it somewhat fast */\n    if (len < 16) {\n        while (len--) {\n            adler += *buf++;\n            sum2 += adler;\n        }\n        if (adler >= BASE)\n            adler -= BASE;\n        MOD4(sum2);             /* only added so many BASE's */\n        return adler | (sum2 << 16);\n    }\n\n    /* do length NMAX blocks -- requires just one modulo operation */\n    while (len >= NMAX) {\n        len -= NMAX;\n        n = NMAX / 16;          /* NMAX is divisible by 16 */\n        do {\n            DO16(buf);          /* 16 sums unrolled */\n            buf += 16;\n        } while (--n);\n        MOD(adler);\n        MOD(sum2);\n    }\n\n    /* do remaining bytes (less than NMAX, still just one modulo) */\n    if (len) {                  /* avoid modulos if none remaining */\n        while (len >= 16) {\n            len -= 16;\n            DO16(buf);\n            buf += 16;\n        }\n        while (len--) {\n            adler += *buf++;\n            sum2 += adler;\n        }\n        MOD(adler);\n        MOD(sum2);\n    }\n\n    /* return recombined sums */\n    return adler | (sum2 << 16);\n}\n\n/* ========================================================================= */\nlocal uLong adler32_combine_(adler1, adler2, len2)\n    uLong adler1;\n    uLong adler2;\n    z_off64_t len2;\n{\n    unsigned long sum1;\n    unsigned long sum2;\n    unsigned rem;\n\n    /* the derivation of this formula is left as an exercise for the reader */\n    rem = (unsigned)(len2 % BASE);\n    sum1 = adler1 & 0xffff;\n    sum2 = rem * sum1;\n    MOD(sum2);\n    sum1 += (adler2 & 0xffff) + BASE - 1;\n    sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem;\n    if (sum1 >= BASE) sum1 -= BASE;\n    if (sum1 >= BASE) sum1 -= BASE;\n    if (sum2 >= (BASE << 1)) sum2 -= (BASE << 1);\n    if (sum2 >= BASE) sum2 -= BASE;\n    return sum1 | (sum2 << 16);\n}\n\n/* ========================================================================= */\nuLong ZEXPORT adler32_combine(adler1, adler2, len2)\n    uLong adler1;\n    uLong adler2;\n    z_off_t len2;\n{\n    return adler32_combine_(adler1, adler2, len2);\n}\n\nuLong ZEXPORT adler32_combine64(adler1, adler2, len2)\n    uLong adler1;\n    uLong adler2;\n    z_off64_t len2;\n{\n    return adler32_combine_(adler1, adler2, len2);\n}\n"
  },
  {
    "path": "external/zlib/amiga/Makefile.pup",
    "content": "# Amiga powerUP (TM) Makefile\n# makefile for libpng and SAS C V6.58/7.00 PPC compiler\n# Copyright (C) 1998 by Andreas R. Kleinert\n\nLIBNAME\t= libzip.a\n\nCC\t= scppc\nCFLAGS\t= NOSTKCHK NOSINT OPTIMIZE OPTGO OPTPEEP OPTINLOCAL OPTINL \\\n\t  OPTLOOP OPTRDEP=8 OPTDEP=8 OPTCOMP=8 NOVER\nAR\t= ppc-amigaos-ar cr\nRANLIB\t= ppc-amigaos-ranlib\nLD\t= ppc-amigaos-ld -r\nLDFLAGS\t= -o\nLDLIBS\t= LIB:scppc.a LIB:end.o\nRM\t= delete quiet\n\nOBJS = adler32.o compress.o crc32.o gzclose.o gzlib.o gzread.o gzwrite.o \\\n       uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o\n\nTEST_OBJS = example.o minigzip.o\n\nall: example minigzip\n\ncheck: test\ntest: all\n\texample\n\techo hello world | minigzip | minigzip -d\n\n$(LIBNAME): $(OBJS)\n\t$(AR) $@ $(OBJS)\n\t-$(RANLIB) $@\n\nexample: example.o $(LIBNAME)\n\t$(LD) $(LDFLAGS) $@ LIB:c_ppc.o $@.o $(LIBNAME) $(LDLIBS)\n\nminigzip: minigzip.o $(LIBNAME)\n\t$(LD) $(LDFLAGS) $@ LIB:c_ppc.o $@.o $(LIBNAME) $(LDLIBS)\n\nmostlyclean: clean\nclean:\n\t$(RM) *.o example minigzip $(LIBNAME) foo.gz\n\nzip:\n\tzip -ul9 zlib README ChangeLog Makefile Make????.??? Makefile.?? \\\n\t  descrip.mms *.[ch]\n\ntgz:\n\tcd ..; tar cfz zlib/zlib.tgz zlib/README zlib/ChangeLog zlib/Makefile \\\n\t  zlib/Make????.??? zlib/Makefile.?? zlib/descrip.mms zlib/*.[ch]\n\n# DO NOT DELETE THIS LINE -- make depend depends on it.\n\nadler32.o: zlib.h zconf.h\ncompress.o: zlib.h zconf.h\ncrc32.o: crc32.h zlib.h zconf.h\ndeflate.o: deflate.h zutil.h zlib.h zconf.h\nexample.o: zlib.h zconf.h\ngzclose.o: zlib.h zconf.h gzguts.h\ngzlib.o: zlib.h zconf.h gzguts.h\ngzread.o: zlib.h zconf.h gzguts.h\ngzwrite.o: zlib.h zconf.h gzguts.h\ninffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h\ninflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h\ninfback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h\ninftrees.o: zutil.h zlib.h zconf.h inftrees.h\nminigzip.o: zlib.h zconf.h\ntrees.o: deflate.h zutil.h zlib.h zconf.h trees.h\nuncompr.o: zlib.h zconf.h\nzutil.o: zutil.h zlib.h zconf.h\n"
  },
  {
    "path": "external/zlib/amiga/Makefile.sas",
    "content": "# SMakefile for zlib\n# Modified from the standard UNIX Makefile Copyright Jean-loup Gailly\n# Osma Ahvenlampi <Osma.Ahvenlampi@hut.fi>\n# Amiga, SAS/C 6.56 & Smake\n\nCC=sc\nCFLAGS=OPT\n#CFLAGS=OPT CPU=68030\n#CFLAGS=DEBUG=LINE\nLDFLAGS=LIB z.lib\n\nSCOPTIONS=OPTSCHED OPTINLINE OPTALIAS OPTTIME OPTINLOCAL STRMERGE \\\n       NOICONS PARMS=BOTH NOSTACKCHECK UTILLIB NOVERSION ERRORREXX \\\n       DEF=POSTINC\n\nOBJS = adler32.o compress.o crc32.o gzclose.o gzlib.o gzread.o gzwrite.o \\\n       uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o\n\nTEST_OBJS = example.o minigzip.o\n\nall: SCOPTIONS example minigzip\n\ncheck: test\ntest: all\n\texample\n\techo hello world | minigzip | minigzip -d\n\ninstall: z.lib\n\tcopy clone zlib.h zconf.h INCLUDE:\n\tcopy clone z.lib LIB:\n\nz.lib: $(OBJS)\n\toml z.lib r $(OBJS)\n\nexample: example.o z.lib\n\t$(CC) $(CFLAGS) LINK TO $@ example.o $(LDFLAGS)\n\nminigzip: minigzip.o z.lib\n\t$(CC) $(CFLAGS) LINK TO $@ minigzip.o $(LDFLAGS)\n\nmostlyclean: clean\nclean:\n\t-delete force quiet example minigzip *.o z.lib foo.gz *.lnk SCOPTIONS\n\nSCOPTIONS: Makefile.sas\n\tcopy to $@ <from <\n$(SCOPTIONS)\n<\n\n# DO NOT DELETE THIS LINE -- make depend depends on it.\n\nadler32.o: zlib.h zconf.h\ncompress.o: zlib.h zconf.h\ncrc32.o: crc32.h zlib.h zconf.h\ndeflate.o: deflate.h zutil.h zlib.h zconf.h\nexample.o: zlib.h zconf.h\ngzclose.o: zlib.h zconf.h gzguts.h\ngzlib.o: zlib.h zconf.h gzguts.h\ngzread.o: zlib.h zconf.h gzguts.h\ngzwrite.o: zlib.h zconf.h gzguts.h\ninffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h\ninflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h\ninfback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h\ninftrees.o: zutil.h zlib.h zconf.h inftrees.h\nminigzip.o: zlib.h zconf.h\ntrees.o: deflate.h zutil.h zlib.h zconf.h trees.h\nuncompr.o: zlib.h zconf.h\nzutil.o: zutil.h zlib.h zconf.h\n"
  },
  {
    "path": "external/zlib/compress.c",
    "content": "/* compress.c -- compress a memory buffer\n * Copyright (C) 1995-2005 Jean-loup Gailly.\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n/* @(#) $Id$ */\n\n#define ZLIB_INTERNAL\n#include \"zlib.h\"\n\n/* ===========================================================================\n     Compresses the source buffer into the destination buffer. The level\n   parameter has the same meaning as in deflateInit.  sourceLen is the byte\n   length of the source buffer. Upon entry, destLen is the total size of the\n   destination buffer, which must be at least 0.1% larger than sourceLen plus\n   12 bytes. Upon exit, destLen is the actual size of the compressed buffer.\n\n     compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough\n   memory, Z_BUF_ERROR if there was not enough room in the output buffer,\n   Z_STREAM_ERROR if the level parameter is invalid.\n*/\nint ZEXPORT compress2 (dest, destLen, source, sourceLen, level)\n    Bytef *dest;\n    uLongf *destLen;\n    const Bytef *source;\n    uLong sourceLen;\n    int level;\n{\n    z_stream stream;\n    int err;\n\n    stream.next_in = (Bytef*)source;\n    stream.avail_in = (uInt)sourceLen;\n#ifdef MAXSEG_64K\n    /* Check for source > 64K on 16-bit machine: */\n    if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;\n#endif\n    stream.next_out = dest;\n    stream.avail_out = (uInt)*destLen;\n    if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;\n\n    stream.zalloc = (alloc_func)0;\n    stream.zfree = (free_func)0;\n    stream.opaque = (voidpf)0;\n\n    err = deflateInit(&stream, level);\n    if (err != Z_OK) return err;\n\n    err = deflate(&stream, Z_FINISH);\n    if (err != Z_STREAM_END) {\n        deflateEnd(&stream);\n        return err == Z_OK ? Z_BUF_ERROR : err;\n    }\n    *destLen = stream.total_out;\n\n    err = deflateEnd(&stream);\n    return err;\n}\n\n/* ===========================================================================\n */\nint ZEXPORT compress (dest, destLen, source, sourceLen)\n    Bytef *dest;\n    uLongf *destLen;\n    const Bytef *source;\n    uLong sourceLen;\n{\n    return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION);\n}\n\n/* ===========================================================================\n     If the default memLevel or windowBits for deflateInit() is changed, then\n   this function needs to be updated.\n */\nuLong ZEXPORT compressBound (sourceLen)\n    uLong sourceLen;\n{\n    return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +\n           (sourceLen >> 25) + 13;\n}\n"
  },
  {
    "path": "external/zlib/configure",
    "content": "#!/bin/sh\n# configure script for zlib.\n#\n# Normally configure builds both a static and a shared library.\n# If you want to build just a static library, use: ./configure --static\n#\n# To impose specific compiler or flags or install directory, use for example:\n#    prefix=$HOME CC=cc CFLAGS=\"-O4\" ./configure\n# or for csh/tcsh users:\n#    (setenv prefix $HOME; setenv CC cc; setenv CFLAGS \"-O4\"; ./configure)\n\n# Incorrect settings of CC or CFLAGS may prevent creating a shared library.\n# If you have problems, try without defining CC and CFLAGS before reporting\n# an error.\n\nif [ -n \"${CHOST}\" ]; then\n    uname=\"$(echo \"${CHOST}\" | sed -e 's/^[^-]*-\\([^-]*\\)$/\\1/' -e 's/^[^-]*-[^-]*-\\([^-]*\\)$/\\1/' -e 's/^[^-]*-[^-]*-\\([^-]*\\)-.*$/\\1/')\"\n    CROSS_PREFIX=\"${CHOST}-\"\nfi\n\nSTATICLIB=libz.a\nLDFLAGS=\"${LDFLAGS} -L. ${STATICLIB}\"\nVER=`sed -n -e '/VERSION \"/s/.*\"\\(.*\\)\".*/\\1/p' < zlib.h`\nVER3=`sed -n -e '/VERSION \"/s/.*\"\\([0-9]*\\\\.[0-9]*\\\\.[0-9]*\\).*/\\1/p' < zlib.h`\nVER2=`sed -n -e '/VERSION \"/s/.*\"\\([0-9]*\\\\.[0-9]*\\)\\\\..*/\\1/p' < zlib.h`\nVER1=`sed -n -e '/VERSION \"/s/.*\"\\([0-9]*\\)\\\\..*/\\1/p' < zlib.h`\nif \"${CROSS_PREFIX}ar\" --version >/dev/null 2>/dev/null || test $? -lt 126; then\n    AR=${AR-\"${CROSS_PREFIX}ar\"}\n    test -n \"${CROSS_PREFIX}\" && echo Using ${AR}\nelse\n    AR=${AR-\"ar\"}\n    test -n \"${CROSS_PREFIX}\" && echo Using ${AR}\nfi\nAR_RC=\"${AR} rc\"\nif \"${CROSS_PREFIX}ranlib\" --version >/dev/null 2>/dev/null || test $? -lt 126; then\n    RANLIB=${RANLIB-\"${CROSS_PREFIX}ranlib\"}\n    test -n \"${CROSS_PREFIX}\" && echo Using ${RANLIB}\nelse\n    RANLIB=${RANLIB-\"ranlib\"}\nfi\nif \"${CROSS_PREFIX}nm\" --version >/dev/null 2>/dev/null || test $? -lt 126; then\n    NM=${NM-\"${CROSS_PREFIX}nm\"}\n    test -n \"${CROSS_PREFIX}\" && echo Using ${NM}\nelse\n    NM=${NM-\"nm\"}\nfi\nLDCONFIG=${LDCONFIG-\"ldconfig\"}\nLDSHAREDLIBC=\"${LDSHAREDLIBC--lc}\"\nprefix=${prefix-/usr/local}\nexec_prefix=${exec_prefix-'${prefix}'}\nlibdir=${libdir-'${exec_prefix}/lib'}\nsharedlibdir=${sharedlibdir-'${libdir}'}\nincludedir=${includedir-'${prefix}/include'}\nmandir=${mandir-'${prefix}/share/man'}\nshared_ext='.so'\nshared=1\nzprefix=0\nbuild64=0\ngcc=0\nold_cc=\"$CC\"\nold_cflags=\"$CFLAGS\"\n\nwhile test $# -ge 1\ndo\ncase \"$1\" in\n    -h* | --help)\n      echo 'usage:'\n      echo '  configure [--zprefix] [--prefix=PREFIX]  [--eprefix=EXPREFIX]'\n      echo '    [--static] [--64] [--libdir=LIBDIR] [--sharedlibdir=LIBDIR]'\n      echo '    [--includedir=INCLUDEDIR]'\n        exit 0 ;;\n    -p*=* | --prefix=*) prefix=`echo $1 | sed 's/.*=//'`; shift ;;\n    -e*=* | --eprefix=*) exec_prefix=`echo $1 | sed 's/.*=//'`; shift ;;\n    -l*=* | --libdir=*) libdir=`echo $1 | sed 's/.*=//'`; shift ;;\n    --sharedlibdir=*) sharedlibdir=`echo $1 | sed 's/.*=//'`; shift ;;\n    -i*=* | --includedir=*) includedir=`echo $1 | sed 's/.*=//'`;shift ;;\n    -u*=* | --uname=*) uname=`echo $1 | sed 's/.*=//'`;shift ;;\n    -p* | --prefix) prefix=\"$2\"; shift; shift ;;\n    -e* | --eprefix) exec_prefix=\"$2\"; shift; shift ;;\n    -l* | --libdir) libdir=\"$2\"; shift; shift ;;\n    -i* | --includedir) includedir=\"$2\"; shift; shift ;;\n    -s* | --shared | --enable-shared) shared=1; shift ;;\n    -t | --static) shared=0; shift ;;\n    -z* | --zprefix) zprefix=1; shift ;;\n    -6* | --64) build64=1; shift ;;\n    --sysconfdir=*) echo \"ignored option: --sysconfdir\"; shift ;;\n    --localstatedir=*) echo \"ignored option: --localstatedir\"; shift ;;\n    *) echo \"unknown option: $1\"; echo \"$0 --help for help\"; exit 1 ;;\n    esac\ndone\n\ntest=ztest$$\ncat > $test.c <<EOF\nextern int getchar();\nint hello() {return getchar();}\nEOF\n\ntest -z \"$CC\" && echo Checking for ${CROSS_PREFIX}gcc...\ncc=${CC-${CROSS_PREFIX}gcc}\ncflags=${CFLAGS-\"-O3\"}\n# to force the asm version use: CFLAGS=\"-O3 -DASMV\" ./configure\ncase \"$cc\" in\n  *gcc*) gcc=1 ;;\nesac\n\nif test \"$gcc\" -eq 1 && ($cc -c $cflags $test.c) 2>/dev/null; then\n  CC=\"$cc\"\n  SFLAGS=\"${CFLAGS--O3} -fPIC\"\n  CFLAGS=\"${CFLAGS--O3}\"\n  if test $build64 -eq 1; then\n    CFLAGS=\"${CFLAGS} -m64\"\n    SFLAGS=\"${SFLAGS} -m64\"\n  fi\n  if test \"${ZLIBGCCWARN}\" = \"YES\"; then\n    CFLAGS=\"${CFLAGS} -Wall -Wextra -pedantic\"\n  fi\n  if test -z \"$uname\"; then\n    uname=`(uname -s || echo unknown) 2>/dev/null`\n  fi\n  case \"$uname\" in\n  Linux* | linux* | GNU | GNU/* | *BSD | DragonFly) LDSHARED=${LDSHARED-\"$cc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map\"} ;;\n  CYGWIN* | Cygwin* | cygwin* | OS/2*)\n        EXE='.exe' ;;\n  MINGW*|mingw*)\n# temporary bypass\n        rm -f $test.[co] $test $test$shared_ext\n        echo \"Please use win32/Makefile.gcc instead.\"\n        exit 1\n        LDSHARED=${LDSHARED-\"$cc -shared\"}\n        LDSHAREDLIBC=\"\"\n        EXE='.exe' ;;\n  QNX*)  # This is for QNX6. I suppose that the QNX rule below is for QNX2,QNX4\n         # (alain.bonnefoy@icbt.com)\n                 LDSHARED=${LDSHARED-\"$cc -shared -Wl,-hlibz.so.1\"} ;;\n  HP-UX*)\n         LDSHARED=${LDSHARED-\"$cc -shared $SFLAGS\"}\n         case `(uname -m || echo unknown) 2>/dev/null` in\n         ia64)\n                 shared_ext='.so'\n                 SHAREDLIB='libz.so' ;;\n         *)\n                 shared_ext='.sl'\n                 SHAREDLIB='libz.sl' ;;\n         esac ;;\n  Darwin*)   shared_ext='.dylib'\n             SHAREDLIB=libz$shared_ext\n             SHAREDLIBV=libz.$VER$shared_ext\n             SHAREDLIBM=libz.$VER1$shared_ext\n             LDSHARED=${LDSHARED-\"$cc -dynamiclib -install_name $libdir/$SHAREDLIBM -compatibility_version $VER1 -current_version $VER3\"} ;;\n  *)             LDSHARED=${LDSHARED-\"$cc -shared\"} ;;\n  esac\nelse\n  # find system name and corresponding cc options\n  CC=${CC-cc}\n  gcc=0\n  if test -z \"$uname\"; then\n    uname=`(uname -sr || echo unknown) 2>/dev/null`\n  fi\n  case \"$uname\" in\n  HP-UX*)    SFLAGS=${CFLAGS-\"-O +z\"}\n             CFLAGS=${CFLAGS-\"-O\"}\n#            LDSHARED=${LDSHARED-\"ld -b +vnocompatwarnings\"}\n             LDSHARED=${LDSHARED-\"ld -b\"}\n         case `(uname -m || echo unknown) 2>/dev/null` in\n         ia64)\n             shared_ext='.so'\n             SHAREDLIB='libz.so' ;;\n         *)\n             shared_ext='.sl'\n             SHAREDLIB='libz.sl' ;;\n         esac ;;\n  IRIX*)     SFLAGS=${CFLAGS-\"-ansi -O2 -rpath .\"}\n             CFLAGS=${CFLAGS-\"-ansi -O2\"}\n             LDSHARED=${LDSHARED-\"cc -shared -Wl,-soname,libz.so.1\"} ;;\n  OSF1\\ V4*) SFLAGS=${CFLAGS-\"-O -std1\"}\n             CFLAGS=${CFLAGS-\"-O -std1\"}\n             LDFLAGS=\"${LDFLAGS} -Wl,-rpath,.\"\n             LDSHARED=${LDSHARED-\"cc -shared  -Wl,-soname,libz.so -Wl,-msym -Wl,-rpath,$(libdir) -Wl,-set_version,${VER}:1.0\"} ;;\n  OSF1*)     SFLAGS=${CFLAGS-\"-O -std1\"}\n             CFLAGS=${CFLAGS-\"-O -std1\"}\n             LDSHARED=${LDSHARED-\"cc -shared -Wl,-soname,libz.so.1\"} ;;\n  QNX*)      SFLAGS=${CFLAGS-\"-4 -O\"}\n             CFLAGS=${CFLAGS-\"-4 -O\"}\n             LDSHARED=${LDSHARED-\"cc\"}\n             RANLIB=${RANLIB-\"true\"}\n             AR_RC=\"cc -A\" ;;\n  SCO_SV\\ 3.2*) SFLAGS=${CFLAGS-\"-O3 -dy -KPIC \"}\n             CFLAGS=${CFLAGS-\"-O3\"}\n             LDSHARED=${LDSHARED-\"cc -dy -KPIC -G\"} ;;\n  SunOS\\ 5*) LDSHARED=${LDSHARED-\"cc -G\"}\n         case `(uname -m || echo unknown) 2>/dev/null` in\n         i86*)\n             SFLAGS=${CFLAGS-\"-xpentium -fast -KPIC -R.\"}\n             CFLAGS=${CFLAGS-\"-xpentium -fast\"} ;;\n         *)\n             SFLAGS=${CFLAGS-\"-fast -xcg92 -KPIC -R.\"}\n             CFLAGS=${CFLAGS-\"-fast -xcg92\"} ;;\n         esac ;;\n  SunOS\\ 4*) SFLAGS=${CFLAGS-\"-O2 -PIC\"}\n             CFLAGS=${CFLAGS-\"-O2\"}\n             LDSHARED=${LDSHARED-\"ld\"} ;;\n  SunStudio\\ 9*) SFLAGS=${CFLAGS-\"-fast -xcode=pic32 -xtarget=ultra3 -xarch=v9b\"}\n             CFLAGS=${CFLAGS-\"-fast -xtarget=ultra3 -xarch=v9b\"}\n             LDSHARED=${LDSHARED-\"cc -xarch=v9b\"} ;;\n  UNIX_System_V\\ 4.2.0)\n             SFLAGS=${CFLAGS-\"-KPIC -O\"}\n             CFLAGS=${CFLAGS-\"-O\"}\n             LDSHARED=${LDSHARED-\"cc -G\"} ;;\n  UNIX_SV\\ 4.2MP)\n             SFLAGS=${CFLAGS-\"-Kconform_pic -O\"}\n             CFLAGS=${CFLAGS-\"-O\"}\n             LDSHARED=${LDSHARED-\"cc -G\"} ;;\n  OpenUNIX\\ 5)\n             SFLAGS=${CFLAGS-\"-KPIC -O\"}\n             CFLAGS=${CFLAGS-\"-O\"}\n             LDSHARED=${LDSHARED-\"cc -G\"} ;;\n  AIX*)  # Courtesy of dbakker@arrayasolutions.com\n             SFLAGS=${CFLAGS-\"-O -qmaxmem=8192\"}\n             CFLAGS=${CFLAGS-\"-O -qmaxmem=8192\"}\n             LDSHARED=${LDSHARED-\"xlc -G\"} ;;\n  # send working options for other systems to zlib@gzip.org\n  *)         SFLAGS=${CFLAGS-\"-O\"}\n             CFLAGS=${CFLAGS-\"-O\"}\n             LDSHARED=${LDSHARED-\"cc -shared\"} ;;\n  esac\nfi\n\nSHAREDLIB=${SHAREDLIB-\"libz$shared_ext\"}\nSHAREDLIBV=${SHAREDLIBV-\"libz$shared_ext.$VER\"}\nSHAREDLIBM=${SHAREDLIBM-\"libz$shared_ext.$VER1\"}\n\nif test $shared -eq 1; then\n  echo Checking for shared library support...\n  # we must test in two steps (cc then ld), required at least on SunOS 4.x\n  if test \"`($CC -w -c $SFLAGS $test.c) 2>&1`\" = \"\" &&\n     test \"`($LDSHARED $SFLAGS -o $test$shared_ext $test.o) 2>&1`\" = \"\"; then\n    echo Building shared library $SHAREDLIBV with $CC.\n  elif test -z \"$old_cc\" -a -z \"$old_cflags\"; then\n    echo No shared library support.\n    shared=0;\n  else\n    echo Tested $CC -w -c $SFLAGS $test.c\n    $CC -w -c $SFLAGS $test.c\n    echo Tested $LDSHARED $SFLAGS -o $test$shared_ext $test.o\n    $LDSHARED $SFLAGS -o $test$shared_ext $test.o\n    echo 'No shared library support; try without defining CC and CFLAGS'\n    shared=0;\n  fi\nfi\nif test $shared -eq 0; then\n  LDSHARED=\"$CC\"\n  ALL=\"static\"\n  TEST=\"all teststatic\"\n  SHAREDLIB=\"\"\n  SHAREDLIBV=\"\"\n  SHAREDLIBM=\"\"\n  echo Building static library $STATICLIB version $VER with $CC.\nelse\n  ALL=\"static shared\"\n  TEST=\"all teststatic testshared\"\nfi\n\ncat > $test.c <<EOF\n#include <sys/types.h>\noff64_t dummy = 0;\nEOF\nif test \"`($CC -c $CFLAGS -D_LARGEFILE64_SOURCE=1 $test.c) 2>&1`\" = \"\"; then\n  CFLAGS=\"${CFLAGS} -D_LARGEFILE64_SOURCE=1\"\n  SFLAGS=\"${SFLAGS} -D_LARGEFILE64_SOURCE=1\"\n  ALL=\"${ALL} all64\"\n  TEST=\"${TEST} test64\"\n  echo \"Checking for off64_t... Yes.\"\n  echo \"Checking for fseeko... Yes.\"\nelse\n  echo \"Checking for off64_t... No.\"\n  cat > $test.c <<EOF\n#include <stdio.h>\nint main(void) {\n  fseeko(NULL, 0, 0);\n  return 0;\n}\nEOF\n  if test \"`($CC $CFLAGS -o $test $test.c) 2>&1`\" = \"\"; then\n    echo \"Checking for fseeko... Yes.\"\n  else\n    CFLAGS=\"${CFLAGS} -DNO_FSEEKO\"\n    SFLAGS=\"${SFLAGS} -DNO_FSEEKO\"\n    echo \"Checking for fseeko... No.\"\n  fi\nfi\n\ncp -p zconf.h.in zconf.h\n\ncat > $test.c <<EOF\n#include <unistd.h>\nint main() { return 0; }\nEOF\nif test \"`($CC -c $CFLAGS $test.c) 2>&1`\" = \"\"; then\n  sed < zconf.h \"/^#ifdef HAVE_UNISTD_H.* may be/s/def HAVE_UNISTD_H\\(.*\\) may be/ 1\\1 was/\" > zconf.temp.h\n  mv zconf.temp.h zconf.h\n  echo \"Checking for unistd.h... Yes.\"\nelse\n  echo \"Checking for unistd.h... No.\"\nfi\n\nif test $zprefix -eq 1; then\n  sed < zconf.h \"/#ifdef Z_PREFIX.* may be/s/def Z_PREFIX\\(.*\\) may be/ 1\\1 was/\" > zconf.temp.h\n  mv zconf.temp.h zconf.h\n  echo \"Using z_ prefix on all symbols.\"\nfi\n\ncat > $test.c <<EOF\n#include <stdio.h>\n#include <stdarg.h>\n#include \"zconf.h\"\n\nint main()\n{\n#ifndef STDC\n  choke me\n#endif\n\n  return 0;\n}\nEOF\n\nif test \"`($CC -c $CFLAGS $test.c) 2>&1`\" = \"\"; then\n  echo \"Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf().\"\n\n  cat > $test.c <<EOF\n#include <stdio.h>\n#include <stdarg.h>\n\nint mytest(const char *fmt, ...)\n{\n  char buf[20];\n  va_list ap;\n\n  va_start(ap, fmt);\n  vsnprintf(buf, sizeof(buf), fmt, ap);\n  va_end(ap);\n  return 0;\n}\n\nint main()\n{\n  return (mytest(\"Hello%d\\n\", 1));\n}\nEOF\n\n  if test \"`($CC $CFLAGS -o $test $test.c) 2>&1`\" = \"\"; then\n    echo \"Checking for vsnprintf() in stdio.h... Yes.\"\n\n    cat >$test.c <<EOF\n#include <stdio.h>\n#include <stdarg.h>\n\nint mytest(const char *fmt, ...)\n{\n  int n;\n  char buf[20];\n  va_list ap;\n\n  va_start(ap, fmt);\n  n = vsnprintf(buf, sizeof(buf), fmt, ap);\n  va_end(ap);\n  return n;\n}\n\nint main()\n{\n  return (mytest(\"Hello%d\\n\", 1));\n}\nEOF\n\n    if test \"`($CC -c $CFLAGS $test.c) 2>&1`\" = \"\"; then\n      echo \"Checking for return value of vsnprintf()... Yes.\"\n    else\n      CFLAGS=\"$CFLAGS -DHAS_vsnprintf_void\"\n      SFLAGS=\"$SFLAGS -DHAS_vsnprintf_void\"\n      echo \"Checking for return value of vsnprintf()... No.\"\n      echo \"  WARNING: apparently vsnprintf() does not return a value. zlib\"\n      echo \"  can build but will be open to possible string-format security\"\n      echo \"  vulnerabilities.\"\n    fi\n  else\n    CFLAGS=\"$CFLAGS -DNO_vsnprintf\"\n    SFLAGS=\"$SFLAGS -DNO_vsnprintf\"\n    echo \"Checking for vsnprintf() in stdio.h... No.\"\n    echo \"  WARNING: vsnprintf() not found, falling back to vsprintf(). zlib\"\n    echo \"  can build but will be open to possible buffer-overflow security\"\n    echo \"  vulnerabilities.\"\n\n    cat >$test.c <<EOF\n#include <stdio.h>\n#include <stdarg.h>\n\nint mytest(const char *fmt, ...)\n{\n  int n;\n  char buf[20];\n  va_list ap;\n\n  va_start(ap, fmt);\n  n = vsprintf(buf, fmt, ap);\n  va_end(ap);\n  return n;\n}\n\nint main()\n{\n  return (mytest(\"Hello%d\\n\", 1));\n}\nEOF\n\n    if test \"`($CC -c $CFLAGS $test.c) 2>&1`\" = \"\"; then\n      echo \"Checking for return value of vsprintf()... Yes.\"\n    else\n      CFLAGS=\"$CFLAGS -DHAS_vsprintf_void\"\n      SFLAGS=\"$SFLAGS -DHAS_vsprintf_void\"\n      echo \"Checking for return value of vsprintf()... No.\"\n      echo \"  WARNING: apparently vsprintf() does not return a value. zlib\"\n      echo \"  can build but will be open to possible string-format security\"\n      echo \"  vulnerabilities.\"\n    fi\n  fi\nelse\n  echo \"Checking whether to use vs[n]printf() or s[n]printf()... using s[n]printf().\"\n\n  cat >$test.c <<EOF\n#include <stdio.h>\n\nint mytest()\n{\n  char buf[20];\n\n  snprintf(buf, sizeof(buf), \"%s\", \"foo\");\n  return 0;\n}\n\nint main()\n{\n  return (mytest());\n}\nEOF\n\n  if test \"`($CC $CFLAGS -o $test $test.c) 2>&1`\" = \"\"; then\n    echo \"Checking for snprintf() in stdio.h... Yes.\"\n\n    cat >$test.c <<EOF\n#include <stdio.h>\n\nint mytest()\n{\n  char buf[20];\n\n  return snprintf(buf, sizeof(buf), \"%s\", \"foo\");\n}\n\nint main()\n{\n  return (mytest());\n}\nEOF\n\n    if test \"`($CC -c $CFLAGS $test.c) 2>&1`\" = \"\"; then\n      echo \"Checking for return value of snprintf()... Yes.\"\n    else\n      CFLAGS=\"$CFLAGS -DHAS_snprintf_void\"\n      SFLAGS=\"$SFLAGS -DHAS_snprintf_void\"\n      echo \"Checking for return value of snprintf()... No.\"\n      echo \"  WARNING: apparently snprintf() does not return a value. zlib\"\n      echo \"  can build but will be open to possible string-format security\"\n      echo \"  vulnerabilities.\"\n    fi\n  else\n    CFLAGS=\"$CFLAGS -DNO_snprintf\"\n    SFLAGS=\"$SFLAGS -DNO_snprintf\"\n    echo \"Checking for snprintf() in stdio.h... No.\"\n    echo \"  WARNING: snprintf() not found, falling back to sprintf(). zlib\"\n    echo \"  can build but will be open to possible buffer-overflow security\"\n    echo \"  vulnerabilities.\"\n\n    cat >$test.c <<EOF\n#include <stdio.h>\n\nint mytest()\n{\n  char buf[20];\n\n  return sprintf(buf, \"%s\", \"foo\");\n}\n\nint main()\n{\n  return (mytest());\n}\nEOF\n\n    if test \"`($CC -c $CFLAGS $test.c) 2>&1`\" = \"\"; then\n      echo \"Checking for return value of sprintf()... Yes.\"\n    else\n      CFLAGS=\"$CFLAGS -DHAS_sprintf_void\"\n      SFLAGS=\"$SFLAGS -DHAS_sprintf_void\"\n      echo \"Checking for return value of sprintf()... No.\"\n      echo \"  WARNING: apparently sprintf() does not return a value. zlib\"\n      echo \"  can build but will be open to possible string-format security\"\n      echo \"  vulnerabilities.\"\n    fi\n  fi\nfi\n\nif test \"$gcc\" -eq 1; then\n  cat > $test.c <<EOF\n#if ((__GNUC__-0) * 10 + __GNUC_MINOR__-0 >= 33)\n#  define ZLIB_INTERNAL __attribute__((visibility (\"hidden\")))\n#else\n#  define ZLIB_INTERNAL\n#endif\nint ZLIB_INTERNAL foo;\nint main()\n{\n  return 0;\n}\nEOF\n  if test \"`($CC -c $CFLAGS $test.c) 2>&1`\" = \"\"; then\n    echo \"Checking for attribute(visibility) support... Yes.\"\n  else\n    CFLAGS=\"$CFLAGS -DNO_VIZ\"\n    SFLAGS=\"$SFLAGS -DNO_VIZ\"\n    echo \"Checking for attribute(visibility) support... No.\"\n  fi\nfi\n\nCPP=${CPP-\"$CC -E\"}\ncase $CFLAGS in\n  *ASMV*)\n    if test \"`$NM $test.o | grep _hello`\" = \"\"; then\n      CPP=\"$CPP -DNO_UNDERLINE\"\n      echo Checking for underline in external names... No.\n    else\n      echo Checking for underline in external names... Yes.\n    fi ;;\nesac\n\nrm -f $test.[co] $test $test$shared_ext\n\n# udpate Makefile\nsed < Makefile.in \"\n/^CC *=/s#=.*#=$CC#\n/^CFLAGS *=/s#=.*#=$CFLAGS#\n/^SFLAGS *=/s#=.*#=$SFLAGS#\n/^LDFLAGS *=/s#=.*#=$LDFLAGS#\n/^LDSHARED *=/s#=.*#=$LDSHARED#\n/^CPP *=/s#=.*#=$CPP#\n/^STATICLIB *=/s#=.*#=$STATICLIB#\n/^SHAREDLIB *=/s#=.*#=$SHAREDLIB#\n/^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV#\n/^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM#\n/^AR *=/s#=.*#=$AR_RC#\n/^RANLIB *=/s#=.*#=$RANLIB#\n/^LDCONFIG *=/s#=.*#=$LDCONFIG#\n/^LDSHAREDLIBC *=/s#=.*#=$LDSHAREDLIBC#\n/^EXE *=/s#=.*#=$EXE#\n/^prefix *=/s#=.*#=$prefix#\n/^exec_prefix *=/s#=.*#=$exec_prefix#\n/^libdir *=/s#=.*#=$libdir#\n/^sharedlibdir *=/s#=.*#=$sharedlibdir#\n/^includedir *=/s#=.*#=$includedir#\n/^mandir *=/s#=.*#=$mandir#\n/^all: */s#:.*#: $ALL#\n/^test: */s#:.*#: $TEST#\n\" > Makefile\n\nsed < zlib.pc.in \"\n/^CC *=/s#=.*#=$CC#\n/^CFLAGS *=/s#=.*#=$CFLAGS#\n/^CPP *=/s#=.*#=$CPP#\n/^LDSHARED *=/s#=.*#=$LDSHARED#\n/^STATICLIB *=/s#=.*#=$STATICLIB#\n/^SHAREDLIB *=/s#=.*#=$SHAREDLIB#\n/^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV#\n/^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM#\n/^AR *=/s#=.*#=$AR_RC#\n/^RANLIB *=/s#=.*#=$RANLIB#\n/^EXE *=/s#=.*#=$EXE#\n/^prefix *=/s#=.*#=$prefix#\n/^exec_prefix *=/s#=.*#=$exec_prefix#\n/^libdir *=/s#=.*#=$libdir#\n/^sharedlibdir *=/s#=.*#=$sharedlibdir#\n/^includedir *=/s#=.*#=$includedir#\n/^mandir *=/s#=.*#=$mandir#\n/^LDFLAGS *=/s#=.*#=$LDFLAGS#\n\" | sed -e \"\ns/\\@VERSION\\@/$VER/g;\n\" > zlib.pc\n"
  },
  {
    "path": "external/zlib/contrib/README.contrib",
    "content": "All files under this contrib directory are UNSUPPORTED. There were\nprovided by users of zlib and were not tested by the authors of zlib.\nUse at your own risk. Please contact the authors of the contributions\nfor help about these, not the zlib authors. Thanks.\n\n\nada/        by Dmitriy Anisimkov <anisimkov@yahoo.com>\n        Support for Ada\n        See http://zlib-ada.sourceforge.net/\n\namd64/      by Mikhail Teterin <mi@ALDAN.algebra.com>\n        asm code for AMD64\n        See patch at http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/96393\n\nasm686/     by Brian Raiter <breadbox@muppetlabs.com>\n        asm code for Pentium and PPro/PII, using the AT&T (GNU as) syntax\n        See http://www.muppetlabs.com/~breadbox/software/assembly.html\n\nblast/      by Mark Adler <madler@alumni.caltech.edu>\n        Decompressor for output of PKWare Data Compression Library (DCL)\n\ndelphi/     by Cosmin Truta <cosmint@cs.ubbcluj.ro>\n        Support for Delphi and C++ Builder\n\ndotzlib/    by Henrik Ravn <henrik@ravn.com>\n        Support for Microsoft .Net and Visual C++ .Net\n\ngcc_gvmat64/by Gilles Vollant <info@winimage.com>\n        GCC Version of x86 64-bit (AMD64 and Intel EM64t) code for x64\n        assembler to replace longest_match() and inflate_fast()\n\ninfback9/   by Mark Adler <madler@alumni.caltech.edu>\n        Unsupported diffs to infback to decode the deflate64 format\n\ninflate86/  by Chris Anderson <christop@charm.net>\n        Tuned x86 gcc asm code to replace inflate_fast()\n\niostream/   by Kevin Ruland <kevin@rodin.wustl.edu>\n        A C++ I/O streams interface to the zlib gz* functions\n\niostream2/  by Tyge Lvset <Tyge.Lovset@cmr.no>\n        Another C++ I/O streams interface\n\niostream3/  by Ludwig Schwardt <schwardt@sun.ac.za>\n            and Kevin Ruland <kevin@rodin.wustl.edu>\n        Yet another C++ I/O streams interface\n\nmasmx64/    by Gilles Vollant <info@winimage.com>\n        x86 64-bit (AMD64 and Intel EM64t) code for x64 assembler to\n        replace longest_match() and inflate_fast(),  also masm x86\n        64-bits translation of Chris Anderson inflate_fast()\n\nmasmx86/    by Gilles Vollant <info@winimage.com>\n        x86 asm code to replace longest_match() and inflate_fast(),\n        for Visual C++ and MASM (32 bits).\n        Based on Brian Raiter (asm686) and Chris Anderson (inflate86)\n\nminizip/    by Gilles Vollant <info@winimage.com>\n        Mini zip and unzip based on zlib\n        Includes Zip64 support by Mathias Svensson <mathias@result42.com>\n        See http://www.winimage.com/zLibDll/unzip.html\n\npascal/     by Bob Dellaca <bobdl@xtra.co.nz> et al.\n        Support for Pascal\n\npuff/       by Mark Adler <madler@alumni.caltech.edu>\n        Small, low memory usage inflate.  Also serves to provide an\n        unambiguous description of the deflate format.\n\ntestzlib/   by Gilles Vollant <info@winimage.com>\n        Example of the use of zlib\n\nuntgz/      by Pedro A. Aranda Gutierrez <paag@tid.es>\n        A very simple tar.gz file extractor using zlib\n\nvstudio/    by Gilles Vollant <info@winimage.com>\n        Building a minizip-enhanced zlib with Microsoft Visual Studio\n"
  },
  {
    "path": "external/zlib/contrib/ada/buffer_demo.adb",
    "content": "----------------------------------------------------------------\n--  ZLib for Ada thick binding.                               --\n--                                                            --\n--  Copyright (C) 2002-2004 Dmitriy Anisimkov                 --\n--                                                            --\n--  Open source license information is in the zlib.ads file.  --\n----------------------------------------------------------------\n--\n--  $Id: buffer_demo.adb,v 1.3 2004/09/06 06:55:35 vagul Exp $\n\n--  This demo program provided by Dr Steve Sangwine <sjs@essex.ac.uk>\n--\n--  Demonstration of a problem with Zlib-Ada (already fixed) when a buffer\n--  of exactly the correct size is used for decompressed data, and the last\n--  few bytes passed in to Zlib are checksum bytes.\n\n--  This program compresses a string of text, and then decompresses the\n--  compressed text into a buffer of the same size as the original text.\n\nwith Ada.Streams; use Ada.Streams;\nwith Ada.Text_IO;\n\nwith ZLib; use ZLib;\n\nprocedure Buffer_Demo is\n   EOL  : Character renames ASCII.LF;\n   Text : constant String\n     := \"Four score and seven years ago our fathers brought forth,\" & EOL &\n        \"upon this continent, a new nation, conceived in liberty,\" & EOL &\n        \"and dedicated to the proposition that `all men are created equal'.\";\n\n   Source : Stream_Element_Array (1 .. Text'Length);\n   for Source'Address use Text'Address;\n\nbegin\n   Ada.Text_IO.Put (Text);\n   Ada.Text_IO.New_Line;\n   Ada.Text_IO.Put_Line\n     (\"Uncompressed size : \" & Positive'Image (Text'Length) & \" bytes\");\n\n   declare\n      Compressed_Data : Stream_Element_Array (1 .. Text'Length);\n      L               : Stream_Element_Offset;\n   begin\n      Compress : declare\n         Compressor : Filter_Type;\n         I : Stream_Element_Offset;\n      begin\n         Deflate_Init (Compressor);\n\n         --  Compress the whole of T at once.\n\n         Translate (Compressor, Source, I, Compressed_Data, L, Finish);\n         pragma Assert (I = Source'Last);\n\n         Close (Compressor);\n\n         Ada.Text_IO.Put_Line\n           (\"Compressed size :   \"\n            & Stream_Element_Offset'Image (L) & \" bytes\");\n      end Compress;\n\n      --  Now we decompress the data, passing short blocks of data to Zlib\n      --  (because this demonstrates the problem - the last block passed will\n      --  contain checksum information and there will be no output, only a\n      --  check inside Zlib that the checksum is correct).\n\n      Decompress : declare\n         Decompressor : Filter_Type;\n\n         Uncompressed_Data : Stream_Element_Array (1 .. Text'Length);\n\n         Block_Size : constant := 4;\n         --  This makes sure that the last block contains\n         --  only Adler checksum data.\n\n         P : Stream_Element_Offset := Compressed_Data'First - 1;\n         O : Stream_Element_Offset;\n      begin\n         Inflate_Init (Decompressor);\n\n         loop\n            Translate\n              (Decompressor,\n               Compressed_Data\n                 (P + 1 .. Stream_Element_Offset'Min (P + Block_Size, L)),\n               P,\n               Uncompressed_Data\n                 (Total_Out (Decompressor) + 1 .. Uncompressed_Data'Last),\n               O,\n               No_Flush);\n\n               Ada.Text_IO.Put_Line\n                 (\"Total in : \" & Count'Image (Total_In (Decompressor)) &\n                  \", out : \" & Count'Image (Total_Out (Decompressor)));\n\n               exit when P = L;\n         end loop;\n\n         Ada.Text_IO.New_Line;\n         Ada.Text_IO.Put_Line\n           (\"Decompressed text matches original text : \"\n             & Boolean'Image (Uncompressed_Data = Source));\n      end Decompress;\n   end;\nend Buffer_Demo;\n"
  },
  {
    "path": "external/zlib/contrib/ada/mtest.adb",
    "content": "----------------------------------------------------------------\n--  ZLib for Ada thick binding.                               --\n--                                                            --\n--  Copyright (C) 2002-2003 Dmitriy Anisimkov                 --\n--                                                            --\n--  Open source license information is in the zlib.ads file.  --\n----------------------------------------------------------------\n--  Continuous test for ZLib multithreading. If the test would fail\n--  we should provide thread safe allocation routines for the Z_Stream.\n--\n--  $Id: mtest.adb,v 1.4 2004/07/23 07:49:54 vagul Exp $\n\nwith ZLib;\nwith Ada.Streams;\nwith Ada.Numerics.Discrete_Random;\nwith Ada.Text_IO;\nwith Ada.Exceptions;\nwith Ada.Task_Identification;\n\nprocedure MTest is\n   use Ada.Streams;\n   use ZLib;\n\n   Stop : Boolean := False;\n\n   pragma Atomic (Stop);\n\n   subtype Visible_Symbols is Stream_Element range 16#20# .. 16#7E#;\n\n   package Random_Elements is\n      new Ada.Numerics.Discrete_Random (Visible_Symbols);\n\n   task type Test_Task;\n\n   task body Test_Task is\n      Buffer : Stream_Element_Array (1 .. 100_000);\n      Gen : Random_Elements.Generator;\n\n      Buffer_First  : Stream_Element_Offset;\n      Compare_First : Stream_Element_Offset;\n\n      Deflate : Filter_Type;\n      Inflate : Filter_Type;\n\n      procedure Further (Item : in Stream_Element_Array);\n\n      procedure Read_Buffer\n        (Item : out Ada.Streams.Stream_Element_Array;\n         Last : out Ada.Streams.Stream_Element_Offset);\n\n      -------------\n      -- Further --\n      -------------\n\n      procedure Further (Item : in Stream_Element_Array) is\n\n         procedure Compare (Item : in Stream_Element_Array);\n\n         -------------\n         -- Compare --\n         -------------\n\n         procedure Compare (Item : in Stream_Element_Array) is\n            Next_First : Stream_Element_Offset := Compare_First + Item'Length;\n         begin\n            if Buffer (Compare_First .. Next_First - 1) /= Item then\n               raise Program_Error;\n            end if;\n\n            Compare_First := Next_First;\n         end Compare;\n\n         procedure Compare_Write is new ZLib.Write (Write => Compare);\n      begin\n         Compare_Write (Inflate, Item, No_Flush);\n      end Further;\n\n      -----------------\n      -- Read_Buffer --\n      -----------------\n\n      procedure Read_Buffer\n        (Item : out Ada.Streams.Stream_Element_Array;\n         Last : out Ada.Streams.Stream_Element_Offset)\n      is\n         Buff_Diff   : Stream_Element_Offset := Buffer'Last - Buffer_First;\n         Next_First : Stream_Element_Offset;\n      begin\n         if Item'Length <= Buff_Diff then\n            Last := Item'Last;\n\n            Next_First := Buffer_First + Item'Length;\n\n            Item := Buffer (Buffer_First .. Next_First - 1);\n\n            Buffer_First := Next_First;\n         else\n            Last := Item'First + Buff_Diff;\n            Item (Item'First .. Last) := Buffer (Buffer_First .. Buffer'Last);\n            Buffer_First := Buffer'Last + 1;\n         end if;\n      end Read_Buffer;\n\n      procedure Translate is new Generic_Translate\n                                   (Data_In  => Read_Buffer,\n                                    Data_Out => Further);\n\n   begin\n      Random_Elements.Reset (Gen);\n\n      Buffer := (others => 20);\n\n      Main : loop\n         for J in Buffer'Range loop\n            Buffer (J) := Random_Elements.Random (Gen);\n\n            Deflate_Init (Deflate);\n            Inflate_Init (Inflate);\n\n            Buffer_First  := Buffer'First;\n            Compare_First := Buffer'First;\n\n            Translate (Deflate);\n\n            if Compare_First /= Buffer'Last + 1 then\n               raise Program_Error;\n            end if;\n\n            Ada.Text_IO.Put_Line\n              (Ada.Task_Identification.Image\n                 (Ada.Task_Identification.Current_Task)\n               & Stream_Element_Offset'Image (J)\n               & ZLib.Count'Image (Total_Out (Deflate)));\n\n            Close (Deflate);\n            Close (Inflate);\n\n            exit Main when Stop;\n         end loop;\n      end loop Main;\n   exception\n      when E : others =>\n         Ada.Text_IO.Put_Line (Ada.Exceptions.Exception_Information (E));\n         Stop := True;\n   end Test_Task;\n\n   Test : array (1 .. 4) of Test_Task;\n\n   pragma Unreferenced (Test);\n\n   Dummy : Character;\n\nbegin\n   Ada.Text_IO.Get_Immediate (Dummy);\n   Stop := True;\nend MTest;\n"
  },
  {
    "path": "external/zlib/contrib/ada/read.adb",
    "content": "----------------------------------------------------------------\n--  ZLib for Ada thick binding.                               --\n--                                                            --\n--  Copyright (C) 2002-2003 Dmitriy Anisimkov                 --\n--                                                            --\n--  Open source license information is in the zlib.ads file.  --\n----------------------------------------------------------------\n\n--  $Id: read.adb,v 1.8 2004/05/31 10:53:40 vagul Exp $\n\n--  Test/demo program for the generic read interface.\n\nwith Ada.Numerics.Discrete_Random;\nwith Ada.Streams;\nwith Ada.Text_IO;\n\nwith ZLib;\n\nprocedure Read is\n\n   use Ada.Streams;\n\n   ------------------------------------\n   --  Test configuration parameters --\n   ------------------------------------\n\n   File_Size   : Stream_Element_Offset := 100_000;\n\n   Continuous  : constant Boolean          := False;\n   --  If this constant is True, the test would be repeated again and again,\n   --  with increment File_Size for every iteration.\n\n   Header      : constant ZLib.Header_Type := ZLib.Default;\n   --  Do not use Header other than Default in ZLib versions 1.1.4 and older.\n\n   Init_Random : constant := 8;\n   --  We are using the same random sequence, in case of we catch bug,\n   --  so we would be able to reproduce it.\n\n   -- End --\n\n   Pack_Size : Stream_Element_Offset;\n   Offset    : Stream_Element_Offset;\n\n   Filter     : ZLib.Filter_Type;\n\n   subtype Visible_Symbols\n      is Stream_Element range 16#20# .. 16#7E#;\n\n   package Random_Elements is new\n      Ada.Numerics.Discrete_Random (Visible_Symbols);\n\n   Gen : Random_Elements.Generator;\n   Period  : constant Stream_Element_Offset := 200;\n   --  Period constant variable for random generator not to be very random.\n   --  Bigger period, harder random.\n\n   Read_Buffer : Stream_Element_Array (1 .. 2048);\n   Read_First  : Stream_Element_Offset;\n   Read_Last   : Stream_Element_Offset;\n\n   procedure Reset;\n\n   procedure Read\n     (Item : out Stream_Element_Array;\n      Last : out Stream_Element_Offset);\n   --  this procedure is for generic instantiation of\n   --  ZLib.Read\n   --  reading data from the File_In.\n\n   procedure Read is new ZLib.Read\n                           (Read,\n                            Read_Buffer,\n                            Rest_First => Read_First,\n                            Rest_Last  => Read_Last);\n\n   ----------\n   -- Read --\n   ----------\n\n   procedure Read\n     (Item : out Stream_Element_Array;\n      Last : out Stream_Element_Offset) is\n   begin\n      Last := Stream_Element_Offset'Min\n               (Item'Last,\n                Item'First + File_Size - Offset);\n\n      for J in Item'First .. Last loop\n         if J < Item'First + Period then\n            Item (J) := Random_Elements.Random (Gen);\n         else\n            Item (J) := Item (J - Period);\n         end if;\n\n         Offset   := Offset + 1;\n      end loop;\n   end Read;\n\n   -----------\n   -- Reset --\n   -----------\n\n   procedure Reset is\n   begin\n      Random_Elements.Reset (Gen, Init_Random);\n      Pack_Size := 0;\n      Offset := 1;\n      Read_First := Read_Buffer'Last + 1;\n      Read_Last  := Read_Buffer'Last;\n   end Reset;\n\nbegin\n   Ada.Text_IO.Put_Line (\"ZLib \" & ZLib.Version);\n\n   loop\n      for Level in ZLib.Compression_Level'Range loop\n\n         Ada.Text_IO.Put (\"Level =\"\n            & ZLib.Compression_Level'Image (Level));\n\n         --  Deflate using generic instantiation.\n\n         ZLib.Deflate_Init\n               (Filter,\n                Level,\n                Header => Header);\n\n         Reset;\n\n         Ada.Text_IO.Put\n           (Stream_Element_Offset'Image (File_Size) & \" ->\");\n\n         loop\n            declare\n               Buffer : Stream_Element_Array (1 .. 1024);\n               Last   : Stream_Element_Offset;\n            begin\n               Read (Filter, Buffer, Last);\n\n               Pack_Size := Pack_Size + Last - Buffer'First + 1;\n\n               exit when Last < Buffer'Last;\n            end;\n         end loop;\n\n         Ada.Text_IO.Put_Line (Stream_Element_Offset'Image (Pack_Size));\n\n         ZLib.Close (Filter);\n      end loop;\n\n      exit when not Continuous;\n\n      File_Size := File_Size + 1;\n   end loop;\nend Read;\n"
  },
  {
    "path": "external/zlib/contrib/ada/readme.txt",
    "content": "                        ZLib for Ada thick binding (ZLib.Ada)\n                        Release 1.3\n\nZLib.Ada is a thick binding interface to the popular ZLib data\ncompression library, available at http://www.gzip.org/zlib/.\nIt provides Ada-style access to the ZLib C library.\n\n\n        Here are the main changes since ZLib.Ada 1.2:\n\n- Attension: ZLib.Read generic routine have a initialization requirement\n  for Read_Last parameter now. It is a bit incompartible with previous version,\n  but extends functionality, we could use new parameters Allow_Read_Some and\n  Flush now.\n\n- Added Is_Open routines to ZLib and ZLib.Streams packages.\n\n- Add pragma Assert to check Stream_Element is 8 bit.\n\n- Fix extraction to buffer with exact known decompressed size. Error reported by\n  Steve Sangwine.\n\n- Fix definition of ULong (changed to unsigned_long), fix regression on 64 bits\n  computers. Patch provided by Pascal Obry.\n\n- Add Status_Error exception definition.\n\n- Add pragma Assertion that Ada.Streams.Stream_Element size is 8 bit.\n\n\n        How to build ZLib.Ada under GNAT\n\nYou should have the ZLib library already build on your computer, before\nbuilding ZLib.Ada. Make the directory of ZLib.Ada sources current and\nissue the command:\n\n  gnatmake test -largs -L<directory where libz.a is> -lz\n\nOr use the GNAT project file build for GNAT 3.15 or later:\n\n  gnatmake -Pzlib.gpr -L<directory where libz.a is>\n\n\n        How to build ZLib.Ada under Aonix ObjectAda for Win32 7.2.2\n\n1. Make a project with all *.ads and *.adb files from the distribution.\n2. Build the libz.a library from the ZLib C sources.\n3. Rename libz.a to z.lib.\n4. Add the library z.lib to the project.\n5. Add the libc.lib library from the ObjectAda distribution to the project.\n6. Build the executable using test.adb as a main procedure.\n\n\n        How to use ZLib.Ada\n\nThe source files test.adb and read.adb are small demo programs that show\nthe main functionality of ZLib.Ada.\n\nThe routines from the package specifications are commented.\n\n\nHomepage: http://zlib-ada.sourceforge.net/\nAuthor: Dmitriy Anisimkov <anisimkov@yahoo.com>\n\nContributors: Pascal Obry <pascal@obry.org>, Steve Sangwine <sjs@essex.ac.uk>\n"
  },
  {
    "path": "external/zlib/contrib/ada/test.adb",
    "content": "----------------------------------------------------------------\n--  ZLib for Ada thick binding.                               --\n--                                                            --\n--  Copyright (C) 2002-2003 Dmitriy Anisimkov                 --\n--                                                            --\n--  Open source license information is in the zlib.ads file.  --\n----------------------------------------------------------------\n\n--  $Id: test.adb,v 1.17 2003/08/12 12:13:30 vagul Exp $\n\n--  The program has a few aims.\n--  1. Test ZLib.Ada95 thick binding functionality.\n--  2. Show the example of use main functionality of the ZLib.Ada95 binding.\n--  3. Build this program automatically compile all ZLib.Ada95 packages under\n--     GNAT Ada95 compiler.\n\nwith ZLib.Streams;\nwith Ada.Streams.Stream_IO;\nwith Ada.Numerics.Discrete_Random;\n\nwith Ada.Text_IO;\n\nwith Ada.Calendar;\n\nprocedure Test is\n\n   use Ada.Streams;\n   use Stream_IO;\n\n   ------------------------------------\n   --  Test configuration parameters --\n   ------------------------------------\n\n   File_Size   : Count   := 100_000;\n   Continuous  : constant Boolean := False;\n\n   Header      : constant ZLib.Header_Type := ZLib.Default;\n                                              --  ZLib.None;\n                                              --  ZLib.Auto;\n                                              --  ZLib.GZip;\n   --  Do not use Header other then Default in ZLib versions 1.1.4\n   --  and older.\n\n   Strategy    : constant ZLib.Strategy_Type := ZLib.Default_Strategy;\n   Init_Random : constant := 10;\n\n   -- End --\n\n   In_File_Name  : constant String := \"testzlib.in\";\n   --  Name of the input file\n\n   Z_File_Name   : constant String := \"testzlib.zlb\";\n   --  Name of the compressed file.\n\n   Out_File_Name : constant String := \"testzlib.out\";\n   --  Name of the decompressed file.\n\n   File_In   : File_Type;\n   File_Out  : File_Type;\n   File_Back : File_Type;\n   File_Z    : ZLib.Streams.Stream_Type;\n\n   Filter : ZLib.Filter_Type;\n\n   Time_Stamp : Ada.Calendar.Time;\n\n   procedure Generate_File;\n   --  Generate file of spetsified size with some random data.\n   --  The random data is repeatable, for the good compression.\n\n   procedure Compare_Streams\n     (Left, Right : in out Root_Stream_Type'Class);\n   --  The procedure compearing data in 2 streams.\n   --  It is for compare data before and after compression/decompression.\n\n   procedure Compare_Files (Left, Right : String);\n   --  Compare files. Based on the Compare_Streams.\n\n   procedure Copy_Streams\n     (Source, Target : in out Root_Stream_Type'Class;\n      Buffer_Size    : in     Stream_Element_Offset := 1024);\n   --  Copying data from one stream to another. It is for test stream\n   --  interface of the library.\n\n   procedure Data_In\n     (Item : out Stream_Element_Array;\n      Last : out Stream_Element_Offset);\n   --  this procedure is for generic instantiation of\n   --  ZLib.Generic_Translate.\n   --  reading data from the File_In.\n\n   procedure Data_Out (Item : in Stream_Element_Array);\n   --  this procedure is for generic instantiation of\n   --  ZLib.Generic_Translate.\n   --  writing data to the File_Out.\n\n   procedure Stamp;\n   --  Store the timestamp to the local variable.\n\n   procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count);\n   --  Print the time statistic with the message.\n\n   procedure Translate is new ZLib.Generic_Translate\n                                (Data_In  => Data_In,\n                                 Data_Out => Data_Out);\n   --  This procedure is moving data from File_In to File_Out\n   --  with compression or decompression, depend on initialization of\n   --  Filter parameter.\n\n   -------------------\n   -- Compare_Files --\n   -------------------\n\n   procedure Compare_Files (Left, Right : String) is\n      Left_File, Right_File : File_Type;\n   begin\n      Open (Left_File, In_File, Left);\n      Open (Right_File, In_File, Right);\n      Compare_Streams (Stream (Left_File).all, Stream (Right_File).all);\n      Close (Left_File);\n      Close (Right_File);\n   end Compare_Files;\n\n   ---------------------\n   -- Compare_Streams --\n   ---------------------\n\n   procedure Compare_Streams\n     (Left, Right : in out Ada.Streams.Root_Stream_Type'Class)\n   is\n      Left_Buffer, Right_Buffer : Stream_Element_Array (0 .. 16#FFF#);\n      Left_Last, Right_Last : Stream_Element_Offset;\n   begin\n      loop\n         Read (Left, Left_Buffer, Left_Last);\n         Read (Right, Right_Buffer, Right_Last);\n\n         if Left_Last /= Right_Last then\n            Ada.Text_IO.Put_Line (\"Compare error :\"\n              & Stream_Element_Offset'Image (Left_Last)\n              & \" /= \"\n              & Stream_Element_Offset'Image (Right_Last));\n\n            raise Constraint_Error;\n\n         elsif Left_Buffer (0 .. Left_Last)\n               /= Right_Buffer (0 .. Right_Last)\n         then\n            Ada.Text_IO.Put_Line (\"ERROR: IN and OUT files is not equal.\");\n            raise Constraint_Error;\n\n         end if;\n\n         exit when Left_Last < Left_Buffer'Last;\n      end loop;\n   end Compare_Streams;\n\n   ------------------\n   -- Copy_Streams --\n   ------------------\n\n   procedure Copy_Streams\n     (Source, Target : in out Ada.Streams.Root_Stream_Type'Class;\n      Buffer_Size    : in     Stream_Element_Offset := 1024)\n   is\n      Buffer : Stream_Element_Array (1 .. Buffer_Size);\n      Last   : Stream_Element_Offset;\n   begin\n      loop\n         Read  (Source, Buffer, Last);\n         Write (Target, Buffer (1 .. Last));\n\n         exit when Last < Buffer'Last;\n      end loop;\n   end Copy_Streams;\n\n   -------------\n   -- Data_In --\n   -------------\n\n   procedure Data_In\n     (Item : out Stream_Element_Array;\n      Last : out Stream_Element_Offset) is\n   begin\n      Read (File_In, Item, Last);\n   end Data_In;\n\n   --------------\n   -- Data_Out --\n   --------------\n\n   procedure Data_Out (Item : in Stream_Element_Array) is\n   begin\n      Write (File_Out, Item);\n   end Data_Out;\n\n   -------------------\n   -- Generate_File --\n   -------------------\n\n   procedure Generate_File is\n      subtype Visible_Symbols is Stream_Element range 16#20# .. 16#7E#;\n\n      package Random_Elements is\n         new Ada.Numerics.Discrete_Random (Visible_Symbols);\n\n      Gen    : Random_Elements.Generator;\n      Buffer : Stream_Element_Array := (1 .. 77 => 16#20#) & 10;\n\n      Buffer_Count : constant Count := File_Size / Buffer'Length;\n      --  Number of same buffers in the packet.\n\n      Density : constant Count := 30; --  from 0 to Buffer'Length - 2;\n\n      procedure Fill_Buffer (J, D : in Count);\n      --  Change the part of the buffer.\n\n      -----------------\n      -- Fill_Buffer --\n      -----------------\n\n      procedure Fill_Buffer (J, D : in Count) is\n      begin\n         for K in 0 .. D loop\n            Buffer\n              (Stream_Element_Offset ((J + K) mod (Buffer'Length - 1) + 1))\n             := Random_Elements.Random (Gen);\n\n         end loop;\n      end Fill_Buffer;\n\n   begin\n      Random_Elements.Reset (Gen, Init_Random);\n\n      Create (File_In, Out_File, In_File_Name);\n\n      Fill_Buffer (1, Buffer'Length - 2);\n\n      for J in 1 .. Buffer_Count loop\n         Write (File_In, Buffer);\n\n         Fill_Buffer (J, Density);\n      end loop;\n\n      --  fill remain size.\n\n      Write\n        (File_In,\n         Buffer\n           (1 .. Stream_Element_Offset\n                   (File_Size - Buffer'Length * Buffer_Count)));\n\n      Flush (File_In);\n      Close (File_In);\n   end Generate_File;\n\n   ---------------------\n   -- Print_Statistic --\n   ---------------------\n\n   procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count) is\n      use Ada.Calendar;\n      use Ada.Text_IO;\n\n      package Count_IO is new Integer_IO (ZLib.Count);\n\n      Curr_Dur : Duration := Clock - Time_Stamp;\n   begin\n      Put (Msg);\n\n      Set_Col (20);\n      Ada.Text_IO.Put (\"size =\");\n\n      Count_IO.Put\n        (Data_Size,\n         Width => Stream_IO.Count'Image (File_Size)'Length);\n\n      Put_Line (\" duration =\" & Duration'Image (Curr_Dur));\n   end Print_Statistic;\n\n   -----------\n   -- Stamp --\n   -----------\n\n   procedure Stamp is\n   begin\n      Time_Stamp := Ada.Calendar.Clock;\n   end Stamp;\n\nbegin\n   Ada.Text_IO.Put_Line (\"ZLib \" & ZLib.Version);\n\n   loop\n      Generate_File;\n\n      for Level in ZLib.Compression_Level'Range loop\n\n         Ada.Text_IO.Put_Line (\"Level =\"\n            & ZLib.Compression_Level'Image (Level));\n\n         --  Test generic interface.\n         Open   (File_In, In_File, In_File_Name);\n         Create (File_Out, Out_File, Z_File_Name);\n\n         Stamp;\n\n         --  Deflate using generic instantiation.\n\n         ZLib.Deflate_Init\n               (Filter   => Filter,\n                Level    => Level,\n                Strategy => Strategy,\n                Header   => Header);\n\n         Translate (Filter);\n         Print_Statistic (\"Generic compress\", ZLib.Total_Out (Filter));\n         ZLib.Close (Filter);\n\n         Close (File_In);\n         Close (File_Out);\n\n         Open   (File_In, In_File, Z_File_Name);\n         Create (File_Out, Out_File, Out_File_Name);\n\n         Stamp;\n\n         --  Inflate using generic instantiation.\n\n         ZLib.Inflate_Init (Filter, Header => Header);\n\n         Translate (Filter);\n         Print_Statistic (\"Generic decompress\", ZLib.Total_Out (Filter));\n\n         ZLib.Close (Filter);\n\n         Close (File_In);\n         Close (File_Out);\n\n         Compare_Files (In_File_Name, Out_File_Name);\n\n         --  Test stream interface.\n\n         --  Compress to the back stream.\n\n         Open   (File_In, In_File, In_File_Name);\n         Create (File_Back, Out_File, Z_File_Name);\n\n         Stamp;\n\n         ZLib.Streams.Create\n           (Stream          => File_Z,\n            Mode            => ZLib.Streams.Out_Stream,\n            Back            => ZLib.Streams.Stream_Access\n                                 (Stream (File_Back)),\n            Back_Compressed => True,\n            Level           => Level,\n            Strategy        => Strategy,\n            Header          => Header);\n\n         Copy_Streams\n           (Source => Stream (File_In).all,\n            Target => File_Z);\n\n         --  Flushing internal buffers to the back stream.\n\n         ZLib.Streams.Flush (File_Z, ZLib.Finish);\n\n         Print_Statistic (\"Write compress\",\n                          ZLib.Streams.Write_Total_Out (File_Z));\n\n         ZLib.Streams.Close (File_Z);\n\n         Close (File_In);\n         Close (File_Back);\n\n         --  Compare reading from original file and from\n         --  decompression stream.\n\n         Open (File_In,   In_File, In_File_Name);\n         Open (File_Back, In_File, Z_File_Name);\n\n         ZLib.Streams.Create\n           (Stream          => File_Z,\n            Mode            => ZLib.Streams.In_Stream,\n            Back            => ZLib.Streams.Stream_Access\n                                 (Stream (File_Back)),\n            Back_Compressed => True,\n            Header          => Header);\n\n         Stamp;\n         Compare_Streams (Stream (File_In).all, File_Z);\n\n         Print_Statistic (\"Read decompress\",\n                          ZLib.Streams.Read_Total_Out (File_Z));\n\n         ZLib.Streams.Close (File_Z);\n         Close (File_In);\n         Close (File_Back);\n\n         --  Compress by reading from compression stream.\n\n         Open (File_Back, In_File, In_File_Name);\n         Create (File_Out, Out_File, Z_File_Name);\n\n         ZLib.Streams.Create\n           (Stream          => File_Z,\n            Mode            => ZLib.Streams.In_Stream,\n            Back            => ZLib.Streams.Stream_Access\n                                 (Stream (File_Back)),\n            Back_Compressed => False,\n            Level           => Level,\n            Strategy        => Strategy,\n            Header          => Header);\n\n         Stamp;\n         Copy_Streams\n           (Source => File_Z,\n            Target => Stream (File_Out).all);\n\n         Print_Statistic (\"Read compress\",\n                          ZLib.Streams.Read_Total_Out (File_Z));\n\n         ZLib.Streams.Close (File_Z);\n\n         Close (File_Out);\n         Close (File_Back);\n\n         --  Decompress to decompression stream.\n\n         Open   (File_In,   In_File, Z_File_Name);\n         Create (File_Back, Out_File, Out_File_Name);\n\n         ZLib.Streams.Create\n           (Stream          => File_Z,\n            Mode            => ZLib.Streams.Out_Stream,\n            Back            => ZLib.Streams.Stream_Access\n                                 (Stream (File_Back)),\n            Back_Compressed => False,\n            Header          => Header);\n\n         Stamp;\n\n         Copy_Streams\n           (Source => Stream (File_In).all,\n            Target => File_Z);\n\n         Print_Statistic (\"Write decompress\",\n                          ZLib.Streams.Write_Total_Out (File_Z));\n\n         ZLib.Streams.Close (File_Z);\n         Close (File_In);\n         Close (File_Back);\n\n         Compare_Files (In_File_Name, Out_File_Name);\n      end loop;\n\n      Ada.Text_IO.Put_Line (Count'Image (File_Size) & \" Ok.\");\n\n      exit when not Continuous;\n\n      File_Size := File_Size + 1;\n   end loop;\nend Test;\n"
  },
  {
    "path": "external/zlib/contrib/ada/zlib-streams.adb",
    "content": "----------------------------------------------------------------\n--  ZLib for Ada thick binding.                               --\n--                                                            --\n--  Copyright (C) 2002-2003 Dmitriy Anisimkov                 --\n--                                                            --\n--  Open source license information is in the zlib.ads file.  --\n----------------------------------------------------------------\n\n--  $Id: zlib-streams.adb,v 1.10 2004/05/31 10:53:40 vagul Exp $\n\nwith Ada.Unchecked_Deallocation;\n\npackage body ZLib.Streams is\n\n   -----------\n   -- Close --\n   -----------\n\n   procedure Close (Stream : in out Stream_Type) is\n      procedure Free is new Ada.Unchecked_Deallocation\n         (Stream_Element_Array, Buffer_Access);\n   begin\n      if Stream.Mode = Out_Stream or Stream.Mode = Duplex then\n         --  We should flush the data written by the writer.\n\n         Flush (Stream, Finish);\n\n         Close (Stream.Writer);\n      end if;\n\n      if Stream.Mode = In_Stream or Stream.Mode = Duplex then\n         Close (Stream.Reader);\n         Free (Stream.Buffer);\n      end if;\n   end Close;\n\n   ------------\n   -- Create --\n   ------------\n\n   procedure Create\n     (Stream            :    out Stream_Type;\n      Mode              : in     Stream_Mode;\n      Back              : in     Stream_Access;\n      Back_Compressed   : in     Boolean;\n      Level             : in     Compression_Level := Default_Compression;\n      Strategy          : in     Strategy_Type     := Default_Strategy;\n      Header            : in     Header_Type       := Default;\n      Read_Buffer_Size  : in     Ada.Streams.Stream_Element_Offset\n                                    := Default_Buffer_Size;\n      Write_Buffer_Size : in     Ada.Streams.Stream_Element_Offset\n                                    := Default_Buffer_Size)\n   is\n\n      subtype Buffer_Subtype is Stream_Element_Array (1 .. Read_Buffer_Size);\n\n      procedure Init_Filter\n         (Filter   : in out Filter_Type;\n          Compress : in     Boolean);\n\n      -----------------\n      -- Init_Filter --\n      -----------------\n\n      procedure Init_Filter\n         (Filter   : in out Filter_Type;\n          Compress : in     Boolean) is\n      begin\n         if Compress then\n            Deflate_Init\n              (Filter, Level, Strategy, Header => Header);\n         else\n            Inflate_Init (Filter, Header => Header);\n         end if;\n      end Init_Filter;\n\n   begin\n      Stream.Back := Back;\n      Stream.Mode := Mode;\n\n      if Mode = Out_Stream or Mode = Duplex then\n         Init_Filter (Stream.Writer, Back_Compressed);\n         Stream.Buffer_Size := Write_Buffer_Size;\n      else\n         Stream.Buffer_Size := 0;\n      end if;\n\n      if Mode = In_Stream or Mode = Duplex then\n         Init_Filter (Stream.Reader, not Back_Compressed);\n\n         Stream.Buffer     := new Buffer_Subtype;\n         Stream.Rest_First := Stream.Buffer'Last + 1;\n         Stream.Rest_Last  := Stream.Buffer'Last;\n      end if;\n   end Create;\n\n   -----------\n   -- Flush --\n   -----------\n\n   procedure Flush\n     (Stream : in out Stream_Type;\n      Mode   : in     Flush_Mode := Sync_Flush)\n   is\n      Buffer : Stream_Element_Array (1 .. Stream.Buffer_Size);\n      Last   : Stream_Element_Offset;\n   begin\n      loop\n         Flush (Stream.Writer, Buffer, Last, Mode);\n\n         Ada.Streams.Write (Stream.Back.all, Buffer (1 .. Last));\n\n         exit when Last < Buffer'Last;\n      end loop;\n   end Flush;\n\n   -------------\n   -- Is_Open --\n   -------------\n\n   function Is_Open (Stream : Stream_Type) return Boolean is\n   begin\n      return Is_Open (Stream.Reader) or else Is_Open (Stream.Writer);\n   end Is_Open;\n\n   ----------\n   -- Read --\n   ----------\n\n   procedure Read\n     (Stream : in out Stream_Type;\n      Item   :    out Stream_Element_Array;\n      Last   :    out Stream_Element_Offset)\n   is\n\n      procedure Read\n        (Item : out Stream_Element_Array;\n         Last : out Stream_Element_Offset);\n\n      ----------\n      -- Read --\n      ----------\n\n      procedure Read\n        (Item : out Stream_Element_Array;\n         Last : out Stream_Element_Offset) is\n      begin\n         Ada.Streams.Read (Stream.Back.all, Item, Last);\n      end Read;\n\n      procedure Read is new ZLib.Read\n         (Read       => Read,\n          Buffer     => Stream.Buffer.all,\n          Rest_First => Stream.Rest_First,\n          Rest_Last  => Stream.Rest_Last);\n\n   begin\n      Read (Stream.Reader, Item, Last);\n   end Read;\n\n   -------------------\n   -- Read_Total_In --\n   -------------------\n\n   function Read_Total_In (Stream : in Stream_Type) return Count is\n   begin\n      return Total_In (Stream.Reader);\n   end Read_Total_In;\n\n   --------------------\n   -- Read_Total_Out --\n   --------------------\n\n   function Read_Total_Out (Stream : in Stream_Type) return Count is\n   begin\n      return Total_Out (Stream.Reader);\n   end Read_Total_Out;\n\n   -----------\n   -- Write --\n   -----------\n\n   procedure Write\n     (Stream : in out Stream_Type;\n      Item   : in     Stream_Element_Array)\n   is\n\n      procedure Write (Item : in Stream_Element_Array);\n\n      -----------\n      -- Write --\n      -----------\n\n      procedure Write (Item : in Stream_Element_Array) is\n      begin\n         Ada.Streams.Write (Stream.Back.all, Item);\n      end Write;\n\n      procedure Write is new ZLib.Write\n         (Write       => Write,\n          Buffer_Size => Stream.Buffer_Size);\n\n   begin\n      Write (Stream.Writer, Item, No_Flush);\n   end Write;\n\n   --------------------\n   -- Write_Total_In --\n   --------------------\n\n   function Write_Total_In (Stream : in Stream_Type) return Count is\n   begin\n      return Total_In (Stream.Writer);\n   end Write_Total_In;\n\n   ---------------------\n   -- Write_Total_Out --\n   ---------------------\n\n   function Write_Total_Out (Stream : in Stream_Type) return Count is\n   begin\n      return Total_Out (Stream.Writer);\n   end Write_Total_Out;\n\nend ZLib.Streams;\n"
  },
  {
    "path": "external/zlib/contrib/ada/zlib-streams.ads",
    "content": "----------------------------------------------------------------\n--  ZLib for Ada thick binding.                               --\n--                                                            --\n--  Copyright (C) 2002-2003 Dmitriy Anisimkov                 --\n--                                                            --\n--  Open source license information is in the zlib.ads file.  --\n----------------------------------------------------------------\n\n--  $Id: zlib-streams.ads,v 1.12 2004/05/31 10:53:40 vagul Exp $\n\npackage ZLib.Streams is\n\n   type Stream_Mode is (In_Stream, Out_Stream, Duplex);\n\n   type Stream_Access is access all Ada.Streams.Root_Stream_Type'Class;\n\n   type Stream_Type is\n      new Ada.Streams.Root_Stream_Type with private;\n\n   procedure Read\n     (Stream : in out Stream_Type;\n      Item   :    out Ada.Streams.Stream_Element_Array;\n      Last   :    out Ada.Streams.Stream_Element_Offset);\n\n   procedure Write\n     (Stream : in out Stream_Type;\n      Item   : in     Ada.Streams.Stream_Element_Array);\n\n   procedure Flush\n     (Stream : in out Stream_Type;\n      Mode   : in     Flush_Mode := Sync_Flush);\n   --  Flush the written data to the back stream,\n   --  all data placed to the compressor is flushing to the Back stream.\n   --  Should not be used untill necessary, becouse it is decreasing\n   --  compression.\n\n   function Read_Total_In (Stream : in Stream_Type) return Count;\n   pragma Inline (Read_Total_In);\n   --  Return total number of bytes read from back stream so far.\n\n   function Read_Total_Out (Stream : in Stream_Type) return Count;\n   pragma Inline (Read_Total_Out);\n   --  Return total number of bytes read so far.\n\n   function Write_Total_In (Stream : in Stream_Type) return Count;\n   pragma Inline (Write_Total_In);\n   --  Return total number of bytes written so far.\n\n   function Write_Total_Out (Stream : in Stream_Type) return Count;\n   pragma Inline (Write_Total_Out);\n   --  Return total number of bytes written to the back stream.\n\n   procedure Create\n     (Stream            :    out Stream_Type;\n      Mode              : in     Stream_Mode;\n      Back              : in     Stream_Access;\n      Back_Compressed   : in     Boolean;\n      Level             : in     Compression_Level := Default_Compression;\n      Strategy          : in     Strategy_Type     := Default_Strategy;\n      Header            : in     Header_Type       := Default;\n      Read_Buffer_Size  : in     Ada.Streams.Stream_Element_Offset\n                                    := Default_Buffer_Size;\n      Write_Buffer_Size : in     Ada.Streams.Stream_Element_Offset\n                                    := Default_Buffer_Size);\n   --  Create the Comression/Decompression stream.\n   --  If mode is In_Stream then Write operation is disabled.\n   --  If mode is Out_Stream then Read operation is disabled.\n\n   --  If Back_Compressed is true then\n   --  Data written to the Stream is compressing to the Back stream\n   --  and data read from the Stream is decompressed data from the Back stream.\n\n   --  If Back_Compressed is false then\n   --  Data written to the Stream is decompressing to the Back stream\n   --  and data read from the Stream is compressed data from the Back stream.\n\n   --  !!! When the Need_Header is False ZLib-Ada is using undocumented\n   --  ZLib 1.1.4 functionality to do not create/wait for ZLib headers.\n\n   function Is_Open (Stream : Stream_Type) return Boolean;\n\n   procedure Close (Stream : in out Stream_Type);\n\nprivate\n\n   use Ada.Streams;\n\n   type Buffer_Access is access all Stream_Element_Array;\n\n   type Stream_Type\n     is new Root_Stream_Type with\n   record\n      Mode       : Stream_Mode;\n\n      Buffer     : Buffer_Access;\n      Rest_First : Stream_Element_Offset;\n      Rest_Last  : Stream_Element_Offset;\n      --  Buffer for Read operation.\n      --  We need to have this buffer in the record\n      --  becouse not all read data from back stream\n      --  could be processed during the read operation.\n\n      Buffer_Size : Stream_Element_Offset;\n      --  Buffer size for write operation.\n      --  We do not need to have this buffer\n      --  in the record becouse all data could be\n      --  processed in the write operation.\n\n      Back       : Stream_Access;\n      Reader     : Filter_Type;\n      Writer     : Filter_Type;\n   end record;\n\nend ZLib.Streams;\n"
  },
  {
    "path": "external/zlib/contrib/ada/zlib-thin.adb",
    "content": "----------------------------------------------------------------\n--  ZLib for Ada thick binding.                               --\n--                                                            --\n--  Copyright (C) 2002-2003 Dmitriy Anisimkov                 --\n--                                                            --\n--  Open source license information is in the zlib.ads file.  --\n----------------------------------------------------------------\n\n--  $Id: zlib-thin.adb,v 1.8 2003/12/14 18:27:31 vagul Exp $\n\npackage body ZLib.Thin is\n\n   ZLIB_VERSION  : constant Chars_Ptr := zlibVersion;\n\n   Z_Stream_Size : constant Int := Z_Stream'Size / System.Storage_Unit;\n\n   --------------\n   -- Avail_In --\n   --------------\n\n   function Avail_In (Strm : in Z_Stream) return UInt is\n   begin\n      return Strm.Avail_In;\n   end Avail_In;\n\n   ---------------\n   -- Avail_Out --\n   ---------------\n\n   function Avail_Out (Strm : in Z_Stream) return UInt is\n   begin\n      return Strm.Avail_Out;\n   end Avail_Out;\n\n   ------------------\n   -- Deflate_Init --\n   ------------------\n\n   function Deflate_Init\n     (strm       : Z_Streamp;\n      level      : Int;\n      method     : Int;\n      windowBits : Int;\n      memLevel   : Int;\n      strategy   : Int)\n      return       Int is\n   begin\n      return deflateInit2\n               (strm,\n                level,\n                method,\n                windowBits,\n                memLevel,\n                strategy,\n                ZLIB_VERSION,\n                Z_Stream_Size);\n   end Deflate_Init;\n\n   ------------------\n   -- Inflate_Init --\n   ------------------\n\n   function Inflate_Init (strm : Z_Streamp; windowBits : Int) return Int is\n   begin\n      return inflateInit2 (strm, windowBits, ZLIB_VERSION, Z_Stream_Size);\n   end Inflate_Init;\n\n   ------------------------\n   -- Last_Error_Message --\n   ------------------------\n\n   function Last_Error_Message (Strm : in Z_Stream) return String is\n      use Interfaces.C.Strings;\n   begin\n      if Strm.msg = Null_Ptr then\n         return \"\";\n      else\n         return Value (Strm.msg);\n      end if;\n   end Last_Error_Message;\n\n   ------------\n   -- Set_In --\n   ------------\n\n   procedure Set_In\n     (Strm   : in out Z_Stream;\n      Buffer : in     Voidp;\n      Size   : in     UInt) is\n   begin\n      Strm.Next_In  := Buffer;\n      Strm.Avail_In := Size;\n   end Set_In;\n\n   ------------------\n   -- Set_Mem_Func --\n   ------------------\n\n   procedure Set_Mem_Func\n     (Strm   : in out Z_Stream;\n      Opaque : in     Voidp;\n      Alloc  : in     alloc_func;\n      Free   : in     free_func) is\n   begin\n      Strm.opaque := Opaque;\n      Strm.zalloc := Alloc;\n      Strm.zfree  := Free;\n   end Set_Mem_Func;\n\n   -------------\n   -- Set_Out --\n   -------------\n\n   procedure Set_Out\n     (Strm   : in out Z_Stream;\n      Buffer : in     Voidp;\n      Size   : in     UInt) is\n   begin\n      Strm.Next_Out  := Buffer;\n      Strm.Avail_Out := Size;\n   end Set_Out;\n\n   --------------\n   -- Total_In --\n   --------------\n\n   function Total_In (Strm : in Z_Stream) return ULong is\n   begin\n      return Strm.Total_In;\n   end Total_In;\n\n   ---------------\n   -- Total_Out --\n   ---------------\n\n   function Total_Out (Strm : in Z_Stream) return ULong is\n   begin\n      return Strm.Total_Out;\n   end Total_Out;\n\nend ZLib.Thin;\n"
  },
  {
    "path": "external/zlib/contrib/ada/zlib-thin.ads",
    "content": "----------------------------------------------------------------\n--  ZLib for Ada thick binding.                               --\n--                                                            --\n--  Copyright (C) 2002-2003 Dmitriy Anisimkov                 --\n--                                                            --\n--  Open source license information is in the zlib.ads file.  --\n----------------------------------------------------------------\n\n--  $Id: zlib-thin.ads,v 1.11 2004/07/23 06:33:11 vagul Exp $\n\nwith Interfaces.C.Strings;\n\nwith System;\n\nprivate package ZLib.Thin is\n\n   --  From zconf.h\n\n   MAX_MEM_LEVEL : constant := 9;         --  zconf.h:105\n                                          --  zconf.h:105\n   MAX_WBITS : constant := 15;      --  zconf.h:115\n                                    --  32K LZ77 window\n                                    --  zconf.h:115\n   SEEK_SET : constant := 8#0000#;  --  zconf.h:244\n                                    --  Seek from beginning of file.\n                                    --  zconf.h:244\n   SEEK_CUR : constant := 1;        --  zconf.h:245\n                                    --  Seek from current position.\n                                    --  zconf.h:245\n   SEEK_END : constant := 2;        --  zconf.h:246\n                                    --  Set file pointer to EOF plus \"offset\"\n                                    --  zconf.h:246\n\n   type Byte is new Interfaces.C.unsigned_char; --  8 bits\n                                                --  zconf.h:214\n   type UInt is new Interfaces.C.unsigned;      --  16 bits or more\n                                                --  zconf.h:216\n   type Int is new Interfaces.C.int;\n\n   type ULong is new Interfaces.C.unsigned_long;     --  32 bits or more\n                                                     --  zconf.h:217\n   subtype Chars_Ptr is Interfaces.C.Strings.chars_ptr;\n\n   type ULong_Access is access ULong;\n   type Int_Access is access Int;\n\n   subtype Voidp is System.Address;            --  zconf.h:232\n\n   subtype Byte_Access is Voidp;\n\n   Nul : constant Voidp := System.Null_Address;\n   --  end from zconf\n\n   Z_NO_FLUSH : constant := 8#0000#;   --  zlib.h:125\n                                       --  zlib.h:125\n   Z_PARTIAL_FLUSH : constant := 1;       --  zlib.h:126\n                                          --  will be removed, use\n                                          --  Z_SYNC_FLUSH instead\n                                          --  zlib.h:126\n   Z_SYNC_FLUSH : constant := 2;       --  zlib.h:127\n                                       --  zlib.h:127\n   Z_FULL_FLUSH : constant := 3;       --  zlib.h:128\n                                       --  zlib.h:128\n   Z_FINISH : constant := 4;        --  zlib.h:129\n                                    --  zlib.h:129\n   Z_OK : constant := 8#0000#;   --  zlib.h:132\n                                 --  zlib.h:132\n   Z_STREAM_END : constant := 1;       --  zlib.h:133\n                                       --  zlib.h:133\n   Z_NEED_DICT : constant := 2;        --  zlib.h:134\n                                       --  zlib.h:134\n   Z_ERRNO : constant := -1;        --  zlib.h:135\n                                    --  zlib.h:135\n   Z_STREAM_ERROR : constant := -2;       --  zlib.h:136\n                                          --  zlib.h:136\n   Z_DATA_ERROR : constant := -3;      --  zlib.h:137\n                                       --  zlib.h:137\n   Z_MEM_ERROR : constant := -4;       --  zlib.h:138\n                                       --  zlib.h:138\n   Z_BUF_ERROR : constant := -5;       --  zlib.h:139\n                                       --  zlib.h:139\n   Z_VERSION_ERROR : constant := -6;      --  zlib.h:140\n                                          --  zlib.h:140\n   Z_NO_COMPRESSION : constant := 8#0000#;   --  zlib.h:145\n                                             --  zlib.h:145\n   Z_BEST_SPEED : constant := 1;       --  zlib.h:146\n                                       --  zlib.h:146\n   Z_BEST_COMPRESSION : constant := 9;       --  zlib.h:147\n                                             --  zlib.h:147\n   Z_DEFAULT_COMPRESSION : constant := -1;      --  zlib.h:148\n                                                --  zlib.h:148\n   Z_FILTERED : constant := 1;      --  zlib.h:151\n                                    --  zlib.h:151\n   Z_HUFFMAN_ONLY : constant := 2;        --  zlib.h:152\n                                          --  zlib.h:152\n   Z_DEFAULT_STRATEGY : constant := 8#0000#; --  zlib.h:153\n                                             --  zlib.h:153\n   Z_BINARY : constant := 8#0000#;  --  zlib.h:156\n                                    --  zlib.h:156\n   Z_ASCII : constant := 1;      --  zlib.h:157\n                                 --  zlib.h:157\n   Z_UNKNOWN : constant := 2;       --  zlib.h:158\n                                    --  zlib.h:158\n   Z_DEFLATED : constant := 8;      --  zlib.h:161\n                                    --  zlib.h:161\n   Z_NULL : constant := 8#0000#; --  zlib.h:164\n                                 --  for initializing zalloc, zfree, opaque\n                                 --  zlib.h:164\n   type gzFile is new Voidp;                  --  zlib.h:646\n\n   type Z_Stream is private;\n\n   type Z_Streamp is access all Z_Stream;     --  zlib.h:89\n\n   type alloc_func is access function\n     (Opaque : Voidp;\n      Items  : UInt;\n      Size   : UInt)\n      return Voidp; --  zlib.h:63\n\n   type free_func is access procedure (opaque : Voidp; address : Voidp);\n\n   function zlibVersion return Chars_Ptr;\n\n   function Deflate (strm : Z_Streamp; flush : Int) return Int;\n\n   function DeflateEnd (strm : Z_Streamp) return Int;\n\n   function Inflate (strm : Z_Streamp; flush : Int) return Int;\n\n   function InflateEnd (strm : Z_Streamp) return Int;\n\n   function deflateSetDictionary\n     (strm       : Z_Streamp;\n      dictionary : Byte_Access;\n      dictLength : UInt)\n      return       Int;\n\n   function deflateCopy (dest : Z_Streamp; source : Z_Streamp) return Int;\n   --  zlib.h:478\n\n   function deflateReset (strm : Z_Streamp) return Int; -- zlib.h:495\n\n   function deflateParams\n     (strm     : Z_Streamp;\n      level    : Int;\n      strategy : Int)\n      return     Int;       -- zlib.h:506\n\n   function inflateSetDictionary\n     (strm       : Z_Streamp;\n      dictionary : Byte_Access;\n      dictLength : UInt)\n      return       Int; --  zlib.h:548\n\n   function inflateSync (strm : Z_Streamp) return Int;  --  zlib.h:565\n\n   function inflateReset (strm : Z_Streamp) return Int; --  zlib.h:580\n\n   function compress\n     (dest      : Byte_Access;\n      destLen   : ULong_Access;\n      source    : Byte_Access;\n      sourceLen : ULong)\n      return      Int;           -- zlib.h:601\n\n   function compress2\n     (dest      : Byte_Access;\n      destLen   : ULong_Access;\n      source    : Byte_Access;\n      sourceLen : ULong;\n      level     : Int)\n      return      Int;          -- zlib.h:615\n\n   function uncompress\n     (dest      : Byte_Access;\n      destLen   : ULong_Access;\n      source    : Byte_Access;\n      sourceLen : ULong)\n      return      Int;\n\n   function gzopen (path : Chars_Ptr; mode : Chars_Ptr) return gzFile;\n\n   function gzdopen (fd : Int; mode : Chars_Ptr) return gzFile;\n\n   function gzsetparams\n     (file     : gzFile;\n      level    : Int;\n      strategy : Int)\n      return     Int;\n\n   function gzread\n     (file : gzFile;\n      buf  : Voidp;\n      len  : UInt)\n      return Int;\n\n   function gzwrite\n     (file : in gzFile;\n      buf  : in Voidp;\n      len  : in UInt)\n      return Int;\n\n   function gzprintf (file : in gzFile; format : in Chars_Ptr) return Int;\n\n   function gzputs (file : in gzFile; s : in Chars_Ptr) return Int;\n\n   function gzgets\n     (file : gzFile;\n      buf  : Chars_Ptr;\n      len  : Int)\n      return Chars_Ptr;\n\n   function gzputc (file : gzFile; char : Int) return Int;\n\n   function gzgetc (file : gzFile) return Int;\n\n   function gzflush (file : gzFile; flush : Int) return Int;\n\n   function gzseek\n     (file   : gzFile;\n      offset : Int;\n      whence : Int)\n      return   Int;\n\n   function gzrewind (file : gzFile) return Int;\n\n   function gztell (file : gzFile) return Int;\n\n   function gzeof (file : gzFile) return Int;\n\n   function gzclose (file : gzFile) return Int;\n\n   function gzerror (file : gzFile; errnum : Int_Access) return Chars_Ptr;\n\n   function adler32\n     (adler : ULong;\n      buf   : Byte_Access;\n      len   : UInt)\n      return  ULong;\n\n   function crc32\n     (crc  : ULong;\n      buf  : Byte_Access;\n      len  : UInt)\n      return ULong;\n\n   function deflateInit\n     (strm        : Z_Streamp;\n      level       : Int;\n      version     : Chars_Ptr;\n      stream_size : Int)\n      return        Int;\n\n   function deflateInit2\n     (strm        : Z_Streamp;\n      level       : Int;\n      method      : Int;\n      windowBits  : Int;\n      memLevel    : Int;\n      strategy    : Int;\n      version     : Chars_Ptr;\n      stream_size : Int)\n      return        Int;\n\n   function Deflate_Init\n     (strm       : Z_Streamp;\n      level      : Int;\n      method     : Int;\n      windowBits : Int;\n      memLevel   : Int;\n      strategy   : Int)\n      return       Int;\n   pragma Inline (Deflate_Init);\n\n   function inflateInit\n     (strm        : Z_Streamp;\n      version     : Chars_Ptr;\n      stream_size : Int)\n      return        Int;\n\n   function inflateInit2\n     (strm        : in Z_Streamp;\n      windowBits  : in Int;\n      version     : in Chars_Ptr;\n      stream_size : in Int)\n      return      Int;\n\n   function inflateBackInit\n     (strm        : in Z_Streamp;\n      windowBits  : in Int;\n      window      : in Byte_Access;\n      version     : in Chars_Ptr;\n      stream_size : in Int)\n      return      Int;\n   --  Size of window have to be 2**windowBits.\n\n   function Inflate_Init (strm : Z_Streamp; windowBits : Int) return Int;\n   pragma Inline (Inflate_Init);\n\n   function zError (err : Int) return Chars_Ptr;\n\n   function inflateSyncPoint (z : Z_Streamp) return Int;\n\n   function get_crc_table return ULong_Access;\n\n   --  Interface to the available fields of the z_stream structure.\n   --  The application must update next_in and avail_in when avail_in has\n   --  dropped to zero. It must update next_out and avail_out when avail_out\n   --  has dropped to zero. The application must initialize zalloc, zfree and\n   --  opaque before calling the init function.\n\n   procedure Set_In\n     (Strm   : in out Z_Stream;\n      Buffer : in Voidp;\n      Size   : in UInt);\n   pragma Inline (Set_In);\n\n   procedure Set_Out\n     (Strm   : in out Z_Stream;\n      Buffer : in Voidp;\n      Size   : in UInt);\n   pragma Inline (Set_Out);\n\n   procedure Set_Mem_Func\n     (Strm   : in out Z_Stream;\n      Opaque : in Voidp;\n      Alloc  : in alloc_func;\n      Free   : in free_func);\n   pragma Inline (Set_Mem_Func);\n\n   function Last_Error_Message (Strm : in Z_Stream) return String;\n   pragma Inline (Last_Error_Message);\n\n   function Avail_Out (Strm : in Z_Stream) return UInt;\n   pragma Inline (Avail_Out);\n\n   function Avail_In (Strm : in Z_Stream) return UInt;\n   pragma Inline (Avail_In);\n\n   function Total_In (Strm : in Z_Stream) return ULong;\n   pragma Inline (Total_In);\n\n   function Total_Out (Strm : in Z_Stream) return ULong;\n   pragma Inline (Total_Out);\n\n   function inflateCopy\n     (dest   : in Z_Streamp;\n      Source : in Z_Streamp)\n      return Int;\n\n   function compressBound (Source_Len : in ULong) return ULong;\n\n   function deflateBound\n     (Strm       : in Z_Streamp;\n      Source_Len : in ULong)\n      return     ULong;\n\n   function gzungetc (C : in Int; File : in  gzFile) return Int;\n\n   function zlibCompileFlags return ULong;\n\nprivate\n\n   type Z_Stream is record            -- zlib.h:68\n      Next_In   : Voidp      := Nul;  -- next input byte\n      Avail_In  : UInt       := 0;    -- number of bytes available at next_in\n      Total_In  : ULong      := 0;    -- total nb of input bytes read so far\n      Next_Out  : Voidp      := Nul;  -- next output byte should be put there\n      Avail_Out : UInt       := 0;    -- remaining free space at next_out\n      Total_Out : ULong      := 0;    -- total nb of bytes output so far\n      msg       : Chars_Ptr;          -- last error message, NULL if no error\n      state     : Voidp;              -- not visible by applications\n      zalloc    : alloc_func := null; -- used to allocate the internal state\n      zfree     : free_func  := null; -- used to free the internal state\n      opaque    : Voidp;              -- private data object passed to\n                                      --  zalloc and zfree\n      data_type : Int;                -- best guess about the data type:\n                                      --  ascii or binary\n      adler     : ULong;              -- adler32 value of the uncompressed\n                                      --  data\n      reserved  : ULong;              -- reserved for future use\n   end record;\n\n   pragma Convention (C, Z_Stream);\n\n   pragma Import (C, zlibVersion, \"zlibVersion\");\n   pragma Import (C, Deflate, \"deflate\");\n   pragma Import (C, DeflateEnd, \"deflateEnd\");\n   pragma Import (C, Inflate, \"inflate\");\n   pragma Import (C, InflateEnd, \"inflateEnd\");\n   pragma Import (C, deflateSetDictionary, \"deflateSetDictionary\");\n   pragma Import (C, deflateCopy, \"deflateCopy\");\n   pragma Import (C, deflateReset, \"deflateReset\");\n   pragma Import (C, deflateParams, \"deflateParams\");\n   pragma Import (C, inflateSetDictionary, \"inflateSetDictionary\");\n   pragma Import (C, inflateSync, \"inflateSync\");\n   pragma Import (C, inflateReset, \"inflateReset\");\n   pragma Import (C, compress, \"compress\");\n   pragma Import (C, compress2, \"compress2\");\n   pragma Import (C, uncompress, \"uncompress\");\n   pragma Import (C, gzopen, \"gzopen\");\n   pragma Import (C, gzdopen, \"gzdopen\");\n   pragma Import (C, gzsetparams, \"gzsetparams\");\n   pragma Import (C, gzread, \"gzread\");\n   pragma Import (C, gzwrite, \"gzwrite\");\n   pragma Import (C, gzprintf, \"gzprintf\");\n   pragma Import (C, gzputs, \"gzputs\");\n   pragma Import (C, gzgets, \"gzgets\");\n   pragma Import (C, gzputc, \"gzputc\");\n   pragma Import (C, gzgetc, \"gzgetc\");\n   pragma Import (C, gzflush, \"gzflush\");\n   pragma Import (C, gzseek, \"gzseek\");\n   pragma Import (C, gzrewind, \"gzrewind\");\n   pragma Import (C, gztell, \"gztell\");\n   pragma Import (C, gzeof, \"gzeof\");\n   pragma Import (C, gzclose, \"gzclose\");\n   pragma Import (C, gzerror, \"gzerror\");\n   pragma Import (C, adler32, \"adler32\");\n   pragma Import (C, crc32, \"crc32\");\n   pragma Import (C, deflateInit, \"deflateInit_\");\n   pragma Import (C, inflateInit, \"inflateInit_\");\n   pragma Import (C, deflateInit2, \"deflateInit2_\");\n   pragma Import (C, inflateInit2, \"inflateInit2_\");\n   pragma Import (C, zError, \"zError\");\n   pragma Import (C, inflateSyncPoint, \"inflateSyncPoint\");\n   pragma Import (C, get_crc_table, \"get_crc_table\");\n\n   --  since zlib 1.2.0:\n\n   pragma Import (C, inflateCopy, \"inflateCopy\");\n   pragma Import (C, compressBound, \"compressBound\");\n   pragma Import (C, deflateBound, \"deflateBound\");\n   pragma Import (C, gzungetc, \"gzungetc\");\n   pragma Import (C, zlibCompileFlags, \"zlibCompileFlags\");\n\n   pragma Import (C, inflateBackInit, \"inflateBackInit_\");\n\n   --  I stopped binding the inflateBack routines, becouse realize that\n   --  it does not support zlib and gzip headers for now, and have no\n   --  symmetric deflateBack routines.\n   --  ZLib-Ada is symmetric regarding deflate/inflate data transformation\n   --  and has a similar generic callback interface for the\n   --  deflate/inflate transformation based on the regular Deflate/Inflate\n   --  routines.\n\n   --  pragma Import (C, inflateBack, \"inflateBack\");\n   --  pragma Import (C, inflateBackEnd, \"inflateBackEnd\");\n\nend ZLib.Thin;\n"
  },
  {
    "path": "external/zlib/contrib/ada/zlib.adb",
    "content": "----------------------------------------------------------------\n--  ZLib for Ada thick binding.                               --\n--                                                            --\n--  Copyright (C) 2002-2004 Dmitriy Anisimkov                 --\n--                                                            --\n--  Open source license information is in the zlib.ads file.  --\n----------------------------------------------------------------\n\n--  $Id: zlib.adb,v 1.31 2004/09/06 06:53:19 vagul Exp $\n\nwith Ada.Exceptions;\nwith Ada.Unchecked_Conversion;\nwith Ada.Unchecked_Deallocation;\n\nwith Interfaces.C.Strings;\n\nwith ZLib.Thin;\n\npackage body ZLib is\n\n   use type Thin.Int;\n\n   type Z_Stream is new Thin.Z_Stream;\n\n   type Return_Code_Enum is\n      (OK,\n       STREAM_END,\n       NEED_DICT,\n       ERRNO,\n       STREAM_ERROR,\n       DATA_ERROR,\n       MEM_ERROR,\n       BUF_ERROR,\n       VERSION_ERROR);\n\n   type Flate_Step_Function is access\n     function (Strm : in Thin.Z_Streamp; Flush : in Thin.Int) return Thin.Int;\n   pragma Convention (C, Flate_Step_Function);\n\n   type Flate_End_Function is access\n      function (Ctrm : in Thin.Z_Streamp) return Thin.Int;\n   pragma Convention (C, Flate_End_Function);\n\n   type Flate_Type is record\n      Step : Flate_Step_Function;\n      Done : Flate_End_Function;\n   end record;\n\n   subtype Footer_Array is Stream_Element_Array (1 .. 8);\n\n   Simple_GZip_Header : constant Stream_Element_Array (1 .. 10)\n     := (16#1f#, 16#8b#,                 --  Magic header\n         16#08#,                         --  Z_DEFLATED\n         16#00#,                         --  Flags\n         16#00#, 16#00#, 16#00#, 16#00#, --  Time\n         16#00#,                         --  XFlags\n         16#03#                          --  OS code\n        );\n   --  The simplest gzip header is not for informational, but just for\n   --  gzip format compatibility.\n   --  Note that some code below is using assumption\n   --  Simple_GZip_Header'Last > Footer_Array'Last, so do not make\n   --  Simple_GZip_Header'Last <= Footer_Array'Last.\n\n   Return_Code : constant array (Thin.Int range <>) of Return_Code_Enum\n     := (0 => OK,\n         1 => STREAM_END,\n         2 => NEED_DICT,\n        -1 => ERRNO,\n        -2 => STREAM_ERROR,\n        -3 => DATA_ERROR,\n        -4 => MEM_ERROR,\n        -5 => BUF_ERROR,\n        -6 => VERSION_ERROR);\n\n   Flate : constant array (Boolean) of Flate_Type\n     := (True  => (Step => Thin.Deflate'Access,\n                   Done => Thin.DeflateEnd'Access),\n         False => (Step => Thin.Inflate'Access,\n                   Done => Thin.InflateEnd'Access));\n\n   Flush_Finish : constant array (Boolean) of Flush_Mode\n     := (True => Finish, False => No_Flush);\n\n   procedure Raise_Error (Stream : in Z_Stream);\n   pragma Inline (Raise_Error);\n\n   procedure Raise_Error (Message : in String);\n   pragma Inline (Raise_Error);\n\n   procedure Check_Error (Stream : in Z_Stream; Code : in Thin.Int);\n\n   procedure Free is new Ada.Unchecked_Deallocation\n      (Z_Stream, Z_Stream_Access);\n\n   function To_Thin_Access is new Ada.Unchecked_Conversion\n     (Z_Stream_Access, Thin.Z_Streamp);\n\n   procedure Translate_GZip\n     (Filter    : in out Filter_Type;\n      In_Data   : in     Ada.Streams.Stream_Element_Array;\n      In_Last   :    out Ada.Streams.Stream_Element_Offset;\n      Out_Data  :    out Ada.Streams.Stream_Element_Array;\n      Out_Last  :    out Ada.Streams.Stream_Element_Offset;\n      Flush     : in     Flush_Mode);\n   --  Separate translate routine for make gzip header.\n\n   procedure Translate_Auto\n     (Filter    : in out Filter_Type;\n      In_Data   : in     Ada.Streams.Stream_Element_Array;\n      In_Last   :    out Ada.Streams.Stream_Element_Offset;\n      Out_Data  :    out Ada.Streams.Stream_Element_Array;\n      Out_Last  :    out Ada.Streams.Stream_Element_Offset;\n      Flush     : in     Flush_Mode);\n   --  translate routine without additional headers.\n\n   -----------------\n   -- Check_Error --\n   -----------------\n\n   procedure Check_Error (Stream : in Z_Stream; Code : in Thin.Int) is\n      use type Thin.Int;\n   begin\n      if Code /= Thin.Z_OK then\n         Raise_Error\n            (Return_Code_Enum'Image (Return_Code (Code))\n              & \": \" & Last_Error_Message (Stream));\n      end if;\n   end Check_Error;\n\n   -----------\n   -- Close --\n   -----------\n\n   procedure Close\n     (Filter       : in out Filter_Type;\n      Ignore_Error : in     Boolean := False)\n   is\n      Code : Thin.Int;\n   begin\n      if not Ignore_Error and then not Is_Open (Filter) then\n         raise Status_Error;\n      end if;\n\n      Code := Flate (Filter.Compression).Done (To_Thin_Access (Filter.Strm));\n\n      if Ignore_Error or else Code = Thin.Z_OK then\n         Free (Filter.Strm);\n      else\n         declare\n            Error_Message : constant String\n              := Last_Error_Message (Filter.Strm.all);\n         begin\n            Free (Filter.Strm);\n            Ada.Exceptions.Raise_Exception\n               (ZLib_Error'Identity,\n                Return_Code_Enum'Image (Return_Code (Code))\n                  & \": \" & Error_Message);\n         end;\n      end if;\n   end Close;\n\n   -----------\n   -- CRC32 --\n   -----------\n\n   function CRC32\n     (CRC  : in Unsigned_32;\n      Data : in Ada.Streams.Stream_Element_Array)\n      return Unsigned_32\n   is\n      use Thin;\n   begin\n      return Unsigned_32 (crc32 (ULong (CRC),\n                                 Data'Address,\n                                 Data'Length));\n   end CRC32;\n\n   procedure CRC32\n     (CRC  : in out Unsigned_32;\n      Data : in     Ada.Streams.Stream_Element_Array) is\n   begin\n      CRC := CRC32 (CRC, Data);\n   end CRC32;\n\n   ------------------\n   -- Deflate_Init --\n   ------------------\n\n   procedure Deflate_Init\n     (Filter       : in out Filter_Type;\n      Level        : in     Compression_Level  := Default_Compression;\n      Strategy     : in     Strategy_Type      := Default_Strategy;\n      Method       : in     Compression_Method := Deflated;\n      Window_Bits  : in     Window_Bits_Type   := Default_Window_Bits;\n      Memory_Level : in     Memory_Level_Type  := Default_Memory_Level;\n      Header       : in     Header_Type        := Default)\n   is\n      use type Thin.Int;\n      Win_Bits : Thin.Int := Thin.Int (Window_Bits);\n   begin\n      if Is_Open (Filter) then\n         raise Status_Error;\n      end if;\n\n      --  We allow ZLib to make header only in case of default header type.\n      --  Otherwise we would either do header by ourselfs, or do not do\n      --  header at all.\n\n      if Header = None or else Header = GZip then\n         Win_Bits := -Win_Bits;\n      end if;\n\n      --  For the GZip CRC calculation and make headers.\n\n      if Header = GZip then\n         Filter.CRC    := 0;\n         Filter.Offset := Simple_GZip_Header'First;\n      else\n         Filter.Offset := Simple_GZip_Header'Last + 1;\n      end if;\n\n      Filter.Strm        := new Z_Stream;\n      Filter.Compression := True;\n      Filter.Stream_End  := False;\n      Filter.Header      := Header;\n\n      if Thin.Deflate_Init\n           (To_Thin_Access (Filter.Strm),\n            Level      => Thin.Int (Level),\n            method     => Thin.Int (Method),\n            windowBits => Win_Bits,\n            memLevel   => Thin.Int (Memory_Level),\n            strategy   => Thin.Int (Strategy)) /= Thin.Z_OK\n      then\n         Raise_Error (Filter.Strm.all);\n      end if;\n   end Deflate_Init;\n\n   -----------\n   -- Flush --\n   -----------\n\n   procedure Flush\n     (Filter    : in out Filter_Type;\n      Out_Data  :    out Ada.Streams.Stream_Element_Array;\n      Out_Last  :    out Ada.Streams.Stream_Element_Offset;\n      Flush     : in     Flush_Mode)\n   is\n      No_Data : Stream_Element_Array := (1 .. 0 => 0);\n      Last    : Stream_Element_Offset;\n   begin\n      Translate (Filter, No_Data, Last, Out_Data, Out_Last, Flush);\n   end Flush;\n\n   -----------------------\n   -- Generic_Translate --\n   -----------------------\n\n   procedure Generic_Translate\n     (Filter          : in out ZLib.Filter_Type;\n      In_Buffer_Size  : in     Integer := Default_Buffer_Size;\n      Out_Buffer_Size : in     Integer := Default_Buffer_Size)\n   is\n      In_Buffer  : Stream_Element_Array\n                     (1 .. Stream_Element_Offset (In_Buffer_Size));\n      Out_Buffer : Stream_Element_Array\n                     (1 .. Stream_Element_Offset (Out_Buffer_Size));\n      Last       : Stream_Element_Offset;\n      In_Last    : Stream_Element_Offset;\n      In_First   : Stream_Element_Offset;\n      Out_Last   : Stream_Element_Offset;\n   begin\n      Main : loop\n         Data_In (In_Buffer, Last);\n\n         In_First := In_Buffer'First;\n\n         loop\n            Translate\n              (Filter   => Filter,\n               In_Data  => In_Buffer (In_First .. Last),\n               In_Last  => In_Last,\n               Out_Data => Out_Buffer,\n               Out_Last => Out_Last,\n               Flush    => Flush_Finish (Last < In_Buffer'First));\n\n            if Out_Buffer'First <= Out_Last then\n               Data_Out (Out_Buffer (Out_Buffer'First .. Out_Last));\n            end if;\n\n            exit Main when Stream_End (Filter);\n\n            --  The end of in buffer.\n\n            exit when In_Last = Last;\n\n            In_First := In_Last + 1;\n         end loop;\n      end loop Main;\n\n   end Generic_Translate;\n\n   ------------------\n   -- Inflate_Init --\n   ------------------\n\n   procedure Inflate_Init\n     (Filter      : in out Filter_Type;\n      Window_Bits : in     Window_Bits_Type := Default_Window_Bits;\n      Header      : in     Header_Type      := Default)\n   is\n      use type Thin.Int;\n      Win_Bits : Thin.Int := Thin.Int (Window_Bits);\n\n      procedure Check_Version;\n      --  Check the latest header types compatibility.\n\n      procedure Check_Version is\n      begin\n         if Version <= \"1.1.4\" then\n            Raise_Error\n              (\"Inflate header type \" & Header_Type'Image (Header)\n               & \" incompatible with ZLib version \" & Version);\n         end if;\n      end Check_Version;\n\n   begin\n      if Is_Open (Filter) then\n         raise Status_Error;\n      end if;\n\n      case Header is\n         when None =>\n            Check_Version;\n\n            --  Inflate data without headers determined\n            --  by negative Win_Bits.\n\n            Win_Bits := -Win_Bits;\n         when GZip =>\n            Check_Version;\n\n            --  Inflate gzip data defined by flag 16.\n\n            Win_Bits := Win_Bits + 16;\n         when Auto =>\n            Check_Version;\n\n            --  Inflate with automatic detection\n            --  of gzip or native header defined by flag 32.\n\n            Win_Bits := Win_Bits + 32;\n         when Default => null;\n      end case;\n\n      Filter.Strm        := new Z_Stream;\n      Filter.Compression := False;\n      Filter.Stream_End  := False;\n      Filter.Header      := Header;\n\n      if Thin.Inflate_Init\n         (To_Thin_Access (Filter.Strm), Win_Bits) /= Thin.Z_OK\n      then\n         Raise_Error (Filter.Strm.all);\n      end if;\n   end Inflate_Init;\n\n   -------------\n   -- Is_Open --\n   -------------\n\n   function Is_Open (Filter : in Filter_Type) return Boolean is\n   begin\n      return Filter.Strm /= null;\n   end Is_Open;\n\n   -----------------\n   -- Raise_Error --\n   -----------------\n\n   procedure Raise_Error (Message : in String) is\n   begin\n      Ada.Exceptions.Raise_Exception (ZLib_Error'Identity, Message);\n   end Raise_Error;\n\n   procedure Raise_Error (Stream : in Z_Stream) is\n   begin\n      Raise_Error (Last_Error_Message (Stream));\n   end Raise_Error;\n\n   ----------\n   -- Read --\n   ----------\n\n   procedure Read\n     (Filter : in out Filter_Type;\n      Item   :    out Ada.Streams.Stream_Element_Array;\n      Last   :    out Ada.Streams.Stream_Element_Offset;\n      Flush  : in     Flush_Mode := No_Flush)\n   is\n      In_Last    : Stream_Element_Offset;\n      Item_First : Ada.Streams.Stream_Element_Offset := Item'First;\n      V_Flush    : Flush_Mode := Flush;\n\n   begin\n      pragma Assert (Rest_First in Buffer'First .. Buffer'Last + 1);\n      pragma Assert (Rest_Last in Buffer'First - 1 .. Buffer'Last);\n\n      loop\n         if Rest_Last = Buffer'First - 1 then\n            V_Flush := Finish;\n\n         elsif Rest_First > Rest_Last then\n            Read (Buffer, Rest_Last);\n            Rest_First := Buffer'First;\n\n            if Rest_Last < Buffer'First then\n               V_Flush := Finish;\n            end if;\n         end if;\n\n         Translate\n           (Filter   => Filter,\n            In_Data  => Buffer (Rest_First .. Rest_Last),\n            In_Last  => In_Last,\n            Out_Data => Item (Item_First .. Item'Last),\n            Out_Last => Last,\n            Flush    => V_Flush);\n\n         Rest_First := In_Last + 1;\n\n         exit when Stream_End (Filter)\n           or else Last = Item'Last\n           or else (Last >= Item'First and then Allow_Read_Some);\n\n         Item_First := Last + 1;\n      end loop;\n   end Read;\n\n   ----------------\n   -- Stream_End --\n   ----------------\n\n   function Stream_End (Filter : in Filter_Type) return Boolean is\n   begin\n      if Filter.Header = GZip and Filter.Compression then\n         return Filter.Stream_End\n            and then Filter.Offset = Footer_Array'Last + 1;\n      else\n         return Filter.Stream_End;\n      end if;\n   end Stream_End;\n\n   --------------\n   -- Total_In --\n   --------------\n\n   function Total_In (Filter : in Filter_Type) return Count is\n   begin\n      return Count (Thin.Total_In (To_Thin_Access (Filter.Strm).all));\n   end Total_In;\n\n   ---------------\n   -- Total_Out --\n   ---------------\n\n   function Total_Out (Filter : in Filter_Type) return Count is\n   begin\n      return Count (Thin.Total_Out (To_Thin_Access (Filter.Strm).all));\n   end Total_Out;\n\n   ---------------\n   -- Translate --\n   ---------------\n\n   procedure Translate\n     (Filter    : in out Filter_Type;\n      In_Data   : in     Ada.Streams.Stream_Element_Array;\n      In_Last   :    out Ada.Streams.Stream_Element_Offset;\n      Out_Data  :    out Ada.Streams.Stream_Element_Array;\n      Out_Last  :    out Ada.Streams.Stream_Element_Offset;\n      Flush     : in     Flush_Mode) is\n   begin\n      if Filter.Header = GZip and then Filter.Compression then\n         Translate_GZip\n           (Filter   => Filter,\n            In_Data  => In_Data,\n            In_Last  => In_Last,\n            Out_Data => Out_Data,\n            Out_Last => Out_Last,\n            Flush    => Flush);\n      else\n         Translate_Auto\n           (Filter   => Filter,\n            In_Data  => In_Data,\n            In_Last  => In_Last,\n            Out_Data => Out_Data,\n            Out_Last => Out_Last,\n            Flush    => Flush);\n      end if;\n   end Translate;\n\n   --------------------\n   -- Translate_Auto --\n   --------------------\n\n   procedure Translate_Auto\n     (Filter    : in out Filter_Type;\n      In_Data   : in     Ada.Streams.Stream_Element_Array;\n      In_Last   :    out Ada.Streams.Stream_Element_Offset;\n      Out_Data  :    out Ada.Streams.Stream_Element_Array;\n      Out_Last  :    out Ada.Streams.Stream_Element_Offset;\n      Flush     : in     Flush_Mode)\n   is\n      use type Thin.Int;\n      Code : Thin.Int;\n\n   begin\n      if not Is_Open (Filter) then\n         raise Status_Error;\n      end if;\n\n      if Out_Data'Length = 0 and then In_Data'Length = 0 then\n         raise Constraint_Error;\n      end if;\n\n      Set_Out (Filter.Strm.all, Out_Data'Address, Out_Data'Length);\n      Set_In  (Filter.Strm.all, In_Data'Address, In_Data'Length);\n\n      Code := Flate (Filter.Compression).Step\n        (To_Thin_Access (Filter.Strm),\n         Thin.Int (Flush));\n\n      if Code = Thin.Z_STREAM_END then\n         Filter.Stream_End := True;\n      else\n         Check_Error (Filter.Strm.all, Code);\n      end if;\n\n      In_Last  := In_Data'Last\n         - Stream_Element_Offset (Avail_In (Filter.Strm.all));\n      Out_Last := Out_Data'Last\n         - Stream_Element_Offset (Avail_Out (Filter.Strm.all));\n   end Translate_Auto;\n\n   --------------------\n   -- Translate_GZip --\n   --------------------\n\n   procedure Translate_GZip\n     (Filter    : in out Filter_Type;\n      In_Data   : in     Ada.Streams.Stream_Element_Array;\n      In_Last   :    out Ada.Streams.Stream_Element_Offset;\n      Out_Data  :    out Ada.Streams.Stream_Element_Array;\n      Out_Last  :    out Ada.Streams.Stream_Element_Offset;\n      Flush     : in     Flush_Mode)\n   is\n      Out_First : Stream_Element_Offset;\n\n      procedure Add_Data (Data : in Stream_Element_Array);\n      --  Add data to stream from the Filter.Offset till necessary,\n      --  used for add gzip headr/footer.\n\n      procedure Put_32\n        (Item : in out Stream_Element_Array;\n         Data : in     Unsigned_32);\n      pragma Inline (Put_32);\n\n      --------------\n      -- Add_Data --\n      --------------\n\n      procedure Add_Data (Data : in Stream_Element_Array) is\n         Data_First : Stream_Element_Offset renames Filter.Offset;\n         Data_Last  : Stream_Element_Offset;\n         Data_Len   : Stream_Element_Offset; --  -1\n         Out_Len    : Stream_Element_Offset; --  -1\n      begin\n         Out_First := Out_Last + 1;\n\n         if Data_First > Data'Last then\n            return;\n         end if;\n\n         Data_Len  := Data'Last     - Data_First;\n         Out_Len   := Out_Data'Last - Out_First;\n\n         if Data_Len <= Out_Len then\n            Out_Last  := Out_First  + Data_Len;\n            Data_Last := Data'Last;\n         else\n            Out_Last  := Out_Data'Last;\n            Data_Last := Data_First + Out_Len;\n         end if;\n\n         Out_Data (Out_First .. Out_Last) := Data (Data_First .. Data_Last);\n\n         Data_First := Data_Last + 1;\n         Out_First  := Out_Last + 1;\n      end Add_Data;\n\n      ------------\n      -- Put_32 --\n      ------------\n\n      procedure Put_32\n        (Item : in out Stream_Element_Array;\n         Data : in     Unsigned_32)\n      is\n         D : Unsigned_32 := Data;\n      begin\n         for J in Item'First .. Item'First + 3 loop\n            Item (J) := Stream_Element (D and 16#FF#);\n            D := Shift_Right (D, 8);\n         end loop;\n      end Put_32;\n\n   begin\n      Out_Last := Out_Data'First - 1;\n\n      if not Filter.Stream_End then\n         Add_Data (Simple_GZip_Header);\n\n         Translate_Auto\n           (Filter   => Filter,\n            In_Data  => In_Data,\n            In_Last  => In_Last,\n            Out_Data => Out_Data (Out_First .. Out_Data'Last),\n            Out_Last => Out_Last,\n            Flush    => Flush);\n\n         CRC32 (Filter.CRC, In_Data (In_Data'First .. In_Last));\n      end if;\n\n      if Filter.Stream_End and then Out_Last <= Out_Data'Last then\n         --  This detection method would work only when\n         --  Simple_GZip_Header'Last > Footer_Array'Last\n\n         if Filter.Offset = Simple_GZip_Header'Last + 1 then\n            Filter.Offset := Footer_Array'First;\n         end if;\n\n         declare\n            Footer : Footer_Array;\n         begin\n            Put_32 (Footer, Filter.CRC);\n            Put_32 (Footer (Footer'First + 4 .. Footer'Last),\n                    Unsigned_32 (Total_In (Filter)));\n            Add_Data (Footer);\n         end;\n      end if;\n   end Translate_GZip;\n\n   -------------\n   -- Version --\n   -------------\n\n   function Version return String is\n   begin\n      return Interfaces.C.Strings.Value (Thin.zlibVersion);\n   end Version;\n\n   -----------\n   -- Write --\n   -----------\n\n   procedure Write\n     (Filter : in out Filter_Type;\n      Item   : in     Ada.Streams.Stream_Element_Array;\n      Flush  : in     Flush_Mode := No_Flush)\n   is\n      Buffer   : Stream_Element_Array (1 .. Buffer_Size);\n      In_Last  : Stream_Element_Offset;\n      Out_Last : Stream_Element_Offset;\n      In_First : Stream_Element_Offset := Item'First;\n   begin\n      if Item'Length = 0 and Flush = No_Flush then\n         return;\n      end if;\n\n      loop\n         Translate\n           (Filter   => Filter,\n            In_Data  => Item (In_First .. Item'Last),\n            In_Last  => In_Last,\n            Out_Data => Buffer,\n            Out_Last => Out_Last,\n            Flush    => Flush);\n\n         if Out_Last >= Buffer'First then\n            Write (Buffer (1 .. Out_Last));\n         end if;\n\n         exit when In_Last = Item'Last or Stream_End (Filter);\n\n         In_First := In_Last + 1;\n      end loop;\n   end Write;\n\nend ZLib;\n"
  },
  {
    "path": "external/zlib/contrib/ada/zlib.ads",
    "content": "------------------------------------------------------------------------------\n--                      ZLib for Ada thick binding.                         --\n--                                                                          --\n--              Copyright (C) 2002-2004 Dmitriy Anisimkov                   --\n--                                                                          --\n--  This library is free software; you can redistribute it and/or modify    --\n--  it under the terms of the GNU General Public License as published by    --\n--  the Free Software Foundation; either version 2 of the License, or (at   --\n--  your option) any later version.                                         --\n--                                                                          --\n--  This library is distributed in the hope that it will be useful, but     --\n--  WITHOUT ANY WARRANTY; without even the implied warranty of              --\n--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU       --\n--  General Public License for more details.                                --\n--                                                                          --\n--  You should have received a copy of the GNU General Public License       --\n--  along with this library; if not, write to the Free Software Foundation, --\n--  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.          --\n--                                                                          --\n--  As a special exception, if other files instantiate generics from this   --\n--  unit, or you link this unit with other files to produce an executable,  --\n--  this  unit  does not  by itself cause  the resulting executable to be   --\n--  covered by the GNU General Public License. This exception does not      --\n--  however invalidate any other reasons why the executable file  might be  --\n--  covered by the  GNU Public License.                                     --\n------------------------------------------------------------------------------\n\n--  $Id: zlib.ads,v 1.26 2004/09/06 06:53:19 vagul Exp $\n\nwith Ada.Streams;\n\nwith Interfaces;\n\npackage ZLib is\n\n   ZLib_Error   : exception;\n   Status_Error : exception;\n\n   type Compression_Level is new Integer range -1 .. 9;\n\n   type Flush_Mode is private;\n\n   type Compression_Method is private;\n\n   type Window_Bits_Type is new Integer range 8 .. 15;\n\n   type Memory_Level_Type is new Integer range 1 .. 9;\n\n   type Unsigned_32 is new Interfaces.Unsigned_32;\n\n   type Strategy_Type is private;\n\n   type Header_Type is (None, Auto, Default, GZip);\n   --  Header type usage have a some limitation for inflate.\n   --  See comment for Inflate_Init.\n\n   subtype Count is Ada.Streams.Stream_Element_Count;\n\n   Default_Memory_Level : constant Memory_Level_Type := 8;\n   Default_Window_Bits  : constant Window_Bits_Type  := 15;\n\n   ----------------------------------\n   -- Compression method constants --\n   ----------------------------------\n\n   Deflated : constant Compression_Method;\n   --  Only one method allowed in this ZLib version\n\n   ---------------------------------\n   -- Compression level constants --\n   ---------------------------------\n\n   No_Compression      : constant Compression_Level := 0;\n   Best_Speed          : constant Compression_Level := 1;\n   Best_Compression    : constant Compression_Level := 9;\n   Default_Compression : constant Compression_Level := -1;\n\n   --------------------------\n   -- Flush mode constants --\n   --------------------------\n\n   No_Flush      : constant Flush_Mode;\n   --  Regular way for compression, no flush\n\n   Partial_Flush : constant Flush_Mode;\n   --  Will be removed, use Z_SYNC_FLUSH instead\n\n   Sync_Flush    : constant Flush_Mode;\n   --  All pending output is flushed to the output buffer and the output\n   --  is aligned on a byte boundary, so that the decompressor can get all\n   --  input data available so far. (In particular avail_in is zero after the\n   --  call if enough output space has been provided  before the call.)\n   --  Flushing may degrade compression for some compression algorithms and so\n   --  it should be used only when necessary.\n\n   Block_Flush   : constant Flush_Mode;\n   --  Z_BLOCK requests that inflate() stop\n   --  if and when it get to the next deflate block boundary. When decoding the\n   --  zlib or gzip format, this will cause inflate() to return immediately\n   --  after the header and before the first block. When doing a raw inflate,\n   --  inflate() will go ahead and process the first block, and will return\n   --  when it gets to the end of that block, or when it runs out of data.\n\n   Full_Flush    : constant Flush_Mode;\n   --  All output is flushed as with SYNC_FLUSH, and the compression state\n   --  is reset so that decompression can restart from this point if previous\n   --  compressed data has been damaged or if random access is desired. Using\n   --  Full_Flush too often can seriously degrade the compression.\n\n   Finish        : constant Flush_Mode;\n   --  Just for tell the compressor that input data is complete.\n\n   ------------------------------------\n   -- Compression strategy constants --\n   ------------------------------------\n\n   --  RLE stategy could be used only in version 1.2.0 and later.\n\n   Filtered         : constant Strategy_Type;\n   Huffman_Only     : constant Strategy_Type;\n   RLE              : constant Strategy_Type;\n   Default_Strategy : constant Strategy_Type;\n\n   Default_Buffer_Size : constant := 4096;\n\n   type Filter_Type is tagged limited private;\n   --  The filter is for compression and for decompression.\n   --  The usage of the type is depend of its initialization.\n\n   function Version return String;\n   pragma Inline (Version);\n   --  Return string representation of the ZLib version.\n\n   procedure Deflate_Init\n     (Filter       : in out Filter_Type;\n      Level        : in     Compression_Level  := Default_Compression;\n      Strategy     : in     Strategy_Type      := Default_Strategy;\n      Method       : in     Compression_Method := Deflated;\n      Window_Bits  : in     Window_Bits_Type   := Default_Window_Bits;\n      Memory_Level : in     Memory_Level_Type  := Default_Memory_Level;\n      Header       : in     Header_Type        := Default);\n   --  Compressor initialization.\n   --  When Header parameter is Auto or Default, then default zlib header\n   --  would be provided for compressed data.\n   --  When Header is GZip, then gzip header would be set instead of\n   --  default header.\n   --  When Header is None, no header would be set for compressed data.\n\n   procedure Inflate_Init\n     (Filter      : in out Filter_Type;\n      Window_Bits : in     Window_Bits_Type := Default_Window_Bits;\n      Header      : in     Header_Type      := Default);\n   --  Decompressor initialization.\n   --  Default header type mean that ZLib default header is expecting in the\n   --  input compressed stream.\n   --  Header type None mean that no header is expecting in the input stream.\n   --  GZip header type mean that GZip header is expecting in the\n   --  input compressed stream.\n   --  Auto header type mean that header type (GZip or Native) would be\n   --  detected automatically in the input stream.\n   --  Note that header types parameter values None, GZip and Auto are\n   --  supported for inflate routine only in ZLib versions 1.2.0.2 and later.\n   --  Deflate_Init is supporting all header types.\n\n   function Is_Open (Filter : in Filter_Type) return Boolean;\n   pragma Inline (Is_Open);\n   --  Is the filter opened for compression or decompression.\n\n   procedure Close\n     (Filter       : in out Filter_Type;\n      Ignore_Error : in     Boolean := False);\n   --  Closing the compression or decompressor.\n   --  If stream is closing before the complete and Ignore_Error is False,\n   --  The exception would be raised.\n\n   generic\n      with procedure Data_In\n        (Item : out Ada.Streams.Stream_Element_Array;\n         Last : out Ada.Streams.Stream_Element_Offset);\n      with procedure Data_Out\n        (Item : in Ada.Streams.Stream_Element_Array);\n   procedure Generic_Translate\n     (Filter          : in out Filter_Type;\n      In_Buffer_Size  : in     Integer := Default_Buffer_Size;\n      Out_Buffer_Size : in     Integer := Default_Buffer_Size);\n   --  Compress/decompress data fetch from Data_In routine and pass the result\n   --  to the Data_Out routine. User should provide Data_In and Data_Out\n   --  for compression/decompression data flow.\n   --  Compression or decompression depend on Filter initialization.\n\n   function Total_In (Filter : in Filter_Type) return Count;\n   pragma Inline (Total_In);\n   --  Returns total number of input bytes read so far\n\n   function Total_Out (Filter : in Filter_Type) return Count;\n   pragma Inline (Total_Out);\n   --  Returns total number of bytes output so far\n\n   function CRC32\n     (CRC    : in Unsigned_32;\n      Data   : in Ada.Streams.Stream_Element_Array)\n      return Unsigned_32;\n   pragma Inline (CRC32);\n   --  Compute CRC32, it could be necessary for make gzip format\n\n   procedure CRC32\n     (CRC  : in out Unsigned_32;\n      Data : in     Ada.Streams.Stream_Element_Array);\n   pragma Inline (CRC32);\n   --  Compute CRC32, it could be necessary for make gzip format\n\n   -------------------------------------------------\n   --  Below is more complex low level routines.  --\n   -------------------------------------------------\n\n   procedure Translate\n     (Filter    : in out Filter_Type;\n      In_Data   : in     Ada.Streams.Stream_Element_Array;\n      In_Last   :    out Ada.Streams.Stream_Element_Offset;\n      Out_Data  :    out Ada.Streams.Stream_Element_Array;\n      Out_Last  :    out Ada.Streams.Stream_Element_Offset;\n      Flush     : in     Flush_Mode);\n   --  Compress/decompress the In_Data buffer and place the result into\n   --  Out_Data. In_Last is the index of last element from In_Data accepted by\n   --  the Filter. Out_Last is the last element of the received data from\n   --  Filter. To tell the filter that incoming data are complete put the\n   --  Flush parameter to Finish.\n\n   function Stream_End (Filter : in Filter_Type) return Boolean;\n   pragma Inline (Stream_End);\n   --  Return the true when the stream is complete.\n\n   procedure Flush\n     (Filter    : in out Filter_Type;\n      Out_Data  :    out Ada.Streams.Stream_Element_Array;\n      Out_Last  :    out Ada.Streams.Stream_Element_Offset;\n      Flush     : in     Flush_Mode);\n   pragma Inline (Flush);\n   --  Flushing the data from the compressor.\n\n   generic\n      with procedure Write\n        (Item : in Ada.Streams.Stream_Element_Array);\n      --  User should provide this routine for accept\n      --  compressed/decompressed data.\n\n      Buffer_Size : in Ada.Streams.Stream_Element_Offset\n         := Default_Buffer_Size;\n      --  Buffer size for Write user routine.\n\n   procedure Write\n     (Filter  : in out Filter_Type;\n      Item    : in     Ada.Streams.Stream_Element_Array;\n      Flush   : in     Flush_Mode := No_Flush);\n   --  Compress/Decompress data from Item to the generic parameter procedure\n   --  Write. Output buffer size could be set in Buffer_Size generic parameter.\n\n   generic\n      with procedure Read\n        (Item : out Ada.Streams.Stream_Element_Array;\n         Last : out Ada.Streams.Stream_Element_Offset);\n      --  User should provide data for compression/decompression\n      --  thru this routine.\n\n      Buffer : in out Ada.Streams.Stream_Element_Array;\n      --  Buffer for keep remaining data from the previous\n      --  back read.\n\n      Rest_First, Rest_Last : in out Ada.Streams.Stream_Element_Offset;\n      --  Rest_First have to be initialized to Buffer'Last + 1\n      --  Rest_Last have to be initialized to Buffer'Last\n      --  before usage.\n\n      Allow_Read_Some : in Boolean := False;\n      --  Is it allowed to return Last < Item'Last before end of data.\n\n   procedure Read\n     (Filter : in out Filter_Type;\n      Item   :    out Ada.Streams.Stream_Element_Array;\n      Last   :    out Ada.Streams.Stream_Element_Offset;\n      Flush  : in     Flush_Mode := No_Flush);\n   --  Compress/Decompress data from generic parameter procedure Read to the\n   --  Item. User should provide Buffer and initialized Rest_First, Rest_Last\n   --  indicators. If Allow_Read_Some is True, Read routines could return\n   --  Last < Item'Last only at end of stream.\n\nprivate\n\n   use Ada.Streams;\n\n   pragma Assert (Ada.Streams.Stream_Element'Size    =    8);\n   pragma Assert (Ada.Streams.Stream_Element'Modulus = 2**8);\n\n   type Flush_Mode is new Integer range 0 .. 5;\n\n   type Compression_Method is new Integer range 8 .. 8;\n\n   type Strategy_Type is new Integer range 0 .. 3;\n\n   No_Flush      : constant Flush_Mode := 0;\n   Partial_Flush : constant Flush_Mode := 1;\n   Sync_Flush    : constant Flush_Mode := 2;\n   Full_Flush    : constant Flush_Mode := 3;\n   Finish        : constant Flush_Mode := 4;\n   Block_Flush   : constant Flush_Mode := 5;\n\n   Filtered         : constant Strategy_Type := 1;\n   Huffman_Only     : constant Strategy_Type := 2;\n   RLE              : constant Strategy_Type := 3;\n   Default_Strategy : constant Strategy_Type := 0;\n\n   Deflated : constant Compression_Method := 8;\n\n   type Z_Stream;\n\n   type Z_Stream_Access is access all Z_Stream;\n\n   type Filter_Type is tagged limited record\n      Strm        : Z_Stream_Access;\n      Compression : Boolean;\n      Stream_End  : Boolean;\n      Header      : Header_Type;\n      CRC         : Unsigned_32;\n      Offset      : Stream_Element_Offset;\n      --  Offset for gzip header/footer output.\n   end record;\n\nend ZLib;\n"
  },
  {
    "path": "external/zlib/contrib/ada/zlib.gpr",
    "content": "project Zlib is\n\n   for Languages use (\"Ada\");\n   for Source_Dirs use (\".\");\n   for Object_Dir use \".\";\n   for Main use (\"test.adb\", \"mtest.adb\", \"read.adb\", \"buffer_demo\");\n\n   package Compiler is\n      for Default_Switches (\"ada\") use (\"-gnatwcfilopru\", \"-gnatVcdfimorst\", \"-gnatyabcefhiklmnoprst\");\n   end Compiler;\n\n   package Linker is\n      for Default_Switches (\"ada\") use (\"-lz\");\n   end Linker;\n\n   package Builder is\n      for Default_Switches (\"ada\") use (\"-s\", \"-gnatQ\");\n   end Builder;\n\nend Zlib;\n"
  },
  {
    "path": "external/zlib/contrib/amd64/amd64-match.S",
    "content": "/*\n * match.S -- optimized version of longest_match()\n * based on the similar work by Gilles Vollant, and Brian Raiter, written 1998\n *\n * This is free software; you can redistribute it and/or modify it\n * under the terms of the BSD License. Use by owners of Che Guevarra\n * parafernalia is prohibited, where possible, and highly discouraged\n * elsewhere.\n */\n\n#ifndef NO_UNDERLINE\n#\tdefine\tmatch_init\t_match_init\n#\tdefine\tlongest_match\t_longest_match\n#endif\n\n#define\tscanend\t\tebx\n#define\tscanendw\tbx\n#define\tchainlenwmask\tedx /* high word: current chain len low word: s->wmask */\n#define\tcurmatch\trsi\n#define\tcurmatchd\tesi\n#define\twindowbestlen\tr8\n#define\tscanalign\tr9\n#define\tscanalignd\tr9d\n#define\twindow\t\tr10\n#define\tbestlen\t\tr11\n#define\tbestlend\tr11d\n#define\tscanstart\tr12d\n#define\tscanstartw\tr12w\n#define scan\t\tr13\n#define nicematch\tr14d\n#define\tlimit\t\tr15\n#define\tlimitd\t\tr15d\n#define prev\t\trcx\n\n/*\n * The 258 is a \"magic number, not a parameter -- changing it\n * breaks the hell loose\n */\n#define\tMAX_MATCH\t(258)\n#define\tMIN_MATCH\t(3)\n#define\tMIN_LOOKAHEAD\t(MAX_MATCH + MIN_MATCH + 1)\n#define\tMAX_MATCH_8\t((MAX_MATCH + 7) & ~7)\n\n/* stack frame offsets */\n#define\tLocalVarsSize\t(112)\n#define _chainlenwmask\t( 8-LocalVarsSize)(%rsp)\n#define _windowbestlen\t(16-LocalVarsSize)(%rsp)\n#define save_r14        (24-LocalVarsSize)(%rsp)\n#define save_rsi        (32-LocalVarsSize)(%rsp)\n#define save_rbx        (40-LocalVarsSize)(%rsp)\n#define save_r12        (56-LocalVarsSize)(%rsp)\n#define save_r13        (64-LocalVarsSize)(%rsp)\n#define save_r15        (80-LocalVarsSize)(%rsp)\n\n\n.globl\tmatch_init, longest_match\n\n/*\n * On AMD64 the first argument of a function (in our case -- the pointer to\n * deflate_state structure) is passed in %rdi, hence our offsets below are\n * all off of that.\n */\n\n/* you can check the structure offset by running\n\n#include <stdlib.h>\n#include <stdio.h>\n#include \"deflate.h\"\n\nvoid print_depl()\n{\ndeflate_state ds;\ndeflate_state *s=&ds;\nprintf(\"size pointer=%u\\n\",(int)sizeof(void*));\n\nprintf(\"#define dsWSize         (%3u)(%%rdi)\\n\",(int)(((char*)&(s->w_size))-((char*)s)));\nprintf(\"#define dsWMask         (%3u)(%%rdi)\\n\",(int)(((char*)&(s->w_mask))-((char*)s)));\nprintf(\"#define dsWindow        (%3u)(%%rdi)\\n\",(int)(((char*)&(s->window))-((char*)s)));\nprintf(\"#define dsPrev          (%3u)(%%rdi)\\n\",(int)(((char*)&(s->prev))-((char*)s)));\nprintf(\"#define dsMatchLen      (%3u)(%%rdi)\\n\",(int)(((char*)&(s->match_length))-((char*)s)));\nprintf(\"#define dsPrevMatch     (%3u)(%%rdi)\\n\",(int)(((char*)&(s->prev_match))-((char*)s)));\nprintf(\"#define dsStrStart      (%3u)(%%rdi)\\n\",(int)(((char*)&(s->strstart))-((char*)s)));\nprintf(\"#define dsMatchStart    (%3u)(%%rdi)\\n\",(int)(((char*)&(s->match_start))-((char*)s)));\nprintf(\"#define dsLookahead     (%3u)(%%rdi)\\n\",(int)(((char*)&(s->lookahead))-((char*)s)));\nprintf(\"#define dsPrevLen       (%3u)(%%rdi)\\n\",(int)(((char*)&(s->prev_length))-((char*)s)));\nprintf(\"#define dsMaxChainLen   (%3u)(%%rdi)\\n\",(int)(((char*)&(s->max_chain_length))-((char*)s)));\nprintf(\"#define dsGoodMatch     (%3u)(%%rdi)\\n\",(int)(((char*)&(s->good_match))-((char*)s)));\nprintf(\"#define dsNiceMatch     (%3u)(%%rdi)\\n\",(int)(((char*)&(s->nice_match))-((char*)s)));\n}\n\n*/\n\n\n/*\n  to compile for XCode 3.2 on MacOSX x86_64\n  - run \"gcc -g -c -DXCODE_MAC_X64_STRUCTURE amd64-match.S\"\n */\n\n\n#ifndef CURRENT_LINX_XCODE_MAC_X64_STRUCTURE\n#define dsWSize\t\t( 68)(%rdi)\n#define dsWMask\t\t( 76)(%rdi)\n#define dsWindow\t( 80)(%rdi)\n#define dsPrev\t\t( 96)(%rdi)\n#define dsMatchLen\t(144)(%rdi)\n#define dsPrevMatch\t(148)(%rdi)\n#define dsStrStart\t(156)(%rdi)\n#define dsMatchStart\t(160)(%rdi)\n#define dsLookahead\t(164)(%rdi)\n#define dsPrevLen\t(168)(%rdi)\n#define dsMaxChainLen\t(172)(%rdi)\n#define dsGoodMatch\t(188)(%rdi)\n#define dsNiceMatch\t(192)(%rdi)\n\n#else \n\n#ifndef STRUCT_OFFSET\n#\tdefine STRUCT_OFFSET\t(0)\n#endif\n\n\n#define dsWSize\t\t( 56 + STRUCT_OFFSET)(%rdi)\n#define dsWMask\t\t( 64 + STRUCT_OFFSET)(%rdi)\n#define dsWindow\t( 72 + STRUCT_OFFSET)(%rdi)\n#define dsPrev\t\t( 88 + STRUCT_OFFSET)(%rdi)\n#define dsMatchLen\t(136 + STRUCT_OFFSET)(%rdi)\n#define dsPrevMatch\t(140 + STRUCT_OFFSET)(%rdi)\n#define dsStrStart\t(148 + STRUCT_OFFSET)(%rdi)\n#define dsMatchStart\t(152 + STRUCT_OFFSET)(%rdi)\n#define dsLookahead\t(156 + STRUCT_OFFSET)(%rdi)\n#define dsPrevLen\t(160 + STRUCT_OFFSET)(%rdi)\n#define dsMaxChainLen\t(164 + STRUCT_OFFSET)(%rdi)\n#define dsGoodMatch\t(180 + STRUCT_OFFSET)(%rdi)\n#define dsNiceMatch\t(184 + STRUCT_OFFSET)(%rdi)\n\n#endif\n\n\n\n\n.text\n\n/* uInt longest_match(deflate_state *deflatestate, IPos curmatch) */\n\nlongest_match:\n/*\n * Retrieve the function arguments. %curmatch will hold cur_match\n * throughout the entire function (passed via rsi on amd64).\n * rdi will hold the pointer to the deflate_state (first arg on amd64)\n */\n\t\tmov     %rsi, save_rsi\n\t\tmov     %rbx, save_rbx\n\t\tmov\t%r12, save_r12\n\t\tmov     %r13, save_r13\n\t\tmov     %r14, save_r14\n\t\tmov     %r15, save_r15\n\n/* uInt wmask = s->w_mask;\t\t\t\t\t\t*/\n/* unsigned chain_length = s->max_chain_length;\t\t\t\t*/\n/* if (s->prev_length >= s->good_match) {\t\t\t\t*/\n/*     chain_length >>= 2;\t\t\t\t\t\t*/\n/* }\t\t\t\t\t\t\t\t\t*/\n\n\t\tmovl\tdsPrevLen, %eax\n\t\tmovl\tdsGoodMatch, %ebx\n\t\tcmpl\t%ebx, %eax\n\t\tmovl\tdsWMask, %eax\n\t\tmovl\tdsMaxChainLen, %chainlenwmask\n\t\tjl\tLastMatchGood\n\t\tshrl\t$2, %chainlenwmask\nLastMatchGood:\n\n/* chainlen is decremented once beforehand so that the function can\t*/\n/* use the sign flag instead of the zero flag for the exit test.\t*/\n/* It is then shifted into the high word, to make room for the wmask\t*/\n/* value, which it will always accompany.\t\t\t\t*/\n\n\t\tdecl\t%chainlenwmask\n\t\tshll\t$16, %chainlenwmask\n\t\torl\t%eax, %chainlenwmask\n\n/* if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;\t*/\n\n\t\tmovl\tdsNiceMatch, %eax\n\t\tmovl\tdsLookahead, %ebx\n\t\tcmpl\t%eax, %ebx\n\t\tjl\tLookaheadLess\n\t\tmovl\t%eax, %ebx\nLookaheadLess:\tmovl\t%ebx, %nicematch\n\n/* register Bytef *scan = s->window + s->strstart;\t\t\t*/\n\n\t\tmov\tdsWindow, %window\n\t\tmovl\tdsStrStart, %limitd\n\t\tlea\t(%limit, %window), %scan\n\n/* Determine how many bytes the scan ptr is off from being\t\t*/\n/* dword-aligned.\t\t\t\t\t\t\t*/\n\n\t\tmov\t%scan, %scanalign\n\t\tnegl\t%scanalignd\n\t\tandl\t$3, %scanalignd\n\n/* IPos limit = s->strstart > (IPos)MAX_DIST(s) ?\t\t\t*/\n/*     s->strstart - (IPos)MAX_DIST(s) : NIL;\t\t\t\t*/\n\n\t\tmovl\tdsWSize, %eax\n\t\tsubl\t$MIN_LOOKAHEAD, %eax\n\t\txorl\t%ecx, %ecx\n\t\tsubl\t%eax, %limitd\n\t\tcmovng\t%ecx, %limitd\n\n/* int best_len = s->prev_length;\t\t\t\t\t*/\n\n\t\tmovl\tdsPrevLen, %bestlend\n\n/* Store the sum of s->window + best_len in %windowbestlen locally, and in memory.\t*/\n\n\t\tlea\t(%window, %bestlen), %windowbestlen\n\t\tmov\t%windowbestlen, _windowbestlen\n\n/* register ush scan_start = *(ushf*)scan;\t\t\t\t*/\n/* register ush scan_end   = *(ushf*)(scan+best_len-1);\t\t\t*/\n/* Posf *prev = s->prev;\t\t\t\t\t\t*/\n\n\t\tmovzwl\t(%scan), %scanstart\n\t\tmovzwl\t-1(%scan, %bestlen), %scanend\n\t\tmov\tdsPrev, %prev\n\n/* Jump into the main loop.\t\t\t\t\t\t*/\n\n\t\tmovl\t%chainlenwmask, _chainlenwmask\n\t\tjmp\tLoopEntry\n\n.balign 16\n\n/* do {\n *     match = s->window + cur_match;\n *     if (*(ushf*)(match+best_len-1) != scan_end ||\n *         *(ushf*)match != scan_start) continue;\n *     [...]\n * } while ((cur_match = prev[cur_match & wmask]) > limit\n *          && --chain_length != 0);\n *\n * Here is the inner loop of the function. The function will spend the\n * majority of its time in this loop, and majority of that time will\n * be spent in the first ten instructions.\n */\nLookupLoop:\n\t\tandl\t%chainlenwmask, %curmatchd\n\t\tmovzwl\t(%prev, %curmatch, 2), %curmatchd\n\t\tcmpl\t%limitd, %curmatchd\n\t\tjbe\tLeaveNow\n\t\tsubl\t$0x00010000, %chainlenwmask\n\t\tjs\tLeaveNow\nLoopEntry:\tcmpw\t-1(%windowbestlen, %curmatch), %scanendw\n\t\tjne\tLookupLoop\n\t\tcmpw\t%scanstartw, (%window, %curmatch)\n\t\tjne\tLookupLoop\n\n/* Store the current value of chainlen.\t\t\t\t\t*/\n\t\tmovl\t%chainlenwmask, _chainlenwmask\n\n/* %scan is the string under scrutiny, and %prev to the string we\t*/\n/* are hoping to match it up with. In actuality, %esi and %edi are\t*/\n/* both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and %edx is\t*/\n/* initialized to -(MAX_MATCH_8 - scanalign).\t\t\t\t*/\n\n\t\tmov\t$(-MAX_MATCH_8), %rdx\n\t\tlea\t(%curmatch, %window), %windowbestlen\n\t\tlea\tMAX_MATCH_8(%windowbestlen, %scanalign), %windowbestlen\n\t\tlea\tMAX_MATCH_8(%scan, %scanalign), %prev\n\n/* the prefetching below makes very little difference... */\n\t\tprefetcht1\t(%windowbestlen, %rdx)\n\t\tprefetcht1\t(%prev, %rdx)\n\n/*\n * Test the strings for equality, 8 bytes at a time. At the end,\n * adjust %rdx so that it is offset to the exact byte that mismatched.\n *\n * It should be confessed that this loop usually does not represent\n * much of the total running time. Replacing it with a more\n * straightforward \"rep cmpsb\" would not drastically degrade\n * performance -- unrolling it, for example, makes no difference.\n */\n\n#undef USE_SSE\t/* works, but is 6-7% slower, than non-SSE... */\n\nLoopCmps:\n#ifdef USE_SSE\n\t\t/* Preload the SSE registers */\n\t\tmovdqu\t  (%windowbestlen, %rdx), %xmm1\n\t\tmovdqu\t  (%prev, %rdx), %xmm2\n\t\tpcmpeqb\t%xmm2, %xmm1\n\t\tmovdqu\t16(%windowbestlen, %rdx), %xmm3\n\t\tmovdqu\t16(%prev, %rdx), %xmm4\n\t\tpcmpeqb\t%xmm4, %xmm3\n\t\tmovdqu\t32(%windowbestlen, %rdx), %xmm5\n\t\tmovdqu\t32(%prev, %rdx), %xmm6\n\t\tpcmpeqb\t%xmm6, %xmm5\n\t\tmovdqu\t48(%windowbestlen, %rdx), %xmm7\n\t\tmovdqu\t48(%prev, %rdx), %xmm8\n\t\tpcmpeqb\t%xmm8, %xmm7\n\n\t\t/* Check the comparisions' results */\n\t\tpmovmskb %xmm1, %rax\n\t\tnotw\t%ax\n\t\tbsfw\t%ax, %ax\n\t\tjnz\tLeaveLoopCmps\n\t\t\n\t\t/* this is the only iteration of the loop with a possibility of having\n\t\t   incremented rdx by 0x108 (each loop iteration add 16*4 = 0x40 \n\t\t   and (0x40*4)+8=0x108 */\n\t\tadd\t$8, %rdx\n\t\tjz LenMaximum\n\t\tadd\t$8, %rdx\n\n\t\t\n\t\tpmovmskb %xmm3, %rax\n\t\tnotw\t%ax\n\t\tbsfw\t%ax, %ax\n\t\tjnz\tLeaveLoopCmps\n\t\t\n\t\t\n\t\tadd\t$16, %rdx\n\n\n\t\tpmovmskb %xmm5, %rax\n\t\tnotw\t%ax\n\t\tbsfw\t%ax, %ax\n\t\tjnz\tLeaveLoopCmps\n\t\t\n\t\tadd\t$16, %rdx\n\n\n\t\tpmovmskb %xmm7, %rax\n\t\tnotw\t%ax\n\t\tbsfw\t%ax, %ax\n\t\tjnz\tLeaveLoopCmps\n\t\t\n\t\tadd\t$16, %rdx\n\t\t\n\t\tjmp\tLoopCmps\nLeaveLoopCmps:\tadd\t%rax, %rdx\n#else\n\t\tmov\t(%windowbestlen, %rdx), %rax\n\t\txor\t(%prev, %rdx), %rax\n\t\tjnz\tLeaveLoopCmps\n\t\t\n\t\tmov\t8(%windowbestlen, %rdx), %rax\n\t\txor\t8(%prev, %rdx), %rax\n\t\tjnz\tLeaveLoopCmps8\n\n\t\tmov\t16(%windowbestlen, %rdx), %rax\n\t\txor\t16(%prev, %rdx), %rax\n\t\tjnz\tLeaveLoopCmps16\n\t\t\t\t\n\t\tadd\t$24, %rdx\n\t\tjnz\tLoopCmps\n\t\tjmp\tLenMaximum\n#\tif 0\n/*\n * This three-liner is tantalizingly simple, but bsf is a slow instruction,\n * and the complicated alternative down below is quite a bit faster. Sad...\n */\n\nLeaveLoopCmps:\tbsf\t%rax, %rax /* find the first non-zero bit */\n\t\tshrl\t$3, %eax /* divide by 8 to get the byte */\n\t\tadd\t%rax, %rdx\n#\telse\nLeaveLoopCmps16:\n\t\tadd\t$8, %rdx\nLeaveLoopCmps8:\n\t\tadd\t$8, %rdx\nLeaveLoopCmps:\ttestl   $0xFFFFFFFF, %eax /* Check the first 4 bytes */\n\t\tjnz     Check16\n\t\tadd     $4, %rdx\n\t\tshr     $32, %rax\nCheck16:        testw   $0xFFFF, %ax\n\t\tjnz     LenLower\n\t\tadd\t$2, %rdx\n\t\tshrl\t$16, %eax\nLenLower:\tsubb\t$1, %al\n\t\tadc\t$0, %rdx\n#\tendif\n#endif\n\n/* Calculate the length of the match. If it is longer than MAX_MATCH,\t*/\n/* then automatically accept it as the best possible match and leave.\t*/\n\n\t\tlea\t(%prev, %rdx), %rax\n\t\tsub\t%scan, %rax\n\t\tcmpl\t$MAX_MATCH, %eax\n\t\tjge\tLenMaximum\n\n/* If the length of the match is not longer than the best match we\t*/\n/* have so far, then forget it and return to the lookup loop.\t\t*/\n\n\t\tcmpl\t%bestlend, %eax\n\t\tjg\tLongerMatch\n\t\tmov\t_windowbestlen, %windowbestlen\n\t\tmov\tdsPrev, %prev\n\t\tmovl\t_chainlenwmask, %edx\n\t\tjmp\tLookupLoop\n\n/*         s->match_start = cur_match;\t\t\t\t\t*/\n/*         best_len = len;\t\t\t\t\t\t*/\n/*         if (len >= nice_match) break;\t\t\t\t*/\n/*         scan_end = *(ushf*)(scan+best_len-1);\t\t\t*/\n\nLongerMatch:\n\t\tmovl\t%eax, %bestlend\n\t\tmovl\t%curmatchd, dsMatchStart\n\t\tcmpl\t%nicematch, %eax\n\t\tjge\tLeaveNow\n\n\t\tlea\t(%window, %bestlen), %windowbestlen\n\t\tmov\t%windowbestlen, _windowbestlen\n\n\t\tmovzwl\t-1(%scan, %rax), %scanend\n\t\tmov\tdsPrev, %prev\n\t\tmovl\t_chainlenwmask, %chainlenwmask\n\t\tjmp\tLookupLoop\n\n/* Accept the current string, with the maximum possible length.\t\t*/\n\nLenMaximum:\n\t\tmovl\t$MAX_MATCH, %bestlend\n\t\tmovl\t%curmatchd, dsMatchStart\n\n/* if ((uInt)best_len <= s->lookahead) return (uInt)best_len;\t\t*/\n/* return s->lookahead;\t\t\t\t\t\t\t*/\n\nLeaveNow:\n\t\tmovl\tdsLookahead, %eax\n\t\tcmpl\t%eax, %bestlend\n\t\tcmovngl\t%bestlend, %eax\nLookaheadRet:\n\n/* Restore the registers and return from whence we came.\t\t\t*/\n\n\tmov\tsave_rsi, %rsi\n\tmov\tsave_rbx, %rbx\n\tmov\tsave_r12, %r12\n\tmov\tsave_r13, %r13\n\tmov\tsave_r14, %r14\n\tmov\tsave_r15, %r15\n\n\tret\n\nmatch_init:\tret\n"
  },
  {
    "path": "external/zlib/contrib/asm686/README.686",
    "content": "This is a patched version of zlib, modified to use\nPentium-Pro-optimized assembly code in the deflation algorithm. The\nfiles changed/added by this patch are:\n\nREADME.686\nmatch.S\n\nThe speedup that this patch provides varies, depending on whether the\ncompiler used to build the original version of zlib falls afoul of the\nPPro's speed traps. My own tests show a speedup of around 10-20% at\nthe default compression level, and 20-30% using -9, against a version\ncompiled using gcc 2.7.2.3. Your mileage may vary.\n\nNote that this code has been tailored for the PPro/PII in particular,\nand will not perform particuarly well on a Pentium.\n\nIf you are using an assembler other than GNU as, you will have to\ntranslate match.S to use your assembler's syntax. (Have fun.)\n\nBrian Raiter\nbreadbox@muppetlabs.com\nApril, 1998\n\n\nAdded for zlib 1.1.3:\n\nThe patches come from\nhttp://www.muppetlabs.com/~breadbox/software/assembly.html\n\nTo compile zlib with this asm file, copy match.S to the zlib directory\nthen do:\n\nCFLAGS=\"-O3 -DASMV\" ./configure\nmake OBJA=match.o\n\n\nUpdate:\n\nI've been ignoring these assembly routines for years, believing that\ngcc's generated code had caught up with it sometime around gcc 2.95\nand the major rearchitecting of the Pentium 4. However, I recently\nlearned that, despite what I believed, this code still has some life\nin it. On the Pentium 4 and AMD64 chips, it continues to run about 8%\nfaster than the code produced by gcc 4.1.\n\nIn acknowledgement of its continuing usefulness, I've altered the\nlicense to match that of the rest of zlib. Share and Enjoy!\n\nBrian Raiter\nbreadbox@muppetlabs.com\nApril, 2007\n"
  },
  {
    "path": "external/zlib/contrib/asm686/match.S",
    "content": "/* match.S -- x86 assembly version of the zlib longest_match() function.\n * Optimized for the Intel 686 chips (PPro and later).\n *\n * Copyright (C) 1998, 2007 Brian Raiter <breadbox@muppetlabs.com>\n *\n * This software is provided 'as-is', without any express or implied\n * warranty.  In no event will the author be held liable for any damages\n * arising from the use of this software.\n *\n * Permission is granted to anyone to use this software for any purpose,\n * including commercial applications, and to alter it and redistribute it\n * freely, subject to the following restrictions:\n *\n * 1. The origin of this software must not be misrepresented; you must not\n *    claim that you wrote the original software. If you use this software\n *    in a product, an acknowledgment in the product documentation would be\n *    appreciated but is not required.\n * 2. Altered source versions must be plainly marked as such, and must not be\n *    misrepresented as being the original software.\n * 3. This notice may not be removed or altered from any source distribution.\n */\n\n#ifndef NO_UNDERLINE\n#define\tmatch_init\t_match_init\n#define\tlongest_match\t_longest_match\n#endif\n\n#define\tMAX_MATCH\t(258)\n#define\tMIN_MATCH\t(3)\n#define\tMIN_LOOKAHEAD\t(MAX_MATCH + MIN_MATCH + 1)\n#define\tMAX_MATCH_8\t((MAX_MATCH + 7) & ~7)\n\n/* stack frame offsets */\n\n#define\tchainlenwmask\t\t0\t/* high word: current chain len\t*/\n\t\t\t\t\t/* low word: s->wmask\t\t*/\n#define\twindow\t\t\t4\t/* local copy of s->window\t*/\n#define\twindowbestlen\t\t8\t/* s->window + bestlen\t\t*/\n#define\tscanstart\t\t16\t/* first two bytes of string\t*/\n#define\tscanend\t\t\t12\t/* last two bytes of string\t*/\n#define\tscanalign\t\t20\t/* dword-misalignment of string\t*/\n#define\tnicematch\t\t24\t/* a good enough match size\t*/\n#define\tbestlen\t\t\t28\t/* size of best match so far\t*/\n#define\tscan\t\t\t32\t/* ptr to string wanting match\t*/\n\n#define\tLocalVarsSize\t\t(36)\n/*\tsaved ebx\t\t36 */\n/*\tsaved edi\t\t40 */\n/*\tsaved esi\t\t44 */\n/*\tsaved ebp\t\t48 */\n/*\treturn address\t\t52 */\n#define\tdeflatestate\t\t56\t/* the function arguments\t*/\n#define\tcurmatch\t\t60\n\n/* All the +zlib1222add offsets are due to the addition of fields\n *  in zlib in the deflate_state structure since the asm code was first written\n * (if you compile with zlib 1.0.4 or older, use \"zlib1222add equ (-4)\").\n * (if you compile with zlib between 1.0.5 and 1.2.2.1, use \"zlib1222add equ 0\").\n * if you compile with zlib 1.2.2.2 or later , use \"zlib1222add equ 8\").\n */\n\n#define zlib1222add\t\t(8)\n\n#define\tdsWSize\t\t\t(36+zlib1222add)\n#define\tdsWMask\t\t\t(44+zlib1222add)\n#define\tdsWindow\t\t(48+zlib1222add)\n#define\tdsPrev\t\t\t(56+zlib1222add)\n#define\tdsMatchLen\t\t(88+zlib1222add)\n#define\tdsPrevMatch\t\t(92+zlib1222add)\n#define\tdsStrStart\t\t(100+zlib1222add)\n#define\tdsMatchStart\t\t(104+zlib1222add)\n#define\tdsLookahead\t\t(108+zlib1222add)\n#define\tdsPrevLen\t\t(112+zlib1222add)\n#define\tdsMaxChainLen\t\t(116+zlib1222add)\n#define\tdsGoodMatch\t\t(132+zlib1222add)\n#define\tdsNiceMatch\t\t(136+zlib1222add)\n\n\n.file \"match.S\"\n\n.globl\tmatch_init, longest_match\n\n.text\n\n/* uInt longest_match(deflate_state *deflatestate, IPos curmatch) */\n\nlongest_match:\n\n/* Save registers that the compiler may be using, and adjust %esp to\t*/\n/* make room for our stack frame.\t\t\t\t\t*/\n\n\t\tpushl\t%ebp\n\t\tpushl\t%edi\n\t\tpushl\t%esi\n\t\tpushl\t%ebx\n\t\tsubl\t$LocalVarsSize, %esp\n\n/* Retrieve the function arguments. %ecx will hold cur_match\t\t*/\n/* throughout the entire function. %edx will hold the pointer to the\t*/\n/* deflate_state structure during the function's setup (before\t\t*/\n/* entering the main loop).\t\t\t\t\t\t*/\n\n\t\tmovl\tdeflatestate(%esp), %edx\n\t\tmovl\tcurmatch(%esp), %ecx\n\n/* uInt wmask = s->w_mask;\t\t\t\t\t\t*/\n/* unsigned chain_length = s->max_chain_length;\t\t\t\t*/\n/* if (s->prev_length >= s->good_match) {\t\t\t\t*/\n/*     chain_length >>= 2;\t\t\t\t\t\t*/\n/* }\t\t\t\t\t\t\t\t\t*/\n\n\t\tmovl\tdsPrevLen(%edx), %eax\n\t\tmovl\tdsGoodMatch(%edx), %ebx\n\t\tcmpl\t%ebx, %eax\n\t\tmovl\tdsWMask(%edx), %eax\n\t\tmovl\tdsMaxChainLen(%edx), %ebx\n\t\tjl\tLastMatchGood\n\t\tshrl\t$2, %ebx\nLastMatchGood:\n\n/* chainlen is decremented once beforehand so that the function can\t*/\n/* use the sign flag instead of the zero flag for the exit test.\t*/\n/* It is then shifted into the high word, to make room for the wmask\t*/\n/* value, which it will always accompany.\t\t\t\t*/\n\n\t\tdecl\t%ebx\n\t\tshll\t$16, %ebx\n\t\torl\t%eax, %ebx\n\t\tmovl\t%ebx, chainlenwmask(%esp)\n\n/* if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;\t*/\n\n\t\tmovl\tdsNiceMatch(%edx), %eax\n\t\tmovl\tdsLookahead(%edx), %ebx\n\t\tcmpl\t%eax, %ebx\n\t\tjl\tLookaheadLess\n\t\tmovl\t%eax, %ebx\nLookaheadLess:\tmovl\t%ebx, nicematch(%esp)\n\n/* register Bytef *scan = s->window + s->strstart;\t\t\t*/\n\n\t\tmovl\tdsWindow(%edx), %esi\n\t\tmovl\t%esi, window(%esp)\n\t\tmovl\tdsStrStart(%edx), %ebp\n\t\tlea\t(%esi,%ebp), %edi\n\t\tmovl\t%edi, scan(%esp)\n\n/* Determine how many bytes the scan ptr is off from being\t\t*/\n/* dword-aligned.\t\t\t\t\t\t\t*/\n\n\t\tmovl\t%edi, %eax\n\t\tnegl\t%eax\n\t\tandl\t$3, %eax\n\t\tmovl\t%eax, scanalign(%esp)\n\n/* IPos limit = s->strstart > (IPos)MAX_DIST(s) ?\t\t\t*/\n/*     s->strstart - (IPos)MAX_DIST(s) : NIL;\t\t\t\t*/\n\n\t\tmovl\tdsWSize(%edx), %eax\n\t\tsubl\t$MIN_LOOKAHEAD, %eax\n\t\tsubl\t%eax, %ebp\n\t\tjg\tLimitPositive\n\t\txorl\t%ebp, %ebp\nLimitPositive:\n\n/* int best_len = s->prev_length;\t\t\t\t\t*/\n\n\t\tmovl\tdsPrevLen(%edx), %eax\n\t\tmovl\t%eax, bestlen(%esp)\n\n/* Store the sum of s->window + best_len in %esi locally, and in %esi.\t*/\n\n\t\taddl\t%eax, %esi\n\t\tmovl\t%esi, windowbestlen(%esp)\n\n/* register ush scan_start = *(ushf*)scan;\t\t\t\t*/\n/* register ush scan_end   = *(ushf*)(scan+best_len-1);\t\t\t*/\n/* Posf *prev = s->prev;\t\t\t\t\t\t*/\n\n\t\tmovzwl\t(%edi), %ebx\n\t\tmovl\t%ebx, scanstart(%esp)\n\t\tmovzwl\t-1(%edi,%eax), %ebx\n\t\tmovl\t%ebx, scanend(%esp)\n\t\tmovl\tdsPrev(%edx), %edi\n\n/* Jump into the main loop.\t\t\t\t\t\t*/\n\n\t\tmovl\tchainlenwmask(%esp), %edx\n\t\tjmp\tLoopEntry\n\n.balign 16\n\n/* do {\n *     match = s->window + cur_match;\n *     if (*(ushf*)(match+best_len-1) != scan_end ||\n *         *(ushf*)match != scan_start) continue;\n *     [...]\n * } while ((cur_match = prev[cur_match & wmask]) > limit\n *          && --chain_length != 0);\n *\n * Here is the inner loop of the function. The function will spend the\n * majority of its time in this loop, and majority of that time will\n * be spent in the first ten instructions.\n *\n * Within this loop:\n * %ebx = scanend\n * %ecx = curmatch\n * %edx = chainlenwmask - i.e., ((chainlen << 16) | wmask)\n * %esi = windowbestlen - i.e., (window + bestlen)\n * %edi = prev\n * %ebp = limit\n */\nLookupLoop:\n\t\tandl\t%edx, %ecx\n\t\tmovzwl\t(%edi,%ecx,2), %ecx\n\t\tcmpl\t%ebp, %ecx\n\t\tjbe\tLeaveNow\n\t\tsubl\t$0x00010000, %edx\n\t\tjs\tLeaveNow\nLoopEntry:\tmovzwl\t-1(%esi,%ecx), %eax\n\t\tcmpl\t%ebx, %eax\n\t\tjnz\tLookupLoop\n\t\tmovl\twindow(%esp), %eax\n\t\tmovzwl\t(%eax,%ecx), %eax\n\t\tcmpl\tscanstart(%esp), %eax\n\t\tjnz\tLookupLoop\n\n/* Store the current value of chainlen.\t\t\t\t\t*/\n\n\t\tmovl\t%edx, chainlenwmask(%esp)\n\n/* Point %edi to the string under scrutiny, and %esi to the string we\t*/\n/* are hoping to match it up with. In actuality, %esi and %edi are\t*/\n/* both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and %edx is\t*/\n/* initialized to -(MAX_MATCH_8 - scanalign).\t\t\t\t*/\n\n\t\tmovl\twindow(%esp), %esi\n\t\tmovl\tscan(%esp), %edi\n\t\taddl\t%ecx, %esi\n\t\tmovl\tscanalign(%esp), %eax\n\t\tmovl\t$(-MAX_MATCH_8), %edx\n\t\tlea\tMAX_MATCH_8(%edi,%eax), %edi\n\t\tlea\tMAX_MATCH_8(%esi,%eax), %esi\n\n/* Test the strings for equality, 8 bytes at a time. At the end,\n * adjust %edx so that it is offset to the exact byte that mismatched.\n *\n * We already know at this point that the first three bytes of the\n * strings match each other, and they can be safely passed over before\n * starting the compare loop. So what this code does is skip over 0-3\n * bytes, as much as necessary in order to dword-align the %edi\n * pointer. (%esi will still be misaligned three times out of four.)\n *\n * It should be confessed that this loop usually does not represent\n * much of the total running time. Replacing it with a more\n * straightforward \"rep cmpsb\" would not drastically degrade\n * performance.\n */\nLoopCmps:\n\t\tmovl\t(%esi,%edx), %eax\n\t\txorl\t(%edi,%edx), %eax\n\t\tjnz\tLeaveLoopCmps\n\t\tmovl\t4(%esi,%edx), %eax\n\t\txorl\t4(%edi,%edx), %eax\n\t\tjnz\tLeaveLoopCmps4\n\t\taddl\t$8, %edx\n\t\tjnz\tLoopCmps\n\t\tjmp\tLenMaximum\nLeaveLoopCmps4:\taddl\t$4, %edx\nLeaveLoopCmps:\ttestl\t$0x0000FFFF, %eax\n\t\tjnz\tLenLower\n\t\taddl\t$2, %edx\n\t\tshrl\t$16, %eax\nLenLower:\tsubb\t$1, %al\n\t\tadcl\t$0, %edx\n\n/* Calculate the length of the match. If it is longer than MAX_MATCH,\t*/\n/* then automatically accept it as the best possible match and leave.\t*/\n\n\t\tlea\t(%edi,%edx), %eax\n\t\tmovl\tscan(%esp), %edi\n\t\tsubl\t%edi, %eax\n\t\tcmpl\t$MAX_MATCH, %eax\n\t\tjge\tLenMaximum\n\n/* If the length of the match is not longer than the best match we\t*/\n/* have so far, then forget it and return to the lookup loop.\t\t*/\n\n\t\tmovl\tdeflatestate(%esp), %edx\n\t\tmovl\tbestlen(%esp), %ebx\n\t\tcmpl\t%ebx, %eax\n\t\tjg\tLongerMatch\n\t\tmovl\twindowbestlen(%esp), %esi\n\t\tmovl\tdsPrev(%edx), %edi\n\t\tmovl\tscanend(%esp), %ebx\n\t\tmovl\tchainlenwmask(%esp), %edx\n\t\tjmp\tLookupLoop\n\n/*         s->match_start = cur_match;\t\t\t\t\t*/\n/*         best_len = len;\t\t\t\t\t\t*/\n/*         if (len >= nice_match) break;\t\t\t\t*/\n/*         scan_end = *(ushf*)(scan+best_len-1);\t\t\t*/\n\nLongerMatch:\tmovl\tnicematch(%esp), %ebx\n\t\tmovl\t%eax, bestlen(%esp)\n\t\tmovl\t%ecx, dsMatchStart(%edx)\n\t\tcmpl\t%ebx, %eax\n\t\tjge\tLeaveNow\n\t\tmovl\twindow(%esp), %esi\n\t\taddl\t%eax, %esi\n\t\tmovl\t%esi, windowbestlen(%esp)\n\t\tmovzwl\t-1(%edi,%eax), %ebx\n\t\tmovl\tdsPrev(%edx), %edi\n\t\tmovl\t%ebx, scanend(%esp)\n\t\tmovl\tchainlenwmask(%esp), %edx\n\t\tjmp\tLookupLoop\n\n/* Accept the current string, with the maximum possible length.\t\t*/\n\nLenMaximum:\tmovl\tdeflatestate(%esp), %edx\n\t\tmovl\t$MAX_MATCH, bestlen(%esp)\n\t\tmovl\t%ecx, dsMatchStart(%edx)\n\n/* if ((uInt)best_len <= s->lookahead) return (uInt)best_len;\t\t*/\n/* return s->lookahead;\t\t\t\t\t\t\t*/\n\nLeaveNow:\n\t\tmovl\tdeflatestate(%esp), %edx\n\t\tmovl\tbestlen(%esp), %ebx\n\t\tmovl\tdsLookahead(%edx), %eax\n\t\tcmpl\t%eax, %ebx\n\t\tjg\tLookaheadRet\n\t\tmovl\t%ebx, %eax\nLookaheadRet:\n\n/* Restore the stack and return from whence we came.\t\t\t*/\n\n\t\taddl\t$LocalVarsSize, %esp\n\t\tpopl\t%ebx\n\t\tpopl\t%esi\n\t\tpopl\t%edi\n\t\tpopl\t%ebp\nmatch_init:\tret\n"
  },
  {
    "path": "external/zlib/contrib/blast/Makefile",
    "content": "blast: blast.c blast.h\n\tcc -DTEST -o blast blast.c\n\ntest: blast\n\tblast < test.pk | cmp - test.txt\n\nclean:\n\trm -f blast blast.o\n"
  },
  {
    "path": "external/zlib/contrib/blast/README",
    "content": "Read blast.h for purpose and usage.\n\nMark Adler\nmadler@alumni.caltech.edu\n"
  },
  {
    "path": "external/zlib/contrib/blast/blast.c",
    "content": "/* blast.c\n * Copyright (C) 2003 Mark Adler\n * For conditions of distribution and use, see copyright notice in blast.h\n * version 1.1, 16 Feb 2003\n *\n * blast.c decompresses data compressed by the PKWare Compression Library.\n * This function provides functionality similar to the explode() function of\n * the PKWare library, hence the name \"blast\".\n *\n * This decompressor is based on the excellent format description provided by\n * Ben Rudiak-Gould in comp.compression on August 13, 2001.  Interestingly, the\n * example Ben provided in the post is incorrect.  The distance 110001 should\n * instead be 111000.  When corrected, the example byte stream becomes:\n *\n *    00 04 82 24 25 8f 80 7f\n *\n * which decompresses to \"AIAIAIAIAIAIA\" (without the quotes).\n */\n\n/*\n * Change history:\n *\n * 1.0  12 Feb 2003     - First version\n * 1.1  16 Feb 2003     - Fixed distance check for > 4 GB uncompressed data\n */\n\n#include <setjmp.h>             /* for setjmp(), longjmp(), and jmp_buf */\n#include \"blast.h\"              /* prototype for blast() */\n\n#define local static            /* for local function definitions */\n#define MAXBITS 13              /* maximum code length */\n#define MAXWIN 4096             /* maximum window size */\n\n/* input and output state */\nstruct state {\n    /* input state */\n    blast_in infun;             /* input function provided by user */\n    void *inhow;                /* opaque information passed to infun() */\n    unsigned char *in;          /* next input location */\n    unsigned left;              /* available input at in */\n    int bitbuf;                 /* bit buffer */\n    int bitcnt;                 /* number of bits in bit buffer */\n\n    /* input limit error return state for bits() and decode() */\n    jmp_buf env;\n\n    /* output state */\n    blast_out outfun;           /* output function provided by user */\n    void *outhow;               /* opaque information passed to outfun() */\n    unsigned next;              /* index of next write location in out[] */\n    int first;                  /* true to check distances (for first 4K) */\n    unsigned char out[MAXWIN];  /* output buffer and sliding window */\n};\n\n/*\n * Return need bits from the input stream.  This always leaves less than\n * eight bits in the buffer.  bits() works properly for need == 0.\n *\n * Format notes:\n *\n * - Bits are stored in bytes from the least significant bit to the most\n *   significant bit.  Therefore bits are dropped from the bottom of the bit\n *   buffer, using shift right, and new bytes are appended to the top of the\n *   bit buffer, using shift left.\n */\nlocal int bits(struct state *s, int need)\n{\n    int val;            /* bit accumulator */\n\n    /* load at least need bits into val */\n    val = s->bitbuf;\n    while (s->bitcnt < need) {\n        if (s->left == 0) {\n            s->left = s->infun(s->inhow, &(s->in));\n            if (s->left == 0) longjmp(s->env, 1);       /* out of input */\n        }\n        val |= (int)(*(s->in)++) << s->bitcnt;          /* load eight bits */\n        s->left--;\n        s->bitcnt += 8;\n    }\n\n    /* drop need bits and update buffer, always zero to seven bits left */\n    s->bitbuf = val >> need;\n    s->bitcnt -= need;\n\n    /* return need bits, zeroing the bits above that */\n    return val & ((1 << need) - 1);\n}\n\n/*\n * Huffman code decoding tables.  count[1..MAXBITS] is the number of symbols of\n * each length, which for a canonical code are stepped through in order.\n * symbol[] are the symbol values in canonical order, where the number of\n * entries is the sum of the counts in count[].  The decoding process can be\n * seen in the function decode() below.\n */\nstruct huffman {\n    short *count;       /* number of symbols of each length */\n    short *symbol;      /* canonically ordered symbols */\n};\n\n/*\n * Decode a code from the stream s using huffman table h.  Return the symbol or\n * a negative value if there is an error.  If all of the lengths are zero, i.e.\n * an empty code, or if the code is incomplete and an invalid code is received,\n * then -9 is returned after reading MAXBITS bits.\n *\n * Format notes:\n *\n * - The codes as stored in the compressed data are bit-reversed relative to\n *   a simple integer ordering of codes of the same lengths.  Hence below the\n *   bits are pulled from the compressed data one at a time and used to\n *   build the code value reversed from what is in the stream in order to\n *   permit simple integer comparisons for decoding.\n *\n * - The first code for the shortest length is all ones.  Subsequent codes of\n *   the same length are simply integer decrements of the previous code.  When\n *   moving up a length, a one bit is appended to the code.  For a complete\n *   code, the last code of the longest length will be all zeros.  To support\n *   this ordering, the bits pulled during decoding are inverted to apply the\n *   more \"natural\" ordering starting with all zeros and incrementing.\n */\nlocal int decode(struct state *s, struct huffman *h)\n{\n    int len;            /* current number of bits in code */\n    int code;           /* len bits being decoded */\n    int first;          /* first code of length len */\n    int count;          /* number of codes of length len */\n    int index;          /* index of first code of length len in symbol table */\n    int bitbuf;         /* bits from stream */\n    int left;           /* bits left in next or left to process */\n    short *next;        /* next number of codes */\n\n    bitbuf = s->bitbuf;\n    left = s->bitcnt;\n    code = first = index = 0;\n    len = 1;\n    next = h->count + 1;\n    while (1) {\n        while (left--) {\n            code |= (bitbuf & 1) ^ 1;   /* invert code */\n            bitbuf >>= 1;\n            count = *next++;\n            if (code < first + count) { /* if length len, return symbol */\n                s->bitbuf = bitbuf;\n                s->bitcnt = (s->bitcnt - len) & 7;\n                return h->symbol[index + (code - first)];\n            }\n            index += count;             /* else update for next length */\n            first += count;\n            first <<= 1;\n            code <<= 1;\n            len++;\n        }\n        left = (MAXBITS+1) - len;\n        if (left == 0) break;\n        if (s->left == 0) {\n            s->left = s->infun(s->inhow, &(s->in));\n            if (s->left == 0) longjmp(s->env, 1);       /* out of input */\n        }\n        bitbuf = *(s->in)++;\n        s->left--;\n        if (left > 8) left = 8;\n    }\n    return -9;                          /* ran out of codes */\n}\n\n/*\n * Given a list of repeated code lengths rep[0..n-1], where each byte is a\n * count (high four bits + 1) and a code length (low four bits), generate the\n * list of code lengths.  This compaction reduces the size of the object code.\n * Then given the list of code lengths length[0..n-1] representing a canonical\n * Huffman code for n symbols, construct the tables required to decode those\n * codes.  Those tables are the number of codes of each length, and the symbols\n * sorted by length, retaining their original order within each length.  The\n * return value is zero for a complete code set, negative for an over-\n * subscribed code set, and positive for an incomplete code set.  The tables\n * can be used if the return value is zero or positive, but they cannot be used\n * if the return value is negative.  If the return value is zero, it is not\n * possible for decode() using that table to return an error--any stream of\n * enough bits will resolve to a symbol.  If the return value is positive, then\n * it is possible for decode() using that table to return an error for received\n * codes past the end of the incomplete lengths.\n */\nlocal int construct(struct huffman *h, const unsigned char *rep, int n)\n{\n    int symbol;         /* current symbol when stepping through length[] */\n    int len;            /* current length when stepping through h->count[] */\n    int left;           /* number of possible codes left of current length */\n    short offs[MAXBITS+1];      /* offsets in symbol table for each length */\n    short length[256];  /* code lengths */\n\n    /* convert compact repeat counts into symbol bit length list */\n    symbol = 0;\n    do {\n        len = *rep++;\n        left = (len >> 4) + 1;\n        len &= 15;\n        do {\n            length[symbol++] = len;\n        } while (--left);\n    } while (--n);\n    n = symbol;\n\n    /* count number of codes of each length */\n    for (len = 0; len <= MAXBITS; len++)\n        h->count[len] = 0;\n    for (symbol = 0; symbol < n; symbol++)\n        (h->count[length[symbol]])++;   /* assumes lengths are within bounds */\n    if (h->count[0] == n)               /* no codes! */\n        return 0;                       /* complete, but decode() will fail */\n\n    /* check for an over-subscribed or incomplete set of lengths */\n    left = 1;                           /* one possible code of zero length */\n    for (len = 1; len <= MAXBITS; len++) {\n        left <<= 1;                     /* one more bit, double codes left */\n        left -= h->count[len];          /* deduct count from possible codes */\n        if (left < 0) return left;      /* over-subscribed--return negative */\n    }                                   /* left > 0 means incomplete */\n\n    /* generate offsets into symbol table for each length for sorting */\n    offs[1] = 0;\n    for (len = 1; len < MAXBITS; len++)\n        offs[len + 1] = offs[len] + h->count[len];\n\n    /*\n     * put symbols in table sorted by length, by symbol order within each\n     * length\n     */\n    for (symbol = 0; symbol < n; symbol++)\n        if (length[symbol] != 0)\n            h->symbol[offs[length[symbol]]++] = symbol;\n\n    /* return zero for complete set, positive for incomplete set */\n    return left;\n}\n\n/*\n * Decode PKWare Compression Library stream.\n *\n * Format notes:\n *\n * - First byte is 0 if literals are uncoded or 1 if they are coded.  Second\n *   byte is 4, 5, or 6 for the number of extra bits in the distance code.\n *   This is the base-2 logarithm of the dictionary size minus six.\n *\n * - Compressed data is a combination of literals and length/distance pairs\n *   terminated by an end code.  Literals are either Huffman coded or\n *   uncoded bytes.  A length/distance pair is a coded length followed by a\n *   coded distance to represent a string that occurs earlier in the\n *   uncompressed data that occurs again at the current location.\n *\n * - A bit preceding a literal or length/distance pair indicates which comes\n *   next, 0 for literals, 1 for length/distance.\n *\n * - If literals are uncoded, then the next eight bits are the literal, in the\n *   normal bit order in th stream, i.e. no bit-reversal is needed. Similarly,\n *   no bit reversal is needed for either the length extra bits or the distance\n *   extra bits.\n *\n * - Literal bytes are simply written to the output.  A length/distance pair is\n *   an instruction to copy previously uncompressed bytes to the output.  The\n *   copy is from distance bytes back in the output stream, copying for length\n *   bytes.\n *\n * - Distances pointing before the beginning of the output data are not\n *   permitted.\n *\n * - Overlapped copies, where the length is greater than the distance, are\n *   allowed and common.  For example, a distance of one and a length of 518\n *   simply copies the last byte 518 times.  A distance of four and a length of\n *   twelve copies the last four bytes three times.  A simple forward copy\n *   ignoring whether the length is greater than the distance or not implements\n *   this correctly.\n */\nlocal int decomp(struct state *s)\n{\n    int lit;            /* true if literals are coded */\n    int dict;           /* log2(dictionary size) - 6 */\n    int symbol;         /* decoded symbol, extra bits for distance */\n    int len;            /* length for copy */\n    int dist;           /* distance for copy */\n    int copy;           /* copy counter */\n    unsigned char *from, *to;   /* copy pointers */\n    static int virgin = 1;                              /* build tables once */\n    static short litcnt[MAXBITS+1], litsym[256];        /* litcode memory */\n    static short lencnt[MAXBITS+1], lensym[16];         /* lencode memory */\n    static short distcnt[MAXBITS+1], distsym[64];       /* distcode memory */\n    static struct huffman litcode = {litcnt, litsym};   /* length code */\n    static struct huffman lencode = {lencnt, lensym};   /* length code */\n    static struct huffman distcode = {distcnt, distsym};/* distance code */\n        /* bit lengths of literal codes */\n    static const unsigned char litlen[] = {\n        11, 124, 8, 7, 28, 7, 188, 13, 76, 4, 10, 8, 12, 10, 12, 10, 8, 23, 8,\n        9, 7, 6, 7, 8, 7, 6, 55, 8, 23, 24, 12, 11, 7, 9, 11, 12, 6, 7, 22, 5,\n        7, 24, 6, 11, 9, 6, 7, 22, 7, 11, 38, 7, 9, 8, 25, 11, 8, 11, 9, 12,\n        8, 12, 5, 38, 5, 38, 5, 11, 7, 5, 6, 21, 6, 10, 53, 8, 7, 24, 10, 27,\n        44, 253, 253, 253, 252, 252, 252, 13, 12, 45, 12, 45, 12, 61, 12, 45,\n        44, 173};\n        /* bit lengths of length codes 0..15 */\n    static const unsigned char lenlen[] = {2, 35, 36, 53, 38, 23};\n        /* bit lengths of distance codes 0..63 */\n    static const unsigned char distlen[] = {2, 20, 53, 230, 247, 151, 248};\n    static const short base[16] = {     /* base for length codes */\n        3, 2, 4, 5, 6, 7, 8, 9, 10, 12, 16, 24, 40, 72, 136, 264};\n    static const char extra[16] = {     /* extra bits for length codes */\n        0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8};\n\n    /* set up decoding tables (once--might not be thread-safe) */\n    if (virgin) {\n        construct(&litcode, litlen, sizeof(litlen));\n        construct(&lencode, lenlen, sizeof(lenlen));\n        construct(&distcode, distlen, sizeof(distlen));\n        virgin = 0;\n    }\n\n    /* read header */\n    lit = bits(s, 8);\n    if (lit > 1) return -1;\n    dict = bits(s, 8);\n    if (dict < 4 || dict > 6) return -2;\n\n    /* decode literals and length/distance pairs */\n    do {\n        if (bits(s, 1)) {\n            /* get length */\n            symbol = decode(s, &lencode);\n            len = base[symbol] + bits(s, extra[symbol]);\n            if (len == 519) break;              /* end code */\n\n            /* get distance */\n            symbol = len == 2 ? 2 : dict;\n            dist = decode(s, &distcode) << symbol;\n            dist += bits(s, symbol);\n            dist++;\n            if (s->first && dist > s->next)\n                return -3;              /* distance too far back */\n\n            /* copy length bytes from distance bytes back */\n            do {\n                to = s->out + s->next;\n                from = to - dist;\n                copy = MAXWIN;\n                if (s->next < dist) {\n                    from += copy;\n                    copy = dist;\n                }\n                copy -= s->next;\n                if (copy > len) copy = len;\n                len -= copy;\n                s->next += copy;\n                do {\n                    *to++ = *from++;\n                } while (--copy);\n                if (s->next == MAXWIN) {\n                    if (s->outfun(s->outhow, s->out, s->next)) return 1;\n                    s->next = 0;\n                    s->first = 0;\n                }\n            } while (len != 0);\n        }\n        else {\n            /* get literal and write it */\n            symbol = lit ? decode(s, &litcode) : bits(s, 8);\n            s->out[s->next++] = symbol;\n            if (s->next == MAXWIN) {\n                if (s->outfun(s->outhow, s->out, s->next)) return 1;\n                s->next = 0;\n                s->first = 0;\n            }\n        }\n    } while (1);\n    return 0;\n}\n\n/* See comments in blast.h */\nint blast(blast_in infun, void *inhow, blast_out outfun, void *outhow)\n{\n    struct state s;             /* input/output state */\n    int err;                    /* return value */\n\n    /* initialize input state */\n    s.infun = infun;\n    s.inhow = inhow;\n    s.left = 0;\n    s.bitbuf = 0;\n    s.bitcnt = 0;\n\n    /* initialize output state */\n    s.outfun = outfun;\n    s.outhow = outhow;\n    s.next = 0;\n    s.first = 1;\n\n    /* return if bits() or decode() tries to read past available input */\n    if (setjmp(s.env) != 0)             /* if came back here via longjmp(), */\n        err = 2;                        /*  then skip decomp(), return error */\n    else\n        err = decomp(&s);               /* decompress */\n\n    /* write any leftover output and update the error code if needed */\n    if (err != 1 && s.next && s.outfun(s.outhow, s.out, s.next) && err == 0)\n        err = 1;\n    return err;\n}\n\n#ifdef TEST\n/* Example of how to use blast() */\n#include <stdio.h>\n#include <stdlib.h>\n\n#define CHUNK 16384\n\nlocal unsigned inf(void *how, unsigned char **buf)\n{\n    static unsigned char hold[CHUNK];\n\n    *buf = hold;\n    return fread(hold, 1, CHUNK, (FILE *)how);\n}\n\nlocal int outf(void *how, unsigned char *buf, unsigned len)\n{\n    return fwrite(buf, 1, len, (FILE *)how) != len;\n}\n\n/* Decompress a PKWare Compression Library stream from stdin to stdout */\nint main(void)\n{\n    int ret, n;\n\n    /* decompress to stdout */\n    ret = blast(inf, stdin, outf, stdout);\n    if (ret != 0) fprintf(stderr, \"blast error: %d\\n\", ret);\n\n    /* see if there are any leftover bytes */\n    n = 0;\n    while (getchar() != EOF) n++;\n    if (n) fprintf(stderr, \"blast warning: %d unused bytes of input\\n\", n);\n\n    /* return blast() error code */\n    return ret;\n}\n#endif\n"
  },
  {
    "path": "external/zlib/contrib/blast/blast.h",
    "content": "/* blast.h -- interface for blast.c\n  Copyright (C) 2003 Mark Adler\n  version 1.1, 16 Feb 2003\n\n  This software is provided 'as-is', without any express or implied\n  warranty.  In no event will the author be held liable for any damages\n  arising from the use of this software.\n\n  Permission is granted to anyone to use this software for any purpose,\n  including commercial applications, and to alter it and redistribute it\n  freely, subject to the following restrictions:\n\n  1. The origin of this software must not be misrepresented; you must not\n     claim that you wrote the original software. If you use this software\n     in a product, an acknowledgment in the product documentation would be\n     appreciated but is not required.\n  2. Altered source versions must be plainly marked as such, and must not be\n     misrepresented as being the original software.\n  3. This notice may not be removed or altered from any source distribution.\n\n  Mark Adler    madler@alumni.caltech.edu\n */\n\n\n/*\n * blast() decompresses the PKWare Data Compression Library (DCL) compressed\n * format.  It provides the same functionality as the explode() function in\n * that library.  (Note: PKWare overused the \"implode\" verb, and the format\n * used by their library implode() function is completely different and\n * incompatible with the implode compression method supported by PKZIP.)\n */\n\n\ntypedef unsigned (*blast_in)(void *how, unsigned char **buf);\ntypedef int (*blast_out)(void *how, unsigned char *buf, unsigned len);\n/* Definitions for input/output functions passed to blast().  See below for\n * what the provided functions need to do.\n */\n\n\nint blast(blast_in infun, void *inhow, blast_out outfun, void *outhow);\n/* Decompress input to output using the provided infun() and outfun() calls.\n * On success, the return value of blast() is zero.  If there is an error in\n * the source data, i.e. it is not in the proper format, then a negative value\n * is returned.  If there is not enough input available or there is not enough\n * output space, then a positive error is returned.\n *\n * The input function is invoked: len = infun(how, &buf), where buf is set by\n * infun() to point to the input buffer, and infun() returns the number of\n * available bytes there.  If infun() returns zero, then blast() returns with\n * an input error.  (blast() only asks for input if it needs it.)  inhow is for\n * use by the application to pass an input descriptor to infun(), if desired.\n *\n * The output function is invoked: err = outfun(how, buf, len), where the bytes\n * to be written are buf[0..len-1].  If err is not zero, then blast() returns\n * with an output error.  outfun() is always called with len <= 4096.  outhow\n * is for use by the application to pass an output descriptor to outfun(), if\n * desired.\n *\n * The return codes are:\n *\n *   2:  ran out of input before completing decompression\n *   1:  output error before completing decompression\n *   0:  successful decompression\n *  -1:  literal flag not zero or one\n *  -2:  dictionary size not in 4..6\n *  -3:  distance is too far back\n *\n * At the bottom of blast.c is an example program that uses blast() that can be\n * compiled to produce a command-line decompression filter by defining TEST.\n */\n"
  },
  {
    "path": "external/zlib/contrib/blast/test.txt",
    "content": "AIAIAIAIAIAIA"
  },
  {
    "path": "external/zlib/contrib/delphi/ZLib.pas",
    "content": "{*******************************************************}\n{                                                       }\n{       Borland Delphi Supplemental Components          }\n{       ZLIB Data Compression Interface Unit            }\n{                                                       }\n{       Copyright (c) 1997,99 Borland Corporation       }\n{                                                       }\n{*******************************************************}\n\n{ Updated for zlib 1.2.x by Cosmin Truta <cosmint@cs.ubbcluj.ro> }\n\nunit ZLib;\n\ninterface\n\nuses SysUtils, Classes;\n\ntype\n  TAlloc = function (AppData: Pointer; Items, Size: Integer): Pointer; cdecl;\n  TFree = procedure (AppData, Block: Pointer); cdecl;\n\n  // Internal structure.  Ignore.\n  TZStreamRec = packed record\n    next_in: PChar;       // next input byte\n    avail_in: Integer;    // number of bytes available at next_in\n    total_in: Longint;    // total nb of input bytes read so far\n\n    next_out: PChar;      // next output byte should be put here\n    avail_out: Integer;   // remaining free space at next_out\n    total_out: Longint;   // total nb of bytes output so far\n\n    msg: PChar;           // last error message, NULL if no error\n    internal: Pointer;    // not visible by applications\n\n    zalloc: TAlloc;       // used to allocate the internal state\n    zfree: TFree;         // used to free the internal state\n    AppData: Pointer;     // private data object passed to zalloc and zfree\n\n    data_type: Integer;   // best guess about the data type: ascii or binary\n    adler: Longint;       // adler32 value of the uncompressed data\n    reserved: Longint;    // reserved for future use\n  end;\n\n  // Abstract ancestor class\n  TCustomZlibStream = class(TStream)\n  private\n    FStrm: TStream;\n    FStrmPos: Integer;\n    FOnProgress: TNotifyEvent;\n    FZRec: TZStreamRec;\n    FBuffer: array [Word] of Char;\n  protected\n    procedure Progress(Sender: TObject); dynamic;\n    property OnProgress: TNotifyEvent read FOnProgress write FOnProgress;\n    constructor Create(Strm: TStream);\n  end;\n\n{ TCompressionStream compresses data on the fly as data is written to it, and\n  stores the compressed data to another stream.\n\n  TCompressionStream is write-only and strictly sequential. Reading from the\n  stream will raise an exception. Using Seek to move the stream pointer\n  will raise an exception.\n\n  Output data is cached internally, written to the output stream only when\n  the internal output buffer is full.  All pending output data is flushed\n  when the stream is destroyed.\n\n  The Position property returns the number of uncompressed bytes of\n  data that have been written to the stream so far.\n\n  CompressionRate returns the on-the-fly percentage by which the original\n  data has been compressed:  (1 - (CompressedBytes / UncompressedBytes)) * 100\n  If raw data size = 100 and compressed data size = 25, the CompressionRate\n  is 75%\n\n  The OnProgress event is called each time the output buffer is filled and\n  written to the output stream.  This is useful for updating a progress\n  indicator when you are writing a large chunk of data to the compression\n  stream in a single call.}\n\n\n  TCompressionLevel = (clNone, clFastest, clDefault, clMax);\n\n  TCompressionStream = class(TCustomZlibStream)\n  private\n    function GetCompressionRate: Single;\n  public\n    constructor Create(CompressionLevel: TCompressionLevel; Dest: TStream);\n    destructor Destroy; override;\n    function Read(var Buffer; Count: Longint): Longint; override;\n    function Write(const Buffer; Count: Longint): Longint; override;\n    function Seek(Offset: Longint; Origin: Word): Longint; override;\n    property CompressionRate: Single read GetCompressionRate;\n    property OnProgress;\n  end;\n\n{ TDecompressionStream decompresses data on the fly as data is read from it.\n\n  Compressed data comes from a separate source stream.  TDecompressionStream\n  is read-only and unidirectional; you can seek forward in the stream, but not\n  backwards.  The special case of setting the stream position to zero is\n  allowed.  Seeking forward decompresses data until the requested position in\n  the uncompressed data has been reached.  Seeking backwards, seeking relative\n  to the end of the stream, requesting the size of the stream, and writing to\n  the stream will raise an exception.\n\n  The Position property returns the number of bytes of uncompressed data that\n  have been read from the stream so far.\n\n  The OnProgress event is called each time the internal input buffer of\n  compressed data is exhausted and the next block is read from the input stream.\n  This is useful for updating a progress indicator when you are reading a\n  large chunk of data from the decompression stream in a single call.}\n\n  TDecompressionStream = class(TCustomZlibStream)\n  public\n    constructor Create(Source: TStream);\n    destructor Destroy; override;\n    function Read(var Buffer; Count: Longint): Longint; override;\n    function Write(const Buffer; Count: Longint): Longint; override;\n    function Seek(Offset: Longint; Origin: Word): Longint; override;\n    property OnProgress;\n  end;\n\n\n\n{ CompressBuf compresses data, buffer to buffer, in one call.\n   In: InBuf = ptr to compressed data\n       InBytes = number of bytes in InBuf\n  Out: OutBuf = ptr to newly allocated buffer containing decompressed data\n       OutBytes = number of bytes in OutBuf   }\nprocedure CompressBuf(const InBuf: Pointer; InBytes: Integer;\n                      out OutBuf: Pointer; out OutBytes: Integer);\n\n\n{ DecompressBuf decompresses data, buffer to buffer, in one call.\n   In: InBuf = ptr to compressed data\n       InBytes = number of bytes in InBuf\n       OutEstimate = zero, or est. size of the decompressed data\n  Out: OutBuf = ptr to newly allocated buffer containing decompressed data\n       OutBytes = number of bytes in OutBuf   }\nprocedure DecompressBuf(const InBuf: Pointer; InBytes: Integer;\n OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer);\n\n{ DecompressToUserBuf decompresses data, buffer to buffer, in one call.\n   In: InBuf = ptr to compressed data\n       InBytes = number of bytes in InBuf\n  Out: OutBuf = ptr to user-allocated buffer to contain decompressed data\n       BufSize = number of bytes in OutBuf   }\nprocedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer;\n  const OutBuf: Pointer; BufSize: Integer);\n\nconst\n  zlib_version = '1.2.5';\n\ntype\n  EZlibError = class(Exception);\n  ECompressionError = class(EZlibError);\n  EDecompressionError = class(EZlibError);\n\nimplementation\n\nuses ZLibConst;\n\nconst\n  Z_NO_FLUSH      = 0;\n  Z_PARTIAL_FLUSH = 1;\n  Z_SYNC_FLUSH    = 2;\n  Z_FULL_FLUSH    = 3;\n  Z_FINISH        = 4;\n\n  Z_OK            = 0;\n  Z_STREAM_END    = 1;\n  Z_NEED_DICT     = 2;\n  Z_ERRNO         = (-1);\n  Z_STREAM_ERROR  = (-2);\n  Z_DATA_ERROR    = (-3);\n  Z_MEM_ERROR     = (-4);\n  Z_BUF_ERROR     = (-5);\n  Z_VERSION_ERROR = (-6);\n\n  Z_NO_COMPRESSION       =   0;\n  Z_BEST_SPEED           =   1;\n  Z_BEST_COMPRESSION     =   9;\n  Z_DEFAULT_COMPRESSION  = (-1);\n\n  Z_FILTERED            = 1;\n  Z_HUFFMAN_ONLY        = 2;\n  Z_RLE                 = 3;\n  Z_DEFAULT_STRATEGY    = 0;\n\n  Z_BINARY   = 0;\n  Z_ASCII    = 1;\n  Z_UNKNOWN  = 2;\n\n  Z_DEFLATED = 8;\n\n\n{$L adler32.obj}\n{$L compress.obj}\n{$L crc32.obj}\n{$L deflate.obj}\n{$L infback.obj}\n{$L inffast.obj}\n{$L inflate.obj}\n{$L inftrees.obj}\n{$L trees.obj}\n{$L uncompr.obj}\n{$L zutil.obj}\n\nprocedure adler32; external;\nprocedure compressBound; external;\nprocedure crc32; external;\nprocedure deflateInit2_; external;\nprocedure deflateParams; external;\n\nfunction _malloc(Size: Integer): Pointer; cdecl;\nbegin\n  Result := AllocMem(Size);\nend;\n\nprocedure _free(Block: Pointer); cdecl;\nbegin\n  FreeMem(Block);\nend;\n\nprocedure _memset(P: Pointer; B: Byte; count: Integer); cdecl;\nbegin\n  FillChar(P^, count, B);\nend;\n\nprocedure _memcpy(dest, source: Pointer; count: Integer); cdecl;\nbegin\n  Move(source^, dest^, count);\nend;\n\n\n\n// deflate compresses data\nfunction deflateInit_(var strm: TZStreamRec; level: Integer; version: PChar;\n  recsize: Integer): Integer; external;\nfunction deflate(var strm: TZStreamRec; flush: Integer): Integer; external;\nfunction deflateEnd(var strm: TZStreamRec): Integer; external;\n\n// inflate decompresses data\nfunction inflateInit_(var strm: TZStreamRec; version: PChar;\n  recsize: Integer): Integer; external;\nfunction inflate(var strm: TZStreamRec; flush: Integer): Integer; external;\nfunction inflateEnd(var strm: TZStreamRec): Integer; external;\nfunction inflateReset(var strm: TZStreamRec): Integer; external;\n\n\nfunction zlibAllocMem(AppData: Pointer; Items, Size: Integer): Pointer; cdecl;\nbegin\n//  GetMem(Result, Items*Size);\n  Result := AllocMem(Items * Size);\nend;\n\nprocedure zlibFreeMem(AppData, Block: Pointer); cdecl;\nbegin\n  FreeMem(Block);\nend;\n\n{function zlibCheck(code: Integer): Integer;\nbegin\n  Result := code;\n  if code < 0 then\n    raise EZlibError.Create('error');    //!!\nend;}\n\nfunction CCheck(code: Integer): Integer;\nbegin\n  Result := code;\n  if code < 0 then\n    raise ECompressionError.Create('error'); //!!\nend;\n\nfunction DCheck(code: Integer): Integer;\nbegin\n  Result := code;\n  if code < 0 then\n    raise EDecompressionError.Create('error');  //!!\nend;\n\nprocedure CompressBuf(const InBuf: Pointer; InBytes: Integer;\n                      out OutBuf: Pointer; out OutBytes: Integer);\nvar\n  strm: TZStreamRec;\n  P: Pointer;\nbegin\n  FillChar(strm, sizeof(strm), 0);\n  strm.zalloc := zlibAllocMem;\n  strm.zfree := zlibFreeMem;\n  OutBytes := ((InBytes + (InBytes div 10) + 12) + 255) and not 255;\n  GetMem(OutBuf, OutBytes);\n  try\n    strm.next_in := InBuf;\n    strm.avail_in := InBytes;\n    strm.next_out := OutBuf;\n    strm.avail_out := OutBytes;\n    CCheck(deflateInit_(strm, Z_BEST_COMPRESSION, zlib_version, sizeof(strm)));\n    try\n      while CCheck(deflate(strm, Z_FINISH)) <> Z_STREAM_END do\n      begin\n        P := OutBuf;\n        Inc(OutBytes, 256);\n        ReallocMem(OutBuf, OutBytes);\n        strm.next_out := PChar(Integer(OutBuf) + (Integer(strm.next_out) - Integer(P)));\n        strm.avail_out := 256;\n      end;\n    finally\n      CCheck(deflateEnd(strm));\n    end;\n    ReallocMem(OutBuf, strm.total_out);\n    OutBytes := strm.total_out;\n  except\n    FreeMem(OutBuf);\n    raise\n  end;\nend;\n\n\nprocedure DecompressBuf(const InBuf: Pointer; InBytes: Integer;\n  OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer);\nvar\n  strm: TZStreamRec;\n  P: Pointer;\n  BufInc: Integer;\nbegin\n  FillChar(strm, sizeof(strm), 0);\n  strm.zalloc := zlibAllocMem;\n  strm.zfree := zlibFreeMem;\n  BufInc := (InBytes + 255) and not 255;\n  if OutEstimate = 0 then\n    OutBytes := BufInc\n  else\n    OutBytes := OutEstimate;\n  GetMem(OutBuf, OutBytes);\n  try\n    strm.next_in := InBuf;\n    strm.avail_in := InBytes;\n    strm.next_out := OutBuf;\n    strm.avail_out := OutBytes;\n    DCheck(inflateInit_(strm, zlib_version, sizeof(strm)));\n    try\n      while DCheck(inflate(strm, Z_NO_FLUSH)) <> Z_STREAM_END do\n      begin\n        P := OutBuf;\n        Inc(OutBytes, BufInc);\n        ReallocMem(OutBuf, OutBytes);\n        strm.next_out := PChar(Integer(OutBuf) + (Integer(strm.next_out) - Integer(P)));\n        strm.avail_out := BufInc;\n      end;\n    finally\n      DCheck(inflateEnd(strm));\n    end;\n    ReallocMem(OutBuf, strm.total_out);\n    OutBytes := strm.total_out;\n  except\n    FreeMem(OutBuf);\n    raise\n  end;\nend;\n\nprocedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer;\n  const OutBuf: Pointer; BufSize: Integer);\nvar\n  strm: TZStreamRec;\nbegin\n  FillChar(strm, sizeof(strm), 0);\n  strm.zalloc := zlibAllocMem;\n  strm.zfree := zlibFreeMem;\n  strm.next_in := InBuf;\n  strm.avail_in := InBytes;\n  strm.next_out := OutBuf;\n  strm.avail_out := BufSize;\n  DCheck(inflateInit_(strm, zlib_version, sizeof(strm)));\n  try\n    if DCheck(inflate(strm, Z_FINISH)) <> Z_STREAM_END then\n      raise EZlibError.CreateRes(@sTargetBufferTooSmall);\n  finally\n    DCheck(inflateEnd(strm));\n  end;\nend;\n\n// TCustomZlibStream\n\nconstructor TCustomZLibStream.Create(Strm: TStream);\nbegin\n  inherited Create;\n  FStrm := Strm;\n  FStrmPos := Strm.Position;\n  FZRec.zalloc := zlibAllocMem;\n  FZRec.zfree := zlibFreeMem;\nend;\n\nprocedure TCustomZLibStream.Progress(Sender: TObject);\nbegin\n  if Assigned(FOnProgress) then FOnProgress(Sender);\nend;\n\n\n// TCompressionStream\n\nconstructor TCompressionStream.Create(CompressionLevel: TCompressionLevel;\n  Dest: TStream);\nconst\n  Levels: array [TCompressionLevel] of ShortInt =\n    (Z_NO_COMPRESSION, Z_BEST_SPEED, Z_DEFAULT_COMPRESSION, Z_BEST_COMPRESSION);\nbegin\n  inherited Create(Dest);\n  FZRec.next_out := FBuffer;\n  FZRec.avail_out := sizeof(FBuffer);\n  CCheck(deflateInit_(FZRec, Levels[CompressionLevel], zlib_version, sizeof(FZRec)));\nend;\n\ndestructor TCompressionStream.Destroy;\nbegin\n  FZRec.next_in := nil;\n  FZRec.avail_in := 0;\n  try\n    if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos;\n    while (CCheck(deflate(FZRec, Z_FINISH)) <> Z_STREAM_END)\n      and (FZRec.avail_out = 0) do\n    begin\n      FStrm.WriteBuffer(FBuffer, sizeof(FBuffer));\n      FZRec.next_out := FBuffer;\n      FZRec.avail_out := sizeof(FBuffer);\n    end;\n    if FZRec.avail_out < sizeof(FBuffer) then\n      FStrm.WriteBuffer(FBuffer, sizeof(FBuffer) - FZRec.avail_out);\n  finally\n    deflateEnd(FZRec);\n  end;\n  inherited Destroy;\nend;\n\nfunction TCompressionStream.Read(var Buffer; Count: Longint): Longint;\nbegin\n  raise ECompressionError.CreateRes(@sInvalidStreamOp);\nend;\n\nfunction TCompressionStream.Write(const Buffer; Count: Longint): Longint;\nbegin\n  FZRec.next_in := @Buffer;\n  FZRec.avail_in := Count;\n  if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos;\n  while (FZRec.avail_in > 0) do\n  begin\n    CCheck(deflate(FZRec, 0));\n    if FZRec.avail_out = 0 then\n    begin\n      FStrm.WriteBuffer(FBuffer, sizeof(FBuffer));\n      FZRec.next_out := FBuffer;\n      FZRec.avail_out := sizeof(FBuffer);\n      FStrmPos := FStrm.Position;\n      Progress(Self);\n    end;\n  end;\n  Result := Count;\nend;\n\nfunction TCompressionStream.Seek(Offset: Longint; Origin: Word): Longint;\nbegin\n  if (Offset = 0) and (Origin = soFromCurrent) then\n    Result := FZRec.total_in\n  else\n    raise ECompressionError.CreateRes(@sInvalidStreamOp);\nend;\n\nfunction TCompressionStream.GetCompressionRate: Single;\nbegin\n  if FZRec.total_in = 0 then\n    Result := 0\n  else\n    Result := (1.0 - (FZRec.total_out / FZRec.total_in)) * 100.0;\nend;\n\n\n// TDecompressionStream\n\nconstructor TDecompressionStream.Create(Source: TStream);\nbegin\n  inherited Create(Source);\n  FZRec.next_in := FBuffer;\n  FZRec.avail_in := 0;\n  DCheck(inflateInit_(FZRec, zlib_version, sizeof(FZRec)));\nend;\n\ndestructor TDecompressionStream.Destroy;\nbegin\n  FStrm.Seek(-FZRec.avail_in, 1);\n  inflateEnd(FZRec);\n  inherited Destroy;\nend;\n\nfunction TDecompressionStream.Read(var Buffer; Count: Longint): Longint;\nbegin\n  FZRec.next_out := @Buffer;\n  FZRec.avail_out := Count;\n  if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos;\n  while (FZRec.avail_out > 0) do\n  begin\n    if FZRec.avail_in = 0 then\n    begin\n      FZRec.avail_in := FStrm.Read(FBuffer, sizeof(FBuffer));\n      if FZRec.avail_in = 0 then\n      begin\n        Result := Count - FZRec.avail_out;\n        Exit;\n      end;\n      FZRec.next_in := FBuffer;\n      FStrmPos := FStrm.Position;\n      Progress(Self);\n    end;\n    CCheck(inflate(FZRec, 0));\n  end;\n  Result := Count;\nend;\n\nfunction TDecompressionStream.Write(const Buffer; Count: Longint): Longint;\nbegin\n  raise EDecompressionError.CreateRes(@sInvalidStreamOp);\nend;\n\nfunction TDecompressionStream.Seek(Offset: Longint; Origin: Word): Longint;\nvar\n  I: Integer;\n  Buf: array [0..4095] of Char;\nbegin\n  if (Offset = 0) and (Origin = soFromBeginning) then\n  begin\n    DCheck(inflateReset(FZRec));\n    FZRec.next_in := FBuffer;\n    FZRec.avail_in := 0;\n    FStrm.Position := 0;\n    FStrmPos := 0;\n  end\n  else if ( (Offset >= 0) and (Origin = soFromCurrent)) or\n          ( ((Offset - FZRec.total_out) > 0) and (Origin = soFromBeginning)) then\n  begin\n    if Origin = soFromBeginning then Dec(Offset, FZRec.total_out);\n    if Offset > 0 then\n    begin\n      for I := 1 to Offset div sizeof(Buf) do\n        ReadBuffer(Buf, sizeof(Buf));\n      ReadBuffer(Buf, Offset mod sizeof(Buf));\n    end;\n  end\n  else\n    raise EDecompressionError.CreateRes(@sInvalidStreamOp);\n  Result := FZRec.total_out;\nend;\n\n\nend.\n"
  },
  {
    "path": "external/zlib/contrib/delphi/ZLibConst.pas",
    "content": "unit ZLibConst;\n\ninterface\n\nresourcestring\n  sTargetBufferTooSmall = 'ZLib error: target buffer may be too small';\n  sInvalidStreamOp = 'Invalid stream operation';\n\nimplementation\n\nend.\n"
  },
  {
    "path": "external/zlib/contrib/delphi/readme.txt",
    "content": "\nOverview\n========\n\nThis directory contains an update to the ZLib interface unit,\ndistributed by Borland as a Delphi supplemental component.\n\nThe original ZLib unit is Copyright (c) 1997,99 Borland Corp.,\nand is based on zlib version 1.0.4.  There are a series of bugs\nand security problems associated with that old zlib version, and\nwe recommend the users to update their ZLib unit.\n\n\nSummary of modifications\n========================\n\n- Improved makefile, adapted to zlib version 1.2.1.\n\n- Some field types from TZStreamRec are changed from Integer to\n  Longint, for consistency with the zlib.h header, and for 64-bit\n  readiness.\n\n- The zlib_version constant is updated.\n\n- The new Z_RLE strategy has its corresponding symbolic constant.\n\n- The allocation and deallocation functions and function types\n  (TAlloc, TFree, zlibAllocMem and zlibFreeMem) are now cdecl,\n  and _malloc and _free are added as C RTL stubs.  As a result,\n  the original C sources of zlib can be compiled out of the box,\n  and linked to the ZLib unit.\n\n\nSuggestions for improvements\n============================\n\nCurrently, the ZLib unit provides only a limited wrapper around\nthe zlib library, and much of the original zlib functionality is\nmissing.  Handling compressed file formats like ZIP/GZIP or PNG\ncannot be implemented without having this functionality.\nApplications that handle these formats are either using their own,\nduplicated code, or not using the ZLib unit at all.\n\nHere are a few suggestions:\n\n- Checksum class wrappers around adler32() and crc32(), similar\n  to the Java classes that implement the java.util.zip.Checksum\n  interface.\n\n- The ability to read and write raw deflate streams, without the\n  zlib stream header and trailer.  Raw deflate streams are used\n  in the ZIP file format.\n\n- The ability to read and write gzip streams, used in the GZIP\n  file format, and normally produced by the gzip program.\n\n- The ability to select a different compression strategy, useful\n  to PNG and MNG image compression, and to multimedia compression\n  in general.  Besides the compression level\n\n    TCompressionLevel = (clNone, clFastest, clDefault, clMax);\n\n  which, in fact, could have used the 'z' prefix and avoided\n  TColor-like symbols\n\n    TCompressionLevel = (zcNone, zcFastest, zcDefault, zcMax);\n\n  there could be a compression strategy\n\n    TCompressionStrategy = (zsDefault, zsFiltered, zsHuffmanOnly, zsRle);\n\n- ZIP and GZIP stream handling via TStreams.\n\n\n--\nCosmin Truta <cosmint@cs.ubbcluj.ro>\n"
  },
  {
    "path": "external/zlib/contrib/delphi/zlibd32.mak",
    "content": "# Makefile for zlib\n# For use with Delphi and C++ Builder under Win32\n# Updated for zlib 1.2.x by Cosmin Truta\n\n# ------------ Borland C++ ------------\n\n# This project uses the Delphi (fastcall/register) calling convention:\nLOC = -DZEXPORT=__fastcall -DZEXPORTVA=__cdecl\n\nCC = bcc32\nLD = bcc32\nAR = tlib\n# do not use \"-pr\" in CFLAGS\nCFLAGS = -a -d -k- -O2 $(LOC)\nLDFLAGS =\n\n\n# variables\nZLIB_LIB = zlib.lib\n\nOBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj\nOBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj\nOBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj\nOBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj\n\n\n# targets\nall: $(ZLIB_LIB) example.exe minigzip.exe\n\n.c.obj:\n\t$(CC) -c $(CFLAGS) $*.c\n\nadler32.obj: adler32.c zlib.h zconf.h\n\ncompress.obj: compress.c zlib.h zconf.h\n\ncrc32.obj: crc32.c zlib.h zconf.h crc32.h\n\ndeflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h\n\ngzclose.obj: gzclose.c zlib.h zconf.h gzguts.h\n\ngzlib.obj: gzlib.c zlib.h zconf.h gzguts.h\n\ngzread.obj: gzread.c zlib.h zconf.h gzguts.h\n\ngzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h\n\ninfback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \\\n inffast.h inffixed.h\n\ninffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \\\n inffast.h\n\ninflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \\\n inffast.h inffixed.h\n\ninftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h\n\ntrees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h\n\nuncompr.obj: uncompr.c zlib.h zconf.h\n\nzutil.obj: zutil.c zutil.h zlib.h zconf.h\n\nexample.obj: example.c zlib.h zconf.h\n\nminigzip.obj: minigzip.c zlib.h zconf.h\n\n\n# For the sake of the old Borland make,\n# the command line is cut to fit in the MS-DOS 128 byte limit:\n$(ZLIB_LIB): $(OBJ1) $(OBJ2)\n\t-del $(ZLIB_LIB)\n\t$(AR) $(ZLIB_LIB) $(OBJP1)\n\t$(AR) $(ZLIB_LIB) $(OBJP2)\n\n\n# testing\ntest: example.exe minigzip.exe\n\texample\n\techo hello world | minigzip | minigzip -d\n\nexample.exe: example.obj $(ZLIB_LIB)\n\t$(LD) $(LDFLAGS) example.obj $(ZLIB_LIB)\n\nminigzip.exe: minigzip.obj $(ZLIB_LIB)\n\t$(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB)\n\n\n# cleanup\nclean:\n\t-del *.obj\n\t-del *.exe\n\t-del *.lib\n\t-del *.tds\n\t-del zlib.bak\n\t-del foo.gz\n\n"
  },
  {
    "path": "external/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs",
    "content": "using System.Reflection;\nusing System.Runtime.CompilerServices;\n\n//\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n//\n[assembly: AssemblyTitle(\"DotZLib\")]\n[assembly: AssemblyDescription(\".Net bindings for ZLib compression dll 1.2.x\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Henrik Ravn\")]\n[assembly: AssemblyProduct(\"\")]\n[assembly: AssemblyCopyright(\"(c) 2004 by Henrik Ravn\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers\n// by using the '*' as shown below:\n\n[assembly: AssemblyVersion(\"1.0.*\")]\n\n//\n// In order to sign your assembly you must specify a key to use. Refer to the\n// Microsoft .NET Framework documentation for more information on assembly signing.\n//\n// Use the attributes below to control which key is used for signing.\n//\n// Notes:\n//   (*) If no key is specified, the assembly is not signed.\n//   (*) KeyName refers to a key that has been installed in the Crypto Service\n//       Provider (CSP) on your machine. KeyFile refers to a file which contains\n//       a key.\n//   (*) If the KeyFile and the KeyName values are both specified, the\n//       following processing occurs:\n//       (1) If the KeyName can be found in the CSP, that key is used.\n//       (2) If the KeyName does not exist and the KeyFile does exist, the key\n//           in the KeyFile is installed into the CSP and used.\n//   (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.\n//       When specifying the KeyFile, the location of the KeyFile should be\n//       relative to the project output directory which is\n//       %Project Directory%\\obj\\<configuration>. For example, if your KeyFile is\n//       located in the project directory, you would specify the AssemblyKeyFile\n//       attribute as [assembly: AssemblyKeyFile(\"..\\\\..\\\\mykey.snk\")]\n//   (*) Delay Signing is an advanced option - see the Microsoft .NET Framework\n//       documentation for more information on this.\n//\n[assembly: AssemblyDelaySign(false)]\n[assembly: AssemblyKeyFile(\"\")]\n[assembly: AssemblyKeyName(\"\")]\n"
  },
  {
    "path": "external/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs",
    "content": "//\n//  Copyright Henrik Ravn 2004\n//\n// Use, modification and distribution are subject to the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n\nusing System;\nusing System.Runtime.InteropServices;\nusing System.Text;\n\n\nnamespace DotZLib\n{\n    #region ChecksumGeneratorBase\n    /// <summary>\n    /// Implements the common functionality needed for all <see cref=\"ChecksumGenerator\"/>s\n    /// </summary>\n    /// <example></example>\n    public abstract class ChecksumGeneratorBase : ChecksumGenerator\n    {\n        /// <summary>\n        /// The value of the current checksum\n        /// </summary>\n        protected uint _current;\n\n        /// <summary>\n        /// Initializes a new instance of the checksum generator base - the current checksum is\n        /// set to zero\n        /// </summary>\n        public ChecksumGeneratorBase()\n        {\n            _current = 0;\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the checksum generator basewith a specified value\n        /// </summary>\n        /// <param name=\"initialValue\">The value to set the current checksum to</param>\n        public ChecksumGeneratorBase(uint initialValue)\n        {\n            _current = initialValue;\n        }\n\n        /// <summary>\n        /// Resets the current checksum to zero\n        /// </summary>\n        public void Reset() { _current = 0; }\n\n        /// <summary>\n        /// Gets the current checksum value\n        /// </summary>\n        public uint Value { get { return _current; } }\n\n        /// <summary>\n        /// Updates the current checksum with part of an array of bytes\n        /// </summary>\n        /// <param name=\"data\">The data to update the checksum with</param>\n        /// <param name=\"offset\">Where in <c>data</c> to start updating</param>\n        /// <param name=\"count\">The number of bytes from <c>data</c> to use</param>\n        /// <exception cref=\"ArgumentException\">The sum of offset and count is larger than the length of <c>data</c></exception>\n        /// <exception cref=\"NullReferenceException\"><c>data</c> is a null reference</exception>\n        /// <exception cref=\"ArgumentOutOfRangeException\">Offset or count is negative.</exception>\n        /// <remarks>All the other <c>Update</c> methods are implmeneted in terms of this one.\n        /// This is therefore the only method a derived class has to implement</remarks>\n        public abstract void Update(byte[] data, int offset, int count);\n\n        /// <summary>\n        /// Updates the current checksum with an array of bytes.\n        /// </summary>\n        /// <param name=\"data\">The data to update the checksum with</param>\n        public void Update(byte[] data)\n        {\n            Update(data, 0, data.Length);\n        }\n\n        /// <summary>\n        /// Updates the current checksum with the data from a string\n        /// </summary>\n        /// <param name=\"data\">The string to update the checksum with</param>\n        /// <remarks>The characters in the string are converted by the UTF-8 encoding</remarks>\n        public void Update(string data)\n        {\n\t\t\tUpdate(Encoding.UTF8.GetBytes(data));\n        }\n\n        /// <summary>\n        /// Updates the current checksum with the data from a string, using a specific encoding\n        /// </summary>\n        /// <param name=\"data\">The string to update the checksum with</param>\n        /// <param name=\"encoding\">The encoding to use</param>\n        public void Update(string data, Encoding encoding)\n        {\n            Update(encoding.GetBytes(data));\n        }\n\n    }\n    #endregion\n\n    #region CRC32\n    /// <summary>\n    /// Implements a CRC32 checksum generator\n    /// </summary>\n    public sealed class CRC32Checksum : ChecksumGeneratorBase\n    {\n        #region DLL imports\n\n        [DllImport(\"ZLIB1.dll\", CallingConvention=CallingConvention.Cdecl)]\n        private static extern uint crc32(uint crc, int data, uint length);\n\n        #endregion\n\n        /// <summary>\n        /// Initializes a new instance of the CRC32 checksum generator\n        /// </summary>\n        public CRC32Checksum() : base() {}\n\n        /// <summary>\n        /// Initializes a new instance of the CRC32 checksum generator with a specified value\n        /// </summary>\n        /// <param name=\"initialValue\">The value to set the current checksum to</param>\n        public CRC32Checksum(uint initialValue) : base(initialValue) {}\n\n        /// <summary>\n        /// Updates the current checksum with part of an array of bytes\n        /// </summary>\n        /// <param name=\"data\">The data to update the checksum with</param>\n        /// <param name=\"offset\">Where in <c>data</c> to start updating</param>\n        /// <param name=\"count\">The number of bytes from <c>data</c> to use</param>\n        /// <exception cref=\"ArgumentException\">The sum of offset and count is larger than the length of <c>data</c></exception>\n        /// <exception cref=\"NullReferenceException\"><c>data</c> is a null reference</exception>\n        /// <exception cref=\"ArgumentOutOfRangeException\">Offset or count is negative.</exception>\n        public override void Update(byte[] data, int offset, int count)\n        {\n            if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException();\n            if ((offset+count) > data.Length) throw new ArgumentException();\n            GCHandle hData = GCHandle.Alloc(data, GCHandleType.Pinned);\n            try\n            {\n                _current = crc32(_current, hData.AddrOfPinnedObject().ToInt32()+offset, (uint)count);\n            }\n            finally\n            {\n                hData.Free();\n            }\n        }\n\n    }\n    #endregion\n\n    #region Adler\n    /// <summary>\n    /// Implements a checksum generator that computes the Adler checksum on data\n    /// </summary>\n    public sealed class AdlerChecksum : ChecksumGeneratorBase\n    {\n        #region DLL imports\n\n        [DllImport(\"ZLIB1.dll\", CallingConvention=CallingConvention.Cdecl)]\n        private static extern uint adler32(uint adler, int data, uint length);\n\n        #endregion\n\n        /// <summary>\n        /// Initializes a new instance of the Adler checksum generator\n        /// </summary>\n        public AdlerChecksum() : base() {}\n\n        /// <summary>\n        /// Initializes a new instance of the Adler checksum generator with a specified value\n        /// </summary>\n        /// <param name=\"initialValue\">The value to set the current checksum to</param>\n        public AdlerChecksum(uint initialValue) : base(initialValue) {}\n\n        /// <summary>\n        /// Updates the current checksum with part of an array of bytes\n        /// </summary>\n        /// <param name=\"data\">The data to update the checksum with</param>\n        /// <param name=\"offset\">Where in <c>data</c> to start updating</param>\n        /// <param name=\"count\">The number of bytes from <c>data</c> to use</param>\n        /// <exception cref=\"ArgumentException\">The sum of offset and count is larger than the length of <c>data</c></exception>\n        /// <exception cref=\"NullReferenceException\"><c>data</c> is a null reference</exception>\n        /// <exception cref=\"ArgumentOutOfRangeException\">Offset or count is negative.</exception>\n        public override void Update(byte[] data, int offset, int count)\n        {\n            if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException();\n            if ((offset+count) > data.Length) throw new ArgumentException();\n            GCHandle hData = GCHandle.Alloc(data, GCHandleType.Pinned);\n            try\n            {\n                _current = adler32(_current, hData.AddrOfPinnedObject().ToInt32()+offset, (uint)count);\n            }\n            finally\n            {\n                hData.Free();\n            }\n        }\n\n    }\n    #endregion\n\n}"
  },
  {
    "path": "external/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs",
    "content": "//\n//  Copyright Henrik Ravn 2004\n//\n// Use, modification and distribution are subject to the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n\nusing System;\nusing System.Diagnostics;\n\nnamespace DotZLib\n{\n\n\t/// <summary>\n\t/// This class implements a circular buffer\n\t/// </summary>\n\tinternal class CircularBuffer\n\t{\n        #region Private data\n        private int _capacity;\n        private int _head;\n        private int _tail;\n        private int _size;\n        private byte[] _buffer;\n        #endregion\n\n        public CircularBuffer(int capacity)\n        {\n            Debug.Assert( capacity > 0 );\n            _buffer = new byte[capacity];\n            _capacity = capacity;\n            _head = 0;\n            _tail = 0;\n            _size = 0;\n        }\n\n        public int Size { get { return _size; } }\n\n        public int Put(byte[] source, int offset, int count)\n        {\n            Debug.Assert( count > 0 );\n            int trueCount = Math.Min(count, _capacity - Size);\n            for (int i = 0; i < trueCount; ++i)\n                _buffer[(_tail+i) % _capacity] = source[offset+i];\n            _tail += trueCount;\n            _tail %= _capacity;\n            _size += trueCount;\n            return trueCount;\n        }\n\n        public bool Put(byte b)\n        {\n            if (Size == _capacity) // no room\n                return false;\n            _buffer[_tail++] = b;\n            _tail %= _capacity;\n            ++_size;\n            return true;\n        }\n\n        public int Get(byte[] destination, int offset, int count)\n        {\n            int trueCount = Math.Min(count,Size);\n            for (int i = 0; i < trueCount; ++i)\n                destination[offset + i] = _buffer[(_head+i) % _capacity];\n            _head += trueCount;\n            _head %= _capacity;\n            _size -= trueCount;\n            return trueCount;\n        }\n\n        public int Get()\n        {\n            if (Size == 0)\n                return -1;\n\n            int result = (int)_buffer[_head++ % _capacity];\n            --_size;\n            return result;\n        }\n\n    }\n}\n"
  },
  {
    "path": "external/zlib/contrib/dotzlib/DotZLib/CodecBase.cs",
    "content": "//\n//  Copyright Henrik Ravn 2004\n//\n// Use, modification and distribution are subject to the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n\nusing System;\nusing System.Runtime.InteropServices;\n\nnamespace DotZLib\n{\n\t/// <summary>\n\t/// Implements the common functionality needed for all <see cref=\"Codec\"/>s\n\t/// </summary>\n\tpublic abstract class CodecBase : Codec, IDisposable\n\t{\n\n        #region Data members\n\n        /// <summary>\n        /// Instance of the internal zlib buffer structure that is\n        /// passed to all functions in the zlib dll\n        /// </summary>\n        internal ZStream _ztream = new ZStream();\n\n        /// <summary>\n        /// True if the object instance has been disposed, false otherwise\n        /// </summary>\n        protected bool _isDisposed = false;\n\n        /// <summary>\n        /// The size of the internal buffers\n        /// </summary>\n        protected const int kBufferSize = 16384;\n\n        private byte[] _outBuffer = new byte[kBufferSize];\n        private byte[] _inBuffer = new byte[kBufferSize];\n\n        private GCHandle _hInput;\n        private GCHandle _hOutput;\n\n        private uint _checksum = 0;\n\n        #endregion\n\n        /// <summary>\n        /// Initializes a new instance of the <c>CodeBase</c> class.\n        /// </summary>\n\t\tpublic CodecBase()\n\t\t{\n            try\n            {\n                _hInput = GCHandle.Alloc(_inBuffer, GCHandleType.Pinned);\n                _hOutput = GCHandle.Alloc(_outBuffer, GCHandleType.Pinned);\n            }\n            catch (Exception)\n            {\n                CleanUp(false);\n                throw;\n            }\n        }\n\n\n        #region Codec Members\n\n        /// <summary>\n        /// Occurs when more processed data are available.\n        /// </summary>\n        public event DataAvailableHandler DataAvailable;\n\n        /// <summary>\n        /// Fires the <see cref=\"DataAvailable\"/> event\n        /// </summary>\n        protected void OnDataAvailable()\n        {\n            if (_ztream.total_out > 0)\n            {\n                if (DataAvailable != null)\n                    DataAvailable( _outBuffer, 0, (int)_ztream.total_out);\n                resetOutput();\n            }\n        }\n\n        /// <summary>\n        /// Adds more data to the codec to be processed.\n        /// </summary>\n        /// <param name=\"data\">Byte array containing the data to be added to the codec</param>\n        /// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>\n        public void Add(byte[] data)\n        {\n            Add(data,0,data.Length);\n        }\n\n        /// <summary>\n        /// Adds more data to the codec to be processed.\n        /// </summary>\n        /// <param name=\"data\">Byte array containing the data to be added to the codec</param>\n        /// <param name=\"offset\">The index of the first byte to add from <c>data</c></param>\n        /// <param name=\"count\">The number of bytes to add</param>\n        /// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>\n        /// <remarks>This must be implemented by a derived class</remarks>\n        public abstract void Add(byte[] data, int offset, int count);\n\n        /// <summary>\n        /// Finishes up any pending data that needs to be processed and handled.\n        /// </summary>\n        /// <remarks>This must be implemented by a derived class</remarks>\n        public abstract void Finish();\n\n        /// <summary>\n        /// Gets the checksum of the data that has been added so far\n        /// </summary>\n        public uint Checksum { get { return _checksum; } }\n\n        #endregion\n\n        #region Destructor & IDisposable stuff\n\n        /// <summary>\n        /// Destroys this instance\n        /// </summary>\n        ~CodecBase()\n        {\n            CleanUp(false);\n        }\n\n        /// <summary>\n        /// Releases any unmanaged resources and calls the <see cref=\"CleanUp()\"/> method of the derived class\n        /// </summary>\n        public void Dispose()\n        {\n            CleanUp(true);\n        }\n\n        /// <summary>\n        /// Performs any codec specific cleanup\n        /// </summary>\n        /// <remarks>This must be implemented by a derived class</remarks>\n        protected abstract void CleanUp();\n\n        // performs the release of the handles and calls the dereived CleanUp()\n        private void CleanUp(bool isDisposing)\n        {\n            if (!_isDisposed)\n            {\n                CleanUp();\n                if (_hInput.IsAllocated)\n                    _hInput.Free();\n                if (_hOutput.IsAllocated)\n                    _hOutput.Free();\n\n                _isDisposed = true;\n            }\n        }\n\n\n        #endregion\n\n        #region Helper methods\n\n        /// <summary>\n        /// Copies a number of bytes to the internal codec buffer - ready for proccesing\n        /// </summary>\n        /// <param name=\"data\">The byte array that contains the data to copy</param>\n        /// <param name=\"startIndex\">The index of the first byte to copy</param>\n        /// <param name=\"count\">The number of bytes to copy from <c>data</c></param>\n        protected void copyInput(byte[] data, int startIndex, int count)\n        {\n            Array.Copy(data, startIndex, _inBuffer,0, count);\n            _ztream.next_in = _hInput.AddrOfPinnedObject();\n            _ztream.total_in = 0;\n            _ztream.avail_in = (uint)count;\n\n        }\n\n        /// <summary>\n        /// Resets the internal output buffers to a known state - ready for processing\n        /// </summary>\n        protected void resetOutput()\n        {\n            _ztream.total_out = 0;\n            _ztream.avail_out = kBufferSize;\n            _ztream.next_out = _hOutput.AddrOfPinnedObject();\n        }\n\n        /// <summary>\n        /// Updates the running checksum property\n        /// </summary>\n        /// <param name=\"newSum\">The new checksum value</param>\n        protected void setChecksum(uint newSum)\n        {\n            _checksum = newSum;\n        }\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "external/zlib/contrib/dotzlib/DotZLib/Deflater.cs",
    "content": "//\n//  Copyright Henrik Ravn 2004\n//\n// Use, modification and distribution are subject to the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n\nusing System;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\n\nnamespace DotZLib\n{\n\n    /// <summary>\n    /// Implements a data compressor, using the deflate algorithm in the ZLib dll\n    /// </summary>\n\tpublic sealed class Deflater : CodecBase\n\t{\n        #region Dll imports\n        [DllImport(\"ZLIB1.dll\", CallingConvention=CallingConvention.Cdecl, CharSet=CharSet.Ansi)]\n        private static extern int deflateInit_(ref ZStream sz, int level, string vs, int size);\n\n        [DllImport(\"ZLIB1.dll\", CallingConvention=CallingConvention.Cdecl)]\n        private static extern int deflate(ref ZStream sz, int flush);\n\n        [DllImport(\"ZLIB1.dll\", CallingConvention=CallingConvention.Cdecl)]\n        private static extern int deflateReset(ref ZStream sz);\n\n        [DllImport(\"ZLIB1.dll\", CallingConvention=CallingConvention.Cdecl)]\n        private static extern int deflateEnd(ref ZStream sz);\n        #endregion\n\n        /// <summary>\n        /// Constructs an new instance of the <c>Deflater</c>\n        /// </summary>\n        /// <param name=\"level\">The compression level to use for this <c>Deflater</c></param>\n\t\tpublic Deflater(CompressLevel level) : base()\n\t\t{\n            int retval = deflateInit_(ref _ztream, (int)level, Info.Version, Marshal.SizeOf(_ztream));\n            if (retval != 0)\n                throw new ZLibException(retval, \"Could not initialize deflater\");\n\n            resetOutput();\n\t\t}\n\n        /// <summary>\n        /// Adds more data to the codec to be processed.\n        /// </summary>\n        /// <param name=\"data\">Byte array containing the data to be added to the codec</param>\n        /// <param name=\"offset\">The index of the first byte to add from <c>data</c></param>\n        /// <param name=\"count\">The number of bytes to add</param>\n        /// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>\n        public override void Add(byte[] data, int offset, int count)\n        {\n            if (data == null) throw new ArgumentNullException();\n            if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException();\n            if ((offset+count) > data.Length) throw new ArgumentException();\n\n            int total = count;\n            int inputIndex = offset;\n            int err = 0;\n\n            while (err >= 0 && inputIndex < total)\n            {\n                copyInput(data, inputIndex, Math.Min(total - inputIndex, kBufferSize));\n                while (err >= 0 && _ztream.avail_in > 0)\n                {\n                    err = deflate(ref _ztream, (int)FlushTypes.None);\n                    if (err == 0)\n                        while (_ztream.avail_out == 0)\n                        {\n                            OnDataAvailable();\n                            err = deflate(ref _ztream, (int)FlushTypes.None);\n                        }\n                    inputIndex += (int)_ztream.total_in;\n                }\n            }\n            setChecksum( _ztream.adler );\n        }\n\n\n        /// <summary>\n        /// Finishes up any pending data that needs to be processed and handled.\n        /// </summary>\n        public override void Finish()\n        {\n            int err;\n            do\n            {\n                err = deflate(ref _ztream, (int)FlushTypes.Finish);\n                OnDataAvailable();\n            }\n            while (err == 0);\n            setChecksum( _ztream.adler );\n            deflateReset(ref _ztream);\n            resetOutput();\n        }\n\n        /// <summary>\n        /// Closes the internal zlib deflate stream\n        /// </summary>\n        protected override void CleanUp() { deflateEnd(ref _ztream); }\n\n    }\n}\n"
  },
  {
    "path": "external/zlib/contrib/dotzlib/DotZLib/DotZLib.cs",
    "content": "//\n//  Copyright Henrik Ravn 2004\n//\n// Use, modification and distribution are subject to the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n\nusing System;\nusing System.IO;\nusing System.Runtime.InteropServices;\nusing System.Text;\n\n\nnamespace DotZLib\n{\n\n    #region Internal types\n\n    /// <summary>\n    /// Defines constants for the various flush types used with zlib\n    /// </summary>\n    internal enum FlushTypes\n    {\n        None,  Partial,  Sync,  Full,  Finish,  Block\n    }\n\n    #region ZStream structure\n    // internal mapping of the zlib zstream structure for marshalling\n    [StructLayoutAttribute(LayoutKind.Sequential, Pack=4, Size=0, CharSet=CharSet.Ansi)]\n    internal struct ZStream\n    {\n        public IntPtr next_in;\n        public uint avail_in;\n        public uint total_in;\n\n        public IntPtr next_out;\n        public uint avail_out;\n        public uint total_out;\n\n        [MarshalAs(UnmanagedType.LPStr)]\n        string msg;\n        uint state;\n\n        uint zalloc;\n        uint zfree;\n        uint opaque;\n\n        int data_type;\n        public uint adler;\n        uint reserved;\n    }\n\n    #endregion\n\n    #endregion\n\n    #region Public enums\n    /// <summary>\n    /// Defines constants for the available compression levels in zlib\n    /// </summary>\n    public enum CompressLevel : int\n    {\n        /// <summary>\n        /// The default compression level with a reasonable compromise between compression and speed\n        /// </summary>\n        Default = -1,\n        /// <summary>\n        /// No compression at all. The data are passed straight through.\n        /// </summary>\n        None = 0,\n        /// <summary>\n        /// The maximum compression rate available.\n        /// </summary>\n        Best = 9,\n        /// <summary>\n        /// The fastest available compression level.\n        /// </summary>\n        Fastest = 1\n    }\n    #endregion\n\n    #region Exception classes\n    /// <summary>\n    /// The exception that is thrown when an error occurs on the zlib dll\n    /// </summary>\n    public class ZLibException : ApplicationException\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"ZLibException\"/> class with a specified\n        /// error message and error code\n        /// </summary>\n        /// <param name=\"errorCode\">The zlib error code that caused the exception</param>\n        /// <param name=\"msg\">A message that (hopefully) describes the error</param>\n        public ZLibException(int errorCode, string msg) : base(String.Format(\"ZLib error {0} {1}\", errorCode, msg))\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"ZLibException\"/> class with a specified\n        /// error code\n        /// </summary>\n        /// <param name=\"errorCode\">The zlib error code that caused the exception</param>\n        public ZLibException(int errorCode) : base(String.Format(\"ZLib error {0}\", errorCode))\n        {\n        }\n    }\n    #endregion\n\n    #region Interfaces\n\n    /// <summary>\n    /// Declares methods and properties that enables a running checksum to be calculated\n    /// </summary>\n    public interface ChecksumGenerator\n    {\n        /// <summary>\n        /// Gets the current value of the checksum\n        /// </summary>\n        uint Value { get; }\n\n        /// <summary>\n        /// Clears the current checksum to 0\n        /// </summary>\n        void Reset();\n\n        /// <summary>\n        /// Updates the current checksum with an array of bytes\n        /// </summary>\n        /// <param name=\"data\">The data to update the checksum with</param>\n        void Update(byte[] data);\n\n        /// <summary>\n        /// Updates the current checksum with part of an array of bytes\n        /// </summary>\n        /// <param name=\"data\">The data to update the checksum with</param>\n        /// <param name=\"offset\">Where in <c>data</c> to start updating</param>\n        /// <param name=\"count\">The number of bytes from <c>data</c> to use</param>\n        /// <exception cref=\"ArgumentException\">The sum of offset and count is larger than the length of <c>data</c></exception>\n        /// <exception cref=\"ArgumentNullException\"><c>data</c> is a null reference</exception>\n        /// <exception cref=\"ArgumentOutOfRangeException\">Offset or count is negative.</exception>\n        void Update(byte[] data, int offset, int count);\n\n        /// <summary>\n        /// Updates the current checksum with the data from a string\n        /// </summary>\n        /// <param name=\"data\">The string to update the checksum with</param>\n        /// <remarks>The characters in the string are converted by the UTF-8 encoding</remarks>\n        void Update(string data);\n\n        /// <summary>\n        /// Updates the current checksum with the data from a string, using a specific encoding\n        /// </summary>\n        /// <param name=\"data\">The string to update the checksum with</param>\n        /// <param name=\"encoding\">The encoding to use</param>\n        void Update(string data, Encoding encoding);\n    }\n\n\n    /// <summary>\n    /// Represents the method that will be called from a codec when new data\n    /// are available.\n    /// </summary>\n    /// <paramref name=\"data\">The byte array containing the processed data</paramref>\n    /// <paramref name=\"startIndex\">The index of the first processed byte in <c>data</c></paramref>\n    /// <paramref name=\"count\">The number of processed bytes available</paramref>\n    /// <remarks>On return from this method, the data may be overwritten, so grab it while you can.\n    /// You cannot assume that startIndex will be zero.\n    /// </remarks>\n    public delegate void DataAvailableHandler(byte[] data, int startIndex, int count);\n\n    /// <summary>\n    /// Declares methods and events for implementing compressors/decompressors\n    /// </summary>\n    public interface Codec\n    {\n        /// <summary>\n        /// Occurs when more processed data are available.\n        /// </summary>\n        event DataAvailableHandler DataAvailable;\n\n        /// <summary>\n        /// Adds more data to the codec to be processed.\n        /// </summary>\n        /// <param name=\"data\">Byte array containing the data to be added to the codec</param>\n        /// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>\n        void Add(byte[] data);\n\n        /// <summary>\n        /// Adds more data to the codec to be processed.\n        /// </summary>\n        /// <param name=\"data\">Byte array containing the data to be added to the codec</param>\n        /// <param name=\"offset\">The index of the first byte to add from <c>data</c></param>\n        /// <param name=\"count\">The number of bytes to add</param>\n        /// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>\n        void Add(byte[] data, int offset, int count);\n\n        /// <summary>\n        /// Finishes up any pending data that needs to be processed and handled.\n        /// </summary>\n        void Finish();\n\n        /// <summary>\n        /// Gets the checksum of the data that has been added so far\n        /// </summary>\n        uint Checksum { get; }\n\n\n    }\n\n    #endregion\n\n    #region Classes\n    /// <summary>\n    /// Encapsulates general information about the ZLib library\n    /// </summary>\n    public class Info\n    {\n        #region DLL imports\n        [DllImport(\"ZLIB1.dll\", CallingConvention=CallingConvention.Cdecl)]\n        private static extern uint zlibCompileFlags();\n\n        [DllImport(\"ZLIB1.dll\", CallingConvention=CallingConvention.Cdecl)]\n        private static extern string zlibVersion();\n        #endregion\n\n        #region Private stuff\n        private uint _flags;\n\n        // helper function that unpacks a bitsize mask\n        private static int bitSize(uint bits)\n        {\n            switch (bits)\n            {\n                case 0: return 16;\n                case 1: return 32;\n                case 2: return 64;\n            }\n            return -1;\n        }\n        #endregion\n\n        /// <summary>\n        /// Constructs an instance of the <c>Info</c> class.\n        /// </summary>\n        public Info()\n        {\n            _flags = zlibCompileFlags();\n        }\n\n        /// <summary>\n        /// True if the library is compiled with debug info\n        /// </summary>\n        public bool HasDebugInfo { get { return 0 != (_flags & 0x100); } }\n\n        /// <summary>\n        /// True if the library is compiled with assembly optimizations\n        /// </summary>\n        public bool UsesAssemblyCode { get { return 0 != (_flags & 0x200); } }\n\n        /// <summary>\n        /// Gets the size of the unsigned int that was compiled into Zlib\n        /// </summary>\n        public int SizeOfUInt { get { return bitSize(_flags & 3); } }\n\n        /// <summary>\n        /// Gets the size of the unsigned long that was compiled into Zlib\n        /// </summary>\n        public int SizeOfULong { get { return bitSize((_flags >> 2) & 3); } }\n\n        /// <summary>\n        /// Gets the size of the pointers that were compiled into Zlib\n        /// </summary>\n        public int SizeOfPointer { get { return bitSize((_flags >> 4) & 3); } }\n\n        /// <summary>\n        /// Gets the size of the z_off_t type that was compiled into Zlib\n        /// </summary>\n        public int SizeOfOffset { get { return bitSize((_flags >> 6) & 3); } }\n\n        /// <summary>\n        /// Gets the version of ZLib as a string, e.g. \"1.2.1\"\n        /// </summary>\n        public static string Version { get { return zlibVersion(); } }\n    }\n\n    #endregion\n\n}\n"
  },
  {
    "path": "external/zlib/contrib/dotzlib/DotZLib/DotZLib.csproj",
    "content": "<VisualStudioProject>\n    <CSHARP\n        ProjectType = \"Local\"\n        ProductVersion = \"7.10.3077\"\n        SchemaVersion = \"2.0\"\n        ProjectGuid = \"{BB1EE0B1-1808-46CB-B786-949D91117FC5}\"\n    >\n        <Build>\n            <Settings\n                ApplicationIcon = \"\"\n                AssemblyKeyContainerName = \"\"\n                AssemblyName = \"DotZLib\"\n                AssemblyOriginatorKeyFile = \"\"\n                DefaultClientScript = \"JScript\"\n                DefaultHTMLPageLayout = \"Grid\"\n                DefaultTargetSchema = \"IE50\"\n                DelaySign = \"false\"\n                OutputType = \"Library\"\n                PreBuildEvent = \"\"\n                PostBuildEvent = \"\"\n                RootNamespace = \"DotZLib\"\n                RunPostBuildEvent = \"OnBuildSuccess\"\n                StartupObject = \"\"\n            >\n                <Config\n                    Name = \"Debug\"\n                    AllowUnsafeBlocks = \"false\"\n                    BaseAddress = \"285212672\"\n                    CheckForOverflowUnderflow = \"false\"\n                    ConfigurationOverrideFile = \"\"\n                    DefineConstants = \"DEBUG;TRACE\"\n                    DocumentationFile = \"docs\\DotZLib.xml\"\n                    DebugSymbols = \"true\"\n                    FileAlignment = \"4096\"\n                    IncrementalBuild = \"false\"\n                    NoStdLib = \"false\"\n                    NoWarn = \"1591\"\n                    Optimize = \"false\"\n                    OutputPath = \"bin\\Debug\\\"\n                    RegisterForComInterop = \"false\"\n                    RemoveIntegerChecks = \"false\"\n                    TreatWarningsAsErrors = \"false\"\n                    WarningLevel = \"4\"\n                />\n                <Config\n                    Name = \"Release\"\n                    AllowUnsafeBlocks = \"false\"\n                    BaseAddress = \"285212672\"\n                    CheckForOverflowUnderflow = \"false\"\n                    ConfigurationOverrideFile = \"\"\n                    DefineConstants = \"TRACE\"\n                    DocumentationFile = \"docs\\DotZLib.xml\"\n                    DebugSymbols = \"false\"\n                    FileAlignment = \"4096\"\n                    IncrementalBuild = \"false\"\n                    NoStdLib = \"false\"\n                    NoWarn = \"\"\n                    Optimize = \"true\"\n                    OutputPath = \"bin\\Release\\\"\n                    RegisterForComInterop = \"false\"\n                    RemoveIntegerChecks = \"false\"\n                    TreatWarningsAsErrors = \"false\"\n                    WarningLevel = \"4\"\n                />\n            </Settings>\n            <References>\n                <Reference\n                    Name = \"System\"\n                    AssemblyName = \"System\"\n                    HintPath = \"C:\\WINNT\\Microsoft.NET\\Framework\\v1.1.4322\\System.dll\"\n                />\n                <Reference\n                    Name = \"System.Data\"\n                    AssemblyName = \"System.Data\"\n                    HintPath = \"C:\\WINNT\\Microsoft.NET\\Framework\\v1.1.4322\\System.Data.dll\"\n                />\n                <Reference\n                    Name = \"System.XML\"\n                    AssemblyName = \"System.Xml\"\n                    HintPath = \"C:\\WINNT\\Microsoft.NET\\Framework\\v1.1.4322\\System.XML.dll\"\n                />\n                <Reference\n                    Name = \"nunit.framework\"\n                    AssemblyName = \"nunit.framework\"\n                    HintPath = \"E:\\apps\\NUnit V2.1\\\\bin\\nunit.framework.dll\"\n                    AssemblyFolderKey = \"hklm\\dn\\nunit.framework\"\n                />\n            </References>\n        </Build>\n        <Files>\n            <Include>\n                <File\n                    RelPath = \"AssemblyInfo.cs\"\n                    SubType = \"Code\"\n                    BuildAction = \"Compile\"\n                />\n                <File\n                    RelPath = \"ChecksumImpl.cs\"\n                    SubType = \"Code\"\n                    BuildAction = \"Compile\"\n                />\n                <File\n                    RelPath = \"CircularBuffer.cs\"\n                    SubType = \"Code\"\n                    BuildAction = \"Compile\"\n                />\n                <File\n                    RelPath = \"CodecBase.cs\"\n                    SubType = \"Code\"\n                    BuildAction = \"Compile\"\n                />\n                <File\n                    RelPath = \"Deflater.cs\"\n                    SubType = \"Code\"\n                    BuildAction = \"Compile\"\n                />\n                <File\n                    RelPath = \"DotZLib.cs\"\n                    SubType = \"Code\"\n                    BuildAction = \"Compile\"\n                />\n                <File\n                    RelPath = \"GZipStream.cs\"\n                    SubType = \"Code\"\n                    BuildAction = \"Compile\"\n                />\n                <File\n                    RelPath = \"Inflater.cs\"\n                    SubType = \"Code\"\n                    BuildAction = \"Compile\"\n                />\n                <File\n                    RelPath = \"UnitTests.cs\"\n                    SubType = \"Code\"\n                    BuildAction = \"Compile\"\n                />\n            </Include>\n        </Files>\n    </CSHARP>\n</VisualStudioProject>\n\n"
  },
  {
    "path": "external/zlib/contrib/dotzlib/DotZLib/GZipStream.cs",
    "content": "//\n//  Copyright Henrik Ravn 2004\n//\n// Use, modification and distribution are subject to the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n\nusing System;\nusing System.IO;\nusing System.Runtime.InteropServices;\n\nnamespace DotZLib\n{\n\t/// <summary>\n\t/// Implements a compressed <see cref=\"Stream\"/>, in GZip (.gz) format.\n\t/// </summary>\n\tpublic class GZipStream : Stream, IDisposable\n\t{\n        #region Dll Imports\n        [DllImport(\"ZLIB1.dll\", CallingConvention=CallingConvention.Cdecl, CharSet=CharSet.Ansi)]\n        private static extern IntPtr gzopen(string name, string mode);\n\n        [DllImport(\"ZLIB1.dll\", CallingConvention=CallingConvention.Cdecl)]\n        private static extern int gzclose(IntPtr gzFile);\n\n        [DllImport(\"ZLIB1.dll\", CallingConvention=CallingConvention.Cdecl)]\n        private static extern int gzwrite(IntPtr gzFile, int data, int length);\n\n        [DllImport(\"ZLIB1.dll\", CallingConvention=CallingConvention.Cdecl)]\n        private static extern int gzread(IntPtr gzFile, int data, int length);\n\n        [DllImport(\"ZLIB1.dll\", CallingConvention=CallingConvention.Cdecl)]\n        private static extern int gzgetc(IntPtr gzFile);\n\n        [DllImport(\"ZLIB1.dll\", CallingConvention=CallingConvention.Cdecl)]\n        private static extern int gzputc(IntPtr gzFile, int c);\n\n        #endregion\n\n        #region Private data\n        private IntPtr _gzFile;\n        private bool _isDisposed = false;\n        private bool _isWriting;\n        #endregion\n\n        #region Constructors\n        /// <summary>\n        /// Creates a new file as a writeable GZipStream\n        /// </summary>\n        /// <param name=\"fileName\">The name of the compressed file to create</param>\n        /// <param name=\"level\">The compression level to use when adding data</param>\n        /// <exception cref=\"ZLibException\">If an error occurred in the internal zlib function</exception>\n\t\tpublic GZipStream(string fileName, CompressLevel level)\n\t\t{\n            _isWriting = true;\n            _gzFile = gzopen(fileName, String.Format(\"wb{0}\", (int)level));\n            if (_gzFile == IntPtr.Zero)\n                throw new ZLibException(-1, \"Could not open \" + fileName);\n\t\t}\n\n        /// <summary>\n        /// Opens an existing file as a readable GZipStream\n        /// </summary>\n        /// <param name=\"fileName\">The name of the file to open</param>\n        /// <exception cref=\"ZLibException\">If an error occurred in the internal zlib function</exception>\n        public GZipStream(string fileName)\n        {\n            _isWriting = false;\n            _gzFile = gzopen(fileName, \"rb\");\n            if (_gzFile == IntPtr.Zero)\n                throw new ZLibException(-1, \"Could not open \" + fileName);\n\n        }\n        #endregion\n\n        #region Access properties\n        /// <summary>\n        /// Returns true of this stream can be read from, false otherwise\n        /// </summary>\n        public override bool CanRead\n        {\n            get\n            {\n                return !_isWriting;\n            }\n        }\n\n\n        /// <summary>\n        /// Returns false.\n        /// </summary>\n        public override bool CanSeek\n        {\n            get\n            {\n                return false;\n            }\n        }\n\n        /// <summary>\n        /// Returns true if this tsream is writeable, false otherwise\n        /// </summary>\n        public override bool CanWrite\n        {\n            get\n            {\n                return _isWriting;\n            }\n        }\n        #endregion\n\n        #region Destructor & IDispose stuff\n\n        /// <summary>\n        /// Destroys this instance\n        /// </summary>\n        ~GZipStream()\n        {\n            cleanUp(false);\n        }\n\n        /// <summary>\n        /// Closes the external file handle\n        /// </summary>\n        public void Dispose()\n        {\n            cleanUp(true);\n        }\n\n        // Does the actual closing of the file handle.\n        private void cleanUp(bool isDisposing)\n        {\n            if (!_isDisposed)\n            {\n                gzclose(_gzFile);\n                _isDisposed = true;\n            }\n        }\n        #endregion\n\n        #region Basic reading and writing\n        /// <summary>\n        /// Attempts to read a number of bytes from the stream.\n        /// </summary>\n        /// <param name=\"buffer\">The destination data buffer</param>\n        /// <param name=\"offset\">The index of the first destination byte in <c>buffer</c></param>\n        /// <param name=\"count\">The number of bytes requested</param>\n        /// <returns>The number of bytes read</returns>\n        /// <exception cref=\"ArgumentNullException\">If <c>buffer</c> is null</exception>\n        /// <exception cref=\"ArgumentOutOfRangeException\">If <c>count</c> or <c>offset</c> are negative</exception>\n        /// <exception cref=\"ArgumentException\">If <c>offset</c>  + <c>count</c> is &gt; buffer.Length</exception>\n        /// <exception cref=\"NotSupportedException\">If this stream is not readable.</exception>\n        /// <exception cref=\"ObjectDisposedException\">If this stream has been disposed.</exception>\n        public override int Read(byte[] buffer, int offset, int count)\n        {\n            if (!CanRead) throw new NotSupportedException();\n            if (buffer == null) throw new ArgumentNullException();\n            if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException();\n            if ((offset+count) > buffer.Length) throw new ArgumentException();\n            if (_isDisposed) throw new ObjectDisposedException(\"GZipStream\");\n\n            GCHandle h = GCHandle.Alloc(buffer, GCHandleType.Pinned);\n            int result;\n            try\n            {\n                result = gzread(_gzFile, h.AddrOfPinnedObject().ToInt32() + offset, count);\n                if (result < 0)\n                    throw new IOException();\n            }\n            finally\n            {\n                h.Free();\n            }\n            return result;\n        }\n\n        /// <summary>\n        /// Attempts to read a single byte from the stream.\n        /// </summary>\n        /// <returns>The byte that was read, or -1 in case of error or End-Of-File</returns>\n        public override int ReadByte()\n        {\n            if (!CanRead) throw new NotSupportedException();\n            if (_isDisposed) throw new ObjectDisposedException(\"GZipStream\");\n            return gzgetc(_gzFile);\n        }\n\n        /// <summary>\n        /// Writes a number of bytes to the stream\n        /// </summary>\n        /// <param name=\"buffer\"></param>\n        /// <param name=\"offset\"></param>\n        /// <param name=\"count\"></param>\n        /// <exception cref=\"ArgumentNullException\">If <c>buffer</c> is null</exception>\n        /// <exception cref=\"ArgumentOutOfRangeException\">If <c>count</c> or <c>offset</c> are negative</exception>\n        /// <exception cref=\"ArgumentException\">If <c>offset</c>  + <c>count</c> is &gt; buffer.Length</exception>\n        /// <exception cref=\"NotSupportedException\">If this stream is not writeable.</exception>\n        /// <exception cref=\"ObjectDisposedException\">If this stream has been disposed.</exception>\n        public override void Write(byte[] buffer, int offset, int count)\n        {\n            if (!CanWrite) throw new NotSupportedException();\n            if (buffer == null) throw new ArgumentNullException();\n            if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException();\n            if ((offset+count) > buffer.Length) throw new ArgumentException();\n            if (_isDisposed) throw new ObjectDisposedException(\"GZipStream\");\n\n            GCHandle h = GCHandle.Alloc(buffer, GCHandleType.Pinned);\n            try\n            {\n                int result = gzwrite(_gzFile, h.AddrOfPinnedObject().ToInt32() + offset, count);\n                if (result < 0)\n                    throw new IOException();\n            }\n            finally\n            {\n                h.Free();\n            }\n        }\n\n        /// <summary>\n        /// Writes a single byte to the stream\n        /// </summary>\n        /// <param name=\"value\">The byte to add to the stream.</param>\n        /// <exception cref=\"NotSupportedException\">If this stream is not writeable.</exception>\n        /// <exception cref=\"ObjectDisposedException\">If this stream has been disposed.</exception>\n        public override void WriteByte(byte value)\n        {\n            if (!CanWrite) throw new NotSupportedException();\n            if (_isDisposed) throw new ObjectDisposedException(\"GZipStream\");\n\n            int result = gzputc(_gzFile, (int)value);\n            if (result < 0)\n                throw new IOException();\n        }\n        #endregion\n\n        #region Position & length stuff\n        /// <summary>\n        /// Not supported.\n        /// </summary>\n        /// <param name=\"value\"></param>\n        /// <exception cref=\"NotSupportedException\">Always thrown</exception>\n        public override void SetLength(long value)\n        {\n            throw new NotSupportedException();\n        }\n\n        /// <summary>\n        ///  Not suppported.\n        /// </summary>\n        /// <param name=\"offset\"></param>\n        /// <param name=\"origin\"></param>\n        /// <returns></returns>\n        /// <exception cref=\"NotSupportedException\">Always thrown</exception>\n        public override long Seek(long offset, SeekOrigin origin)\n        {\n            throw new NotSupportedException();\n        }\n\n        /// <summary>\n        /// Flushes the <c>GZipStream</c>.\n        /// </summary>\n        /// <remarks>In this implementation, this method does nothing. This is because excessive\n        /// flushing may degrade the achievable compression rates.</remarks>\n        public override void Flush()\n        {\n            // left empty on purpose\n        }\n\n        /// <summary>\n        /// Gets/sets the current position in the <c>GZipStream</c>. Not suppported.\n        /// </summary>\n        /// <remarks>In this implementation this property is not supported</remarks>\n        /// <exception cref=\"NotSupportedException\">Always thrown</exception>\n        public override long Position\n        {\n            get\n            {\n                throw new NotSupportedException();\n            }\n            set\n            {\n                throw new NotSupportedException();\n            }\n        }\n\n        /// <summary>\n        /// Gets the size of the stream. Not suppported.\n        /// </summary>\n        /// <remarks>In this implementation this property is not supported</remarks>\n        /// <exception cref=\"NotSupportedException\">Always thrown</exception>\n        public override long Length\n        {\n            get\n            {\n                throw new NotSupportedException();\n            }\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "external/zlib/contrib/dotzlib/DotZLib/Inflater.cs",
    "content": "//\n//  Copyright Henrik Ravn 2004\n//\n// Use, modification and distribution are subject to the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n\nusing System;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\n\nnamespace DotZLib\n{\n\n    /// <summary>\n    /// Implements a data decompressor, using the inflate algorithm in the ZLib dll\n    /// </summary>\n    public class Inflater : CodecBase\n\t{\n        #region Dll imports\n        [DllImport(\"ZLIB1.dll\", CallingConvention=CallingConvention.Cdecl, CharSet=CharSet.Ansi)]\n        private static extern int inflateInit_(ref ZStream sz, string vs, int size);\n\n        [DllImport(\"ZLIB1.dll\", CallingConvention=CallingConvention.Cdecl)]\n        private static extern int inflate(ref ZStream sz, int flush);\n\n        [DllImport(\"ZLIB1.dll\", CallingConvention=CallingConvention.Cdecl)]\n        private static extern int inflateReset(ref ZStream sz);\n\n        [DllImport(\"ZLIB1.dll\", CallingConvention=CallingConvention.Cdecl)]\n        private static extern int inflateEnd(ref ZStream sz);\n        #endregion\n\n        /// <summary>\n        /// Constructs an new instance of the <c>Inflater</c>\n        /// </summary>\n        public Inflater() : base()\n\t\t{\n            int retval = inflateInit_(ref _ztream, Info.Version, Marshal.SizeOf(_ztream));\n            if (retval != 0)\n                throw new ZLibException(retval, \"Could not initialize inflater\");\n\n            resetOutput();\n        }\n\n\n        /// <summary>\n        /// Adds more data to the codec to be processed.\n        /// </summary>\n        /// <param name=\"data\">Byte array containing the data to be added to the codec</param>\n        /// <param name=\"offset\">The index of the first byte to add from <c>data</c></param>\n        /// <param name=\"count\">The number of bytes to add</param>\n        /// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>\n        public override void Add(byte[] data, int offset, int count)\n        {\n            if (data == null) throw new ArgumentNullException();\n            if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException();\n            if ((offset+count) > data.Length) throw new ArgumentException();\n\n            int total = count;\n            int inputIndex = offset;\n            int err = 0;\n\n            while (err >= 0 && inputIndex < total)\n            {\n                copyInput(data, inputIndex, Math.Min(total - inputIndex, kBufferSize));\n                err = inflate(ref _ztream, (int)FlushTypes.None);\n                if (err == 0)\n                    while (_ztream.avail_out == 0)\n                    {\n                        OnDataAvailable();\n                        err = inflate(ref _ztream, (int)FlushTypes.None);\n                    }\n\n                inputIndex += (int)_ztream.total_in;\n            }\n            setChecksum( _ztream.adler );\n        }\n\n\n        /// <summary>\n        /// Finishes up any pending data that needs to be processed and handled.\n        /// </summary>\n        public override void Finish()\n        {\n            int err;\n            do\n            {\n                err = inflate(ref _ztream, (int)FlushTypes.Finish);\n                OnDataAvailable();\n            }\n            while (err == 0);\n            setChecksum( _ztream.adler );\n            inflateReset(ref _ztream);\n            resetOutput();\n        }\n\n        /// <summary>\n        /// Closes the internal zlib inflate stream\n        /// </summary>\n        protected override void CleanUp() { inflateEnd(ref _ztream); }\n\n\n\t}\n}\n"
  },
  {
    "path": "external/zlib/contrib/dotzlib/DotZLib/UnitTests.cs",
    "content": "//\n//  Copyright Henrik Ravn 2004\n//\n// Use, modification and distribution are subject to the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n\nusing System;\nusing System.Collections;\nusing System.IO;\n\n// uncomment the define below to include unit tests\n//#define nunit\n#if nunit\nusing NUnit.Framework;\n\n// Unit tests for the DotZLib class library\n// ----------------------------------------\n//\n// Use this with NUnit 2 from http://www.nunit.org\n//\n\nnamespace DotZLibTests\n{\n    using DotZLib;\n\n    // helper methods\n    internal class Utils\n    {\n        public static bool byteArrEqual( byte[] lhs, byte[] rhs )\n        {\n            if (lhs.Length != rhs.Length)\n                return false;\n            for (int i = lhs.Length-1; i >= 0; --i)\n                if (lhs[i] != rhs[i])\n                    return false;\n            return true;\n        }\n\n    }\n\n\n    [TestFixture]\n    public class CircBufferTests\n    {\n        #region Circular buffer tests\n        [Test]\n        public void SinglePutGet()\n        {\n            CircularBuffer buf = new CircularBuffer(10);\n            Assert.AreEqual( 0, buf.Size );\n            Assert.AreEqual( -1, buf.Get() );\n\n            Assert.IsTrue(buf.Put( 1 ));\n            Assert.AreEqual( 1, buf.Size );\n            Assert.AreEqual( 1, buf.Get() );\n            Assert.AreEqual( 0, buf.Size );\n            Assert.AreEqual( -1, buf.Get() );\n        }\n\n        [Test]\n        public void BlockPutGet()\n        {\n            CircularBuffer buf = new CircularBuffer(10);\n            byte[] arr = {1,2,3,4,5,6,7,8,9,10};\n            Assert.AreEqual( 10, buf.Put(arr,0,10) );\n            Assert.AreEqual( 10, buf.Size );\n            Assert.IsFalse( buf.Put(11) );\n            Assert.AreEqual( 1, buf.Get() );\n            Assert.IsTrue( buf.Put(11) );\n\n            byte[] arr2 = (byte[])arr.Clone();\n            Assert.AreEqual( 9, buf.Get(arr2,1,9) );\n            Assert.IsTrue( Utils.byteArrEqual(arr,arr2) );\n        }\n\n        #endregion\n    }\n\n    [TestFixture]\n    public class ChecksumTests\n    {\n        #region CRC32 Tests\n        [Test]\n        public void CRC32_Null()\n        {\n            CRC32Checksum crc32 = new CRC32Checksum();\n            Assert.AreEqual( 0, crc32.Value );\n\n            crc32 = new CRC32Checksum(1);\n            Assert.AreEqual( 1, crc32.Value );\n\n            crc32 = new CRC32Checksum(556);\n            Assert.AreEqual( 556, crc32.Value );\n        }\n\n        [Test]\n        public void CRC32_Data()\n        {\n            CRC32Checksum crc32 = new CRC32Checksum();\n            byte[] data = { 1,2,3,4,5,6,7 };\n            crc32.Update(data);\n            Assert.AreEqual( 0x70e46888, crc32.Value  );\n\n            crc32 = new CRC32Checksum();\n            crc32.Update(\"penguin\");\n            Assert.AreEqual( 0x0e5c1a120, crc32.Value );\n\n            crc32 = new CRC32Checksum(1);\n            crc32.Update(\"penguin\");\n            Assert.AreEqual(0x43b6aa94, crc32.Value);\n\n        }\n        #endregion\n\n        #region Adler tests\n\n        [Test]\n        public void Adler_Null()\n        {\n            AdlerChecksum adler = new AdlerChecksum();\n            Assert.AreEqual(0, adler.Value);\n\n            adler = new AdlerChecksum(1);\n            Assert.AreEqual( 1, adler.Value );\n\n            adler = new AdlerChecksum(556);\n            Assert.AreEqual( 556, adler.Value );\n        }\n\n        [Test]\n        public void Adler_Data()\n        {\n            AdlerChecksum adler = new AdlerChecksum(1);\n            byte[] data = { 1,2,3,4,5,6,7 };\n            adler.Update(data);\n            Assert.AreEqual( 0x5b001d, adler.Value  );\n\n            adler = new AdlerChecksum();\n            adler.Update(\"penguin\");\n            Assert.AreEqual(0x0bcf02f6, adler.Value );\n\n            adler = new AdlerChecksum(1);\n            adler.Update(\"penguin\");\n            Assert.AreEqual(0x0bd602f7, adler.Value);\n\n        }\n        #endregion\n    }\n\n    [TestFixture]\n    public class InfoTests\n    {\n        #region Info tests\n        [Test]\n        public void Info_Version()\n        {\n            Info info = new Info();\n            Assert.AreEqual(\"1.2.5\", Info.Version);\n            Assert.AreEqual(32, info.SizeOfUInt);\n            Assert.AreEqual(32, info.SizeOfULong);\n            Assert.AreEqual(32, info.SizeOfPointer);\n            Assert.AreEqual(32, info.SizeOfOffset);\n        }\n        #endregion\n    }\n\n    [TestFixture]\n    public class DeflateInflateTests\n    {\n        #region Deflate tests\n        [Test]\n        public void Deflate_Init()\n        {\n            using (Deflater def = new Deflater(CompressLevel.Default))\n            {\n            }\n        }\n\n        private ArrayList compressedData = new ArrayList();\n        private uint adler1;\n\n        private ArrayList uncompressedData = new ArrayList();\n        private uint adler2;\n\n        public void CDataAvail(byte[] data, int startIndex, int count)\n        {\n            for (int i = 0; i < count; ++i)\n                compressedData.Add(data[i+startIndex]);\n        }\n\n        [Test]\n        public void Deflate_Compress()\n        {\n            compressedData.Clear();\n\n            byte[] testData = new byte[35000];\n            for (int i = 0; i < testData.Length; ++i)\n                testData[i] = 5;\n\n            using (Deflater def = new Deflater((CompressLevel)5))\n            {\n                def.DataAvailable += new DataAvailableHandler(CDataAvail);\n                def.Add(testData);\n                def.Finish();\n                adler1 = def.Checksum;\n            }\n        }\n        #endregion\n\n        #region Inflate tests\n        [Test]\n        public void Inflate_Init()\n        {\n            using (Inflater inf = new Inflater())\n            {\n            }\n        }\n\n        private void DDataAvail(byte[] data, int startIndex, int count)\n        {\n            for (int i = 0; i < count; ++i)\n                uncompressedData.Add(data[i+startIndex]);\n        }\n\n        [Test]\n        public void Inflate_Expand()\n        {\n            uncompressedData.Clear();\n\n            using (Inflater inf = new Inflater())\n            {\n                inf.DataAvailable += new DataAvailableHandler(DDataAvail);\n                inf.Add((byte[])compressedData.ToArray(typeof(byte)));\n                inf.Finish();\n                adler2 = inf.Checksum;\n            }\n            Assert.AreEqual( adler1, adler2 );\n        }\n        #endregion\n    }\n\n    [TestFixture]\n    public class GZipStreamTests\n    {\n        #region GZipStream test\n        [Test]\n        public void GZipStream_WriteRead()\n        {\n            using (GZipStream gzOut = new GZipStream(\"gzstream.gz\", CompressLevel.Best))\n            {\n                BinaryWriter writer = new BinaryWriter(gzOut);\n                writer.Write(\"hi there\");\n                writer.Write(Math.PI);\n                writer.Write(42);\n            }\n\n            using (GZipStream gzIn = new GZipStream(\"gzstream.gz\"))\n            {\n                BinaryReader reader = new BinaryReader(gzIn);\n                string s = reader.ReadString();\n                Assert.AreEqual(\"hi there\",s);\n                double d = reader.ReadDouble();\n                Assert.AreEqual(Math.PI, d);\n                int i = reader.ReadInt32();\n                Assert.AreEqual(42,i);\n            }\n\n        }\n        #endregion\n\t}\n}\n\n#endif\n"
  },
  {
    "path": "external/zlib/contrib/dotzlib/DotZLib.build",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<project name=\"DotZLib\" default=\"build\" basedir=\"./DotZLib\">\n\t<description>A .Net wrapper library around ZLib1.dll</description>\n\n\t<property name=\"nunit.location\" value=\"c:/program files/NUnit V2.1/bin\" />\n\t<property name=\"build.root\" value=\"bin\" />\n\n\t<property name=\"debug\" value=\"true\" />\n\t<property name=\"nunit\" value=\"true\" />\n\n\t<property name=\"build.folder\" value=\"${build.root}/debug/\" if=\"${debug}\" />\n\t<property name=\"build.folder\" value=\"${build.root}/release/\" unless=\"${debug}\" />\n\n\t<target name=\"clean\" description=\"Remove all generated files\">\n\t\t<delete dir=\"${build.root}\" failonerror=\"false\" />\n\t</target>\n\n\t<target name=\"build\" description=\"compiles the source code\">\n\n\t\t<mkdir dir=\"${build.folder}\" />\n\t\t<csc target=\"library\" output=\"${build.folder}DotZLib.dll\" debug=\"${debug}\">\n\t\t\t<references basedir=\"${nunit.location}\">\n\t\t\t\t<includes if=\"${nunit}\" name=\"nunit.framework.dll\" />\n\t\t\t</references>\n\t\t\t<sources>\n\t\t\t\t<includes name=\"*.cs\" />\n\t\t\t\t<excludes name=\"UnitTests.cs\" unless=\"${nunit}\" />\n\t\t\t</sources>\n\t\t\t<arg value=\"/d:nunit\" if=\"${nunit}\" />\n\t\t</csc>\n\t</target>\n\n</project>"
  },
  {
    "path": "external/zlib/contrib/dotzlib/DotZLib.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 8.00\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"DotZLib\", \"DotZLib\\DotZLib.csproj\", \"{BB1EE0B1-1808-46CB-B786-949D91117FC5}\"\n\tProjectSection(ProjectDependencies) = postProject\n\tEndProjectSection\nEndProject\nGlobal\n\tGlobalSection(SolutionConfiguration) = preSolution\n\t\tDebug = Debug\n\t\tRelease = Release\n\tEndGlobalSection\n\tGlobalSection(ProjectConfiguration) = postSolution\n\t\t{BB1EE0B1-1808-46CB-B786-949D91117FC5}.Debug.ActiveCfg = Debug|.NET\n\t\t{BB1EE0B1-1808-46CB-B786-949D91117FC5}.Debug.Build.0 = Debug|.NET\n\t\t{BB1EE0B1-1808-46CB-B786-949D91117FC5}.Release.ActiveCfg = Release|.NET\n\t\t{BB1EE0B1-1808-46CB-B786-949D91117FC5}.Release.Build.0 = Release|.NET\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityAddIns) = postSolution\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/zlib/contrib/dotzlib/LICENSE_1_0.txt",
    "content": "Boost Software License - Version 1.0 - August 17th, 2003\n\nPermission is hereby granted, free of charge, to any person or organization\nobtaining a copy of the software and accompanying documentation covered by\nthis license (the \"Software\") to use, reproduce, display, distribute,\nexecute, and transmit the Software, and to prepare derivative works of the\nSoftware, and to permit third-parties to whom the Software is furnished to\ndo so, all subject to the following:\n\nThe copyright notices in the Software and this entire statement, including\nthe above license grant, this restriction and the following disclaimer,\nmust be included in all copies of the Software, in whole or in part, and\nall derivative works of the Software, unless such copies or derivative\nworks are solely in the form of machine-executable object code generated by\na source language processor.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\nSHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\nFOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\nARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE."
  },
  {
    "path": "external/zlib/contrib/dotzlib/readme.txt",
    "content": "This directory contains a .Net wrapper class library for the ZLib1.dll\n\nThe wrapper includes support for inflating/deflating memory buffers,\n.Net streaming wrappers for the gz streams part of zlib, and wrappers\nfor the checksum parts of zlib. See DotZLib/UnitTests.cs for examples.\n\nDirectory structure:\n--------------------\n\nLICENSE_1_0.txt       - License file.\nreadme.txt            - This file.\nDotZLib.chm           - Class library documentation\nDotZLib.build         - NAnt build file\nDotZLib.sln           - Microsoft Visual Studio 2003 solution file\n\nDotZLib\\*.cs          - Source files for the class library\n\nUnit tests:\n-----------\nThe file DotZLib/UnitTests.cs contains unit tests for use with NUnit 2.1 or higher.\nTo include unit tests in the build, define nunit before building.\n\n\nBuild instructions:\n-------------------\n\n1. Using Visual Studio.Net 2003:\n   Open DotZLib.sln in VS.Net and build from there. Output file (DotZLib.dll)\n   will be found ./DotZLib/bin/release or ./DotZLib/bin/debug, depending on\n   you are building the release or debug version of the library. Check\n   DotZLib/UnitTests.cs for instructions on how to include unit tests in the\n   build.\n\n2. Using NAnt:\n   Open a command prompt with access to the build environment and run nant\n   in the same directory as the DotZLib.build file.\n   You can define 2 properties on the nant command-line to control the build:\n   debug={true|false} to toggle between release/debug builds (default=true).\n   nunit={true|false} to include or esclude unit tests (default=true).\n   Also the target clean will remove binaries.\n   Output file (DotZLib.dll) will be found in either ./DotZLib/bin/release\n   or ./DotZLib/bin/debug, depending on whether you are building the release\n   or debug version of the library.\n\n   Examples:\n     nant -D:debug=false -D:nunit=false\n       will build a release mode version of the library without unit tests.\n     nant\n       will build a debug version of the library with unit tests\n     nant clean\n       will remove all previously built files.\n\n\n---------------------------------\nCopyright (c) Henrik Ravn 2004\n\nUse, modification and distribution are subject to the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n"
  },
  {
    "path": "external/zlib/contrib/gcc_gvmat64/gvmat64.S",
    "content": "/*\n;uInt longest_match_x64(\n;    deflate_state *s,\n;    IPos cur_match);                             // current match \n\n; gvmat64.S -- Asm portion of the optimized longest_match for 32 bits x86_64\n;  (AMD64 on Athlon 64, Opteron, Phenom\n;     and Intel EM64T on Pentium 4 with EM64T, Pentium D, Core 2 Duo, Core I5/I7)\n; this file is translation from gvmat64.asm to GCC 4.x (for Linux, Mac XCode)\n; Copyright (C) 1995-2010 Jean-loup Gailly, Brian Raiter and Gilles Vollant.\n;\n; File written by Gilles Vollant, by converting to assembly the longest_match\n;  from Jean-loup Gailly in deflate.c of zLib and infoZip zip.\n;  and by taking inspiration on asm686 with masm, optimised assembly code\n;        from Brian Raiter, written 1998\n;\n;  This software is provided 'as-is', without any express or implied\n;  warranty.  In no event will the authors be held liable for any damages\n;  arising from the use of this software.\n;\n;  Permission is granted to anyone to use this software for any purpose,\n;  including commercial applications, and to alter it and redistribute it\n;  freely, subject to the following restrictions:\n;\n;  1. The origin of this software must not be misrepresented; you must not\n;     claim that you wrote the original software. If you use this software\n;     in a product, an acknowledgment in the product documentation would be\n;     appreciated but is not required.\n;  2. Altered source versions must be plainly marked as such, and must not be\n;     misrepresented as being the original software\n;  3. This notice may not be removed or altered from any source distribution.\n;\n;         http://www.zlib.net\n;         http://www.winimage.com/zLibDll\n;         http://www.muppetlabs.com/~breadbox/software/assembly.html\n;\n; to compile this file for zLib, I use option:\n;   gcc -c -arch x86_64 gvmat64.S\n\n\n;uInt longest_match(s, cur_match)\n;    deflate_state *s;\n;    IPos cur_match;                             // current match /\n;\n; with XCode for Mac, I had strange error with some jump on intel syntax\n; this is why BEFORE_JMP and AFTER_JMP are used\n */\n\n\n#define BEFORE_JMP .att_syntax\n#define AFTER_JMP .intel_syntax noprefix\n\n#ifndef NO_UNDERLINE\n#\tdefine\tmatch_init\t_match_init\n#\tdefine\tlongest_match\t_longest_match\n#endif\n\n.intel_syntax noprefix\n\n.globl\tmatch_init, longest_match\n.text\nlongest_match:\n\n\n\n#define LocalVarsSize 96\n/*\n; register used : rax,rbx,rcx,rdx,rsi,rdi,r8,r9,r10,r11,r12\n; free register :  r14,r15\n; register can be saved : rsp\n*/\n\n#define chainlenwmask     (rsp + 8 - LocalVarsSize)\n#define nicematch         (rsp + 16 - LocalVarsSize)\n\n#define save_rdi        (rsp + 24 - LocalVarsSize)\n#define save_rsi        (rsp + 32 - LocalVarsSize)\n#define save_rbx        (rsp + 40 - LocalVarsSize)\n#define save_rbp        (rsp + 48 - LocalVarsSize)\n#define save_r12        (rsp + 56 - LocalVarsSize)\n#define save_r13        (rsp + 64 - LocalVarsSize)\n#define save_r14        (rsp + 72 - LocalVarsSize)\n#define save_r15        (rsp + 80 - LocalVarsSize)\n\n\n/*\n;  all the +4 offsets are due to the addition of pending_buf_size (in zlib\n;  in the deflate_state structure since the asm code was first written\n;  (if you compile with zlib 1.0.4 or older, remove the +4).\n;  Note : these value are good with a 8 bytes boundary pack structure\n*/\n\n#define    MAX_MATCH              258\n#define    MIN_MATCH              3\n#define    MIN_LOOKAHEAD          (MAX_MATCH+MIN_MATCH+1)\n\n/*\n;;; Offsets for fields in the deflate_state structure. These numbers\n;;; are calculated from the definition of deflate_state, with the\n;;; assumption that the compiler will dword-align the fields. (Thus,\n;;; changing the definition of deflate_state could easily cause this\n;;; program to crash horribly, without so much as a warning at\n;;; compile time. Sigh.)\n\n;  all the +zlib1222add offsets are due to the addition of fields\n;  in zlib in the deflate_state structure since the asm code was first written\n;  (if you compile with zlib 1.0.4 or older, use \"zlib1222add equ (-4)\").\n;  (if you compile with zlib between 1.0.5 and 1.2.2.1, use \"zlib1222add equ 0\").\n;  if you compile with zlib 1.2.2.2 or later , use \"zlib1222add equ 8\").\n*/\n\n\n\n/* you can check the structure offset by running\n\n#include <stdlib.h>\n#include <stdio.h>\n#include \"deflate.h\"\n\nvoid print_depl()\n{\ndeflate_state ds;\ndeflate_state *s=&ds;\nprintf(\"size pointer=%u\\n\",(int)sizeof(void*));\n\nprintf(\"#define dsWSize         %u\\n\",(int)(((char*)&(s->w_size))-((char*)s)));\nprintf(\"#define dsWMask         %u\\n\",(int)(((char*)&(s->w_mask))-((char*)s)));\nprintf(\"#define dsWindow        %u\\n\",(int)(((char*)&(s->window))-((char*)s)));\nprintf(\"#define dsPrev          %u\\n\",(int)(((char*)&(s->prev))-((char*)s)));\nprintf(\"#define dsMatchLen      %u\\n\",(int)(((char*)&(s->match_length))-((char*)s)));\nprintf(\"#define dsPrevMatch     %u\\n\",(int)(((char*)&(s->prev_match))-((char*)s)));\nprintf(\"#define dsStrStart      %u\\n\",(int)(((char*)&(s->strstart))-((char*)s)));\nprintf(\"#define dsMatchStart    %u\\n\",(int)(((char*)&(s->match_start))-((char*)s)));\nprintf(\"#define dsLookahead     %u\\n\",(int)(((char*)&(s->lookahead))-((char*)s)));\nprintf(\"#define dsPrevLen       %u\\n\",(int)(((char*)&(s->prev_length))-((char*)s)));\nprintf(\"#define dsMaxChainLen   %u\\n\",(int)(((char*)&(s->max_chain_length))-((char*)s)));\nprintf(\"#define dsGoodMatch     %u\\n\",(int)(((char*)&(s->good_match))-((char*)s)));\nprintf(\"#define dsNiceMatch     %u\\n\",(int)(((char*)&(s->nice_match))-((char*)s)));\n}\n*/\n\n#define dsWSize          68\n#define dsWMask          76\n#define dsWindow         80\n#define dsPrev           96\n#define dsMatchLen       144\n#define dsPrevMatch      148\n#define dsStrStart       156\n#define dsMatchStart     160\n#define dsLookahead      164\n#define dsPrevLen        168\n#define dsMaxChainLen    172\n#define dsGoodMatch      188\n#define dsNiceMatch      192\n\n#define window_size      [ rcx + dsWSize]\n#define WMask            [ rcx + dsWMask]\n#define window_ad        [ rcx + dsWindow]\n#define prev_ad          [ rcx + dsPrev]\n#define strstart         [ rcx + dsStrStart]\n#define match_start      [ rcx + dsMatchStart]\n#define Lookahead        [ rcx + dsLookahead] //; 0ffffffffh on infozip\n#define prev_length      [ rcx + dsPrevLen]\n#define max_chain_length [ rcx + dsMaxChainLen]\n#define good_match       [ rcx + dsGoodMatch]\n#define nice_match       [ rcx + dsNiceMatch]\n\n/*\n; windows:\n; parameter 1 in rcx(deflate state s), param 2 in rdx (cur match)\n\n; see http://weblogs.asp.net/oldnewthing/archive/2004/01/14/58579.aspx and\n; http://msdn.microsoft.com/library/en-us/kmarch/hh/kmarch/64bitAMD_8e951dd2-ee77-4728-8702-55ce4b5dd24a.xml.asp\n;\n; All registers must be preserved across the call, except for\n;   rax, rcx, rdx, r8, r9, r10, and r11, which are scratch.\n\n;\n; gcc on macosx-linux:\n; see http://www.x86-64.org/documentation/abi-0.99.pdf\n; param 1 in rdi, param 2 in rsi\n; rbx, rsp, rbp, r12 to r15 must be preserved\n\n;;; Save registers that the compiler may be using, and adjust esp to\n;;; make room for our stack frame.\n\n\n;;; Retrieve the function arguments. r8d will hold cur_match\n;;; throughout the entire function. edx will hold the pointer to the\n;;; deflate_state structure during the function's setup (before\n;;; entering the main loop.\n\n; ms: parameter 1 in rcx (deflate_state* s), param 2 in edx -> r8 (cur match)\n; mac: param 1 in rdi, param 2 rsi\n; this clear high 32 bits of r8, which can be garbage in both r8 and rdx\n*/\n        mov [save_rbx],rbx\n        mov [save_rbp],rbp\n\n\n        mov rcx,rdi\n\n        mov r8d,esi\n\n\n        mov [save_r12],r12\n        mov [save_r13],r13\n        mov [save_r14],r14\n        mov [save_r15],r15\n\n\n//;;; uInt wmask = s->w_mask;\n//;;; unsigned chain_length = s->max_chain_length;\n//;;; if (s->prev_length >= s->good_match) {\n//;;;     chain_length >>= 2;\n//;;; }\n\n\n        mov edi, prev_length\n        mov esi, good_match\n        mov eax, WMask\n        mov ebx, max_chain_length\n        cmp edi, esi\n        jl  LastMatchGood\n        shr ebx, 2\nLastMatchGood:\n\n//;;; chainlen is decremented once beforehand so that the function can\n//;;; use the sign flag instead of the zero flag for the exit test.\n//;;; It is then shifted into the high word, to make room for the wmask\n//;;; value, which it will always accompany.\n\n        dec ebx\n        shl ebx, 16\n        or  ebx, eax\n\n//;;; on zlib only\n//;;; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;\n\n\n\n        mov eax, nice_match\n        mov [chainlenwmask], ebx\n        mov r10d, Lookahead\n        cmp r10d, eax\n        cmovnl r10d, eax\n        mov [nicematch],r10d\n\n\n\n//;;; register Bytef *scan = s->window + s->strstart;\n        mov r10, window_ad\n        mov ebp, strstart\n        lea r13, [r10 + rbp]\n\n//;;; Determine how many bytes the scan ptr is off from being\n//;;; dword-aligned.\n\n         mov r9,r13\n         neg r13\n         and r13,3\n\n//;;; IPos limit = s->strstart > (IPos)MAX_DIST(s) ?\n//;;;     s->strstart - (IPos)MAX_DIST(s) : NIL;\n\n\n        mov eax, window_size\n        sub eax, MIN_LOOKAHEAD\n\n\n        xor edi,edi\n        sub ebp, eax\n\n        mov r11d, prev_length\n\n        cmovng ebp,edi\n\n//;;; int best_len = s->prev_length;\n\n\n//;;; Store the sum of s->window + best_len in esi locally, and in esi.\n\n       lea  rsi,[r10+r11]\n\n//;;; register ush scan_start = *(ushf*)scan;\n//;;; register ush scan_end   = *(ushf*)(scan+best_len-1);\n//;;; Posf *prev = s->prev;\n\n        movzx r12d,word ptr [r9]\n        movzx ebx, word ptr [r9 + r11 - 1]\n\n        mov rdi, prev_ad\n\n//;;; Jump into the main loop.\n\n        mov edx, [chainlenwmask]\n\n        cmp bx,word ptr [rsi + r8 - 1]\n        jz  LookupLoopIsZero\n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\nLookupLoop1:\n        and r8d, edx\n\n        movzx   r8d, word ptr [rdi + r8*2]\n        cmp r8d, ebp\n        jbe LeaveNow\n\t\t\n\t\t\n\t\t\n        sub edx, 0x00010000\n\t\tBEFORE_JMP\n        js  LeaveNow\n\t\tAFTER_JMP\n\nLoopEntry1:\n        cmp bx,word ptr [rsi + r8 - 1]\n\t\tBEFORE_JMP\n        jz  LookupLoopIsZero\n\t\tAFTER_JMP\n\nLookupLoop2:\n        and r8d, edx\n\n        movzx   r8d, word ptr [rdi + r8*2]\n        cmp r8d, ebp\n\t\tBEFORE_JMP\n        jbe LeaveNow\n\t\tAFTER_JMP\n        sub edx, 0x00010000\n\t\tBEFORE_JMP\n        js  LeaveNow\n\t\tAFTER_JMP\n\nLoopEntry2:\n        cmp bx,word ptr [rsi + r8 - 1]\n\t\tBEFORE_JMP\n        jz  LookupLoopIsZero\n\t\tAFTER_JMP\n\nLookupLoop4:\n        and r8d, edx\n\n        movzx   r8d, word ptr [rdi + r8*2]\n        cmp r8d, ebp\n\t\tBEFORE_JMP\n        jbe LeaveNow\n\t\tAFTER_JMP\n        sub edx, 0x00010000\n\t\tBEFORE_JMP\n        js  LeaveNow\n\t\tAFTER_JMP\n\nLoopEntry4:\n\n        cmp bx,word ptr [rsi + r8 - 1]\n\t\tBEFORE_JMP\n        jnz LookupLoop1\n        jmp LookupLoopIsZero\n\t\tAFTER_JMP\n/*\n;;; do {\n;;;     match = s->window + cur_match;\n;;;     if (*(ushf*)(match+best_len-1) != scan_end ||\n;;;         *(ushf*)match != scan_start) continue;\n;;;     [...]\n;;; } while ((cur_match = prev[cur_match & wmask]) > limit\n;;;          && --chain_length != 0);\n;;;\n;;; Here is the inner loop of the function. The function will spend the\n;;; majority of its time in this loop, and majority of that time will\n;;; be spent in the first ten instructions.\n;;;\n;;; Within this loop:\n;;; ebx = scanend\n;;; r8d = curmatch\n;;; edx = chainlenwmask - i.e., ((chainlen << 16) | wmask)\n;;; esi = windowbestlen - i.e., (window + bestlen)\n;;; edi = prev\n;;; ebp = limit\n*/\n.balign 16\nLookupLoop:\n        and r8d, edx\n\n        movzx   r8d, word ptr [rdi + r8*2]\n        cmp r8d, ebp\n\t\tBEFORE_JMP\n        jbe LeaveNow\n\t\tAFTER_JMP\n        sub edx, 0x00010000\n\t\tBEFORE_JMP\n        js  LeaveNow\n\t\tAFTER_JMP\n\nLoopEntry:\n\n        cmp bx,word ptr [rsi + r8 - 1]\n\t\tBEFORE_JMP\n        jnz LookupLoop1\n\t\tAFTER_JMP\nLookupLoopIsZero:\n        cmp     r12w, word ptr [r10 + r8]\n\t\tBEFORE_JMP\n        jnz LookupLoop1\n\t\tAFTER_JMP\n\n\n//;;; Store the current value of chainlen.\n        mov [chainlenwmask], edx\n/*\n;;; Point edi to the string under scrutiny, and esi to the string we\n;;; are hoping to match it up with. In actuality, esi and edi are\n;;; both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and edx is\n;;; initialized to -(MAX_MATCH_8 - scanalign).\n*/\n        lea rsi,[r8+r10]\n        mov rdx, 0xfffffffffffffef8 //; -(MAX_MATCH_8)\n        lea rsi, [rsi + r13 + 0x0108] //;MAX_MATCH_8]\n        lea rdi, [r9 + r13 + 0x0108] //;MAX_MATCH_8]\n\n        prefetcht1 [rsi+rdx]\n        prefetcht1 [rdi+rdx]\n\n/*\n;;; Test the strings for equality, 8 bytes at a time. At the end,\n;;; adjust rdx so that it is offset to the exact byte that mismatched.\n;;;\n;;; We already know at this point that the first three bytes of the\n;;; strings match each other, and they can be safely passed over before\n;;; starting the compare loop. So what this code does is skip over 0-3\n;;; bytes, as much as necessary in order to dword-align the edi\n;;; pointer. (rsi will still be misaligned three times out of four.)\n;;;\n;;; It should be confessed that this loop usually does not represent\n;;; much of the total running time. Replacing it with a more\n;;; straightforward \"rep cmpsb\" would not drastically degrade\n;;; performance.\n*/\n\nLoopCmps:\n        mov rax, [rsi + rdx]\n        xor rax, [rdi + rdx]\n        jnz LeaveLoopCmps\n\n        mov rax, [rsi + rdx + 8]\n        xor rax, [rdi + rdx + 8]\n        jnz LeaveLoopCmps8\n\n\n        mov rax, [rsi + rdx + 8+8]\n        xor rax, [rdi + rdx + 8+8]\n        jnz LeaveLoopCmps16\n\n        add rdx,8+8+8\n\n\t\tBEFORE_JMP\n        jnz  LoopCmps\n        jmp  LenMaximum\n\t\tAFTER_JMP\n\t\t\nLeaveLoopCmps16: add rdx,8\nLeaveLoopCmps8: add rdx,8\nLeaveLoopCmps:\n\n        test    eax, 0x0000FFFF\n        jnz LenLower\n\n        test eax,0xffffffff\n\n        jnz LenLower32\n\n        add rdx,4\n        shr rax,32\n        or ax,ax\n\t\tBEFORE_JMP\n        jnz LenLower\n\t\tAFTER_JMP\n\nLenLower32:\n        shr eax,16\n        add rdx,2\n\t\t\nLenLower:\t\t\n        sub al, 1\n        adc rdx, 0\n//;;; Calculate the length of the match. If it is longer than MAX_MATCH,\n//;;; then automatically accept it as the best possible match and leave.\n\n        lea rax, [rdi + rdx]\n        sub rax, r9\n        cmp eax, MAX_MATCH\n\t\tBEFORE_JMP\n        jge LenMaximum\n\t\tAFTER_JMP\n/*\n;;; If the length of the match is not longer than the best match we\n;;; have so far, then forget it and return to the lookup loop.\n;///////////////////////////////////\n*/\n        cmp eax, r11d\n        jg  LongerMatch\n\n        lea rsi,[r10+r11]\n\n        mov rdi, prev_ad\n        mov edx, [chainlenwmask]\n\t\tBEFORE_JMP\n        jmp LookupLoop\n\t\tAFTER_JMP\n/*\n;;;         s->match_start = cur_match;\n;;;         best_len = len;\n;;;         if (len >= nice_match) break;\n;;;         scan_end = *(ushf*)(scan+best_len-1);\n*/\nLongerMatch:\n        mov r11d, eax\n        mov match_start, r8d\n        cmp eax, [nicematch]\n\t\tBEFORE_JMP\n        jge LeaveNow\n\t\tAFTER_JMP\n\n        lea rsi,[r10+rax]\n\n        movzx   ebx, word ptr [r9 + rax - 1]\n        mov rdi, prev_ad\n        mov edx, [chainlenwmask]\n\t\tBEFORE_JMP\n        jmp LookupLoop\n\t\tAFTER_JMP\n\n//;;; Accept the current string, with the maximum possible length.\n\nLenMaximum:\n        mov r11d,MAX_MATCH\n        mov match_start, r8d\n\n//;;; if ((uInt)best_len <= s->lookahead) return (uInt)best_len;\n//;;; return s->lookahead;\n\nLeaveNow:\n        mov eax, Lookahead\n        cmp r11d, eax\n        cmovng eax, r11d\n\n\n\n//;;; Restore the stack and return from whence we came.\n\n\n//        mov rsi,[save_rsi]\n//        mov rdi,[save_rdi]\n        mov rbx,[save_rbx]\n        mov rbp,[save_rbp]\n        mov r12,[save_r12]\n        mov r13,[save_r13]\n        mov r14,[save_r14]\n        mov r15,[save_r15]\n\n\n        ret 0\n//; please don't remove this string !\n//; Your can freely use gvmat64 in any free or commercial app\n//; but it is far better don't remove the string in the binary!\n //   db     0dh,0ah,\"asm686 with masm, optimised assembly code from Brian Raiter, written 1998, converted to amd 64 by Gilles Vollant 2005\",0dh,0ah,0\n\n\nmatch_init:\n  ret 0\n\n\n"
  },
  {
    "path": "external/zlib/contrib/infback9/README",
    "content": "See infback9.h for what this is and how to use it.\n"
  },
  {
    "path": "external/zlib/contrib/infback9/infback9.c",
    "content": "/* infback9.c -- inflate deflate64 data using a call-back interface\n * Copyright (C) 1995-2008 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n#include \"zutil.h\"\n#include \"infback9.h\"\n#include \"inftree9.h\"\n#include \"inflate9.h\"\n\n#define WSIZE 65536UL\n\n/*\n   strm provides memory allocation functions in zalloc and zfree, or\n   Z_NULL to use the library memory allocation functions.\n\n   window is a user-supplied window and output buffer that is 64K bytes.\n */\nint ZEXPORT inflateBack9Init_(strm, window, version, stream_size)\nz_stream FAR *strm;\nunsigned char FAR *window;\nconst char *version;\nint stream_size;\n{\n    struct inflate_state FAR *state;\n\n    if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||\n        stream_size != (int)(sizeof(z_stream)))\n        return Z_VERSION_ERROR;\n    if (strm == Z_NULL || window == Z_NULL)\n        return Z_STREAM_ERROR;\n    strm->msg = Z_NULL;                 /* in case we return an error */\n    if (strm->zalloc == (alloc_func)0) {\n        strm->zalloc = zcalloc;\n        strm->opaque = (voidpf)0;\n    }\n    if (strm->zfree == (free_func)0) strm->zfree = zcfree;\n    state = (struct inflate_state FAR *)ZALLOC(strm, 1,\n                                               sizeof(struct inflate_state));\n    if (state == Z_NULL) return Z_MEM_ERROR;\n    Tracev((stderr, \"inflate: allocated\\n\"));\n    strm->state = (voidpf)state;\n    state->window = window;\n    return Z_OK;\n}\n\n/*\n   Build and output length and distance decoding tables for fixed code\n   decoding.\n */\n#ifdef MAKEFIXED\n#include <stdio.h>\n\nvoid makefixed9(void)\n{\n    unsigned sym, bits, low, size;\n    code *next, *lenfix, *distfix;\n    struct inflate_state state;\n    code fixed[544];\n\n    /* literal/length table */\n    sym = 0;\n    while (sym < 144) state.lens[sym++] = 8;\n    while (sym < 256) state.lens[sym++] = 9;\n    while (sym < 280) state.lens[sym++] = 7;\n    while (sym < 288) state.lens[sym++] = 8;\n    next = fixed;\n    lenfix = next;\n    bits = 9;\n    inflate_table9(LENS, state.lens, 288, &(next), &(bits), state.work);\n\n    /* distance table */\n    sym = 0;\n    while (sym < 32) state.lens[sym++] = 5;\n    distfix = next;\n    bits = 5;\n    inflate_table9(DISTS, state.lens, 32, &(next), &(bits), state.work);\n\n    /* write tables */\n    puts(\"    /* inffix9.h -- table for decoding deflate64 fixed codes\");\n    puts(\"     * Generated automatically by makefixed9().\");\n    puts(\"     */\");\n    puts(\"\");\n    puts(\"    /* WARNING: this file should *not* be used by applications.\");\n    puts(\"       It is part of the implementation of this library and is\");\n    puts(\"       subject to change. Applications should only use zlib.h.\");\n    puts(\"     */\");\n    puts(\"\");\n    size = 1U << 9;\n    printf(\"    static const code lenfix[%u] = {\", size);\n    low = 0;\n    for (;;) {\n        if ((low % 6) == 0) printf(\"\\n        \");\n        printf(\"{%u,%u,%d}\", lenfix[low].op, lenfix[low].bits,\n               lenfix[low].val);\n        if (++low == size) break;\n        putchar(',');\n    }\n    puts(\"\\n    };\");\n    size = 1U << 5;\n    printf(\"\\n    static const code distfix[%u] = {\", size);\n    low = 0;\n    for (;;) {\n        if ((low % 5) == 0) printf(\"\\n        \");\n        printf(\"{%u,%u,%d}\", distfix[low].op, distfix[low].bits,\n               distfix[low].val);\n        if (++low == size) break;\n        putchar(',');\n    }\n    puts(\"\\n    };\");\n}\n#endif /* MAKEFIXED */\n\n/* Macros for inflateBack(): */\n\n/* Clear the input bit accumulator */\n#define INITBITS() \\\n    do { \\\n        hold = 0; \\\n        bits = 0; \\\n    } while (0)\n\n/* Assure that some input is available.  If input is requested, but denied,\n   then return a Z_BUF_ERROR from inflateBack(). */\n#define PULL() \\\n    do { \\\n        if (have == 0) { \\\n            have = in(in_desc, &next); \\\n            if (have == 0) { \\\n                next = Z_NULL; \\\n                ret = Z_BUF_ERROR; \\\n                goto inf_leave; \\\n            } \\\n        } \\\n    } while (0)\n\n/* Get a byte of input into the bit accumulator, or return from inflateBack()\n   with an error if there is no input available. */\n#define PULLBYTE() \\\n    do { \\\n        PULL(); \\\n        have--; \\\n        hold += (unsigned long)(*next++) << bits; \\\n        bits += 8; \\\n    } while (0)\n\n/* Assure that there are at least n bits in the bit accumulator.  If there is\n   not enough available input to do that, then return from inflateBack() with\n   an error. */\n#define NEEDBITS(n) \\\n    do { \\\n        while (bits < (unsigned)(n)) \\\n            PULLBYTE(); \\\n    } while (0)\n\n/* Return the low n bits of the bit accumulator (n <= 16) */\n#define BITS(n) \\\n    ((unsigned)hold & ((1U << (n)) - 1))\n\n/* Remove n bits from the bit accumulator */\n#define DROPBITS(n) \\\n    do { \\\n        hold >>= (n); \\\n        bits -= (unsigned)(n); \\\n    } while (0)\n\n/* Remove zero to seven bits as needed to go to a byte boundary */\n#define BYTEBITS() \\\n    do { \\\n        hold >>= bits & 7; \\\n        bits -= bits & 7; \\\n    } while (0)\n\n/* Assure that some output space is available, by writing out the window\n   if it's full.  If the write fails, return from inflateBack() with a\n   Z_BUF_ERROR. */\n#define ROOM() \\\n    do { \\\n        if (left == 0) { \\\n            put = window; \\\n            left = WSIZE; \\\n            wrap = 1; \\\n            if (out(out_desc, put, (unsigned)left)) { \\\n                ret = Z_BUF_ERROR; \\\n                goto inf_leave; \\\n            } \\\n        } \\\n    } while (0)\n\n/*\n   strm provides the memory allocation functions and window buffer on input,\n   and provides information on the unused input on return.  For Z_DATA_ERROR\n   returns, strm will also provide an error message.\n\n   in() and out() are the call-back input and output functions.  When\n   inflateBack() needs more input, it calls in().  When inflateBack() has\n   filled the window with output, or when it completes with data in the\n   window, it calls out() to write out the data.  The application must not\n   change the provided input until in() is called again or inflateBack()\n   returns.  The application must not change the window/output buffer until\n   inflateBack() returns.\n\n   in() and out() are called with a descriptor parameter provided in the\n   inflateBack() call.  This parameter can be a structure that provides the\n   information required to do the read or write, as well as accumulated\n   information on the input and output such as totals and check values.\n\n   in() should return zero on failure.  out() should return non-zero on\n   failure.  If either in() or out() fails, than inflateBack() returns a\n   Z_BUF_ERROR.  strm->next_in can be checked for Z_NULL to see whether it\n   was in() or out() that caused in the error.  Otherwise,  inflateBack()\n   returns Z_STREAM_END on success, Z_DATA_ERROR for an deflate format\n   error, or Z_MEM_ERROR if it could not allocate memory for the state.\n   inflateBack() can also return Z_STREAM_ERROR if the input parameters\n   are not correct, i.e. strm is Z_NULL or the state was not initialized.\n */\nint ZEXPORT inflateBack9(strm, in, in_desc, out, out_desc)\nz_stream FAR *strm;\nin_func in;\nvoid FAR *in_desc;\nout_func out;\nvoid FAR *out_desc;\n{\n    struct inflate_state FAR *state;\n    unsigned char FAR *next;    /* next input */\n    unsigned char FAR *put;     /* next output */\n    unsigned have;              /* available input */\n    unsigned long left;         /* available output */\n    inflate_mode mode;          /* current inflate mode */\n    int lastblock;              /* true if processing last block */\n    int wrap;                   /* true if the window has wrapped */\n    unsigned long write;        /* window write index */\n    unsigned char FAR *window;  /* allocated sliding window, if needed */\n    unsigned long hold;         /* bit buffer */\n    unsigned bits;              /* bits in bit buffer */\n    unsigned extra;             /* extra bits needed */\n    unsigned long length;       /* literal or length of data to copy */\n    unsigned long offset;       /* distance back to copy string from */\n    unsigned long copy;         /* number of stored or match bytes to copy */\n    unsigned char FAR *from;    /* where to copy match bytes from */\n    code const FAR *lencode;    /* starting table for length/literal codes */\n    code const FAR *distcode;   /* starting table for distance codes */\n    unsigned lenbits;           /* index bits for lencode */\n    unsigned distbits;          /* index bits for distcode */\n    code here;                  /* current decoding table entry */\n    code last;                  /* parent table entry */\n    unsigned len;               /* length to copy for repeats, bits to drop */\n    int ret;                    /* return code */\n    static const unsigned short order[19] = /* permutation of code lengths */\n        {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};\n#include \"inffix9.h\"\n\n    /* Check that the strm exists and that the state was initialized */\n    if (strm == Z_NULL || strm->state == Z_NULL)\n        return Z_STREAM_ERROR;\n    state = (struct inflate_state FAR *)strm->state;\n\n    /* Reset the state */\n    strm->msg = Z_NULL;\n    mode = TYPE;\n    lastblock = 0;\n    write = 0;\n    wrap = 0;\n    window = state->window;\n    next = strm->next_in;\n    have = next != Z_NULL ? strm->avail_in : 0;\n    hold = 0;\n    bits = 0;\n    put = window;\n    left = WSIZE;\n    lencode = Z_NULL;\n    distcode = Z_NULL;\n\n    /* Inflate until end of block marked as last */\n    for (;;)\n        switch (mode) {\n        case TYPE:\n            /* determine and dispatch block type */\n            if (lastblock) {\n                BYTEBITS();\n                mode = DONE;\n                break;\n            }\n            NEEDBITS(3);\n            lastblock = BITS(1);\n            DROPBITS(1);\n            switch (BITS(2)) {\n            case 0:                             /* stored block */\n                Tracev((stderr, \"inflate:     stored block%s\\n\",\n                        lastblock ? \" (last)\" : \"\"));\n                mode = STORED;\n                break;\n            case 1:                             /* fixed block */\n                lencode = lenfix;\n                lenbits = 9;\n                distcode = distfix;\n                distbits = 5;\n                Tracev((stderr, \"inflate:     fixed codes block%s\\n\",\n                        lastblock ? \" (last)\" : \"\"));\n                mode = LEN;                     /* decode codes */\n                break;\n            case 2:                             /* dynamic block */\n                Tracev((stderr, \"inflate:     dynamic codes block%s\\n\",\n                        lastblock ? \" (last)\" : \"\"));\n                mode = TABLE;\n                break;\n            case 3:\n                strm->msg = (char *)\"invalid block type\";\n                mode = BAD;\n            }\n            DROPBITS(2);\n            break;\n\n        case STORED:\n            /* get and verify stored block length */\n            BYTEBITS();                         /* go to byte boundary */\n            NEEDBITS(32);\n            if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {\n                strm->msg = (char *)\"invalid stored block lengths\";\n                mode = BAD;\n                break;\n            }\n            length = (unsigned)hold & 0xffff;\n            Tracev((stderr, \"inflate:       stored length %lu\\n\",\n                    length));\n            INITBITS();\n\n            /* copy stored block from input to output */\n            while (length != 0) {\n                copy = length;\n                PULL();\n                ROOM();\n                if (copy > have) copy = have;\n                if (copy > left) copy = left;\n                zmemcpy(put, next, copy);\n                have -= copy;\n                next += copy;\n                left -= copy;\n                put += copy;\n                length -= copy;\n            }\n            Tracev((stderr, \"inflate:       stored end\\n\"));\n            mode = TYPE;\n            break;\n\n        case TABLE:\n            /* get dynamic table entries descriptor */\n            NEEDBITS(14);\n            state->nlen = BITS(5) + 257;\n            DROPBITS(5);\n            state->ndist = BITS(5) + 1;\n            DROPBITS(5);\n            state->ncode = BITS(4) + 4;\n            DROPBITS(4);\n            if (state->nlen > 286) {\n                strm->msg = (char *)\"too many length symbols\";\n                mode = BAD;\n                break;\n            }\n            Tracev((stderr, \"inflate:       table sizes ok\\n\"));\n\n            /* get code length code lengths (not a typo) */\n            state->have = 0;\n            while (state->have < state->ncode) {\n                NEEDBITS(3);\n                state->lens[order[state->have++]] = (unsigned short)BITS(3);\n                DROPBITS(3);\n            }\n            while (state->have < 19)\n                state->lens[order[state->have++]] = 0;\n            state->next = state->codes;\n            lencode = (code const FAR *)(state->next);\n            lenbits = 7;\n            ret = inflate_table9(CODES, state->lens, 19, &(state->next),\n                                &(lenbits), state->work);\n            if (ret) {\n                strm->msg = (char *)\"invalid code lengths set\";\n                mode = BAD;\n                break;\n            }\n            Tracev((stderr, \"inflate:       code lengths ok\\n\"));\n\n            /* get length and distance code code lengths */\n            state->have = 0;\n            while (state->have < state->nlen + state->ndist) {\n                for (;;) {\n                    here = lencode[BITS(lenbits)];\n                    if ((unsigned)(here.bits) <= bits) break;\n                    PULLBYTE();\n                }\n                if (here.val < 16) {\n                    NEEDBITS(here.bits);\n                    DROPBITS(here.bits);\n                    state->lens[state->have++] = here.val;\n                }\n                else {\n                    if (here.val == 16) {\n                        NEEDBITS(here.bits + 2);\n                        DROPBITS(here.bits);\n                        if (state->have == 0) {\n                            strm->msg = (char *)\"invalid bit length repeat\";\n                            mode = BAD;\n                            break;\n                        }\n                        len = (unsigned)(state->lens[state->have - 1]);\n                        copy = 3 + BITS(2);\n                        DROPBITS(2);\n                    }\n                    else if (here.val == 17) {\n                        NEEDBITS(here.bits + 3);\n                        DROPBITS(here.bits);\n                        len = 0;\n                        copy = 3 + BITS(3);\n                        DROPBITS(3);\n                    }\n                    else {\n                        NEEDBITS(here.bits + 7);\n                        DROPBITS(here.bits);\n                        len = 0;\n                        copy = 11 + BITS(7);\n                        DROPBITS(7);\n                    }\n                    if (state->have + copy > state->nlen + state->ndist) {\n                        strm->msg = (char *)\"invalid bit length repeat\";\n                        mode = BAD;\n                        break;\n                    }\n                    while (copy--)\n                        state->lens[state->have++] = (unsigned short)len;\n                }\n            }\n\n            /* handle error breaks in while */\n            if (mode == BAD) break;\n\n            /* check for end-of-block code (better have one) */\n            if (state->lens[256] == 0) {\n                strm->msg = (char *)\"invalid code -- missing end-of-block\";\n                mode = BAD;\n                break;\n            }\n\n            /* build code tables -- note: do not change the lenbits or distbits\n               values here (9 and 6) without reading the comments in inftree9.h\n               concerning the ENOUGH constants, which depend on those values */\n            state->next = state->codes;\n            lencode = (code const FAR *)(state->next);\n            lenbits = 9;\n            ret = inflate_table9(LENS, state->lens, state->nlen,\n                            &(state->next), &(lenbits), state->work);\n            if (ret) {\n                strm->msg = (char *)\"invalid literal/lengths set\";\n                mode = BAD;\n                break;\n            }\n            distcode = (code const FAR *)(state->next);\n            distbits = 6;\n            ret = inflate_table9(DISTS, state->lens + state->nlen,\n                            state->ndist, &(state->next), &(distbits),\n                            state->work);\n            if (ret) {\n                strm->msg = (char *)\"invalid distances set\";\n                mode = BAD;\n                break;\n            }\n            Tracev((stderr, \"inflate:       codes ok\\n\"));\n            mode = LEN;\n\n        case LEN:\n            /* get a literal, length, or end-of-block code */\n            for (;;) {\n                here = lencode[BITS(lenbits)];\n                if ((unsigned)(here.bits) <= bits) break;\n                PULLBYTE();\n            }\n            if (here.op && (here.op & 0xf0) == 0) {\n                last = here;\n                for (;;) {\n                    here = lencode[last.val +\n                            (BITS(last.bits + last.op) >> last.bits)];\n                    if ((unsigned)(last.bits + here.bits) <= bits) break;\n                    PULLBYTE();\n                }\n                DROPBITS(last.bits);\n            }\n            DROPBITS(here.bits);\n            length = (unsigned)here.val;\n\n            /* process literal */\n            if (here.op == 0) {\n                Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n                        \"inflate:         literal '%c'\\n\" :\n                        \"inflate:         literal 0x%02x\\n\", here.val));\n                ROOM();\n                *put++ = (unsigned char)(length);\n                left--;\n                mode = LEN;\n                break;\n            }\n\n            /* process end of block */\n            if (here.op & 32) {\n                Tracevv((stderr, \"inflate:         end of block\\n\"));\n                mode = TYPE;\n                break;\n            }\n\n            /* invalid code */\n            if (here.op & 64) {\n                strm->msg = (char *)\"invalid literal/length code\";\n                mode = BAD;\n                break;\n            }\n\n            /* length code -- get extra bits, if any */\n            extra = (unsigned)(here.op) & 31;\n            if (extra != 0) {\n                NEEDBITS(extra);\n                length += BITS(extra);\n                DROPBITS(extra);\n            }\n            Tracevv((stderr, \"inflate:         length %lu\\n\", length));\n\n            /* get distance code */\n            for (;;) {\n                here = distcode[BITS(distbits)];\n                if ((unsigned)(here.bits) <= bits) break;\n                PULLBYTE();\n            }\n            if ((here.op & 0xf0) == 0) {\n                last = here;\n                for (;;) {\n                    here = distcode[last.val +\n                            (BITS(last.bits + last.op) >> last.bits)];\n                    if ((unsigned)(last.bits + here.bits) <= bits) break;\n                    PULLBYTE();\n                }\n                DROPBITS(last.bits);\n            }\n            DROPBITS(here.bits);\n            if (here.op & 64) {\n                strm->msg = (char *)\"invalid distance code\";\n                mode = BAD;\n                break;\n            }\n            offset = (unsigned)here.val;\n\n            /* get distance extra bits, if any */\n            extra = (unsigned)(here.op) & 15;\n            if (extra != 0) {\n                NEEDBITS(extra);\n                offset += BITS(extra);\n                DROPBITS(extra);\n            }\n            if (offset > WSIZE - (wrap ? 0: left)) {\n                strm->msg = (char *)\"invalid distance too far back\";\n                mode = BAD;\n                break;\n            }\n            Tracevv((stderr, \"inflate:         distance %lu\\n\", offset));\n\n            /* copy match from window to output */\n            do {\n                ROOM();\n                copy = WSIZE - offset;\n                if (copy < left) {\n                    from = put + copy;\n                    copy = left - copy;\n                }\n                else {\n                    from = put - offset;\n                    copy = left;\n                }\n                if (copy > length) copy = length;\n                length -= copy;\n                left -= copy;\n                do {\n                    *put++ = *from++;\n                } while (--copy);\n            } while (length != 0);\n            break;\n\n        case DONE:\n            /* inflate stream terminated properly -- write leftover output */\n            ret = Z_STREAM_END;\n            if (left < WSIZE) {\n                if (out(out_desc, window, (unsigned)(WSIZE - left)))\n                    ret = Z_BUF_ERROR;\n            }\n            goto inf_leave;\n\n        case BAD:\n            ret = Z_DATA_ERROR;\n            goto inf_leave;\n\n        default:                /* can't happen, but makes compilers happy */\n            ret = Z_STREAM_ERROR;\n            goto inf_leave;\n        }\n\n    /* Return unused input */\n  inf_leave:\n    strm->next_in = next;\n    strm->avail_in = have;\n    return ret;\n}\n\nint ZEXPORT inflateBack9End(strm)\nz_stream FAR *strm;\n{\n    if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)\n        return Z_STREAM_ERROR;\n    ZFREE(strm, strm->state);\n    strm->state = Z_NULL;\n    Tracev((stderr, \"inflate: end\\n\"));\n    return Z_OK;\n}\n"
  },
  {
    "path": "external/zlib/contrib/infback9/infback9.h",
    "content": "/* infback9.h -- header for using inflateBack9 functions\n * Copyright (C) 2003 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n/*\n * This header file and associated patches provide a decoder for PKWare's\n * undocumented deflate64 compression method (method 9).  Use with infback9.c,\n * inftree9.h, inftree9.c, and inffix9.h.  These patches are not supported.\n * This should be compiled with zlib, since it uses zutil.h and zutil.o.\n * This code has not yet been tested on 16-bit architectures.  See the\n * comments in zlib.h for inflateBack() usage.  These functions are used\n * identically, except that there is no windowBits parameter, and a 64K\n * window must be provided.  Also if int's are 16 bits, then a zero for\n * the third parameter of the \"out\" function actually means 65536UL.\n * zlib.h must be included before this header file.\n */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nZEXTERN int ZEXPORT inflateBack9 OF((z_stream FAR *strm,\n                                    in_func in, void FAR *in_desc,\n                                    out_func out, void FAR *out_desc));\nZEXTERN int ZEXPORT inflateBack9End OF((z_stream FAR *strm));\nZEXTERN int ZEXPORT inflateBack9Init_ OF((z_stream FAR *strm,\n                                         unsigned char FAR *window,\n                                         const char *version,\n                                         int stream_size));\n#define inflateBack9Init(strm, window) \\\n        inflateBack9Init_((strm), (window), \\\n        ZLIB_VERSION, sizeof(z_stream))\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "external/zlib/contrib/infback9/inffix9.h",
    "content": "    /* inffix9.h -- table for decoding deflate64 fixed codes\n     * Generated automatically by makefixed9().\n     */\n\n    /* WARNING: this file should *not* be used by applications.\n       It is part of the implementation of this library and is\n       subject to change. Applications should only use zlib.h.\n     */\n\n    static const code lenfix[512] = {\n        {96,7,0},{0,8,80},{0,8,16},{132,8,115},{130,7,31},{0,8,112},\n        {0,8,48},{0,9,192},{128,7,10},{0,8,96},{0,8,32},{0,9,160},\n        {0,8,0},{0,8,128},{0,8,64},{0,9,224},{128,7,6},{0,8,88},\n        {0,8,24},{0,9,144},{131,7,59},{0,8,120},{0,8,56},{0,9,208},\n        {129,7,17},{0,8,104},{0,8,40},{0,9,176},{0,8,8},{0,8,136},\n        {0,8,72},{0,9,240},{128,7,4},{0,8,84},{0,8,20},{133,8,227},\n        {131,7,43},{0,8,116},{0,8,52},{0,9,200},{129,7,13},{0,8,100},\n        {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},\n        {128,7,8},{0,8,92},{0,8,28},{0,9,152},{132,7,83},{0,8,124},\n        {0,8,60},{0,9,216},{130,7,23},{0,8,108},{0,8,44},{0,9,184},\n        {0,8,12},{0,8,140},{0,8,76},{0,9,248},{128,7,3},{0,8,82},\n        {0,8,18},{133,8,163},{131,7,35},{0,8,114},{0,8,50},{0,9,196},\n        {129,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2},{0,8,130},\n        {0,8,66},{0,9,228},{128,7,7},{0,8,90},{0,8,26},{0,9,148},\n        {132,7,67},{0,8,122},{0,8,58},{0,9,212},{130,7,19},{0,8,106},\n        {0,8,42},{0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},\n        {128,7,5},{0,8,86},{0,8,22},{65,8,0},{131,7,51},{0,8,118},\n        {0,8,54},{0,9,204},{129,7,15},{0,8,102},{0,8,38},{0,9,172},\n        {0,8,6},{0,8,134},{0,8,70},{0,9,236},{128,7,9},{0,8,94},\n        {0,8,30},{0,9,156},{132,7,99},{0,8,126},{0,8,62},{0,9,220},\n        {130,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142},\n        {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{133,8,131},\n        {130,7,31},{0,8,113},{0,8,49},{0,9,194},{128,7,10},{0,8,97},\n        {0,8,33},{0,9,162},{0,8,1},{0,8,129},{0,8,65},{0,9,226},\n        {128,7,6},{0,8,89},{0,8,25},{0,9,146},{131,7,59},{0,8,121},\n        {0,8,57},{0,9,210},{129,7,17},{0,8,105},{0,8,41},{0,9,178},\n        {0,8,9},{0,8,137},{0,8,73},{0,9,242},{128,7,4},{0,8,85},\n        {0,8,21},{144,8,3},{131,7,43},{0,8,117},{0,8,53},{0,9,202},\n        {129,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},\n        {0,8,69},{0,9,234},{128,7,8},{0,8,93},{0,8,29},{0,9,154},\n        {132,7,83},{0,8,125},{0,8,61},{0,9,218},{130,7,23},{0,8,109},\n        {0,8,45},{0,9,186},{0,8,13},{0,8,141},{0,8,77},{0,9,250},\n        {128,7,3},{0,8,83},{0,8,19},{133,8,195},{131,7,35},{0,8,115},\n        {0,8,51},{0,9,198},{129,7,11},{0,8,99},{0,8,35},{0,9,166},\n        {0,8,3},{0,8,131},{0,8,67},{0,9,230},{128,7,7},{0,8,91},\n        {0,8,27},{0,9,150},{132,7,67},{0,8,123},{0,8,59},{0,9,214},\n        {130,7,19},{0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},\n        {0,8,75},{0,9,246},{128,7,5},{0,8,87},{0,8,23},{77,8,0},\n        {131,7,51},{0,8,119},{0,8,55},{0,9,206},{129,7,15},{0,8,103},\n        {0,8,39},{0,9,174},{0,8,7},{0,8,135},{0,8,71},{0,9,238},\n        {128,7,9},{0,8,95},{0,8,31},{0,9,158},{132,7,99},{0,8,127},\n        {0,8,63},{0,9,222},{130,7,27},{0,8,111},{0,8,47},{0,9,190},\n        {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},\n        {0,8,16},{132,8,115},{130,7,31},{0,8,112},{0,8,48},{0,9,193},\n        {128,7,10},{0,8,96},{0,8,32},{0,9,161},{0,8,0},{0,8,128},\n        {0,8,64},{0,9,225},{128,7,6},{0,8,88},{0,8,24},{0,9,145},\n        {131,7,59},{0,8,120},{0,8,56},{0,9,209},{129,7,17},{0,8,104},\n        {0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72},{0,9,241},\n        {128,7,4},{0,8,84},{0,8,20},{133,8,227},{131,7,43},{0,8,116},\n        {0,8,52},{0,9,201},{129,7,13},{0,8,100},{0,8,36},{0,9,169},\n        {0,8,4},{0,8,132},{0,8,68},{0,9,233},{128,7,8},{0,8,92},\n        {0,8,28},{0,9,153},{132,7,83},{0,8,124},{0,8,60},{0,9,217},\n        {130,7,23},{0,8,108},{0,8,44},{0,9,185},{0,8,12},{0,8,140},\n        {0,8,76},{0,9,249},{128,7,3},{0,8,82},{0,8,18},{133,8,163},\n        {131,7,35},{0,8,114},{0,8,50},{0,9,197},{129,7,11},{0,8,98},\n        {0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229},\n        {128,7,7},{0,8,90},{0,8,26},{0,9,149},{132,7,67},{0,8,122},\n        {0,8,58},{0,9,213},{130,7,19},{0,8,106},{0,8,42},{0,9,181},\n        {0,8,10},{0,8,138},{0,8,74},{0,9,245},{128,7,5},{0,8,86},\n        {0,8,22},{65,8,0},{131,7,51},{0,8,118},{0,8,54},{0,9,205},\n        {129,7,15},{0,8,102},{0,8,38},{0,9,173},{0,8,6},{0,8,134},\n        {0,8,70},{0,9,237},{128,7,9},{0,8,94},{0,8,30},{0,9,157},\n        {132,7,99},{0,8,126},{0,8,62},{0,9,221},{130,7,27},{0,8,110},\n        {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},\n        {96,7,0},{0,8,81},{0,8,17},{133,8,131},{130,7,31},{0,8,113},\n        {0,8,49},{0,9,195},{128,7,10},{0,8,97},{0,8,33},{0,9,163},\n        {0,8,1},{0,8,129},{0,8,65},{0,9,227},{128,7,6},{0,8,89},\n        {0,8,25},{0,9,147},{131,7,59},{0,8,121},{0,8,57},{0,9,211},\n        {129,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9},{0,8,137},\n        {0,8,73},{0,9,243},{128,7,4},{0,8,85},{0,8,21},{144,8,3},\n        {131,7,43},{0,8,117},{0,8,53},{0,9,203},{129,7,13},{0,8,101},\n        {0,8,37},{0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},\n        {128,7,8},{0,8,93},{0,8,29},{0,9,155},{132,7,83},{0,8,125},\n        {0,8,61},{0,9,219},{130,7,23},{0,8,109},{0,8,45},{0,9,187},\n        {0,8,13},{0,8,141},{0,8,77},{0,9,251},{128,7,3},{0,8,83},\n        {0,8,19},{133,8,195},{131,7,35},{0,8,115},{0,8,51},{0,9,199},\n        {129,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131},\n        {0,8,67},{0,9,231},{128,7,7},{0,8,91},{0,8,27},{0,9,151},\n        {132,7,67},{0,8,123},{0,8,59},{0,9,215},{130,7,19},{0,8,107},\n        {0,8,43},{0,9,183},{0,8,11},{0,8,139},{0,8,75},{0,9,247},\n        {128,7,5},{0,8,87},{0,8,23},{77,8,0},{131,7,51},{0,8,119},\n        {0,8,55},{0,9,207},{129,7,15},{0,8,103},{0,8,39},{0,9,175},\n        {0,8,7},{0,8,135},{0,8,71},{0,9,239},{128,7,9},{0,8,95},\n        {0,8,31},{0,9,159},{132,7,99},{0,8,127},{0,8,63},{0,9,223},\n        {130,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},\n        {0,8,79},{0,9,255}\n    };\n\n    static const code distfix[32] = {\n        {128,5,1},{135,5,257},{131,5,17},{139,5,4097},{129,5,5},\n        {137,5,1025},{133,5,65},{141,5,16385},{128,5,3},{136,5,513},\n        {132,5,33},{140,5,8193},{130,5,9},{138,5,2049},{134,5,129},\n        {142,5,32769},{128,5,2},{135,5,385},{131,5,25},{139,5,6145},\n        {129,5,7},{137,5,1537},{133,5,97},{141,5,24577},{128,5,4},\n        {136,5,769},{132,5,49},{140,5,12289},{130,5,13},{138,5,3073},\n        {134,5,193},{142,5,49153}\n    };\n"
  },
  {
    "path": "external/zlib/contrib/infback9/inflate9.h",
    "content": "/* inflate9.h -- internal inflate state definition\n * Copyright (C) 1995-2003 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n/* WARNING: this file should *not* be used by applications. It is\n   part of the implementation of the compression library and is\n   subject to change. Applications should only use zlib.h.\n */\n\n/* Possible inflate modes between inflate() calls */\ntypedef enum {\n        TYPE,       /* i: waiting for type bits, including last-flag bit */\n        STORED,     /* i: waiting for stored size (length and complement) */\n        TABLE,      /* i: waiting for dynamic block table lengths */\n            LEN,        /* i: waiting for length/lit code */\n    DONE,       /* finished check, done -- remain here until reset */\n    BAD         /* got a data error -- remain here until reset */\n} inflate_mode;\n\n/*\n    State transitions between above modes -\n\n    (most modes can go to the BAD mode -- not shown for clarity)\n\n    Read deflate blocks:\n            TYPE -> STORED or TABLE or LEN or DONE\n            STORED -> TYPE\n            TABLE -> LENLENS -> CODELENS -> LEN\n    Read deflate codes:\n                LEN -> LEN or TYPE\n */\n\n/* state maintained between inflate() calls.  Approximately 7K bytes. */\nstruct inflate_state {\n        /* sliding window */\n    unsigned char FAR *window;  /* allocated sliding window, if needed */\n        /* dynamic table building */\n    unsigned ncode;             /* number of code length code lengths */\n    unsigned nlen;              /* number of length code lengths */\n    unsigned ndist;             /* number of distance code lengths */\n    unsigned have;              /* number of code lengths in lens[] */\n    code FAR *next;             /* next available space in codes[] */\n    unsigned short lens[320];   /* temporary storage for code lengths */\n    unsigned short work[288];   /* work area for code table building */\n    code codes[ENOUGH];         /* space for code tables */\n};\n"
  },
  {
    "path": "external/zlib/contrib/infback9/inftree9.c",
    "content": "/* inftree9.c -- generate Huffman trees for efficient decoding\n * Copyright (C) 1995-2010 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n#include \"zutil.h\"\n#include \"inftree9.h\"\n\n#define MAXBITS 15\n\nconst char inflate9_copyright[] =\n   \" inflate9 1.2.5 Copyright 1995-2010 Mark Adler \";\n/*\n  If you use the zlib library in a product, an acknowledgment is welcome\n  in the documentation of your product. If for some reason you cannot\n  include such an acknowledgment, I would appreciate that you keep this\n  copyright string in the executable of your product.\n */\n\n/*\n   Build a set of tables to decode the provided canonical Huffman code.\n   The code lengths are lens[0..codes-1].  The result starts at *table,\n   whose indices are 0..2^bits-1.  work is a writable array of at least\n   lens shorts, which is used as a work area.  type is the type of code\n   to be generated, CODES, LENS, or DISTS.  On return, zero is success,\n   -1 is an invalid code, and +1 means that ENOUGH isn't enough.  table\n   on return points to the next available entry's address.  bits is the\n   requested root table index bits, and on return it is the actual root\n   table index bits.  It will differ if the request is greater than the\n   longest code or if it is less than the shortest code.\n */\nint inflate_table9(type, lens, codes, table, bits, work)\ncodetype type;\nunsigned short FAR *lens;\nunsigned codes;\ncode FAR * FAR *table;\nunsigned FAR *bits;\nunsigned short FAR *work;\n{\n    unsigned len;               /* a code's length in bits */\n    unsigned sym;               /* index of code symbols */\n    unsigned min, max;          /* minimum and maximum code lengths */\n    unsigned root;              /* number of index bits for root table */\n    unsigned curr;              /* number of index bits for current table */\n    unsigned drop;              /* code bits to drop for sub-table */\n    int left;                   /* number of prefix codes available */\n    unsigned used;              /* code entries in table used */\n    unsigned huff;              /* Huffman code */\n    unsigned incr;              /* for incrementing code, index */\n    unsigned fill;              /* index for replicating entries */\n    unsigned low;               /* low bits for current root entry */\n    unsigned mask;              /* mask for low root bits */\n    code this;                  /* table entry for duplication */\n    code FAR *next;             /* next available space in table */\n    const unsigned short FAR *base;     /* base value table to use */\n    const unsigned short FAR *extra;    /* extra bits table to use */\n    int end;                    /* use base and extra for symbol > end */\n    unsigned short count[MAXBITS+1];    /* number of codes of each length */\n    unsigned short offs[MAXBITS+1];     /* offsets in table for each length */\n    static const unsigned short lbase[31] = { /* Length codes 257..285 base */\n        3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17,\n        19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115,\n        131, 163, 195, 227, 3, 0, 0};\n    static const unsigned short lext[31] = { /* Length codes 257..285 extra */\n        128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129,\n        130, 130, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132,\n        133, 133, 133, 133, 144, 73, 195};\n    static const unsigned short dbase[32] = { /* Distance codes 0..31 base */\n        1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49,\n        65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073,\n        4097, 6145, 8193, 12289, 16385, 24577, 32769, 49153};\n    static const unsigned short dext[32] = { /* Distance codes 0..31 extra */\n        128, 128, 128, 128, 129, 129, 130, 130, 131, 131, 132, 132,\n        133, 133, 134, 134, 135, 135, 136, 136, 137, 137, 138, 138,\n        139, 139, 140, 140, 141, 141, 142, 142};\n\n    /*\n       Process a set of code lengths to create a canonical Huffman code.  The\n       code lengths are lens[0..codes-1].  Each length corresponds to the\n       symbols 0..codes-1.  The Huffman code is generated by first sorting the\n       symbols by length from short to long, and retaining the symbol order\n       for codes with equal lengths.  Then the code starts with all zero bits\n       for the first code of the shortest length, and the codes are integer\n       increments for the same length, and zeros are appended as the length\n       increases.  For the deflate format, these bits are stored backwards\n       from their more natural integer increment ordering, and so when the\n       decoding tables are built in the large loop below, the integer codes\n       are incremented backwards.\n\n       This routine assumes, but does not check, that all of the entries in\n       lens[] are in the range 0..MAXBITS.  The caller must assure this.\n       1..MAXBITS is interpreted as that code length.  zero means that that\n       symbol does not occur in this code.\n\n       The codes are sorted by computing a count of codes for each length,\n       creating from that a table of starting indices for each length in the\n       sorted table, and then entering the symbols in order in the sorted\n       table.  The sorted table is work[], with that space being provided by\n       the caller.\n\n       The length counts are used for other purposes as well, i.e. finding\n       the minimum and maximum length codes, determining if there are any\n       codes at all, checking for a valid set of lengths, and looking ahead\n       at length counts to determine sub-table sizes when building the\n       decoding tables.\n     */\n\n    /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n    for (len = 0; len <= MAXBITS; len++)\n        count[len] = 0;\n    for (sym = 0; sym < codes; sym++)\n        count[lens[sym]]++;\n\n    /* bound code lengths, force root to be within code lengths */\n    root = *bits;\n    for (max = MAXBITS; max >= 1; max--)\n        if (count[max] != 0) break;\n    if (root > max) root = max;\n    if (max == 0) return -1;            /* no codes! */\n    for (min = 1; min <= MAXBITS; min++)\n        if (count[min] != 0) break;\n    if (root < min) root = min;\n\n    /* check for an over-subscribed or incomplete set of lengths */\n    left = 1;\n    for (len = 1; len <= MAXBITS; len++) {\n        left <<= 1;\n        left -= count[len];\n        if (left < 0) return -1;        /* over-subscribed */\n    }\n    if (left > 0 && (type == CODES || max != 1))\n        return -1;                      /* incomplete set */\n\n    /* generate offsets into symbol table for each length for sorting */\n    offs[1] = 0;\n    for (len = 1; len < MAXBITS; len++)\n        offs[len + 1] = offs[len] + count[len];\n\n    /* sort symbols by length, by symbol order within each length */\n    for (sym = 0; sym < codes; sym++)\n        if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym;\n\n    /*\n       Create and fill in decoding tables.  In this loop, the table being\n       filled is at next and has curr index bits.  The code being used is huff\n       with length len.  That code is converted to an index by dropping drop\n       bits off of the bottom.  For codes where len is less than drop + curr,\n       those top drop + curr - len bits are incremented through all values to\n       fill the table with replicated entries.\n\n       root is the number of index bits for the root table.  When len exceeds\n       root, sub-tables are created pointed to by the root entry with an index\n       of the low root bits of huff.  This is saved in low to check for when a\n       new sub-table should be started.  drop is zero when the root table is\n       being filled, and drop is root when sub-tables are being filled.\n\n       When a new sub-table is needed, it is necessary to look ahead in the\n       code lengths to determine what size sub-table is needed.  The length\n       counts are used for this, and so count[] is decremented as codes are\n       entered in the tables.\n\n       used keeps track of how many table entries have been allocated from the\n       provided *table space.  It is checked for LENS and DIST tables against\n       the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n       the initial root table size constants.  See the comments in inftree9.h\n       for more information.\n\n       sym increments through all symbols, and the loop terminates when\n       all codes of length max, i.e. all codes, have been processed.  This\n       routine permits incomplete codes, so another loop after this one fills\n       in the rest of the decoding tables with invalid code markers.\n     */\n\n    /* set up for code type */\n    switch (type) {\n    case CODES:\n        base = extra = work;    /* dummy value--not used */\n        end = 19;\n        break;\n    case LENS:\n        base = lbase;\n        base -= 257;\n        extra = lext;\n        extra -= 257;\n        end = 256;\n        break;\n    default:            /* DISTS */\n        base = dbase;\n        extra = dext;\n        end = -1;\n    }\n\n    /* initialize state for loop */\n    huff = 0;                   /* starting code */\n    sym = 0;                    /* starting code symbol */\n    len = min;                  /* starting code length */\n    next = *table;              /* current table to fill in */\n    curr = root;                /* current table index bits */\n    drop = 0;                   /* current bits to drop from code for index */\n    low = (unsigned)(-1);       /* trigger new sub-table when len > root */\n    used = 1U << root;          /* use root table entries */\n    mask = used - 1;            /* mask for comparing low */\n\n    /* check available table space */\n    if ((type == LENS && used >= ENOUGH_LENS) ||\n        (type == DISTS && used >= ENOUGH_DISTS))\n        return 1;\n\n    /* process all codes and make table entries */\n    for (;;) {\n        /* create table entry */\n        this.bits = (unsigned char)(len - drop);\n        if ((int)(work[sym]) < end) {\n            this.op = (unsigned char)0;\n            this.val = work[sym];\n        }\n        else if ((int)(work[sym]) > end) {\n            this.op = (unsigned char)(extra[work[sym]]);\n            this.val = base[work[sym]];\n        }\n        else {\n            this.op = (unsigned char)(32 + 64);         /* end of block */\n            this.val = 0;\n        }\n\n        /* replicate for those indices with low len bits equal to huff */\n        incr = 1U << (len - drop);\n        fill = 1U << curr;\n        do {\n            fill -= incr;\n            next[(huff >> drop) + fill] = this;\n        } while (fill != 0);\n\n        /* backwards increment the len-bit code huff */\n        incr = 1U << (len - 1);\n        while (huff & incr)\n            incr >>= 1;\n        if (incr != 0) {\n            huff &= incr - 1;\n            huff += incr;\n        }\n        else\n            huff = 0;\n\n        /* go to next symbol, update count, len */\n        sym++;\n        if (--(count[len]) == 0) {\n            if (len == max) break;\n            len = lens[work[sym]];\n        }\n\n        /* create new sub-table if needed */\n        if (len > root && (huff & mask) != low) {\n            /* if first time, transition to sub-tables */\n            if (drop == 0)\n                drop = root;\n\n            /* increment past last table */\n            next += 1U << curr;\n\n            /* determine length of next table */\n            curr = len - drop;\n            left = (int)(1 << curr);\n            while (curr + drop < max) {\n                left -= count[curr + drop];\n                if (left <= 0) break;\n                curr++;\n                left <<= 1;\n            }\n\n            /* check for enough space */\n            used += 1U << curr;\n            if ((type == LENS && used >= ENOUGH_LENS) ||\n                (type == DISTS && used >= ENOUGH_DISTS))\n                return 1;\n\n            /* point entry in root table to sub-table */\n            low = huff & mask;\n            (*table)[low].op = (unsigned char)curr;\n            (*table)[low].bits = (unsigned char)root;\n            (*table)[low].val = (unsigned short)(next - *table);\n        }\n    }\n\n    /*\n       Fill in rest of table for incomplete codes.  This loop is similar to the\n       loop above in incrementing huff for table indices.  It is assumed that\n       len is equal to curr + drop, so there is no loop needed to increment\n       through high index bits.  When the current sub-table is filled, the loop\n       drops back to the root table to fill in any remaining entries there.\n     */\n    this.op = (unsigned char)64;                /* invalid code marker */\n    this.bits = (unsigned char)(len - drop);\n    this.val = (unsigned short)0;\n    while (huff != 0) {\n        /* when done with sub-table, drop back to root table */\n        if (drop != 0 && (huff & mask) != low) {\n            drop = 0;\n            len = root;\n            next = *table;\n            curr = root;\n            this.bits = (unsigned char)len;\n        }\n\n        /* put invalid code marker in table */\n        next[huff >> drop] = this;\n\n        /* backwards increment the len-bit code huff */\n        incr = 1U << (len - 1);\n        while (huff & incr)\n            incr >>= 1;\n        if (incr != 0) {\n            huff &= incr - 1;\n            huff += incr;\n        }\n        else\n            huff = 0;\n    }\n\n    /* set return parameters */\n    *table += used;\n    *bits = root;\n    return 0;\n}\n"
  },
  {
    "path": "external/zlib/contrib/infback9/inftree9.h",
    "content": "/* inftree9.h -- header to use inftree9.c\n * Copyright (C) 1995-2008 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n/* WARNING: this file should *not* be used by applications. It is\n   part of the implementation of the compression library and is\n   subject to change. Applications should only use zlib.h.\n */\n\n/* Structure for decoding tables.  Each entry provides either the\n   information needed to do the operation requested by the code that\n   indexed that table entry, or it provides a pointer to another\n   table that indexes more bits of the code.  op indicates whether\n   the entry is a pointer to another table, a literal, a length or\n   distance, an end-of-block, or an invalid code.  For a table\n   pointer, the low four bits of op is the number of index bits of\n   that table.  For a length or distance, the low four bits of op\n   is the number of extra bits to get after the code.  bits is\n   the number of bits in this code or part of the code to drop off\n   of the bit buffer.  val is the actual byte to output in the case\n   of a literal, the base length or distance, or the offset from\n   the current table to the next table.  Each entry is four bytes. */\ntypedef struct {\n    unsigned char op;           /* operation, extra bits, table bits */\n    unsigned char bits;         /* bits in this part of the code */\n    unsigned short val;         /* offset in table or code value */\n} code;\n\n/* op values as set by inflate_table():\n    00000000 - literal\n    0000tttt - table link, tttt != 0 is the number of table index bits\n    100eeeee - length or distance, eeee is the number of extra bits\n    01100000 - end of block\n    01000000 - invalid code\n */\n\n/* Maximum size of the dynamic table.  The maximum number of code structures is\n   1446, which is the sum of 852 for literal/length codes and 594 for distance\n   codes.  These values were found by exhaustive searches using the program\n   examples/enough.c found in the zlib distribtution.  The arguments to that\n   program are the number of symbols, the initial root table size, and the\n   maximum bit length of a code.  \"enough 286 9 15\" for literal/length codes\n   returns returns 852, and \"enough 32 6 15\" for distance codes returns 594.\n   The initial root table size (9 or 6) is found in the fifth argument of the\n   inflate_table() calls in infback9.c.  If the root table size is changed,\n   then these maximum sizes would be need to be recalculated and updated. */\n#define ENOUGH_LENS 852\n#define ENOUGH_DISTS 594\n#define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS)\n\n/* Type of code to build for inflate_table9() */\ntypedef enum {\n    CODES,\n    LENS,\n    DISTS\n} codetype;\n\nextern int inflate_table9 OF((codetype type, unsigned short FAR *lens,\n                             unsigned codes, code FAR * FAR *table,\n                             unsigned FAR *bits, unsigned short FAR *work));\n"
  },
  {
    "path": "external/zlib/contrib/inflate86/inffas86.c",
    "content": "/* inffas86.c is a hand tuned assembler version of\n *\n * inffast.c -- fast decoding\n * Copyright (C) 1995-2003 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n *\n * Copyright (C) 2003 Chris Anderson <christop@charm.net>\n * Please use the copyright conditions above.\n *\n * Dec-29-2003 -- I added AMD64 inflate asm support.  This version is also\n * slightly quicker on x86 systems because, instead of using rep movsb to copy\n * data, it uses rep movsw, which moves data in 2-byte chunks instead of single\n * bytes.  I've tested the AMD64 code on a Fedora Core 1 + the x86_64 updates\n * from http://fedora.linux.duke.edu/fc1_x86_64\n * which is running on an Athlon 64 3000+ / Gigabyte GA-K8VT800M system with\n * 1GB ram.  The 64-bit version is about 4% faster than the 32-bit version,\n * when decompressing mozilla-source-1.3.tar.gz.\n *\n * Mar-13-2003 -- Most of this is derived from inffast.S which is derived from\n * the gcc -S output of zlib-1.2.0/inffast.c.  Zlib-1.2.0 is in beta release at\n * the moment.  I have successfully compiled and tested this code with gcc2.96,\n * gcc3.2, icc5.0, msvc6.0.  It is very close to the speed of inffast.S\n * compiled with gcc -DNO_MMX, but inffast.S is still faster on the P3 with MMX\n * enabled.  I will attempt to merge the MMX code into this version.  Newer\n * versions of this and inffast.S can be found at\n * http://www.eetbeetee.com/zlib/ and http://www.charm.net/~christop/zlib/\n */\n\n#include \"zutil.h\"\n#include \"inftrees.h\"\n#include \"inflate.h\"\n#include \"inffast.h\"\n\n/* Mark Adler's comments from inffast.c: */\n\n/*\n   Decode literal, length, and distance codes and write out the resulting\n   literal and match bytes until either not enough input or output is\n   available, an end-of-block is encountered, or a data error is encountered.\n   When large enough input and output buffers are supplied to inflate(), for\n   example, a 16K input buffer and a 64K output buffer, more than 95% of the\n   inflate execution time is spent in this routine.\n\n   Entry assumptions:\n\n        state->mode == LEN\n        strm->avail_in >= 6\n        strm->avail_out >= 258\n        start >= strm->avail_out\n        state->bits < 8\n\n   On return, state->mode is one of:\n\n        LEN -- ran out of enough output space or enough available input\n        TYPE -- reached end of block code, inflate() to interpret next block\n        BAD -- error in block data\n\n   Notes:\n\n    - The maximum input bits used by a length/distance pair is 15 bits for the\n      length code, 5 bits for the length extra, 15 bits for the distance code,\n      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.\n      Therefore if strm->avail_in >= 6, then there is enough input to avoid\n      checking for available input while decoding.\n\n    - The maximum bytes that a single length/distance pair can output is 258\n      bytes, which is the maximum length that can be coded.  inflate_fast()\n      requires strm->avail_out >= 258 for each loop to avoid checking for\n      output space.\n */\nvoid inflate_fast(strm, start)\nz_streamp strm;\nunsigned start;         /* inflate()'s starting value for strm->avail_out */\n{\n    struct inflate_state FAR *state;\n    struct inffast_ar {\n/* 64   32                               x86  x86_64 */\n/* ar offset                              register */\n/*  0    0 */ void *esp;                /* esp save */\n/*  8    4 */ void *ebp;                /* ebp save */\n/* 16    8 */ unsigned char FAR *in;    /* esi rsi  local strm->next_in */\n/* 24   12 */ unsigned char FAR *last;  /*     r9   while in < last */\n/* 32   16 */ unsigned char FAR *out;   /* edi rdi  local strm->next_out */\n/* 40   20 */ unsigned char FAR *beg;   /*          inflate()'s init next_out */\n/* 48   24 */ unsigned char FAR *end;   /*     r10  while out < end */\n/* 56   28 */ unsigned char FAR *window;/*          size of window, wsize!=0 */\n/* 64   32 */ code const FAR *lcode;    /* ebp rbp  local strm->lencode */\n/* 72   36 */ code const FAR *dcode;    /*     r11  local strm->distcode */\n/* 80   40 */ unsigned long hold;       /* edx rdx  local strm->hold */\n/* 88   44 */ unsigned bits;            /* ebx rbx  local strm->bits */\n/* 92   48 */ unsigned wsize;           /*          window size */\n/* 96   52 */ unsigned write;           /*          window write index */\n/*100   56 */ unsigned lmask;           /*     r12  mask for lcode */\n/*104   60 */ unsigned dmask;           /*     r13  mask for dcode */\n/*108   64 */ unsigned len;             /*     r14  match length */\n/*112   68 */ unsigned dist;            /*     r15  match distance */\n/*116   72 */ unsigned status;          /*          set when state chng*/\n    } ar;\n\n#if defined( __GNUC__ ) && defined( __amd64__ ) && ! defined( __i386 )\n#define PAD_AVAIL_IN 6\n#define PAD_AVAIL_OUT 258\n#else\n#define PAD_AVAIL_IN 5\n#define PAD_AVAIL_OUT 257\n#endif\n\n    /* copy state to local variables */\n    state = (struct inflate_state FAR *)strm->state;\n    ar.in = strm->next_in;\n    ar.last = ar.in + (strm->avail_in - PAD_AVAIL_IN);\n    ar.out = strm->next_out;\n    ar.beg = ar.out - (start - strm->avail_out);\n    ar.end = ar.out + (strm->avail_out - PAD_AVAIL_OUT);\n    ar.wsize = state->wsize;\n    ar.write = state->wnext;\n    ar.window = state->window;\n    ar.hold = state->hold;\n    ar.bits = state->bits;\n    ar.lcode = state->lencode;\n    ar.dcode = state->distcode;\n    ar.lmask = (1U << state->lenbits) - 1;\n    ar.dmask = (1U << state->distbits) - 1;\n\n    /* decode literals and length/distances until end-of-block or not enough\n       input data or output space */\n\n    /* align in on 1/2 hold size boundary */\n    while (((unsigned long)(void *)ar.in & (sizeof(ar.hold) / 2 - 1)) != 0) {\n        ar.hold += (unsigned long)*ar.in++ << ar.bits;\n        ar.bits += 8;\n    }\n\n#if defined( __GNUC__ ) && defined( __amd64__ ) && ! defined( __i386 )\n    __asm__ __volatile__ (\n\"        leaq    %0, %%rax\\n\"\n\"        movq    %%rbp, 8(%%rax)\\n\"       /* save regs rbp and rsp */\n\"        movq    %%rsp, (%%rax)\\n\"\n\"        movq    %%rax, %%rsp\\n\"          /* make rsp point to &ar */\n\"        movq    16(%%rsp), %%rsi\\n\"      /* rsi  = in */\n\"        movq    32(%%rsp), %%rdi\\n\"      /* rdi  = out */\n\"        movq    24(%%rsp), %%r9\\n\"       /* r9   = last */\n\"        movq    48(%%rsp), %%r10\\n\"      /* r10  = end */\n\"        movq    64(%%rsp), %%rbp\\n\"      /* rbp  = lcode */\n\"        movq    72(%%rsp), %%r11\\n\"      /* r11  = dcode */\n\"        movq    80(%%rsp), %%rdx\\n\"      /* rdx  = hold */\n\"        movl    88(%%rsp), %%ebx\\n\"      /* ebx  = bits */\n\"        movl    100(%%rsp), %%r12d\\n\"    /* r12d = lmask */\n\"        movl    104(%%rsp), %%r13d\\n\"    /* r13d = dmask */\n                                          /* r14d = len */\n                                          /* r15d = dist */\n\"        cld\\n\"\n\"        cmpq    %%rdi, %%r10\\n\"\n\"        je      .L_one_time\\n\"           /* if only one decode left */\n\"        cmpq    %%rsi, %%r9\\n\"\n\"        je      .L_one_time\\n\"\n\"        jmp     .L_do_loop\\n\"\n\n\".L_one_time:\\n\"\n\"        movq    %%r12, %%r8\\n\"           /* r8 = lmask */\n\"        cmpb    $32, %%bl\\n\"\n\"        ja      .L_get_length_code_one_time\\n\"\n\n\"        lodsl\\n\"                         /* eax = *(uint *)in++ */\n\"        movb    %%bl, %%cl\\n\"            /* cl = bits, needs it for shifting */\n\"        addb    $32, %%bl\\n\"             /* bits += 32 */\n\"        shlq    %%cl, %%rax\\n\"\n\"        orq     %%rax, %%rdx\\n\"          /* hold |= *((uint *)in)++ << bits */\n\"        jmp     .L_get_length_code_one_time\\n\"\n\n\".align 32,0x90\\n\"\n\".L_while_test:\\n\"\n\"        cmpq    %%rdi, %%r10\\n\"\n\"        jbe     .L_break_loop\\n\"\n\"        cmpq    %%rsi, %%r9\\n\"\n\"        jbe     .L_break_loop\\n\"\n\n\".L_do_loop:\\n\"\n\"        movq    %%r12, %%r8\\n\"           /* r8 = lmask */\n\"        cmpb    $32, %%bl\\n\"\n\"        ja      .L_get_length_code\\n\"    /* if (32 < bits) */\n\n\"        lodsl\\n\"                         /* eax = *(uint *)in++ */\n\"        movb    %%bl, %%cl\\n\"            /* cl = bits, needs it for shifting */\n\"        addb    $32, %%bl\\n\"             /* bits += 32 */\n\"        shlq    %%cl, %%rax\\n\"\n\"        orq     %%rax, %%rdx\\n\"          /* hold |= *((uint *)in)++ << bits */\n\n\".L_get_length_code:\\n\"\n\"        andq    %%rdx, %%r8\\n\"            /* r8 &= hold */\n\"        movl    (%%rbp,%%r8,4), %%eax\\n\"  /* eax = lcode[hold & lmask] */\n\n\"        movb    %%ah, %%cl\\n\"            /* cl = this.bits */\n\"        subb    %%ah, %%bl\\n\"            /* bits -= this.bits */\n\"        shrq    %%cl, %%rdx\\n\"           /* hold >>= this.bits */\n\n\"        testb   %%al, %%al\\n\"\n\"        jnz     .L_test_for_length_base\\n\" /* if (op != 0) 45.7% */\n\n\"        movq    %%r12, %%r8\\n\"            /* r8 = lmask */\n\"        shrl    $16, %%eax\\n\"            /* output this.val char */\n\"        stosb\\n\"\n\n\".L_get_length_code_one_time:\\n\"\n\"        andq    %%rdx, %%r8\\n\"            /* r8 &= hold */\n\"        movl    (%%rbp,%%r8,4), %%eax\\n\" /* eax = lcode[hold & lmask] */\n\n\".L_dolen:\\n\"\n\"        movb    %%ah, %%cl\\n\"            /* cl = this.bits */\n\"        subb    %%ah, %%bl\\n\"            /* bits -= this.bits */\n\"        shrq    %%cl, %%rdx\\n\"           /* hold >>= this.bits */\n\n\"        testb   %%al, %%al\\n\"\n\"        jnz     .L_test_for_length_base\\n\" /* if (op != 0) 45.7% */\n\n\"        shrl    $16, %%eax\\n\"            /* output this.val char */\n\"        stosb\\n\"\n\"        jmp     .L_while_test\\n\"\n\n\".align 32,0x90\\n\"\n\".L_test_for_length_base:\\n\"\n\"        movl    %%eax, %%r14d\\n\"         /* len = this */\n\"        shrl    $16, %%r14d\\n\"           /* len = this.val */\n\"        movb    %%al, %%cl\\n\"\n\n\"        testb   $16, %%al\\n\"\n\"        jz      .L_test_for_second_level_length\\n\" /* if ((op & 16) == 0) 8% */\n\"        andb    $15, %%cl\\n\"             /* op &= 15 */\n\"        jz      .L_decode_distance\\n\"    /* if (!op) */\n\n\".L_add_bits_to_len:\\n\"\n\"        subb    %%cl, %%bl\\n\"\n\"        xorl    %%eax, %%eax\\n\"\n\"        incl    %%eax\\n\"\n\"        shll    %%cl, %%eax\\n\"\n\"        decl    %%eax\\n\"\n\"        andl    %%edx, %%eax\\n\"          /* eax &= hold */\n\"        shrq    %%cl, %%rdx\\n\"\n\"        addl    %%eax, %%r14d\\n\"         /* len += hold & mask[op] */\n\n\".L_decode_distance:\\n\"\n\"        movq    %%r13, %%r8\\n\"           /* r8 = dmask */\n\"        cmpb    $32, %%bl\\n\"\n\"        ja      .L_get_distance_code\\n\"  /* if (32 < bits) */\n\n\"        lodsl\\n\"                         /* eax = *(uint *)in++ */\n\"        movb    %%bl, %%cl\\n\"            /* cl = bits, needs it for shifting */\n\"        addb    $32, %%bl\\n\"             /* bits += 32 */\n\"        shlq    %%cl, %%rax\\n\"\n\"        orq     %%rax, %%rdx\\n\"          /* hold |= *((uint *)in)++ << bits */\n\n\".L_get_distance_code:\\n\"\n\"        andq    %%rdx, %%r8\\n\"           /* r8 &= hold */\n\"        movl    (%%r11,%%r8,4), %%eax\\n\" /* eax = dcode[hold & dmask] */\n\n\".L_dodist:\\n\"\n\"        movl    %%eax, %%r15d\\n\"         /* dist = this */\n\"        shrl    $16, %%r15d\\n\"           /* dist = this.val */\n\"        movb    %%ah, %%cl\\n\"\n\"        subb    %%ah, %%bl\\n\"            /* bits -= this.bits */\n\"        shrq    %%cl, %%rdx\\n\"           /* hold >>= this.bits */\n\"        movb    %%al, %%cl\\n\"            /* cl = this.op */\n\n\"        testb   $16, %%al\\n\"             /* if ((op & 16) == 0) */\n\"        jz      .L_test_for_second_level_dist\\n\"\n\"        andb    $15, %%cl\\n\"             /* op &= 15 */\n\"        jz      .L_check_dist_one\\n\"\n\n\".L_add_bits_to_dist:\\n\"\n\"        subb    %%cl, %%bl\\n\"\n\"        xorl    %%eax, %%eax\\n\"\n\"        incl    %%eax\\n\"\n\"        shll    %%cl, %%eax\\n\"\n\"        decl    %%eax\\n\"                 /* (1 << op) - 1 */\n\"        andl    %%edx, %%eax\\n\"          /* eax &= hold */\n\"        shrq    %%cl, %%rdx\\n\"\n\"        addl    %%eax, %%r15d\\n\"         /* dist += hold & ((1 << op) - 1) */\n\n\".L_check_window:\\n\"\n\"        movq    %%rsi, %%r8\\n\"           /* save in so from can use it's reg */\n\"        movq    %%rdi, %%rax\\n\"\n\"        subq    40(%%rsp), %%rax\\n\"      /* nbytes = out - beg */\n\n\"        cmpl    %%r15d, %%eax\\n\"\n\"        jb      .L_clip_window\\n\"        /* if (dist > nbytes) 4.2% */\n\n\"        movl    %%r14d, %%ecx\\n\"         /* ecx = len */\n\"        movq    %%rdi, %%rsi\\n\"\n\"        subq    %%r15, %%rsi\\n\"          /* from = out - dist */\n\n\"        sarl    %%ecx\\n\"\n\"        jnc     .L_copy_two\\n\"           /* if len % 2 == 0 */\n\n\"        rep     movsw\\n\"\n\"        movb    (%%rsi), %%al\\n\"\n\"        movb    %%al, (%%rdi)\\n\"\n\"        incq    %%rdi\\n\"\n\n\"        movq    %%r8, %%rsi\\n\"           /* move in back to %rsi, toss from */\n\"        jmp     .L_while_test\\n\"\n\n\".L_copy_two:\\n\"\n\"        rep     movsw\\n\"\n\"        movq    %%r8, %%rsi\\n\"           /* move in back to %rsi, toss from */\n\"        jmp     .L_while_test\\n\"\n\n\".align 32,0x90\\n\"\n\".L_check_dist_one:\\n\"\n\"        cmpl    $1, %%r15d\\n\"            /* if dist 1, is a memset */\n\"        jne     .L_check_window\\n\"\n\"        cmpq    %%rdi, 40(%%rsp)\\n\"      /* if out == beg, outside window */\n\"        je      .L_check_window\\n\"\n\n\"        movl    %%r14d, %%ecx\\n\"         /* ecx = len */\n\"        movb    -1(%%rdi), %%al\\n\"\n\"        movb    %%al, %%ah\\n\"\n\n\"        sarl    %%ecx\\n\"\n\"        jnc     .L_set_two\\n\"\n\"        movb    %%al, (%%rdi)\\n\"\n\"        incq    %%rdi\\n\"\n\n\".L_set_two:\\n\"\n\"        rep     stosw\\n\"\n\"        jmp     .L_while_test\\n\"\n\n\".align 32,0x90\\n\"\n\".L_test_for_second_level_length:\\n\"\n\"        testb   $64, %%al\\n\"\n\"        jnz     .L_test_for_end_of_block\\n\" /* if ((op & 64) != 0) */\n\n\"        xorl    %%eax, %%eax\\n\"\n\"        incl    %%eax\\n\"\n\"        shll    %%cl, %%eax\\n\"\n\"        decl    %%eax\\n\"\n\"        andl    %%edx, %%eax\\n\"         /* eax &= hold */\n\"        addl    %%r14d, %%eax\\n\"        /* eax += len */\n\"        movl    (%%rbp,%%rax,4), %%eax\\n\" /* eax = lcode[val+(hold&mask[op])]*/\n\"        jmp     .L_dolen\\n\"\n\n\".align 32,0x90\\n\"\n\".L_test_for_second_level_dist:\\n\"\n\"        testb   $64, %%al\\n\"\n\"        jnz     .L_invalid_distance_code\\n\" /* if ((op & 64) != 0) */\n\n\"        xorl    %%eax, %%eax\\n\"\n\"        incl    %%eax\\n\"\n\"        shll    %%cl, %%eax\\n\"\n\"        decl    %%eax\\n\"\n\"        andl    %%edx, %%eax\\n\"         /* eax &= hold */\n\"        addl    %%r15d, %%eax\\n\"        /* eax += dist */\n\"        movl    (%%r11,%%rax,4), %%eax\\n\" /* eax = dcode[val+(hold&mask[op])]*/\n\"        jmp     .L_dodist\\n\"\n\n\".align 32,0x90\\n\"\n\".L_clip_window:\\n\"\n\"        movl    %%eax, %%ecx\\n\"         /* ecx = nbytes */\n\"        movl    92(%%rsp), %%eax\\n\"     /* eax = wsize, prepare for dist cmp */\n\"        negl    %%ecx\\n\"                /* nbytes = -nbytes */\n\n\"        cmpl    %%r15d, %%eax\\n\"\n\"        jb      .L_invalid_distance_too_far\\n\" /* if (dist > wsize) */\n\n\"        addl    %%r15d, %%ecx\\n\"         /* nbytes = dist - nbytes */\n\"        cmpl    $0, 96(%%rsp)\\n\"\n\"        jne     .L_wrap_around_window\\n\" /* if (write != 0) */\n\n\"        movq    56(%%rsp), %%rsi\\n\"     /* from  = window */\n\"        subl    %%ecx, %%eax\\n\"         /* eax  -= nbytes */\n\"        addq    %%rax, %%rsi\\n\"         /* from += wsize - nbytes */\n\n\"        movl    %%r14d, %%eax\\n\"        /* eax = len */\n\"        cmpl    %%ecx, %%r14d\\n\"\n\"        jbe     .L_do_copy\\n\"           /* if (nbytes >= len) */\n\n\"        subl    %%ecx, %%eax\\n\"         /* eax -= nbytes */\n\"        rep     movsb\\n\"\n\"        movq    %%rdi, %%rsi\\n\"\n\"        subq    %%r15, %%rsi\\n\"         /* from = &out[ -dist ] */\n\"        jmp     .L_do_copy\\n\"\n\n\".align 32,0x90\\n\"\n\".L_wrap_around_window:\\n\"\n\"        movl    96(%%rsp), %%eax\\n\"     /* eax = write */\n\"        cmpl    %%eax, %%ecx\\n\"\n\"        jbe     .L_contiguous_in_window\\n\" /* if (write >= nbytes) */\n\n\"        movl    92(%%rsp), %%esi\\n\"     /* from  = wsize */\n\"        addq    56(%%rsp), %%rsi\\n\"     /* from += window */\n\"        addq    %%rax, %%rsi\\n\"         /* from += write */\n\"        subq    %%rcx, %%rsi\\n\"         /* from -= nbytes */\n\"        subl    %%eax, %%ecx\\n\"         /* nbytes -= write */\n\n\"        movl    %%r14d, %%eax\\n\"        /* eax = len */\n\"        cmpl    %%ecx, %%eax\\n\"\n\"        jbe     .L_do_copy\\n\"           /* if (nbytes >= len) */\n\n\"        subl    %%ecx, %%eax\\n\"         /* len -= nbytes */\n\"        rep     movsb\\n\"\n\"        movq    56(%%rsp), %%rsi\\n\"     /* from = window */\n\"        movl    96(%%rsp), %%ecx\\n\"     /* nbytes = write */\n\"        cmpl    %%ecx, %%eax\\n\"\n\"        jbe     .L_do_copy\\n\"           /* if (nbytes >= len) */\n\n\"        subl    %%ecx, %%eax\\n\"         /* len -= nbytes */\n\"        rep     movsb\\n\"\n\"        movq    %%rdi, %%rsi\\n\"\n\"        subq    %%r15, %%rsi\\n\"         /* from = out - dist */\n\"        jmp     .L_do_copy\\n\"\n\n\".align 32,0x90\\n\"\n\".L_contiguous_in_window:\\n\"\n\"        movq    56(%%rsp), %%rsi\\n\"     /* rsi = window */\n\"        addq    %%rax, %%rsi\\n\"\n\"        subq    %%rcx, %%rsi\\n\"         /* from += write - nbytes */\n\n\"        movl    %%r14d, %%eax\\n\"        /* eax = len */\n\"        cmpl    %%ecx, %%eax\\n\"\n\"        jbe     .L_do_copy\\n\"           /* if (nbytes >= len) */\n\n\"        subl    %%ecx, %%eax\\n\"         /* len -= nbytes */\n\"        rep     movsb\\n\"\n\"        movq    %%rdi, %%rsi\\n\"\n\"        subq    %%r15, %%rsi\\n\"         /* from = out - dist */\n\"        jmp     .L_do_copy\\n\"           /* if (nbytes >= len) */\n\n\".align 32,0x90\\n\"\n\".L_do_copy:\\n\"\n\"        movl    %%eax, %%ecx\\n\"         /* ecx = len */\n\"        rep     movsb\\n\"\n\n\"        movq    %%r8, %%rsi\\n\"          /* move in back to %esi, toss from */\n\"        jmp     .L_while_test\\n\"\n\n\".L_test_for_end_of_block:\\n\"\n\"        testb   $32, %%al\\n\"\n\"        jz      .L_invalid_literal_length_code\\n\"\n\"        movl    $1, 116(%%rsp)\\n\"\n\"        jmp     .L_break_loop_with_status\\n\"\n\n\".L_invalid_literal_length_code:\\n\"\n\"        movl    $2, 116(%%rsp)\\n\"\n\"        jmp     .L_break_loop_with_status\\n\"\n\n\".L_invalid_distance_code:\\n\"\n\"        movl    $3, 116(%%rsp)\\n\"\n\"        jmp     .L_break_loop_with_status\\n\"\n\n\".L_invalid_distance_too_far:\\n\"\n\"        movl    $4, 116(%%rsp)\\n\"\n\"        jmp     .L_break_loop_with_status\\n\"\n\n\".L_break_loop:\\n\"\n\"        movl    $0, 116(%%rsp)\\n\"\n\n\".L_break_loop_with_status:\\n\"\n/* put in, out, bits, and hold back into ar and pop esp */\n\"        movq    %%rsi, 16(%%rsp)\\n\"     /* in */\n\"        movq    %%rdi, 32(%%rsp)\\n\"     /* out */\n\"        movl    %%ebx, 88(%%rsp)\\n\"     /* bits */\n\"        movq    %%rdx, 80(%%rsp)\\n\"     /* hold */\n\"        movq    (%%rsp), %%rax\\n\"       /* restore rbp and rsp */\n\"        movq    8(%%rsp), %%rbp\\n\"\n\"        movq    %%rax, %%rsp\\n\"\n          :\n          : \"m\" (ar)\n          : \"memory\", \"%rax\", \"%rbx\", \"%rcx\", \"%rdx\", \"%rsi\", \"%rdi\",\n            \"%r8\", \"%r9\", \"%r10\", \"%r11\", \"%r12\", \"%r13\", \"%r14\", \"%r15\"\n    );\n#elif ( defined( __GNUC__ ) || defined( __ICC ) ) && defined( __i386 )\n    __asm__ __volatile__ (\n\"        leal    %0, %%eax\\n\"\n\"        movl    %%esp, (%%eax)\\n\"        /* save esp, ebp */\n\"        movl    %%ebp, 4(%%eax)\\n\"\n\"        movl    %%eax, %%esp\\n\"\n\"        movl    8(%%esp), %%esi\\n\"       /* esi = in */\n\"        movl    16(%%esp), %%edi\\n\"      /* edi = out */\n\"        movl    40(%%esp), %%edx\\n\"      /* edx = hold */\n\"        movl    44(%%esp), %%ebx\\n\"      /* ebx = bits */\n\"        movl    32(%%esp), %%ebp\\n\"      /* ebp = lcode */\n\n\"        cld\\n\"\n\"        jmp     .L_do_loop\\n\"\n\n\".align 32,0x90\\n\"\n\".L_while_test:\\n\"\n\"        cmpl    %%edi, 24(%%esp)\\n\"      /* out < end */\n\"        jbe     .L_break_loop\\n\"\n\"        cmpl    %%esi, 12(%%esp)\\n\"      /* in < last */\n\"        jbe     .L_break_loop\\n\"\n\n\".L_do_loop:\\n\"\n\"        cmpb    $15, %%bl\\n\"\n\"        ja      .L_get_length_code\\n\"    /* if (15 < bits) */\n\n\"        xorl    %%eax, %%eax\\n\"\n\"        lodsw\\n\"                         /* al = *(ushort *)in++ */\n\"        movb    %%bl, %%cl\\n\"            /* cl = bits, needs it for shifting */\n\"        addb    $16, %%bl\\n\"             /* bits += 16 */\n\"        shll    %%cl, %%eax\\n\"\n\"        orl     %%eax, %%edx\\n\"        /* hold |= *((ushort *)in)++ << bits */\n\n\".L_get_length_code:\\n\"\n\"        movl    56(%%esp), %%eax\\n\"      /* eax = lmask */\n\"        andl    %%edx, %%eax\\n\"          /* eax &= hold */\n\"        movl    (%%ebp,%%eax,4), %%eax\\n\" /* eax = lcode[hold & lmask] */\n\n\".L_dolen:\\n\"\n\"        movb    %%ah, %%cl\\n\"            /* cl = this.bits */\n\"        subb    %%ah, %%bl\\n\"            /* bits -= this.bits */\n\"        shrl    %%cl, %%edx\\n\"           /* hold >>= this.bits */\n\n\"        testb   %%al, %%al\\n\"\n\"        jnz     .L_test_for_length_base\\n\" /* if (op != 0) 45.7% */\n\n\"        shrl    $16, %%eax\\n\"            /* output this.val char */\n\"        stosb\\n\"\n\"        jmp     .L_while_test\\n\"\n\n\".align 32,0x90\\n\"\n\".L_test_for_length_base:\\n\"\n\"        movl    %%eax, %%ecx\\n\"          /* len = this */\n\"        shrl    $16, %%ecx\\n\"            /* len = this.val */\n\"        movl    %%ecx, 64(%%esp)\\n\"      /* save len */\n\"        movb    %%al, %%cl\\n\"\n\n\"        testb   $16, %%al\\n\"\n\"        jz      .L_test_for_second_level_length\\n\" /* if ((op & 16) == 0) 8% */\n\"        andb    $15, %%cl\\n\"             /* op &= 15 */\n\"        jz      .L_decode_distance\\n\"    /* if (!op) */\n\"        cmpb    %%cl, %%bl\\n\"\n\"        jae     .L_add_bits_to_len\\n\"    /* if (op <= bits) */\n\n\"        movb    %%cl, %%ch\\n\"            /* stash op in ch, freeing cl */\n\"        xorl    %%eax, %%eax\\n\"\n\"        lodsw\\n\"                         /* al = *(ushort *)in++ */\n\"        movb    %%bl, %%cl\\n\"            /* cl = bits, needs it for shifting */\n\"        addb    $16, %%bl\\n\"             /* bits += 16 */\n\"        shll    %%cl, %%eax\\n\"\n\"        orl     %%eax, %%edx\\n\"         /* hold |= *((ushort *)in)++ << bits */\n\"        movb    %%ch, %%cl\\n\"            /* move op back to ecx */\n\n\".L_add_bits_to_len:\\n\"\n\"        subb    %%cl, %%bl\\n\"\n\"        xorl    %%eax, %%eax\\n\"\n\"        incl    %%eax\\n\"\n\"        shll    %%cl, %%eax\\n\"\n\"        decl    %%eax\\n\"\n\"        andl    %%edx, %%eax\\n\"          /* eax &= hold */\n\"        shrl    %%cl, %%edx\\n\"\n\"        addl    %%eax, 64(%%esp)\\n\"      /* len += hold & mask[op] */\n\n\".L_decode_distance:\\n\"\n\"        cmpb    $15, %%bl\\n\"\n\"        ja      .L_get_distance_code\\n\"  /* if (15 < bits) */\n\n\"        xorl    %%eax, %%eax\\n\"\n\"        lodsw\\n\"                         /* al = *(ushort *)in++ */\n\"        movb    %%bl, %%cl\\n\"            /* cl = bits, needs it for shifting */\n\"        addb    $16, %%bl\\n\"             /* bits += 16 */\n\"        shll    %%cl, %%eax\\n\"\n\"        orl     %%eax, %%edx\\n\"         /* hold |= *((ushort *)in)++ << bits */\n\n\".L_get_distance_code:\\n\"\n\"        movl    60(%%esp), %%eax\\n\"      /* eax = dmask */\n\"        movl    36(%%esp), %%ecx\\n\"      /* ecx = dcode */\n\"        andl    %%edx, %%eax\\n\"          /* eax &= hold */\n\"        movl    (%%ecx,%%eax,4), %%eax\\n\"/* eax = dcode[hold & dmask] */\n\n\".L_dodist:\\n\"\n\"        movl    %%eax, %%ebp\\n\"          /* dist = this */\n\"        shrl    $16, %%ebp\\n\"            /* dist = this.val */\n\"        movb    %%ah, %%cl\\n\"\n\"        subb    %%ah, %%bl\\n\"            /* bits -= this.bits */\n\"        shrl    %%cl, %%edx\\n\"           /* hold >>= this.bits */\n\"        movb    %%al, %%cl\\n\"            /* cl = this.op */\n\n\"        testb   $16, %%al\\n\"             /* if ((op & 16) == 0) */\n\"        jz      .L_test_for_second_level_dist\\n\"\n\"        andb    $15, %%cl\\n\"             /* op &= 15 */\n\"        jz      .L_check_dist_one\\n\"\n\"        cmpb    %%cl, %%bl\\n\"\n\"        jae     .L_add_bits_to_dist\\n\"   /* if (op <= bits) 97.6% */\n\n\"        movb    %%cl, %%ch\\n\"            /* stash op in ch, freeing cl */\n\"        xorl    %%eax, %%eax\\n\"\n\"        lodsw\\n\"                         /* al = *(ushort *)in++ */\n\"        movb    %%bl, %%cl\\n\"            /* cl = bits, needs it for shifting */\n\"        addb    $16, %%bl\\n\"             /* bits += 16 */\n\"        shll    %%cl, %%eax\\n\"\n\"        orl     %%eax, %%edx\\n\"        /* hold |= *((ushort *)in)++ << bits */\n\"        movb    %%ch, %%cl\\n\"            /* move op back to ecx */\n\n\".L_add_bits_to_dist:\\n\"\n\"        subb    %%cl, %%bl\\n\"\n\"        xorl    %%eax, %%eax\\n\"\n\"        incl    %%eax\\n\"\n\"        shll    %%cl, %%eax\\n\"\n\"        decl    %%eax\\n\"                 /* (1 << op) - 1 */\n\"        andl    %%edx, %%eax\\n\"          /* eax &= hold */\n\"        shrl    %%cl, %%edx\\n\"\n\"        addl    %%eax, %%ebp\\n\"          /* dist += hold & ((1 << op) - 1) */\n\n\".L_check_window:\\n\"\n\"        movl    %%esi, 8(%%esp)\\n\"       /* save in so from can use it's reg */\n\"        movl    %%edi, %%eax\\n\"\n\"        subl    20(%%esp), %%eax\\n\"      /* nbytes = out - beg */\n\n\"        cmpl    %%ebp, %%eax\\n\"\n\"        jb      .L_clip_window\\n\"        /* if (dist > nbytes) 4.2% */\n\n\"        movl    64(%%esp), %%ecx\\n\"      /* ecx = len */\n\"        movl    %%edi, %%esi\\n\"\n\"        subl    %%ebp, %%esi\\n\"          /* from = out - dist */\n\n\"        sarl    %%ecx\\n\"\n\"        jnc     .L_copy_two\\n\"           /* if len % 2 == 0 */\n\n\"        rep     movsw\\n\"\n\"        movb    (%%esi), %%al\\n\"\n\"        movb    %%al, (%%edi)\\n\"\n\"        incl    %%edi\\n\"\n\n\"        movl    8(%%esp), %%esi\\n\"       /* move in back to %esi, toss from */\n\"        movl    32(%%esp), %%ebp\\n\"      /* ebp = lcode */\n\"        jmp     .L_while_test\\n\"\n\n\".L_copy_two:\\n\"\n\"        rep     movsw\\n\"\n\"        movl    8(%%esp), %%esi\\n\"       /* move in back to %esi, toss from */\n\"        movl    32(%%esp), %%ebp\\n\"      /* ebp = lcode */\n\"        jmp     .L_while_test\\n\"\n\n\".align 32,0x90\\n\"\n\".L_check_dist_one:\\n\"\n\"        cmpl    $1, %%ebp\\n\"            /* if dist 1, is a memset */\n\"        jne     .L_check_window\\n\"\n\"        cmpl    %%edi, 20(%%esp)\\n\"\n\"        je      .L_check_window\\n\"      /* out == beg, if outside window */\n\n\"        movl    64(%%esp), %%ecx\\n\"      /* ecx = len */\n\"        movb    -1(%%edi), %%al\\n\"\n\"        movb    %%al, %%ah\\n\"\n\n\"        sarl    %%ecx\\n\"\n\"        jnc     .L_set_two\\n\"\n\"        movb    %%al, (%%edi)\\n\"\n\"        incl    %%edi\\n\"\n\n\".L_set_two:\\n\"\n\"        rep     stosw\\n\"\n\"        movl    32(%%esp), %%ebp\\n\"      /* ebp = lcode */\n\"        jmp     .L_while_test\\n\"\n\n\".align 32,0x90\\n\"\n\".L_test_for_second_level_length:\\n\"\n\"        testb   $64, %%al\\n\"\n\"        jnz     .L_test_for_end_of_block\\n\" /* if ((op & 64) != 0) */\n\n\"        xorl    %%eax, %%eax\\n\"\n\"        incl    %%eax\\n\"\n\"        shll    %%cl, %%eax\\n\"\n\"        decl    %%eax\\n\"\n\"        andl    %%edx, %%eax\\n\"         /* eax &= hold */\n\"        addl    64(%%esp), %%eax\\n\"     /* eax += len */\n\"        movl    (%%ebp,%%eax,4), %%eax\\n\" /* eax = lcode[val+(hold&mask[op])]*/\n\"        jmp     .L_dolen\\n\"\n\n\".align 32,0x90\\n\"\n\".L_test_for_second_level_dist:\\n\"\n\"        testb   $64, %%al\\n\"\n\"        jnz     .L_invalid_distance_code\\n\" /* if ((op & 64) != 0) */\n\n\"        xorl    %%eax, %%eax\\n\"\n\"        incl    %%eax\\n\"\n\"        shll    %%cl, %%eax\\n\"\n\"        decl    %%eax\\n\"\n\"        andl    %%edx, %%eax\\n\"         /* eax &= hold */\n\"        addl    %%ebp, %%eax\\n\"         /* eax += dist */\n\"        movl    36(%%esp), %%ecx\\n\"     /* ecx = dcode */\n\"        movl    (%%ecx,%%eax,4), %%eax\\n\" /* eax = dcode[val+(hold&mask[op])]*/\n\"        jmp     .L_dodist\\n\"\n\n\".align 32,0x90\\n\"\n\".L_clip_window:\\n\"\n\"        movl    %%eax, %%ecx\\n\"\n\"        movl    48(%%esp), %%eax\\n\"     /* eax = wsize */\n\"        negl    %%ecx\\n\"                /* nbytes = -nbytes */\n\"        movl    28(%%esp), %%esi\\n\"     /* from = window */\n\n\"        cmpl    %%ebp, %%eax\\n\"\n\"        jb      .L_invalid_distance_too_far\\n\" /* if (dist > wsize) */\n\n\"        addl    %%ebp, %%ecx\\n\"         /* nbytes = dist - nbytes */\n\"        cmpl    $0, 52(%%esp)\\n\"\n\"        jne     .L_wrap_around_window\\n\" /* if (write != 0) */\n\n\"        subl    %%ecx, %%eax\\n\"\n\"        addl    %%eax, %%esi\\n\"         /* from += wsize - nbytes */\n\n\"        movl    64(%%esp), %%eax\\n\"     /* eax = len */\n\"        cmpl    %%ecx, %%eax\\n\"\n\"        jbe     .L_do_copy\\n\"           /* if (nbytes >= len) */\n\n\"        subl    %%ecx, %%eax\\n\"         /* len -= nbytes */\n\"        rep     movsb\\n\"\n\"        movl    %%edi, %%esi\\n\"\n\"        subl    %%ebp, %%esi\\n\"         /* from = out - dist */\n\"        jmp     .L_do_copy\\n\"\n\n\".align 32,0x90\\n\"\n\".L_wrap_around_window:\\n\"\n\"        movl    52(%%esp), %%eax\\n\"     /* eax = write */\n\"        cmpl    %%eax, %%ecx\\n\"\n\"        jbe     .L_contiguous_in_window\\n\" /* if (write >= nbytes) */\n\n\"        addl    48(%%esp), %%esi\\n\"     /* from += wsize */\n\"        addl    %%eax, %%esi\\n\"         /* from += write */\n\"        subl    %%ecx, %%esi\\n\"         /* from -= nbytes */\n\"        subl    %%eax, %%ecx\\n\"         /* nbytes -= write */\n\n\"        movl    64(%%esp), %%eax\\n\"     /* eax = len */\n\"        cmpl    %%ecx, %%eax\\n\"\n\"        jbe     .L_do_copy\\n\"           /* if (nbytes >= len) */\n\n\"        subl    %%ecx, %%eax\\n\"         /* len -= nbytes */\n\"        rep     movsb\\n\"\n\"        movl    28(%%esp), %%esi\\n\"     /* from = window */\n\"        movl    52(%%esp), %%ecx\\n\"     /* nbytes = write */\n\"        cmpl    %%ecx, %%eax\\n\"\n\"        jbe     .L_do_copy\\n\"           /* if (nbytes >= len) */\n\n\"        subl    %%ecx, %%eax\\n\"         /* len -= nbytes */\n\"        rep     movsb\\n\"\n\"        movl    %%edi, %%esi\\n\"\n\"        subl    %%ebp, %%esi\\n\"         /* from = out - dist */\n\"        jmp     .L_do_copy\\n\"\n\n\".align 32,0x90\\n\"\n\".L_contiguous_in_window:\\n\"\n\"        addl    %%eax, %%esi\\n\"\n\"        subl    %%ecx, %%esi\\n\"         /* from += write - nbytes */\n\n\"        movl    64(%%esp), %%eax\\n\"     /* eax = len */\n\"        cmpl    %%ecx, %%eax\\n\"\n\"        jbe     .L_do_copy\\n\"           /* if (nbytes >= len) */\n\n\"        subl    %%ecx, %%eax\\n\"         /* len -= nbytes */\n\"        rep     movsb\\n\"\n\"        movl    %%edi, %%esi\\n\"\n\"        subl    %%ebp, %%esi\\n\"         /* from = out - dist */\n\"        jmp     .L_do_copy\\n\"           /* if (nbytes >= len) */\n\n\".align 32,0x90\\n\"\n\".L_do_copy:\\n\"\n\"        movl    %%eax, %%ecx\\n\"\n\"        rep     movsb\\n\"\n\n\"        movl    8(%%esp), %%esi\\n\"      /* move in back to %esi, toss from */\n\"        movl    32(%%esp), %%ebp\\n\"     /* ebp = lcode */\n\"        jmp     .L_while_test\\n\"\n\n\".L_test_for_end_of_block:\\n\"\n\"        testb   $32, %%al\\n\"\n\"        jz      .L_invalid_literal_length_code\\n\"\n\"        movl    $1, 72(%%esp)\\n\"\n\"        jmp     .L_break_loop_with_status\\n\"\n\n\".L_invalid_literal_length_code:\\n\"\n\"        movl    $2, 72(%%esp)\\n\"\n\"        jmp     .L_break_loop_with_status\\n\"\n\n\".L_invalid_distance_code:\\n\"\n\"        movl    $3, 72(%%esp)\\n\"\n\"        jmp     .L_break_loop_with_status\\n\"\n\n\".L_invalid_distance_too_far:\\n\"\n\"        movl    8(%%esp), %%esi\\n\"\n\"        movl    $4, 72(%%esp)\\n\"\n\"        jmp     .L_break_loop_with_status\\n\"\n\n\".L_break_loop:\\n\"\n\"        movl    $0, 72(%%esp)\\n\"\n\n\".L_break_loop_with_status:\\n\"\n/* put in, out, bits, and hold back into ar and pop esp */\n\"        movl    %%esi, 8(%%esp)\\n\"      /* save in */\n\"        movl    %%edi, 16(%%esp)\\n\"     /* save out */\n\"        movl    %%ebx, 44(%%esp)\\n\"     /* save bits */\n\"        movl    %%edx, 40(%%esp)\\n\"     /* save hold */\n\"        movl    4(%%esp), %%ebp\\n\"      /* restore esp, ebp */\n\"        movl    (%%esp), %%esp\\n\"\n          :\n          : \"m\" (ar)\n          : \"memory\", \"%eax\", \"%ebx\", \"%ecx\", \"%edx\", \"%esi\", \"%edi\"\n    );\n#elif defined( _MSC_VER ) && ! defined( _M_AMD64 )\n    __asm {\n\tlea\teax, ar\n\tmov\t[eax], esp         /* save esp, ebp */\n\tmov\t[eax+4], ebp\n\tmov\tesp, eax\n\tmov\tesi, [esp+8]       /* esi = in */\n\tmov\tedi, [esp+16]      /* edi = out */\n\tmov\tedx, [esp+40]      /* edx = hold */\n\tmov\tebx, [esp+44]      /* ebx = bits */\n\tmov\tebp, [esp+32]      /* ebp = lcode */\n\n\tcld\n\tjmp\tL_do_loop\n\nALIGN 4\nL_while_test:\n\tcmp\t[esp+24], edi\n\tjbe\tL_break_loop\n\tcmp\t[esp+12], esi\n\tjbe\tL_break_loop\n\nL_do_loop:\n\tcmp\tbl, 15\n\tja\tL_get_length_code    /* if (15 < bits) */\n\n\txor\teax, eax\n\tlodsw                         /* al = *(ushort *)in++ */\n\tmov\tcl, bl            /* cl = bits, needs it for shifting */\n\tadd\tbl, 16             /* bits += 16 */\n\tshl\teax, cl\n\tor\tedx, eax        /* hold |= *((ushort *)in)++ << bits */\n\nL_get_length_code:\n\tmov\teax, [esp+56]      /* eax = lmask */\n\tand\teax, edx          /* eax &= hold */\n\tmov\teax, [ebp+eax*4] /* eax = lcode[hold & lmask] */\n\nL_dolen:\n\tmov\tcl, ah            /* cl = this.bits */\n\tsub\tbl, ah            /* bits -= this.bits */\n\tshr\tedx, cl           /* hold >>= this.bits */\n\n\ttest\tal, al\n\tjnz\tL_test_for_length_base /* if (op != 0) 45.7% */\n\n\tshr\teax, 16            /* output this.val char */\n\tstosb\n\tjmp\tL_while_test\n\nALIGN 4\nL_test_for_length_base:\n\tmov\tecx, eax          /* len = this */\n\tshr\tecx, 16            /* len = this.val */\n\tmov\t[esp+64], ecx      /* save len */\n\tmov\tcl, al\n\n\ttest\tal, 16\n\tjz\tL_test_for_second_level_length /* if ((op & 16) == 0) 8% */\n\tand\tcl, 15             /* op &= 15 */\n\tjz\tL_decode_distance    /* if (!op) */\n\tcmp\tbl, cl\n\tjae\tL_add_bits_to_len    /* if (op <= bits) */\n\n\tmov\tch, cl            /* stash op in ch, freeing cl */\n\txor\teax, eax\n\tlodsw                         /* al = *(ushort *)in++ */\n\tmov\tcl, bl            /* cl = bits, needs it for shifting */\n\tadd\tbl, 16             /* bits += 16 */\n\tshl\teax, cl\n\tor\tedx, eax         /* hold |= *((ushort *)in)++ << bits */\n\tmov\tcl, ch            /* move op back to ecx */\n\nL_add_bits_to_len:\n\tsub\tbl, cl\n\txor\teax, eax\n\tinc\teax\n\tshl\teax, cl\n\tdec\teax\n\tand\teax, edx          /* eax &= hold */\n\tshr\tedx, cl\n\tadd\t[esp+64], eax      /* len += hold & mask[op] */\n\nL_decode_distance:\n\tcmp\tbl, 15\n\tja\tL_get_distance_code  /* if (15 < bits) */\n\n\txor\teax, eax\n\tlodsw                         /* al = *(ushort *)in++ */\n\tmov\tcl, bl            /* cl = bits, needs it for shifting */\n\tadd\tbl, 16             /* bits += 16 */\n\tshl\teax, cl\n\tor\tedx, eax         /* hold |= *((ushort *)in)++ << bits */\n\nL_get_distance_code:\n\tmov\teax, [esp+60]      /* eax = dmask */\n\tmov\tecx, [esp+36]      /* ecx = dcode */\n\tand\teax, edx          /* eax &= hold */\n\tmov\teax, [ecx+eax*4]/* eax = dcode[hold & dmask] */\n\nL_dodist:\n\tmov\tebp, eax          /* dist = this */\n\tshr\tebp, 16            /* dist = this.val */\n\tmov\tcl, ah\n\tsub\tbl, ah            /* bits -= this.bits */\n\tshr\tedx, cl           /* hold >>= this.bits */\n\tmov\tcl, al            /* cl = this.op */\n\n\ttest\tal, 16             /* if ((op & 16) == 0) */\n\tjz\tL_test_for_second_level_dist\n\tand\tcl, 15             /* op &= 15 */\n\tjz\tL_check_dist_one\n\tcmp\tbl, cl\n\tjae\tL_add_bits_to_dist   /* if (op <= bits) 97.6% */\n\n\tmov\tch, cl            /* stash op in ch, freeing cl */\n\txor\teax, eax\n\tlodsw                         /* al = *(ushort *)in++ */\n\tmov\tcl, bl            /* cl = bits, needs it for shifting */\n\tadd\tbl, 16             /* bits += 16 */\n\tshl\teax, cl\n\tor\tedx, eax        /* hold |= *((ushort *)in)++ << bits */\n\tmov\tcl, ch            /* move op back to ecx */\n\nL_add_bits_to_dist:\n\tsub\tbl, cl\n\txor\teax, eax\n\tinc\teax\n\tshl\teax, cl\n\tdec\teax                 /* (1 << op) - 1 */\n\tand\teax, edx          /* eax &= hold */\n\tshr\tedx, cl\n\tadd\tebp, eax          /* dist += hold & ((1 << op) - 1) */\n\nL_check_window:\n\tmov\t[esp+8], esi       /* save in so from can use it's reg */\n\tmov\teax, edi\n\tsub\teax, [esp+20]      /* nbytes = out - beg */\n\n\tcmp\teax, ebp\n\tjb\tL_clip_window        /* if (dist > nbytes) 4.2% */\n\n\tmov\tecx, [esp+64]      /* ecx = len */\n\tmov\tesi, edi\n\tsub\tesi, ebp          /* from = out - dist */\n\n\tsar\tecx, 1\n\tjnc\tL_copy_two\n\n\trep     movsw\n\tmov\tal, [esi]\n\tmov\t[edi], al\n\tinc\tedi\n\n\tmov\tesi, [esp+8]      /* move in back to %esi, toss from */\n\tmov\tebp, [esp+32]     /* ebp = lcode */\n\tjmp\tL_while_test\n\nL_copy_two:\n\trep     movsw\n\tmov\tesi, [esp+8]      /* move in back to %esi, toss from */\n\tmov\tebp, [esp+32]     /* ebp = lcode */\n\tjmp\tL_while_test\n\nALIGN 4\nL_check_dist_one:\n\tcmp\tebp, 1            /* if dist 1, is a memset */\n\tjne\tL_check_window\n\tcmp\t[esp+20], edi\n\tje\tL_check_window    /* out == beg, if outside window */\n\n\tmov\tecx, [esp+64]     /* ecx = len */\n\tmov\tal, [edi-1]\n\tmov\tah, al\n\n\tsar\tecx, 1\n\tjnc\tL_set_two\n\tmov\t[edi], al         /* memset out with from[-1] */\n\tinc\tedi\n\nL_set_two:\n\trep     stosw\n\tmov\tebp, [esp+32]     /* ebp = lcode */\n\tjmp\tL_while_test\n\nALIGN 4\nL_test_for_second_level_length:\n\ttest\tal, 64\n\tjnz\tL_test_for_end_of_block /* if ((op & 64) != 0) */\n\n\txor\teax, eax\n\tinc\teax\n\tshl\teax, cl\n\tdec\teax\n\tand\teax, edx         /* eax &= hold */\n\tadd\teax, [esp+64]     /* eax += len */\n\tmov\teax, [ebp+eax*4] /* eax = lcode[val+(hold&mask[op])]*/\n\tjmp\tL_dolen\n\nALIGN 4\nL_test_for_second_level_dist:\n\ttest\tal, 64\n\tjnz\tL_invalid_distance_code /* if ((op & 64) != 0) */\n\n\txor\teax, eax\n\tinc\teax\n\tshl\teax, cl\n\tdec\teax\n\tand\teax, edx         /* eax &= hold */\n\tadd\teax, ebp         /* eax += dist */\n\tmov\tecx, [esp+36]     /* ecx = dcode */\n\tmov\teax, [ecx+eax*4] /* eax = dcode[val+(hold&mask[op])]*/\n\tjmp\tL_dodist\n\nALIGN 4\nL_clip_window:\n\tmov\tecx, eax\n\tmov\teax, [esp+48]     /* eax = wsize */\n\tneg\tecx                /* nbytes = -nbytes */\n\tmov\tesi, [esp+28]     /* from = window */\n\n\tcmp\teax, ebp\n\tjb\tL_invalid_distance_too_far /* if (dist > wsize) */\n\n\tadd\tecx, ebp         /* nbytes = dist - nbytes */\n\tcmp\tdword ptr [esp+52], 0\n\tjne\tL_wrap_around_window /* if (write != 0) */\n\n\tsub\teax, ecx\n\tadd\tesi, eax         /* from += wsize - nbytes */\n\n\tmov\teax, [esp+64]    /* eax = len */\n\tcmp\teax, ecx\n\tjbe\tL_do_copy          /* if (nbytes >= len) */\n\n\tsub\teax, ecx         /* len -= nbytes */\n\trep     movsb\n\tmov\tesi, edi\n\tsub\tesi, ebp         /* from = out - dist */\n\tjmp\tL_do_copy\n\nALIGN 4\nL_wrap_around_window:\n\tmov\teax, [esp+52]    /* eax = write */\n\tcmp\tecx, eax\n\tjbe\tL_contiguous_in_window /* if (write >= nbytes) */\n\n\tadd\tesi, [esp+48]    /* from += wsize */\n\tadd\tesi, eax         /* from += write */\n\tsub\tesi, ecx         /* from -= nbytes */\n\tsub\tecx, eax         /* nbytes -= write */\n\n\tmov\teax, [esp+64]    /* eax = len */\n\tcmp\teax, ecx\n\tjbe\tL_do_copy          /* if (nbytes >= len) */\n\n\tsub\teax, ecx         /* len -= nbytes */\n\trep     movsb\n\tmov\tesi, [esp+28]     /* from = window */\n\tmov\tecx, [esp+52]     /* nbytes = write */\n\tcmp\teax, ecx\n\tjbe\tL_do_copy          /* if (nbytes >= len) */\n\n\tsub\teax, ecx         /* len -= nbytes */\n\trep     movsb\n\tmov\tesi, edi\n\tsub\tesi, ebp         /* from = out - dist */\n\tjmp\tL_do_copy\n\nALIGN 4\nL_contiguous_in_window:\n\tadd\tesi, eax\n\tsub\tesi, ecx         /* from += write - nbytes */\n\n\tmov\teax, [esp+64]    /* eax = len */\n\tcmp\teax, ecx\n\tjbe\tL_do_copy          /* if (nbytes >= len) */\n\n\tsub\teax, ecx         /* len -= nbytes */\n\trep     movsb\n\tmov\tesi, edi\n\tsub\tesi, ebp         /* from = out - dist */\n\tjmp\tL_do_copy\n\nALIGN 4\nL_do_copy:\n\tmov\tecx, eax\n\trep     movsb\n\n\tmov\tesi, [esp+8]      /* move in back to %esi, toss from */\n\tmov\tebp, [esp+32]     /* ebp = lcode */\n\tjmp\tL_while_test\n\nL_test_for_end_of_block:\n\ttest\tal, 32\n\tjz\tL_invalid_literal_length_code\n\tmov\tdword ptr [esp+72], 1\n\tjmp\tL_break_loop_with_status\n\nL_invalid_literal_length_code:\n\tmov\tdword ptr [esp+72], 2\n\tjmp\tL_break_loop_with_status\n\nL_invalid_distance_code:\n\tmov\tdword ptr [esp+72], 3\n\tjmp\tL_break_loop_with_status\n\nL_invalid_distance_too_far:\n\tmov\tesi, [esp+4]\n\tmov\tdword ptr [esp+72], 4\n\tjmp\tL_break_loop_with_status\n\nL_break_loop:\n\tmov\tdword ptr [esp+72], 0\n\nL_break_loop_with_status:\n/* put in, out, bits, and hold back into ar and pop esp */\n\tmov\t[esp+8], esi     /* save in */\n\tmov\t[esp+16], edi    /* save out */\n\tmov\t[esp+44], ebx    /* save bits */\n\tmov\t[esp+40], edx    /* save hold */\n\tmov\tebp, [esp+4]     /* restore esp, ebp */\n\tmov\tesp, [esp]\n    }\n#else\n#error \"x86 architecture not defined\"\n#endif\n\n    if (ar.status > 1) {\n        if (ar.status == 2)\n            strm->msg = \"invalid literal/length code\";\n        else if (ar.status == 3)\n            strm->msg = \"invalid distance code\";\n        else\n            strm->msg = \"invalid distance too far back\";\n        state->mode = BAD;\n    }\n    else if ( ar.status == 1 ) {\n        state->mode = TYPE;\n    }\n\n    /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n    ar.len = ar.bits >> 3;\n    ar.in -= ar.len;\n    ar.bits -= ar.len << 3;\n    ar.hold &= (1U << ar.bits) - 1;\n\n    /* update state and return */\n    strm->next_in = ar.in;\n    strm->next_out = ar.out;\n    strm->avail_in = (unsigned)(ar.in < ar.last ?\n                                PAD_AVAIL_IN + (ar.last - ar.in) :\n                                PAD_AVAIL_IN - (ar.in - ar.last));\n    strm->avail_out = (unsigned)(ar.out < ar.end ?\n                                 PAD_AVAIL_OUT + (ar.end - ar.out) :\n                                 PAD_AVAIL_OUT - (ar.out - ar.end));\n    state->hold = ar.hold;\n    state->bits = ar.bits;\n    return;\n}\n\n"
  },
  {
    "path": "external/zlib/contrib/inflate86/inffast.S",
    "content": "/*\n * inffast.S is a hand tuned assembler version of:\n *\n * inffast.c -- fast decoding\n * Copyright (C) 1995-2003 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n *\n * Copyright (C) 2003 Chris Anderson <christop@charm.net>\n * Please use the copyright conditions above.\n *\n * This version (Jan-23-2003) of inflate_fast was coded and tested under\n * GNU/Linux on a pentium 3, using the gcc-3.2 compiler distribution.  On that\n * machine, I found that gzip style archives decompressed about 20% faster than\n * the gcc-3.2 -O3 -fomit-frame-pointer compiled version.  Your results will\n * depend on how large of a buffer is used for z_stream.next_in & next_out\n * (8K-32K worked best for my 256K cpu cache) and how much overhead there is in\n * stream processing I/O and crc32/addler32.  In my case, this routine used\n * 70% of the cpu time and crc32 used 20%.\n *\n * I am confident that this version will work in the general case, but I have\n * not tested a wide variety of datasets or a wide variety of platforms.\n *\n * Jan-24-2003 -- Added -DUSE_MMX define for slightly faster inflating.\n * It should be a runtime flag instead of compile time flag...\n *\n * Jan-26-2003 -- Added runtime check for MMX support with cpuid instruction.\n * With -DUSE_MMX, only MMX code is compiled.  With -DNO_MMX, only non-MMX code\n * is compiled.  Without either option, runtime detection is enabled.  Runtime\n * detection should work on all modern cpus and the recomended algorithm (flip\n * ID bit on eflags and then use the cpuid instruction) is used in many\n * multimedia applications.  Tested under win2k with gcc-2.95 and gas-2.12\n * distributed with cygwin3.  Compiling with gcc-2.95 -c inffast.S -o\n * inffast.obj generates a COFF object which can then be linked with MSVC++\n * compiled code.  Tested under FreeBSD 4.7 with gcc-2.95.\n *\n * Jan-28-2003 -- Tested Athlon XP... MMX mode is slower than no MMX (and\n * slower than compiler generated code).  Adjusted cpuid check to use the MMX\n * code only for Pentiums < P4 until I have more data on the P4.  Speed\n * improvment is only about 15% on the Athlon when compared with code generated\n * with MSVC++.  Not sure yet, but I think the P4 will also be slower using the\n * MMX mode because many of it's x86 ALU instructions execute in .5 cycles and\n * have less latency than MMX ops.  Added code to buffer the last 11 bytes of\n * the input stream since the MMX code grabs bits in chunks of 32, which\n * differs from the inffast.c algorithm.  I don't think there would have been\n * read overruns where a page boundary was crossed (a segfault), but there\n * could have been overruns when next_in ends on unaligned memory (unintialized\n * memory read).\n *\n * Mar-13-2003 -- P4 MMX is slightly slower than P4 NO_MMX.  I created a C\n * version of the non-MMX code so that it doesn't depend on zstrm and zstate\n * structure offsets which are hard coded in this file.  This was last tested\n * with zlib-1.2.0 which is currently in beta testing, newer versions of this\n * and inffas86.c can be found at http://www.eetbeetee.com/zlib/ and\n * http://www.charm.net/~christop/zlib/\n */\n\n\n/*\n * if you have underscore linking problems (_inflate_fast undefined), try\n * using -DGAS_COFF\n */\n#if ! defined( GAS_COFF ) && ! defined( GAS_ELF )\n\n#if defined( WIN32 ) || defined( __CYGWIN__ )\n#define GAS_COFF /* windows object format */\n#else\n#define GAS_ELF\n#endif\n\n#endif /* ! GAS_COFF && ! GAS_ELF */\n\n\n#if defined( GAS_COFF )\n\n/* coff externals have underscores */\n#define inflate_fast _inflate_fast\n#define inflate_fast_use_mmx _inflate_fast_use_mmx\n\n#endif /* GAS_COFF */\n\n\n.file \"inffast.S\"\n\n.globl inflate_fast\n\n.text\n.align 4,0\n.L_invalid_literal_length_code_msg:\n.string \"invalid literal/length code\"\n\n.align 4,0\n.L_invalid_distance_code_msg:\n.string \"invalid distance code\"\n\n.align 4,0\n.L_invalid_distance_too_far_msg:\n.string \"invalid distance too far back\"\n\n#if ! defined( NO_MMX )\n.align 4,0\n.L_mask: /* mask[N] = ( 1 << N ) - 1 */\n.long 0\n.long 1\n.long 3\n.long 7\n.long 15\n.long 31\n.long 63\n.long 127\n.long 255\n.long 511\n.long 1023\n.long 2047\n.long 4095\n.long 8191\n.long 16383\n.long 32767\n.long 65535\n.long 131071\n.long 262143\n.long 524287\n.long 1048575\n.long 2097151\n.long 4194303\n.long 8388607\n.long 16777215\n.long 33554431\n.long 67108863\n.long 134217727\n.long 268435455\n.long 536870911\n.long 1073741823\n.long 2147483647\n.long 4294967295\n#endif /* NO_MMX */\n\n.text\n\n/*\n * struct z_stream offsets, in zlib.h\n */\n#define next_in_strm   0   /* strm->next_in */\n#define avail_in_strm  4   /* strm->avail_in */\n#define next_out_strm  12  /* strm->next_out */\n#define avail_out_strm 16  /* strm->avail_out */\n#define msg_strm       24  /* strm->msg */\n#define state_strm     28  /* strm->state */\n\n/*\n * struct inflate_state offsets, in inflate.h\n */\n#define mode_state     0   /* state->mode */\n#define wsize_state    32  /* state->wsize */\n#define write_state    40  /* state->write */\n#define window_state   44  /* state->window */\n#define hold_state     48  /* state->hold */\n#define bits_state     52  /* state->bits */\n#define lencode_state  68  /* state->lencode */\n#define distcode_state 72  /* state->distcode */\n#define lenbits_state  76  /* state->lenbits */\n#define distbits_state 80  /* state->distbits */\n\n/*\n * inflate_fast's activation record\n */\n#define local_var_size 64 /* how much local space for vars */\n#define strm_sp        88 /* first arg: z_stream * (local_var_size + 24) */\n#define start_sp       92 /* second arg: unsigned int (local_var_size + 28) */\n\n/*\n * offsets for local vars on stack\n */\n#define out            60  /* unsigned char* */\n#define window         56  /* unsigned char* */\n#define wsize          52  /* unsigned int */\n#define write          48  /* unsigned int */\n#define in             44  /* unsigned char* */\n#define beg            40  /* unsigned char* */\n#define buf            28  /* char[ 12 ] */\n#define len            24  /* unsigned int */\n#define last           20  /* unsigned char* */\n#define end            16  /* unsigned char* */\n#define dcode          12  /* code* */\n#define lcode           8  /* code* */\n#define dmask           4  /* unsigned int */\n#define lmask           0  /* unsigned int */\n\n/*\n * typedef enum inflate_mode consts, in inflate.h\n */\n#define INFLATE_MODE_TYPE 11  /* state->mode flags enum-ed in inflate.h */\n#define INFLATE_MODE_BAD  26\n\n\n#if ! defined( USE_MMX ) && ! defined( NO_MMX )\n\n#define RUN_TIME_MMX\n\n#define CHECK_MMX    1\n#define DO_USE_MMX   2\n#define DONT_USE_MMX 3\n\n.globl inflate_fast_use_mmx\n\n.data\n\n.align 4,0\ninflate_fast_use_mmx: /* integer flag for run time control 1=check,2=mmx,3=no */\n.long CHECK_MMX\n\n#if defined( GAS_ELF )\n/* elf info */\n.type   inflate_fast_use_mmx,@object\n.size   inflate_fast_use_mmx,4\n#endif\n\n#endif /* RUN_TIME_MMX */\n\n#if defined( GAS_COFF )\n/* coff info: scl 2 = extern, type 32 = function */\n.def inflate_fast; .scl 2; .type 32; .endef\n#endif\n\n.text\n\n.align 32,0x90\ninflate_fast:\n        pushl   %edi\n        pushl   %esi\n        pushl   %ebp\n        pushl   %ebx\n        pushf   /* save eflags (strm_sp, state_sp assumes this is 32 bits) */\n        subl    $local_var_size, %esp\n        cld\n\n#define strm_r  %esi\n#define state_r %edi\n\n        movl    strm_sp(%esp), strm_r\n        movl    state_strm(strm_r), state_r\n\n        /* in = strm->next_in;\n         * out = strm->next_out;\n         * last = in + strm->avail_in - 11;\n         * beg = out - (start - strm->avail_out);\n         * end = out + (strm->avail_out - 257);\n         */\n        movl    avail_in_strm(strm_r), %edx\n        movl    next_in_strm(strm_r), %eax\n\n        addl    %eax, %edx      /* avail_in += next_in */\n        subl    $11, %edx       /* avail_in -= 11 */\n\n        movl    %eax, in(%esp)\n        movl    %edx, last(%esp)\n\n        movl    start_sp(%esp), %ebp\n        movl    avail_out_strm(strm_r), %ecx\n        movl    next_out_strm(strm_r), %ebx\n\n        subl    %ecx, %ebp      /* start -= avail_out */\n        negl    %ebp            /* start = -start */\n        addl    %ebx, %ebp      /* start += next_out */\n\n        subl    $257, %ecx      /* avail_out -= 257 */\n        addl    %ebx, %ecx      /* avail_out += out */\n\n        movl    %ebx, out(%esp)\n        movl    %ebp, beg(%esp)\n        movl    %ecx, end(%esp)\n\n        /* wsize = state->wsize;\n         * write = state->write;\n         * window = state->window;\n         * hold = state->hold;\n         * bits = state->bits;\n         * lcode = state->lencode;\n         * dcode = state->distcode;\n         * lmask = ( 1 << state->lenbits ) - 1;\n         * dmask = ( 1 << state->distbits ) - 1;\n         */\n\n        movl    lencode_state(state_r), %eax\n        movl    distcode_state(state_r), %ecx\n\n        movl    %eax, lcode(%esp)\n        movl    %ecx, dcode(%esp)\n\n        movl    $1, %eax\n        movl    lenbits_state(state_r), %ecx\n        shll    %cl, %eax\n        decl    %eax\n        movl    %eax, lmask(%esp)\n\n        movl    $1, %eax\n        movl    distbits_state(state_r), %ecx\n        shll    %cl, %eax\n        decl    %eax\n        movl    %eax, dmask(%esp)\n\n        movl    wsize_state(state_r), %eax\n        movl    write_state(state_r), %ecx\n        movl    window_state(state_r), %edx\n\n        movl    %eax, wsize(%esp)\n        movl    %ecx, write(%esp)\n        movl    %edx, window(%esp)\n\n        movl    hold_state(state_r), %ebp\n        movl    bits_state(state_r), %ebx\n\n#undef strm_r\n#undef state_r\n\n#define in_r       %esi\n#define from_r     %esi\n#define out_r      %edi\n\n        movl    in(%esp), in_r\n        movl    last(%esp), %ecx\n        cmpl    in_r, %ecx\n        ja      .L_align_long           /* if in < last */\n\n        addl    $11, %ecx               /* ecx = &in[ avail_in ] */\n        subl    in_r, %ecx              /* ecx = avail_in */\n        movl    $12, %eax\n        subl    %ecx, %eax              /* eax = 12 - avail_in */\n        leal    buf(%esp), %edi\n        rep     movsb                   /* memcpy( buf, in, avail_in ) */\n        movl    %eax, %ecx\n        xorl    %eax, %eax\n        rep     stosb         /* memset( &buf[ avail_in ], 0, 12 - avail_in ) */\n        leal    buf(%esp), in_r         /* in = buf */\n        movl    in_r, last(%esp)        /* last = in, do just one iteration */\n        jmp     .L_is_aligned\n\n        /* align in_r on long boundary */\n.L_align_long:\n        testl   $3, in_r\n        jz      .L_is_aligned\n        xorl    %eax, %eax\n        movb    (in_r), %al\n        incl    in_r\n        movl    %ebx, %ecx\n        addl    $8, %ebx\n        shll    %cl, %eax\n        orl     %eax, %ebp\n        jmp     .L_align_long\n\n.L_is_aligned:\n        movl    out(%esp), out_r\n\n#if defined( NO_MMX )\n        jmp     .L_do_loop\n#endif\n\n#if defined( USE_MMX )\n        jmp     .L_init_mmx\n#endif\n\n/*** Runtime MMX check ***/\n\n#if defined( RUN_TIME_MMX )\n.L_check_mmx:\n        cmpl    $DO_USE_MMX, inflate_fast_use_mmx\n        je      .L_init_mmx\n        ja      .L_do_loop /* > 2 */\n\n        pushl   %eax\n        pushl   %ebx\n        pushl   %ecx\n        pushl   %edx\n        pushf\n        movl    (%esp), %eax      /* copy eflags to eax */\n        xorl    $0x200000, (%esp) /* try toggling ID bit of eflags (bit 21)\n                                   * to see if cpu supports cpuid...\n                                   * ID bit method not supported by NexGen but\n                                   * bios may load a cpuid instruction and\n                                   * cpuid may be disabled on Cyrix 5-6x86 */\n        popf\n        pushf\n        popl    %edx              /* copy new eflags to edx */\n        xorl    %eax, %edx        /* test if ID bit is flipped */\n        jz      .L_dont_use_mmx   /* not flipped if zero */\n        xorl    %eax, %eax\n        cpuid\n        cmpl    $0x756e6547, %ebx /* check for GenuineIntel in ebx,ecx,edx */\n        jne     .L_dont_use_mmx\n        cmpl    $0x6c65746e, %ecx\n        jne     .L_dont_use_mmx\n        cmpl    $0x49656e69, %edx\n        jne     .L_dont_use_mmx\n        movl    $1, %eax\n        cpuid                     /* get cpu features */\n        shrl    $8, %eax\n        andl    $15, %eax\n        cmpl    $6, %eax          /* check for Pentium family, is 0xf for P4 */\n        jne     .L_dont_use_mmx\n        testl   $0x800000, %edx   /* test if MMX feature is set (bit 23) */\n        jnz     .L_use_mmx\n        jmp     .L_dont_use_mmx\n.L_use_mmx:\n        movl    $DO_USE_MMX, inflate_fast_use_mmx\n        jmp     .L_check_mmx_pop\n.L_dont_use_mmx:\n        movl    $DONT_USE_MMX, inflate_fast_use_mmx\n.L_check_mmx_pop:\n        popl    %edx\n        popl    %ecx\n        popl    %ebx\n        popl    %eax\n        jmp     .L_check_mmx\n#endif\n\n\n/*** Non-MMX code ***/\n\n#if defined ( NO_MMX ) || defined( RUN_TIME_MMX )\n\n#define hold_r     %ebp\n#define bits_r     %bl\n#define bitslong_r %ebx\n\n.align 32,0x90\n.L_while_test:\n        /* while (in < last && out < end)\n         */\n        cmpl    out_r, end(%esp)\n        jbe     .L_break_loop           /* if (out >= end) */\n\n        cmpl    in_r, last(%esp)\n        jbe     .L_break_loop\n\n.L_do_loop:\n        /* regs: %esi = in, %ebp = hold, %bl = bits, %edi = out\n         *\n         * do {\n         *   if (bits < 15) {\n         *     hold |= *((unsigned short *)in)++ << bits;\n         *     bits += 16\n         *   }\n         *   this = lcode[hold & lmask]\n         */\n        cmpb    $15, bits_r\n        ja      .L_get_length_code      /* if (15 < bits) */\n\n        xorl    %eax, %eax\n        lodsw                           /* al = *(ushort *)in++ */\n        movb    bits_r, %cl             /* cl = bits, needs it for shifting */\n        addb    $16, bits_r             /* bits += 16 */\n        shll    %cl, %eax\n        orl     %eax, hold_r            /* hold |= *((ushort *)in)++ << bits */\n\n.L_get_length_code:\n        movl    lmask(%esp), %edx       /* edx = lmask */\n        movl    lcode(%esp), %ecx       /* ecx = lcode */\n        andl    hold_r, %edx            /* edx &= hold */\n        movl    (%ecx,%edx,4), %eax     /* eax = lcode[hold & lmask] */\n\n.L_dolen:\n        /* regs: %esi = in, %ebp = hold, %bl = bits, %edi = out\n         *\n         * dolen:\n         *    bits -= this.bits;\n         *    hold >>= this.bits\n         */\n        movb    %ah, %cl                /* cl = this.bits */\n        subb    %ah, bits_r             /* bits -= this.bits */\n        shrl    %cl, hold_r             /* hold >>= this.bits */\n\n        /* check if op is a literal\n         * if (op == 0) {\n         *    PUP(out) = this.val;\n         *  }\n         */\n        testb   %al, %al\n        jnz     .L_test_for_length_base /* if (op != 0) 45.7% */\n\n        shrl    $16, %eax               /* output this.val char */\n        stosb\n        jmp     .L_while_test\n\n.L_test_for_length_base:\n        /* regs: %esi = in, %ebp = hold, %bl = bits, %edi = out, %edx = len\n         *\n         * else if (op & 16) {\n         *   len = this.val\n         *   op &= 15\n         *   if (op) {\n         *     if (op > bits) {\n         *       hold |= *((unsigned short *)in)++ << bits;\n         *       bits += 16\n         *     }\n         *     len += hold & mask[op];\n         *     bits -= op;\n         *     hold >>= op;\n         *   }\n         */\n#define len_r %edx\n        movl    %eax, len_r             /* len = this */\n        shrl    $16, len_r              /* len = this.val */\n        movb    %al, %cl\n\n        testb   $16, %al\n        jz      .L_test_for_second_level_length /* if ((op & 16) == 0) 8% */\n        andb    $15, %cl                /* op &= 15 */\n        jz      .L_save_len             /* if (!op) */\n        cmpb    %cl, bits_r\n        jae     .L_add_bits_to_len      /* if (op <= bits) */\n\n        movb    %cl, %ch                /* stash op in ch, freeing cl */\n        xorl    %eax, %eax\n        lodsw                           /* al = *(ushort *)in++ */\n        movb    bits_r, %cl             /* cl = bits, needs it for shifting */\n        addb    $16, bits_r             /* bits += 16 */\n        shll    %cl, %eax\n        orl     %eax, hold_r            /* hold |= *((ushort *)in)++ << bits */\n        movb    %ch, %cl                /* move op back to ecx */\n\n.L_add_bits_to_len:\n        movl    $1, %eax\n        shll    %cl, %eax\n        decl    %eax\n        subb    %cl, bits_r\n        andl    hold_r, %eax            /* eax &= hold */\n        shrl    %cl, hold_r\n        addl    %eax, len_r             /* len += hold & mask[op] */\n\n.L_save_len:\n        movl    len_r, len(%esp)        /* save len */\n#undef  len_r\n\n.L_decode_distance:\n        /* regs: %esi = in, %ebp = hold, %bl = bits, %edi = out, %edx = dist\n         *\n         *   if (bits < 15) {\n         *     hold |= *((unsigned short *)in)++ << bits;\n         *     bits += 16\n         *   }\n         *   this = dcode[hold & dmask];\n         * dodist:\n         *   bits -= this.bits;\n         *   hold >>= this.bits;\n         *   op = this.op;\n         */\n\n        cmpb    $15, bits_r\n        ja      .L_get_distance_code    /* if (15 < bits) */\n\n        xorl    %eax, %eax\n        lodsw                           /* al = *(ushort *)in++ */\n        movb    bits_r, %cl             /* cl = bits, needs it for shifting */\n        addb    $16, bits_r             /* bits += 16 */\n        shll    %cl, %eax\n        orl     %eax, hold_r            /* hold |= *((ushort *)in)++ << bits */\n\n.L_get_distance_code:\n        movl    dmask(%esp), %edx       /* edx = dmask */\n        movl    dcode(%esp), %ecx       /* ecx = dcode */\n        andl    hold_r, %edx            /* edx &= hold */\n        movl    (%ecx,%edx,4), %eax     /* eax = dcode[hold & dmask] */\n\n#define dist_r %edx\n.L_dodist:\n        movl    %eax, dist_r            /* dist = this */\n        shrl    $16, dist_r             /* dist = this.val */\n        movb    %ah, %cl\n        subb    %ah, bits_r             /* bits -= this.bits */\n        shrl    %cl, hold_r             /* hold >>= this.bits */\n\n        /* if (op & 16) {\n         *   dist = this.val\n         *   op &= 15\n         *   if (op > bits) {\n         *     hold |= *((unsigned short *)in)++ << bits;\n         *     bits += 16\n         *   }\n         *   dist += hold & mask[op];\n         *   bits -= op;\n         *   hold >>= op;\n         */\n        movb    %al, %cl                /* cl = this.op */\n\n        testb   $16, %al                /* if ((op & 16) == 0) */\n        jz      .L_test_for_second_level_dist\n        andb    $15, %cl                /* op &= 15 */\n        jz      .L_check_dist_one\n        cmpb    %cl, bits_r\n        jae     .L_add_bits_to_dist     /* if (op <= bits) 97.6% */\n\n        movb    %cl, %ch                /* stash op in ch, freeing cl */\n        xorl    %eax, %eax\n        lodsw                           /* al = *(ushort *)in++ */\n        movb    bits_r, %cl             /* cl = bits, needs it for shifting */\n        addb    $16, bits_r             /* bits += 16 */\n        shll    %cl, %eax\n        orl     %eax, hold_r            /* hold |= *((ushort *)in)++ << bits */\n        movb    %ch, %cl                /* move op back to ecx */\n\n.L_add_bits_to_dist:\n        movl    $1, %eax\n        shll    %cl, %eax\n        decl    %eax                    /* (1 << op) - 1 */\n        subb    %cl, bits_r\n        andl    hold_r, %eax            /* eax &= hold */\n        shrl    %cl, hold_r\n        addl    %eax, dist_r            /* dist += hold & ((1 << op) - 1) */\n        jmp     .L_check_window\n\n.L_check_window:\n        /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist\n         *       %ecx = nbytes\n         *\n         * nbytes = out - beg;\n         * if (dist <= nbytes) {\n         *   from = out - dist;\n         *   do {\n         *     PUP(out) = PUP(from);\n         *   } while (--len > 0) {\n         * }\n         */\n\n        movl    in_r, in(%esp)          /* save in so from can use it's reg */\n        movl    out_r, %eax\n        subl    beg(%esp), %eax         /* nbytes = out - beg */\n\n        cmpl    dist_r, %eax\n        jb      .L_clip_window          /* if (dist > nbytes) 4.2% */\n\n        movl    len(%esp), %ecx\n        movl    out_r, from_r\n        subl    dist_r, from_r          /* from = out - dist */\n\n        subl    $3, %ecx\n        movb    (from_r), %al\n        movb    %al, (out_r)\n        movb    1(from_r), %al\n        movb    2(from_r), %dl\n        addl    $3, from_r\n        movb    %al, 1(out_r)\n        movb    %dl, 2(out_r)\n        addl    $3, out_r\n        rep     movsb\n\n        movl    in(%esp), in_r          /* move in back to %esi, toss from */\n        jmp     .L_while_test\n\n.align 16,0x90\n.L_check_dist_one:\n        cmpl    $1, dist_r\n        jne     .L_check_window\n        cmpl    out_r, beg(%esp)\n        je      .L_check_window\n\n        decl    out_r\n        movl    len(%esp), %ecx\n        movb    (out_r), %al\n        subl    $3, %ecx\n\n        movb    %al, 1(out_r)\n        movb    %al, 2(out_r)\n        movb    %al, 3(out_r)\n        addl    $4, out_r\n        rep     stosb\n\n        jmp     .L_while_test\n\n.align 16,0x90\n.L_test_for_second_level_length:\n        /* else if ((op & 64) == 0) {\n         *   this = lcode[this.val + (hold & mask[op])];\n         * }\n         */\n        testb   $64, %al\n        jnz     .L_test_for_end_of_block  /* if ((op & 64) != 0) */\n\n        movl    $1, %eax\n        shll    %cl, %eax\n        decl    %eax\n        andl    hold_r, %eax            /* eax &= hold */\n        addl    %edx, %eax              /* eax += this.val */\n        movl    lcode(%esp), %edx       /* edx = lcode */\n        movl    (%edx,%eax,4), %eax     /* eax = lcode[val + (hold&mask[op])] */\n        jmp     .L_dolen\n\n.align 16,0x90\n.L_test_for_second_level_dist:\n        /* else if ((op & 64) == 0) {\n         *   this = dcode[this.val + (hold & mask[op])];\n         * }\n         */\n        testb   $64, %al\n        jnz     .L_invalid_distance_code  /* if ((op & 64) != 0) */\n\n        movl    $1, %eax\n        shll    %cl, %eax\n        decl    %eax\n        andl    hold_r, %eax            /* eax &= hold */\n        addl    %edx, %eax              /* eax += this.val */\n        movl    dcode(%esp), %edx       /* edx = dcode */\n        movl    (%edx,%eax,4), %eax     /* eax = dcode[val + (hold&mask[op])] */\n        jmp     .L_dodist\n\n.align 16,0x90\n.L_clip_window:\n        /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist\n         *       %ecx = nbytes\n         *\n         * else {\n         *   if (dist > wsize) {\n         *     invalid distance\n         *   }\n         *   from = window;\n         *   nbytes = dist - nbytes;\n         *   if (write == 0) {\n         *     from += wsize - nbytes;\n         */\n#define nbytes_r %ecx\n        movl    %eax, nbytes_r\n        movl    wsize(%esp), %eax       /* prepare for dist compare */\n        negl    nbytes_r                /* nbytes = -nbytes */\n        movl    window(%esp), from_r    /* from = window */\n\n        cmpl    dist_r, %eax\n        jb      .L_invalid_distance_too_far /* if (dist > wsize) */\n\n        addl    dist_r, nbytes_r        /* nbytes = dist - nbytes */\n        cmpl    $0, write(%esp)\n        jne     .L_wrap_around_window   /* if (write != 0) */\n\n        subl    nbytes_r, %eax\n        addl    %eax, from_r            /* from += wsize - nbytes */\n\n        /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist\n         *       %ecx = nbytes, %eax = len\n         *\n         *     if (nbytes < len) {\n         *       len -= nbytes;\n         *       do {\n         *         PUP(out) = PUP(from);\n         *       } while (--nbytes);\n         *       from = out - dist;\n         *     }\n         *   }\n         */\n#define len_r %eax\n        movl    len(%esp), len_r\n        cmpl    nbytes_r, len_r\n        jbe     .L_do_copy1             /* if (nbytes >= len) */\n\n        subl    nbytes_r, len_r         /* len -= nbytes */\n        rep     movsb\n        movl    out_r, from_r\n        subl    dist_r, from_r          /* from = out - dist */\n        jmp     .L_do_copy1\n\n        cmpl    nbytes_r, len_r\n        jbe     .L_do_copy1             /* if (nbytes >= len) */\n\n        subl    nbytes_r, len_r         /* len -= nbytes */\n        rep     movsb\n        movl    out_r, from_r\n        subl    dist_r, from_r          /* from = out - dist */\n        jmp     .L_do_copy1\n\n.L_wrap_around_window:\n        /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist\n         *       %ecx = nbytes, %eax = write, %eax = len\n         *\n         *   else if (write < nbytes) {\n         *     from += wsize + write - nbytes;\n         *     nbytes -= write;\n         *     if (nbytes < len) {\n         *       len -= nbytes;\n         *       do {\n         *         PUP(out) = PUP(from);\n         *       } while (--nbytes);\n         *       from = window;\n         *       nbytes = write;\n         *       if (nbytes < len) {\n         *         len -= nbytes;\n         *         do {\n         *           PUP(out) = PUP(from);\n         *         } while(--nbytes);\n         *         from = out - dist;\n         *       }\n         *     }\n         *   }\n         */\n#define write_r %eax\n        movl    write(%esp), write_r\n        cmpl    write_r, nbytes_r\n        jbe     .L_contiguous_in_window /* if (write >= nbytes) */\n\n        addl    wsize(%esp), from_r\n        addl    write_r, from_r\n        subl    nbytes_r, from_r        /* from += wsize + write - nbytes */\n        subl    write_r, nbytes_r       /* nbytes -= write */\n#undef write_r\n\n        movl    len(%esp), len_r\n        cmpl    nbytes_r, len_r\n        jbe     .L_do_copy1             /* if (nbytes >= len) */\n\n        subl    nbytes_r, len_r         /* len -= nbytes */\n        rep     movsb\n        movl    window(%esp), from_r    /* from = window */\n        movl    write(%esp), nbytes_r   /* nbytes = write */\n        cmpl    nbytes_r, len_r\n        jbe     .L_do_copy1             /* if (nbytes >= len) */\n\n        subl    nbytes_r, len_r         /* len -= nbytes */\n        rep     movsb\n        movl    out_r, from_r\n        subl    dist_r, from_r          /* from = out - dist */\n        jmp     .L_do_copy1\n\n.L_contiguous_in_window:\n        /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist\n         *       %ecx = nbytes, %eax = write, %eax = len\n         *\n         *   else {\n         *     from += write - nbytes;\n         *     if (nbytes < len) {\n         *       len -= nbytes;\n         *       do {\n         *         PUP(out) = PUP(from);\n         *       } while (--nbytes);\n         *       from = out - dist;\n         *     }\n         *   }\n         */\n#define write_r %eax\n        addl    write_r, from_r\n        subl    nbytes_r, from_r        /* from += write - nbytes */\n#undef write_r\n\n        movl    len(%esp), len_r\n        cmpl    nbytes_r, len_r\n        jbe     .L_do_copy1             /* if (nbytes >= len) */\n\n        subl    nbytes_r, len_r         /* len -= nbytes */\n        rep     movsb\n        movl    out_r, from_r\n        subl    dist_r, from_r          /* from = out - dist */\n\n.L_do_copy1:\n        /* regs: %esi = from, %esi = in, %ebp = hold, %bl = bits, %edi = out\n         *       %eax = len\n         *\n         *     while (len > 0) {\n         *       PUP(out) = PUP(from);\n         *       len--;\n         *     }\n         *   }\n         * } while (in < last && out < end);\n         */\n#undef nbytes_r\n#define in_r %esi\n        movl    len_r, %ecx\n        rep     movsb\n\n        movl    in(%esp), in_r          /* move in back to %esi, toss from */\n        jmp     .L_while_test\n\n#undef len_r\n#undef dist_r\n\n#endif /* NO_MMX || RUN_TIME_MMX */\n\n\n/*** MMX code ***/\n\n#if defined( USE_MMX ) || defined( RUN_TIME_MMX )\n\n.align 32,0x90\n.L_init_mmx:\n        emms\n\n#undef  bits_r\n#undef  bitslong_r\n#define bitslong_r %ebp\n#define hold_mm    %mm0\n        movd    %ebp, hold_mm\n        movl    %ebx, bitslong_r\n\n#define used_mm   %mm1\n#define dmask2_mm %mm2\n#define lmask2_mm %mm3\n#define lmask_mm  %mm4\n#define dmask_mm  %mm5\n#define tmp_mm    %mm6\n\n        movd    lmask(%esp), lmask_mm\n        movq    lmask_mm, lmask2_mm\n        movd    dmask(%esp), dmask_mm\n        movq    dmask_mm, dmask2_mm\n        pxor    used_mm, used_mm\n        movl    lcode(%esp), %ebx       /* ebx = lcode */\n        jmp     .L_do_loop_mmx\n\n.align 32,0x90\n.L_while_test_mmx:\n        /* while (in < last && out < end)\n         */\n        cmpl    out_r, end(%esp)\n        jbe     .L_break_loop           /* if (out >= end) */\n\n        cmpl    in_r, last(%esp)\n        jbe     .L_break_loop\n\n.L_do_loop_mmx:\n        psrlq   used_mm, hold_mm        /* hold_mm >>= last bit length */\n\n        cmpl    $32, bitslong_r\n        ja      .L_get_length_code_mmx  /* if (32 < bits) */\n\n        movd    bitslong_r, tmp_mm\n        movd    (in_r), %mm7\n        addl    $4, in_r\n        psllq   tmp_mm, %mm7\n        addl    $32, bitslong_r\n        por     %mm7, hold_mm           /* hold_mm |= *((uint *)in)++ << bits */\n\n.L_get_length_code_mmx:\n        pand    hold_mm, lmask_mm\n        movd    lmask_mm, %eax\n        movq    lmask2_mm, lmask_mm\n        movl    (%ebx,%eax,4), %eax     /* eax = lcode[hold & lmask] */\n\n.L_dolen_mmx:\n        movzbl  %ah, %ecx               /* ecx = this.bits */\n        movd    %ecx, used_mm\n        subl    %ecx, bitslong_r        /* bits -= this.bits */\n\n        testb   %al, %al\n        jnz     .L_test_for_length_base_mmx /* if (op != 0) 45.7% */\n\n        shrl    $16, %eax               /* output this.val char */\n        stosb\n        jmp     .L_while_test_mmx\n\n.L_test_for_length_base_mmx:\n#define len_r  %edx\n        movl    %eax, len_r             /* len = this */\n        shrl    $16, len_r              /* len = this.val */\n\n        testb   $16, %al\n        jz      .L_test_for_second_level_length_mmx /* if ((op & 16) == 0) 8% */\n        andl    $15, %eax               /* op &= 15 */\n        jz      .L_decode_distance_mmx  /* if (!op) */\n\n        psrlq   used_mm, hold_mm        /* hold_mm >>= last bit length */\n        movd    %eax, used_mm\n        movd    hold_mm, %ecx\n        subl    %eax, bitslong_r\n        andl    .L_mask(,%eax,4), %ecx\n        addl    %ecx, len_r             /* len += hold & mask[op] */\n\n.L_decode_distance_mmx:\n        psrlq   used_mm, hold_mm        /* hold_mm >>= last bit length */\n\n        cmpl    $32, bitslong_r\n        ja      .L_get_dist_code_mmx    /* if (32 < bits) */\n\n        movd    bitslong_r, tmp_mm\n        movd    (in_r), %mm7\n        addl    $4, in_r\n        psllq   tmp_mm, %mm7\n        addl    $32, bitslong_r\n        por     %mm7, hold_mm           /* hold_mm |= *((uint *)in)++ << bits */\n\n.L_get_dist_code_mmx:\n        movl    dcode(%esp), %ebx       /* ebx = dcode */\n        pand    hold_mm, dmask_mm\n        movd    dmask_mm, %eax\n        movq    dmask2_mm, dmask_mm\n        movl    (%ebx,%eax,4), %eax     /* eax = dcode[hold & lmask] */\n\n.L_dodist_mmx:\n#define dist_r %ebx\n        movzbl  %ah, %ecx               /* ecx = this.bits */\n        movl    %eax, dist_r\n        shrl    $16, dist_r             /* dist  = this.val */\n        subl    %ecx, bitslong_r        /* bits -= this.bits */\n        movd    %ecx, used_mm\n\n        testb   $16, %al                /* if ((op & 16) == 0) */\n        jz      .L_test_for_second_level_dist_mmx\n        andl    $15, %eax               /* op &= 15 */\n        jz      .L_check_dist_one_mmx\n\n.L_add_bits_to_dist_mmx:\n        psrlq   used_mm, hold_mm        /* hold_mm >>= last bit length */\n        movd    %eax, used_mm           /* save bit length of current op */\n        movd    hold_mm, %ecx           /* get the next bits on input stream */\n        subl    %eax, bitslong_r        /* bits -= op bits */\n        andl    .L_mask(,%eax,4), %ecx  /* ecx   = hold & mask[op] */\n        addl    %ecx, dist_r            /* dist += hold & mask[op] */\n\n.L_check_window_mmx:\n        movl    in_r, in(%esp)          /* save in so from can use it's reg */\n        movl    out_r, %eax\n        subl    beg(%esp), %eax         /* nbytes = out - beg */\n\n        cmpl    dist_r, %eax\n        jb      .L_clip_window_mmx      /* if (dist > nbytes) 4.2% */\n\n        movl    len_r, %ecx\n        movl    out_r, from_r\n        subl    dist_r, from_r          /* from = out - dist */\n\n        subl    $3, %ecx\n        movb    (from_r), %al\n        movb    %al, (out_r)\n        movb    1(from_r), %al\n        movb    2(from_r), %dl\n        addl    $3, from_r\n        movb    %al, 1(out_r)\n        movb    %dl, 2(out_r)\n        addl    $3, out_r\n        rep     movsb\n\n        movl    in(%esp), in_r          /* move in back to %esi, toss from */\n        movl    lcode(%esp), %ebx       /* move lcode back to %ebx, toss dist */\n        jmp     .L_while_test_mmx\n\n.align 16,0x90\n.L_check_dist_one_mmx:\n        cmpl    $1, dist_r\n        jne     .L_check_window_mmx\n        cmpl    out_r, beg(%esp)\n        je      .L_check_window_mmx\n\n        decl    out_r\n        movl    len_r, %ecx\n        movb    (out_r), %al\n        subl    $3, %ecx\n\n        movb    %al, 1(out_r)\n        movb    %al, 2(out_r)\n        movb    %al, 3(out_r)\n        addl    $4, out_r\n        rep     stosb\n\n        movl    lcode(%esp), %ebx       /* move lcode back to %ebx, toss dist */\n        jmp     .L_while_test_mmx\n\n.align 16,0x90\n.L_test_for_second_level_length_mmx:\n        testb   $64, %al\n        jnz     .L_test_for_end_of_block  /* if ((op & 64) != 0) */\n\n        andl    $15, %eax\n        psrlq   used_mm, hold_mm        /* hold_mm >>= last bit length */\n        movd    hold_mm, %ecx\n        andl    .L_mask(,%eax,4), %ecx\n        addl    len_r, %ecx\n        movl    (%ebx,%ecx,4), %eax     /* eax = lcode[hold & lmask] */\n        jmp     .L_dolen_mmx\n\n.align 16,0x90\n.L_test_for_second_level_dist_mmx:\n        testb   $64, %al\n        jnz     .L_invalid_distance_code  /* if ((op & 64) != 0) */\n\n        andl    $15, %eax\n        psrlq   used_mm, hold_mm        /* hold_mm >>= last bit length */\n        movd    hold_mm, %ecx\n        andl    .L_mask(,%eax,4), %ecx\n        movl    dcode(%esp), %eax       /* ecx = dcode */\n        addl    dist_r, %ecx\n        movl    (%eax,%ecx,4), %eax     /* eax = lcode[hold & lmask] */\n        jmp     .L_dodist_mmx\n\n.align 16,0x90\n.L_clip_window_mmx:\n#define nbytes_r %ecx\n        movl    %eax, nbytes_r\n        movl    wsize(%esp), %eax       /* prepare for dist compare */\n        negl    nbytes_r                /* nbytes = -nbytes */\n        movl    window(%esp), from_r    /* from = window */\n\n        cmpl    dist_r, %eax\n        jb      .L_invalid_distance_too_far /* if (dist > wsize) */\n\n        addl    dist_r, nbytes_r        /* nbytes = dist - nbytes */\n        cmpl    $0, write(%esp)\n        jne     .L_wrap_around_window_mmx /* if (write != 0) */\n\n        subl    nbytes_r, %eax\n        addl    %eax, from_r            /* from += wsize - nbytes */\n\n        cmpl    nbytes_r, len_r\n        jbe     .L_do_copy1_mmx         /* if (nbytes >= len) */\n\n        subl    nbytes_r, len_r         /* len -= nbytes */\n        rep     movsb\n        movl    out_r, from_r\n        subl    dist_r, from_r          /* from = out - dist */\n        jmp     .L_do_copy1_mmx\n\n        cmpl    nbytes_r, len_r\n        jbe     .L_do_copy1_mmx         /* if (nbytes >= len) */\n\n        subl    nbytes_r, len_r         /* len -= nbytes */\n        rep     movsb\n        movl    out_r, from_r\n        subl    dist_r, from_r          /* from = out - dist */\n        jmp     .L_do_copy1_mmx\n\n.L_wrap_around_window_mmx:\n#define write_r %eax\n        movl    write(%esp), write_r\n        cmpl    write_r, nbytes_r\n        jbe     .L_contiguous_in_window_mmx /* if (write >= nbytes) */\n\n        addl    wsize(%esp), from_r\n        addl    write_r, from_r\n        subl    nbytes_r, from_r        /* from += wsize + write - nbytes */\n        subl    write_r, nbytes_r       /* nbytes -= write */\n#undef write_r\n\n        cmpl    nbytes_r, len_r\n        jbe     .L_do_copy1_mmx         /* if (nbytes >= len) */\n\n        subl    nbytes_r, len_r         /* len -= nbytes */\n        rep     movsb\n        movl    window(%esp), from_r    /* from = window */\n        movl    write(%esp), nbytes_r   /* nbytes = write */\n        cmpl    nbytes_r, len_r\n        jbe     .L_do_copy1_mmx         /* if (nbytes >= len) */\n\n        subl    nbytes_r, len_r         /* len -= nbytes */\n        rep     movsb\n        movl    out_r, from_r\n        subl    dist_r, from_r          /* from = out - dist */\n        jmp     .L_do_copy1_mmx\n\n.L_contiguous_in_window_mmx:\n#define write_r %eax\n        addl    write_r, from_r\n        subl    nbytes_r, from_r        /* from += write - nbytes */\n#undef write_r\n\n        cmpl    nbytes_r, len_r\n        jbe     .L_do_copy1_mmx         /* if (nbytes >= len) */\n\n        subl    nbytes_r, len_r         /* len -= nbytes */\n        rep     movsb\n        movl    out_r, from_r\n        subl    dist_r, from_r          /* from = out - dist */\n\n.L_do_copy1_mmx:\n#undef nbytes_r\n#define in_r %esi\n        movl    len_r, %ecx\n        rep     movsb\n\n        movl    in(%esp), in_r          /* move in back to %esi, toss from */\n        movl    lcode(%esp), %ebx       /* move lcode back to %ebx, toss dist */\n        jmp     .L_while_test_mmx\n\n#undef hold_r\n#undef bitslong_r\n\n#endif /* USE_MMX || RUN_TIME_MMX */\n\n\n/*** USE_MMX, NO_MMX, and RUNTIME_MMX from here on ***/\n\n.L_invalid_distance_code:\n        /* else {\n         *   strm->msg = \"invalid distance code\";\n         *   state->mode = BAD;\n         * }\n         */\n        movl    $.L_invalid_distance_code_msg, %ecx\n        movl    $INFLATE_MODE_BAD, %edx\n        jmp     .L_update_stream_state\n\n.L_test_for_end_of_block:\n        /* else if (op & 32) {\n         *   state->mode = TYPE;\n         *   break;\n         * }\n         */\n        testb   $32, %al\n        jz      .L_invalid_literal_length_code  /* if ((op & 32) == 0) */\n\n        movl    $0, %ecx\n        movl    $INFLATE_MODE_TYPE, %edx\n        jmp     .L_update_stream_state\n\n.L_invalid_literal_length_code:\n        /* else {\n         *   strm->msg = \"invalid literal/length code\";\n         *   state->mode = BAD;\n         * }\n         */\n        movl    $.L_invalid_literal_length_code_msg, %ecx\n        movl    $INFLATE_MODE_BAD, %edx\n        jmp     .L_update_stream_state\n\n.L_invalid_distance_too_far:\n        /* strm->msg = \"invalid distance too far back\";\n         * state->mode = BAD;\n         */\n        movl    in(%esp), in_r          /* from_r has in's reg, put in back */\n        movl    $.L_invalid_distance_too_far_msg, %ecx\n        movl    $INFLATE_MODE_BAD, %edx\n        jmp     .L_update_stream_state\n\n.L_update_stream_state:\n        /* set strm->msg = %ecx, strm->state->mode = %edx */\n        movl    strm_sp(%esp), %eax\n        testl   %ecx, %ecx              /* if (msg != NULL) */\n        jz      .L_skip_msg\n        movl    %ecx, msg_strm(%eax)    /* strm->msg = msg */\n.L_skip_msg:\n        movl    state_strm(%eax), %eax  /* state = strm->state */\n        movl    %edx, mode_state(%eax)  /* state->mode = edx (BAD | TYPE) */\n        jmp     .L_break_loop\n\n.align 32,0x90\n.L_break_loop:\n\n/*\n * Regs:\n *\n * bits = %ebp when mmx, and in %ebx when non-mmx\n * hold = %hold_mm when mmx, and in %ebp when non-mmx\n * in   = %esi\n * out  = %edi\n */\n\n#if defined( USE_MMX ) || defined( RUN_TIME_MMX )\n\n#if defined( RUN_TIME_MMX )\n\n        cmpl    $DO_USE_MMX, inflate_fast_use_mmx\n        jne     .L_update_next_in\n\n#endif /* RUN_TIME_MMX */\n\n        movl    %ebp, %ebx\n\n.L_update_next_in:\n\n#endif\n\n#define strm_r  %eax\n#define state_r %edx\n\n        /* len = bits >> 3;\n         * in -= len;\n         * bits -= len << 3;\n         * hold &= (1U << bits) - 1;\n         * state->hold = hold;\n         * state->bits = bits;\n         * strm->next_in = in;\n         * strm->next_out = out;\n         */\n        movl    strm_sp(%esp), strm_r\n        movl    %ebx, %ecx\n        movl    state_strm(strm_r), state_r\n        shrl    $3, %ecx\n        subl    %ecx, in_r\n        shll    $3, %ecx\n        subl    %ecx, %ebx\n        movl    out_r, next_out_strm(strm_r)\n        movl    %ebx, bits_state(state_r)\n        movl    %ebx, %ecx\n\n        leal    buf(%esp), %ebx\n        cmpl    %ebx, last(%esp)\n        jne     .L_buf_not_used         /* if buf != last */\n\n        subl    %ebx, in_r              /* in -= buf */\n        movl    next_in_strm(strm_r), %ebx\n        movl    %ebx, last(%esp)        /* last = strm->next_in */\n        addl    %ebx, in_r              /* in += strm->next_in */\n        movl    avail_in_strm(strm_r), %ebx\n        subl    $11, %ebx\n        addl    %ebx, last(%esp)    /* last = &strm->next_in[ avail_in - 11 ] */\n\n.L_buf_not_used:\n        movl    in_r, next_in_strm(strm_r)\n\n        movl    $1, %ebx\n        shll    %cl, %ebx\n        decl    %ebx\n\n#if defined( USE_MMX ) || defined( RUN_TIME_MMX )\n\n#if defined( RUN_TIME_MMX )\n\n        cmpl    $DO_USE_MMX, inflate_fast_use_mmx\n        jne     .L_update_hold\n\n#endif /* RUN_TIME_MMX */\n\n        psrlq   used_mm, hold_mm        /* hold_mm >>= last bit length */\n        movd    hold_mm, %ebp\n\n        emms\n\n.L_update_hold:\n\n#endif /* USE_MMX || RUN_TIME_MMX */\n\n        andl    %ebx, %ebp\n        movl    %ebp, hold_state(state_r)\n\n#define last_r %ebx\n\n        /* strm->avail_in = in < last ? 11 + (last - in) : 11 - (in - last) */\n        movl    last(%esp), last_r\n        cmpl    in_r, last_r\n        jbe     .L_last_is_smaller     /* if (in >= last) */\n\n        subl    in_r, last_r           /* last -= in */\n        addl    $11, last_r            /* last += 11 */\n        movl    last_r, avail_in_strm(strm_r)\n        jmp     .L_fixup_out\n.L_last_is_smaller:\n        subl    last_r, in_r           /* in -= last */\n        negl    in_r                   /* in = -in */\n        addl    $11, in_r              /* in += 11 */\n        movl    in_r, avail_in_strm(strm_r)\n\n#undef last_r\n#define end_r %ebx\n\n.L_fixup_out:\n        /* strm->avail_out = out < end ? 257 + (end - out) : 257 - (out - end)*/\n        movl    end(%esp), end_r\n        cmpl    out_r, end_r\n        jbe     .L_end_is_smaller      /* if (out >= end) */\n\n        subl    out_r, end_r           /* end -= out */\n        addl    $257, end_r            /* end += 257 */\n        movl    end_r, avail_out_strm(strm_r)\n        jmp     .L_done\n.L_end_is_smaller:\n        subl    end_r, out_r           /* out -= end */\n        negl    out_r                  /* out = -out */\n        addl    $257, out_r            /* out += 257 */\n        movl    out_r, avail_out_strm(strm_r)\n\n#undef end_r\n#undef strm_r\n#undef state_r\n\n.L_done:\n        addl    $local_var_size, %esp\n        popf\n        popl    %ebx\n        popl    %ebp\n        popl    %esi\n        popl    %edi\n        ret\n\n#if defined( GAS_ELF )\n/* elf info */\n.type inflate_fast,@function\n.size inflate_fast,.-inflate_fast\n#endif\n"
  },
  {
    "path": "external/zlib/contrib/iostream/test.cpp",
    "content": "\n#include \"zfstream.h\"\n\nint main() {\n\n  // Construct a stream object with this filebuffer.  Anything sent\n  // to this stream will go to standard out.\n  gzofstream os( 1, ios::out );\n\n  // This text is getting compressed and sent to stdout.\n  // To prove this, run 'test | zcat'.\n  os << \"Hello, Mommy\" << endl;\n\n  os << setcompressionlevel( Z_NO_COMPRESSION );\n  os << \"hello, hello, hi, ho!\" << endl;\n\n  setcompressionlevel( os, Z_DEFAULT_COMPRESSION )\n    << \"I'm compressing again\" << endl;\n\n  os.close();\n\n  return 0;\n\n}\n"
  },
  {
    "path": "external/zlib/contrib/iostream/zfstream.cpp",
    "content": "\n#include \"zfstream.h\"\n\ngzfilebuf::gzfilebuf() :\n  file(NULL),\n  mode(0),\n  own_file_descriptor(0)\n{ }\n\ngzfilebuf::~gzfilebuf() {\n\n  sync();\n  if ( own_file_descriptor )\n    close();\n\n}\n\ngzfilebuf *gzfilebuf::open( const char *name,\n                            int io_mode ) {\n\n  if ( is_open() )\n    return NULL;\n\n  char char_mode[10];\n  char *p = char_mode;\n\n  if ( io_mode & ios::in ) {\n    mode = ios::in;\n    *p++ = 'r';\n  } else if ( io_mode & ios::app ) {\n    mode = ios::app;\n    *p++ = 'a';\n  } else {\n    mode = ios::out;\n    *p++ = 'w';\n  }\n\n  if ( io_mode & ios::binary ) {\n    mode |= ios::binary;\n    *p++ = 'b';\n  }\n\n  // Hard code the compression level\n  if ( io_mode & (ios::out|ios::app )) {\n    *p++ = '9';\n  }\n\n  // Put the end-of-string indicator\n  *p = '\\0';\n\n  if ( (file = gzopen(name, char_mode)) == NULL )\n    return NULL;\n\n  own_file_descriptor = 1;\n\n  return this;\n\n}\n\ngzfilebuf *gzfilebuf::attach( int file_descriptor,\n                              int io_mode ) {\n\n  if ( is_open() )\n    return NULL;\n\n  char char_mode[10];\n  char *p = char_mode;\n\n  if ( io_mode & ios::in ) {\n    mode = ios::in;\n    *p++ = 'r';\n  } else if ( io_mode & ios::app ) {\n    mode = ios::app;\n    *p++ = 'a';\n  } else {\n    mode = ios::out;\n    *p++ = 'w';\n  }\n\n  if ( io_mode & ios::binary ) {\n    mode |= ios::binary;\n    *p++ = 'b';\n  }\n\n  // Hard code the compression level\n  if ( io_mode & (ios::out|ios::app )) {\n    *p++ = '9';\n  }\n\n  // Put the end-of-string indicator\n  *p = '\\0';\n\n  if ( (file = gzdopen(file_descriptor, char_mode)) == NULL )\n    return NULL;\n\n  own_file_descriptor = 0;\n\n  return this;\n\n}\n\ngzfilebuf *gzfilebuf::close() {\n\n  if ( is_open() ) {\n\n    sync();\n    gzclose( file );\n    file = NULL;\n\n  }\n\n  return this;\n\n}\n\nint gzfilebuf::setcompressionlevel( int comp_level ) {\n\n  return gzsetparams(file, comp_level, -2);\n\n}\n\nint gzfilebuf::setcompressionstrategy( int comp_strategy ) {\n\n  return gzsetparams(file, -2, comp_strategy);\n\n}\n\n\nstreampos gzfilebuf::seekoff( streamoff off, ios::seek_dir dir, int which ) {\n\n  return streampos(EOF);\n\n}\n\nint gzfilebuf::underflow() {\n\n  // If the file hasn't been opened for reading, error.\n  if ( !is_open() || !(mode & ios::in) )\n    return EOF;\n\n  // if a buffer doesn't exists, allocate one.\n  if ( !base() ) {\n\n    if ( (allocate()) == EOF )\n      return EOF;\n    setp(0,0);\n\n  } else {\n\n    if ( in_avail() )\n      return (unsigned char) *gptr();\n\n    if ( out_waiting() ) {\n      if ( flushbuf() == EOF )\n        return EOF;\n    }\n\n  }\n\n  // Attempt to fill the buffer.\n\n  int result = fillbuf();\n  if ( result == EOF ) {\n    // disable get area\n    setg(0,0,0);\n    return EOF;\n  }\n\n  return (unsigned char) *gptr();\n\n}\n\nint gzfilebuf::overflow( int c ) {\n\n  if ( !is_open() || !(mode & ios::out) )\n    return EOF;\n\n  if ( !base() ) {\n    if ( allocate() == EOF )\n      return EOF;\n    setg(0,0,0);\n  } else {\n    if (in_avail()) {\n        return EOF;\n    }\n    if (out_waiting()) {\n      if (flushbuf() == EOF)\n        return EOF;\n    }\n  }\n\n  int bl = blen();\n  setp( base(), base() + bl);\n\n  if ( c != EOF ) {\n\n    *pptr() = c;\n    pbump(1);\n\n  }\n\n  return 0;\n\n}\n\nint gzfilebuf::sync() {\n\n  if ( !is_open() )\n    return EOF;\n\n  if ( out_waiting() )\n    return flushbuf();\n\n  return 0;\n\n}\n\nint gzfilebuf::flushbuf() {\n\n  int n;\n  char *q;\n\n  q = pbase();\n  n = pptr() - q;\n\n  if ( gzwrite( file, q, n) < n )\n    return EOF;\n\n  setp(0,0);\n\n  return 0;\n\n}\n\nint gzfilebuf::fillbuf() {\n\n  int required;\n  char *p;\n\n  p = base();\n\n  required = blen();\n\n  int t = gzread( file, p, required );\n\n  if ( t <= 0) return EOF;\n\n  setg( base(), base(), base()+t);\n\n  return t;\n\n}\n\ngzfilestream_common::gzfilestream_common() :\n  ios( gzfilestream_common::rdbuf() )\n{ }\n\ngzfilestream_common::~gzfilestream_common()\n{ }\n\nvoid gzfilestream_common::attach( int fd, int io_mode ) {\n\n  if ( !buffer.attach( fd, io_mode) )\n    clear( ios::failbit | ios::badbit );\n  else\n    clear();\n\n}\n\nvoid gzfilestream_common::open( const char *name, int io_mode ) {\n\n  if ( !buffer.open( name, io_mode ) )\n    clear( ios::failbit | ios::badbit );\n  else\n    clear();\n\n}\n\nvoid gzfilestream_common::close() {\n\n  if ( !buffer.close() )\n    clear( ios::failbit | ios::badbit );\n\n}\n\ngzfilebuf *gzfilestream_common::rdbuf()\n{\n  return &buffer;\n}\n\ngzifstream::gzifstream() :\n  ios( gzfilestream_common::rdbuf() )\n{\n  clear( ios::badbit );\n}\n\ngzifstream::gzifstream( const char *name, int io_mode ) :\n  ios( gzfilestream_common::rdbuf() )\n{\n  gzfilestream_common::open( name, io_mode );\n}\n\ngzifstream::gzifstream( int fd, int io_mode ) :\n  ios( gzfilestream_common::rdbuf() )\n{\n  gzfilestream_common::attach( fd, io_mode );\n}\n\ngzifstream::~gzifstream() { }\n\ngzofstream::gzofstream() :\n  ios( gzfilestream_common::rdbuf() )\n{\n  clear( ios::badbit );\n}\n\ngzofstream::gzofstream( const char *name, int io_mode ) :\n  ios( gzfilestream_common::rdbuf() )\n{\n  gzfilestream_common::open( name, io_mode );\n}\n\ngzofstream::gzofstream( int fd, int io_mode ) :\n  ios( gzfilestream_common::rdbuf() )\n{\n  gzfilestream_common::attach( fd, io_mode );\n}\n\ngzofstream::~gzofstream() { }\n"
  },
  {
    "path": "external/zlib/contrib/iostream/zfstream.h",
    "content": "\n#ifndef zfstream_h\n#define zfstream_h\n\n#include <fstream.h>\n#include \"zlib.h\"\n\nclass gzfilebuf : public streambuf {\n\npublic:\n\n  gzfilebuf( );\n  virtual ~gzfilebuf();\n\n  gzfilebuf *open( const char *name, int io_mode );\n  gzfilebuf *attach( int file_descriptor, int io_mode );\n  gzfilebuf *close();\n\n  int setcompressionlevel( int comp_level );\n  int setcompressionstrategy( int comp_strategy );\n\n  inline int is_open() const { return (file !=NULL); }\n\n  virtual streampos seekoff( streamoff, ios::seek_dir, int );\n\n  virtual int sync();\n\nprotected:\n\n  virtual int underflow();\n  virtual int overflow( int = EOF );\n\nprivate:\n\n  gzFile file;\n  short mode;\n  short own_file_descriptor;\n\n  int flushbuf();\n  int fillbuf();\n\n};\n\nclass gzfilestream_common : virtual public ios {\n\n  friend class gzifstream;\n  friend class gzofstream;\n  friend gzofstream &setcompressionlevel( gzofstream &, int );\n  friend gzofstream &setcompressionstrategy( gzofstream &, int );\n\npublic:\n  virtual ~gzfilestream_common();\n\n  void attach( int fd, int io_mode );\n  void open( const char *name, int io_mode );\n  void close();\n\nprotected:\n  gzfilestream_common();\n\nprivate:\n  gzfilebuf *rdbuf();\n\n  gzfilebuf buffer;\n\n};\n\nclass gzifstream : public gzfilestream_common, public istream {\n\npublic:\n\n  gzifstream();\n  gzifstream( const char *name, int io_mode = ios::in );\n  gzifstream( int fd, int io_mode = ios::in );\n\n  virtual ~gzifstream();\n\n};\n\nclass gzofstream : public gzfilestream_common, public ostream {\n\npublic:\n\n  gzofstream();\n  gzofstream( const char *name, int io_mode = ios::out );\n  gzofstream( int fd, int io_mode = ios::out );\n\n  virtual ~gzofstream();\n\n};\n\ntemplate<class T> class gzomanip {\n  friend gzofstream &operator<<(gzofstream &, const gzomanip<T> &);\npublic:\n  gzomanip(gzofstream &(*f)(gzofstream &, T), T v) : func(f), val(v) { }\nprivate:\n  gzofstream &(*func)(gzofstream &, T);\n  T val;\n};\n\ntemplate<class T> gzofstream &operator<<(gzofstream &s, const gzomanip<T> &m)\n{\n  return (*m.func)(s, m.val);\n}\n\ninline gzofstream &setcompressionlevel( gzofstream &s, int l )\n{\n  (s.rdbuf())->setcompressionlevel(l);\n  return s;\n}\n\ninline gzofstream &setcompressionstrategy( gzofstream &s, int l )\n{\n  (s.rdbuf())->setcompressionstrategy(l);\n  return s;\n}\n\ninline gzomanip<int> setcompressionlevel(int l)\n{\n  return gzomanip<int>(&setcompressionlevel,l);\n}\n\ninline gzomanip<int> setcompressionstrategy(int l)\n{\n  return gzomanip<int>(&setcompressionstrategy,l);\n}\n\n#endif\n"
  },
  {
    "path": "external/zlib/contrib/iostream2/zstream.h",
    "content": "/*\n *\n * Copyright (c) 1997\n * Christian Michelsen Research AS\n * Advanced Computing\n * Fantoftvegen 38, 5036 BERGEN, Norway\n * http://www.cmr.no\n *\n * Permission to use, copy, modify, distribute and sell this software\n * and its documentation for any purpose is hereby granted without fee,\n * provided that the above copyright notice appear in all copies and\n * that both that copyright notice and this permission notice appear\n * in supporting documentation.  Christian Michelsen Research AS makes no\n * representations about the suitability of this software for any\n * purpose.  It is provided \"as is\" without express or implied warranty.\n *\n */\n\n#ifndef ZSTREAM__H\n#define ZSTREAM__H\n\n/*\n * zstream.h - C++ interface to the 'zlib' general purpose compression library\n * $Id: zstream.h 1.1 1997-06-25 12:00:56+02 tyge Exp tyge $\n */\n\n#include <strstream.h>\n#include <string.h>\n#include <stdio.h>\n#include \"zlib.h\"\n\n#if defined(_WIN32)\n#   include <fcntl.h>\n#   include <io.h>\n#   define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)\n#else\n#   define SET_BINARY_MODE(file)\n#endif\n\nclass zstringlen {\npublic:\n    zstringlen(class izstream&);\n    zstringlen(class ozstream&, const char*);\n    size_t value() const { return val.word; }\nprivate:\n    struct Val { unsigned char byte; size_t word; } val;\n};\n\n//  ----------------------------- izstream -----------------------------\n\nclass izstream\n{\n    public:\n        izstream() : m_fp(0) {}\n        izstream(FILE* fp) : m_fp(0) { open(fp); }\n        izstream(const char* name) : m_fp(0) { open(name); }\n        ~izstream() { close(); }\n\n        /* Opens a gzip (.gz) file for reading.\n         * open() can be used to read a file which is not in gzip format;\n         * in this case read() will directly read from the file without\n         * decompression. errno can be checked to distinguish two error\n         * cases (if errno is zero, the zlib error is Z_MEM_ERROR).\n         */\n        void open(const char* name) {\n            if (m_fp) close();\n            m_fp = ::gzopen(name, \"rb\");\n        }\n\n        void open(FILE* fp) {\n            SET_BINARY_MODE(fp);\n            if (m_fp) close();\n            m_fp = ::gzdopen(fileno(fp), \"rb\");\n        }\n\n        /* Flushes all pending input if necessary, closes the compressed file\n         * and deallocates all the (de)compression state. The return value is\n         * the zlib error number (see function error() below).\n         */\n        int close() {\n            int r = ::gzclose(m_fp);\n            m_fp = 0; return r;\n        }\n\n        /* Binary read the given number of bytes from the compressed file.\n         */\n        int read(void* buf, size_t len) {\n            return ::gzread(m_fp, buf, len);\n        }\n\n        /* Returns the error message for the last error which occurred on the\n         * given compressed file. errnum is set to zlib error number. If an\n         * error occurred in the file system and not in the compression library,\n         * errnum is set to Z_ERRNO and the application may consult errno\n         * to get the exact error code.\n         */\n        const char* error(int* errnum) {\n            return ::gzerror(m_fp, errnum);\n        }\n\n        gzFile fp() { return m_fp; }\n\n    private:\n        gzFile m_fp;\n};\n\n/*\n * Binary read the given (array of) object(s) from the compressed file.\n * If the input file was not in gzip format, read() copies the objects number\n * of bytes into the buffer.\n * returns the number of uncompressed bytes actually read\n * (0 for end of file, -1 for error).\n */\ntemplate <class T, class Items>\ninline int read(izstream& zs, T* x, Items items) {\n    return ::gzread(zs.fp(), x, items*sizeof(T));\n}\n\n/*\n * Binary input with the '>' operator.\n */\ntemplate <class T>\ninline izstream& operator>(izstream& zs, T& x) {\n    ::gzread(zs.fp(), &x, sizeof(T));\n    return zs;\n}\n\n\ninline zstringlen::zstringlen(izstream& zs) {\n    zs > val.byte;\n    if (val.byte == 255) zs > val.word;\n    else val.word = val.byte;\n}\n\n/*\n * Read length of string + the string with the '>' operator.\n */\ninline izstream& operator>(izstream& zs, char* x) {\n    zstringlen len(zs);\n    ::gzread(zs.fp(), x, len.value());\n    x[len.value()] = '\\0';\n    return zs;\n}\n\ninline char* read_string(izstream& zs) {\n    zstringlen len(zs);\n    char* x = new char[len.value()+1];\n    ::gzread(zs.fp(), x, len.value());\n    x[len.value()] = '\\0';\n    return x;\n}\n\n// ----------------------------- ozstream -----------------------------\n\nclass ozstream\n{\n    public:\n        ozstream() : m_fp(0), m_os(0) {\n        }\n        ozstream(FILE* fp, int level = Z_DEFAULT_COMPRESSION)\n            : m_fp(0), m_os(0) {\n            open(fp, level);\n        }\n        ozstream(const char* name, int level = Z_DEFAULT_COMPRESSION)\n            : m_fp(0), m_os(0) {\n            open(name, level);\n        }\n        ~ozstream() {\n            close();\n        }\n\n        /* Opens a gzip (.gz) file for writing.\n         * The compression level parameter should be in 0..9\n         * errno can be checked to distinguish two error cases\n         * (if errno is zero, the zlib error is Z_MEM_ERROR).\n         */\n        void open(const char* name, int level = Z_DEFAULT_COMPRESSION) {\n            char mode[4] = \"wb\\0\";\n            if (level != Z_DEFAULT_COMPRESSION) mode[2] = '0'+level;\n            if (m_fp) close();\n            m_fp = ::gzopen(name, mode);\n        }\n\n        /* open from a FILE pointer.\n         */\n        void open(FILE* fp, int level = Z_DEFAULT_COMPRESSION) {\n            SET_BINARY_MODE(fp);\n            char mode[4] = \"wb\\0\";\n            if (level != Z_DEFAULT_COMPRESSION) mode[2] = '0'+level;\n            if (m_fp) close();\n            m_fp = ::gzdopen(fileno(fp), mode);\n        }\n\n        /* Flushes all pending output if necessary, closes the compressed file\n         * and deallocates all the (de)compression state. The return value is\n         * the zlib error number (see function error() below).\n         */\n        int close() {\n            if (m_os) {\n                ::gzwrite(m_fp, m_os->str(), m_os->pcount());\n                delete[] m_os->str(); delete m_os; m_os = 0;\n            }\n            int r = ::gzclose(m_fp); m_fp = 0; return r;\n        }\n\n        /* Binary write the given number of bytes into the compressed file.\n         */\n        int write(const void* buf, size_t len) {\n            return ::gzwrite(m_fp, (voidp) buf, len);\n        }\n\n        /* Flushes all pending output into the compressed file. The parameter\n         * _flush is as in the deflate() function. The return value is the zlib\n         * error number (see function gzerror below). flush() returns Z_OK if\n         * the flush_ parameter is Z_FINISH and all output could be flushed.\n         * flush() should be called only when strictly necessary because it can\n         * degrade compression.\n         */\n        int flush(int _flush) {\n            os_flush();\n            return ::gzflush(m_fp, _flush);\n        }\n\n        /* Returns the error message for the last error which occurred on the\n         * given compressed file. errnum is set to zlib error number. If an\n         * error occurred in the file system and not in the compression library,\n         * errnum is set to Z_ERRNO and the application may consult errno\n         * to get the exact error code.\n         */\n        const char* error(int* errnum) {\n            return ::gzerror(m_fp, errnum);\n        }\n\n        gzFile fp() { return m_fp; }\n\n        ostream& os() {\n            if (m_os == 0) m_os = new ostrstream;\n            return *m_os;\n        }\n\n        void os_flush() {\n            if (m_os && m_os->pcount()>0) {\n                ostrstream* oss = new ostrstream;\n                oss->fill(m_os->fill());\n                oss->flags(m_os->flags());\n                oss->precision(m_os->precision());\n                oss->width(m_os->width());\n                ::gzwrite(m_fp, m_os->str(), m_os->pcount());\n                delete[] m_os->str(); delete m_os; m_os = oss;\n            }\n        }\n\n    private:\n        gzFile m_fp;\n        ostrstream* m_os;\n};\n\n/*\n * Binary write the given (array of) object(s) into the compressed file.\n * returns the number of uncompressed bytes actually written\n * (0 in case of error).\n */\ntemplate <class T, class Items>\ninline int write(ozstream& zs, const T* x, Items items) {\n    return ::gzwrite(zs.fp(), (voidp) x, items*sizeof(T));\n}\n\n/*\n * Binary output with the '<' operator.\n */\ntemplate <class T>\ninline ozstream& operator<(ozstream& zs, const T& x) {\n    ::gzwrite(zs.fp(), (voidp) &x, sizeof(T));\n    return zs;\n}\n\ninline zstringlen::zstringlen(ozstream& zs, const char* x) {\n    val.byte = 255;  val.word = ::strlen(x);\n    if (val.word < 255) zs < (val.byte = val.word);\n    else zs < val;\n}\n\n/*\n * Write length of string + the string with the '<' operator.\n */\ninline ozstream& operator<(ozstream& zs, const char* x) {\n    zstringlen len(zs, x);\n    ::gzwrite(zs.fp(), (voidp) x, len.value());\n    return zs;\n}\n\n#ifdef _MSC_VER\ninline ozstream& operator<(ozstream& zs, char* const& x) {\n    return zs < (const char*) x;\n}\n#endif\n\n/*\n * Ascii write with the << operator;\n */\ntemplate <class T>\ninline ostream& operator<<(ozstream& zs, const T& x) {\n    zs.os_flush();\n    return zs.os() << x;\n}\n\n#endif\n"
  },
  {
    "path": "external/zlib/contrib/iostream2/zstream_test.cpp",
    "content": "#include \"zstream.h\"\n#include <math.h>\n#include <stdlib.h>\n#include <iomanip.h>\n\nvoid main() {\n    char h[256] = \"Hello\";\n    char* g = \"Goodbye\";\n    ozstream out(\"temp.gz\");\n    out < \"This works well\" < h < g;\n    out.close();\n\n    izstream in(\"temp.gz\"); // read it back\n    char *x = read_string(in), *y = new char[256], z[256];\n    in > y > z;\n    in.close();\n    cout << x << endl << y << endl << z << endl;\n\n    out.open(\"temp.gz\"); // try ascii output; zcat temp.gz to see the results\n    out << setw(50) << setfill('#') << setprecision(20) << x << endl << y << endl << z << endl;\n    out << z << endl << y << endl << x << endl;\n    out << 1.1234567890123456789 << endl;\n\n    delete[] x; delete[] y;\n}\n"
  },
  {
    "path": "external/zlib/contrib/iostream3/README",
    "content": "These classes provide a C++ stream interface to the zlib library. It allows you\nto do things like:\n\n  gzofstream outf(\"blah.gz\");\n  outf << \"These go into the gzip file \" << 123 << endl;\n\nIt does this by deriving a specialized stream buffer for gzipped files, which is\nthe way Stroustrup would have done it. :->\n\nThe gzifstream and gzofstream classes were originally written by Kevin Ruland\nand made available in the zlib contrib/iostream directory. The older version still\ncompiles under gcc 2.xx, but not under gcc 3.xx, which sparked the development of\nthis version.\n\nThe new classes are as standard-compliant as possible, closely following the\napproach of the standard library's fstream classes. It compiles under gcc versions\n3.2 and 3.3, but not under gcc 2.xx. This is mainly due to changes in the standard\nlibrary naming scheme. The new version of gzifstream/gzofstream/gzfilebuf differs\nfrom the previous one in the following respects:\n- added showmanyc\n- added setbuf, with support for unbuffered output via setbuf(0,0)\n- a few bug fixes of stream behavior\n- gzipped output file opened with default compression level instead of maximum level\n- setcompressionlevel()/strategy() members replaced by single setcompression()\n\nThe code is provided \"as is\", with the permission to use, copy, modify, distribute\nand sell it for any purpose without fee.\n\nLudwig Schwardt\n<schwardt@sun.ac.za>\n\nDSP Lab\nElectrical & Electronic Engineering Department\nUniversity of Stellenbosch\nSouth Africa\n"
  },
  {
    "path": "external/zlib/contrib/iostream3/TODO",
    "content": "Possible upgrades to gzfilebuf:\n\n- The ability to do putback (e.g. putbackfail)\n\n- The ability to seek (zlib supports this, but could be slow/tricky)\n\n- Simultaneous read/write access (does it make sense?)\n\n- Support for ios_base::ate open mode\n\n- Locale support?\n\n- Check public interface to see which calls give problems\n  (due to dependence on library internals)\n\n- Override operator<<(ostream&, gzfilebuf*) to allow direct copying\n  of stream buffer to stream ( i.e. os << is.rdbuf(); )\n"
  },
  {
    "path": "external/zlib/contrib/iostream3/test.cc",
    "content": "/*\n * Test program for gzifstream and gzofstream\n *\n * by Ludwig Schwardt <schwardt@sun.ac.za>\n * original version by Kevin Ruland <kevin@rodin.wustl.edu>\n */\n\n#include \"zfstream.h\"\n#include <iostream>      // for cout\n\nint main() {\n\n  gzofstream outf;\n  gzifstream inf;\n  char buf[80];\n\n  outf.open(\"test1.txt.gz\");\n  outf << \"The quick brown fox sidestepped the lazy canine\\n\"\n       << 1.3 << \"\\nPlan \" << 9 << std::endl;\n  outf.close();\n  std::cout << \"Wrote the following message to 'test1.txt.gz' (check with zcat or zless):\\n\"\n            << \"The quick brown fox sidestepped the lazy canine\\n\"\n            << 1.3 << \"\\nPlan \" << 9 << std::endl;\n\n  std::cout << \"\\nReading 'test1.txt.gz' (buffered) produces:\\n\";\n  inf.open(\"test1.txt.gz\");\n  while (inf.getline(buf,80,'\\n')) {\n    std::cout << buf << \"\\t(\" << inf.rdbuf()->in_avail() << \" chars left in buffer)\\n\";\n  }\n  inf.close();\n\n  outf.rdbuf()->pubsetbuf(0,0);\n  outf.open(\"test2.txt.gz\");\n  outf << setcompression(Z_NO_COMPRESSION)\n       << \"The quick brown fox sidestepped the lazy canine\\n\"\n       << 1.3 << \"\\nPlan \" << 9 << std::endl;\n  outf.close();\n  std::cout << \"\\nWrote the same message to 'test2.txt.gz' in uncompressed form\";\n\n  std::cout << \"\\nReading 'test2.txt.gz' (unbuffered) produces:\\n\";\n  inf.rdbuf()->pubsetbuf(0,0);\n  inf.open(\"test2.txt.gz\");\n  while (inf.getline(buf,80,'\\n')) {\n    std::cout << buf << \"\\t(\" << inf.rdbuf()->in_avail() << \" chars left in buffer)\\n\";\n  }\n  inf.close();\n\n  return 0;\n\n}\n"
  },
  {
    "path": "external/zlib/contrib/iostream3/zfstream.cc",
    "content": "/*\n * A C++ I/O streams interface to the zlib gz* functions\n *\n * by Ludwig Schwardt <schwardt@sun.ac.za>\n * original version by Kevin Ruland <kevin@rodin.wustl.edu>\n *\n * This version is standard-compliant and compatible with gcc 3.x.\n */\n\n#include \"zfstream.h\"\n#include <cstring>          // for strcpy, strcat, strlen (mode strings)\n#include <cstdio>           // for BUFSIZ\n\n// Internal buffer sizes (default and \"unbuffered\" versions)\n#define BIGBUFSIZE BUFSIZ\n#define SMALLBUFSIZE 1\n\n/*****************************************************************************/\n\n// Default constructor\ngzfilebuf::gzfilebuf()\n: file(NULL), io_mode(std::ios_base::openmode(0)), own_fd(false),\n  buffer(NULL), buffer_size(BIGBUFSIZE), own_buffer(true)\n{\n  // No buffers to start with\n  this->disable_buffer();\n}\n\n// Destructor\ngzfilebuf::~gzfilebuf()\n{\n  // Sync output buffer and close only if responsible for file\n  // (i.e. attached streams should be left open at this stage)\n  this->sync();\n  if (own_fd)\n    this->close();\n  // Make sure internal buffer is deallocated\n  this->disable_buffer();\n}\n\n// Set compression level and strategy\nint\ngzfilebuf::setcompression(int comp_level,\n                          int comp_strategy)\n{\n  return gzsetparams(file, comp_level, comp_strategy);\n}\n\n// Open gzipped file\ngzfilebuf*\ngzfilebuf::open(const char *name,\n                std::ios_base::openmode mode)\n{\n  // Fail if file already open\n  if (this->is_open())\n    return NULL;\n  // Don't support simultaneous read/write access (yet)\n  if ((mode & std::ios_base::in) && (mode & std::ios_base::out))\n    return NULL;\n\n  // Build mode string for gzopen and check it [27.8.1.3.2]\n  char char_mode[6] = \"\\0\\0\\0\\0\\0\";\n  if (!this->open_mode(mode, char_mode))\n    return NULL;\n\n  // Attempt to open file\n  if ((file = gzopen(name, char_mode)) == NULL)\n    return NULL;\n\n  // On success, allocate internal buffer and set flags\n  this->enable_buffer();\n  io_mode = mode;\n  own_fd = true;\n  return this;\n}\n\n// Attach to gzipped file\ngzfilebuf*\ngzfilebuf::attach(int fd,\n                  std::ios_base::openmode mode)\n{\n  // Fail if file already open\n  if (this->is_open())\n    return NULL;\n  // Don't support simultaneous read/write access (yet)\n  if ((mode & std::ios_base::in) && (mode & std::ios_base::out))\n    return NULL;\n\n  // Build mode string for gzdopen and check it [27.8.1.3.2]\n  char char_mode[6] = \"\\0\\0\\0\\0\\0\";\n  if (!this->open_mode(mode, char_mode))\n    return NULL;\n\n  // Attempt to attach to file\n  if ((file = gzdopen(fd, char_mode)) == NULL)\n    return NULL;\n\n  // On success, allocate internal buffer and set flags\n  this->enable_buffer();\n  io_mode = mode;\n  own_fd = false;\n  return this;\n}\n\n// Close gzipped file\ngzfilebuf*\ngzfilebuf::close()\n{\n  // Fail immediately if no file is open\n  if (!this->is_open())\n    return NULL;\n  // Assume success\n  gzfilebuf* retval = this;\n  // Attempt to sync and close gzipped file\n  if (this->sync() == -1)\n    retval = NULL;\n  if (gzclose(file) < 0)\n    retval = NULL;\n  // File is now gone anyway (postcondition [27.8.1.3.8])\n  file = NULL;\n  own_fd = false;\n  // Destroy internal buffer if it exists\n  this->disable_buffer();\n  return retval;\n}\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n// Convert int open mode to mode string\nbool\ngzfilebuf::open_mode(std::ios_base::openmode mode,\n                     char* c_mode) const\n{\n  bool testb = mode & std::ios_base::binary;\n  bool testi = mode & std::ios_base::in;\n  bool testo = mode & std::ios_base::out;\n  bool testt = mode & std::ios_base::trunc;\n  bool testa = mode & std::ios_base::app;\n\n  // Check for valid flag combinations - see [27.8.1.3.2] (Table 92)\n  // Original zfstream hardcoded the compression level to maximum here...\n  // Double the time for less than 1% size improvement seems\n  // excessive though - keeping it at the default level\n  // To change back, just append \"9\" to the next three mode strings\n  if (!testi && testo && !testt && !testa)\n    strcpy(c_mode, \"w\");\n  if (!testi && testo && !testt && testa)\n    strcpy(c_mode, \"a\");\n  if (!testi && testo && testt && !testa)\n    strcpy(c_mode, \"w\");\n  if (testi && !testo && !testt && !testa)\n    strcpy(c_mode, \"r\");\n  // No read/write mode yet\n//  if (testi && testo && !testt && !testa)\n//    strcpy(c_mode, \"r+\");\n//  if (testi && testo && testt && !testa)\n//    strcpy(c_mode, \"w+\");\n\n  // Mode string should be empty for invalid combination of flags\n  if (strlen(c_mode) == 0)\n    return false;\n  if (testb)\n    strcat(c_mode, \"b\");\n  return true;\n}\n\n// Determine number of characters in internal get buffer\nstd::streamsize\ngzfilebuf::showmanyc()\n{\n  // Calls to underflow will fail if file not opened for reading\n  if (!this->is_open() || !(io_mode & std::ios_base::in))\n    return -1;\n  // Make sure get area is in use\n  if (this->gptr() && (this->gptr() < this->egptr()))\n    return std::streamsize(this->egptr() - this->gptr());\n  else\n    return 0;\n}\n\n// Fill get area from gzipped file\ngzfilebuf::int_type\ngzfilebuf::underflow()\n{\n  // If something is left in the get area by chance, return it\n  // (this shouldn't normally happen, as underflow is only supposed\n  // to be called when gptr >= egptr, but it serves as error check)\n  if (this->gptr() && (this->gptr() < this->egptr()))\n    return traits_type::to_int_type(*(this->gptr()));\n\n  // If the file hasn't been opened for reading, produce error\n  if (!this->is_open() || !(io_mode & std::ios_base::in))\n    return traits_type::eof();\n\n  // Attempt to fill internal buffer from gzipped file\n  // (buffer must be guaranteed to exist...)\n  int bytes_read = gzread(file, buffer, buffer_size);\n  // Indicates error or EOF\n  if (bytes_read <= 0)\n  {\n    // Reset get area\n    this->setg(buffer, buffer, buffer);\n    return traits_type::eof();\n  }\n  // Make all bytes read from file available as get area\n  this->setg(buffer, buffer, buffer + bytes_read);\n\n  // Return next character in get area\n  return traits_type::to_int_type(*(this->gptr()));\n}\n\n// Write put area to gzipped file\ngzfilebuf::int_type\ngzfilebuf::overflow(int_type c)\n{\n  // Determine whether put area is in use\n  if (this->pbase())\n  {\n    // Double-check pointer range\n    if (this->pptr() > this->epptr() || this->pptr() < this->pbase())\n      return traits_type::eof();\n    // Add extra character to buffer if not EOF\n    if (!traits_type::eq_int_type(c, traits_type::eof()))\n    {\n      *(this->pptr()) = traits_type::to_char_type(c);\n      this->pbump(1);\n    }\n    // Number of characters to write to file\n    int bytes_to_write = this->pptr() - this->pbase();\n    // Overflow doesn't fail if nothing is to be written\n    if (bytes_to_write > 0)\n    {\n      // If the file hasn't been opened for writing, produce error\n      if (!this->is_open() || !(io_mode & std::ios_base::out))\n        return traits_type::eof();\n      // If gzipped file won't accept all bytes written to it, fail\n      if (gzwrite(file, this->pbase(), bytes_to_write) != bytes_to_write)\n        return traits_type::eof();\n      // Reset next pointer to point to pbase on success\n      this->pbump(-bytes_to_write);\n    }\n  }\n  // Write extra character to file if not EOF\n  else if (!traits_type::eq_int_type(c, traits_type::eof()))\n  {\n    // If the file hasn't been opened for writing, produce error\n    if (!this->is_open() || !(io_mode & std::ios_base::out))\n      return traits_type::eof();\n    // Impromptu char buffer (allows \"unbuffered\" output)\n    char_type last_char = traits_type::to_char_type(c);\n    // If gzipped file won't accept this character, fail\n    if (gzwrite(file, &last_char, 1) != 1)\n      return traits_type::eof();\n  }\n\n  // If you got here, you have succeeded (even if c was EOF)\n  // The return value should therefore be non-EOF\n  if (traits_type::eq_int_type(c, traits_type::eof()))\n    return traits_type::not_eof(c);\n  else\n    return c;\n}\n\n// Assign new buffer\nstd::streambuf*\ngzfilebuf::setbuf(char_type* p,\n                  std::streamsize n)\n{\n  // First make sure stuff is sync'ed, for safety\n  if (this->sync() == -1)\n    return NULL;\n  // If buffering is turned off on purpose via setbuf(0,0), still allocate one...\n  // \"Unbuffered\" only really refers to put [27.8.1.4.10], while get needs at\n  // least a buffer of size 1 (very inefficient though, therefore make it bigger?)\n  // This follows from [27.5.2.4.3]/12 (gptr needs to point at something, it seems)\n  if (!p || !n)\n  {\n    // Replace existing buffer (if any) with small internal buffer\n    this->disable_buffer();\n    buffer = NULL;\n    buffer_size = 0;\n    own_buffer = true;\n    this->enable_buffer();\n  }\n  else\n  {\n    // Replace existing buffer (if any) with external buffer\n    this->disable_buffer();\n    buffer = p;\n    buffer_size = n;\n    own_buffer = false;\n    this->enable_buffer();\n  }\n  return this;\n}\n\n// Write put area to gzipped file (i.e. ensures that put area is empty)\nint\ngzfilebuf::sync()\n{\n  return traits_type::eq_int_type(this->overflow(), traits_type::eof()) ? -1 : 0;\n}\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n// Allocate internal buffer\nvoid\ngzfilebuf::enable_buffer()\n{\n  // If internal buffer required, allocate one\n  if (own_buffer && !buffer)\n  {\n    // Check for buffered vs. \"unbuffered\"\n    if (buffer_size > 0)\n    {\n      // Allocate internal buffer\n      buffer = new char_type[buffer_size];\n      // Get area starts empty and will be expanded by underflow as need arises\n      this->setg(buffer, buffer, buffer);\n      // Setup entire internal buffer as put area.\n      // The one-past-end pointer actually points to the last element of the buffer,\n      // so that overflow(c) can safely add the extra character c to the sequence.\n      // These pointers remain in place for the duration of the buffer\n      this->setp(buffer, buffer + buffer_size - 1);\n    }\n    else\n    {\n      // Even in \"unbuffered\" case, (small?) get buffer is still required\n      buffer_size = SMALLBUFSIZE;\n      buffer = new char_type[buffer_size];\n      this->setg(buffer, buffer, buffer);\n      // \"Unbuffered\" means no put buffer\n      this->setp(0, 0);\n    }\n  }\n  else\n  {\n    // If buffer already allocated, reset buffer pointers just to make sure no\n    // stale chars are lying around\n    this->setg(buffer, buffer, buffer);\n    this->setp(buffer, buffer + buffer_size - 1);\n  }\n}\n\n// Destroy internal buffer\nvoid\ngzfilebuf::disable_buffer()\n{\n  // If internal buffer exists, deallocate it\n  if (own_buffer && buffer)\n  {\n    // Preserve unbuffered status by zeroing size\n    if (!this->pbase())\n      buffer_size = 0;\n    delete[] buffer;\n    buffer = NULL;\n    this->setg(0, 0, 0);\n    this->setp(0, 0);\n  }\n  else\n  {\n    // Reset buffer pointers to initial state if external buffer exists\n    this->setg(buffer, buffer, buffer);\n    if (buffer)\n      this->setp(buffer, buffer + buffer_size - 1);\n    else\n      this->setp(0, 0);\n  }\n}\n\n/*****************************************************************************/\n\n// Default constructor initializes stream buffer\ngzifstream::gzifstream()\n: std::istream(NULL), sb()\n{ this->init(&sb); }\n\n// Initialize stream buffer and open file\ngzifstream::gzifstream(const char* name,\n                       std::ios_base::openmode mode)\n: std::istream(NULL), sb()\n{\n  this->init(&sb);\n  this->open(name, mode);\n}\n\n// Initialize stream buffer and attach to file\ngzifstream::gzifstream(int fd,\n                       std::ios_base::openmode mode)\n: std::istream(NULL), sb()\n{\n  this->init(&sb);\n  this->attach(fd, mode);\n}\n\n// Open file and go into fail() state if unsuccessful\nvoid\ngzifstream::open(const char* name,\n                 std::ios_base::openmode mode)\n{\n  if (!sb.open(name, mode | std::ios_base::in))\n    this->setstate(std::ios_base::failbit);\n  else\n    this->clear();\n}\n\n// Attach to file and go into fail() state if unsuccessful\nvoid\ngzifstream::attach(int fd,\n                   std::ios_base::openmode mode)\n{\n  if (!sb.attach(fd, mode | std::ios_base::in))\n    this->setstate(std::ios_base::failbit);\n  else\n    this->clear();\n}\n\n// Close file\nvoid\ngzifstream::close()\n{\n  if (!sb.close())\n    this->setstate(std::ios_base::failbit);\n}\n\n/*****************************************************************************/\n\n// Default constructor initializes stream buffer\ngzofstream::gzofstream()\n: std::ostream(NULL), sb()\n{ this->init(&sb); }\n\n// Initialize stream buffer and open file\ngzofstream::gzofstream(const char* name,\n                       std::ios_base::openmode mode)\n: std::ostream(NULL), sb()\n{\n  this->init(&sb);\n  this->open(name, mode);\n}\n\n// Initialize stream buffer and attach to file\ngzofstream::gzofstream(int fd,\n                       std::ios_base::openmode mode)\n: std::ostream(NULL), sb()\n{\n  this->init(&sb);\n  this->attach(fd, mode);\n}\n\n// Open file and go into fail() state if unsuccessful\nvoid\ngzofstream::open(const char* name,\n                 std::ios_base::openmode mode)\n{\n  if (!sb.open(name, mode | std::ios_base::out))\n    this->setstate(std::ios_base::failbit);\n  else\n    this->clear();\n}\n\n// Attach to file and go into fail() state if unsuccessful\nvoid\ngzofstream::attach(int fd,\n                   std::ios_base::openmode mode)\n{\n  if (!sb.attach(fd, mode | std::ios_base::out))\n    this->setstate(std::ios_base::failbit);\n  else\n    this->clear();\n}\n\n// Close file\nvoid\ngzofstream::close()\n{\n  if (!sb.close())\n    this->setstate(std::ios_base::failbit);\n}\n"
  },
  {
    "path": "external/zlib/contrib/iostream3/zfstream.h",
    "content": "/*\n * A C++ I/O streams interface to the zlib gz* functions\n *\n * by Ludwig Schwardt <schwardt@sun.ac.za>\n * original version by Kevin Ruland <kevin@rodin.wustl.edu>\n *\n * This version is standard-compliant and compatible with gcc 3.x.\n */\n\n#ifndef ZFSTREAM_H\n#define ZFSTREAM_H\n\n#include <istream>  // not iostream, since we don't need cin/cout\n#include <ostream>\n#include \"zlib.h\"\n\n/*****************************************************************************/\n\n/**\n *  @brief  Gzipped file stream buffer class.\n *\n *  This class implements basic_filebuf for gzipped files. It doesn't yet support\n *  seeking (allowed by zlib but slow/limited), putback and read/write access\n *  (tricky). Otherwise, it attempts to be a drop-in replacement for the standard\n *  file streambuf.\n*/\nclass gzfilebuf : public std::streambuf\n{\npublic:\n  //  Default constructor.\n  gzfilebuf();\n\n  //  Destructor.\n  virtual\n  ~gzfilebuf();\n\n  /**\n   *  @brief  Set compression level and strategy on the fly.\n   *  @param  comp_level  Compression level (see zlib.h for allowed values)\n   *  @param  comp_strategy  Compression strategy (see zlib.h for allowed values)\n   *  @return  Z_OK on success, Z_STREAM_ERROR otherwise.\n   *\n   *  Unfortunately, these parameters cannot be modified separately, as the\n   *  previous zfstream version assumed. Since the strategy is seldom changed,\n   *  it can default and setcompression(level) then becomes like the old\n   *  setcompressionlevel(level).\n  */\n  int\n  setcompression(int comp_level,\n                 int comp_strategy = Z_DEFAULT_STRATEGY);\n\n  /**\n   *  @brief  Check if file is open.\n   *  @return  True if file is open.\n  */\n  bool\n  is_open() const { return (file != NULL); }\n\n  /**\n   *  @brief  Open gzipped file.\n   *  @param  name  File name.\n   *  @param  mode  Open mode flags.\n   *  @return  @c this on success, NULL on failure.\n  */\n  gzfilebuf*\n  open(const char* name,\n       std::ios_base::openmode mode);\n\n  /**\n   *  @brief  Attach to already open gzipped file.\n   *  @param  fd  File descriptor.\n   *  @param  mode  Open mode flags.\n   *  @return  @c this on success, NULL on failure.\n  */\n  gzfilebuf*\n  attach(int fd,\n         std::ios_base::openmode mode);\n\n  /**\n   *  @brief  Close gzipped file.\n   *  @return  @c this on success, NULL on failure.\n  */\n  gzfilebuf*\n  close();\n\nprotected:\n  /**\n   *  @brief  Convert ios open mode int to mode string used by zlib.\n   *  @return  True if valid mode flag combination.\n  */\n  bool\n  open_mode(std::ios_base::openmode mode,\n            char* c_mode) const;\n\n  /**\n   *  @brief  Number of characters available in stream buffer.\n   *  @return  Number of characters.\n   *\n   *  This indicates number of characters in get area of stream buffer.\n   *  These characters can be read without accessing the gzipped file.\n  */\n  virtual std::streamsize\n  showmanyc();\n\n  /**\n   *  @brief  Fill get area from gzipped file.\n   *  @return  First character in get area on success, EOF on error.\n   *\n   *  This actually reads characters from gzipped file to stream\n   *  buffer. Always buffered.\n  */\n  virtual int_type\n  underflow();\n\n  /**\n   *  @brief  Write put area to gzipped file.\n   *  @param  c  Extra character to add to buffer contents.\n   *  @return  Non-EOF on success, EOF on error.\n   *\n   *  This actually writes characters in stream buffer to\n   *  gzipped file. With unbuffered output this is done one\n   *  character at a time.\n  */\n  virtual int_type\n  overflow(int_type c = traits_type::eof());\n\n  /**\n   *  @brief  Installs external stream buffer.\n   *  @param  p  Pointer to char buffer.\n   *  @param  n  Size of external buffer.\n   *  @return  @c this on success, NULL on failure.\n   *\n   *  Call setbuf(0,0) to enable unbuffered output.\n  */\n  virtual std::streambuf*\n  setbuf(char_type* p,\n         std::streamsize n);\n\n  /**\n   *  @brief  Flush stream buffer to file.\n   *  @return  0 on success, -1 on error.\n   *\n   *  This calls underflow(EOF) to do the job.\n  */\n  virtual int\n  sync();\n\n//\n// Some future enhancements\n//\n//  virtual int_type uflow();\n//  virtual int_type pbackfail(int_type c = traits_type::eof());\n//  virtual pos_type\n//  seekoff(off_type off,\n//          std::ios_base::seekdir way,\n//          std::ios_base::openmode mode = std::ios_base::in|std::ios_base::out);\n//  virtual pos_type\n//  seekpos(pos_type sp,\n//          std::ios_base::openmode mode = std::ios_base::in|std::ios_base::out);\n\nprivate:\n  /**\n   *  @brief  Allocate internal buffer.\n   *\n   *  This function is safe to call multiple times. It will ensure\n   *  that a proper internal buffer exists if it is required. If the\n   *  buffer already exists or is external, the buffer pointers will be\n   *  reset to their original state.\n  */\n  void\n  enable_buffer();\n\n  /**\n   *  @brief  Destroy internal buffer.\n   *\n   *  This function is safe to call multiple times. It will ensure\n   *  that the internal buffer is deallocated if it exists. In any\n   *  case, it will also reset the buffer pointers.\n  */\n  void\n  disable_buffer();\n\n  /**\n   *  Underlying file pointer.\n  */\n  gzFile file;\n\n  /**\n   *  Mode in which file was opened.\n  */\n  std::ios_base::openmode io_mode;\n\n  /**\n   *  @brief  True if this object owns file descriptor.\n   *\n   *  This makes the class responsible for closing the file\n   *  upon destruction.\n  */\n  bool own_fd;\n\n  /**\n   *  @brief  Stream buffer.\n   *\n   *  For simplicity this remains allocated on the free store for the\n   *  entire life span of the gzfilebuf object, unless replaced by setbuf.\n  */\n  char_type* buffer;\n\n  /**\n   *  @brief  Stream buffer size.\n   *\n   *  Defaults to system default buffer size (typically 8192 bytes).\n   *  Modified by setbuf.\n  */\n  std::streamsize buffer_size;\n\n  /**\n   *  @brief  True if this object owns stream buffer.\n   *\n   *  This makes the class responsible for deleting the buffer\n   *  upon destruction.\n  */\n  bool own_buffer;\n};\n\n/*****************************************************************************/\n\n/**\n *  @brief  Gzipped file input stream class.\n *\n *  This class implements ifstream for gzipped files. Seeking and putback\n *  is not supported yet.\n*/\nclass gzifstream : public std::istream\n{\npublic:\n  //  Default constructor\n  gzifstream();\n\n  /**\n   *  @brief  Construct stream on gzipped file to be opened.\n   *  @param  name  File name.\n   *  @param  mode  Open mode flags (forced to contain ios::in).\n  */\n  explicit\n  gzifstream(const char* name,\n             std::ios_base::openmode mode = std::ios_base::in);\n\n  /**\n   *  @brief  Construct stream on already open gzipped file.\n   *  @param  fd    File descriptor.\n   *  @param  mode  Open mode flags (forced to contain ios::in).\n  */\n  explicit\n  gzifstream(int fd,\n             std::ios_base::openmode mode = std::ios_base::in);\n\n  /**\n   *  Obtain underlying stream buffer.\n  */\n  gzfilebuf*\n  rdbuf() const\n  { return const_cast<gzfilebuf*>(&sb); }\n\n  /**\n   *  @brief  Check if file is open.\n   *  @return  True if file is open.\n  */\n  bool\n  is_open() { return sb.is_open(); }\n\n  /**\n   *  @brief  Open gzipped file.\n   *  @param  name  File name.\n   *  @param  mode  Open mode flags (forced to contain ios::in).\n   *\n   *  Stream will be in state good() if file opens successfully;\n   *  otherwise in state fail(). This differs from the behavior of\n   *  ifstream, which never sets the state to good() and therefore\n   *  won't allow you to reuse the stream for a second file unless\n   *  you manually clear() the state. The choice is a matter of\n   *  convenience.\n  */\n  void\n  open(const char* name,\n       std::ios_base::openmode mode = std::ios_base::in);\n\n  /**\n   *  @brief  Attach to already open gzipped file.\n   *  @param  fd  File descriptor.\n   *  @param  mode  Open mode flags (forced to contain ios::in).\n   *\n   *  Stream will be in state good() if attach succeeded; otherwise\n   *  in state fail().\n  */\n  void\n  attach(int fd,\n         std::ios_base::openmode mode = std::ios_base::in);\n\n  /**\n   *  @brief  Close gzipped file.\n   *\n   *  Stream will be in state fail() if close failed.\n  */\n  void\n  close();\n\nprivate:\n  /**\n   *  Underlying stream buffer.\n  */\n  gzfilebuf sb;\n};\n\n/*****************************************************************************/\n\n/**\n *  @brief  Gzipped file output stream class.\n *\n *  This class implements ofstream for gzipped files. Seeking and putback\n *  is not supported yet.\n*/\nclass gzofstream : public std::ostream\n{\npublic:\n  //  Default constructor\n  gzofstream();\n\n  /**\n   *  @brief  Construct stream on gzipped file to be opened.\n   *  @param  name  File name.\n   *  @param  mode  Open mode flags (forced to contain ios::out).\n  */\n  explicit\n  gzofstream(const char* name,\n             std::ios_base::openmode mode = std::ios_base::out);\n\n  /**\n   *  @brief  Construct stream on already open gzipped file.\n   *  @param  fd    File descriptor.\n   *  @param  mode  Open mode flags (forced to contain ios::out).\n  */\n  explicit\n  gzofstream(int fd,\n             std::ios_base::openmode mode = std::ios_base::out);\n\n  /**\n   *  Obtain underlying stream buffer.\n  */\n  gzfilebuf*\n  rdbuf() const\n  { return const_cast<gzfilebuf*>(&sb); }\n\n  /**\n   *  @brief  Check if file is open.\n   *  @return  True if file is open.\n  */\n  bool\n  is_open() { return sb.is_open(); }\n\n  /**\n   *  @brief  Open gzipped file.\n   *  @param  name  File name.\n   *  @param  mode  Open mode flags (forced to contain ios::out).\n   *\n   *  Stream will be in state good() if file opens successfully;\n   *  otherwise in state fail(). This differs from the behavior of\n   *  ofstream, which never sets the state to good() and therefore\n   *  won't allow you to reuse the stream for a second file unless\n   *  you manually clear() the state. The choice is a matter of\n   *  convenience.\n  */\n  void\n  open(const char* name,\n       std::ios_base::openmode mode = std::ios_base::out);\n\n  /**\n   *  @brief  Attach to already open gzipped file.\n   *  @param  fd  File descriptor.\n   *  @param  mode  Open mode flags (forced to contain ios::out).\n   *\n   *  Stream will be in state good() if attach succeeded; otherwise\n   *  in state fail().\n  */\n  void\n  attach(int fd,\n         std::ios_base::openmode mode = std::ios_base::out);\n\n  /**\n   *  @brief  Close gzipped file.\n   *\n   *  Stream will be in state fail() if close failed.\n  */\n  void\n  close();\n\nprivate:\n  /**\n   *  Underlying stream buffer.\n  */\n  gzfilebuf sb;\n};\n\n/*****************************************************************************/\n\n/**\n *  @brief  Gzipped file output stream manipulator class.\n *\n *  This class defines a two-argument manipulator for gzofstream. It is used\n *  as base for the setcompression(int,int) manipulator.\n*/\ntemplate<typename T1, typename T2>\n  class gzomanip2\n  {\n  public:\n    // Allows insertor to peek at internals\n    template <typename Ta, typename Tb>\n      friend gzofstream&\n      operator<<(gzofstream&,\n                 const gzomanip2<Ta,Tb>&);\n\n    // Constructor\n    gzomanip2(gzofstream& (*f)(gzofstream&, T1, T2),\n              T1 v1,\n              T2 v2);\n  private:\n    // Underlying manipulator function\n    gzofstream&\n    (*func)(gzofstream&, T1, T2);\n\n    // Arguments for manipulator function\n    T1 val1;\n    T2 val2;\n  };\n\n/*****************************************************************************/\n\n// Manipulator function thunks through to stream buffer\ninline gzofstream&\nsetcompression(gzofstream &gzs, int l, int s = Z_DEFAULT_STRATEGY)\n{\n  (gzs.rdbuf())->setcompression(l, s);\n  return gzs;\n}\n\n// Manipulator constructor stores arguments\ntemplate<typename T1, typename T2>\n  inline\n  gzomanip2<T1,T2>::gzomanip2(gzofstream &(*f)(gzofstream &, T1, T2),\n                              T1 v1,\n                              T2 v2)\n  : func(f), val1(v1), val2(v2)\n  { }\n\n// Insertor applies underlying manipulator function to stream\ntemplate<typename T1, typename T2>\n  inline gzofstream&\n  operator<<(gzofstream& s, const gzomanip2<T1,T2>& m)\n  { return (*m.func)(s, m.val1, m.val2); }\n\n// Insert this onto stream to simplify setting of compression level\ninline gzomanip2<int,int>\nsetcompression(int l, int s = Z_DEFAULT_STRATEGY)\n{ return gzomanip2<int,int>(&setcompression, l, s); }\n\n#endif // ZFSTREAM_H\n"
  },
  {
    "path": "external/zlib/contrib/masmx64/bld_ml64.bat",
    "content": "ml64.exe /Flinffasx64 /c /Zi inffasx64.asm\nml64.exe /Flgvmat64   /c /Zi gvmat64.asm\n"
  },
  {
    "path": "external/zlib/contrib/masmx64/gvmat64.asm",
    "content": ";uInt longest_match_x64(\n;    deflate_state *s,\n;    IPos cur_match);                             /* current match */\n\n; gvmat64.asm -- Asm portion of the optimized longest_match for 32 bits x86_64\n;  (AMD64 on Athlon 64, Opteron, Phenom\n;     and Intel EM64T on Pentium 4 with EM64T, Pentium D, Core 2 Duo, Core I5/I7)\n; Copyright (C) 1995-2010 Jean-loup Gailly, Brian Raiter and Gilles Vollant.\n;\n; File written by Gilles Vollant, by converting to assembly the longest_match\n;  from Jean-loup Gailly in deflate.c of zLib and infoZip zip.\n;\n;  and by taking inspiration on asm686 with masm, optimised assembly code\n;        from Brian Raiter, written 1998\n;\n;  This software is provided 'as-is', without any express or implied\n;  warranty.  In no event will the authors be held liable for any damages\n;  arising from the use of this software.\n;\n;  Permission is granted to anyone to use this software for any purpose,\n;  including commercial applications, and to alter it and redistribute it\n;  freely, subject to the following restrictions:\n;\n;  1. The origin of this software must not be misrepresented; you must not\n;     claim that you wrote the original software. If you use this software\n;     in a product, an acknowledgment in the product documentation would be\n;     appreciated but is not required.\n;  2. Altered source versions must be plainly marked as such, and must not be\n;     misrepresented as being the original software\n;  3. This notice may not be removed or altered from any source distribution.\n;\n;\n;\n;         http://www.zlib.net\n;         http://www.winimage.com/zLibDll\n;         http://www.muppetlabs.com/~breadbox/software/assembly.html\n;\n; to compile this file for infozip Zip, I use option:\n;   ml64.exe /Flgvmat64 /c /Zi /DINFOZIP gvmat64.asm\n;\n; to compile this file for zLib, I use option:\n;   ml64.exe /Flgvmat64 /c /Zi gvmat64.asm\n; Be carrefull to adapt zlib1222add below to your version of zLib\n;   (if you use a version of zLib before 1.0.4 or after 1.2.2.2, change\n;    value of zlib1222add later)\n;\n; This file compile with Microsoft Macro Assembler (x64) for AMD64\n;\n;   ml64.exe is given with Visual Studio 2005/2008/2010 and Windows WDK\n;\n;   (you can get Windows WDK with ml64 for AMD64 from\n;      http://www.microsoft.com/whdc/Devtools/wdk/default.mspx for low price)\n;\n\n\n;uInt longest_match(s, cur_match)\n;    deflate_state *s;\n;    IPos cur_match;                             /* current match */\n.code\nlongest_match PROC\n\n\n;LocalVarsSize   equ 88\n LocalVarsSize   equ 72\n\n; register used : rax,rbx,rcx,rdx,rsi,rdi,r8,r9,r10,r11,r12\n; free register :  r14,r15\n; register can be saved : rsp\n\n chainlenwmask   equ  rsp + 8 - LocalVarsSize    ; high word: current chain len\n                                                 ; low word: s->wmask\n;window          equ  rsp + xx - LocalVarsSize   ; local copy of s->window ; stored in r10\n;windowbestlen   equ  rsp + xx - LocalVarsSize   ; s->window + bestlen , use r10+r11\n;scanstart       equ  rsp + xx - LocalVarsSize   ; first two bytes of string ; stored in r12w\n;scanend         equ  rsp + xx - LocalVarsSize   ; last two bytes of string use ebx\n;scanalign       equ  rsp + xx - LocalVarsSize   ; dword-misalignment of string r13\n;bestlen         equ  rsp + xx - LocalVarsSize   ; size of best match so far -> r11d\n;scan            equ  rsp + xx - LocalVarsSize   ; ptr to string wanting match -> r9\nIFDEF INFOZIP\nELSE\n nicematch       equ  (rsp + 16 - LocalVarsSize) ; a good enough match size\nENDIF\n\nsave_rdi        equ  rsp + 24 - LocalVarsSize\nsave_rsi        equ  rsp + 32 - LocalVarsSize\nsave_rbx        equ  rsp + 40 - LocalVarsSize\nsave_rbp        equ  rsp + 48 - LocalVarsSize\nsave_r12        equ  rsp + 56 - LocalVarsSize\nsave_r13        equ  rsp + 64 - LocalVarsSize\n;save_r14        equ  rsp + 72 - LocalVarsSize\n;save_r15        equ  rsp + 80 - LocalVarsSize\n\n\n; summary of register usage\n; scanend     ebx\n; scanendw    bx\n; chainlenwmask   edx\n; curmatch    rsi\n; curmatchd   esi\n; windowbestlen   r8\n; scanalign   r9\n; scanalignd  r9d\n; window      r10\n; bestlen     r11\n; bestlend    r11d\n; scanstart   r12d\n; scanstartw  r12w\n; scan        r13\n; nicematch   r14d\n; limit       r15\n; limitd      r15d\n; prev        rcx\n\n;  all the +4 offsets are due to the addition of pending_buf_size (in zlib\n;  in the deflate_state structure since the asm code was first written\n;  (if you compile with zlib 1.0.4 or older, remove the +4).\n;  Note : these value are good with a 8 bytes boundary pack structure\n\n\n    MAX_MATCH           equ     258\n    MIN_MATCH           equ     3\n    MIN_LOOKAHEAD       equ     (MAX_MATCH+MIN_MATCH+1)\n\n\n;;; Offsets for fields in the deflate_state structure. These numbers\n;;; are calculated from the definition of deflate_state, with the\n;;; assumption that the compiler will dword-align the fields. (Thus,\n;;; changing the definition of deflate_state could easily cause this\n;;; program to crash horribly, without so much as a warning at\n;;; compile time. Sigh.)\n\n;  all the +zlib1222add offsets are due to the addition of fields\n;  in zlib in the deflate_state structure since the asm code was first written\n;  (if you compile with zlib 1.0.4 or older, use \"zlib1222add equ (-4)\").\n;  (if you compile with zlib between 1.0.5 and 1.2.2.1, use \"zlib1222add equ 0\").\n;  if you compile with zlib 1.2.2.2 or later , use \"zlib1222add equ 8\").\n\n\nIFDEF INFOZIP\n\n_DATA   SEGMENT\nCOMM    window_size:DWORD\n; WMask ; 7fff\nCOMM    window:BYTE:010040H\nCOMM    prev:WORD:08000H\n; MatchLen : unused\n; PrevMatch : unused\nCOMM    strstart:DWORD\nCOMM    match_start:DWORD\n; Lookahead : ignore\nCOMM    prev_length:DWORD ; PrevLen\nCOMM    max_chain_length:DWORD\nCOMM    good_match:DWORD\nCOMM    nice_match:DWORD\nprev_ad equ OFFSET prev\nwindow_ad equ OFFSET window\nnicematch equ nice_match\n_DATA ENDS\nWMask equ 07fffh\n\nELSE\n\n  IFNDEF zlib1222add\n    zlib1222add equ 8\n  ENDIF\ndsWSize         equ 56+zlib1222add+(zlib1222add/2)\ndsWMask         equ 64+zlib1222add+(zlib1222add/2)\ndsWindow        equ 72+zlib1222add\ndsPrev          equ 88+zlib1222add\ndsMatchLen      equ 128+zlib1222add\ndsPrevMatch     equ 132+zlib1222add\ndsStrStart      equ 140+zlib1222add\ndsMatchStart    equ 144+zlib1222add\ndsLookahead     equ 148+zlib1222add\ndsPrevLen       equ 152+zlib1222add\ndsMaxChainLen   equ 156+zlib1222add\ndsGoodMatch     equ 172+zlib1222add\ndsNiceMatch     equ 176+zlib1222add\n\nwindow_size     equ [ rcx + dsWSize]\nWMask           equ [ rcx + dsWMask]\nwindow_ad       equ [ rcx + dsWindow]\nprev_ad         equ [ rcx + dsPrev]\nstrstart        equ [ rcx + dsStrStart]\nmatch_start     equ [ rcx + dsMatchStart]\nLookahead       equ [ rcx + dsLookahead] ; 0ffffffffh on infozip\nprev_length     equ [ rcx + dsPrevLen]\nmax_chain_length equ [ rcx + dsMaxChainLen]\ngood_match      equ [ rcx + dsGoodMatch]\nnice_match      equ [ rcx + dsNiceMatch]\nENDIF\n\n; parameter 1 in r8(deflate state s), param 2 in rdx (cur match)\n\n; see http://weblogs.asp.net/oldnewthing/archive/2004/01/14/58579.aspx and\n; http://msdn.microsoft.com/library/en-us/kmarch/hh/kmarch/64bitAMD_8e951dd2-ee77-4728-8702-55ce4b5dd24a.xml.asp\n;\n; All registers must be preserved across the call, except for\n;   rax, rcx, rdx, r8, r9, r10, and r11, which are scratch.\n\n\n\n;;; Save registers that the compiler may be using, and adjust esp to\n;;; make room for our stack frame.\n\n\n;;; Retrieve the function arguments. r8d will hold cur_match\n;;; throughout the entire function. edx will hold the pointer to the\n;;; deflate_state structure during the function's setup (before\n;;; entering the main loop.\n\n; parameter 1 in rcx (deflate_state* s), param 2 in edx -> r8 (cur match)\n\n; this clear high 32 bits of r8, which can be garbage in both r8 and rdx\n\n        mov [save_rdi],rdi\n        mov [save_rsi],rsi\n        mov [save_rbx],rbx\n        mov [save_rbp],rbp\nIFDEF INFOZIP\n        mov r8d,ecx\nELSE\n        mov r8d,edx\nENDIF\n        mov [save_r12],r12\n        mov [save_r13],r13\n;        mov [save_r14],r14\n;        mov [save_r15],r15\n\n\n;;; uInt wmask = s->w_mask;\n;;; unsigned chain_length = s->max_chain_length;\n;;; if (s->prev_length >= s->good_match) {\n;;;     chain_length >>= 2;\n;;; }\n\n        mov edi, prev_length\n        mov esi, good_match\n        mov eax, WMask\n        mov ebx, max_chain_length\n        cmp edi, esi\n        jl  LastMatchGood\n        shr ebx, 2\nLastMatchGood:\n\n;;; chainlen is decremented once beforehand so that the function can\n;;; use the sign flag instead of the zero flag for the exit test.\n;;; It is then shifted into the high word, to make room for the wmask\n;;; value, which it will always accompany.\n\n        dec ebx\n        shl ebx, 16\n        or  ebx, eax\n\n;;; on zlib only\n;;; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;\n\nIFDEF INFOZIP\n        mov [chainlenwmask], ebx\n; on infozip nice_match = [nice_match]\nELSE\n        mov eax, nice_match\n        mov [chainlenwmask], ebx\n        mov r10d, Lookahead\n        cmp r10d, eax\n        cmovnl r10d, eax\n        mov [nicematch],r10d\nENDIF\n\n;;; register Bytef *scan = s->window + s->strstart;\n        mov r10, window_ad\n        mov ebp, strstart\n        lea r13, [r10 + rbp]\n\n;;; Determine how many bytes the scan ptr is off from being\n;;; dword-aligned.\n\n         mov r9,r13\n         neg r13\n         and r13,3\n\n;;; IPos limit = s->strstart > (IPos)MAX_DIST(s) ?\n;;;     s->strstart - (IPos)MAX_DIST(s) : NIL;\nIFDEF INFOZIP\n        mov eax,07efah ; MAX_DIST = (WSIZE-MIN_LOOKAHEAD) (0x8000-(3+8+1))\nELSE\n        mov eax, window_size\n        sub eax, MIN_LOOKAHEAD\nENDIF\n        xor edi,edi\n        sub ebp, eax\n\n        mov r11d, prev_length\n\n        cmovng ebp,edi\n\n;;; int best_len = s->prev_length;\n\n\n;;; Store the sum of s->window + best_len in esi locally, and in esi.\n\n       lea  rsi,[r10+r11]\n\n;;; register ush scan_start = *(ushf*)scan;\n;;; register ush scan_end   = *(ushf*)(scan+best_len-1);\n;;; Posf *prev = s->prev;\n\n        movzx r12d,word ptr [r9]\n        movzx ebx, word ptr [r9 + r11 - 1]\n\n        mov rdi, prev_ad\n\n;;; Jump into the main loop.\n\n        mov edx, [chainlenwmask]\n\n        cmp bx,word ptr [rsi + r8 - 1]\n        jz  LookupLoopIsZero\n\nLookupLoop1:\n        and r8d, edx\n\n        movzx   r8d, word ptr [rdi + r8*2]\n        cmp r8d, ebp\n        jbe LeaveNow\n        sub edx, 00010000h\n        js  LeaveNow\n\nLoopEntry1:\n        cmp bx,word ptr [rsi + r8 - 1]\n        jz  LookupLoopIsZero\n\nLookupLoop2:\n        and r8d, edx\n\n        movzx   r8d, word ptr [rdi + r8*2]\n        cmp r8d, ebp\n        jbe LeaveNow\n        sub edx, 00010000h\n        js  LeaveNow\n\nLoopEntry2:\n        cmp bx,word ptr [rsi + r8 - 1]\n        jz  LookupLoopIsZero\n\nLookupLoop4:\n        and r8d, edx\n\n        movzx   r8d, word ptr [rdi + r8*2]\n        cmp r8d, ebp\n        jbe LeaveNow\n        sub edx, 00010000h\n        js  LeaveNow\n\nLoopEntry4:\n\n        cmp bx,word ptr [rsi + r8 - 1]\n        jnz LookupLoop1\n        jmp LookupLoopIsZero\n\n\n;;; do {\n;;;     match = s->window + cur_match;\n;;;     if (*(ushf*)(match+best_len-1) != scan_end ||\n;;;         *(ushf*)match != scan_start) continue;\n;;;     [...]\n;;; } while ((cur_match = prev[cur_match & wmask]) > limit\n;;;          && --chain_length != 0);\n;;;\n;;; Here is the inner loop of the function. The function will spend the\n;;; majority of its time in this loop, and majority of that time will\n;;; be spent in the first ten instructions.\n;;;\n;;; Within this loop:\n;;; ebx = scanend\n;;; r8d = curmatch\n;;; edx = chainlenwmask - i.e., ((chainlen << 16) | wmask)\n;;; esi = windowbestlen - i.e., (window + bestlen)\n;;; edi = prev\n;;; ebp = limit\n\nLookupLoop:\n        and r8d, edx\n\n        movzx   r8d, word ptr [rdi + r8*2]\n        cmp r8d, ebp\n        jbe LeaveNow\n        sub edx, 00010000h\n        js  LeaveNow\n\nLoopEntry:\n\n        cmp bx,word ptr [rsi + r8 - 1]\n        jnz LookupLoop1\nLookupLoopIsZero:\n        cmp     r12w, word ptr [r10 + r8]\n        jnz LookupLoop1\n\n\n;;; Store the current value of chainlen.\n        mov [chainlenwmask], edx\n\n;;; Point edi to the string under scrutiny, and esi to the string we\n;;; are hoping to match it up with. In actuality, esi and edi are\n;;; both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and edx is\n;;; initialized to -(MAX_MATCH_8 - scanalign).\n\n        lea rsi,[r8+r10]\n        mov rdx, 0fffffffffffffef8h; -(MAX_MATCH_8)\n        lea rsi, [rsi + r13 + 0108h] ;MAX_MATCH_8]\n        lea rdi, [r9 + r13 + 0108h] ;MAX_MATCH_8]\n\n        prefetcht1 [rsi+rdx]\n        prefetcht1 [rdi+rdx]\n\n\n;;; Test the strings for equality, 8 bytes at a time. At the end,\n;;; adjust rdx so that it is offset to the exact byte that mismatched.\n;;;\n;;; We already know at this point that the first three bytes of the\n;;; strings match each other, and they can be safely passed over before\n;;; starting the compare loop. So what this code does is skip over 0-3\n;;; bytes, as much as necessary in order to dword-align the edi\n;;; pointer. (rsi will still be misaligned three times out of four.)\n;;;\n;;; It should be confessed that this loop usually does not represent\n;;; much of the total running time. Replacing it with a more\n;;; straightforward \"rep cmpsb\" would not drastically degrade\n;;; performance.\n\n\nLoopCmps:\n        mov rax, [rsi + rdx]\n        xor rax, [rdi + rdx]\n        jnz LeaveLoopCmps\n\n        mov rax, [rsi + rdx + 8]\n        xor rax, [rdi + rdx + 8]\n        jnz LeaveLoopCmps8\n\n\n        mov rax, [rsi + rdx + 8+8]\n        xor rax, [rdi + rdx + 8+8]\n        jnz LeaveLoopCmps16\n\n        add rdx,8+8+8\n\n        jnz short LoopCmps\n        jmp short LenMaximum\nLeaveLoopCmps16: add rdx,8\nLeaveLoopCmps8: add rdx,8\nLeaveLoopCmps:\n\n        test    eax, 0000FFFFh\n        jnz LenLower\n\n        test eax,0ffffffffh\n\n        jnz LenLower32\n\n        add rdx,4\n        shr rax,32\n        or ax,ax\n        jnz LenLower\n\nLenLower32:\n        shr eax,16\n        add rdx,2\nLenLower:   sub al, 1\n        adc rdx, 0\n;;; Calculate the length of the match. If it is longer than MAX_MATCH,\n;;; then automatically accept it as the best possible match and leave.\n\n        lea rax, [rdi + rdx]\n        sub rax, r9\n        cmp eax, MAX_MATCH\n        jge LenMaximum\n\n;;; If the length of the match is not longer than the best match we\n;;; have so far, then forget it and return to the lookup loop.\n;///////////////////////////////////\n\n        cmp eax, r11d\n        jg  LongerMatch\n\n        lea rsi,[r10+r11]\n\n        mov rdi, prev_ad\n        mov edx, [chainlenwmask]\n        jmp LookupLoop\n\n;;;         s->match_start = cur_match;\n;;;         best_len = len;\n;;;         if (len >= nice_match) break;\n;;;         scan_end = *(ushf*)(scan+best_len-1);\n\nLongerMatch:\n        mov r11d, eax\n        mov match_start, r8d\n        cmp eax, [nicematch]\n        jge LeaveNow\n\n        lea rsi,[r10+rax]\n\n        movzx   ebx, word ptr [r9 + rax - 1]\n        mov rdi, prev_ad\n        mov edx, [chainlenwmask]\n        jmp LookupLoop\n\n;;; Accept the current string, with the maximum possible length.\n\nLenMaximum:\n        mov r11d,MAX_MATCH\n        mov match_start, r8d\n\n;;; if ((uInt)best_len <= s->lookahead) return (uInt)best_len;\n;;; return s->lookahead;\n\nLeaveNow:\nIFDEF INFOZIP\n        mov eax,r11d\nELSE\n        mov eax, Lookahead\n        cmp r11d, eax\n        cmovng eax, r11d\nENDIF\n\n;;; Restore the stack and return from whence we came.\n\n\n        mov rsi,[save_rsi]\n        mov rdi,[save_rdi]\n        mov rbx,[save_rbx]\n        mov rbp,[save_rbp]\n        mov r12,[save_r12]\n        mov r13,[save_r13]\n;        mov r14,[save_r14]\n;        mov r15,[save_r15]\n\n\n        ret 0\n; please don't remove this string !\n; Your can freely use gvmat64 in any free or commercial app\n; but it is far better don't remove the string in the binary!\n    db     0dh,0ah,\"asm686 with masm, optimised assembly code from Brian Raiter, written 1998, converted to amd 64 by Gilles Vollant 2005\",0dh,0ah,0\nlongest_match   ENDP\n\nmatch_init PROC\n  ret 0\nmatch_init ENDP\n\n\nEND\n"
  },
  {
    "path": "external/zlib/contrib/masmx64/inffas8664.c",
    "content": "/* inffas8664.c is a hand tuned assembler version of inffast.c - fast decoding\n * version for AMD64 on Windows using Microsoft C compiler\n *\n * Copyright (C) 1995-2003 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n *\n * Copyright (C) 2003 Chris Anderson <christop@charm.net>\n * Please use the copyright conditions above.\n *\n * 2005 - Adaptation to Microsoft C Compiler for AMD64 by Gilles Vollant\n *\n * inffas8664.c call function inffas8664fnc in inffasx64.asm\n *  inffasx64.asm is automatically convert from AMD64 portion of inffas86.c\n *\n * Dec-29-2003 -- I added AMD64 inflate asm support.  This version is also\n * slightly quicker on x86 systems because, instead of using rep movsb to copy\n * data, it uses rep movsw, which moves data in 2-byte chunks instead of single\n * bytes.  I've tested the AMD64 code on a Fedora Core 1 + the x86_64 updates\n * from http://fedora.linux.duke.edu/fc1_x86_64\n * which is running on an Athlon 64 3000+ / Gigabyte GA-K8VT800M system with\n * 1GB ram.  The 64-bit version is about 4% faster than the 32-bit version,\n * when decompressing mozilla-source-1.3.tar.gz.\n *\n * Mar-13-2003 -- Most of this is derived from inffast.S which is derived from\n * the gcc -S output of zlib-1.2.0/inffast.c.  Zlib-1.2.0 is in beta release at\n * the moment.  I have successfully compiled and tested this code with gcc2.96,\n * gcc3.2, icc5.0, msvc6.0.  It is very close to the speed of inffast.S\n * compiled with gcc -DNO_MMX, but inffast.S is still faster on the P3 with MMX\n * enabled.  I will attempt to merge the MMX code into this version.  Newer\n * versions of this and inffast.S can be found at\n * http://www.eetbeetee.com/zlib/ and http://www.charm.net/~christop/zlib/\n *\n */\n\n#include <stdio.h>\n#include \"zutil.h\"\n#include \"inftrees.h\"\n#include \"inflate.h\"\n#include \"inffast.h\"\n\n/* Mark Adler's comments from inffast.c: */\n\n/*\n   Decode literal, length, and distance codes and write out the resulting\n   literal and match bytes until either not enough input or output is\n   available, an end-of-block is encountered, or a data error is encountered.\n   When large enough input and output buffers are supplied to inflate(), for\n   example, a 16K input buffer and a 64K output buffer, more than 95% of the\n   inflate execution time is spent in this routine.\n\n   Entry assumptions:\n\n        state->mode == LEN\n        strm->avail_in >= 6\n        strm->avail_out >= 258\n        start >= strm->avail_out\n        state->bits < 8\n\n   On return, state->mode is one of:\n\n        LEN -- ran out of enough output space or enough available input\n        TYPE -- reached end of block code, inflate() to interpret next block\n        BAD -- error in block data\n\n   Notes:\n\n    - The maximum input bits used by a length/distance pair is 15 bits for the\n      length code, 5 bits for the length extra, 15 bits for the distance code,\n      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.\n      Therefore if strm->avail_in >= 6, then there is enough input to avoid\n      checking for available input while decoding.\n\n    - The maximum bytes that a single length/distance pair can output is 258\n      bytes, which is the maximum length that can be coded.  inflate_fast()\n      requires strm->avail_out >= 258 for each loop to avoid checking for\n      output space.\n */\n\n\n\n    typedef struct inffast_ar {\n/* 64   32                               x86  x86_64 */\n/* ar offset                              register */\n/*  0    0 */ void *esp;                /* esp save */\n/*  8    4 */ void *ebp;                /* ebp save */\n/* 16    8 */ unsigned char FAR *in;    /* esi rsi  local strm->next_in */\n/* 24   12 */ unsigned char FAR *last;  /*     r9   while in < last */\n/* 32   16 */ unsigned char FAR *out;   /* edi rdi  local strm->next_out */\n/* 40   20 */ unsigned char FAR *beg;   /*          inflate()'s init next_out */\n/* 48   24 */ unsigned char FAR *end;   /*     r10  while out < end */\n/* 56   28 */ unsigned char FAR *window;/*          size of window, wsize!=0 */\n/* 64   32 */ code const FAR *lcode;    /* ebp rbp  local strm->lencode */\n/* 72   36 */ code const FAR *dcode;    /*     r11  local strm->distcode */\n/* 80   40 */ size_t /*unsigned long */hold;       /* edx rdx  local strm->hold */\n/* 88   44 */ unsigned bits;            /* ebx rbx  local strm->bits */\n/* 92   48 */ unsigned wsize;           /*          window size */\n/* 96   52 */ unsigned write;           /*          window write index */\n/*100   56 */ unsigned lmask;           /*     r12  mask for lcode */\n/*104   60 */ unsigned dmask;           /*     r13  mask for dcode */\n/*108   64 */ unsigned len;             /*     r14  match length */\n/*112   68 */ unsigned dist;            /*     r15  match distance */\n/*116   72 */ unsigned status;          /*          set when state chng*/\n    } type_ar;\n#ifdef ASMINF\n\nvoid inflate_fast(strm, start)\nz_streamp strm;\nunsigned start;         /* inflate()'s starting value for strm->avail_out */\n{\n    struct inflate_state FAR *state;\n    type_ar ar;\n    void inffas8664fnc(struct inffast_ar * par);\n\n\n\n#if (defined( __GNUC__ ) && defined( __amd64__ ) && ! defined( __i386 )) || (defined(_MSC_VER) && defined(_M_AMD64))\n#define PAD_AVAIL_IN 6\n#define PAD_AVAIL_OUT 258\n#else\n#define PAD_AVAIL_IN 5\n#define PAD_AVAIL_OUT 257\n#endif\n\n    /* copy state to local variables */\n    state = (struct inflate_state FAR *)strm->state;\n\n    ar.in = strm->next_in;\n    ar.last = ar.in + (strm->avail_in - PAD_AVAIL_IN);\n    ar.out = strm->next_out;\n    ar.beg = ar.out - (start - strm->avail_out);\n    ar.end = ar.out + (strm->avail_out - PAD_AVAIL_OUT);\n    ar.wsize = state->wsize;\n    ar.write = state->wnext;\n    ar.window = state->window;\n    ar.hold = state->hold;\n    ar.bits = state->bits;\n    ar.lcode = state->lencode;\n    ar.dcode = state->distcode;\n    ar.lmask = (1U << state->lenbits) - 1;\n    ar.dmask = (1U << state->distbits) - 1;\n\n    /* decode literals and length/distances until end-of-block or not enough\n       input data or output space */\n\n    /* align in on 1/2 hold size boundary */\n    while (((size_t)(void *)ar.in & (sizeof(ar.hold) / 2 - 1)) != 0) {\n        ar.hold += (unsigned long)*ar.in++ << ar.bits;\n        ar.bits += 8;\n    }\n\n    inffas8664fnc(&ar);\n\n    if (ar.status > 1) {\n        if (ar.status == 2)\n            strm->msg = \"invalid literal/length code\";\n        else if (ar.status == 3)\n            strm->msg = \"invalid distance code\";\n        else\n            strm->msg = \"invalid distance too far back\";\n        state->mode = BAD;\n    }\n    else if ( ar.status == 1 ) {\n        state->mode = TYPE;\n    }\n\n    /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n    ar.len = ar.bits >> 3;\n    ar.in -= ar.len;\n    ar.bits -= ar.len << 3;\n    ar.hold &= (1U << ar.bits) - 1;\n\n    /* update state and return */\n    strm->next_in = ar.in;\n    strm->next_out = ar.out;\n    strm->avail_in = (unsigned)(ar.in < ar.last ?\n                                PAD_AVAIL_IN + (ar.last - ar.in) :\n                                PAD_AVAIL_IN - (ar.in - ar.last));\n    strm->avail_out = (unsigned)(ar.out < ar.end ?\n                                 PAD_AVAIL_OUT + (ar.end - ar.out) :\n                                 PAD_AVAIL_OUT - (ar.out - ar.end));\n    state->hold = (unsigned long)ar.hold;\n    state->bits = ar.bits;\n    return;\n}\n\n#endif\n"
  },
  {
    "path": "external/zlib/contrib/masmx64/inffasx64.asm",
    "content": "; inffasx64.asm is a hand tuned assembler version of inffast.c - fast decoding\n; version for AMD64 on Windows using Microsoft C compiler\n;\n; inffasx64.asm is automatically convert from AMD64 portion of inffas86.c\n; inffasx64.asm is called by inffas8664.c, which contain more info.\n\n\n; to compile this file, I use option\n;   ml64.exe /Flinffasx64 /c /Zi inffasx64.asm\n;   with Microsoft Macro Assembler (x64) for AMD64\n;\n\n; This file compile with Microsoft Macro Assembler (x64) for AMD64\n;\n;   ml64.exe is given with Visual Studio 2005/2008/2010 and Windows WDK\n;\n;   (you can get Windows WDK with ml64 for AMD64 from\n;      http://www.microsoft.com/whdc/Devtools/wdk/default.mspx for low price)\n;\n\n\n.code\ninffas8664fnc PROC\n\n; see http://weblogs.asp.net/oldnewthing/archive/2004/01/14/58579.aspx and\n; http://msdn.microsoft.com/library/en-us/kmarch/hh/kmarch/64bitAMD_8e951dd2-ee77-4728-8702-55ce4b5dd24a.xml.asp\n;\n; All registers must be preserved across the call, except for\n;   rax, rcx, rdx, r8, r-9, r10, and r11, which are scratch.\n\n\n\tmov [rsp-8],rsi\n\tmov [rsp-16],rdi\n\tmov [rsp-24],r12\n\tmov [rsp-32],r13\n\tmov [rsp-40],r14\n\tmov [rsp-48],r15\n\tmov [rsp-56],rbx\n\n\tmov rax,rcx\n\n\tmov\t[rax+8], rbp       ; /* save regs rbp and rsp */\n\tmov\t[rax], rsp\n\n\tmov\trsp, rax          ; /* make rsp point to &ar */\n\n\tmov\trsi, [rsp+16]      ; /* rsi  = in */\n\tmov\trdi, [rsp+32]      ; /* rdi  = out */\n\tmov\tr9, [rsp+24]       ; /* r9   = last */\n\tmov\tr10, [rsp+48]      ; /* r10  = end */\n\tmov\trbp, [rsp+64]      ; /* rbp  = lcode */\n\tmov\tr11, [rsp+72]      ; /* r11  = dcode */\n\tmov\trdx, [rsp+80]      ; /* rdx  = hold */\n\tmov\tebx, [rsp+88]      ; /* ebx  = bits */\n\tmov\tr12d, [rsp+100]    ; /* r12d = lmask */\n\tmov\tr13d, [rsp+104]    ; /* r13d = dmask */\n                                          ; /* r14d = len */\n                                          ; /* r15d = dist */\n\n\n\tcld\n\tcmp\tr10, rdi\n\tje\tL_one_time           ; /* if only one decode left */\n\tcmp\tr9, rsi\n\n    jne L_do_loop\n\n\nL_one_time:\n\tmov\tr8, r12           ; /* r8 = lmask */\n\tcmp\tbl, 32\n\tja\tL_get_length_code_one_time\n\n\tlodsd                         ; /* eax = *(uint *)in++ */\n\tmov\tcl, bl            ; /* cl = bits, needs it for shifting */\n\tadd\tbl, 32             ; /* bits += 32 */\n\tshl\trax, cl\n\tor\trdx, rax          ; /* hold |= *((uint *)in)++ << bits */\n\tjmp\tL_get_length_code_one_time\n\nALIGN 4\nL_while_test:\n\tcmp\tr10, rdi\n\tjbe\tL_break_loop\n\tcmp\tr9, rsi\n\tjbe\tL_break_loop\n\nL_do_loop:\n\tmov\tr8, r12           ; /* r8 = lmask */\n\tcmp\tbl, 32\n\tja\tL_get_length_code    ; /* if (32 < bits) */\n\n\tlodsd                         ; /* eax = *(uint *)in++ */\n\tmov\tcl, bl            ; /* cl = bits, needs it for shifting */\n\tadd\tbl, 32             ; /* bits += 32 */\n\tshl\trax, cl\n\tor\trdx, rax          ; /* hold |= *((uint *)in)++ << bits */\n\nL_get_length_code:\n\tand\tr8, rdx            ; /* r8 &= hold */\n\tmov\teax, [rbp+r8*4]  ; /* eax = lcode[hold & lmask] */\n\n\tmov\tcl, ah            ; /* cl = this.bits */\n\tsub\tbl, ah            ; /* bits -= this.bits */\n\tshr\trdx, cl           ; /* hold >>= this.bits */\n\n\ttest\tal, al\n\tjnz\tL_test_for_length_base ; /* if (op != 0) 45.7% */\n\n\tmov\tr8, r12            ; /* r8 = lmask */\n\tshr\teax, 16            ; /* output this.val char */\n\tstosb\n\nL_get_length_code_one_time:\n\tand\tr8, rdx            ; /* r8 &= hold */\n\tmov\teax, [rbp+r8*4] ; /* eax = lcode[hold & lmask] */\n\nL_dolen:\n\tmov\tcl, ah            ; /* cl = this.bits */\n\tsub\tbl, ah            ; /* bits -= this.bits */\n\tshr\trdx, cl           ; /* hold >>= this.bits */\n\n\ttest\tal, al\n\tjnz\tL_test_for_length_base ; /* if (op != 0) 45.7% */\n\n\tshr\teax, 16            ; /* output this.val char */\n\tstosb\n\tjmp\tL_while_test\n\nALIGN 4\nL_test_for_length_base:\n\tmov\tr14d, eax         ; /* len = this */\n\tshr\tr14d, 16           ; /* len = this.val */\n\tmov\tcl, al\n\n\ttest\tal, 16\n\tjz\tL_test_for_second_level_length ; /* if ((op & 16) == 0) 8% */\n\tand\tcl, 15             ; /* op &= 15 */\n\tjz\tL_decode_distance    ; /* if (!op) */\n\nL_add_bits_to_len:\n\tsub\tbl, cl\n\txor\teax, eax\n\tinc\teax\n\tshl\teax, cl\n\tdec\teax\n\tand\teax, edx          ; /* eax &= hold */\n\tshr\trdx, cl\n\tadd\tr14d, eax         ; /* len += hold & mask[op] */\n\nL_decode_distance:\n\tmov\tr8, r13           ; /* r8 = dmask */\n\tcmp\tbl, 32\n\tja\tL_get_distance_code  ; /* if (32 < bits) */\n\n\tlodsd                         ; /* eax = *(uint *)in++ */\n\tmov\tcl, bl            ; /* cl = bits, needs it for shifting */\n\tadd\tbl, 32             ; /* bits += 32 */\n\tshl\trax, cl\n\tor\trdx, rax          ; /* hold |= *((uint *)in)++ << bits */\n\nL_get_distance_code:\n\tand\tr8, rdx           ; /* r8 &= hold */\n\tmov\teax, [r11+r8*4] ; /* eax = dcode[hold & dmask] */\n\nL_dodist:\n\tmov\tr15d, eax         ; /* dist = this */\n\tshr\tr15d, 16           ; /* dist = this.val */\n\tmov\tcl, ah\n\tsub\tbl, ah            ; /* bits -= this.bits */\n\tshr\trdx, cl           ; /* hold >>= this.bits */\n\tmov\tcl, al            ; /* cl = this.op */\n\n\ttest\tal, 16             ; /* if ((op & 16) == 0) */\n\tjz\tL_test_for_second_level_dist\n\tand\tcl, 15             ; /* op &= 15 */\n\tjz\tL_check_dist_one\n\nL_add_bits_to_dist:\n\tsub\tbl, cl\n\txor\teax, eax\n\tinc\teax\n\tshl\teax, cl\n\tdec\teax                 ; /* (1 << op) - 1 */\n\tand\teax, edx          ; /* eax &= hold */\n\tshr\trdx, cl\n\tadd\tr15d, eax         ; /* dist += hold & ((1 << op) - 1) */\n\nL_check_window:\n\tmov\tr8, rsi           ; /* save in so from can use it's reg */\n\tmov\trax, rdi\n\tsub\trax, [rsp+40]      ; /* nbytes = out - beg */\n\n\tcmp\teax, r15d\n\tjb\tL_clip_window        ; /* if (dist > nbytes) 4.2% */\n\n\tmov\tecx, r14d         ; /* ecx = len */\n\tmov\trsi, rdi\n\tsub\trsi, r15          ; /* from = out - dist */\n\n\tsar\tecx, 1\n\tjnc\tL_copy_two           ; /* if len % 2 == 0 */\n\n\trep     movsw\n\tmov\tal, [rsi]\n\tmov\t[rdi], al\n\tinc\trdi\n\n\tmov\trsi, r8           ; /* move in back to %rsi, toss from */\n\tjmp\tL_while_test\n\nL_copy_two:\n\trep     movsw\n\tmov\trsi, r8           ; /* move in back to %rsi, toss from */\n\tjmp\tL_while_test\n\nALIGN 4\nL_check_dist_one:\n\tcmp\tr15d, 1            ; /* if dist 1, is a memset */\n\tjne\tL_check_window\n\tcmp\t[rsp+40], rdi      ; /* if out == beg, outside window */\n\tje\tL_check_window\n\n\tmov\tecx, r14d         ; /* ecx = len */\n\tmov\tal, [rdi-1]\n\tmov\tah, al\n\n\tsar\tecx, 1\n\tjnc\tL_set_two\n\tmov\t[rdi], al\n\tinc\trdi\n\nL_set_two:\n\trep     stosw\n\tjmp\tL_while_test\n\nALIGN 4\nL_test_for_second_level_length:\n\ttest\tal, 64\n\tjnz\tL_test_for_end_of_block ; /* if ((op & 64) != 0) */\n\n\txor\teax, eax\n\tinc\teax\n\tshl\teax, cl\n\tdec\teax\n\tand\teax, edx         ; /* eax &= hold */\n\tadd\teax, r14d        ; /* eax += len */\n\tmov\teax, [rbp+rax*4] ; /* eax = lcode[val+(hold&mask[op])]*/\n\tjmp\tL_dolen\n\nALIGN 4\nL_test_for_second_level_dist:\n\ttest\tal, 64\n\tjnz\tL_invalid_distance_code ; /* if ((op & 64) != 0) */\n\n\txor\teax, eax\n\tinc\teax\n\tshl\teax, cl\n\tdec\teax\n\tand\teax, edx         ; /* eax &= hold */\n\tadd\teax, r15d        ; /* eax += dist */\n\tmov\teax, [r11+rax*4] ; /* eax = dcode[val+(hold&mask[op])]*/\n\tjmp\tL_dodist\n\nALIGN 4\nL_clip_window:\n\tmov\tecx, eax         ; /* ecx = nbytes */\n\tmov\teax, [rsp+92]     ; /* eax = wsize, prepare for dist cmp */\n\tneg\tecx                ; /* nbytes = -nbytes */\n\n\tcmp\teax, r15d\n\tjb\tL_invalid_distance_too_far ; /* if (dist > wsize) */\n\n\tadd\tecx, r15d         ; /* nbytes = dist - nbytes */\n\tcmp\tdword ptr [rsp+96], 0\n\tjne\tL_wrap_around_window ; /* if (write != 0) */\n\n\tmov\trsi, [rsp+56]     ; /* from  = window */\n\tsub\teax, ecx         ; /* eax  -= nbytes */\n\tadd\trsi, rax         ; /* from += wsize - nbytes */\n\n\tmov\teax, r14d        ; /* eax = len */\n\tcmp\tr14d, ecx\n\tjbe\tL_do_copy           ; /* if (nbytes >= len) */\n\n\tsub\teax, ecx         ; /* eax -= nbytes */\n\trep     movsb\n\tmov\trsi, rdi\n\tsub\trsi, r15         ; /* from = &out[ -dist ] */\n\tjmp\tL_do_copy\n\nALIGN 4\nL_wrap_around_window:\n\tmov\teax, [rsp+96]     ; /* eax = write */\n\tcmp\tecx, eax\n\tjbe\tL_contiguous_in_window ; /* if (write >= nbytes) */\n\n\tmov\tesi, [rsp+92]     ; /* from  = wsize */\n\tadd\trsi, [rsp+56]     ; /* from += window */\n\tadd\trsi, rax         ; /* from += write */\n\tsub\trsi, rcx         ; /* from -= nbytes */\n\tsub\tecx, eax         ; /* nbytes -= write */\n\n\tmov\teax, r14d        ; /* eax = len */\n\tcmp\teax, ecx\n\tjbe\tL_do_copy           ; /* if (nbytes >= len) */\n\n\tsub\teax, ecx         ; /* len -= nbytes */\n\trep     movsb\n\tmov\trsi, [rsp+56]     ; /* from = window */\n\tmov\tecx, [rsp+96]     ; /* nbytes = write */\n\tcmp\teax, ecx\n\tjbe\tL_do_copy           ; /* if (nbytes >= len) */\n\n\tsub\teax, ecx         ; /* len -= nbytes */\n\trep     movsb\n\tmov\trsi, rdi\n\tsub\trsi, r15         ; /* from = out - dist */\n\tjmp\tL_do_copy\n\nALIGN 4\nL_contiguous_in_window:\n\tmov\trsi, [rsp+56]     ; /* rsi = window */\n\tadd\trsi, rax\n\tsub\trsi, rcx         ; /* from += write - nbytes */\n\n\tmov\teax, r14d        ; /* eax = len */\n\tcmp\teax, ecx\n\tjbe\tL_do_copy           ; /* if (nbytes >= len) */\n\n\tsub\teax, ecx         ; /* len -= nbytes */\n\trep     movsb\n\tmov\trsi, rdi\n\tsub\trsi, r15         ; /* from = out - dist */\n\tjmp\tL_do_copy           ; /* if (nbytes >= len) */\n\nALIGN 4\nL_do_copy:\n\tmov\tecx, eax         ; /* ecx = len */\n\trep     movsb\n\n\tmov\trsi, r8          ; /* move in back to %esi, toss from */\n\tjmp\tL_while_test\n\nL_test_for_end_of_block:\n\ttest\tal, 32\n\tjz\tL_invalid_literal_length_code\n\tmov\tdword ptr [rsp+116], 1\n\tjmp\tL_break_loop_with_status\n\nL_invalid_literal_length_code:\n\tmov\tdword ptr [rsp+116], 2\n\tjmp\tL_break_loop_with_status\n\nL_invalid_distance_code:\n\tmov\tdword ptr [rsp+116], 3\n\tjmp\tL_break_loop_with_status\n\nL_invalid_distance_too_far:\n\tmov\tdword ptr [rsp+116], 4\n\tjmp\tL_break_loop_with_status\n\nL_break_loop:\n\tmov\tdword ptr [rsp+116], 0\n\nL_break_loop_with_status:\n; /* put in, out, bits, and hold back into ar and pop esp */\n\tmov\t[rsp+16], rsi     ; /* in */\n\tmov\t[rsp+32], rdi     ; /* out */\n\tmov\t[rsp+88], ebx     ; /* bits */\n\tmov\t[rsp+80], rdx     ; /* hold */\n\n\tmov\trax, [rsp]       ; /* restore rbp and rsp */\n\tmov\trbp, [rsp+8]\n\tmov\trsp, rax\n\n\n\n\tmov rsi,[rsp-8]\n\tmov rdi,[rsp-16]\n\tmov r12,[rsp-24]\n\tmov r13,[rsp-32]\n\tmov r14,[rsp-40]\n\tmov r15,[rsp-48]\n\tmov rbx,[rsp-56]\n\n    ret 0\n;          :\n;          : \"m\" (ar)\n;          : \"memory\", \"%rax\", \"%rbx\", \"%rcx\", \"%rdx\", \"%rsi\", \"%rdi\",\n;            \"%r8\", \"%r9\", \"%r10\", \"%r11\", \"%r12\", \"%r13\", \"%r14\", \"%r15\"\n;    );\n\ninffas8664fnc \tENDP\n;_TEXT\tENDS\nEND\n"
  },
  {
    "path": "external/zlib/contrib/masmx64/readme.txt",
    "content": "Summary\n-------\nThis directory contains ASM implementations of the functions\nlongest_match() and inflate_fast(), for 64 bits x86 (both AMD64 and Intel EM64t),\nfor use with Microsoft Macro Assembler (x64) for AMD64 and Microsoft C++ 64 bits.\n\ngvmat64.asm is written by Gilles Vollant (2005), by using Brian Raiter 686/32 bits\n   assembly optimized version from Jean-loup Gailly original longest_match function\n\ninffasx64.asm and inffas8664.c were written by Chris Anderson, by optimizing\n   original function from Mark Adler\n\nUse instructions\n----------------\nAssemble the .asm files using MASM and put the object files into the zlib source\ndirectory.  You can also get object files here:\n\n     http://www.winimage.com/zLibDll/zlib124_masm_obj.zip\n\ndefine ASMV and ASMINF in your project. Include inffas8664.c in your source tree,\nand inffasx64.obj and gvmat64.obj as object to link.\n\n\nBuild instructions\n------------------\nrun bld_64.bat with Microsoft Macro Assembler (x64) for AMD64 (ml64.exe)\n\nml64.exe is given with Visual Studio 2005, Windows 2003 server DDK\n\nYou can get Windows 2003 server DDK with ml64 and cl for AMD64 from\n  http://www.microsoft.com/whdc/devtools/ddk/default.mspx for low price)\n"
  },
  {
    "path": "external/zlib/contrib/masmx86/bld_ml32.bat",
    "content": "ml /coff /Zi /c /Flmatch686.lst match686.asm\nml /coff /Zi /c /Flinffas32.lst inffas32.asm\n"
  },
  {
    "path": "external/zlib/contrib/masmx86/inffas32.asm",
    "content": ";/* inffas32.asm is a hand tuned assembler version of inffast.c -- fast decoding\n; *\n; * inffas32.asm is derivated from inffas86.c, with translation of assembly code\n; *\n; * Copyright (C) 1995-2003 Mark Adler\n; * For conditions of distribution and use, see copyright notice in zlib.h\n; *\n; * Copyright (C) 2003 Chris Anderson <christop@charm.net>\n; * Please use the copyright conditions above.\n; *\n; * Mar-13-2003 -- Most of this is derived from inffast.S which is derived from\n; * the gcc -S output of zlib-1.2.0/inffast.c.  Zlib-1.2.0 is in beta release at\n; * the moment.  I have successfully compiled and tested this code with gcc2.96,\n; * gcc3.2, icc5.0, msvc6.0.  It is very close to the speed of inffast.S\n; * compiled with gcc -DNO_MMX, but inffast.S is still faster on the P3 with MMX\n; * enabled.  I will attempt to merge the MMX code into this version.  Newer\n; * versions of this and inffast.S can be found at\n; * http://www.eetbeetee.com/zlib/ and http://www.charm.net/~christop/zlib/\n; *\n; * 2005 : modification by Gilles Vollant\n; */\n; For Visual C++ 4.x and higher and ML 6.x and higher\n;   ml.exe is in directory \\MASM611C of Win95 DDK\n;   ml.exe is also distributed in http://www.masm32.com/masmdl.htm\n;    and in VC++2003 toolkit at http://msdn.microsoft.com/visualc/vctoolkit2003/\n;\n;\n;   compile with command line option\n;   ml  /coff /Zi /c /Flinffas32.lst inffas32.asm\n\n;   if you define NO_GZIP (see inflate.h), compile with\n;   ml  /coff /Zi /c /Flinffas32.lst /DNO_GUNZIP inffas32.asm\n\n\n; zlib122sup is 0 fort zlib 1.2.2.1 and lower\n; zlib122sup is 8 fort zlib 1.2.2.2 and more (with addition of dmax and head\n;        in inflate_state in inflate.h)\nzlib1222sup      equ    8\n\n\nIFDEF GUNZIP\n  INFLATE_MODE_TYPE    equ 11\n  INFLATE_MODE_BAD     equ 26\nELSE\n  IFNDEF NO_GUNZIP\n    INFLATE_MODE_TYPE    equ 11\n    INFLATE_MODE_BAD     equ 26\n  ELSE\n    INFLATE_MODE_TYPE    equ 3\n    INFLATE_MODE_BAD     equ 17\n  ENDIF\nENDIF\n\n\n; 75 \"inffast.S\"\n;FILE \"inffast.S\"\n\n;;;GLOBAL _inflate_fast\n\n;;;SECTION .text\n\n\n\n\t.586p\n\t.mmx\n\n\tname\tinflate_fast_x86\n\t.MODEL\tFLAT\n\n_DATA\t\t\tsegment\ninflate_fast_use_mmx:\n\tdd\t1\n\n\n_TEXT\t\t\tsegment\nPUBLIC _inflate_fast\n\nALIGN 4\n_inflate_fast:\n\tjmp inflate_fast_entry\n\n\n\nALIGN 4\n\tdb\t'Fast decoding Code from Chris Anderson'\n\tdb\t0\n\nALIGN 4\ninvalid_literal_length_code_msg:\n\tdb\t'invalid literal/length code'\n\tdb\t0\n\nALIGN 4\ninvalid_distance_code_msg:\n\tdb\t'invalid distance code'\n\tdb\t0\n\nALIGN 4\ninvalid_distance_too_far_msg:\n\tdb\t'invalid distance too far back'\n\tdb\t0\n\n\nALIGN 4\ninflate_fast_mask:\ndd\t0\ndd\t1\ndd\t3\ndd\t7\ndd\t15\ndd\t31\ndd\t63\ndd\t127\ndd\t255\ndd\t511\ndd\t1023\ndd\t2047\ndd\t4095\ndd\t8191\ndd\t16383\ndd\t32767\ndd\t65535\ndd\t131071\ndd\t262143\ndd\t524287\ndd\t1048575\ndd\t2097151\ndd\t4194303\ndd\t8388607\ndd\t16777215\ndd\t33554431\ndd\t67108863\ndd\t134217727\ndd\t268435455\ndd\t536870911\ndd\t1073741823\ndd\t2147483647\ndd\t4294967295\n\n\nmode_state\t equ\t0\t;/* state->mode\t*/\nwsize_state\t equ\t(32+zlib1222sup)\t;/* state->wsize */\nwrite_state\t equ\t(36+4+zlib1222sup)\t;/* state->write */\nwindow_state\t equ\t(40+4+zlib1222sup)\t;/* state->window */\nhold_state\t equ\t(44+4+zlib1222sup)\t;/* state->hold\t*/\nbits_state\t equ\t(48+4+zlib1222sup)\t;/* state->bits\t*/\nlencode_state\t equ\t(64+4+zlib1222sup)\t;/* state->lencode */\ndistcode_state\t equ\t(68+4+zlib1222sup)\t;/* state->distcode */\nlenbits_state\t equ\t(72+4+zlib1222sup)\t;/* state->lenbits */\ndistbits_state\t equ\t(76+4+zlib1222sup)\t;/* state->distbits */\n\n\n;;SECTION .text\n; 205 \"inffast.S\"\n;GLOBAL\tinflate_fast_use_mmx\n\n;SECTION .data\n\n\n; GLOBAL inflate_fast_use_mmx:object\n;.size inflate_fast_use_mmx, 4\n; 226 \"inffast.S\"\n;SECTION .text\n\nALIGN 4\ninflate_fast_entry:\n\tpush  edi\n\tpush  esi\n\tpush  ebp\n\tpush  ebx\n\tpushfd\n\tsub  esp,64\n\tcld\n\n\n\n\n\tmov  esi, [esp+88]\n\tmov  edi, [esi+28]\n\n\n\n\n\n\n\n\tmov  edx, [esi+4]\n\tmov  eax, [esi+0]\n\n\tadd  edx,eax\n\tsub  edx,11\n\n\tmov  [esp+44],eax\n\tmov  [esp+20],edx\n\n\tmov  ebp, [esp+92]\n\tmov  ecx, [esi+16]\n\tmov  ebx, [esi+12]\n\n\tsub  ebp,ecx\n\tneg  ebp\n\tadd  ebp,ebx\n\n\tsub  ecx,257\n\tadd  ecx,ebx\n\n\tmov  [esp+60],ebx\n\tmov  [esp+40],ebp\n\tmov  [esp+16],ecx\n; 285 \"inffast.S\"\n\tmov  eax, [edi+lencode_state]\n\tmov  ecx, [edi+distcode_state]\n\n\tmov  [esp+8],eax\n\tmov  [esp+12],ecx\n\n\tmov  eax,1\n\tmov  ecx, [edi+lenbits_state]\n\tshl  eax,cl\n\tdec  eax\n\tmov  [esp+0],eax\n\n\tmov  eax,1\n\tmov  ecx, [edi+distbits_state]\n\tshl  eax,cl\n\tdec  eax\n\tmov  [esp+4],eax\n\n\tmov  eax, [edi+wsize_state]\n\tmov  ecx, [edi+write_state]\n\tmov  edx, [edi+window_state]\n\n\tmov  [esp+52],eax\n\tmov  [esp+48],ecx\n\tmov  [esp+56],edx\n\n\tmov  ebp, [edi+hold_state]\n\tmov  ebx, [edi+bits_state]\n; 321 \"inffast.S\"\n\tmov  esi, [esp+44]\n\tmov  ecx, [esp+20]\n\tcmp  ecx,esi\n\tja   L_align_long\n\n\tadd  ecx,11\n\tsub  ecx,esi\n\tmov  eax,12\n\tsub  eax,ecx\n\tlea  edi, [esp+28]\n\trep movsb\n\tmov  ecx,eax\n\txor  eax,eax\n\trep stosb\n\tlea  esi, [esp+28]\n\tmov  [esp+20],esi\n\tjmp  L_is_aligned\n\n\nL_align_long:\n\ttest  esi,3\n\tjz   L_is_aligned\n\txor  eax,eax\n\tmov  al, [esi]\n\tinc  esi\n\tmov  ecx,ebx\n\tadd  ebx,8\n\tshl  eax,cl\n\tor  ebp,eax\n\tjmp L_align_long\n\nL_is_aligned:\n\tmov  edi, [esp+60]\n; 366 \"inffast.S\"\nL_check_mmx:\n\tcmp  dword ptr [inflate_fast_use_mmx],2\n\tje   L_init_mmx\n\tja   L_do_loop\n\n\tpush  eax\n\tpush  ebx\n\tpush  ecx\n\tpush  edx\n\tpushfd\n\tmov  eax, [esp]\n\txor  dword ptr [esp],0200000h\n\n\n\n\n\tpopfd\n\tpushfd\n\tpop  edx\n\txor  edx,eax\n\tjz   L_dont_use_mmx\n\txor  eax,eax\n\tcpuid\n\tcmp  ebx,0756e6547h\n\tjne  L_dont_use_mmx\n\tcmp  ecx,06c65746eh\n\tjne  L_dont_use_mmx\n\tcmp  edx,049656e69h\n\tjne  L_dont_use_mmx\n\tmov  eax,1\n\tcpuid\n\tshr  eax,8\n\tand  eax,15\n\tcmp  eax,6\n\tjne  L_dont_use_mmx\n\ttest  edx,0800000h\n\tjnz  L_use_mmx\n\tjmp  L_dont_use_mmx\nL_use_mmx:\n\tmov  dword ptr [inflate_fast_use_mmx],2\n\tjmp  L_check_mmx_pop\nL_dont_use_mmx:\n\tmov  dword ptr [inflate_fast_use_mmx],3\nL_check_mmx_pop:\n\tpop  edx\n\tpop  ecx\n\tpop  ebx\n\tpop  eax\n\tjmp  L_check_mmx\n; 426 \"inffast.S\"\nALIGN 4\nL_do_loop:\n; 437 \"inffast.S\"\n\tcmp  bl,15\n\tja   L_get_length_code\n\n\txor  eax,eax\n\tlodsw\n\tmov  cl,bl\n\tadd  bl,16\n\tshl  eax,cl\n\tor  ebp,eax\n\nL_get_length_code:\n\tmov  edx, [esp+0]\n\tmov  ecx, [esp+8]\n\tand  edx,ebp\n\tmov  eax, [ecx+edx*4]\n\nL_dolen:\n\n\n\n\n\n\n\tmov  cl,ah\n\tsub  bl,ah\n\tshr  ebp,cl\n\n\n\n\n\n\n\ttest  al,al\n\tjnz   L_test_for_length_base\n\n\tshr  eax,16\n\tstosb\n\nL_while_test:\n\n\n\tcmp  [esp+16],edi\n\tjbe  L_break_loop\n\n\tcmp  [esp+20],esi\n\tja   L_do_loop\n\tjmp  L_break_loop\n\nL_test_for_length_base:\n; 502 \"inffast.S\"\n\tmov  edx,eax\n\tshr  edx,16\n\tmov  cl,al\n\n\ttest  al,16\n\tjz   L_test_for_second_level_length\n\tand  cl,15\n\tjz   L_save_len\n\tcmp  bl,cl\n\tjae  L_add_bits_to_len\n\n\tmov  ch,cl\n\txor  eax,eax\n\tlodsw\n\tmov  cl,bl\n\tadd  bl,16\n\tshl  eax,cl\n\tor  ebp,eax\n\tmov  cl,ch\n\nL_add_bits_to_len:\n\tmov  eax,1\n\tshl  eax,cl\n\tdec  eax\n\tsub  bl,cl\n\tand  eax,ebp\n\tshr  ebp,cl\n\tadd  edx,eax\n\nL_save_len:\n\tmov  [esp+24],edx\n\n\nL_decode_distance:\n; 549 \"inffast.S\"\n\tcmp  bl,15\n\tja   L_get_distance_code\n\n\txor  eax,eax\n\tlodsw\n\tmov  cl,bl\n\tadd  bl,16\n\tshl  eax,cl\n\tor  ebp,eax\n\nL_get_distance_code:\n\tmov  edx, [esp+4]\n\tmov  ecx, [esp+12]\n\tand  edx,ebp\n\tmov  eax, [ecx+edx*4]\n\n\nL_dodist:\n\tmov  edx,eax\n\tshr  edx,16\n\tmov  cl,ah\n\tsub  bl,ah\n\tshr  ebp,cl\n; 584 \"inffast.S\"\n\tmov  cl,al\n\n\ttest  al,16\n\tjz  L_test_for_second_level_dist\n\tand  cl,15\n\tjz  L_check_dist_one\n\tcmp  bl,cl\n\tjae  L_add_bits_to_dist\n\n\tmov  ch,cl\n\txor  eax,eax\n\tlodsw\n\tmov  cl,bl\n\tadd  bl,16\n\tshl  eax,cl\n\tor  ebp,eax\n\tmov  cl,ch\n\nL_add_bits_to_dist:\n\tmov  eax,1\n\tshl  eax,cl\n\tdec  eax\n\tsub  bl,cl\n\tand  eax,ebp\n\tshr  ebp,cl\n\tadd  edx,eax\n\tjmp  L_check_window\n\nL_check_window:\n; 625 \"inffast.S\"\n\tmov  [esp+44],esi\n\tmov  eax,edi\n\tsub  eax, [esp+40]\n\n\tcmp  eax,edx\n\tjb   L_clip_window\n\n\tmov  ecx, [esp+24]\n\tmov  esi,edi\n\tsub  esi,edx\n\n\tsub  ecx,3\n\tmov  al, [esi]\n\tmov  [edi],al\n\tmov  al, [esi+1]\n\tmov  dl, [esi+2]\n\tadd  esi,3\n\tmov  [edi+1],al\n\tmov  [edi+2],dl\n\tadd  edi,3\n\trep movsb\n\n\tmov  esi, [esp+44]\n\tjmp  L_while_test\n\nALIGN 4\nL_check_dist_one:\n\tcmp  edx,1\n\tjne  L_check_window\n\tcmp  [esp+40],edi\n\tje  L_check_window\n\n\tdec  edi\n\tmov  ecx, [esp+24]\n\tmov  al, [edi]\n\tsub  ecx,3\n\n\tmov  [edi+1],al\n\tmov  [edi+2],al\n\tmov  [edi+3],al\n\tadd  edi,4\n\trep stosb\n\n\tjmp  L_while_test\n\nALIGN 4\nL_test_for_second_level_length:\n\n\n\n\n\ttest  al,64\n\tjnz   L_test_for_end_of_block\n\n\tmov  eax,1\n\tshl  eax,cl\n\tdec  eax\n\tand  eax,ebp\n\tadd  eax,edx\n\tmov  edx, [esp+8]\n\tmov  eax, [edx+eax*4]\n\tjmp  L_dolen\n\nALIGN 4\nL_test_for_second_level_dist:\n\n\n\n\n\ttest  al,64\n\tjnz   L_invalid_distance_code\n\n\tmov  eax,1\n\tshl  eax,cl\n\tdec  eax\n\tand  eax,ebp\n\tadd  eax,edx\n\tmov  edx, [esp+12]\n\tmov  eax, [edx+eax*4]\n\tjmp  L_dodist\n\nALIGN 4\nL_clip_window:\n; 721 \"inffast.S\"\n\tmov  ecx,eax\n\tmov  eax, [esp+52]\n\tneg  ecx\n\tmov  esi, [esp+56]\n\n\tcmp  eax,edx\n\tjb   L_invalid_distance_too_far\n\n\tadd  ecx,edx\n\tcmp  dword ptr [esp+48],0\n\tjne  L_wrap_around_window\n\n\tsub  eax,ecx\n\tadd  esi,eax\n; 749 \"inffast.S\"\n\tmov  eax, [esp+24]\n\tcmp  eax,ecx\n\tjbe  L_do_copy1\n\n\tsub  eax,ecx\n\trep movsb\n\tmov  esi,edi\n\tsub  esi,edx\n\tjmp  L_do_copy1\n\n\tcmp  eax,ecx\n\tjbe  L_do_copy1\n\n\tsub  eax,ecx\n\trep movsb\n\tmov  esi,edi\n\tsub  esi,edx\n\tjmp  L_do_copy1\n\nL_wrap_around_window:\n; 793 \"inffast.S\"\n\tmov  eax, [esp+48]\n\tcmp  ecx,eax\n\tjbe  L_contiguous_in_window\n\n\tadd  esi, [esp+52]\n\tadd  esi,eax\n\tsub  esi,ecx\n\tsub  ecx,eax\n\n\n\tmov  eax, [esp+24]\n\tcmp  eax,ecx\n\tjbe  L_do_copy1\n\n\tsub  eax,ecx\n\trep movsb\n\tmov  esi, [esp+56]\n\tmov  ecx, [esp+48]\n\tcmp  eax,ecx\n\tjbe  L_do_copy1\n\n\tsub  eax,ecx\n\trep movsb\n\tmov  esi,edi\n\tsub  esi,edx\n\tjmp  L_do_copy1\n\nL_contiguous_in_window:\n; 836 \"inffast.S\"\n\tadd  esi,eax\n\tsub  esi,ecx\n\n\n\tmov  eax, [esp+24]\n\tcmp  eax,ecx\n\tjbe  L_do_copy1\n\n\tsub  eax,ecx\n\trep movsb\n\tmov  esi,edi\n\tsub  esi,edx\n\nL_do_copy1:\n; 862 \"inffast.S\"\n\tmov  ecx,eax\n\trep movsb\n\n\tmov  esi, [esp+44]\n\tjmp  L_while_test\n; 878 \"inffast.S\"\nALIGN 4\nL_init_mmx:\n\temms\n\n\n\n\n\n\tmovd mm0,ebp\n\tmov  ebp,ebx\n; 896 \"inffast.S\"\n\tmovd mm4,dword ptr [esp+0]\n\tmovq mm3,mm4\n\tmovd mm5,dword ptr [esp+4]\n\tmovq mm2,mm5\n\tpxor mm1,mm1\n\tmov  ebx, [esp+8]\n\tjmp  L_do_loop_mmx\n\nALIGN 4\nL_do_loop_mmx:\n\tpsrlq mm0,mm1\n\n\tcmp  ebp,32\n\tja  L_get_length_code_mmx\n\n\tmovd mm6,ebp\n\tmovd mm7,dword ptr [esi]\n\tadd  esi,4\n\tpsllq mm7,mm6\n\tadd  ebp,32\n\tpor mm0,mm7\n\nL_get_length_code_mmx:\n\tpand mm4,mm0\n\tmovd eax,mm4\n\tmovq mm4,mm3\n\tmov  eax, [ebx+eax*4]\n\nL_dolen_mmx:\n\tmovzx  ecx,ah\n\tmovd mm1,ecx\n\tsub  ebp,ecx\n\n\ttest  al,al\n\tjnz L_test_for_length_base_mmx\n\n\tshr  eax,16\n\tstosb\n\nL_while_test_mmx:\n\n\n\tcmp  [esp+16],edi\n\tjbe L_break_loop\n\n\tcmp  [esp+20],esi\n\tja L_do_loop_mmx\n\tjmp L_break_loop\n\nL_test_for_length_base_mmx:\n\n\tmov  edx,eax\n\tshr  edx,16\n\n\ttest  al,16\n\tjz  L_test_for_second_level_length_mmx\n\tand  eax,15\n\tjz L_decode_distance_mmx\n\n\tpsrlq mm0,mm1\n\tmovd mm1,eax\n\tmovd ecx,mm0\n\tsub  ebp,eax\n\tand  ecx, [inflate_fast_mask+eax*4]\n\tadd  edx,ecx\n\nL_decode_distance_mmx:\n\tpsrlq mm0,mm1\n\n\tcmp  ebp,32\n\tja L_get_dist_code_mmx\n\n\tmovd mm6,ebp\n\tmovd mm7,dword ptr [esi]\n\tadd  esi,4\n\tpsllq mm7,mm6\n\tadd  ebp,32\n\tpor mm0,mm7\n\nL_get_dist_code_mmx:\n\tmov  ebx, [esp+12]\n\tpand mm5,mm0\n\tmovd eax,mm5\n\tmovq mm5,mm2\n\tmov  eax, [ebx+eax*4]\n\nL_dodist_mmx:\n\n\tmovzx  ecx,ah\n\tmov  ebx,eax\n\tshr  ebx,16\n\tsub  ebp,ecx\n\tmovd mm1,ecx\n\n\ttest  al,16\n\tjz L_test_for_second_level_dist_mmx\n\tand  eax,15\n\tjz L_check_dist_one_mmx\n\nL_add_bits_to_dist_mmx:\n\tpsrlq mm0,mm1\n\tmovd mm1,eax\n\tmovd ecx,mm0\n\tsub  ebp,eax\n\tand  ecx, [inflate_fast_mask+eax*4]\n\tadd  ebx,ecx\n\nL_check_window_mmx:\n\tmov  [esp+44],esi\n\tmov  eax,edi\n\tsub  eax, [esp+40]\n\n\tcmp  eax,ebx\n\tjb L_clip_window_mmx\n\n\tmov  ecx,edx\n\tmov  esi,edi\n\tsub  esi,ebx\n\n\tsub  ecx,3\n\tmov  al, [esi]\n\tmov  [edi],al\n\tmov  al, [esi+1]\n\tmov  dl, [esi+2]\n\tadd  esi,3\n\tmov  [edi+1],al\n\tmov  [edi+2],dl\n\tadd  edi,3\n\trep movsb\n\n\tmov  esi, [esp+44]\n\tmov  ebx, [esp+8]\n\tjmp  L_while_test_mmx\n\nALIGN 4\nL_check_dist_one_mmx:\n\tcmp  ebx,1\n\tjne  L_check_window_mmx\n\tcmp  [esp+40],edi\n\tje   L_check_window_mmx\n\n\tdec  edi\n\tmov  ecx,edx\n\tmov  al, [edi]\n\tsub  ecx,3\n\n\tmov  [edi+1],al\n\tmov  [edi+2],al\n\tmov  [edi+3],al\n\tadd  edi,4\n\trep stosb\n\n\tmov  ebx, [esp+8]\n\tjmp  L_while_test_mmx\n\nALIGN 4\nL_test_for_second_level_length_mmx:\n\ttest  al,64\n\tjnz L_test_for_end_of_block\n\n\tand  eax,15\n\tpsrlq mm0,mm1\n\tmovd ecx,mm0\n\tand  ecx, [inflate_fast_mask+eax*4]\n\tadd  ecx,edx\n\tmov  eax, [ebx+ecx*4]\n\tjmp L_dolen_mmx\n\nALIGN 4\nL_test_for_second_level_dist_mmx:\n\ttest  al,64\n\tjnz L_invalid_distance_code\n\n\tand  eax,15\n\tpsrlq mm0,mm1\n\tmovd ecx,mm0\n\tand  ecx, [inflate_fast_mask+eax*4]\n\tmov  eax, [esp+12]\n\tadd  ecx,ebx\n\tmov  eax, [eax+ecx*4]\n\tjmp  L_dodist_mmx\n\nALIGN 4\nL_clip_window_mmx:\n\n\tmov  ecx,eax\n\tmov  eax, [esp+52]\n\tneg  ecx\n\tmov  esi, [esp+56]\n\n\tcmp  eax,ebx\n\tjb  L_invalid_distance_too_far\n\n\tadd  ecx,ebx\n\tcmp  dword ptr [esp+48],0\n\tjne  L_wrap_around_window_mmx\n\n\tsub  eax,ecx\n\tadd  esi,eax\n\n\tcmp  edx,ecx\n\tjbe  L_do_copy1_mmx\n\n\tsub  edx,ecx\n\trep movsb\n\tmov  esi,edi\n\tsub  esi,ebx\n\tjmp  L_do_copy1_mmx\n\n\tcmp  edx,ecx\n\tjbe  L_do_copy1_mmx\n\n\tsub  edx,ecx\n\trep movsb\n\tmov  esi,edi\n\tsub  esi,ebx\n\tjmp  L_do_copy1_mmx\n\nL_wrap_around_window_mmx:\n\n\tmov  eax, [esp+48]\n\tcmp  ecx,eax\n\tjbe  L_contiguous_in_window_mmx\n\n\tadd  esi, [esp+52]\n\tadd  esi,eax\n\tsub  esi,ecx\n\tsub  ecx,eax\n\n\n\tcmp  edx,ecx\n\tjbe  L_do_copy1_mmx\n\n\tsub  edx,ecx\n\trep movsb\n\tmov  esi, [esp+56]\n\tmov  ecx, [esp+48]\n\tcmp  edx,ecx\n\tjbe  L_do_copy1_mmx\n\n\tsub  edx,ecx\n\trep movsb\n\tmov  esi,edi\n\tsub  esi,ebx\n\tjmp  L_do_copy1_mmx\n\nL_contiguous_in_window_mmx:\n\n\tadd  esi,eax\n\tsub  esi,ecx\n\n\n\tcmp  edx,ecx\n\tjbe  L_do_copy1_mmx\n\n\tsub  edx,ecx\n\trep movsb\n\tmov  esi,edi\n\tsub  esi,ebx\n\nL_do_copy1_mmx:\n\n\n\tmov  ecx,edx\n\trep movsb\n\n\tmov  esi, [esp+44]\n\tmov  ebx, [esp+8]\n\tjmp  L_while_test_mmx\n; 1174 \"inffast.S\"\nL_invalid_distance_code:\n\n\n\n\n\n\tmov  ecx, invalid_distance_code_msg\n\tmov  edx,INFLATE_MODE_BAD\n\tjmp  L_update_stream_state\n\nL_test_for_end_of_block:\n\n\n\n\n\n\ttest  al,32\n\tjz  L_invalid_literal_length_code\n\n\tmov  ecx,0\n\tmov  edx,INFLATE_MODE_TYPE\n\tjmp  L_update_stream_state\n\nL_invalid_literal_length_code:\n\n\n\n\n\n\tmov  ecx, invalid_literal_length_code_msg\n\tmov  edx,INFLATE_MODE_BAD\n\tjmp  L_update_stream_state\n\nL_invalid_distance_too_far:\n\n\n\n\tmov  esi, [esp+44]\n\tmov  ecx, invalid_distance_too_far_msg\n\tmov  edx,INFLATE_MODE_BAD\n\tjmp  L_update_stream_state\n\nL_update_stream_state:\n\n\tmov  eax, [esp+88]\n\ttest  ecx,ecx\n\tjz  L_skip_msg\n\tmov  [eax+24],ecx\nL_skip_msg:\n\tmov  eax, [eax+28]\n\tmov  [eax+mode_state],edx\n\tjmp  L_break_loop\n\nALIGN 4\nL_break_loop:\n; 1243 \"inffast.S\"\n\tcmp  dword ptr [inflate_fast_use_mmx],2\n\tjne  L_update_next_in\n\n\n\n\tmov  ebx,ebp\n\nL_update_next_in:\n; 1266 \"inffast.S\"\n\tmov  eax, [esp+88]\n\tmov  ecx,ebx\n\tmov  edx, [eax+28]\n\tshr  ecx,3\n\tsub  esi,ecx\n\tshl  ecx,3\n\tsub  ebx,ecx\n\tmov  [eax+12],edi\n\tmov  [edx+bits_state],ebx\n\tmov  ecx,ebx\n\n\tlea  ebx, [esp+28]\n\tcmp  [esp+20],ebx\n\tjne  L_buf_not_used\n\n\tsub  esi,ebx\n\tmov  ebx, [eax+0]\n\tmov  [esp+20],ebx\n\tadd  esi,ebx\n\tmov  ebx, [eax+4]\n\tsub  ebx,11\n\tadd  [esp+20],ebx\n\nL_buf_not_used:\n\tmov  [eax+0],esi\n\n\tmov  ebx,1\n\tshl  ebx,cl\n\tdec  ebx\n\n\n\n\n\n\tcmp  dword ptr [inflate_fast_use_mmx],2\n\tjne  L_update_hold\n\n\n\n\tpsrlq mm0,mm1\n\tmovd ebp,mm0\n\n\temms\n\nL_update_hold:\n\n\n\n\tand  ebp,ebx\n\tmov  [edx+hold_state],ebp\n\n\n\n\n\tmov  ebx, [esp+20]\n\tcmp  ebx,esi\n\tjbe  L_last_is_smaller\n\n\tsub  ebx,esi\n\tadd  ebx,11\n\tmov  [eax+4],ebx\n\tjmp  L_fixup_out\nL_last_is_smaller:\n\tsub  esi,ebx\n\tneg  esi\n\tadd  esi,11\n\tmov  [eax+4],esi\n\n\n\n\nL_fixup_out:\n\n\tmov  ebx, [esp+16]\n\tcmp  ebx,edi\n\tjbe  L_end_is_smaller\n\n\tsub  ebx,edi\n\tadd  ebx,257\n\tmov  [eax+16],ebx\n\tjmp  L_done\nL_end_is_smaller:\n\tsub  edi,ebx\n\tneg  edi\n\tadd  edi,257\n\tmov  [eax+16],edi\n\n\n\n\n\nL_done:\n\tadd  esp,64\n\tpopfd\n\tpop  ebx\n\tpop  ebp\n\tpop  esi\n\tpop  edi\n\tret\n\n_TEXT\tends\nend\n"
  },
  {
    "path": "external/zlib/contrib/masmx86/match686.asm",
    "content": "; match686.asm -- Asm portion of the optimized longest_match for 32 bits x86\n; Copyright (C) 1995-1996 Jean-loup Gailly, Brian Raiter and Gilles Vollant.\n; File written by Gilles Vollant, by converting match686.S from Brian Raiter\n; for MASM. This is as assembly version of longest_match\n;  from Jean-loup Gailly in deflate.c\n;\n;         http://www.zlib.net\n;         http://www.winimage.com/zLibDll\n;         http://www.muppetlabs.com/~breadbox/software/assembly.html\n;\n; For Visual C++ 4.x and higher and ML 6.x and higher\n;   ml.exe is distributed in\n;  http://www.microsoft.com/downloads/details.aspx?FamilyID=7a1c9da0-0510-44a2-b042-7ef370530c64\n;\n; this file contain two implementation of longest_match\n;\n;  this longest_match was written by Brian raiter (1998), optimized for Pentium Pro\n;   (and the faster known version of match_init on modern Core 2 Duo and AMD Phenom)\n;\n;  for using an assembly version of longest_match, you need define ASMV in project\n;\n;    compile the asm file running\n;           ml /coff /Zi /c /Flmatch686.lst match686.asm\n;    and do not include match686.obj in your project\n;\n; note: contrib of zLib 1.2.3 and earlier contained both a deprecated version for\n;  Pentium (prior Pentium Pro) and this version for Pentium Pro and modern processor\n;  with autoselect (with cpu detection code)\n;  if you want support the old pentium optimization, you can still use these version\n;\n; this file is not optimized for old pentium, but it compatible with all x86 32 bits\n; processor (starting 80386)\n;\n;\n; see below : zlib1222add must be adjuster if you use a zlib version < 1.2.2.2\n\n;uInt longest_match(s, cur_match)\n;    deflate_state *s;\n;    IPos cur_match;                             /* current match */\n\n    NbStack         equ     76\n    cur_match       equ     dword ptr[esp+NbStack-0]\n    str_s           equ     dword ptr[esp+NbStack-4]\n; 5 dword on top (ret,ebp,esi,edi,ebx)\n    adrret          equ     dword ptr[esp+NbStack-8]\n    pushebp         equ     dword ptr[esp+NbStack-12]\n    pushedi         equ     dword ptr[esp+NbStack-16]\n    pushesi         equ     dword ptr[esp+NbStack-20]\n    pushebx         equ     dword ptr[esp+NbStack-24]\n\n    chain_length    equ     dword ptr [esp+NbStack-28]\n    limit           equ     dword ptr [esp+NbStack-32]\n    best_len        equ     dword ptr [esp+NbStack-36]\n    window          equ     dword ptr [esp+NbStack-40]\n    prev            equ     dword ptr [esp+NbStack-44]\n    scan_start      equ      word ptr [esp+NbStack-48]\n    wmask           equ     dword ptr [esp+NbStack-52]\n    match_start_ptr equ     dword ptr [esp+NbStack-56]\n    nice_match      equ     dword ptr [esp+NbStack-60]\n    scan            equ     dword ptr [esp+NbStack-64]\n\n    windowlen       equ     dword ptr [esp+NbStack-68]\n    match_start     equ     dword ptr [esp+NbStack-72]\n    strend          equ     dword ptr [esp+NbStack-76]\n    NbStackAdd      equ     (NbStack-24)\n\n    .386p\n\n    name    gvmatch\n    .MODEL  FLAT\n\n\n\n;  all the +zlib1222add offsets are due to the addition of fields\n;  in zlib in the deflate_state structure since the asm code was first written\n;  (if you compile with zlib 1.0.4 or older, use \"zlib1222add equ (-4)\").\n;  (if you compile with zlib between 1.0.5 and 1.2.2.1, use \"zlib1222add equ 0\").\n;  if you compile with zlib 1.2.2.2 or later , use \"zlib1222add equ 8\").\n\n    zlib1222add         equ     8\n\n;  Note : these value are good with a 8 bytes boundary pack structure\n    dep_chain_length    equ     74h+zlib1222add\n    dep_window          equ     30h+zlib1222add\n    dep_strstart        equ     64h+zlib1222add\n    dep_prev_length     equ     70h+zlib1222add\n    dep_nice_match      equ     88h+zlib1222add\n    dep_w_size          equ     24h+zlib1222add\n    dep_prev            equ     38h+zlib1222add\n    dep_w_mask          equ     2ch+zlib1222add\n    dep_good_match      equ     84h+zlib1222add\n    dep_match_start     equ     68h+zlib1222add\n    dep_lookahead       equ     6ch+zlib1222add\n\n\n_TEXT                   segment\n\nIFDEF NOUNDERLINE\n            public  longest_match\n            public  match_init\nELSE\n            public  _longest_match\n            public  _match_init\nENDIF\n\n    MAX_MATCH           equ     258\n    MIN_MATCH           equ     3\n    MIN_LOOKAHEAD       equ     (MAX_MATCH+MIN_MATCH+1)\n\n\n\nMAX_MATCH       equ     258\nMIN_MATCH       equ     3\nMIN_LOOKAHEAD   equ     (MAX_MATCH + MIN_MATCH + 1)\nMAX_MATCH_8_     equ     ((MAX_MATCH + 7) AND 0FFF0h)\n\n\n;;; stack frame offsets\n\nchainlenwmask   equ  esp + 0    ; high word: current chain len\n                    ; low word: s->wmask\nwindow      equ  esp + 4    ; local copy of s->window\nwindowbestlen   equ  esp + 8    ; s->window + bestlen\nscanstart   equ  esp + 16   ; first two bytes of string\nscanend     equ  esp + 12   ; last two bytes of string\nscanalign   equ  esp + 20   ; dword-misalignment of string\nnicematch   equ  esp + 24   ; a good enough match size\nbestlen     equ  esp + 28   ; size of best match so far\nscan        equ  esp + 32   ; ptr to string wanting match\n\nLocalVarsSize   equ 36\n;   saved ebx   byte esp + 36\n;   saved edi   byte esp + 40\n;   saved esi   byte esp + 44\n;   saved ebp   byte esp + 48\n;   return address  byte esp + 52\ndeflatestate    equ  esp + 56   ; the function arguments\ncurmatch    equ  esp + 60\n\n;;; Offsets for fields in the deflate_state structure. These numbers\n;;; are calculated from the definition of deflate_state, with the\n;;; assumption that the compiler will dword-align the fields. (Thus,\n;;; changing the definition of deflate_state could easily cause this\n;;; program to crash horribly, without so much as a warning at\n;;; compile time. Sigh.)\n\ndsWSize     equ 36+zlib1222add\ndsWMask     equ 44+zlib1222add\ndsWindow    equ 48+zlib1222add\ndsPrev      equ 56+zlib1222add\ndsMatchLen  equ 88+zlib1222add\ndsPrevMatch equ 92+zlib1222add\ndsStrStart  equ 100+zlib1222add\ndsMatchStart    equ 104+zlib1222add\ndsLookahead equ 108+zlib1222add\ndsPrevLen   equ 112+zlib1222add\ndsMaxChainLen   equ 116+zlib1222add\ndsGoodMatch equ 132+zlib1222add\ndsNiceMatch equ 136+zlib1222add\n\n\n;;; match686.asm -- Pentium-Pro-optimized version of longest_match()\n;;; Written for zlib 1.1.2\n;;; Copyright (C) 1998 Brian Raiter <breadbox@muppetlabs.com>\n;;; You can look at http://www.muppetlabs.com/~breadbox/software/assembly.html\n;;;\n;;\n;;  This software is provided 'as-is', without any express or implied\n;;  warranty.  In no event will the authors be held liable for any damages\n;;  arising from the use of this software.\n;;\n;;  Permission is granted to anyone to use this software for any purpose,\n;;  including commercial applications, and to alter it and redistribute it\n;;  freely, subject to the following restrictions:\n;;\n;;  1. The origin of this software must not be misrepresented; you must not\n;;     claim that you wrote the original software. If you use this software\n;;     in a product, an acknowledgment in the product documentation would be\n;;     appreciated but is not required.\n;;  2. Altered source versions must be plainly marked as such, and must not be\n;;     misrepresented as being the original software\n;;  3. This notice may not be removed or altered from any source distribution.\n;;\n\n;GLOBAL _longest_match, _match_init\n\n\n;SECTION    .text\n\n;;; uInt longest_match(deflate_state *deflatestate, IPos curmatch)\n\n;_longest_match:\n    IFDEF NOUNDERLINE\n    longest_match       proc near\n    ELSE\n    _longest_match      proc near\n    ENDIF\n\n;;; Save registers that the compiler may be using, and adjust esp to\n;;; make room for our stack frame.\n\n        push    ebp\n        push    edi\n        push    esi\n        push    ebx\n        sub esp, LocalVarsSize\n\n;;; Retrieve the function arguments. ecx will hold cur_match\n;;; throughout the entire function. edx will hold the pointer to the\n;;; deflate_state structure during the function's setup (before\n;;; entering the main loop.\n\n        mov edx, [deflatestate]\n        mov ecx, [curmatch]\n\n;;; uInt wmask = s->w_mask;\n;;; unsigned chain_length = s->max_chain_length;\n;;; if (s->prev_length >= s->good_match) {\n;;;     chain_length >>= 2;\n;;; }\n\n        mov eax, [edx + dsPrevLen]\n        mov ebx, [edx + dsGoodMatch]\n        cmp eax, ebx\n        mov eax, [edx + dsWMask]\n        mov ebx, [edx + dsMaxChainLen]\n        jl  LastMatchGood\n        shr ebx, 2\nLastMatchGood:\n\n;;; chainlen is decremented once beforehand so that the function can\n;;; use the sign flag instead of the zero flag for the exit test.\n;;; It is then shifted into the high word, to make room for the wmask\n;;; value, which it will always accompany.\n\n        dec ebx\n        shl ebx, 16\n        or  ebx, eax\n        mov [chainlenwmask], ebx\n\n;;; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;\n\n        mov eax, [edx + dsNiceMatch]\n        mov ebx, [edx + dsLookahead]\n        cmp ebx, eax\n        jl  LookaheadLess\n        mov ebx, eax\nLookaheadLess:  mov [nicematch], ebx\n\n;;; register Bytef *scan = s->window + s->strstart;\n\n        mov esi, [edx + dsWindow]\n        mov [window], esi\n        mov ebp, [edx + dsStrStart]\n        lea edi, [esi + ebp]\n        mov [scan], edi\n\n;;; Determine how many bytes the scan ptr is off from being\n;;; dword-aligned.\n\n        mov eax, edi\n        neg eax\n        and eax, 3\n        mov [scanalign], eax\n\n;;; IPos limit = s->strstart > (IPos)MAX_DIST(s) ?\n;;;     s->strstart - (IPos)MAX_DIST(s) : NIL;\n\n        mov eax, [edx + dsWSize]\n        sub eax, MIN_LOOKAHEAD\n        sub ebp, eax\n        jg  LimitPositive\n        xor ebp, ebp\nLimitPositive:\n\n;;; int best_len = s->prev_length;\n\n        mov eax, [edx + dsPrevLen]\n        mov [bestlen], eax\n\n;;; Store the sum of s->window + best_len in esi locally, and in esi.\n\n        add esi, eax\n        mov [windowbestlen], esi\n\n;;; register ush scan_start = *(ushf*)scan;\n;;; register ush scan_end   = *(ushf*)(scan+best_len-1);\n;;; Posf *prev = s->prev;\n\n        movzx   ebx, word ptr [edi]\n        mov [scanstart], ebx\n        movzx   ebx, word ptr [edi + eax - 1]\n        mov [scanend], ebx\n        mov edi, [edx + dsPrev]\n\n;;; Jump into the main loop.\n\n        mov edx, [chainlenwmask]\n        jmp short LoopEntry\n\nalign 4\n\n;;; do {\n;;;     match = s->window + cur_match;\n;;;     if (*(ushf*)(match+best_len-1) != scan_end ||\n;;;         *(ushf*)match != scan_start) continue;\n;;;     [...]\n;;; } while ((cur_match = prev[cur_match & wmask]) > limit\n;;;          && --chain_length != 0);\n;;;\n;;; Here is the inner loop of the function. The function will spend the\n;;; majority of its time in this loop, and majority of that time will\n;;; be spent in the first ten instructions.\n;;;\n;;; Within this loop:\n;;; ebx = scanend\n;;; ecx = curmatch\n;;; edx = chainlenwmask - i.e., ((chainlen << 16) | wmask)\n;;; esi = windowbestlen - i.e., (window + bestlen)\n;;; edi = prev\n;;; ebp = limit\n\nLookupLoop:\n        and ecx, edx\n        movzx   ecx, word ptr [edi + ecx*2]\n        cmp ecx, ebp\n        jbe LeaveNow\n        sub edx, 00010000h\n        js  LeaveNow\nLoopEntry:  movzx   eax, word ptr [esi + ecx - 1]\n        cmp eax, ebx\n        jnz LookupLoop\n        mov eax, [window]\n        movzx   eax, word ptr [eax + ecx]\n        cmp eax, [scanstart]\n        jnz LookupLoop\n\n;;; Store the current value of chainlen.\n\n        mov [chainlenwmask], edx\n\n;;; Point edi to the string under scrutiny, and esi to the string we\n;;; are hoping to match it up with. In actuality, esi and edi are\n;;; both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and edx is\n;;; initialized to -(MAX_MATCH_8 - scanalign).\n\n        mov esi, [window]\n        mov edi, [scan]\n        add esi, ecx\n        mov eax, [scanalign]\n        mov edx, 0fffffef8h; -(MAX_MATCH_8)\n        lea edi, [edi + eax + 0108h] ;MAX_MATCH_8]\n        lea esi, [esi + eax + 0108h] ;MAX_MATCH_8]\n\n;;; Test the strings for equality, 8 bytes at a time. At the end,\n;;; adjust edx so that it is offset to the exact byte that mismatched.\n;;;\n;;; We already know at this point that the first three bytes of the\n;;; strings match each other, and they can be safely passed over before\n;;; starting the compare loop. So what this code does is skip over 0-3\n;;; bytes, as much as necessary in order to dword-align the edi\n;;; pointer. (esi will still be misaligned three times out of four.)\n;;;\n;;; It should be confessed that this loop usually does not represent\n;;; much of the total running time. Replacing it with a more\n;;; straightforward \"rep cmpsb\" would not drastically degrade\n;;; performance.\n\nLoopCmps:\n        mov eax, [esi + edx]\n        xor eax, [edi + edx]\n        jnz LeaveLoopCmps\n        mov eax, [esi + edx + 4]\n        xor eax, [edi + edx + 4]\n        jnz LeaveLoopCmps4\n        add edx, 8\n        jnz LoopCmps\n        jmp short LenMaximum\nLeaveLoopCmps4: add edx, 4\nLeaveLoopCmps:  test    eax, 0000FFFFh\n        jnz LenLower\n        add edx,  2\n        shr eax, 16\nLenLower:   sub al, 1\n        adc edx, 0\n\n;;; Calculate the length of the match. If it is longer than MAX_MATCH,\n;;; then automatically accept it as the best possible match and leave.\n\n        lea eax, [edi + edx]\n        mov edi, [scan]\n        sub eax, edi\n        cmp eax, MAX_MATCH\n        jge LenMaximum\n\n;;; If the length of the match is not longer than the best match we\n;;; have so far, then forget it and return to the lookup loop.\n\n        mov edx, [deflatestate]\n        mov ebx, [bestlen]\n        cmp eax, ebx\n        jg  LongerMatch\n        mov esi, [windowbestlen]\n        mov edi, [edx + dsPrev]\n        mov ebx, [scanend]\n        mov edx, [chainlenwmask]\n        jmp LookupLoop\n\n;;;         s->match_start = cur_match;\n;;;         best_len = len;\n;;;         if (len >= nice_match) break;\n;;;         scan_end = *(ushf*)(scan+best_len-1);\n\nLongerMatch:    mov ebx, [nicematch]\n        mov [bestlen], eax\n        mov [edx + dsMatchStart], ecx\n        cmp eax, ebx\n        jge LeaveNow\n        mov esi, [window]\n        add esi, eax\n        mov [windowbestlen], esi\n        movzx   ebx, word ptr [edi + eax - 1]\n        mov edi, [edx + dsPrev]\n        mov [scanend], ebx\n        mov edx, [chainlenwmask]\n        jmp LookupLoop\n\n;;; Accept the current string, with the maximum possible length.\n\nLenMaximum: mov edx, [deflatestate]\n        mov dword ptr [bestlen], MAX_MATCH\n        mov [edx + dsMatchStart], ecx\n\n;;; if ((uInt)best_len <= s->lookahead) return (uInt)best_len;\n;;; return s->lookahead;\n\nLeaveNow:\n        mov edx, [deflatestate]\n        mov ebx, [bestlen]\n        mov eax, [edx + dsLookahead]\n        cmp ebx, eax\n        jg  LookaheadRet\n        mov eax, ebx\nLookaheadRet:\n\n;;; Restore the stack and return from whence we came.\n\n        add esp, LocalVarsSize\n        pop ebx\n        pop esi\n        pop edi\n        pop ebp\n\n        ret\n; please don't remove this string !\n; Your can freely use match686 in any free or commercial app if you don't remove the string in the binary!\n    db     0dh,0ah,\"asm686 with masm, optimised assembly code from Brian Raiter, written 1998\",0dh,0ah\n\n\n    IFDEF NOUNDERLINE\n    longest_match       endp\n    ELSE\n    _longest_match      endp\n    ENDIF\n\n    IFDEF NOUNDERLINE\n    match_init      proc near\n                    ret\n    match_init      endp\n    ELSE\n    _match_init     proc near\n                    ret\n    _match_init     endp\n    ENDIF\n\n\n_TEXT   ends\nend\n"
  },
  {
    "path": "external/zlib/contrib/masmx86/readme.txt",
    "content": "\nSummary\n-------\nThis directory contains ASM implementations of the functions\nlongest_match() and inflate_fast().\n\n\nUse instructions\n----------------\nAssemble using MASM, and copy the object files into the zlib source\ndirectory, then run the appropriate makefile, as suggested below.  You can\ndonwload MASM from here:\n\n    http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=7a1c9da0-0510-44a2-b042-7ef370530c64\n\nYou can also get objects files here:\n\n    http://www.winimage.com/zLibDll/zlib124_masm_obj.zip\n\nBuild instructions\n------------------\n* With Microsoft C and MASM:\nnmake -f win32/Makefile.msc LOC=\"-DASMV -DASMINF\" OBJA=\"match686.obj inffas32.obj\"\n\n* With Borland C and TASM:\nmake -f win32/Makefile.bor LOCAL_ZLIB=\"-DASMV -DASMINF\" OBJA=\"match686.obj inffas32.obj\" OBJPA=\"+match686c.obj+match686.obj+inffas32.obj\"\n\n"
  },
  {
    "path": "external/zlib/contrib/minizip/Makefile",
    "content": "CC=cc\nCFLAGS=-O -I../..\n\nUNZ_OBJS = miniunz.o unzip.o ioapi.o ../../libz.a\nZIP_OBJS = minizip.o zip.o   ioapi.o ../../libz.a\n\n.c.o:\n\t$(CC) -c $(CFLAGS) $*.c\n\nall: miniunz minizip\n\nminiunz:  $(UNZ_OBJS)\n\t$(CC) $(CFLAGS) -o $@ $(UNZ_OBJS)\n\nminizip:  $(ZIP_OBJS)\n\t$(CC) $(CFLAGS) -o $@ $(ZIP_OBJS)\n\ntest:\tminiunz minizip\n\t./minizip test readme.txt\n\t./miniunz -l test.zip\n\tmv readme.txt readme.old\n\t./miniunz test.zip\n\nclean:\n\t/bin/rm -f *.o *~ minizip miniunz\n"
  },
  {
    "path": "external/zlib/contrib/minizip/MiniZip64_Changes.txt",
    "content": "\nMiniZip 1.1 was derrived from MiniZip at version 1.01f\n\nChange in 1.0 (Okt 2009)\n - **TODO - Add history**\n\n"
  },
  {
    "path": "external/zlib/contrib/minizip/MiniZip64_info.txt",
    "content": "MiniZip - Copyright (c) 1998-2010 - by Gilles Vollant - version 1.1 64 bits from Mathias Svensson\n\nIntroduction\n---------------------\nMiniZip 1.1 is built from MiniZip 1.0 by Gilles Vollant ( http://www.winimage.com/zLibDll/minizip.html )\n\nWhen adding ZIP64 support into minizip it would result into risk of breaking compatibility with minizip 1.0.\nAll possible work was done for compatibility.\n\n\nBackground\n---------------------\nWhen adding ZIP64 support Mathias Svensson found that Even Rouault have added ZIP64 \nsupport for unzip.c into minizip for a open source project called gdal ( http://www.gdal.org/ )\n\nThat was used as a starting point. And after that ZIP64 support was added to zip.c\nsome refactoring and code cleanup was also done.\n\n\nChanged from MiniZip 1.0 to MiniZip 1.1\n---------------------------------------\n* Added ZIP64 support for unzip ( by Even Rouault )\n* Added ZIP64 support for zip ( by Mathias Svensson )\n* Reverted some changed that Even Rouault did.\n* Bunch of patches received from Gulles Vollant that he received for MiniZip from various users.\n* Added unzip patch for BZIP Compression method (patch create by Daniel Borca)\n* Added BZIP Compress method for zip\n* Did some refactoring and code cleanup\n\n\nCredits\n\n Gilles Vollant    - Original MiniZip author\n Even Rouault      - ZIP64 unzip Support\n Daniel Borca      - BZip Compression method support in unzip\n Mathias Svensson  - ZIP64 zip support\n Mathias Svensson  - BZip Compression method support in zip\n\n Resources\n\n ZipLayout   http://result42.com/projects/ZipFileLayout\n             Command line tool for Windows that shows the layout and information of the headers in a zip archive.\n             Used when debugging and validating the creation of zip files using MiniZip64\n\n\n ZIP App Note  http://www.pkware.com/documents/casestudies/APPNOTE.TXT\n               Zip File specification\n\n\nNotes.\n * To be able to use BZip compression method in zip64.c or unzip64.c the BZIP2 lib is needed and HAVE_BZIP2 need to be defined.\n\nLicense\n----------------------------------------------------------\n   Condition of use and distribution are the same than zlib :\n\n  This software is provided 'as-is', without any express or implied\n  warranty.  In no event will the authors be held liable for any damages\n  arising from the use of this software.\n\n  Permission is granted to anyone to use this software for any purpose,\n  including commercial applications, and to alter it and redistribute it\n  freely, subject to the following restrictions:\n\n  1. The origin of this software must not be misrepresented; you must not\n     claim that you wrote the original software. If you use this software\n     in a product, an acknowledgment in the product documentation would be\n     appreciated but is not required.\n  2. Altered source versions must be plainly marked as such, and must not be\n     misrepresented as being the original software.\n  3. This notice may not be removed or altered from any source distribution.\n\n----------------------------------------------------------\n\n"
  },
  {
    "path": "external/zlib/contrib/minizip/crypt.h",
    "content": "/* crypt.h -- base code for crypt/uncrypt ZIPfile\n\n\n   Version 1.01e, February 12th, 2005\n\n   Copyright (C) 1998-2005 Gilles Vollant\n\n   This code is a modified version of crypting code in Infozip distribution\n\n   The encryption/decryption parts of this source code (as opposed to the\n   non-echoing password parts) were originally written in Europe.  The\n   whole source package can be freely distributed, including from the USA.\n   (Prior to January 2000, re-export from the US was a violation of US law.)\n\n   This encryption code is a direct transcription of the algorithm from\n   Roger Schlafly, described by Phil Katz in the file appnote.txt.  This\n   file (appnote.txt) is distributed with the PKZIP program (even in the\n   version without encryption capabilities).\n\n   If you don't need crypting in your application, just define symbols\n   NOCRYPT and NOUNCRYPT.\n\n   This code support the \"Traditional PKWARE Encryption\".\n\n   The new AES encryption added on Zip format by Winzip (see the page\n   http://www.winzip.com/aes_info.htm ) and PKWare PKZip 5.x Strong\n   Encryption is not supported.\n*/\n\n#define CRC32(c, b) ((*(pcrc_32_tab+(((int)(c) ^ (b)) & 0xff))) ^ ((c) >> 8))\n\n/***********************************************************************\n * Return the next byte in the pseudo-random sequence\n */\nstatic int decrypt_byte(unsigned long* pkeys, const unsigned long* pcrc_32_tab)\n{\n    unsigned temp;  /* POTENTIAL BUG:  temp*(temp^1) may overflow in an\n                     * unpredictable manner on 16-bit systems; not a problem\n                     * with any known compiler so far, though */\n\n    temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2;\n    return (int)(((temp * (temp ^ 1)) >> 8) & 0xff);\n}\n\n/***********************************************************************\n * Update the encryption keys with the next byte of plain text\n */\nstatic int update_keys(unsigned long* pkeys,const unsigned long* pcrc_32_tab,int c)\n{\n    (*(pkeys+0)) = CRC32((*(pkeys+0)), c);\n    (*(pkeys+1)) += (*(pkeys+0)) & 0xff;\n    (*(pkeys+1)) = (*(pkeys+1)) * 134775813L + 1;\n    {\n      register int keyshift = (int)((*(pkeys+1)) >> 24);\n      (*(pkeys+2)) = CRC32((*(pkeys+2)), keyshift);\n    }\n    return c;\n}\n\n\n/***********************************************************************\n * Initialize the encryption keys and the random header according to\n * the given password.\n */\nstatic void init_keys(const char* passwd,unsigned long* pkeys,const unsigned long* pcrc_32_tab)\n{\n    *(pkeys+0) = 305419896L;\n    *(pkeys+1) = 591751049L;\n    *(pkeys+2) = 878082192L;\n    while (*passwd != '\\0') {\n        update_keys(pkeys,pcrc_32_tab,(int)*passwd);\n        passwd++;\n    }\n}\n\n#define zdecode(pkeys,pcrc_32_tab,c) \\\n    (update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab)))\n\n#define zencode(pkeys,pcrc_32_tab,c,t) \\\n    (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c))\n\n#ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED\n\n#define RAND_HEAD_LEN  12\n   /* \"last resort\" source for second part of crypt seed pattern */\n#  ifndef ZCR_SEED2\n#    define ZCR_SEED2 3141592654UL     /* use PI as default pattern */\n#  endif\n\nstatic int crypthead(const char* passwd,      /* password string */\n                     unsigned char* buf,      /* where to write header */\n                     int bufSize,\n                     unsigned long* pkeys,\n                     const unsigned long* pcrc_32_tab,\n                     unsigned long crcForCrypting)\n{\n    int n;                       /* index in random header */\n    int t;                       /* temporary */\n    int c;                       /* random byte */\n    unsigned char header[RAND_HEAD_LEN-2]; /* random header */\n    static unsigned calls = 0;   /* ensure different random header each time */\n\n    if (bufSize<RAND_HEAD_LEN)\n      return 0;\n\n    /* First generate RAND_HEAD_LEN-2 random bytes. We encrypt the\n     * output of rand() to get less predictability, since rand() is\n     * often poorly implemented.\n     */\n    if (++calls == 1)\n    {\n        srand((unsigned)(time(NULL) ^ ZCR_SEED2));\n    }\n    init_keys(passwd, pkeys, pcrc_32_tab);\n    for (n = 0; n < RAND_HEAD_LEN-2; n++)\n    {\n        c = (rand() >> 7) & 0xff;\n        header[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, c, t);\n    }\n    /* Encrypt random header (last two bytes is high word of crc) */\n    init_keys(passwd, pkeys, pcrc_32_tab);\n    for (n = 0; n < RAND_HEAD_LEN-2; n++)\n    {\n        buf[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, header[n], t);\n    }\n    buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 16) & 0xff, t);\n    buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 24) & 0xff, t);\n    return n;\n}\n\n#endif\n"
  },
  {
    "path": "external/zlib/contrib/minizip/ioapi.c",
    "content": "/* ioapi.h -- IO base function header for compress/uncompress .zip\n   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Modifications for Zip64 support\n         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )\n\n         For more info read MiniZip_info.txt\n\n*/\n\n#if (defined(_WIN32))\n        #define _CRT_SECURE_NO_WARNINGS\n#endif\n\n#include \"ioapi.h\"\n\nvoidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode)\n{\n    if (pfilefunc->zfile_func64.zopen64_file != NULL)\n        return (*(pfilefunc->zfile_func64.zopen64_file)) (pfilefunc->zfile_func64.opaque,filename,mode);\n    else\n    {\n        return (*(pfilefunc->zopen32_file))(pfilefunc->zfile_func64.opaque,(const char*)filename,mode);\n    }\n}\n\nlong call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin)\n{\n    if (pfilefunc->zfile_func64.zseek64_file != NULL)\n        return (*(pfilefunc->zfile_func64.zseek64_file)) (pfilefunc->zfile_func64.opaque,filestream,offset,origin);\n    else\n    {\n        uLong offsetTruncated = (uLong)offset;\n        if (offsetTruncated != offset)\n            return -1;\n        else\n            return (*(pfilefunc->zseek32_file))(pfilefunc->zfile_func64.opaque,filestream,offsetTruncated,origin);\n    }\n}\n\nZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream)\n{\n    if (pfilefunc->zfile_func64.zseek64_file != NULL)\n        return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream);\n    else\n    {\n        uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream);\n        if ((tell_uLong) == ((uLong)-1))\n            return (ZPOS64_T)-1;\n        else\n            return tell_uLong;\n    }\n}\n\nvoid fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32)\n{\n    p_filefunc64_32->zfile_func64.zopen64_file = NULL;\n    p_filefunc64_32->zopen32_file = p_filefunc32->zopen_file;\n    p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file;\n    p_filefunc64_32->zfile_func64.zread_file = p_filefunc32->zread_file;\n    p_filefunc64_32->zfile_func64.zwrite_file = p_filefunc32->zwrite_file;\n    p_filefunc64_32->zfile_func64.ztell64_file = NULL;\n    p_filefunc64_32->zfile_func64.zseek64_file = NULL;\n    p_filefunc64_32->zfile_func64.zclose_file = p_filefunc32->zclose_file;\n    p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file;\n    p_filefunc64_32->zfile_func64.opaque = p_filefunc32->opaque;\n    p_filefunc64_32->zseek32_file = p_filefunc32->zseek_file;\n    p_filefunc64_32->ztell32_file = p_filefunc32->ztell_file;\n}\n\n\n\nstatic voidpf  ZCALLBACK fopen_file_func OF((voidpf opaque, const char* filename, int mode));\nstatic uLong   ZCALLBACK fread_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size));\nstatic uLong   ZCALLBACK fwrite_file_func OF((voidpf opaque, voidpf stream, const void* buf,uLong size));\nstatic ZPOS64_T ZCALLBACK ftell64_file_func OF((voidpf opaque, voidpf stream));\nstatic long    ZCALLBACK fseek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));\nstatic int     ZCALLBACK fclose_file_func OF((voidpf opaque, voidpf stream));\nstatic int     ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream));\n\nstatic voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode)\n{\n    FILE* file = NULL;\n    const char* mode_fopen = NULL;\n    if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)\n        mode_fopen = \"rb\";\n    else\n    if (mode & ZLIB_FILEFUNC_MODE_EXISTING)\n        mode_fopen = \"r+b\";\n    else\n    if (mode & ZLIB_FILEFUNC_MODE_CREATE)\n        mode_fopen = \"wb\";\n\n    if ((filename!=NULL) && (mode_fopen != NULL))\n        file = fopen(filename, mode_fopen);\n    return file;\n}\n\nstatic voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, int mode)\n{\n    FILE* file = NULL;\n    const char* mode_fopen = NULL;\n    if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)\n        mode_fopen = \"rb\";\n    else\n    if (mode & ZLIB_FILEFUNC_MODE_EXISTING)\n        mode_fopen = \"r+b\";\n    else\n    if (mode & ZLIB_FILEFUNC_MODE_CREATE)\n        mode_fopen = \"wb\";\n\n    if ((filename!=NULL) && (mode_fopen != NULL))\n        file = fopen64((const char*)filename, mode_fopen);\n    return file;\n}\n\n\nstatic uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, void* buf, uLong size)\n{\n    uLong ret;\n    ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream);\n    return ret;\n}\n\nstatic uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, const void* buf, uLong size)\n{\n    uLong ret;\n    ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream);\n    return ret;\n}\n\nstatic long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream)\n{\n    long ret;\n    ret = ftell((FILE *)stream);\n    return ret;\n}\n\n\nstatic ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream)\n{\n    ZPOS64_T ret;\n    ret = ftello64((FILE *)stream);\n    return ret;\n}\n\nstatic long ZCALLBACK fseek_file_func (voidpf  opaque, voidpf stream, uLong offset, int origin)\n{\n    int fseek_origin=0;\n    long ret;\n    switch (origin)\n    {\n    case ZLIB_FILEFUNC_SEEK_CUR :\n        fseek_origin = SEEK_CUR;\n        break;\n    case ZLIB_FILEFUNC_SEEK_END :\n        fseek_origin = SEEK_END;\n        break;\n    case ZLIB_FILEFUNC_SEEK_SET :\n        fseek_origin = SEEK_SET;\n        break;\n    default: return -1;\n    }\n    ret = 0;\n    if (fseek((FILE *)stream, offset, fseek_origin) != 0)\n        ret = -1;\n    return ret;\n}\n\nstatic long ZCALLBACK fseek64_file_func (voidpf  opaque, voidpf stream, ZPOS64_T offset, int origin)\n{\n    int fseek_origin=0;\n    long ret;\n    switch (origin)\n    {\n    case ZLIB_FILEFUNC_SEEK_CUR :\n        fseek_origin = SEEK_CUR;\n        break;\n    case ZLIB_FILEFUNC_SEEK_END :\n        fseek_origin = SEEK_END;\n        break;\n    case ZLIB_FILEFUNC_SEEK_SET :\n        fseek_origin = SEEK_SET;\n        break;\n    default: return -1;\n    }\n    ret = 0;\n\n    if(fseeko64((FILE *)stream, offset, fseek_origin) != 0)\n                        ret = -1;\n\n    return ret;\n}\n\n\nstatic int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream)\n{\n    int ret;\n    ret = fclose((FILE *)stream);\n    return ret;\n}\n\nstatic int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream)\n{\n    int ret;\n    ret = ferror((FILE *)stream);\n    return ret;\n}\n\nvoid fill_fopen_filefunc (pzlib_filefunc_def)\n  zlib_filefunc_def* pzlib_filefunc_def;\n{\n    pzlib_filefunc_def->zopen_file = fopen_file_func;\n    pzlib_filefunc_def->zread_file = fread_file_func;\n    pzlib_filefunc_def->zwrite_file = fwrite_file_func;\n    pzlib_filefunc_def->ztell_file = ftell_file_func;\n    pzlib_filefunc_def->zseek_file = fseek_file_func;\n    pzlib_filefunc_def->zclose_file = fclose_file_func;\n    pzlib_filefunc_def->zerror_file = ferror_file_func;\n    pzlib_filefunc_def->opaque = NULL;\n}\n\nvoid fill_fopen64_filefunc (zlib_filefunc64_def*  pzlib_filefunc_def)\n{\n    pzlib_filefunc_def->zopen64_file = fopen64_file_func;\n    pzlib_filefunc_def->zread_file = fread_file_func;\n    pzlib_filefunc_def->zwrite_file = fwrite_file_func;\n    pzlib_filefunc_def->ztell64_file = ftell64_file_func;\n    pzlib_filefunc_def->zseek64_file = fseek64_file_func;\n    pzlib_filefunc_def->zclose_file = fclose_file_func;\n    pzlib_filefunc_def->zerror_file = ferror_file_func;\n    pzlib_filefunc_def->opaque = NULL;\n}\n"
  },
  {
    "path": "external/zlib/contrib/minizip/ioapi.h",
    "content": "/* ioapi.h -- IO base function header for compress/uncompress .zip\n   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Modifications for Zip64 support\n         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )\n\n         For more info read MiniZip_info.txt\n\n         Changes\n\n    Oct-2009 - Defined ZPOS64_T to fpos_t on windows and u_int64_t on linux. (might need to find a better why for this)\n    Oct-2009 - Change to fseeko64, ftello64 and fopen64 so large files would work on linux.\n               More if/def section may be needed to support other platforms\n    Oct-2009 - Defined fxxxx64 calls to normal fopen/ftell/fseek so they would compile on windows.\n                          (but you should use iowin32.c for windows instead)\n\n*/\n\n#ifndef _ZLIBIOAPI64_H\n#define _ZLIBIOAPI64_H\n\n#if (!defined(_WIN32)) && (!defined(WIN32))\n\n  // Linux needs this to support file operation on files larger then 4+GB\n  // But might need better if/def to select just the platforms that needs them.\n\n        #ifndef __USE_FILE_OFFSET64\n                #define __USE_FILE_OFFSET64\n        #endif\n        #ifndef __USE_LARGEFILE64\n                #define __USE_LARGEFILE64\n        #endif\n        #ifndef _LARGEFILE64_SOURCE\n                #define _LARGEFILE64_SOURCE\n        #endif\n        #ifndef _FILE_OFFSET_BIT\n                #define _FILE_OFFSET_BIT 64\n        #endif\n#endif\n\n#include <stdio.h>\n#include <stdlib.h>\n#include \"zlib.h\"\n\n#if defined(USE_FILE32API)\n#define fopen64 fopen\n#define ftello64 ftell\n#define fseeko64 fseek\n#else\n#ifdef _MSC_VER\n #define fopen64 fopen\n #if (_MSC_VER >= 1400) && (!(defined(NO_MSCVER_FILE64_FUNC)))\n  #define ftello64 _ftelli64\n  #define fseeko64 _fseeki64\n #else // old MSC\n  #define ftello64 ftell\n  #define fseeko64 fseek\n #endif\n#endif\n#endif\n\n/*\n#ifndef ZPOS64_T\n  #ifdef _WIN32\n                #define ZPOS64_T fpos_t\n  #else\n    #include <stdint.h>\n    #define ZPOS64_T uint64_t\n  #endif\n#endif\n*/\n\n#ifdef HAVE_MINIZIP64_CONF_H\n#include \"mz64conf.h\"\n#endif\n\n/* a type choosen by DEFINE */\n#ifdef HAVE_64BIT_INT_CUSTOM\ntypedef  64BIT_INT_CUSTOM_TYPE ZPOS64_T;\n#else\n#ifdef HAS_STDINT_H\n#include \"stdint.h\"\ntypedef uint64_t ZPOS64_T;\n#else\n\n\n#if defined(_MSC_VER) || defined(__BORLANDC__)\ntypedef unsigned __int64 ZPOS64_T;\n#else\ntypedef unsigned long long int ZPOS64_T;\n#endif\n#endif\n#endif\n\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n#define ZLIB_FILEFUNC_SEEK_CUR (1)\n#define ZLIB_FILEFUNC_SEEK_END (2)\n#define ZLIB_FILEFUNC_SEEK_SET (0)\n\n#define ZLIB_FILEFUNC_MODE_READ      (1)\n#define ZLIB_FILEFUNC_MODE_WRITE     (2)\n#define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3)\n\n#define ZLIB_FILEFUNC_MODE_EXISTING (4)\n#define ZLIB_FILEFUNC_MODE_CREATE   (8)\n\n\n#ifndef ZCALLBACK\n #if (defined(WIN32) || defined(_WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK)\n   #define ZCALLBACK CALLBACK\n #else\n   #define ZCALLBACK\n #endif\n#endif\n\n\n\n\ntypedef voidpf   (ZCALLBACK *open_file_func)      OF((voidpf opaque, const char* filename, int mode));\ntypedef uLong    (ZCALLBACK *read_file_func)      OF((voidpf opaque, voidpf stream, void* buf, uLong size));\ntypedef uLong    (ZCALLBACK *write_file_func)     OF((voidpf opaque, voidpf stream, const void* buf, uLong size));\ntypedef int      (ZCALLBACK *close_file_func)     OF((voidpf opaque, voidpf stream));\ntypedef int      (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream));\n\ntypedef long     (ZCALLBACK *tell_file_func)      OF((voidpf opaque, voidpf stream));\ntypedef long     (ZCALLBACK *seek_file_func)      OF((voidpf opaque, voidpf stream, uLong offset, int origin));\n\n\n/* here is the \"old\" 32 bits structure structure */\ntypedef struct zlib_filefunc_def_s\n{\n    open_file_func      zopen_file;\n    read_file_func      zread_file;\n    write_file_func     zwrite_file;\n    tell_file_func      ztell_file;\n    seek_file_func      zseek_file;\n    close_file_func     zclose_file;\n    testerror_file_func zerror_file;\n    voidpf              opaque;\n} zlib_filefunc_def;\n\ntypedef ZPOS64_T (ZCALLBACK *tell64_file_func)    OF((voidpf opaque, voidpf stream));\ntypedef long     (ZCALLBACK *seek64_file_func)    OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));\ntypedef voidpf   (ZCALLBACK *open64_file_func)    OF((voidpf opaque, const void* filename, int mode));\n\ntypedef struct zlib_filefunc64_def_s\n{\n    open64_file_func    zopen64_file;\n    read_file_func      zread_file;\n    write_file_func     zwrite_file;\n    tell64_file_func    ztell64_file;\n    seek64_file_func    zseek64_file;\n    close_file_func     zclose_file;\n    testerror_file_func zerror_file;\n    voidpf              opaque;\n} zlib_filefunc64_def;\n\nvoid fill_fopen64_filefunc OF((zlib_filefunc64_def* pzlib_filefunc_def));\nvoid fill_fopen_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));\n\n/* now internal definition, only for zip.c and unzip.h */\ntypedef struct zlib_filefunc64_32_def_s\n{\n    zlib_filefunc64_def zfile_func64;\n    open_file_func      zopen32_file;\n    tell_file_func      ztell32_file;\n    seek_file_func      zseek32_file;\n} zlib_filefunc64_32_def;\n\n\n#define ZREAD64(filefunc,filestream,buf,size)     ((*((filefunc).zfile_func64.zread_file))   ((filefunc).zfile_func64.opaque,filestream,buf,size))\n#define ZWRITE64(filefunc,filestream,buf,size)    ((*((filefunc).zfile_func64.zwrite_file))  ((filefunc).zfile_func64.opaque,filestream,buf,size))\n//#define ZTELL64(filefunc,filestream)            ((*((filefunc).ztell64_file)) ((filefunc).opaque,filestream))\n//#define ZSEEK64(filefunc,filestream,pos,mode)   ((*((filefunc).zseek64_file)) ((filefunc).opaque,filestream,pos,mode))\n#define ZCLOSE64(filefunc,filestream)             ((*((filefunc).zfile_func64.zclose_file))  ((filefunc).zfile_func64.opaque,filestream))\n#define ZERROR64(filefunc,filestream)             ((*((filefunc).zfile_func64.zerror_file))  ((filefunc).zfile_func64.opaque,filestream))\n\nvoidpf call_zopen64 OF((const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode));\nlong    call_zseek64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin));\nZPOS64_T call_ztell64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream));\n\nvoid    fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32);\n\n#define ZOPEN64(filefunc,filename,mode)         (call_zopen64((&(filefunc)),(filename),(mode)))\n#define ZTELL64(filefunc,filestream)            (call_ztell64((&(filefunc)),(filestream)))\n#define ZSEEK64(filefunc,filestream,pos,mode)   (call_zseek64((&(filefunc)),(filestream),(pos),(mode)))\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "external/zlib/contrib/minizip/iowin32.c",
    "content": "/* iowin32.c -- IO base function header for compress/uncompress .zip\n     Version 1.1, February 14h, 2010\n     part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Modifications for Zip64 support\n         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )\n\n     For more info read MiniZip_info.txt\n\n*/\n\n#include <stdlib.h>\n\n#include \"zlib.h\"\n#include \"ioapi.h\"\n#include \"iowin32.h\"\n\n#ifndef INVALID_HANDLE_VALUE\n#define INVALID_HANDLE_VALUE (0xFFFFFFFF)\n#endif\n\n#ifndef INVALID_SET_FILE_POINTER\n#define INVALID_SET_FILE_POINTER ((DWORD)-1)\n#endif\n\nvoidpf  ZCALLBACK win32_open_file_func  OF((voidpf opaque, const char* filename, int mode));\nuLong   ZCALLBACK win32_read_file_func  OF((voidpf opaque, voidpf stream, void* buf, uLong size));\nuLong   ZCALLBACK win32_write_file_func OF((voidpf opaque, voidpf stream, const void* buf, uLong size));\nZPOS64_T ZCALLBACK win32_tell64_file_func  OF((voidpf opaque, voidpf stream));\nlong    ZCALLBACK win32_seek64_file_func  OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));\nint     ZCALLBACK win32_close_file_func OF((voidpf opaque, voidpf stream));\nint     ZCALLBACK win32_error_file_func OF((voidpf opaque, voidpf stream));\n\ntypedef struct\n{\n    HANDLE hf;\n    int error;\n} WIN32FILE_IOWIN;\n\n\nstatic void win32_translate_open_mode(int mode,\n                                      DWORD* lpdwDesiredAccess,\n                                      DWORD* lpdwCreationDisposition,\n                                      DWORD* lpdwShareMode,\n                                      DWORD* lpdwFlagsAndAttributes)\n{\n    *lpdwDesiredAccess = *lpdwShareMode = *lpdwFlagsAndAttributes = *lpdwCreationDisposition = 0;\n\n    if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)\n    {\n        *lpdwDesiredAccess = GENERIC_READ;\n        *lpdwCreationDisposition = OPEN_EXISTING;\n        *lpdwShareMode = FILE_SHARE_READ;\n    }\n    else if (mode & ZLIB_FILEFUNC_MODE_EXISTING)\n    {\n        *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ;\n        *lpdwCreationDisposition = OPEN_EXISTING;\n    }\n    else if (mode & ZLIB_FILEFUNC_MODE_CREATE)\n    {\n        *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ;\n        *lpdwCreationDisposition = CREATE_ALWAYS;\n    }\n}\n\nstatic voidpf win32_build_iowin(HANDLE hFile)\n{\n    voidpf ret=NULL;\n\n    if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))\n    {\n        WIN32FILE_IOWIN w32fiow;\n        w32fiow.hf = hFile;\n        w32fiow.error = 0;\n        ret = malloc(sizeof(WIN32FILE_IOWIN));\n\n        if (ret==NULL)\n            CloseHandle(hFile);\n        else\n            *((WIN32FILE_IOWIN*)ret) = w32fiow;\n    }\n    return ret;\n}\n\nvoidpf ZCALLBACK win32_open64_file_func (voidpf opaque,const void* filename,int mode)\n{\n    const char* mode_fopen = NULL;\n    DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;\n    HANDLE hFile = NULL;\n\n    win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);\n\n    if ((filename!=NULL) && (dwDesiredAccess != 0))\n        hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);\n\n    return win32_build_iowin(hFile);\n}\n\n\nvoidpf ZCALLBACK win32_open64_file_funcA (voidpf opaque,const void* filename,int mode)\n{\n    const char* mode_fopen = NULL;\n    DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;\n    HANDLE hFile = NULL;\n\n    win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);\n\n    if ((filename!=NULL) && (dwDesiredAccess != 0))\n        hFile = CreateFileA((LPCSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);\n\n    return win32_build_iowin(hFile);\n}\n\n\nvoidpf ZCALLBACK win32_open64_file_funcW (voidpf opaque,const void* filename,int mode)\n{\n    const char* mode_fopen = NULL;\n    DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;\n    HANDLE hFile = NULL;\n\n    win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);\n\n    if ((filename!=NULL) && (dwDesiredAccess != 0))\n        hFile = CreateFileW((LPCWSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);\n\n    return win32_build_iowin(hFile);\n}\n\n\nvoidpf ZCALLBACK win32_open_file_func (voidpf opaque,const char* filename,int mode)\n{\n    const char* mode_fopen = NULL;\n    DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;\n    HANDLE hFile = NULL;\n\n    win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);\n\n    if ((filename!=NULL) && (dwDesiredAccess != 0))\n        hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);\n\n    return win32_build_iowin(hFile);\n}\n\n\nuLong ZCALLBACK win32_read_file_func (voidpf opaque, voidpf stream, void* buf,uLong size)\n{\n    uLong ret=0;\n    HANDLE hFile = NULL;\n    if (stream!=NULL)\n        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;\n\n    if (hFile != NULL)\n    {\n        if (!ReadFile(hFile, buf, size, &ret, NULL))\n        {\n            DWORD dwErr = GetLastError();\n            if (dwErr == ERROR_HANDLE_EOF)\n                dwErr = 0;\n            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;\n        }\n    }\n\n    return ret;\n}\n\n\nuLong ZCALLBACK win32_write_file_func (voidpf opaque,voidpf stream,const void* buf,uLong size)\n{\n    uLong ret=0;\n    HANDLE hFile = NULL;\n    if (stream!=NULL)\n        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;\n\n    if (hFile != NULL)\n    {\n        if (!WriteFile(hFile, buf, size, &ret, NULL))\n        {\n            DWORD dwErr = GetLastError();\n            if (dwErr == ERROR_HANDLE_EOF)\n                dwErr = 0;\n            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;\n        }\n    }\n\n    return ret;\n}\n\nlong ZCALLBACK win32_tell_file_func (voidpf opaque,voidpf stream)\n{\n    long ret=-1;\n    HANDLE hFile = NULL;\n    if (stream!=NULL)\n        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;\n    if (hFile != NULL)\n    {\n        DWORD dwSet = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);\n        if (dwSet == INVALID_SET_FILE_POINTER)\n        {\n            DWORD dwErr = GetLastError();\n            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;\n            ret = -1;\n        }\n        else\n            ret=(long)dwSet;\n    }\n    return ret;\n}\n\nZPOS64_T ZCALLBACK win32_tell64_file_func (voidpf opaque, voidpf stream)\n{\n    ZPOS64_T ret= (ZPOS64_T)-1;\n    HANDLE hFile = NULL;\n    if (stream!=NULL)\n        hFile = ((WIN32FILE_IOWIN*)stream)->hf;\n\n    if (hFile)\n    {\n        LARGE_INTEGER li;\n        li.QuadPart = 0;\n        li.u.LowPart = SetFilePointer(hFile, li.u.LowPart, &li.u.HighPart, FILE_CURRENT);\n        if ( (li.LowPart == 0xFFFFFFFF) && (GetLastError() != NO_ERROR))\n        {\n            DWORD dwErr = GetLastError();\n            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;\n            ret = (ZPOS64_T)-1;\n        }\n        else\n            ret=li.QuadPart;\n    }\n    return ret;\n}\n\n\nlong ZCALLBACK win32_seek_file_func (voidpf opaque,voidpf stream,uLong offset,int origin)\n{\n    DWORD dwMoveMethod=0xFFFFFFFF;\n    HANDLE hFile = NULL;\n\n    long ret=-1;\n    if (stream!=NULL)\n        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;\n    switch (origin)\n    {\n    case ZLIB_FILEFUNC_SEEK_CUR :\n        dwMoveMethod = FILE_CURRENT;\n        break;\n    case ZLIB_FILEFUNC_SEEK_END :\n        dwMoveMethod = FILE_END;\n        break;\n    case ZLIB_FILEFUNC_SEEK_SET :\n        dwMoveMethod = FILE_BEGIN;\n        break;\n    default: return -1;\n    }\n\n    if (hFile != NULL)\n    {\n        DWORD dwSet = SetFilePointer(hFile, offset, NULL, dwMoveMethod);\n        if (dwSet == INVALID_SET_FILE_POINTER)\n        {\n            DWORD dwErr = GetLastError();\n            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;\n            ret = -1;\n        }\n        else\n            ret=0;\n    }\n    return ret;\n}\n\nlong ZCALLBACK win32_seek64_file_func (voidpf opaque, voidpf stream,ZPOS64_T offset,int origin)\n{\n    DWORD dwMoveMethod=0xFFFFFFFF;\n    HANDLE hFile = NULL;\n    long ret=-1;\n\n    if (stream!=NULL)\n        hFile = ((WIN32FILE_IOWIN*)stream)->hf;\n\n    switch (origin)\n    {\n        case ZLIB_FILEFUNC_SEEK_CUR :\n            dwMoveMethod = FILE_CURRENT;\n            break;\n        case ZLIB_FILEFUNC_SEEK_END :\n            dwMoveMethod = FILE_END;\n            break;\n        case ZLIB_FILEFUNC_SEEK_SET :\n            dwMoveMethod = FILE_BEGIN;\n            break;\n        default: return -1;\n    }\n\n    if (hFile)\n    {\n        LARGE_INTEGER* li = (LARGE_INTEGER*)&offset;\n        DWORD dwSet = SetFilePointer(hFile, li->u.LowPart, &li->u.HighPart, dwMoveMethod);\n        if (dwSet == INVALID_SET_FILE_POINTER)\n        {\n            DWORD dwErr = GetLastError();\n            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;\n            ret = -1;\n        }\n        else\n            ret=0;\n    }\n    return ret;\n}\n\nint ZCALLBACK win32_close_file_func (voidpf opaque, voidpf stream)\n{\n    int ret=-1;\n\n    if (stream!=NULL)\n    {\n        HANDLE hFile;\n        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;\n        if (hFile != NULL)\n        {\n            CloseHandle(hFile);\n            ret=0;\n        }\n        free(stream);\n    }\n    return ret;\n}\n\nint ZCALLBACK win32_error_file_func (voidpf opaque,voidpf stream)\n{\n    int ret=-1;\n    if (stream!=NULL)\n    {\n        ret = ((WIN32FILE_IOWIN*)stream) -> error;\n    }\n    return ret;\n}\n\nvoid fill_win32_filefunc (zlib_filefunc_def* pzlib_filefunc_def)\n{\n    pzlib_filefunc_def->zopen_file = win32_open_file_func;\n    pzlib_filefunc_def->zread_file = win32_read_file_func;\n    pzlib_filefunc_def->zwrite_file = win32_write_file_func;\n    pzlib_filefunc_def->ztell_file = win32_tell_file_func;\n    pzlib_filefunc_def->zseek_file = win32_seek_file_func;\n    pzlib_filefunc_def->zclose_file = win32_close_file_func;\n    pzlib_filefunc_def->zerror_file = win32_error_file_func;\n    pzlib_filefunc_def->opaque = NULL;\n}\n\nvoid fill_win32_filefunc64(zlib_filefunc64_def* pzlib_filefunc_def)\n{\n    pzlib_filefunc_def->zopen64_file = win32_open64_file_func;\n    pzlib_filefunc_def->zread_file = win32_read_file_func;\n    pzlib_filefunc_def->zwrite_file = win32_write_file_func;\n    pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;\n    pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;\n    pzlib_filefunc_def->zclose_file = win32_close_file_func;\n    pzlib_filefunc_def->zerror_file = win32_error_file_func;\n    pzlib_filefunc_def->opaque = NULL;\n}\n\n\nvoid fill_win32_filefunc64A(zlib_filefunc64_def* pzlib_filefunc_def)\n{\n    pzlib_filefunc_def->zopen64_file = win32_open64_file_funcA;\n    pzlib_filefunc_def->zread_file = win32_read_file_func;\n    pzlib_filefunc_def->zwrite_file = win32_write_file_func;\n    pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;\n    pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;\n    pzlib_filefunc_def->zclose_file = win32_close_file_func;\n    pzlib_filefunc_def->zerror_file = win32_error_file_func;\n    pzlib_filefunc_def->opaque = NULL;\n}\n\n\nvoid fill_win32_filefunc64W(zlib_filefunc64_def* pzlib_filefunc_def)\n{\n    pzlib_filefunc_def->zopen64_file = win32_open64_file_funcW;\n    pzlib_filefunc_def->zread_file = win32_read_file_func;\n    pzlib_filefunc_def->zwrite_file = win32_write_file_func;\n    pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;\n    pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;\n    pzlib_filefunc_def->zclose_file = win32_close_file_func;\n    pzlib_filefunc_def->zerror_file = win32_error_file_func;\n    pzlib_filefunc_def->opaque = NULL;\n}\n"
  },
  {
    "path": "external/zlib/contrib/minizip/iowin32.h",
    "content": "/* iowin32.h -- IO base function header for compress/uncompress .zip\n     Version 1.1, February 14h, 2010\n     part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Modifications for Zip64 support\n         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )\n\n         For more info read MiniZip_info.txt\n\n*/\n\n#include <windows.h>\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nvoid fill_win32_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));\nvoid fill_win32_filefunc64 OF((zlib_filefunc64_def* pzlib_filefunc_def));\nvoid fill_win32_filefunc64A OF((zlib_filefunc64_def* pzlib_filefunc_def));\nvoid fill_win32_filefunc64W OF((zlib_filefunc64_def* pzlib_filefunc_def));\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "external/zlib/contrib/minizip/make_vms.com",
    "content": "$ if f$search(\"ioapi.h_orig\") .eqs. \"\" then copy ioapi.h ioapi.h_orig\n$ open/write zdef vmsdefs.h\n$ copy sys$input: zdef\n$ deck\n#define unix\n#define fill_zlib_filefunc64_32_def_from_filefunc32 fillzffunc64from\n#define Write_Zip64EndOfCentralDirectoryLocator Write_Zip64EoDLocator\n#define Write_Zip64EndOfCentralDirectoryRecord Write_Zip64EoDRecord\n#define Write_EndOfCentralDirectoryRecord Write_EoDRecord\n$ eod\n$ close zdef\n$ copy vmsdefs.h,ioapi.h_orig ioapi.h\n$ cc/include=[--]/prefix=all ioapi.c\n$ cc/include=[--]/prefix=all miniunz.c\n$ cc/include=[--]/prefix=all unzip.c\n$ cc/include=[--]/prefix=all minizip.c\n$ cc/include=[--]/prefix=all zip.c\n$ link miniunz,unzip,ioapi,[--]libz.olb/lib\n$ link minizip,zip,ioapi,[--]libz.olb/lib\n$ mcr []minizip test minizip_info.txt\n$ mcr []miniunz -l test.zip\n$ rename minizip_info.txt; minizip_info.txt_old\n$ mcr []miniunz test.zip\n$ delete test.zip;*\n$exit\n"
  },
  {
    "path": "external/zlib/contrib/minizip/miniunz.c",
    "content": "/*\n   miniunz.c\n   Version 1.1, February 14h, 2010\n   sample part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Modifications of Unzip for Zip64\n         Copyright (C) 2007-2008 Even Rouault\n\n         Modifications for Zip64 support on both zip and unzip\n         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )\n*/\n\n#ifndef _WIN32\n        #ifndef __USE_FILE_OFFSET64\n                #define __USE_FILE_OFFSET64\n        #endif\n        #ifndef __USE_LARGEFILE64\n                #define __USE_LARGEFILE64\n        #endif\n        #ifndef _LARGEFILE64_SOURCE\n                #define _LARGEFILE64_SOURCE\n        #endif\n        #ifndef _FILE_OFFSET_BIT\n                #define _FILE_OFFSET_BIT 64\n        #endif\n#endif\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <time.h>\n#include <errno.h>\n#include <fcntl.h>\n\n#ifdef unix\n# include <unistd.h>\n# include <utime.h>\n#else\n# include <direct.h>\n# include <io.h>\n#endif\n\n#include \"unzip.h\"\n\n#define CASESENSITIVITY (0)\n#define WRITEBUFFERSIZE (8192)\n#define MAXFILENAME (256)\n\n#ifdef _WIN32\n#define USEWIN32IOAPI\n#include \"iowin32.h\"\n#endif\n/*\n  mini unzip, demo of unzip package\n\n  usage :\n  Usage : miniunz [-exvlo] file.zip [file_to_extract] [-d extractdir]\n\n  list the file in the zipfile, and print the content of FILE_ID.ZIP or README.TXT\n    if it exists\n*/\n\n\n/* change_file_date : change the date/time of a file\n    filename : the filename of the file where date/time must be modified\n    dosdate : the new date at the MSDos format (4 bytes)\n    tmu_date : the SAME new date at the tm_unz format */\nvoid change_file_date(filename,dosdate,tmu_date)\n    const char *filename;\n    uLong dosdate;\n    tm_unz tmu_date;\n{\n#ifdef _WIN32\n  HANDLE hFile;\n  FILETIME ftm,ftLocal,ftCreate,ftLastAcc,ftLastWrite;\n\n  hFile = CreateFileA(filename,GENERIC_READ | GENERIC_WRITE,\n                      0,NULL,OPEN_EXISTING,0,NULL);\n  GetFileTime(hFile,&ftCreate,&ftLastAcc,&ftLastWrite);\n  DosDateTimeToFileTime((WORD)(dosdate>>16),(WORD)dosdate,&ftLocal);\n  LocalFileTimeToFileTime(&ftLocal,&ftm);\n  SetFileTime(hFile,&ftm,&ftLastAcc,&ftm);\n  CloseHandle(hFile);\n#else\n#ifdef unix\n  struct utimbuf ut;\n  struct tm newdate;\n  newdate.tm_sec = tmu_date.tm_sec;\n  newdate.tm_min=tmu_date.tm_min;\n  newdate.tm_hour=tmu_date.tm_hour;\n  newdate.tm_mday=tmu_date.tm_mday;\n  newdate.tm_mon=tmu_date.tm_mon;\n  if (tmu_date.tm_year > 1900)\n      newdate.tm_year=tmu_date.tm_year - 1900;\n  else\n      newdate.tm_year=tmu_date.tm_year ;\n  newdate.tm_isdst=-1;\n\n  ut.actime=ut.modtime=mktime(&newdate);\n  utime(filename,&ut);\n#endif\n#endif\n}\n\n\n/* mymkdir and change_file_date are not 100 % portable\n   As I don't know well Unix, I wait feedback for the unix portion */\n\nint mymkdir(dirname)\n    const char* dirname;\n{\n    int ret=0;\n#ifdef _WIN32\n    ret = _mkdir(dirname);\n#else\n#ifdef unix\n    ret = mkdir (dirname,0775);\n#endif\n#endif\n    return ret;\n}\n\nint makedir (newdir)\n    char *newdir;\n{\n  char *buffer ;\n  char *p;\n  int  len = (int)strlen(newdir);\n\n  if (len <= 0)\n    return 0;\n\n  buffer = (char*)malloc(len+1);\n        if (buffer==NULL)\n        {\n                printf(\"Error allocating memory\\n\");\n                return UNZ_INTERNALERROR;\n        }\n  strcpy(buffer,newdir);\n\n  if (buffer[len-1] == '/') {\n    buffer[len-1] = '\\0';\n  }\n  if (mymkdir(buffer) == 0)\n    {\n      free(buffer);\n      return 1;\n    }\n\n  p = buffer+1;\n  while (1)\n    {\n      char hold;\n\n      while(*p && *p != '\\\\' && *p != '/')\n        p++;\n      hold = *p;\n      *p = 0;\n      if ((mymkdir(buffer) == -1) && (errno == ENOENT))\n        {\n          printf(\"couldn't create directory %s\\n\",buffer);\n          free(buffer);\n          return 0;\n        }\n      if (hold == 0)\n        break;\n      *p++ = hold;\n    }\n  free(buffer);\n  return 1;\n}\n\nvoid do_banner()\n{\n    printf(\"MiniUnz 1.01b, demo of zLib + Unz package written by Gilles Vollant\\n\");\n    printf(\"more info at http://www.winimage.com/zLibDll/unzip.html\\n\\n\");\n}\n\nvoid do_help()\n{\n    printf(\"Usage : miniunz [-e] [-x] [-v] [-l] [-o] [-p password] file.zip [file_to_extr.] [-d extractdir]\\n\\n\" \\\n           \"  -e  Extract without pathname (junk paths)\\n\" \\\n           \"  -x  Extract with pathname\\n\" \\\n           \"  -v  list files\\n\" \\\n           \"  -l  list files\\n\" \\\n           \"  -d  directory to extract into\\n\" \\\n           \"  -o  overwrite files without prompting\\n\" \\\n           \"  -p  extract crypted file using password\\n\\n\");\n}\n\nvoid Display64BitsSize(ZPOS64_T n, int size_char)\n{\n  /* to avoid compatibility problem , we do here the conversion */\n  char number[21];\n  int offset=19;\n  int pos_string = 19;\n  number[20]=0;\n  for (;;) {\n      number[offset]=(char)((n%10)+'0');\n      if (number[offset] != '0')\n          pos_string=offset;\n      n/=10;\n      if (offset==0)\n          break;\n      offset--;\n  }\n  {\n      int size_display_string = 19-pos_string;\n      while (size_char > size_display_string)\n      {\n          size_char--;\n          printf(\" \");\n      }\n  }\n\n  printf(\"%s\",&number[pos_string]);\n}\n\nint do_list(uf)\n    unzFile uf;\n{\n    uLong i;\n    unz_global_info64 gi;\n    int err;\n\n    err = unzGetGlobalInfo64(uf,&gi);\n    if (err!=UNZ_OK)\n        printf(\"error %d with zipfile in unzGetGlobalInfo \\n\",err);\n    printf(\"  Length  Method     Size Ratio   Date    Time   CRC-32     Name\\n\");\n    printf(\"  ------  ------     ---- -----   ----    ----   ------     ----\\n\");\n    for (i=0;i<gi.number_entry;i++)\n    {\n        char filename_inzip[256];\n        unz_file_info64 file_info;\n        uLong ratio=0;\n        const char *string_method;\n        char charCrypt=' ';\n        err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);\n        if (err!=UNZ_OK)\n        {\n            printf(\"error %d with zipfile in unzGetCurrentFileInfo\\n\",err);\n            break;\n        }\n        if (file_info.uncompressed_size>0)\n            ratio = (uLong)((file_info.compressed_size*100)/file_info.uncompressed_size);\n\n        /* display a '*' if the file is crypted */\n        if ((file_info.flag & 1) != 0)\n            charCrypt='*';\n\n        if (file_info.compression_method==0)\n            string_method=\"Stored\";\n        else\n        if (file_info.compression_method==Z_DEFLATED)\n        {\n            uInt iLevel=(uInt)((file_info.flag & 0x6)/2);\n            if (iLevel==0)\n              string_method=\"Defl:N\";\n            else if (iLevel==1)\n              string_method=\"Defl:X\";\n            else if ((iLevel==2) || (iLevel==3))\n              string_method=\"Defl:F\"; /* 2:fast , 3 : extra fast*/\n        }\n        else\n        if (file_info.compression_method==Z_BZIP2ED)\n        {\n              string_method=\"BZip2 \";\n        }\n        else\n            string_method=\"Unkn. \";\n\n        Display64BitsSize(file_info.uncompressed_size,7);\n        printf(\"  %6s%c\",string_method,charCrypt);\n        Display64BitsSize(file_info.compressed_size,7);\n        printf(\" %3lu%%  %2.2lu-%2.2lu-%2.2lu  %2.2lu:%2.2lu  %8.8lx   %s\\n\",\n                ratio,\n                (uLong)file_info.tmu_date.tm_mon + 1,\n                (uLong)file_info.tmu_date.tm_mday,\n                (uLong)file_info.tmu_date.tm_year % 100,\n                (uLong)file_info.tmu_date.tm_hour,(uLong)file_info.tmu_date.tm_min,\n                (uLong)file_info.crc,filename_inzip);\n        if ((i+1)<gi.number_entry)\n        {\n            err = unzGoToNextFile(uf);\n            if (err!=UNZ_OK)\n            {\n                printf(\"error %d with zipfile in unzGoToNextFile\\n\",err);\n                break;\n            }\n        }\n    }\n\n    return 0;\n}\n\n\nint do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password)\n    unzFile uf;\n    const int* popt_extract_without_path;\n    int* popt_overwrite;\n    const char* password;\n{\n    char filename_inzip[256];\n    char* filename_withoutpath;\n    char* p;\n    int err=UNZ_OK;\n    FILE *fout=NULL;\n    void* buf;\n    uInt size_buf;\n\n    unz_file_info64 file_info;\n    uLong ratio=0;\n    err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);\n\n    if (err!=UNZ_OK)\n    {\n        printf(\"error %d with zipfile in unzGetCurrentFileInfo\\n\",err);\n        return err;\n    }\n\n    size_buf = WRITEBUFFERSIZE;\n    buf = (void*)malloc(size_buf);\n    if (buf==NULL)\n    {\n        printf(\"Error allocating memory\\n\");\n        return UNZ_INTERNALERROR;\n    }\n\n    p = filename_withoutpath = filename_inzip;\n    while ((*p) != '\\0')\n    {\n        if (((*p)=='/') || ((*p)=='\\\\'))\n            filename_withoutpath = p+1;\n        p++;\n    }\n\n    if ((*filename_withoutpath)=='\\0')\n    {\n        if ((*popt_extract_without_path)==0)\n        {\n            printf(\"creating directory: %s\\n\",filename_inzip);\n            mymkdir(filename_inzip);\n        }\n    }\n    else\n    {\n        const char* write_filename;\n        int skip=0;\n\n        if ((*popt_extract_without_path)==0)\n            write_filename = filename_inzip;\n        else\n            write_filename = filename_withoutpath;\n\n        err = unzOpenCurrentFilePassword(uf,password);\n        if (err!=UNZ_OK)\n        {\n            printf(\"error %d with zipfile in unzOpenCurrentFilePassword\\n\",err);\n        }\n\n        if (((*popt_overwrite)==0) && (err==UNZ_OK))\n        {\n            char rep=0;\n            FILE* ftestexist;\n            ftestexist = fopen64(write_filename,\"rb\");\n            if (ftestexist!=NULL)\n            {\n                fclose(ftestexist);\n                do\n                {\n                    char answer[128];\n                    int ret;\n\n                    printf(\"The file %s exists. Overwrite ? [y]es, [n]o, [A]ll: \",write_filename);\n                    ret = scanf(\"%1s\",answer);\n                    if (ret != 1)\n                    {\n                       exit(EXIT_FAILURE);\n                    }\n                    rep = answer[0] ;\n                    if ((rep>='a') && (rep<='z'))\n                        rep -= 0x20;\n                }\n                while ((rep!='Y') && (rep!='N') && (rep!='A'));\n            }\n\n            if (rep == 'N')\n                skip = 1;\n\n            if (rep == 'A')\n                *popt_overwrite=1;\n        }\n\n        if ((skip==0) && (err==UNZ_OK))\n        {\n            fout=fopen64(write_filename,\"wb\");\n\n            /* some zipfile don't contain directory alone before file */\n            if ((fout==NULL) && ((*popt_extract_without_path)==0) &&\n                                (filename_withoutpath!=(char*)filename_inzip))\n            {\n                char c=*(filename_withoutpath-1);\n                *(filename_withoutpath-1)='\\0';\n                makedir(write_filename);\n                *(filename_withoutpath-1)=c;\n                fout=fopen64(write_filename,\"wb\");\n            }\n\n            if (fout==NULL)\n            {\n                printf(\"error opening %s\\n\",write_filename);\n            }\n        }\n\n        if (fout!=NULL)\n        {\n            printf(\" extracting: %s\\n\",write_filename);\n\n            do\n            {\n                err = unzReadCurrentFile(uf,buf,size_buf);\n                if (err<0)\n                {\n                    printf(\"error %d with zipfile in unzReadCurrentFile\\n\",err);\n                    break;\n                }\n                if (err>0)\n                    if (fwrite(buf,err,1,fout)!=1)\n                    {\n                        printf(\"error in writing extracted file\\n\");\n                        err=UNZ_ERRNO;\n                        break;\n                    }\n            }\n            while (err>0);\n            if (fout)\n                    fclose(fout);\n\n            if (err==0)\n                change_file_date(write_filename,file_info.dosDate,\n                                 file_info.tmu_date);\n        }\n\n        if (err==UNZ_OK)\n        {\n            err = unzCloseCurrentFile (uf);\n            if (err!=UNZ_OK)\n            {\n                printf(\"error %d with zipfile in unzCloseCurrentFile\\n\",err);\n            }\n        }\n        else\n            unzCloseCurrentFile(uf); /* don't lose the error */\n    }\n\n    free(buf);\n    return err;\n}\n\n\nint do_extract(uf,opt_extract_without_path,opt_overwrite,password)\n    unzFile uf;\n    int opt_extract_without_path;\n    int opt_overwrite;\n    const char* password;\n{\n    uLong i;\n    unz_global_info64 gi;\n    int err;\n    FILE* fout=NULL;\n\n    err = unzGetGlobalInfo64(uf,&gi);\n    if (err!=UNZ_OK)\n        printf(\"error %d with zipfile in unzGetGlobalInfo \\n\",err);\n\n    for (i=0;i<gi.number_entry;i++)\n    {\n        if (do_extract_currentfile(uf,&opt_extract_without_path,\n                                      &opt_overwrite,\n                                      password) != UNZ_OK)\n            break;\n\n        if ((i+1)<gi.number_entry)\n        {\n            err = unzGoToNextFile(uf);\n            if (err!=UNZ_OK)\n            {\n                printf(\"error %d with zipfile in unzGoToNextFile\\n\",err);\n                break;\n            }\n        }\n    }\n\n    return 0;\n}\n\nint do_extract_onefile(uf,filename,opt_extract_without_path,opt_overwrite,password)\n    unzFile uf;\n    const char* filename;\n    int opt_extract_without_path;\n    int opt_overwrite;\n    const char* password;\n{\n    int err = UNZ_OK;\n    if (unzLocateFile(uf,filename,CASESENSITIVITY)!=UNZ_OK)\n    {\n        printf(\"file %s not found in the zipfile\\n\",filename);\n        return 2;\n    }\n\n    if (do_extract_currentfile(uf,&opt_extract_without_path,\n                                      &opt_overwrite,\n                                      password) == UNZ_OK)\n        return 0;\n    else\n        return 1;\n}\n\n\nint main(argc,argv)\n    int argc;\n    char *argv[];\n{\n    const char *zipfilename=NULL;\n    const char *filename_to_extract=NULL;\n    const char *password=NULL;\n    char filename_try[MAXFILENAME+16] = \"\";\n    int i;\n    int ret_value=0;\n    int opt_do_list=0;\n    int opt_do_extract=1;\n    int opt_do_extract_withoutpath=0;\n    int opt_overwrite=0;\n    int opt_extractdir=0;\n    const char *dirname=NULL;\n    unzFile uf=NULL;\n\n    do_banner();\n    if (argc==1)\n    {\n        do_help();\n        return 0;\n    }\n    else\n    {\n        for (i=1;i<argc;i++)\n        {\n            if ((*argv[i])=='-')\n            {\n                const char *p=argv[i]+1;\n\n                while ((*p)!='\\0')\n                {\n                    char c=*(p++);;\n                    if ((c=='l') || (c=='L'))\n                        opt_do_list = 1;\n                    if ((c=='v') || (c=='V'))\n                        opt_do_list = 1;\n                    if ((c=='x') || (c=='X'))\n                        opt_do_extract = 1;\n                    if ((c=='e') || (c=='E'))\n                        opt_do_extract = opt_do_extract_withoutpath = 1;\n                    if ((c=='o') || (c=='O'))\n                        opt_overwrite=1;\n                    if ((c=='d') || (c=='D'))\n                    {\n                        opt_extractdir=1;\n                        dirname=argv[i+1];\n                    }\n\n                    if (((c=='p') || (c=='P')) && (i+1<argc))\n                    {\n                        password=argv[i+1];\n                        i++;\n                    }\n                }\n            }\n            else\n            {\n                if (zipfilename == NULL)\n                    zipfilename = argv[i];\n                else if ((filename_to_extract==NULL) && (!opt_extractdir))\n                        filename_to_extract = argv[i] ;\n            }\n        }\n    }\n\n    if (zipfilename!=NULL)\n    {\n\n#        ifdef USEWIN32IOAPI\n        zlib_filefunc64_def ffunc;\n#        endif\n\n        strncpy(filename_try, zipfilename,MAXFILENAME-1);\n        /* strncpy doesnt append the trailing NULL, of the string is too long. */\n        filename_try[ MAXFILENAME ] = '\\0';\n\n#        ifdef USEWIN32IOAPI\n        fill_win32_filefunc64A(&ffunc);\n        uf = unzOpen2_64(zipfilename,&ffunc);\n#        else\n        uf = unzOpen64(zipfilename);\n#        endif\n        if (uf==NULL)\n        {\n            strcat(filename_try,\".zip\");\n#            ifdef USEWIN32IOAPI\n            uf = unzOpen2_64(filename_try,&ffunc);\n#            else\n            uf = unzOpen64(filename_try);\n#            endif\n        }\n    }\n\n    if (uf==NULL)\n    {\n        printf(\"Cannot open %s or %s.zip\\n\",zipfilename,zipfilename);\n        return 1;\n    }\n    printf(\"%s opened\\n\",filename_try);\n\n    if (opt_do_list==1)\n        ret_value = do_list(uf);\n    else if (opt_do_extract==1)\n    {\n#ifdef _WIN32\n        if (opt_extractdir && _chdir(dirname))\n#else\n        if (opt_extractdir && chdir(dirname))\n#endif\n        {\n          printf(\"Error changing into %s, aborting\\n\", dirname);\n          exit(-1);\n        }\n\n        if (filename_to_extract == NULL)\n            ret_value = do_extract(uf, opt_do_extract_withoutpath, opt_overwrite, password);\n        else\n            ret_value = do_extract_onefile(uf, filename_to_extract, opt_do_extract_withoutpath, opt_overwrite, password);\n    }\n\n    unzClose(uf);\n\n    return ret_value;\n}\n"
  },
  {
    "path": "external/zlib/contrib/minizip/minizip.c",
    "content": "/*\n   minizip.c\n   Version 1.1, February 14h, 2010\n   sample part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Modifications of Unzip for Zip64\n         Copyright (C) 2007-2008 Even Rouault\n\n         Modifications for Zip64 support on both zip and unzip\n         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )\n*/\n\n\n#ifndef _WIN32\n        #ifndef __USE_FILE_OFFSET64\n                #define __USE_FILE_OFFSET64\n        #endif\n        #ifndef __USE_LARGEFILE64\n                #define __USE_LARGEFILE64\n        #endif\n        #ifndef _LARGEFILE64_SOURCE\n                #define _LARGEFILE64_SOURCE\n        #endif\n        #ifndef _FILE_OFFSET_BIT\n                #define _FILE_OFFSET_BIT 64\n        #endif\n#endif\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <time.h>\n#include <errno.h>\n#include <fcntl.h>\n\n#ifdef unix\n# include <unistd.h>\n# include <utime.h>\n# include <sys/types.h>\n# include <sys/stat.h>\n#else\n# include <direct.h>\n# include <io.h>\n#endif\n\n#include \"zip.h\"\n\n#ifdef _WIN32\n        #define USEWIN32IOAPI\n        #include \"iowin32.h\"\n#endif\n\n\n\n#define WRITEBUFFERSIZE (16384)\n#define MAXFILENAME (256)\n\n#ifdef _WIN32\nuLong filetime(f, tmzip, dt)\n    char *f;                /* name of file to get info on */\n    tm_zip *tmzip;             /* return value: access, modific. and creation times */\n    uLong *dt;             /* dostime */\n{\n  int ret = 0;\n  {\n      FILETIME ftLocal;\n      HANDLE hFind;\n      WIN32_FIND_DATAA ff32;\n\n      hFind = FindFirstFileA(f,&ff32);\n      if (hFind != INVALID_HANDLE_VALUE)\n      {\n        FileTimeToLocalFileTime(&(ff32.ftLastWriteTime),&ftLocal);\n        FileTimeToDosDateTime(&ftLocal,((LPWORD)dt)+1,((LPWORD)dt)+0);\n        FindClose(hFind);\n        ret = 1;\n      }\n  }\n  return ret;\n}\n#else\n#ifdef unix\nuLong filetime(f, tmzip, dt)\n    char *f;               /* name of file to get info on */\n    tm_zip *tmzip;         /* return value: access, modific. and creation times */\n    uLong *dt;             /* dostime */\n{\n  int ret=0;\n  struct stat s;        /* results of stat() */\n  struct tm* filedate;\n  time_t tm_t=0;\n\n  if (strcmp(f,\"-\")!=0)\n  {\n    char name[MAXFILENAME+1];\n    int len = strlen(f);\n    if (len > MAXFILENAME)\n      len = MAXFILENAME;\n\n    strncpy(name, f,MAXFILENAME-1);\n    /* strncpy doesnt append the trailing NULL, of the string is too long. */\n    name[ MAXFILENAME ] = '\\0';\n\n    if (name[len - 1] == '/')\n      name[len - 1] = '\\0';\n    /* not all systems allow stat'ing a file with / appended */\n    if (stat(name,&s)==0)\n    {\n      tm_t = s.st_mtime;\n      ret = 1;\n    }\n  }\n  filedate = localtime(&tm_t);\n\n  tmzip->tm_sec  = filedate->tm_sec;\n  tmzip->tm_min  = filedate->tm_min;\n  tmzip->tm_hour = filedate->tm_hour;\n  tmzip->tm_mday = filedate->tm_mday;\n  tmzip->tm_mon  = filedate->tm_mon ;\n  tmzip->tm_year = filedate->tm_year;\n\n  return ret;\n}\n#else\nuLong filetime(f, tmzip, dt)\n    char *f;                /* name of file to get info on */\n    tm_zip *tmzip;             /* return value: access, modific. and creation times */\n    uLong *dt;             /* dostime */\n{\n    return 0;\n}\n#endif\n#endif\n\n\n\n\nint check_exist_file(filename)\n    const char* filename;\n{\n    FILE* ftestexist;\n    int ret = 1;\n    ftestexist = fopen64(filename,\"rb\");\n    if (ftestexist==NULL)\n        ret = 0;\n    else\n        fclose(ftestexist);\n    return ret;\n}\n\nvoid do_banner()\n{\n    printf(\"MiniZip 1.1, demo of zLib + MiniZip64 package, written by Gilles Vollant\\n\");\n    printf(\"more info on MiniZip at http://www.winimage.com/zLibDll/minizip.html\\n\\n\");\n}\n\nvoid do_help()\n{\n    printf(\"Usage : minizip [-o] [-a] [-0 to -9] [-p password] [-j] file.zip [files_to_add]\\n\\n\" \\\n           \"  -o  Overwrite existing file.zip\\n\" \\\n           \"  -a  Append to existing file.zip\\n\" \\\n           \"  -0  Store only\\n\" \\\n           \"  -1  Compress faster\\n\" \\\n           \"  -9  Compress better\\n\\n\" \\\n           \"  -j  exclude path. store only the file name.\\n\\n\");\n}\n\n/* calculate the CRC32 of a file,\n   because to encrypt a file, we need known the CRC32 of the file before */\nint getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigned long* result_crc)\n{\n   unsigned long calculate_crc=0;\n   int err=ZIP_OK;\n   FILE * fin = fopen64(filenameinzip,\"rb\");\n   unsigned long size_read = 0;\n   unsigned long total_read = 0;\n   if (fin==NULL)\n   {\n       err = ZIP_ERRNO;\n   }\n\n    if (err == ZIP_OK)\n        do\n        {\n            err = ZIP_OK;\n            size_read = (int)fread(buf,1,size_buf,fin);\n            if (size_read < size_buf)\n                if (feof(fin)==0)\n            {\n                printf(\"error in reading %s\\n\",filenameinzip);\n                err = ZIP_ERRNO;\n            }\n\n            if (size_read>0)\n                calculate_crc = crc32(calculate_crc,buf,size_read);\n            total_read += size_read;\n\n        } while ((err == ZIP_OK) && (size_read>0));\n\n    if (fin)\n        fclose(fin);\n\n    *result_crc=calculate_crc;\n    printf(\"file %s crc %lx\\n\", filenameinzip, calculate_crc);\n    return err;\n}\n\nint isLargeFile(const char* filename)\n{\n  int largeFile = 0;\n  ZPOS64_T pos = 0;\n  FILE* pFile = fopen64(filename, \"rb\");\n\n  if(pFile != NULL)\n  {\n    int n = fseeko64(pFile, 0, SEEK_END);\n\n    pos = ftello64(pFile);\n\n                printf(\"File : %s is %lld bytes\\n\", filename, pos);\n\n    if(pos >= 0xffffffff)\n     largeFile = 1;\n\n                fclose(pFile);\n  }\n\n return largeFile;\n}\n\nint main(argc,argv)\n    int argc;\n    char *argv[];\n{\n    int i;\n    int opt_overwrite=0;\n    int opt_compress_level=Z_DEFAULT_COMPRESSION;\n    int opt_exclude_path=0;\n    int zipfilenamearg = 0;\n    char filename_try[MAXFILENAME+16];\n    int zipok;\n    int err=0;\n    int size_buf=0;\n    void* buf=NULL;\n    const char* password=NULL;\n\n\n    do_banner();\n    if (argc==1)\n    {\n        do_help();\n        return 0;\n    }\n    else\n    {\n        for (i=1;i<argc;i++)\n        {\n            if ((*argv[i])=='-')\n            {\n                const char *p=argv[i]+1;\n\n                while ((*p)!='\\0')\n                {\n                    char c=*(p++);;\n                    if ((c=='o') || (c=='O'))\n                        opt_overwrite = 1;\n                    if ((c=='a') || (c=='A'))\n                        opt_overwrite = 2;\n                    if ((c>='0') && (c<='9'))\n                        opt_compress_level = c-'0';\n                    if ((c=='j') || (c=='J'))\n                        opt_exclude_path = 1;\n\n                    if (((c=='p') || (c=='P')) && (i+1<argc))\n                    {\n                        password=argv[i+1];\n                        i++;\n                    }\n                }\n            }\n            else\n            {\n                if (zipfilenamearg == 0)\n                {\n                    zipfilenamearg = i ;\n                }\n            }\n        }\n    }\n\n    size_buf = WRITEBUFFERSIZE;\n    buf = (void*)malloc(size_buf);\n    if (buf==NULL)\n    {\n        printf(\"Error allocating memory\\n\");\n        return ZIP_INTERNALERROR;\n    }\n\n    if (zipfilenamearg==0)\n    {\n        zipok=0;\n    }\n    else\n    {\n        int i,len;\n        int dot_found=0;\n\n        zipok = 1 ;\n        strncpy(filename_try, argv[zipfilenamearg],MAXFILENAME-1);\n        /* strncpy doesnt append the trailing NULL, of the string is too long. */\n        filename_try[ MAXFILENAME ] = '\\0';\n\n        len=(int)strlen(filename_try);\n        for (i=0;i<len;i++)\n            if (filename_try[i]=='.')\n                dot_found=1;\n\n        if (dot_found==0)\n            strcat(filename_try,\".zip\");\n\n        if (opt_overwrite==2)\n        {\n            /* if the file don't exist, we not append file */\n            if (check_exist_file(filename_try)==0)\n                opt_overwrite=1;\n        }\n        else\n        if (opt_overwrite==0)\n            if (check_exist_file(filename_try)!=0)\n            {\n                char rep=0;\n                do\n                {\n                    char answer[128];\n                    int ret;\n                    printf(\"The file %s exists. Overwrite ? [y]es, [n]o, [a]ppend : \",filename_try);\n                    ret = scanf(\"%1s\",answer);\n                    if (ret != 1)\n                    {\n                       exit(EXIT_FAILURE);\n                    }\n                    rep = answer[0] ;\n                    if ((rep>='a') && (rep<='z'))\n                        rep -= 0x20;\n                }\n                while ((rep!='Y') && (rep!='N') && (rep!='A'));\n                if (rep=='N')\n                    zipok = 0;\n                if (rep=='A')\n                    opt_overwrite = 2;\n            }\n    }\n\n    if (zipok==1)\n    {\n        zipFile zf;\n        int errclose;\n#        ifdef USEWIN32IOAPI\n        zlib_filefunc64_def ffunc;\n        fill_win32_filefunc64A(&ffunc);\n        zf = zipOpen2_64(filename_try,(opt_overwrite==2) ? 2 : 0,NULL,&ffunc);\n#        else\n        zf = zipOpen64(filename_try,(opt_overwrite==2) ? 2 : 0);\n#        endif\n\n        if (zf == NULL)\n        {\n            printf(\"error opening %s\\n\",filename_try);\n            err= ZIP_ERRNO;\n        }\n        else\n            printf(\"creating %s\\n\",filename_try);\n\n        for (i=zipfilenamearg+1;(i<argc) && (err==ZIP_OK);i++)\n        {\n            if (!((((*(argv[i]))=='-') || ((*(argv[i]))=='/')) &&\n                  ((argv[i][1]=='o') || (argv[i][1]=='O') ||\n                   (argv[i][1]=='a') || (argv[i][1]=='A') ||\n                   (argv[i][1]=='p') || (argv[i][1]=='P') ||\n                   ((argv[i][1]>='0') || (argv[i][1]<='9'))) &&\n                  (strlen(argv[i]) == 2)))\n            {\n                FILE * fin;\n                int size_read;\n                const char* filenameinzip = argv[i];\n                const char *savefilenameinzip;\n                zip_fileinfo zi;\n                unsigned long crcFile=0;\n                int zip64 = 0;\n\n                zi.tmz_date.tm_sec = zi.tmz_date.tm_min = zi.tmz_date.tm_hour =\n                zi.tmz_date.tm_mday = zi.tmz_date.tm_mon = zi.tmz_date.tm_year = 0;\n                zi.dosDate = 0;\n                zi.internal_fa = 0;\n                zi.external_fa = 0;\n                filetime(filenameinzip,&zi.tmz_date,&zi.dosDate);\n\n/*\n                err = zipOpenNewFileInZip(zf,filenameinzip,&zi,\n                                 NULL,0,NULL,0,NULL / * comment * /,\n                                 (opt_compress_level != 0) ? Z_DEFLATED : 0,\n                                 opt_compress_level);\n*/\n                if ((password != NULL) && (err==ZIP_OK))\n                    err = getFileCrc(filenameinzip,buf,size_buf,&crcFile);\n\n                zip64 = isLargeFile(filenameinzip);\n\n                                                         /* The path name saved, should not include a leading slash. */\n               /*if it did, windows/xp and dynazip couldn't read the zip file. */\n                 savefilenameinzip = filenameinzip;\n                 while( savefilenameinzip[0] == '\\\\' || savefilenameinzip[0] == '/' )\n                 {\n                     savefilenameinzip++;\n                 }\n\n                 /*should the zip file contain any path at all?*/\n                 if( opt_exclude_path )\n                 {\n                     const char *tmpptr;\n                     const char *lastslash = 0;\n                     for( tmpptr = savefilenameinzip; *tmpptr; tmpptr++)\n                     {\n                         if( *tmpptr == '\\\\' || *tmpptr == '/')\n                         {\n                             lastslash = tmpptr;\n                         }\n                     }\n                     if( lastslash != NULL )\n                     {\n                         savefilenameinzip = lastslash+1; // base filename follows last slash.\n                     }\n                 }\n\n                 /**/\n                err = zipOpenNewFileInZip3_64(zf,savefilenameinzip,&zi,\n                                 NULL,0,NULL,0,NULL /* comment*/,\n                                 (opt_compress_level != 0) ? Z_DEFLATED : 0,\n                                 opt_compress_level,0,\n                                 /* -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, */\n                                 -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,\n                                 password,crcFile, zip64);\n\n                if (err != ZIP_OK)\n                    printf(\"error in opening %s in zipfile\\n\",filenameinzip);\n                else\n                {\n                    fin = fopen64(filenameinzip,\"rb\");\n                    if (fin==NULL)\n                    {\n                        err=ZIP_ERRNO;\n                        printf(\"error in opening %s for reading\\n\",filenameinzip);\n                    }\n                }\n\n                if (err == ZIP_OK)\n                    do\n                    {\n                        err = ZIP_OK;\n                        size_read = (int)fread(buf,1,size_buf,fin);\n                        if (size_read < size_buf)\n                            if (feof(fin)==0)\n                        {\n                            printf(\"error in reading %s\\n\",filenameinzip);\n                            err = ZIP_ERRNO;\n                        }\n\n                        if (size_read>0)\n                        {\n                            err = zipWriteInFileInZip (zf,buf,size_read);\n                            if (err<0)\n                            {\n                                printf(\"error in writing %s in the zipfile\\n\",\n                                                 filenameinzip);\n                            }\n\n                        }\n                    } while ((err == ZIP_OK) && (size_read>0));\n\n                if (fin)\n                    fclose(fin);\n\n                if (err<0)\n                    err=ZIP_ERRNO;\n                else\n                {\n                    err = zipCloseFileInZip(zf);\n                    if (err!=ZIP_OK)\n                        printf(\"error in closing %s in the zipfile\\n\",\n                                    filenameinzip);\n                }\n            }\n        }\n        errclose = zipClose(zf,NULL);\n        if (errclose != ZIP_OK)\n            printf(\"error in closing %s\\n\",filename_try);\n    }\n    else\n    {\n       do_help();\n    }\n\n    free(buf);\n    return 0;\n}\n"
  },
  {
    "path": "external/zlib/contrib/minizip/mztools.c",
    "content": "/*\n  Additional tools for Minizip\n  Code: Xavier Roche '2004\n  License: Same as ZLIB (www.gzip.org)\n*/\n\n/* Code */\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include \"zlib.h\"\n#include \"unzip.h\"\n\n#define READ_8(adr)  ((unsigned char)*(adr))\n#define READ_16(adr) ( READ_8(adr) | (READ_8(adr+1) << 8) )\n#define READ_32(adr) ( READ_16(adr) | (READ_16((adr)+2) << 16) )\n\n#define WRITE_8(buff, n) do { \\\n  *((unsigned char*)(buff)) = (unsigned char) ((n) & 0xff); \\\n} while(0)\n#define WRITE_16(buff, n) do { \\\n  WRITE_8((unsigned char*)(buff), n); \\\n  WRITE_8(((unsigned char*)(buff)) + 1, (n) >> 8); \\\n} while(0)\n#define WRITE_32(buff, n) do { \\\n  WRITE_16((unsigned char*)(buff), (n) & 0xffff); \\\n  WRITE_16((unsigned char*)(buff) + 2, (n) >> 16); \\\n} while(0)\n\nextern int ZEXPORT unzRepair(file, fileOut, fileOutTmp, nRecovered, bytesRecovered)\nconst char* file;\nconst char* fileOut;\nconst char* fileOutTmp;\nuLong* nRecovered;\nuLong* bytesRecovered;\n{\n  int err = Z_OK;\n  FILE* fpZip = fopen(file, \"rb\");\n  FILE* fpOut = fopen(fileOut, \"wb\");\n  FILE* fpOutCD = fopen(fileOutTmp, \"wb\");\n  if (fpZip != NULL &&  fpOut != NULL) {\n    int entries = 0;\n    uLong totalBytes = 0;\n    char header[30];\n    char filename[256];\n    char extra[1024];\n    int offset = 0;\n    int offsetCD = 0;\n    while ( fread(header, 1, 30, fpZip) == 30 ) {\n      int currentOffset = offset;\n\n      /* File entry */\n      if (READ_32(header) == 0x04034b50) {\n        unsigned int version = READ_16(header + 4);\n        unsigned int gpflag = READ_16(header + 6);\n        unsigned int method = READ_16(header + 8);\n        unsigned int filetime = READ_16(header + 10);\n        unsigned int filedate = READ_16(header + 12);\n        unsigned int crc = READ_32(header + 14); /* crc */\n        unsigned int cpsize = READ_32(header + 18); /* compressed size */\n        unsigned int uncpsize = READ_32(header + 22); /* uncompressed sz */\n        unsigned int fnsize = READ_16(header + 26); /* file name length */\n        unsigned int extsize = READ_16(header + 28); /* extra field length */\n        filename[0] = extra[0] = '\\0';\n\n        /* Header */\n        if (fwrite(header, 1, 30, fpOut) == 30) {\n          offset += 30;\n        } else {\n          err = Z_ERRNO;\n          break;\n        }\n\n        /* Filename */\n        if (fnsize > 0) {\n          if (fread(filename, 1, fnsize, fpZip) == fnsize) {\n            if (fwrite(filename, 1, fnsize, fpOut) == fnsize) {\n              offset += fnsize;\n            } else {\n              err = Z_ERRNO;\n              break;\n            }\n          } else {\n            err = Z_ERRNO;\n            break;\n          }\n        } else {\n          err = Z_STREAM_ERROR;\n          break;\n        }\n\n        /* Extra field */\n        if (extsize > 0) {\n          if (fread(extra, 1, extsize, fpZip) == extsize) {\n            if (fwrite(extra, 1, extsize, fpOut) == extsize) {\n              offset += extsize;\n            } else {\n              err = Z_ERRNO;\n              break;\n            }\n          } else {\n            err = Z_ERRNO;\n            break;\n          }\n        }\n\n        /* Data */\n        {\n          int dataSize = cpsize;\n          if (dataSize == 0) {\n            dataSize = uncpsize;\n          }\n          if (dataSize > 0) {\n            char* data = malloc(dataSize);\n            if (data != NULL) {\n              if ((int)fread(data, 1, dataSize, fpZip) == dataSize) {\n                if ((int)fwrite(data, 1, dataSize, fpOut) == dataSize) {\n                  offset += dataSize;\n                  totalBytes += dataSize;\n                } else {\n                  err = Z_ERRNO;\n                }\n              } else {\n                err = Z_ERRNO;\n              }\n              free(data);\n              if (err != Z_OK) {\n                break;\n              }\n            } else {\n              err = Z_MEM_ERROR;\n              break;\n            }\n          }\n        }\n\n        /* Central directory entry */\n        {\n          char header[46];\n          char* comment = \"\";\n          int comsize = (int) strlen(comment);\n          WRITE_32(header, 0x02014b50);\n          WRITE_16(header + 4, version);\n          WRITE_16(header + 6, version);\n          WRITE_16(header + 8, gpflag);\n          WRITE_16(header + 10, method);\n          WRITE_16(header + 12, filetime);\n          WRITE_16(header + 14, filedate);\n          WRITE_32(header + 16, crc);\n          WRITE_32(header + 20, cpsize);\n          WRITE_32(header + 24, uncpsize);\n          WRITE_16(header + 28, fnsize);\n          WRITE_16(header + 30, extsize);\n          WRITE_16(header + 32, comsize);\n          WRITE_16(header + 34, 0);     /* disk # */\n          WRITE_16(header + 36, 0);     /* int attrb */\n          WRITE_32(header + 38, 0);     /* ext attrb */\n          WRITE_32(header + 42, currentOffset);\n          /* Header */\n          if (fwrite(header, 1, 46, fpOutCD) == 46) {\n            offsetCD += 46;\n\n            /* Filename */\n            if (fnsize > 0) {\n              if (fwrite(filename, 1, fnsize, fpOutCD) == fnsize) {\n                offsetCD += fnsize;\n              } else {\n                err = Z_ERRNO;\n                break;\n              }\n            } else {\n              err = Z_STREAM_ERROR;\n              break;\n            }\n\n            /* Extra field */\n            if (extsize > 0) {\n              if (fwrite(extra, 1, extsize, fpOutCD) == extsize) {\n                offsetCD += extsize;\n              } else {\n                err = Z_ERRNO;\n                break;\n              }\n            }\n\n            /* Comment field */\n            if (comsize > 0) {\n              if ((int)fwrite(comment, 1, comsize, fpOutCD) == comsize) {\n                offsetCD += comsize;\n              } else {\n                err = Z_ERRNO;\n                break;\n              }\n            }\n\n\n          } else {\n            err = Z_ERRNO;\n            break;\n          }\n        }\n\n        /* Success */\n        entries++;\n\n      } else {\n        break;\n      }\n    }\n\n    /* Final central directory  */\n    {\n      int entriesZip = entries;\n      char header[22];\n      char* comment = \"\"; // \"ZIP File recovered by zlib/minizip/mztools\";\n      int comsize = (int) strlen(comment);\n      if (entriesZip > 0xffff) {\n        entriesZip = 0xffff;\n      }\n      WRITE_32(header, 0x06054b50);\n      WRITE_16(header + 4, 0);    /* disk # */\n      WRITE_16(header + 6, 0);    /* disk # */\n      WRITE_16(header + 8, entriesZip);   /* hack */\n      WRITE_16(header + 10, entriesZip);  /* hack */\n      WRITE_32(header + 12, offsetCD);    /* size of CD */\n      WRITE_32(header + 16, offset);      /* offset to CD */\n      WRITE_16(header + 20, comsize);     /* comment */\n\n      /* Header */\n      if (fwrite(header, 1, 22, fpOutCD) == 22) {\n\n        /* Comment field */\n        if (comsize > 0) {\n          if ((int)fwrite(comment, 1, comsize, fpOutCD) != comsize) {\n            err = Z_ERRNO;\n          }\n        }\n\n      } else {\n        err = Z_ERRNO;\n      }\n    }\n\n    /* Final merge (file + central directory) */\n    fclose(fpOutCD);\n    if (err == Z_OK) {\n      fpOutCD = fopen(fileOutTmp, \"rb\");\n      if (fpOutCD != NULL) {\n        int nRead;\n        char buffer[8192];\n        while ( (nRead = (int)fread(buffer, 1, sizeof(buffer), fpOutCD)) > 0) {\n          if ((int)fwrite(buffer, 1, nRead, fpOut) != nRead) {\n            err = Z_ERRNO;\n            break;\n          }\n        }\n        fclose(fpOutCD);\n      }\n    }\n\n    /* Close */\n    fclose(fpZip);\n    fclose(fpOut);\n\n    /* Wipe temporary file */\n    (void)remove(fileOutTmp);\n\n    /* Number of recovered entries */\n    if (err == Z_OK) {\n      if (nRecovered != NULL) {\n        *nRecovered = entries;\n      }\n      if (bytesRecovered != NULL) {\n        *bytesRecovered = totalBytes;\n      }\n    }\n  } else {\n    err = Z_STREAM_ERROR;\n  }\n  return err;\n}\n"
  },
  {
    "path": "external/zlib/contrib/minizip/mztools.h",
    "content": "/*\n  Additional tools for Minizip\n  Code: Xavier Roche '2004\n  License: Same as ZLIB (www.gzip.org)\n*/\n\n#ifndef _zip_tools_H\n#define _zip_tools_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef _ZLIB_H\n#include \"zlib.h\"\n#endif\n\n#include \"unzip.h\"\n\n/* Repair a ZIP file (missing central directory)\n   file: file to recover\n   fileOut: output file after recovery\n   fileOutTmp: temporary file name used for recovery\n*/\nextern int ZEXPORT unzRepair(const char* file,\n                             const char* fileOut,\n                             const char* fileOutTmp,\n                             uLong* nRecovered,\n                             uLong* bytesRecovered);\n\n#endif\n"
  },
  {
    "path": "external/zlib/contrib/minizip/unzip.c",
    "content": "/* unzip.c -- IO for uncompress .zip files using zlib\n   Version 1.1, February 14h, 2010\n   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Modifications of Unzip for Zip64\n         Copyright (C) 2007-2008 Even Rouault\n\n         Modifications for Zip64 support on both zip and unzip\n         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )\n\n         For more info read MiniZip_info.txt\n\n\n  ------------------------------------------------------------------------------------\n  Decryption code comes from crypt.c by Info-ZIP but has been greatly reduced in terms of\n  compatibility with older software. The following is from the original crypt.c.\n  Code woven in by Terry Thorsen 1/2003.\n\n  Copyright (c) 1990-2000 Info-ZIP.  All rights reserved.\n\n  See the accompanying file LICENSE, version 2000-Apr-09 or later\n  (the contents of which are also included in zip.h) for terms of use.\n  If, for some reason, all these files are missing, the Info-ZIP license\n  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html\n\n        crypt.c (full version) by Info-ZIP.      Last revised:  [see crypt.h]\n\n  The encryption/decryption parts of this source code (as opposed to the\n  non-echoing password parts) were originally written in Europe.  The\n  whole source package can be freely distributed, including from the USA.\n  (Prior to January 2000, re-export from the US was a violation of US law.)\n\n        This encryption code is a direct transcription of the algorithm from\n  Roger Schlafly, described by Phil Katz in the file appnote.txt.  This\n  file (appnote.txt) is distributed with the PKZIP program (even in the\n  version without encryption capabilities).\n\n        ------------------------------------------------------------------------------------\n\n        Changes in unzip.c\n\n        2007-2008 - Even Rouault - Addition of cpl_unzGetCurrentFileZStreamPos\n  2007-2008 - Even Rouault - Decoration of symbol names unz* -> cpl_unz*\n  2007-2008 - Even Rouault - Remove old C style function prototypes\n  2007-2008 - Even Rouault - Add unzip support for ZIP64\n\n        Copyright (C) 2007-2008 Even Rouault\n\n\n        Oct-2009 - Mathias Svensson - Removed cpl_* from symbol names (Even Rouault added them but since this is now moved to a new project (minizip64) I renamed them again).\n  Oct-2009 - Mathias Svensson - Fixed problem if uncompressed size was > 4G and compressed size was <4G\n                                should only read the compressed/uncompressed size from the Zip64 format if\n                                the size from normal header was 0xFFFFFFFF\n  Oct-2009 - Mathias Svensson - Applied some bug fixes from paches recived from Gilles Vollant\n        Oct-2009 - Mathias Svensson - Applied support to unzip files with compression mathod BZIP2 (bzip2 lib is required)\n                                Patch created by Daniel Borca\n\n  Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer\n\n  Copyright (C) 1998 - 2010 Gilles Vollant, Even Rouault, Mathias Svensson\n\n*/\n\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#ifndef NOUNCRYPT\n        #define NOUNCRYPT\n#endif\n\n#include \"zlib.h\"\n#include \"unzip.h\"\n\n#ifdef STDC\n#  include <stddef.h>\n#  include <string.h>\n#  include <stdlib.h>\n#endif\n#ifdef NO_ERRNO_H\n    extern int errno;\n#else\n#   include <errno.h>\n#endif\n\n\n#ifndef local\n#  define local static\n#endif\n/* compile with -Dlocal if your debugger can't find static symbols */\n\n\n#ifndef CASESENSITIVITYDEFAULT_NO\n#  if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES)\n#    define CASESENSITIVITYDEFAULT_NO\n#  endif\n#endif\n\n\n#ifndef UNZ_BUFSIZE\n#define UNZ_BUFSIZE (16384)\n#endif\n\n#ifndef UNZ_MAXFILENAMEINZIP\n#define UNZ_MAXFILENAMEINZIP (256)\n#endif\n\n#ifndef ALLOC\n# define ALLOC(size) (malloc(size))\n#endif\n#ifndef TRYFREE\n# define TRYFREE(p) {if (p) free(p);}\n#endif\n\n#define SIZECENTRALDIRITEM (0x2e)\n#define SIZEZIPLOCALHEADER (0x1e)\n\n\nconst char unz_copyright[] =\n   \" unzip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll\";\n\n/* unz_file_info_interntal contain internal info about a file in zipfile*/\ntypedef struct unz_file_info64_internal_s\n{\n    ZPOS64_T offset_curfile;/* relative offset of local header 8 bytes */\n} unz_file_info64_internal;\n\n\n/* file_in_zip_read_info_s contain internal information about a file in zipfile,\n    when reading and decompress it */\ntypedef struct\n{\n    char  *read_buffer;         /* internal buffer for compressed data */\n    z_stream stream;            /* zLib stream structure for inflate */\n\n#ifdef HAVE_BZIP2\n    bz_stream bstream;          /* bzLib stream structure for bziped */\n#endif\n\n    ZPOS64_T pos_in_zipfile;       /* position in byte on the zipfile, for fseek*/\n    uLong stream_initialised;   /* flag set if stream structure is initialised*/\n\n    ZPOS64_T offset_local_extrafield;/* offset of the local extra field */\n    uInt  size_local_extrafield;/* size of the local extra field */\n    ZPOS64_T pos_local_extrafield;   /* position in the local extra field in read*/\n    ZPOS64_T total_out_64;\n\n    uLong crc32;                /* crc32 of all data uncompressed */\n    uLong crc32_wait;           /* crc32 we must obtain after decompress all */\n    ZPOS64_T rest_read_compressed; /* number of byte to be decompressed */\n    ZPOS64_T rest_read_uncompressed;/*number of byte to be obtained after decomp*/\n    zlib_filefunc64_32_def z_filefunc;\n    voidpf filestream;        /* io structore of the zipfile */\n    uLong compression_method;   /* compression method (0==store) */\n    ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/\n    int   raw;\n} file_in_zip64_read_info_s;\n\n\n/* unz64_s contain internal information about the zipfile\n*/\ntypedef struct\n{\n    zlib_filefunc64_32_def z_filefunc;\n    int is64bitOpenFunction;\n    voidpf filestream;        /* io structore of the zipfile */\n    unz_global_info64 gi;       /* public global information */\n    ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/\n    ZPOS64_T num_file;             /* number of the current file in the zipfile*/\n    ZPOS64_T pos_in_central_dir;   /* pos of the current file in the central dir*/\n    ZPOS64_T current_file_ok;      /* flag about the usability of the current file*/\n    ZPOS64_T central_pos;          /* position of the beginning of the central dir*/\n\n    ZPOS64_T size_central_dir;     /* size of the central directory  */\n    ZPOS64_T offset_central_dir;   /* offset of start of central directory with\n                                   respect to the starting disk number */\n\n    unz_file_info64 cur_file_info; /* public info about the current file in zip*/\n    unz_file_info64_internal cur_file_info_internal; /* private info about it*/\n    file_in_zip64_read_info_s* pfile_in_zip_read; /* structure about the current\n                                        file if we are decompressing it */\n    int encrypted;\n\n    int isZip64;\n\n#    ifndef NOUNCRYPT\n    unsigned long keys[3];     /* keys defining the pseudo-random sequence */\n    const unsigned long* pcrc_32_tab;\n#    endif\n} unz64_s;\n\n\n#ifndef NOUNCRYPT\n#include \"crypt.h\"\n#endif\n\n/* ===========================================================================\n     Read a byte from a gz_stream; update next_in and avail_in. Return EOF\n   for end of file.\n   IN assertion: the stream s has been sucessfully opened for reading.\n*/\n\n\nlocal int unz64local_getByte OF((\n    const zlib_filefunc64_32_def* pzlib_filefunc_def,\n    voidpf filestream,\n    int *pi));\n\nlocal int unz64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int *pi)\n{\n    unsigned char c;\n    int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1);\n    if (err==1)\n    {\n        *pi = (int)c;\n        return UNZ_OK;\n    }\n    else\n    {\n        if (ZERROR64(*pzlib_filefunc_def,filestream))\n            return UNZ_ERRNO;\n        else\n            return UNZ_EOF;\n    }\n}\n\n\n/* ===========================================================================\n   Reads a long in LSB order from the given gz_stream. Sets\n*/\nlocal int unz64local_getShort OF((\n    const zlib_filefunc64_32_def* pzlib_filefunc_def,\n    voidpf filestream,\n    uLong *pX));\n\nlocal int unz64local_getShort (const zlib_filefunc64_32_def* pzlib_filefunc_def,\n                             voidpf filestream,\n                             uLong *pX)\n{\n    uLong x ;\n    int i = 0;\n    int err;\n\n    err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x = (uLong)i;\n\n    if (err==UNZ_OK)\n        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x |= ((uLong)i)<<8;\n\n    if (err==UNZ_OK)\n        *pX = x;\n    else\n        *pX = 0;\n    return err;\n}\n\nlocal int unz64local_getLong OF((\n    const zlib_filefunc64_32_def* pzlib_filefunc_def,\n    voidpf filestream,\n    uLong *pX));\n\nlocal int unz64local_getLong (const zlib_filefunc64_32_def* pzlib_filefunc_def,\n                            voidpf filestream,\n                            uLong *pX)\n{\n    uLong x ;\n    int i = 0;\n    int err;\n\n    err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x = (uLong)i;\n\n    if (err==UNZ_OK)\n        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x |= ((uLong)i)<<8;\n\n    if (err==UNZ_OK)\n        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x |= ((uLong)i)<<16;\n\n    if (err==UNZ_OK)\n        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x += ((uLong)i)<<24;\n\n    if (err==UNZ_OK)\n        *pX = x;\n    else\n        *pX = 0;\n    return err;\n}\n\nlocal int unz64local_getLong64 OF((\n    const zlib_filefunc64_32_def* pzlib_filefunc_def,\n    voidpf filestream,\n    ZPOS64_T *pX));\n\n\nlocal int unz64local_getLong64 (const zlib_filefunc64_32_def* pzlib_filefunc_def,\n                            voidpf filestream,\n                            ZPOS64_T *pX)\n{\n    ZPOS64_T x ;\n    int i = 0;\n    int err;\n\n    err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x = (ZPOS64_T)i;\n\n    if (err==UNZ_OK)\n        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x |= ((ZPOS64_T)i)<<8;\n\n    if (err==UNZ_OK)\n        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x |= ((ZPOS64_T)i)<<16;\n\n    if (err==UNZ_OK)\n        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x |= ((ZPOS64_T)i)<<24;\n\n    if (err==UNZ_OK)\n        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x |= ((ZPOS64_T)i)<<32;\n\n    if (err==UNZ_OK)\n        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x |= ((ZPOS64_T)i)<<40;\n\n    if (err==UNZ_OK)\n        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x |= ((ZPOS64_T)i)<<48;\n\n    if (err==UNZ_OK)\n        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x |= ((ZPOS64_T)i)<<56;\n\n    if (err==UNZ_OK)\n        *pX = x;\n    else\n        *pX = 0;\n    return err;\n}\n\n/* My own strcmpi / strcasecmp */\nlocal int strcmpcasenosensitive_internal (const char* fileName1, const char* fileName2)\n{\n    for (;;)\n    {\n        char c1=*(fileName1++);\n        char c2=*(fileName2++);\n        if ((c1>='a') && (c1<='z'))\n            c1 -= 0x20;\n        if ((c2>='a') && (c2<='z'))\n            c2 -= 0x20;\n        if (c1=='\\0')\n            return ((c2=='\\0') ? 0 : -1);\n        if (c2=='\\0')\n            return 1;\n        if (c1<c2)\n            return -1;\n        if (c1>c2)\n            return 1;\n    }\n}\n\n\n#ifdef  CASESENSITIVITYDEFAULT_NO\n#define CASESENSITIVITYDEFAULTVALUE 2\n#else\n#define CASESENSITIVITYDEFAULTVALUE 1\n#endif\n\n#ifndef STRCMPCASENOSENTIVEFUNCTION\n#define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal\n#endif\n\n/*\n   Compare two filename (fileName1,fileName2).\n   If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)\n   If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi\n                                                                or strcasecmp)\n   If iCaseSenisivity = 0, case sensitivity is defaut of your operating system\n        (like 1 on Unix, 2 on Windows)\n\n*/\nextern int ZEXPORT unzStringFileNameCompare (const char*  fileName1,\n                                                 const char*  fileName2,\n                                                 int iCaseSensitivity)\n\n{\n    if (iCaseSensitivity==0)\n        iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE;\n\n    if (iCaseSensitivity==1)\n        return strcmp(fileName1,fileName2);\n\n    return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2);\n}\n\n#ifndef BUFREADCOMMENT\n#define BUFREADCOMMENT (0x400)\n#endif\n\n/*\n  Locate the Central directory of a zipfile (at the end, just before\n    the global comment)\n*/\nlocal ZPOS64_T unz64local_SearchCentralDir OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));\nlocal ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)\n{\n    unsigned char* buf;\n    ZPOS64_T uSizeFile;\n    ZPOS64_T uBackRead;\n    ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */\n    ZPOS64_T uPosFound=0;\n\n    if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)\n        return 0;\n\n\n    uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);\n\n    if (uMaxBack>uSizeFile)\n        uMaxBack = uSizeFile;\n\n    buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);\n    if (buf==NULL)\n        return 0;\n\n    uBackRead = 4;\n    while (uBackRead<uMaxBack)\n    {\n        uLong uReadSize;\n        ZPOS64_T uReadPos ;\n        int i;\n        if (uBackRead+BUFREADCOMMENT>uMaxBack)\n            uBackRead = uMaxBack;\n        else\n            uBackRead+=BUFREADCOMMENT;\n        uReadPos = uSizeFile-uBackRead ;\n\n        uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?\n                     (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);\n        if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)\n            break;\n\n        if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)\n            break;\n\n        for (i=(int)uReadSize-3; (i--)>0;)\n            if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&\n                ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))\n            {\n                uPosFound = uReadPos+i;\n                break;\n            }\n\n        if (uPosFound!=0)\n            break;\n    }\n    TRYFREE(buf);\n    return uPosFound;\n}\n\n\n/*\n  Locate the Central directory 64 of a zipfile (at the end, just before\n    the global comment)\n*/\nlocal ZPOS64_T unz64local_SearchCentralDir64 OF((\n    const zlib_filefunc64_32_def* pzlib_filefunc_def,\n    voidpf filestream));\n\nlocal ZPOS64_T unz64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def,\n                                      voidpf filestream)\n{\n    unsigned char* buf;\n    ZPOS64_T uSizeFile;\n    ZPOS64_T uBackRead;\n    ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */\n    ZPOS64_T uPosFound=0;\n    uLong uL;\n                ZPOS64_T relativeOffset;\n\n    if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)\n        return 0;\n\n\n    uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);\n\n    if (uMaxBack>uSizeFile)\n        uMaxBack = uSizeFile;\n\n    buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);\n    if (buf==NULL)\n        return 0;\n\n    uBackRead = 4;\n    while (uBackRead<uMaxBack)\n    {\n        uLong uReadSize;\n        ZPOS64_T uReadPos;\n        int i;\n        if (uBackRead+BUFREADCOMMENT>uMaxBack)\n            uBackRead = uMaxBack;\n        else\n            uBackRead+=BUFREADCOMMENT;\n        uReadPos = uSizeFile-uBackRead ;\n\n        uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?\n                     (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);\n        if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)\n            break;\n\n        if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)\n            break;\n\n        for (i=(int)uReadSize-3; (i--)>0;)\n            if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&\n                ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))\n            {\n                uPosFound = uReadPos+i;\n                break;\n            }\n\n        if (uPosFound!=0)\n            break;\n    }\n    TRYFREE(buf);\n    if (uPosFound == 0)\n        return 0;\n\n    /* Zip64 end of central directory locator */\n    if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0)\n        return 0;\n\n    /* the signature, already checked */\n    if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)\n        return 0;\n\n    /* number of the disk with the start of the zip64 end of  central directory */\n    if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)\n        return 0;\n    if (uL != 0)\n        return 0;\n\n    /* relative offset of the zip64 end of central directory record */\n    if (unz64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=UNZ_OK)\n        return 0;\n\n    /* total number of disks */\n    if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)\n        return 0;\n    if (uL != 1)\n        return 0;\n\n    /* Goto end of central directory record */\n    if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0)\n        return 0;\n\n     /* the signature */\n    if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)\n        return 0;\n\n    if (uL != 0x06064b50)\n        return 0;\n\n    return relativeOffset;\n}\n\n/*\n  Open a Zip file. path contain the full pathname (by example,\n     on a Windows NT computer \"c:\\\\test\\\\zlib114.zip\" or on an Unix computer\n     \"zlib/zlib114.zip\".\n     If the zipfile cannot be opened (file doesn't exist or in not valid), the\n       return value is NULL.\n     Else, the return value is a unzFile Handle, usable with other function\n       of this unzip package.\n*/\nlocal unzFile unzOpenInternal (const void *path,\n                               zlib_filefunc64_32_def* pzlib_filefunc64_32_def,\n                               int is64bitOpenFunction)\n{\n    unz64_s us;\n    unz64_s *s;\n    ZPOS64_T central_pos;\n    uLong   uL;\n\n    uLong number_disk;          /* number of the current dist, used for\n                                   spaning ZIP, unsupported, always 0*/\n    uLong number_disk_with_CD;  /* number the the disk with central dir, used\n                                   for spaning ZIP, unsupported, always 0*/\n    ZPOS64_T number_entry_CD;      /* total number of entries in\n                                   the central dir\n                                   (same than number_entry on nospan) */\n\n    int err=UNZ_OK;\n\n    if (unz_copyright[0]!=' ')\n        return NULL;\n\n    us.z_filefunc.zseek32_file = NULL;\n    us.z_filefunc.ztell32_file = NULL;\n    if (pzlib_filefunc64_32_def==NULL)\n        fill_fopen64_filefunc(&us.z_filefunc.zfile_func64);\n    else\n        us.z_filefunc = *pzlib_filefunc64_32_def;\n    us.is64bitOpenFunction = is64bitOpenFunction;\n\n\n\n    us.filestream = ZOPEN64(us.z_filefunc,\n                                                 path,\n                                                 ZLIB_FILEFUNC_MODE_READ |\n                                                 ZLIB_FILEFUNC_MODE_EXISTING);\n    if (us.filestream==NULL)\n        return NULL;\n\n    central_pos = unz64local_SearchCentralDir64(&us.z_filefunc,us.filestream);\n    if (central_pos)\n    {\n        uLong uS;\n        ZPOS64_T uL64;\n\n        us.isZip64 = 1;\n\n        if (ZSEEK64(us.z_filefunc, us.filestream,\n                                      central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)\n        err=UNZ_ERRNO;\n\n        /* the signature, already checked */\n        if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        /* size of zip64 end of central directory record */\n        if (unz64local_getLong64(&us.z_filefunc, us.filestream,&uL64)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        /* version made by */\n        if (unz64local_getShort(&us.z_filefunc, us.filestream,&uS)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        /* version needed to extract */\n        if (unz64local_getShort(&us.z_filefunc, us.filestream,&uS)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        /* number of this disk */\n        if (unz64local_getLong(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        /* number of the disk with the start of the central directory */\n        if (unz64local_getLong(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        /* total number of entries in the central directory on this disk */\n        if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.gi.number_entry)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        /* total number of entries in the central directory */\n        if (unz64local_getLong64(&us.z_filefunc, us.filestream,&number_entry_CD)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        if ((number_entry_CD!=us.gi.number_entry) ||\n            (number_disk_with_CD!=0) ||\n            (number_disk!=0))\n            err=UNZ_BADZIPFILE;\n\n        /* size of the central directory */\n        if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.size_central_dir)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        /* offset of start of central directory with respect to the\n          starting disk number */\n        if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.offset_central_dir)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        us.gi.size_comment = 0;\n    }\n    else\n    {\n        central_pos = unz64local_SearchCentralDir(&us.z_filefunc,us.filestream);\n        if (central_pos==0)\n            err=UNZ_ERRNO;\n\n        us.isZip64 = 0;\n\n        if (ZSEEK64(us.z_filefunc, us.filestream,\n                                        central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)\n            err=UNZ_ERRNO;\n\n        /* the signature, already checked */\n        if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        /* number of this disk */\n        if (unz64local_getShort(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        /* number of the disk with the start of the central directory */\n        if (unz64local_getShort(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK)\n            err=UNZ_ERRNO;\n\n        /* total number of entries in the central dir on this disk */\n        if (unz64local_getShort(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)\n            err=UNZ_ERRNO;\n        us.gi.number_entry = uL;\n\n        /* total number of entries in the central dir */\n        if (unz64local_getShort(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)\n            err=UNZ_ERRNO;\n        number_entry_CD = uL;\n\n        if ((number_entry_CD!=us.gi.number_entry) ||\n            (number_disk_with_CD!=0) ||\n            (number_disk!=0))\n            err=UNZ_BADZIPFILE;\n\n        /* size of the central directory */\n        if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)\n            err=UNZ_ERRNO;\n        us.size_central_dir = uL;\n\n        /* offset of start of central directory with respect to the\n            starting disk number */\n        if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)\n            err=UNZ_ERRNO;\n        us.offset_central_dir = uL;\n\n        /* zipfile comment length */\n        if (unz64local_getShort(&us.z_filefunc, us.filestream,&us.gi.size_comment)!=UNZ_OK)\n            err=UNZ_ERRNO;\n    }\n\n    if ((central_pos<us.offset_central_dir+us.size_central_dir) &&\n        (err==UNZ_OK))\n        err=UNZ_BADZIPFILE;\n\n    if (err!=UNZ_OK)\n    {\n        ZCLOSE64(us.z_filefunc, us.filestream);\n        return NULL;\n    }\n\n    us.byte_before_the_zipfile = central_pos -\n                            (us.offset_central_dir+us.size_central_dir);\n    us.central_pos = central_pos;\n    us.pfile_in_zip_read = NULL;\n    us.encrypted = 0;\n\n\n    s=(unz64_s*)ALLOC(sizeof(unz64_s));\n    if( s != NULL)\n    {\n        *s=us;\n        unzGoToFirstFile((unzFile)s);\n    }\n    return (unzFile)s;\n}\n\n\nextern unzFile ZEXPORT unzOpen2 (const char *path,\n                                        zlib_filefunc_def* pzlib_filefunc32_def)\n{\n    if (pzlib_filefunc32_def != NULL)\n    {\n        zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;\n        fill_zlib_filefunc64_32_def_from_filefunc32(&zlib_filefunc64_32_def_fill,pzlib_filefunc32_def);\n        return unzOpenInternal(path, &zlib_filefunc64_32_def_fill, 0);\n    }\n    else\n        return unzOpenInternal(path, NULL, 0);\n}\n\nextern unzFile ZEXPORT unzOpen2_64 (const void *path,\n                                     zlib_filefunc64_def* pzlib_filefunc_def)\n{\n    if (pzlib_filefunc_def != NULL)\n    {\n        zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;\n        zlib_filefunc64_32_def_fill.zfile_func64 = *pzlib_filefunc_def;\n        zlib_filefunc64_32_def_fill.ztell32_file = NULL;\n        zlib_filefunc64_32_def_fill.zseek32_file = NULL;\n        return unzOpenInternal(path, &zlib_filefunc64_32_def_fill, 1);\n    }\n    else\n        return unzOpenInternal(path, NULL, 1);\n}\n\nextern unzFile ZEXPORT unzOpen (const char *path)\n{\n    return unzOpenInternal(path, NULL, 0);\n}\n\nextern unzFile ZEXPORT unzOpen64 (const void *path)\n{\n    return unzOpenInternal(path, NULL, 1);\n}\n\n/*\n  Close a ZipFile opened with unzipOpen.\n  If there is files inside the .Zip opened with unzipOpenCurrentFile (see later),\n    these files MUST be closed with unzipCloseCurrentFile before call unzipClose.\n  return UNZ_OK if there is no problem. */\nextern int ZEXPORT unzClose (unzFile file)\n{\n    unz64_s* s;\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n\n    if (s->pfile_in_zip_read!=NULL)\n        unzCloseCurrentFile(file);\n\n    ZCLOSE64(s->z_filefunc, s->filestream);\n    TRYFREE(s);\n    return UNZ_OK;\n}\n\n\n/*\n  Write info about the ZipFile in the *pglobal_info structure.\n  No preparation of the structure is needed\n  return UNZ_OK if there is no problem. */\nextern int ZEXPORT unzGetGlobalInfo64 (unzFile file, unz_global_info64* pglobal_info)\n{\n    unz64_s* s;\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    *pglobal_info=s->gi;\n    return UNZ_OK;\n}\n\nextern int ZEXPORT unzGetGlobalInfo (unzFile file, unz_global_info* pglobal_info32)\n{\n    unz64_s* s;\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    /* to do : check if number_entry is not truncated */\n    pglobal_info32->number_entry = (uLong)s->gi.number_entry;\n    pglobal_info32->size_comment = s->gi.size_comment;\n    return UNZ_OK;\n}\n/*\n   Translate date/time from Dos format to tm_unz (readable more easilty)\n*/\nlocal void unz64local_DosDateToTmuDate (ZPOS64_T ulDosDate, tm_unz* ptm)\n{\n    ZPOS64_T uDate;\n    uDate = (ZPOS64_T)(ulDosDate>>16);\n    ptm->tm_mday = (uInt)(uDate&0x1f) ;\n    ptm->tm_mon =  (uInt)((((uDate)&0x1E0)/0x20)-1) ;\n    ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ;\n\n    ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800);\n    ptm->tm_min =  (uInt) ((ulDosDate&0x7E0)/0x20) ;\n    ptm->tm_sec =  (uInt) (2*(ulDosDate&0x1f)) ;\n}\n\n/*\n  Get Info about the current file in the zipfile, with internal only info\n*/\nlocal int unz64local_GetCurrentFileInfoInternal OF((unzFile file,\n                                                  unz_file_info64 *pfile_info,\n                                                  unz_file_info64_internal\n                                                  *pfile_info_internal,\n                                                  char *szFileName,\n                                                  uLong fileNameBufferSize,\n                                                  void *extraField,\n                                                  uLong extraFieldBufferSize,\n                                                  char *szComment,\n                                                  uLong commentBufferSize));\n\nlocal int unz64local_GetCurrentFileInfoInternal (unzFile file,\n                                                  unz_file_info64 *pfile_info,\n                                                  unz_file_info64_internal\n                                                  *pfile_info_internal,\n                                                  char *szFileName,\n                                                  uLong fileNameBufferSize,\n                                                  void *extraField,\n                                                  uLong extraFieldBufferSize,\n                                                  char *szComment,\n                                                  uLong commentBufferSize)\n{\n    unz64_s* s;\n    unz_file_info64 file_info;\n    unz_file_info64_internal file_info_internal;\n    int err=UNZ_OK;\n    uLong uMagic;\n    long lSeek=0;\n    uLong uL;\n\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    if (ZSEEK64(s->z_filefunc, s->filestream,\n              s->pos_in_central_dir+s->byte_before_the_zipfile,\n              ZLIB_FILEFUNC_SEEK_SET)!=0)\n        err=UNZ_ERRNO;\n\n\n    /* we check the magic */\n    if (err==UNZ_OK)\n    {\n        if (unz64local_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)\n            err=UNZ_ERRNO;\n        else if (uMagic!=0x02014b50)\n            err=UNZ_BADZIPFILE;\n    }\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.version) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.version_needed) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.flag) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.compression_method) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.dosDate) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    unz64local_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date);\n\n    if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.crc) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)\n        err=UNZ_ERRNO;\n    file_info.compressed_size = uL;\n\n    if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)\n        err=UNZ_ERRNO;\n    file_info.uncompressed_size = uL;\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_filename) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_extra) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_comment) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.disk_num_start) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.internal_fa) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.external_fa) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n                // relative offset of local header\n    if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)\n        err=UNZ_ERRNO;\n    file_info_internal.offset_curfile = uL;\n\n    lSeek+=file_info.size_filename;\n    if ((err==UNZ_OK) && (szFileName!=NULL))\n    {\n        uLong uSizeRead ;\n        if (file_info.size_filename<fileNameBufferSize)\n        {\n            *(szFileName+file_info.size_filename)='\\0';\n            uSizeRead = file_info.size_filename;\n        }\n        else\n            uSizeRead = fileNameBufferSize;\n\n        if ((file_info.size_filename>0) && (fileNameBufferSize>0))\n            if (ZREAD64(s->z_filefunc, s->filestream,szFileName,uSizeRead)!=uSizeRead)\n                err=UNZ_ERRNO;\n        lSeek -= uSizeRead;\n    }\n\n    // Read extrafield\n    if ((err==UNZ_OK) && (extraField!=NULL))\n    {\n        ZPOS64_T uSizeRead ;\n        if (file_info.size_file_extra<extraFieldBufferSize)\n            uSizeRead = file_info.size_file_extra;\n        else\n            uSizeRead = extraFieldBufferSize;\n\n        if (lSeek!=0)\n        {\n            if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)\n                lSeek=0;\n            else\n                err=UNZ_ERRNO;\n        }\n\n        if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0))\n            if (ZREAD64(s->z_filefunc, s->filestream,extraField,(uLong)uSizeRead)!=uSizeRead)\n                err=UNZ_ERRNO;\n\n        lSeek += file_info.size_file_extra - (uLong)uSizeRead;\n    }\n    else\n        lSeek += file_info.size_file_extra;\n\n\n    if ((err==UNZ_OK) && (file_info.size_file_extra != 0))\n    {\n                                uLong acc = 0;\n\n        // since lSeek now points to after the extra field we need to move back\n        lSeek -= file_info.size_file_extra;\n\n        if (lSeek!=0)\n        {\n            if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)\n                lSeek=0;\n            else\n                err=UNZ_ERRNO;\n        }\n\n        while(acc < file_info.size_file_extra)\n        {\n            uLong headerId;\n                                                uLong dataSize;\n\n            if (unz64local_getShort(&s->z_filefunc, s->filestream,&headerId) != UNZ_OK)\n                err=UNZ_ERRNO;\n\n            if (unz64local_getShort(&s->z_filefunc, s->filestream,&dataSize) != UNZ_OK)\n                err=UNZ_ERRNO;\n\n            /* ZIP64 extra fields */\n            if (headerId == 0x0001)\n            {\n                                                        uLong uL;\n\n                                                                if(file_info.uncompressed_size == (ZPOS64_T)(unsigned long)-1)\n                                                                {\n                                                                        if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK)\n                                                                                        err=UNZ_ERRNO;\n                                                                }\n\n                                                                if(file_info.compressed_size == (ZPOS64_T)(unsigned long)-1)\n                                                                {\n                                                                        if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.compressed_size) != UNZ_OK)\n                                                                                  err=UNZ_ERRNO;\n                                                                }\n\n                                                                if(file_info_internal.offset_curfile == (ZPOS64_T)(unsigned long)-1)\n                                                                {\n                                                                        /* Relative Header offset */\n                                                                        if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info_internal.offset_curfile) != UNZ_OK)\n                                                                                err=UNZ_ERRNO;\n                                                                }\n\n                                                                if(file_info.disk_num_start == (unsigned long)-1)\n                                                                {\n                                                                        /* Disk Start Number */\n                                                                        if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)\n                                                                                err=UNZ_ERRNO;\n                                                                }\n\n            }\n            else\n            {\n                if (ZSEEK64(s->z_filefunc, s->filestream,dataSize,ZLIB_FILEFUNC_SEEK_CUR)!=0)\n                    err=UNZ_ERRNO;\n            }\n\n            acc += 2 + 2 + dataSize;\n        }\n    }\n\n    if ((err==UNZ_OK) && (szComment!=NULL))\n    {\n        uLong uSizeRead ;\n        if (file_info.size_file_comment<commentBufferSize)\n        {\n            *(szComment+file_info.size_file_comment)='\\0';\n            uSizeRead = file_info.size_file_comment;\n        }\n        else\n            uSizeRead = commentBufferSize;\n\n        if (lSeek!=0)\n        {\n            if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)\n                lSeek=0;\n            else\n                err=UNZ_ERRNO;\n        }\n\n        if ((file_info.size_file_comment>0) && (commentBufferSize>0))\n            if (ZREAD64(s->z_filefunc, s->filestream,szComment,uSizeRead)!=uSizeRead)\n                err=UNZ_ERRNO;\n        lSeek+=file_info.size_file_comment - uSizeRead;\n    }\n    else\n        lSeek+=file_info.size_file_comment;\n\n\n    if ((err==UNZ_OK) && (pfile_info!=NULL))\n        *pfile_info=file_info;\n\n    if ((err==UNZ_OK) && (pfile_info_internal!=NULL))\n        *pfile_info_internal=file_info_internal;\n\n    return err;\n}\n\n\n\n/*\n  Write info about the ZipFile in the *pglobal_info structure.\n  No preparation of the structure is needed\n  return UNZ_OK if there is no problem.\n*/\nextern int ZEXPORT unzGetCurrentFileInfo64 (unzFile file,\n                                          unz_file_info64 * pfile_info,\n                                          char * szFileName, uLong fileNameBufferSize,\n                                          void *extraField, uLong extraFieldBufferSize,\n                                          char* szComment,  uLong commentBufferSize)\n{\n    return unz64local_GetCurrentFileInfoInternal(file,pfile_info,NULL,\n                                                szFileName,fileNameBufferSize,\n                                                extraField,extraFieldBufferSize,\n                                                szComment,commentBufferSize);\n}\n\nextern int ZEXPORT unzGetCurrentFileInfo (unzFile file,\n                                          unz_file_info * pfile_info,\n                                          char * szFileName, uLong fileNameBufferSize,\n                                          void *extraField, uLong extraFieldBufferSize,\n                                          char* szComment,  uLong commentBufferSize)\n{\n    int err;\n    unz_file_info64 file_info64;\n    err = unz64local_GetCurrentFileInfoInternal(file,&file_info64,NULL,\n                                                szFileName,fileNameBufferSize,\n                                                extraField,extraFieldBufferSize,\n                                                szComment,commentBufferSize);\n    if (err==UNZ_OK)\n    {\n        pfile_info->version = file_info64.version;\n        pfile_info->version_needed = file_info64.version_needed;\n        pfile_info->flag = file_info64.flag;\n        pfile_info->compression_method = file_info64.compression_method;\n        pfile_info->dosDate = file_info64.dosDate;\n        pfile_info->crc = file_info64.crc;\n\n        pfile_info->size_filename = file_info64.size_filename;\n        pfile_info->size_file_extra = file_info64.size_file_extra;\n        pfile_info->size_file_comment = file_info64.size_file_comment;\n\n        pfile_info->disk_num_start = file_info64.disk_num_start;\n        pfile_info->internal_fa = file_info64.internal_fa;\n        pfile_info->external_fa = file_info64.external_fa;\n\n        pfile_info->tmu_date = file_info64.tmu_date,\n\n\n        pfile_info->compressed_size = (uLong)file_info64.compressed_size;\n        pfile_info->uncompressed_size = (uLong)file_info64.uncompressed_size;\n\n    }\n    return err;\n}\n/*\n  Set the current file of the zipfile to the first file.\n  return UNZ_OK if there is no problem\n*/\nextern int ZEXPORT unzGoToFirstFile (unzFile file)\n{\n    int err=UNZ_OK;\n    unz64_s* s;\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    s->pos_in_central_dir=s->offset_central_dir;\n    s->num_file=0;\n    err=unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,\n                                             &s->cur_file_info_internal,\n                                             NULL,0,NULL,0,NULL,0);\n    s->current_file_ok = (err == UNZ_OK);\n    return err;\n}\n\n/*\n  Set the current file of the zipfile to the next file.\n  return UNZ_OK if there is no problem\n  return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.\n*/\nextern int ZEXPORT unzGoToNextFile (unzFile  file)\n{\n    unz64_s* s;\n    int err;\n\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    if (!s->current_file_ok)\n        return UNZ_END_OF_LIST_OF_FILE;\n    if (s->gi.number_entry != 0xffff)    /* 2^16 files overflow hack */\n      if (s->num_file+1==s->gi.number_entry)\n        return UNZ_END_OF_LIST_OF_FILE;\n\n    s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename +\n            s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ;\n    s->num_file++;\n    err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,\n                                               &s->cur_file_info_internal,\n                                               NULL,0,NULL,0,NULL,0);\n    s->current_file_ok = (err == UNZ_OK);\n    return err;\n}\n\n\n/*\n  Try locate the file szFileName in the zipfile.\n  For the iCaseSensitivity signification, see unzipStringFileNameCompare\n\n  return value :\n  UNZ_OK if the file is found. It becomes the current file.\n  UNZ_END_OF_LIST_OF_FILE if the file is not found\n*/\nextern int ZEXPORT unzLocateFile (unzFile file, const char *szFileName, int iCaseSensitivity)\n{\n    unz64_s* s;\n    int err;\n\n    /* We remember the 'current' position in the file so that we can jump\n     * back there if we fail.\n     */\n    unz_file_info64 cur_file_infoSaved;\n    unz_file_info64_internal cur_file_info_internalSaved;\n    ZPOS64_T num_fileSaved;\n    ZPOS64_T pos_in_central_dirSaved;\n\n\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n\n    if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP)\n        return UNZ_PARAMERROR;\n\n    s=(unz64_s*)file;\n    if (!s->current_file_ok)\n        return UNZ_END_OF_LIST_OF_FILE;\n\n    /* Save the current state */\n    num_fileSaved = s->num_file;\n    pos_in_central_dirSaved = s->pos_in_central_dir;\n    cur_file_infoSaved = s->cur_file_info;\n    cur_file_info_internalSaved = s->cur_file_info_internal;\n\n    err = unzGoToFirstFile(file);\n\n    while (err == UNZ_OK)\n    {\n        char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1];\n        err = unzGetCurrentFileInfo64(file,NULL,\n                                    szCurrentFileName,sizeof(szCurrentFileName)-1,\n                                    NULL,0,NULL,0);\n        if (err == UNZ_OK)\n        {\n            if (unzStringFileNameCompare(szCurrentFileName,\n                                            szFileName,iCaseSensitivity)==0)\n                return UNZ_OK;\n            err = unzGoToNextFile(file);\n        }\n    }\n\n    /* We failed, so restore the state of the 'current file' to where we\n     * were.\n     */\n    s->num_file = num_fileSaved ;\n    s->pos_in_central_dir = pos_in_central_dirSaved ;\n    s->cur_file_info = cur_file_infoSaved;\n    s->cur_file_info_internal = cur_file_info_internalSaved;\n    return err;\n}\n\n\n/*\n///////////////////////////////////////////\n// Contributed by Ryan Haksi (mailto://cryogen@infoserve.net)\n// I need random access\n//\n// Further optimization could be realized by adding an ability\n// to cache the directory in memory. The goal being a single\n// comprehensive file read to put the file I need in a memory.\n*/\n\n/*\ntypedef struct unz_file_pos_s\n{\n    ZPOS64_T pos_in_zip_directory;   // offset in file\n    ZPOS64_T num_of_file;            // # of file\n} unz_file_pos;\n*/\n\nextern int ZEXPORT unzGetFilePos64(unzFile file, unz64_file_pos*  file_pos)\n{\n    unz64_s* s;\n\n    if (file==NULL || file_pos==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    if (!s->current_file_ok)\n        return UNZ_END_OF_LIST_OF_FILE;\n\n    file_pos->pos_in_zip_directory  = s->pos_in_central_dir;\n    file_pos->num_of_file           = s->num_file;\n\n    return UNZ_OK;\n}\n\nextern int ZEXPORT unzGetFilePos(\n    unzFile file,\n    unz_file_pos* file_pos)\n{\n    unz64_file_pos file_pos64;\n    int err = unzGetFilePos64(file,&file_pos64);\n    if (err==UNZ_OK)\n    {\n        file_pos->pos_in_zip_directory = (uLong)file_pos64.pos_in_zip_directory;\n        file_pos->num_of_file = (uLong)file_pos64.num_of_file;\n    }\n    return err;\n}\n\nextern int ZEXPORT unzGoToFilePos64(unzFile file, const unz64_file_pos* file_pos)\n{\n    unz64_s* s;\n    int err;\n\n    if (file==NULL || file_pos==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n\n    /* jump to the right spot */\n    s->pos_in_central_dir = file_pos->pos_in_zip_directory;\n    s->num_file           = file_pos->num_of_file;\n\n    /* set the current file */\n    err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,\n                                               &s->cur_file_info_internal,\n                                               NULL,0,NULL,0,NULL,0);\n    /* return results */\n    s->current_file_ok = (err == UNZ_OK);\n    return err;\n}\n\nextern int ZEXPORT unzGoToFilePos(\n    unzFile file,\n    unz_file_pos* file_pos)\n{\n    unz64_file_pos file_pos64;\n    if (file_pos == NULL)\n        return UNZ_PARAMERROR;\n\n    file_pos64.pos_in_zip_directory = file_pos->pos_in_zip_directory;\n    file_pos64.num_of_file = file_pos->num_of_file;\n    return unzGoToFilePos64(file,&file_pos64);\n}\n\n/*\n// Unzip Helper Functions - should be here?\n///////////////////////////////////////////\n*/\n\n/*\n  Read the local header of the current zipfile\n  Check the coherency of the local header and info in the end of central\n        directory about this file\n  store in *piSizeVar the size of extra info in local header\n        (filename and size of extra field data)\n*/\nlocal int unz64local_CheckCurrentFileCoherencyHeader (unz64_s* s, uInt* piSizeVar,\n                                                    ZPOS64_T * poffset_local_extrafield,\n                                                    uInt  * psize_local_extrafield)\n{\n    uLong uMagic,uData,uFlags;\n    uLong size_filename;\n    uLong size_extra_field;\n    int err=UNZ_OK;\n\n    *piSizeVar = 0;\n    *poffset_local_extrafield = 0;\n    *psize_local_extrafield = 0;\n\n    if (ZSEEK64(s->z_filefunc, s->filestream,s->cur_file_info_internal.offset_curfile +\n                                s->byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET)!=0)\n        return UNZ_ERRNO;\n\n\n    if (err==UNZ_OK)\n    {\n        if (unz64local_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)\n            err=UNZ_ERRNO;\n        else if (uMagic!=0x04034b50)\n            err=UNZ_BADZIPFILE;\n    }\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK)\n        err=UNZ_ERRNO;\n/*\n    else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion))\n        err=UNZ_BADZIPFILE;\n*/\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&uFlags) != UNZ_OK)\n        err=UNZ_ERRNO;\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK)\n        err=UNZ_ERRNO;\n    else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method))\n        err=UNZ_BADZIPFILE;\n\n    if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) &&\n/* #ifdef HAVE_BZIP2 */\n                         (s->cur_file_info.compression_method!=Z_BZIP2ED) &&\n/* #endif */\n                         (s->cur_file_info.compression_method!=Z_DEFLATED))\n        err=UNZ_BADZIPFILE;\n\n    if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* date/time */\n        err=UNZ_ERRNO;\n\n    if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* crc */\n        err=UNZ_ERRNO;\n    else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) && ((uFlags & 8)==0))\n        err=UNZ_BADZIPFILE;\n\n    if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size compr */\n        err=UNZ_ERRNO;\n    else if (uData != 0xFFFFFFFF && (err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) && ((uFlags & 8)==0))\n        err=UNZ_BADZIPFILE;\n\n    if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size uncompr */\n        err=UNZ_ERRNO;\n    else if (uData != 0xFFFFFFFF && (err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) && ((uFlags & 8)==0))\n        err=UNZ_BADZIPFILE;\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&size_filename) != UNZ_OK)\n        err=UNZ_ERRNO;\n    else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename))\n        err=UNZ_BADZIPFILE;\n\n    *piSizeVar += (uInt)size_filename;\n\n    if (unz64local_getShort(&s->z_filefunc, s->filestream,&size_extra_field) != UNZ_OK)\n        err=UNZ_ERRNO;\n    *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile +\n                                    SIZEZIPLOCALHEADER + size_filename;\n    *psize_local_extrafield = (uInt)size_extra_field;\n\n    *piSizeVar += (uInt)size_extra_field;\n\n    return err;\n}\n\n/*\n  Open for reading data the current file in the zipfile.\n  If there is no error and the file is opened, the return value is UNZ_OK.\n*/\nextern int ZEXPORT unzOpenCurrentFile3 (unzFile file, int* method,\n                                            int* level, int raw, const char* password)\n{\n    int err=UNZ_OK;\n    uInt iSizeVar;\n    unz64_s* s;\n    file_in_zip64_read_info_s* pfile_in_zip_read_info;\n    ZPOS64_T offset_local_extrafield;  /* offset of the local extra field */\n    uInt  size_local_extrafield;    /* size of the local extra field */\n#    ifndef NOUNCRYPT\n    char source[12];\n#    else\n    if (password != NULL)\n        return UNZ_PARAMERROR;\n#    endif\n\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    if (!s->current_file_ok)\n        return UNZ_PARAMERROR;\n\n    if (s->pfile_in_zip_read != NULL)\n        unzCloseCurrentFile(file);\n\n    if (unz64local_CheckCurrentFileCoherencyHeader(s,&iSizeVar, &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK)\n        return UNZ_BADZIPFILE;\n\n    pfile_in_zip_read_info = (file_in_zip64_read_info_s*)ALLOC(sizeof(file_in_zip64_read_info_s));\n    if (pfile_in_zip_read_info==NULL)\n        return UNZ_INTERNALERROR;\n\n    pfile_in_zip_read_info->read_buffer=(char*)ALLOC(UNZ_BUFSIZE);\n    pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield;\n    pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield;\n    pfile_in_zip_read_info->pos_local_extrafield=0;\n    pfile_in_zip_read_info->raw=raw;\n\n    if (pfile_in_zip_read_info->read_buffer==NULL)\n    {\n        TRYFREE(pfile_in_zip_read_info);\n        return UNZ_INTERNALERROR;\n    }\n\n    pfile_in_zip_read_info->stream_initialised=0;\n\n    if (method!=NULL)\n        *method = (int)s->cur_file_info.compression_method;\n\n    if (level!=NULL)\n    {\n        *level = 6;\n        switch (s->cur_file_info.flag & 0x06)\n        {\n          case 6 : *level = 1; break;\n          case 4 : *level = 2; break;\n          case 2 : *level = 9; break;\n        }\n    }\n\n    if ((s->cur_file_info.compression_method!=0) &&\n/* #ifdef HAVE_BZIP2 */\n        (s->cur_file_info.compression_method!=Z_BZIP2ED) &&\n/* #endif */\n        (s->cur_file_info.compression_method!=Z_DEFLATED))\n\n        err=UNZ_BADZIPFILE;\n\n    pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc;\n    pfile_in_zip_read_info->crc32=0;\n    pfile_in_zip_read_info->total_out_64=0;\n    pfile_in_zip_read_info->compression_method = s->cur_file_info.compression_method;\n    pfile_in_zip_read_info->filestream=s->filestream;\n    pfile_in_zip_read_info->z_filefunc=s->z_filefunc;\n    pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile;\n\n    pfile_in_zip_read_info->stream.total_out = 0;\n\n    if ((s->cur_file_info.compression_method==Z_BZIP2ED) && (!raw))\n    {\n#ifdef HAVE_BZIP2\n      pfile_in_zip_read_info->bstream.bzalloc = (void *(*) (void *, int, int))0;\n      pfile_in_zip_read_info->bstream.bzfree = (free_func)0;\n      pfile_in_zip_read_info->bstream.opaque = (voidpf)0;\n      pfile_in_zip_read_info->bstream.state = (voidpf)0;\n\n      pfile_in_zip_read_info->stream.zalloc = (alloc_func)0;\n      pfile_in_zip_read_info->stream.zfree = (free_func)0;\n      pfile_in_zip_read_info->stream.opaque = (voidpf)0;\n      pfile_in_zip_read_info->stream.next_in = (voidpf)0;\n      pfile_in_zip_read_info->stream.avail_in = 0;\n\n      err=BZ2_bzDecompressInit(&pfile_in_zip_read_info->bstream, 0, 0);\n      if (err == Z_OK)\n        pfile_in_zip_read_info->stream_initialised=Z_BZIP2ED;\n      else\n      {\n        TRYFREE(pfile_in_zip_read_info);\n        return err;\n      }\n#else\n      pfile_in_zip_read_info->raw=1;\n#endif\n    }\n    else if ((s->cur_file_info.compression_method==Z_DEFLATED) && (!raw))\n    {\n      pfile_in_zip_read_info->stream.zalloc = (alloc_func)0;\n      pfile_in_zip_read_info->stream.zfree = (free_func)0;\n      pfile_in_zip_read_info->stream.opaque = (voidpf)0;\n      pfile_in_zip_read_info->stream.next_in = 0;\n      pfile_in_zip_read_info->stream.avail_in = 0;\n\n      err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS);\n      if (err == Z_OK)\n        pfile_in_zip_read_info->stream_initialised=Z_DEFLATED;\n      else\n      {\n        TRYFREE(pfile_in_zip_read_info);\n        return err;\n      }\n        /* windowBits is passed < 0 to tell that there is no zlib header.\n         * Note that in this case inflate *requires* an extra \"dummy\" byte\n         * after the compressed stream in order to complete decompression and\n         * return Z_STREAM_END.\n         * In unzip, i don't wait absolutely Z_STREAM_END because I known the\n         * size of both compressed and uncompressed data\n         */\n    }\n    pfile_in_zip_read_info->rest_read_compressed =\n            s->cur_file_info.compressed_size ;\n    pfile_in_zip_read_info->rest_read_uncompressed =\n            s->cur_file_info.uncompressed_size ;\n\n\n    pfile_in_zip_read_info->pos_in_zipfile =\n            s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER +\n              iSizeVar;\n\n    pfile_in_zip_read_info->stream.avail_in = (uInt)0;\n\n    s->pfile_in_zip_read = pfile_in_zip_read_info;\n                s->encrypted = 0;\n\n#    ifndef NOUNCRYPT\n    if (password != NULL)\n    {\n        int i;\n        s->pcrc_32_tab = get_crc_table();\n        init_keys(password,s->keys,s->pcrc_32_tab);\n        if (ZSEEK64(s->z_filefunc, s->filestream,\n                  s->pfile_in_zip_read->pos_in_zipfile +\n                     s->pfile_in_zip_read->byte_before_the_zipfile,\n                  SEEK_SET)!=0)\n            return UNZ_INTERNALERROR;\n        if(ZREAD64(s->z_filefunc, s->filestream,source, 12)<12)\n            return UNZ_INTERNALERROR;\n\n        for (i = 0; i<12; i++)\n            zdecode(s->keys,s->pcrc_32_tab,source[i]);\n\n        s->pfile_in_zip_read->pos_in_zipfile+=12;\n        s->encrypted=1;\n    }\n#    endif\n\n\n    return UNZ_OK;\n}\n\nextern int ZEXPORT unzOpenCurrentFile (unzFile file)\n{\n    return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL);\n}\n\nextern int ZEXPORT unzOpenCurrentFilePassword (unzFile file, const char*  password)\n{\n    return unzOpenCurrentFile3(file, NULL, NULL, 0, password);\n}\n\nextern int ZEXPORT unzOpenCurrentFile2 (unzFile file, int* method, int* level, int raw)\n{\n    return unzOpenCurrentFile3(file, method, level, raw, NULL);\n}\n\n/** Addition for GDAL : START */\n\nextern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64( unzFile file)\n{\n    unz64_s* s;\n    file_in_zip64_read_info_s* pfile_in_zip_read_info;\n    s=(unz64_s*)file;\n    if (file==NULL)\n        return 0; //UNZ_PARAMERROR;\n    pfile_in_zip_read_info=s->pfile_in_zip_read;\n    if (pfile_in_zip_read_info==NULL)\n        return 0; //UNZ_PARAMERROR;\n    return pfile_in_zip_read_info->pos_in_zipfile +\n                         pfile_in_zip_read_info->byte_before_the_zipfile;\n}\n\n/** Addition for GDAL : END */\n\n/*\n  Read bytes from the current file.\n  buf contain buffer where data must be copied\n  len the size of buf.\n\n  return the number of byte copied if somes bytes are copied\n  return 0 if the end of file was reached\n  return <0 with error code if there is an error\n    (UNZ_ERRNO for IO error, or zLib error for uncompress error)\n*/\nextern int ZEXPORT unzReadCurrentFile  (unzFile file, voidp buf, unsigned len)\n{\n    int err=UNZ_OK;\n    uInt iRead = 0;\n    unz64_s* s;\n    file_in_zip64_read_info_s* pfile_in_zip_read_info;\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    pfile_in_zip_read_info=s->pfile_in_zip_read;\n\n    if (pfile_in_zip_read_info==NULL)\n        return UNZ_PARAMERROR;\n\n\n    if ((pfile_in_zip_read_info->read_buffer == NULL))\n        return UNZ_END_OF_LIST_OF_FILE;\n    if (len==0)\n        return 0;\n\n    pfile_in_zip_read_info->stream.next_out = (Bytef*)buf;\n\n    pfile_in_zip_read_info->stream.avail_out = (uInt)len;\n\n    if ((len>pfile_in_zip_read_info->rest_read_uncompressed) &&\n        (!(pfile_in_zip_read_info->raw)))\n        pfile_in_zip_read_info->stream.avail_out =\n            (uInt)pfile_in_zip_read_info->rest_read_uncompressed;\n\n    if ((len>pfile_in_zip_read_info->rest_read_compressed+\n           pfile_in_zip_read_info->stream.avail_in) &&\n         (pfile_in_zip_read_info->raw))\n        pfile_in_zip_read_info->stream.avail_out =\n            (uInt)pfile_in_zip_read_info->rest_read_compressed+\n            pfile_in_zip_read_info->stream.avail_in;\n\n    while (pfile_in_zip_read_info->stream.avail_out>0)\n    {\n        if ((pfile_in_zip_read_info->stream.avail_in==0) &&\n            (pfile_in_zip_read_info->rest_read_compressed>0))\n        {\n            uInt uReadThis = UNZ_BUFSIZE;\n            if (pfile_in_zip_read_info->rest_read_compressed<uReadThis)\n                uReadThis = (uInt)pfile_in_zip_read_info->rest_read_compressed;\n            if (uReadThis == 0)\n                return UNZ_EOF;\n            if (ZSEEK64(pfile_in_zip_read_info->z_filefunc,\n                      pfile_in_zip_read_info->filestream,\n                      pfile_in_zip_read_info->pos_in_zipfile +\n                         pfile_in_zip_read_info->byte_before_the_zipfile,\n                         ZLIB_FILEFUNC_SEEK_SET)!=0)\n                return UNZ_ERRNO;\n            if (ZREAD64(pfile_in_zip_read_info->z_filefunc,\n                      pfile_in_zip_read_info->filestream,\n                      pfile_in_zip_read_info->read_buffer,\n                      uReadThis)!=uReadThis)\n                return UNZ_ERRNO;\n\n\n#            ifndef NOUNCRYPT\n            if(s->encrypted)\n            {\n                uInt i;\n                for(i=0;i<uReadThis;i++)\n                  pfile_in_zip_read_info->read_buffer[i] =\n                      zdecode(s->keys,s->pcrc_32_tab,\n                              pfile_in_zip_read_info->read_buffer[i]);\n            }\n#            endif\n\n\n            pfile_in_zip_read_info->pos_in_zipfile += uReadThis;\n\n            pfile_in_zip_read_info->rest_read_compressed-=uReadThis;\n\n            pfile_in_zip_read_info->stream.next_in =\n                (Bytef*)pfile_in_zip_read_info->read_buffer;\n            pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis;\n        }\n\n        if ((pfile_in_zip_read_info->compression_method==0) || (pfile_in_zip_read_info->raw))\n        {\n            uInt uDoCopy,i ;\n\n            if ((pfile_in_zip_read_info->stream.avail_in == 0) &&\n                (pfile_in_zip_read_info->rest_read_compressed == 0))\n                return (iRead==0) ? UNZ_EOF : iRead;\n\n            if (pfile_in_zip_read_info->stream.avail_out <\n                            pfile_in_zip_read_info->stream.avail_in)\n                uDoCopy = pfile_in_zip_read_info->stream.avail_out ;\n            else\n                uDoCopy = pfile_in_zip_read_info->stream.avail_in ;\n\n            for (i=0;i<uDoCopy;i++)\n                *(pfile_in_zip_read_info->stream.next_out+i) =\n                        *(pfile_in_zip_read_info->stream.next_in+i);\n\n            pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uDoCopy;\n\n            pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,\n                                pfile_in_zip_read_info->stream.next_out,\n                                uDoCopy);\n            pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy;\n            pfile_in_zip_read_info->stream.avail_in -= uDoCopy;\n            pfile_in_zip_read_info->stream.avail_out -= uDoCopy;\n            pfile_in_zip_read_info->stream.next_out += uDoCopy;\n            pfile_in_zip_read_info->stream.next_in += uDoCopy;\n            pfile_in_zip_read_info->stream.total_out += uDoCopy;\n            iRead += uDoCopy;\n        }\n        else if (pfile_in_zip_read_info->compression_method==Z_BZIP2ED)\n        {\n#ifdef HAVE_BZIP2\n            uLong uTotalOutBefore,uTotalOutAfter;\n            const Bytef *bufBefore;\n            uLong uOutThis;\n\n            pfile_in_zip_read_info->bstream.next_in        = (char*)pfile_in_zip_read_info->stream.next_in;\n            pfile_in_zip_read_info->bstream.avail_in       = pfile_in_zip_read_info->stream.avail_in;\n            pfile_in_zip_read_info->bstream.total_in_lo32  = pfile_in_zip_read_info->stream.total_in;\n            pfile_in_zip_read_info->bstream.total_in_hi32  = 0;\n            pfile_in_zip_read_info->bstream.next_out       = (char*)pfile_in_zip_read_info->stream.next_out;\n            pfile_in_zip_read_info->bstream.avail_out      = pfile_in_zip_read_info->stream.avail_out;\n            pfile_in_zip_read_info->bstream.total_out_lo32 = pfile_in_zip_read_info->stream.total_out;\n            pfile_in_zip_read_info->bstream.total_out_hi32 = 0;\n\n            uTotalOutBefore = pfile_in_zip_read_info->bstream.total_out_lo32;\n            bufBefore = (const Bytef *)pfile_in_zip_read_info->bstream.next_out;\n\n            err=BZ2_bzDecompress(&pfile_in_zip_read_info->bstream);\n\n            uTotalOutAfter = pfile_in_zip_read_info->bstream.total_out_lo32;\n            uOutThis = uTotalOutAfter-uTotalOutBefore;\n\n            pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis;\n\n            pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,bufBefore, (uInt)(uOutThis));\n            pfile_in_zip_read_info->rest_read_uncompressed -= uOutThis;\n            iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);\n\n            pfile_in_zip_read_info->stream.next_in   = (Bytef*)pfile_in_zip_read_info->bstream.next_in;\n            pfile_in_zip_read_info->stream.avail_in  = pfile_in_zip_read_info->bstream.avail_in;\n            pfile_in_zip_read_info->stream.total_in  = pfile_in_zip_read_info->bstream.total_in_lo32;\n            pfile_in_zip_read_info->stream.next_out  = (Bytef*)pfile_in_zip_read_info->bstream.next_out;\n            pfile_in_zip_read_info->stream.avail_out = pfile_in_zip_read_info->bstream.avail_out;\n            pfile_in_zip_read_info->stream.total_out = pfile_in_zip_read_info->bstream.total_out_lo32;\n\n            if (err==BZ_STREAM_END)\n              return (iRead==0) ? UNZ_EOF : iRead;\n            if (err!=BZ_OK)\n              break;\n#endif\n        } // end Z_BZIP2ED\n        else\n        {\n            ZPOS64_T uTotalOutBefore,uTotalOutAfter;\n            const Bytef *bufBefore;\n            ZPOS64_T uOutThis;\n            int flush=Z_SYNC_FLUSH;\n\n            uTotalOutBefore = pfile_in_zip_read_info->stream.total_out;\n            bufBefore = pfile_in_zip_read_info->stream.next_out;\n\n            /*\n            if ((pfile_in_zip_read_info->rest_read_uncompressed ==\n                     pfile_in_zip_read_info->stream.avail_out) &&\n                (pfile_in_zip_read_info->rest_read_compressed == 0))\n                flush = Z_FINISH;\n            */\n            err=inflate(&pfile_in_zip_read_info->stream,flush);\n\n            if ((err>=0) && (pfile_in_zip_read_info->stream.msg!=NULL))\n              err = Z_DATA_ERROR;\n\n            uTotalOutAfter = pfile_in_zip_read_info->stream.total_out;\n            uOutThis = uTotalOutAfter-uTotalOutBefore;\n\n            pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis;\n\n            pfile_in_zip_read_info->crc32 =\n                crc32(pfile_in_zip_read_info->crc32,bufBefore,\n                        (uInt)(uOutThis));\n\n            pfile_in_zip_read_info->rest_read_uncompressed -=\n                uOutThis;\n\n            iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);\n\n            if (err==Z_STREAM_END)\n                return (iRead==0) ? UNZ_EOF : iRead;\n            if (err!=Z_OK)\n                break;\n        }\n    }\n\n    if (err==Z_OK)\n        return iRead;\n    return err;\n}\n\n\n/*\n  Give the current position in uncompressed data\n*/\nextern z_off_t ZEXPORT unztell (unzFile file)\n{\n    unz64_s* s;\n    file_in_zip64_read_info_s* pfile_in_zip_read_info;\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    pfile_in_zip_read_info=s->pfile_in_zip_read;\n\n    if (pfile_in_zip_read_info==NULL)\n        return UNZ_PARAMERROR;\n\n    return (z_off_t)pfile_in_zip_read_info->stream.total_out;\n}\n\nextern ZPOS64_T ZEXPORT unztell64 (unzFile file)\n{\n\n    unz64_s* s;\n    file_in_zip64_read_info_s* pfile_in_zip_read_info;\n    if (file==NULL)\n        return (ZPOS64_T)-1;\n    s=(unz64_s*)file;\n    pfile_in_zip_read_info=s->pfile_in_zip_read;\n\n    if (pfile_in_zip_read_info==NULL)\n        return (ZPOS64_T)-1;\n\n    return pfile_in_zip_read_info->total_out_64;\n}\n\n\n/*\n  return 1 if the end of file was reached, 0 elsewhere\n*/\nextern int ZEXPORT unzeof (unzFile file)\n{\n    unz64_s* s;\n    file_in_zip64_read_info_s* pfile_in_zip_read_info;\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    pfile_in_zip_read_info=s->pfile_in_zip_read;\n\n    if (pfile_in_zip_read_info==NULL)\n        return UNZ_PARAMERROR;\n\n    if (pfile_in_zip_read_info->rest_read_uncompressed == 0)\n        return 1;\n    else\n        return 0;\n}\n\n\n\n/*\nRead extra field from the current file (opened by unzOpenCurrentFile)\nThis is the local-header version of the extra field (sometimes, there is\nmore info in the local-header version than in the central-header)\n\n  if buf==NULL, it return the size of the local extra field that can be read\n\n  if buf!=NULL, len is the size of the buffer, the extra header is copied in\n    buf.\n  the return value is the number of bytes copied in buf, or (if <0)\n    the error code\n*/\nextern int ZEXPORT unzGetLocalExtrafield (unzFile file, voidp buf, unsigned len)\n{\n    unz64_s* s;\n    file_in_zip64_read_info_s* pfile_in_zip_read_info;\n    uInt read_now;\n    ZPOS64_T size_to_read;\n\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    pfile_in_zip_read_info=s->pfile_in_zip_read;\n\n    if (pfile_in_zip_read_info==NULL)\n        return UNZ_PARAMERROR;\n\n    size_to_read = (pfile_in_zip_read_info->size_local_extrafield -\n                pfile_in_zip_read_info->pos_local_extrafield);\n\n    if (buf==NULL)\n        return (int)size_to_read;\n\n    if (len>size_to_read)\n        read_now = (uInt)size_to_read;\n    else\n        read_now = (uInt)len ;\n\n    if (read_now==0)\n        return 0;\n\n    if (ZSEEK64(pfile_in_zip_read_info->z_filefunc,\n              pfile_in_zip_read_info->filestream,\n              pfile_in_zip_read_info->offset_local_extrafield +\n              pfile_in_zip_read_info->pos_local_extrafield,\n              ZLIB_FILEFUNC_SEEK_SET)!=0)\n        return UNZ_ERRNO;\n\n    if (ZREAD64(pfile_in_zip_read_info->z_filefunc,\n              pfile_in_zip_read_info->filestream,\n              buf,read_now)!=read_now)\n        return UNZ_ERRNO;\n\n    return (int)read_now;\n}\n\n/*\n  Close the file in zip opened with unzipOpenCurrentFile\n  Return UNZ_CRCERROR if all the file was read but the CRC is not good\n*/\nextern int ZEXPORT unzCloseCurrentFile (unzFile file)\n{\n    int err=UNZ_OK;\n\n    unz64_s* s;\n    file_in_zip64_read_info_s* pfile_in_zip_read_info;\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    pfile_in_zip_read_info=s->pfile_in_zip_read;\n\n    if (pfile_in_zip_read_info==NULL)\n        return UNZ_PARAMERROR;\n\n\n    if ((pfile_in_zip_read_info->rest_read_uncompressed == 0) &&\n        (!pfile_in_zip_read_info->raw))\n    {\n        if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait)\n            err=UNZ_CRCERROR;\n    }\n\n\n    TRYFREE(pfile_in_zip_read_info->read_buffer);\n    pfile_in_zip_read_info->read_buffer = NULL;\n    if (pfile_in_zip_read_info->stream_initialised == Z_DEFLATED)\n        inflateEnd(&pfile_in_zip_read_info->stream);\n#ifdef HAVE_BZIP2\n    else if (pfile_in_zip_read_info->stream_initialised == Z_BZIP2ED)\n        BZ2_bzDecompressEnd(&pfile_in_zip_read_info->bstream);\n#endif\n\n\n    pfile_in_zip_read_info->stream_initialised = 0;\n    TRYFREE(pfile_in_zip_read_info);\n\n    s->pfile_in_zip_read=NULL;\n\n    return err;\n}\n\n\n/*\n  Get the global comment string of the ZipFile, in the szComment buffer.\n  uSizeBuf is the size of the szComment buffer.\n  return the number of byte copied or an error code <0\n*/\nextern int ZEXPORT unzGetGlobalComment (unzFile file, char * szComment, uLong uSizeBuf)\n{\n    unz64_s* s;\n    uLong uReadThis ;\n    if (file==NULL)\n        return (int)UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n\n    uReadThis = uSizeBuf;\n    if (uReadThis>s->gi.size_comment)\n        uReadThis = s->gi.size_comment;\n\n    if (ZSEEK64(s->z_filefunc,s->filestream,s->central_pos+22,ZLIB_FILEFUNC_SEEK_SET)!=0)\n        return UNZ_ERRNO;\n\n    if (uReadThis>0)\n    {\n      *szComment='\\0';\n      if (ZREAD64(s->z_filefunc,s->filestream,szComment,uReadThis)!=uReadThis)\n        return UNZ_ERRNO;\n    }\n\n    if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment))\n        *(szComment+s->gi.size_comment)='\\0';\n    return (int)uReadThis;\n}\n\n/* Additions by RX '2004 */\nextern ZPOS64_T ZEXPORT unzGetOffset64(unzFile file)\n{\n    unz64_s* s;\n\n    if (file==NULL)\n          return 0; //UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n    if (!s->current_file_ok)\n      return 0;\n    if (s->gi.number_entry != 0 && s->gi.number_entry != 0xffff)\n      if (s->num_file==s->gi.number_entry)\n         return 0;\n    return s->pos_in_central_dir;\n}\n\nextern uLong ZEXPORT unzGetOffset (unzFile file)\n{\n    ZPOS64_T offset64;\n\n    if (file==NULL)\n          return 0; //UNZ_PARAMERROR;\n    offset64 = unzGetOffset64(file);\n    return (uLong)offset64;\n}\n\nextern int ZEXPORT unzSetOffset64(unzFile file, ZPOS64_T pos)\n{\n    unz64_s* s;\n    int err;\n\n    if (file==NULL)\n        return UNZ_PARAMERROR;\n    s=(unz64_s*)file;\n\n    s->pos_in_central_dir = pos;\n    s->num_file = s->gi.number_entry;      /* hack */\n    err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,\n                                              &s->cur_file_info_internal,\n                                              NULL,0,NULL,0,NULL,0);\n    s->current_file_ok = (err == UNZ_OK);\n    return err;\n}\n\nextern int ZEXPORT unzSetOffset (unzFile file, uLong pos)\n{\n    return unzSetOffset64(file,pos);\n}\n"
  },
  {
    "path": "external/zlib/contrib/minizip/unzip.h",
    "content": "/* unzip.h -- IO for uncompress .zip files using zlib\n   Version 1.1, February 14h, 2010\n   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Modifications of Unzip for Zip64\n         Copyright (C) 2007-2008 Even Rouault\n\n         Modifications for Zip64 support on both zip and unzip\n         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )\n\n         For more info read MiniZip_info.txt\n\n         ---------------------------------------------------------------------------------\n\n        Condition of use and distribution are the same than zlib :\n\n  This software is provided 'as-is', without any express or implied\n  warranty.  In no event will the authors be held liable for any damages\n  arising from the use of this software.\n\n  Permission is granted to anyone to use this software for any purpose,\n  including commercial applications, and to alter it and redistribute it\n  freely, subject to the following restrictions:\n\n  1. The origin of this software must not be misrepresented; you must not\n     claim that you wrote the original software. If you use this software\n     in a product, an acknowledgment in the product documentation would be\n     appreciated but is not required.\n  2. Altered source versions must be plainly marked as such, and must not be\n     misrepresented as being the original software.\n  3. This notice may not be removed or altered from any source distribution.\n\n  ---------------------------------------------------------------------------------\n\n        Changes\n\n        See header of unzip64.c\n\n*/\n\n#ifndef _unz64_H\n#define _unz64_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef _ZLIB_H\n#include \"zlib.h\"\n#endif\n\n#ifndef  _ZLIBIOAPI_H\n#include \"ioapi.h\"\n#endif\n\n#ifdef HAVE_BZIP2\n#include \"bzlib.h\"\n#endif\n\n#define Z_BZIP2ED 12\n\n#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP)\n/* like the STRICT of WIN32, we define a pointer that cannot be converted\n    from (void*) without cast */\ntypedef struct TagunzFile__ { int unused; } unzFile__;\ntypedef unzFile__ *unzFile;\n#else\ntypedef voidp unzFile;\n#endif\n\n\n#define UNZ_OK                          (0)\n#define UNZ_END_OF_LIST_OF_FILE         (-100)\n#define UNZ_ERRNO                       (Z_ERRNO)\n#define UNZ_EOF                         (0)\n#define UNZ_PARAMERROR                  (-102)\n#define UNZ_BADZIPFILE                  (-103)\n#define UNZ_INTERNALERROR               (-104)\n#define UNZ_CRCERROR                    (-105)\n\n/* tm_unz contain date/time info */\ntypedef struct tm_unz_s\n{\n    uInt tm_sec;            /* seconds after the minute - [0,59] */\n    uInt tm_min;            /* minutes after the hour - [0,59] */\n    uInt tm_hour;           /* hours since midnight - [0,23] */\n    uInt tm_mday;           /* day of the month - [1,31] */\n    uInt tm_mon;            /* months since January - [0,11] */\n    uInt tm_year;           /* years - [1980..2044] */\n} tm_unz;\n\n/* unz_global_info structure contain global data about the ZIPfile\n   These data comes from the end of central dir */\ntypedef struct unz_global_info64_s\n{\n    ZPOS64_T number_entry;         /* total number of entries in\n                                     the central dir on this disk */\n    uLong size_comment;         /* size of the global comment of the zipfile */\n} unz_global_info64;\n\ntypedef struct unz_global_info_s\n{\n    uLong number_entry;         /* total number of entries in\n                                     the central dir on this disk */\n    uLong size_comment;         /* size of the global comment of the zipfile */\n} unz_global_info;\n\n/* unz_file_info contain information about a file in the zipfile */\ntypedef struct unz_file_info64_s\n{\n    uLong version;              /* version made by                 2 bytes */\n    uLong version_needed;       /* version needed to extract       2 bytes */\n    uLong flag;                 /* general purpose bit flag        2 bytes */\n    uLong compression_method;   /* compression method              2 bytes */\n    uLong dosDate;              /* last mod file date in Dos fmt   4 bytes */\n    uLong crc;                  /* crc-32                          4 bytes */\n    ZPOS64_T compressed_size;   /* compressed size                 8 bytes */\n    ZPOS64_T uncompressed_size; /* uncompressed size               8 bytes */\n    uLong size_filename;        /* filename length                 2 bytes */\n    uLong size_file_extra;      /* extra field length              2 bytes */\n    uLong size_file_comment;    /* file comment length             2 bytes */\n\n    uLong disk_num_start;       /* disk number start               2 bytes */\n    uLong internal_fa;          /* internal file attributes        2 bytes */\n    uLong external_fa;          /* external file attributes        4 bytes */\n\n    tm_unz tmu_date;\n} unz_file_info64;\n\ntypedef struct unz_file_info_s\n{\n    uLong version;              /* version made by                 2 bytes */\n    uLong version_needed;       /* version needed to extract       2 bytes */\n    uLong flag;                 /* general purpose bit flag        2 bytes */\n    uLong compression_method;   /* compression method              2 bytes */\n    uLong dosDate;              /* last mod file date in Dos fmt   4 bytes */\n    uLong crc;                  /* crc-32                          4 bytes */\n    uLong compressed_size;      /* compressed size                 4 bytes */\n    uLong uncompressed_size;    /* uncompressed size               4 bytes */\n    uLong size_filename;        /* filename length                 2 bytes */\n    uLong size_file_extra;      /* extra field length              2 bytes */\n    uLong size_file_comment;    /* file comment length             2 bytes */\n\n    uLong disk_num_start;       /* disk number start               2 bytes */\n    uLong internal_fa;          /* internal file attributes        2 bytes */\n    uLong external_fa;          /* external file attributes        4 bytes */\n\n    tm_unz tmu_date;\n} unz_file_info;\n\nextern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1,\n                                                 const char* fileName2,\n                                                 int iCaseSensitivity));\n/*\n   Compare two filename (fileName1,fileName2).\n   If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)\n   If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi\n                                or strcasecmp)\n   If iCaseSenisivity = 0, case sensitivity is defaut of your operating system\n    (like 1 on Unix, 2 on Windows)\n*/\n\n\nextern unzFile ZEXPORT unzOpen OF((const char *path));\nextern unzFile ZEXPORT unzOpen64 OF((const void *path));\n/*\n  Open a Zip file. path contain the full pathname (by example,\n     on a Windows XP computer \"c:\\\\zlib\\\\zlib113.zip\" or on an Unix computer\n     \"zlib/zlib113.zip\".\n     If the zipfile cannot be opened (file don't exist or in not valid), the\n       return value is NULL.\n     Else, the return value is a unzFile Handle, usable with other function\n       of this unzip package.\n     the \"64\" function take a const void* pointer, because the path is just the\n       value passed to the open64_file_func callback.\n     Under Windows, if UNICODE is defined, using fill_fopen64_filefunc, the path\n       is a pointer to a wide unicode string (LPCTSTR is LPCWSTR), so const char*\n       does not describe the reality\n*/\n\n\nextern unzFile ZEXPORT unzOpen2 OF((const char *path,\n                                    zlib_filefunc_def* pzlib_filefunc_def));\n/*\n   Open a Zip file, like unzOpen, but provide a set of file low level API\n      for read/write the zip file (see ioapi.h)\n*/\n\nextern unzFile ZEXPORT unzOpen2_64 OF((const void *path,\n                                    zlib_filefunc64_def* pzlib_filefunc_def));\n/*\n   Open a Zip file, like unz64Open, but provide a set of file low level API\n      for read/write the zip file (see ioapi.h)\n*/\n\nextern int ZEXPORT unzClose OF((unzFile file));\n/*\n  Close a ZipFile opened with unzipOpen.\n  If there is files inside the .Zip opened with unzOpenCurrentFile (see later),\n    these files MUST be closed with unzipCloseCurrentFile before call unzipClose.\n  return UNZ_OK if there is no problem. */\n\nextern int ZEXPORT unzGetGlobalInfo OF((unzFile file,\n                                        unz_global_info *pglobal_info));\n\nextern int ZEXPORT unzGetGlobalInfo64 OF((unzFile file,\n                                        unz_global_info64 *pglobal_info));\n/*\n  Write info about the ZipFile in the *pglobal_info structure.\n  No preparation of the structure is needed\n  return UNZ_OK if there is no problem. */\n\n\nextern int ZEXPORT unzGetGlobalComment OF((unzFile file,\n                                           char *szComment,\n                                           uLong uSizeBuf));\n/*\n  Get the global comment string of the ZipFile, in the szComment buffer.\n  uSizeBuf is the size of the szComment buffer.\n  return the number of byte copied or an error code <0\n*/\n\n\n/***************************************************************************/\n/* Unzip package allow you browse the directory of the zipfile */\n\nextern int ZEXPORT unzGoToFirstFile OF((unzFile file));\n/*\n  Set the current file of the zipfile to the first file.\n  return UNZ_OK if there is no problem\n*/\n\nextern int ZEXPORT unzGoToNextFile OF((unzFile file));\n/*\n  Set the current file of the zipfile to the next file.\n  return UNZ_OK if there is no problem\n  return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.\n*/\n\nextern int ZEXPORT unzLocateFile OF((unzFile file,\n                     const char *szFileName,\n                     int iCaseSensitivity));\n/*\n  Try locate the file szFileName in the zipfile.\n  For the iCaseSensitivity signification, see unzStringFileNameCompare\n\n  return value :\n  UNZ_OK if the file is found. It becomes the current file.\n  UNZ_END_OF_LIST_OF_FILE if the file is not found\n*/\n\n\n/* ****************************************** */\n/* Ryan supplied functions */\n/* unz_file_info contain information about a file in the zipfile */\ntypedef struct unz_file_pos_s\n{\n    uLong pos_in_zip_directory;   /* offset in zip file directory */\n    uLong num_of_file;            /* # of file */\n} unz_file_pos;\n\nextern int ZEXPORT unzGetFilePos(\n    unzFile file,\n    unz_file_pos* file_pos);\n\nextern int ZEXPORT unzGoToFilePos(\n    unzFile file,\n    unz_file_pos* file_pos);\n\ntypedef struct unz64_file_pos_s\n{\n    ZPOS64_T pos_in_zip_directory;   /* offset in zip file directory */\n    ZPOS64_T num_of_file;            /* # of file */\n} unz64_file_pos;\n\nextern int ZEXPORT unzGetFilePos64(\n    unzFile file,\n    unz64_file_pos* file_pos);\n\nextern int ZEXPORT unzGoToFilePos64(\n    unzFile file,\n    const unz64_file_pos* file_pos);\n\n/* ****************************************** */\n\nextern int ZEXPORT unzGetCurrentFileInfo64 OF((unzFile file,\n                         unz_file_info64 *pfile_info,\n                         char *szFileName,\n                         uLong fileNameBufferSize,\n                         void *extraField,\n                         uLong extraFieldBufferSize,\n                         char *szComment,\n                         uLong commentBufferSize));\n\nextern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file,\n                         unz_file_info *pfile_info,\n                         char *szFileName,\n                         uLong fileNameBufferSize,\n                         void *extraField,\n                         uLong extraFieldBufferSize,\n                         char *szComment,\n                         uLong commentBufferSize));\n/*\n  Get Info about the current file\n  if pfile_info!=NULL, the *pfile_info structure will contain somes info about\n        the current file\n  if szFileName!=NULL, the filemane string will be copied in szFileName\n            (fileNameBufferSize is the size of the buffer)\n  if extraField!=NULL, the extra field information will be copied in extraField\n            (extraFieldBufferSize is the size of the buffer).\n            This is the Central-header version of the extra field\n  if szComment!=NULL, the comment string of the file will be copied in szComment\n            (commentBufferSize is the size of the buffer)\n*/\n\n\n/** Addition for GDAL : START */\n\nextern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64 OF((unzFile file));\n\n/** Addition for GDAL : END */\n\n\n/***************************************************************************/\n/* for reading the content of the current zipfile, you can open it, read data\n   from it, and close it (you can close it before reading all the file)\n   */\n\nextern int ZEXPORT unzOpenCurrentFile OF((unzFile file));\n/*\n  Open for reading data the current file in the zipfile.\n  If there is no error, the return value is UNZ_OK.\n*/\n\nextern int ZEXPORT unzOpenCurrentFilePassword OF((unzFile file,\n                                                  const char* password));\n/*\n  Open for reading data the current file in the zipfile.\n  password is a crypting password\n  If there is no error, the return value is UNZ_OK.\n*/\n\nextern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file,\n                                           int* method,\n                                           int* level,\n                                           int raw));\n/*\n  Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)\n    if raw==1\n  *method will receive method of compression, *level will receive level of\n     compression\n  note : you can set level parameter as NULL (if you did not want known level,\n         but you CANNOT set method parameter as NULL\n*/\n\nextern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file,\n                                           int* method,\n                                           int* level,\n                                           int raw,\n                                           const char* password));\n/*\n  Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)\n    if raw==1\n  *method will receive method of compression, *level will receive level of\n     compression\n  note : you can set level parameter as NULL (if you did not want known level,\n         but you CANNOT set method parameter as NULL\n*/\n\n\nextern int ZEXPORT unzCloseCurrentFile OF((unzFile file));\n/*\n  Close the file in zip opened with unzOpenCurrentFile\n  Return UNZ_CRCERROR if all the file was read but the CRC is not good\n*/\n\nextern int ZEXPORT unzReadCurrentFile OF((unzFile file,\n                      voidp buf,\n                      unsigned len));\n/*\n  Read bytes from the current file (opened by unzOpenCurrentFile)\n  buf contain buffer where data must be copied\n  len the size of buf.\n\n  return the number of byte copied if somes bytes are copied\n  return 0 if the end of file was reached\n  return <0 with error code if there is an error\n    (UNZ_ERRNO for IO error, or zLib error for uncompress error)\n*/\n\nextern z_off_t ZEXPORT unztell OF((unzFile file));\n\nextern ZPOS64_T ZEXPORT unztell64 OF((unzFile file));\n/*\n  Give the current position in uncompressed data\n*/\n\nextern int ZEXPORT unzeof OF((unzFile file));\n/*\n  return 1 if the end of file was reached, 0 elsewhere\n*/\n\nextern int ZEXPORT unzGetLocalExtrafield OF((unzFile file,\n                                             voidp buf,\n                                             unsigned len));\n/*\n  Read extra field from the current file (opened by unzOpenCurrentFile)\n  This is the local-header version of the extra field (sometimes, there is\n    more info in the local-header version than in the central-header)\n\n  if buf==NULL, it return the size of the local extra field\n\n  if buf!=NULL, len is the size of the buffer, the extra header is copied in\n    buf.\n  the return value is the number of bytes copied in buf, or (if <0)\n    the error code\n*/\n\n/***************************************************************************/\n\n/* Get the current file offset */\nextern ZPOS64_T ZEXPORT unzGetOffset64 (unzFile file);\nextern uLong ZEXPORT unzGetOffset (unzFile file);\n\n/* Set the current file offset */\nextern int ZEXPORT unzSetOffset64 (unzFile file, ZPOS64_T pos);\nextern int ZEXPORT unzSetOffset (unzFile file, uLong pos);\n\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _unz64_H */\n"
  },
  {
    "path": "external/zlib/contrib/minizip/zip.c",
    "content": "/* zip.c -- IO on .zip files using zlib\n   Version 1.1, February 14h, 2010\n   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Modifications for Zip64 support\n         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )\n\n         For more info read MiniZip_info.txt\n\n         Changes\n   Oct-2009 - Mathias Svensson - Remove old C style function prototypes\n   Oct-2009 - Mathias Svensson - Added Zip64 Support when creating new file archives\n   Oct-2009 - Mathias Svensson - Did some code cleanup and refactoring to get better overview of some functions.\n   Oct-2009 - Mathias Svensson - Added zipRemoveExtraInfoBlock to strip extra field data from its ZIP64 data\n                                 It is used when recreting zip archive with RAW when deleting items from a zip.\n                                 ZIP64 data is automaticly added to items that needs it, and existing ZIP64 data need to be removed.\n   Oct-2009 - Mathias Svensson - Added support for BZIP2 as compression mode (bzip2 lib is required)\n   Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer\n\n*/\n\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <time.h>\n#include \"zlib.h\"\n#include \"zip.h\"\n\n#ifdef STDC\n#  include <stddef.h>\n#  include <string.h>\n#  include <stdlib.h>\n#endif\n#ifdef NO_ERRNO_H\n    extern int errno;\n#else\n#   include <errno.h>\n#endif\n\n\n#ifndef local\n#  define local static\n#endif\n/* compile with -Dlocal if your debugger can't find static symbols */\n\n#ifndef VERSIONMADEBY\n# define VERSIONMADEBY   (0x0) /* platform depedent */\n#endif\n\n#ifndef Z_BUFSIZE\n#define Z_BUFSIZE (64*1024) //(16384)\n#endif\n\n#ifndef Z_MAXFILENAMEINZIP\n#define Z_MAXFILENAMEINZIP (256)\n#endif\n\n#ifndef ALLOC\n# define ALLOC(size) (malloc(size))\n#endif\n#ifndef TRYFREE\n# define TRYFREE(p) {if (p) free(p);}\n#endif\n\n/*\n#define SIZECENTRALDIRITEM (0x2e)\n#define SIZEZIPLOCALHEADER (0x1e)\n*/\n\n/* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */\n\n\n// NOT sure that this work on ALL platform\n#define MAKEULONG64(a, b) ((ZPOS64_T)(((unsigned long)(a)) | ((ZPOS64_T)((unsigned long)(b))) << 32))\n\n#ifndef SEEK_CUR\n#define SEEK_CUR    1\n#endif\n\n#ifndef SEEK_END\n#define SEEK_END    2\n#endif\n\n#ifndef SEEK_SET\n#define SEEK_SET    0\n#endif\n\n#ifndef DEF_MEM_LEVEL\n#if MAX_MEM_LEVEL >= 8\n#  define DEF_MEM_LEVEL 8\n#else\n#  define DEF_MEM_LEVEL  MAX_MEM_LEVEL\n#endif\n#endif\nconst char zip_copyright[] =\" zip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll\";\n\n\n#define SIZEDATA_INDATABLOCK (4096-(4*4))\n\n#define LOCALHEADERMAGIC    (0x04034b50)\n#define CENTRALHEADERMAGIC  (0x02014b50)\n#define ENDHEADERMAGIC      (0x06054b50)\n#define ZIP64ENDHEADERMAGIC      (0x6064b50)\n#define ZIP64ENDLOCHEADERMAGIC   (0x7064b50)\n\n#define FLAG_LOCALHEADER_OFFSET (0x06)\n#define CRC_LOCALHEADER_OFFSET  (0x0e)\n\n#define SIZECENTRALHEADER (0x2e) /* 46 */\n\ntypedef struct linkedlist_datablock_internal_s\n{\n  struct linkedlist_datablock_internal_s* next_datablock;\n  uLong  avail_in_this_block;\n  uLong  filled_in_this_block;\n  uLong  unused; /* for future use and alignement */\n  unsigned char data[SIZEDATA_INDATABLOCK];\n} linkedlist_datablock_internal;\n\ntypedef struct linkedlist_data_s\n{\n    linkedlist_datablock_internal* first_block;\n    linkedlist_datablock_internal* last_block;\n} linkedlist_data;\n\n\ntypedef struct\n{\n    z_stream stream;            /* zLib stream structure for inflate */\n#ifdef HAVE_BZIP2\n    bz_stream bstream;          /* bzLib stream structure for bziped */\n#endif\n\n    int  stream_initialised;    /* 1 is stream is initialised */\n    uInt pos_in_buffered_data;  /* last written byte in buffered_data */\n\n    ZPOS64_T pos_local_header;     /* offset of the local header of the file\n                                     currenty writing */\n    char* central_header;       /* central header data for the current file */\n    uLong size_centralExtra;\n    uLong size_centralheader;   /* size of the central header for cur file */\n    uLong size_centralExtraFree; /* Extra bytes allocated to the centralheader but that are not used */\n    uLong flag;                 /* flag of the file currently writing */\n\n    int  method;                /* compression method of file currenty wr.*/\n    int  raw;                   /* 1 for directly writing raw data */\n    Byte buffered_data[Z_BUFSIZE];/* buffer contain compressed data to be writ*/\n    uLong dosDate;\n    uLong crc32;\n    int  encrypt;\n    int  zip64;               /* Add ZIP64 extened information in the extra field */\n    ZPOS64_T pos_zip64extrainfo;\n    ZPOS64_T totalCompressedData;\n    ZPOS64_T totalUncompressedData;\n#ifndef NOCRYPT\n    unsigned long keys[3];     /* keys defining the pseudo-random sequence */\n    const unsigned long* pcrc_32_tab;\n    int crypt_header_size;\n#endif\n} curfile64_info;\n\ntypedef struct\n{\n    zlib_filefunc64_32_def z_filefunc;\n    voidpf filestream;        /* io structore of the zipfile */\n    linkedlist_data central_dir;/* datablock with central dir in construction*/\n    int  in_opened_file_inzip;  /* 1 if a file in the zip is currently writ.*/\n    curfile64_info ci;            /* info on the file curretly writing */\n\n    ZPOS64_T begin_pos;            /* position of the beginning of the zipfile */\n    ZPOS64_T add_position_when_writting_offset;\n    ZPOS64_T number_entry;\n\n#ifndef NO_ADDFILEINEXISTINGZIP\n    char *globalcomment;\n#endif\n\n} zip64_internal;\n\n\n#ifndef NOCRYPT\n#define INCLUDECRYPTINGCODE_IFCRYPTALLOWED\n#include \"crypt.h\"\n#endif\n\nlocal linkedlist_datablock_internal* allocate_new_datablock()\n{\n    linkedlist_datablock_internal* ldi;\n    ldi = (linkedlist_datablock_internal*)\n                 ALLOC(sizeof(linkedlist_datablock_internal));\n    if (ldi!=NULL)\n    {\n        ldi->next_datablock = NULL ;\n        ldi->filled_in_this_block = 0 ;\n        ldi->avail_in_this_block = SIZEDATA_INDATABLOCK ;\n    }\n    return ldi;\n}\n\nlocal void free_datablock(linkedlist_datablock_internal* ldi)\n{\n    while (ldi!=NULL)\n    {\n        linkedlist_datablock_internal* ldinext = ldi->next_datablock;\n        TRYFREE(ldi);\n        ldi = ldinext;\n    }\n}\n\nlocal void init_linkedlist(linkedlist_data* ll)\n{\n    ll->first_block = ll->last_block = NULL;\n}\n\nlocal void free_linkedlist(linkedlist_data* ll)\n{\n    free_datablock(ll->first_block);\n    ll->first_block = ll->last_block = NULL;\n}\n\n\nlocal int add_data_in_datablock(linkedlist_data* ll, const void* buf, uLong len)\n{\n    linkedlist_datablock_internal* ldi;\n    const unsigned char* from_copy;\n\n    if (ll==NULL)\n        return ZIP_INTERNALERROR;\n\n    if (ll->last_block == NULL)\n    {\n        ll->first_block = ll->last_block = allocate_new_datablock();\n        if (ll->first_block == NULL)\n            return ZIP_INTERNALERROR;\n    }\n\n    ldi = ll->last_block;\n    from_copy = (unsigned char*)buf;\n\n    while (len>0)\n    {\n        uInt copy_this;\n        uInt i;\n        unsigned char* to_copy;\n\n        if (ldi->avail_in_this_block==0)\n        {\n            ldi->next_datablock = allocate_new_datablock();\n            if (ldi->next_datablock == NULL)\n                return ZIP_INTERNALERROR;\n            ldi = ldi->next_datablock ;\n            ll->last_block = ldi;\n        }\n\n        if (ldi->avail_in_this_block < len)\n            copy_this = (uInt)ldi->avail_in_this_block;\n        else\n            copy_this = (uInt)len;\n\n        to_copy = &(ldi->data[ldi->filled_in_this_block]);\n\n        for (i=0;i<copy_this;i++)\n            *(to_copy+i)=*(from_copy+i);\n\n        ldi->filled_in_this_block += copy_this;\n        ldi->avail_in_this_block -= copy_this;\n        from_copy += copy_this ;\n        len -= copy_this;\n    }\n    return ZIP_OK;\n}\n\n\n\n/****************************************************************************/\n\n#ifndef NO_ADDFILEINEXISTINGZIP\n/* ===========================================================================\n   Inputs a long in LSB order to the given file\n   nbByte == 1, 2 ,4 or 8 (byte, short or long, ZPOS64_T)\n*/\n\nlocal int zip64local_putValue OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte));\nlocal int zip64local_putValue (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte)\n{\n    unsigned char buf[8];\n    int n;\n    for (n = 0; n < nbByte; n++)\n    {\n        buf[n] = (unsigned char)(x & 0xff);\n        x >>= 8;\n    }\n    if (x != 0)\n      {     /* data overflow - hack for ZIP64 (X Roche) */\n      for (n = 0; n < nbByte; n++)\n        {\n          buf[n] = 0xff;\n        }\n      }\n\n    if (ZWRITE64(*pzlib_filefunc_def,filestream,buf,nbByte)!=(uLong)nbByte)\n        return ZIP_ERRNO;\n    else\n        return ZIP_OK;\n}\n\nlocal void zip64local_putValue_inmemory OF((void* dest, ZPOS64_T x, int nbByte));\nlocal void zip64local_putValue_inmemory (void* dest, ZPOS64_T x, int nbByte)\n{\n    unsigned char* buf=(unsigned char*)dest;\n    int n;\n    for (n = 0; n < nbByte; n++) {\n        buf[n] = (unsigned char)(x & 0xff);\n        x >>= 8;\n    }\n\n    if (x != 0)\n    {     /* data overflow - hack for ZIP64 */\n       for (n = 0; n < nbByte; n++)\n       {\n          buf[n] = 0xff;\n       }\n    }\n}\n\n/****************************************************************************/\n\n\nlocal uLong zip64local_TmzDateToDosDate(const tm_zip* ptm)\n{\n    uLong year = (uLong)ptm->tm_year;\n    if (year>=1980)\n        year-=1980;\n    else if (year>=80)\n        year-=80;\n    return\n      (uLong) (((ptm->tm_mday) + (32 * (ptm->tm_mon+1)) + (512 * year)) << 16) |\n        ((ptm->tm_sec/2) + (32* ptm->tm_min) + (2048 * (uLong)ptm->tm_hour));\n}\n\n\n/****************************************************************************/\n\nlocal int zip64local_getByte OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int *pi));\n\nlocal int zip64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def,voidpf filestream,int* pi)\n{\n    unsigned char c;\n    int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1);\n    if (err==1)\n    {\n        *pi = (int)c;\n        return ZIP_OK;\n    }\n    else\n    {\n        if (ZERROR64(*pzlib_filefunc_def,filestream))\n            return ZIP_ERRNO;\n        else\n            return ZIP_EOF;\n    }\n}\n\n\n/* ===========================================================================\n   Reads a long in LSB order from the given gz_stream. Sets\n*/\nlocal int zip64local_getShort OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong *pX));\n\nlocal int zip64local_getShort (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX)\n{\n    uLong x ;\n    int i = 0;\n    int err;\n\n    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x = (uLong)i;\n\n    if (err==ZIP_OK)\n        err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x += ((uLong)i)<<8;\n\n    if (err==ZIP_OK)\n        *pX = x;\n    else\n        *pX = 0;\n    return err;\n}\n\nlocal int zip64local_getLong OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong *pX));\n\nlocal int zip64local_getLong (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX)\n{\n    uLong x ;\n    int i = 0;\n    int err;\n\n    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x = (uLong)i;\n\n    if (err==ZIP_OK)\n        err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x += ((uLong)i)<<8;\n\n    if (err==ZIP_OK)\n        err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x += ((uLong)i)<<16;\n\n    if (err==ZIP_OK)\n        err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n    x += ((uLong)i)<<24;\n\n    if (err==ZIP_OK)\n        *pX = x;\n    else\n        *pX = 0;\n    return err;\n}\n\nlocal int zip64local_getLong64 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX));\n\n\nlocal int zip64local_getLong64 (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX)\n{\n  ZPOS64_T x;\n  int i = 0;\n  int err;\n\n  err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n  x = (ZPOS64_T)i;\n\n  if (err==ZIP_OK)\n    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n  x += ((ZPOS64_T)i)<<8;\n\n  if (err==ZIP_OK)\n    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n  x += ((ZPOS64_T)i)<<16;\n\n  if (err==ZIP_OK)\n    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n  x += ((ZPOS64_T)i)<<24;\n\n  if (err==ZIP_OK)\n    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n  x += ((ZPOS64_T)i)<<32;\n\n  if (err==ZIP_OK)\n    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n  x += ((ZPOS64_T)i)<<40;\n\n  if (err==ZIP_OK)\n    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n  x += ((ZPOS64_T)i)<<48;\n\n  if (err==ZIP_OK)\n    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);\n  x += ((ZPOS64_T)i)<<56;\n\n  if (err==ZIP_OK)\n    *pX = x;\n  else\n    *pX = 0;\n\n  return err;\n}\n\n#ifndef BUFREADCOMMENT\n#define BUFREADCOMMENT (0x400)\n#endif\n/*\n  Locate the Central directory of a zipfile (at the end, just before\n    the global comment)\n*/\nlocal ZPOS64_T zip64local_SearchCentralDir OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));\n\nlocal ZPOS64_T zip64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)\n{\n  unsigned char* buf;\n  ZPOS64_T uSizeFile;\n  ZPOS64_T uBackRead;\n  ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */\n  ZPOS64_T uPosFound=0;\n\n  if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)\n    return 0;\n\n\n  uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);\n\n  if (uMaxBack>uSizeFile)\n    uMaxBack = uSizeFile;\n\n  buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);\n  if (buf==NULL)\n    return 0;\n\n  uBackRead = 4;\n  while (uBackRead<uMaxBack)\n  {\n    uLong uReadSize;\n    ZPOS64_T uReadPos ;\n    int i;\n    if (uBackRead+BUFREADCOMMENT>uMaxBack)\n      uBackRead = uMaxBack;\n    else\n      uBackRead+=BUFREADCOMMENT;\n    uReadPos = uSizeFile-uBackRead ;\n\n    uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?\n      (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);\n    if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)\n      break;\n\n    if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)\n      break;\n\n    for (i=(int)uReadSize-3; (i--)>0;)\n      if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&\n        ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))\n      {\n        uPosFound = uReadPos+i;\n        break;\n      }\n\n      if (uPosFound!=0)\n        break;\n  }\n  TRYFREE(buf);\n  return uPosFound;\n}\n\n/*\nLocate the End of Zip64 Central directory locator and from there find the CD of a zipfile (at the end, just before\nthe global comment)\n*/\nlocal ZPOS64_T zip64local_SearchCentralDir64 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));\n\nlocal ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)\n{\n  unsigned char* buf;\n  ZPOS64_T uSizeFile;\n  ZPOS64_T uBackRead;\n  ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */\n  ZPOS64_T uPosFound=0;\n  uLong uL;\n  ZPOS64_T relativeOffset;\n\n  if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)\n    return 0;\n\n  uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);\n\n  if (uMaxBack>uSizeFile)\n    uMaxBack = uSizeFile;\n\n  buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);\n  if (buf==NULL)\n    return 0;\n\n  uBackRead = 4;\n  while (uBackRead<uMaxBack)\n  {\n    uLong uReadSize;\n    ZPOS64_T uReadPos;\n    int i;\n    if (uBackRead+BUFREADCOMMENT>uMaxBack)\n      uBackRead = uMaxBack;\n    else\n      uBackRead+=BUFREADCOMMENT;\n    uReadPos = uSizeFile-uBackRead ;\n\n    uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?\n      (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);\n    if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)\n      break;\n\n    if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)\n      break;\n\n    for (i=(int)uReadSize-3; (i--)>0;)\n    {\n      // Signature \"0x07064b50\" Zip64 end of central directory locater\n      if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))\n      {\n        uPosFound = uReadPos+i;\n        break;\n      }\n    }\n\n      if (uPosFound!=0)\n        break;\n  }\n\n  TRYFREE(buf);\n  if (uPosFound == 0)\n    return 0;\n\n  /* Zip64 end of central directory locator */\n  if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0)\n    return 0;\n\n  /* the signature, already checked */\n  if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)\n    return 0;\n\n  /* number of the disk with the start of the zip64 end of  central directory */\n  if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)\n    return 0;\n  if (uL != 0)\n    return 0;\n\n  /* relative offset of the zip64 end of central directory record */\n  if (zip64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=ZIP_OK)\n    return 0;\n\n  /* total number of disks */\n  if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)\n    return 0;\n  if (uL != 1)\n    return 0;\n\n  /* Goto Zip64 end of central directory record */\n  if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0)\n    return 0;\n\n  /* the signature */\n  if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)\n    return 0;\n\n  if (uL != 0x06064b50) // signature of 'Zip64 end of central directory'\n    return 0;\n\n  return relativeOffset;\n}\n\nint LoadCentralDirectoryRecord(zip64_internal* pziinit)\n{\n  int err=ZIP_OK;\n  ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/\n\n  ZPOS64_T size_central_dir;     /* size of the central directory  */\n  ZPOS64_T offset_central_dir;   /* offset of start of central directory */\n  ZPOS64_T central_pos;\n  uLong uL;\n\n  uLong number_disk;          /* number of the current dist, used for\n                              spaning ZIP, unsupported, always 0*/\n  uLong number_disk_with_CD;  /* number the the disk with central dir, used\n                              for spaning ZIP, unsupported, always 0*/\n  ZPOS64_T number_entry;\n  ZPOS64_T number_entry_CD;      /* total number of entries in\n                                the central dir\n                                (same than number_entry on nospan) */\n  uLong VersionMadeBy;\n  uLong VersionNeeded;\n  uLong size_comment;\n\n  int hasZIP64Record = 0;\n\n  // check first if we find a ZIP64 record\n  central_pos = zip64local_SearchCentralDir64(&pziinit->z_filefunc,pziinit->filestream);\n  if(central_pos > 0)\n  {\n    hasZIP64Record = 1;\n  }\n  else if(central_pos == 0)\n  {\n    central_pos = zip64local_SearchCentralDir(&pziinit->z_filefunc,pziinit->filestream);\n  }\n\n/* disable to allow appending to empty ZIP archive\n        if (central_pos==0)\n            err=ZIP_ERRNO;\n*/\n\n  if(hasZIP64Record)\n  {\n    ZPOS64_T sizeEndOfCentralDirectory;\n    if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos, ZLIB_FILEFUNC_SEEK_SET) != 0)\n      err=ZIP_ERRNO;\n\n    /* the signature, already checked */\n    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    /* size of zip64 end of central directory record */\n    if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &sizeEndOfCentralDirectory)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    /* version made by */\n    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionMadeBy)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    /* version needed to extract */\n    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionNeeded)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    /* number of this disk */\n    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    /* number of the disk with the start of the central directory */\n    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    /* total number of entries in the central directory on this disk */\n    if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &number_entry)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    /* total number of entries in the central directory */\n    if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&number_entry_CD)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0))\n      err=ZIP_BADZIPFILE;\n\n    /* size of the central directory */\n    if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&size_central_dir)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    /* offset of start of central directory with respect to the\n    starting disk number */\n    if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&offset_central_dir)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    // TODO..\n    // read the comment from the standard central header.\n    size_comment = 0;\n  }\n  else\n  {\n    // Read End of central Directory info\n    if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)\n      err=ZIP_ERRNO;\n\n    /* the signature, already checked */\n    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    /* number of this disk */\n    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    /* number of the disk with the start of the central directory */\n    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK)\n      err=ZIP_ERRNO;\n\n    /* total number of entries in the central dir on this disk */\n    number_entry = 0;\n    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)\n      err=ZIP_ERRNO;\n    else\n      number_entry = uL;\n\n    /* total number of entries in the central dir */\n    number_entry_CD = 0;\n    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)\n      err=ZIP_ERRNO;\n    else\n      number_entry_CD = uL;\n\n    if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0))\n      err=ZIP_BADZIPFILE;\n\n    /* size of the central directory */\n    size_central_dir = 0;\n    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)\n      err=ZIP_ERRNO;\n    else\n      size_central_dir = uL;\n\n    /* offset of start of central directory with respect to the starting disk number */\n    offset_central_dir = 0;\n    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)\n      err=ZIP_ERRNO;\n    else\n      offset_central_dir = uL;\n\n\n    /* zipfile global comment length */\n    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &size_comment)!=ZIP_OK)\n      err=ZIP_ERRNO;\n  }\n\n  if ((central_pos<offset_central_dir+size_central_dir) &&\n    (err==ZIP_OK))\n    err=ZIP_BADZIPFILE;\n\n  if (err!=ZIP_OK)\n  {\n    ZCLOSE64(pziinit->z_filefunc, pziinit->filestream);\n    return ZIP_ERRNO;\n  }\n\n  if (size_comment>0)\n  {\n    pziinit->globalcomment = (char*)ALLOC(size_comment+1);\n    if (pziinit->globalcomment)\n    {\n      size_comment = ZREAD64(pziinit->z_filefunc, pziinit->filestream, pziinit->globalcomment,size_comment);\n      pziinit->globalcomment[size_comment]=0;\n    }\n  }\n\n  byte_before_the_zipfile = central_pos - (offset_central_dir+size_central_dir);\n  pziinit->add_position_when_writting_offset = byte_before_the_zipfile;\n\n  {\n    ZPOS64_T size_central_dir_to_read = size_central_dir;\n    size_t buf_size = SIZEDATA_INDATABLOCK;\n    void* buf_read = (void*)ALLOC(buf_size);\n    if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir + byte_before_the_zipfile, ZLIB_FILEFUNC_SEEK_SET) != 0)\n      err=ZIP_ERRNO;\n\n    while ((size_central_dir_to_read>0) && (err==ZIP_OK))\n    {\n      ZPOS64_T read_this = SIZEDATA_INDATABLOCK;\n      if (read_this > size_central_dir_to_read)\n        read_this = size_central_dir_to_read;\n\n      if (ZREAD64(pziinit->z_filefunc, pziinit->filestream,buf_read,(uLong)read_this) != read_this)\n        err=ZIP_ERRNO;\n\n      if (err==ZIP_OK)\n        err = add_data_in_datablock(&pziinit->central_dir,buf_read, (uLong)read_this);\n\n      size_central_dir_to_read-=read_this;\n    }\n    TRYFREE(buf_read);\n  }\n  pziinit->begin_pos = byte_before_the_zipfile;\n  pziinit->number_entry = number_entry_CD;\n\n  if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir+byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET) != 0)\n    err=ZIP_ERRNO;\n\n  return err;\n}\n\n\n#endif /* !NO_ADDFILEINEXISTINGZIP*/\n\n\n/************************************************************/\nextern zipFile ZEXPORT zipOpen3 (const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_32_def* pzlib_filefunc64_32_def)\n{\n    zip64_internal ziinit;\n    zip64_internal* zi;\n    int err=ZIP_OK;\n\n    ziinit.z_filefunc.zseek32_file = NULL;\n    ziinit.z_filefunc.ztell32_file = NULL;\n    if (pzlib_filefunc64_32_def==NULL)\n        fill_fopen64_filefunc(&ziinit.z_filefunc.zfile_func64);\n    else\n        ziinit.z_filefunc = *pzlib_filefunc64_32_def;\n\n    ziinit.filestream = ZOPEN64(ziinit.z_filefunc,\n                  pathname,\n                  (append == APPEND_STATUS_CREATE) ?\n                  (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_CREATE) :\n                    (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_EXISTING));\n\n    if (ziinit.filestream == NULL)\n        return NULL;\n\n    if (append == APPEND_STATUS_CREATEAFTER)\n        ZSEEK64(ziinit.z_filefunc,ziinit.filestream,0,SEEK_END);\n\n    ziinit.begin_pos = ZTELL64(ziinit.z_filefunc,ziinit.filestream);\n    ziinit.in_opened_file_inzip = 0;\n    ziinit.ci.stream_initialised = 0;\n    ziinit.number_entry = 0;\n    ziinit.add_position_when_writting_offset = 0;\n    init_linkedlist(&(ziinit.central_dir));\n\n\n\n    zi = (zip64_internal*)ALLOC(sizeof(zip64_internal));\n    if (zi==NULL)\n    {\n        ZCLOSE64(ziinit.z_filefunc,ziinit.filestream);\n        return NULL;\n    }\n\n    /* now we add file in a zipfile */\n#    ifndef NO_ADDFILEINEXISTINGZIP\n    ziinit.globalcomment = NULL;\n    if (append == APPEND_STATUS_ADDINZIP)\n    {\n      // Read and Cache Central Directory Records\n      err = LoadCentralDirectoryRecord(&ziinit);\n    }\n\n    if (globalcomment)\n    {\n      *globalcomment = ziinit.globalcomment;\n    }\n#    endif /* !NO_ADDFILEINEXISTINGZIP*/\n\n    if (err != ZIP_OK)\n    {\n#    ifndef NO_ADDFILEINEXISTINGZIP\n        TRYFREE(ziinit.globalcomment);\n#    endif /* !NO_ADDFILEINEXISTINGZIP*/\n        TRYFREE(zi);\n        return NULL;\n    }\n    else\n    {\n        *zi = ziinit;\n        return (zipFile)zi;\n    }\n}\n\nextern zipFile ZEXPORT zipOpen2 (const char *pathname, int append, zipcharpc* globalcomment, zlib_filefunc_def* pzlib_filefunc32_def)\n{\n    if (pzlib_filefunc32_def != NULL)\n    {\n        zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;\n        fill_zlib_filefunc64_32_def_from_filefunc32(&zlib_filefunc64_32_def_fill,pzlib_filefunc32_def);\n        return zipOpen3(pathname, append, globalcomment, &zlib_filefunc64_32_def_fill);\n    }\n    else\n        return zipOpen3(pathname, append, globalcomment, NULL);\n}\n\nextern zipFile ZEXPORT zipOpen2_64 (const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_def* pzlib_filefunc_def)\n{\n    if (pzlib_filefunc_def != NULL)\n    {\n        zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;\n        zlib_filefunc64_32_def_fill.zfile_func64 = *pzlib_filefunc_def;\n        zlib_filefunc64_32_def_fill.ztell32_file = NULL;\n        zlib_filefunc64_32_def_fill.zseek32_file = NULL;\n        return zipOpen3(pathname, append, globalcomment, &zlib_filefunc64_32_def_fill);\n    }\n    else\n        return zipOpen3(pathname, append, globalcomment, NULL);\n}\n\n\n\nextern zipFile ZEXPORT zipOpen (const char* pathname, int append)\n{\n    return zipOpen3((const void*)pathname,append,NULL,NULL);\n}\n\nextern zipFile ZEXPORT zipOpen64 (const void* pathname, int append)\n{\n    return zipOpen3(pathname,append,NULL,NULL);\n}\n\nint Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local)\n{\n  /* write the local header */\n  int err;\n  uInt size_filename = (uInt)strlen(filename);\n  uInt size_extrafield = size_extrafield_local;\n\n  err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)LOCALHEADERMAGIC, 4);\n\n  if (err==ZIP_OK)\n  {\n    if(zi->ci.zip64)\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);/* version needed to extract */\n    else\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)20,2);/* version needed to extract */\n  }\n\n  if (err==ZIP_OK)\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.flag,2);\n\n  if (err==ZIP_OK)\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.method,2);\n\n  if (err==ZIP_OK)\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.dosDate,4);\n\n  // CRC / Compressed size / Uncompressed size will be filled in later and rewritten later\n  if (err==ZIP_OK)\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* crc 32, unknown */\n  if (err==ZIP_OK)\n  {\n    if(zi->ci.zip64)\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* compressed size, unknown */\n    else\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* compressed size, unknown */\n  }\n  if (err==ZIP_OK)\n  {\n    if(zi->ci.zip64)\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* uncompressed size, unknown */\n    else\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* uncompressed size, unknown */\n  }\n\n  if (err==ZIP_OK)\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_filename,2);\n\n  if(zi->ci.zip64)\n  {\n    size_extrafield += 20;\n  }\n\n  if (err==ZIP_OK)\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_extrafield,2);\n\n  if ((err==ZIP_OK) && (size_filename > 0))\n  {\n    if (ZWRITE64(zi->z_filefunc,zi->filestream,filename,size_filename)!=size_filename)\n      err = ZIP_ERRNO;\n  }\n\n  if ((err==ZIP_OK) && (size_extrafield_local > 0))\n  {\n    if (ZWRITE64(zi->z_filefunc, zi->filestream, extrafield_local, size_extrafield_local) != size_extrafield_local)\n      err = ZIP_ERRNO;\n  }\n\n\n  if ((err==ZIP_OK) && (zi->ci.zip64))\n  {\n      // write the Zip64 extended info\n      short HeaderID = 1;\n      short DataSize = 16;\n      ZPOS64_T CompressedSize = 0;\n      ZPOS64_T UncompressedSize = 0;\n\n      // Remember position of Zip64 extended info for the local file header. (needed when we update size after done with file)\n      zi->ci.pos_zip64extrainfo = ZTELL64(zi->z_filefunc,zi->filestream);\n\n      err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)HeaderID,2);\n      err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)DataSize,2);\n\n      err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)UncompressedSize,8);\n      err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)CompressedSize,8);\n  }\n\n  return err;\n}\n\n/*\n NOTE.\n When writing RAW the ZIP64 extended information in extrafield_local and extrafield_global needs to be stripped\n before calling this function it can be done with zipRemoveExtraInfoBlock\n\n It is not done here because then we need to realloc a new buffer since parameters are 'const' and I want to minimize\n unnecessary allocations.\n */\nextern int ZEXPORT zipOpenNewFileInZip4_64 (zipFile file, const char* filename, const zip_fileinfo* zipfi,\n                                         const void* extrafield_local, uInt size_extrafield_local,\n                                         const void* extrafield_global, uInt size_extrafield_global,\n                                         const char* comment, int method, int level, int raw,\n                                         int windowBits,int memLevel, int strategy,\n                                         const char* password, uLong crcForCrypting,\n                                         uLong versionMadeBy, uLong flagBase, int zip64)\n{\n    zip64_internal* zi;\n    uInt size_filename;\n    uInt size_comment;\n    uInt i;\n    int err = ZIP_OK;\n\n#    ifdef NOCRYPT\n    if (password != NULL)\n        return ZIP_PARAMERROR;\n#    endif\n\n    if (file == NULL)\n        return ZIP_PARAMERROR;\n\n#ifdef HAVE_BZIP2\n    if ((method!=0) && (method!=Z_DEFLATED) && (method!=Z_BZIP2ED))\n      return ZIP_PARAMERROR;\n#else\n    if ((method!=0) && (method!=Z_DEFLATED))\n      return ZIP_PARAMERROR;\n#endif\n\n    zi = (zip64_internal*)file;\n\n    if (zi->in_opened_file_inzip == 1)\n    {\n        err = zipCloseFileInZip (file);\n        if (err != ZIP_OK)\n            return err;\n    }\n\n    if (filename==NULL)\n        filename=\"-\";\n\n    if (comment==NULL)\n        size_comment = 0;\n    else\n        size_comment = (uInt)strlen(comment);\n\n    size_filename = (uInt)strlen(filename);\n\n    if (zipfi == NULL)\n        zi->ci.dosDate = 0;\n    else\n    {\n        if (zipfi->dosDate != 0)\n            zi->ci.dosDate = zipfi->dosDate;\n        else\n          zi->ci.dosDate = zip64local_TmzDateToDosDate(&zipfi->tmz_date);\n    }\n\n    zi->ci.flag = flagBase;\n    if ((level==8) || (level==9))\n      zi->ci.flag |= 2;\n    if ((level==2))\n      zi->ci.flag |= 4;\n    if ((level==1))\n      zi->ci.flag |= 6;\n    if (password != NULL)\n      zi->ci.flag |= 1;\n\n    zi->ci.crc32 = 0;\n    zi->ci.method = method;\n    zi->ci.encrypt = 0;\n    zi->ci.stream_initialised = 0;\n    zi->ci.pos_in_buffered_data = 0;\n    zi->ci.raw = raw;\n    zi->ci.pos_local_header = ZTELL64(zi->z_filefunc,zi->filestream);\n\n    zi->ci.size_centralheader = SIZECENTRALHEADER + size_filename + size_extrafield_global + size_comment;\n    zi->ci.size_centralExtraFree = 32; // Extra space we have reserved in case we need to add ZIP64 extra info data\n\n    zi->ci.central_header = (char*)ALLOC((uInt)zi->ci.size_centralheader + zi->ci.size_centralExtraFree);\n\n    zi->ci.size_centralExtra = size_extrafield_global;\n    zip64local_putValue_inmemory(zi->ci.central_header,(uLong)CENTRALHEADERMAGIC,4);\n    /* version info */\n    zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)versionMadeBy,2);\n    zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)20,2);\n    zip64local_putValue_inmemory(zi->ci.central_header+8,(uLong)zi->ci.flag,2);\n    zip64local_putValue_inmemory(zi->ci.central_header+10,(uLong)zi->ci.method,2);\n    zip64local_putValue_inmemory(zi->ci.central_header+12,(uLong)zi->ci.dosDate,4);\n    zip64local_putValue_inmemory(zi->ci.central_header+16,(uLong)0,4); /*crc*/\n    zip64local_putValue_inmemory(zi->ci.central_header+20,(uLong)0,4); /*compr size*/\n    zip64local_putValue_inmemory(zi->ci.central_header+24,(uLong)0,4); /*uncompr size*/\n    zip64local_putValue_inmemory(zi->ci.central_header+28,(uLong)size_filename,2);\n    zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)size_extrafield_global,2);\n    zip64local_putValue_inmemory(zi->ci.central_header+32,(uLong)size_comment,2);\n    zip64local_putValue_inmemory(zi->ci.central_header+34,(uLong)0,2); /*disk nm start*/\n\n    if (zipfi==NULL)\n        zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)0,2);\n    else\n        zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)zipfi->internal_fa,2);\n\n    if (zipfi==NULL)\n        zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)0,4);\n    else\n        zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)zipfi->external_fa,4);\n\n    if(zi->ci.pos_local_header >= 0xffffffff)\n      zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)0xffffffff,4);\n    else\n      zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)zi->ci.pos_local_header - zi->add_position_when_writting_offset,4);\n\n    for (i=0;i<size_filename;i++)\n        *(zi->ci.central_header+SIZECENTRALHEADER+i) = *(filename+i);\n\n    for (i=0;i<size_extrafield_global;i++)\n        *(zi->ci.central_header+SIZECENTRALHEADER+size_filename+i) =\n              *(((const char*)extrafield_global)+i);\n\n    for (i=0;i<size_comment;i++)\n        *(zi->ci.central_header+SIZECENTRALHEADER+size_filename+\n              size_extrafield_global+i) = *(comment+i);\n    if (zi->ci.central_header == NULL)\n        return ZIP_INTERNALERROR;\n\n    zi->ci.zip64 = zip64;\n    zi->ci.totalCompressedData = 0;\n    zi->ci.totalUncompressedData = 0;\n    zi->ci.pos_zip64extrainfo = 0;\n\n    err = Write_LocalFileHeader(zi, filename, size_extrafield_local, extrafield_local);\n\n#ifdef HAVE_BZIP2\n    zi->ci.bstream.avail_in = (uInt)0;\n    zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;\n    zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;\n    zi->ci.bstream.total_in_hi32 = 0;\n    zi->ci.bstream.total_in_lo32 = 0;\n    zi->ci.bstream.total_out_hi32 = 0;\n    zi->ci.bstream.total_out_lo32 = 0;\n#endif\n\n    zi->ci.stream.avail_in = (uInt)0;\n    zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;\n    zi->ci.stream.next_out = zi->ci.buffered_data;\n    zi->ci.stream.total_in = 0;\n    zi->ci.stream.total_out = 0;\n    zi->ci.stream.data_type = Z_BINARY;\n\n#ifdef HAVE_BZIP2\n    if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED || zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))\n#else\n    if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))\n#endif\n    {\n        if(zi->ci.method == Z_DEFLATED)\n        {\n          zi->ci.stream.zalloc = (alloc_func)0;\n          zi->ci.stream.zfree = (free_func)0;\n          zi->ci.stream.opaque = (voidpf)0;\n\n          if (windowBits>0)\n              windowBits = -windowBits;\n\n          err = deflateInit2(&zi->ci.stream, level, Z_DEFLATED, windowBits, memLevel, strategy);\n\n          if (err==Z_OK)\n              zi->ci.stream_initialised = Z_DEFLATED;\n        }\n        else if(zi->ci.method == Z_BZIP2ED)\n        {\n#ifdef HAVE_BZIP2\n            // Init BZip stuff here\n          zi->ci.bstream.bzalloc = 0;\n          zi->ci.bstream.bzfree = 0;\n          zi->ci.bstream.opaque = (voidpf)0;\n\n          err = BZ2_bzCompressInit(&zi->ci.bstream, level, 0,35);\n          if(err == BZ_OK)\n            zi->ci.stream_initialised = Z_BZIP2ED;\n#endif\n        }\n\n    }\n\n#    ifndef NOCRYPT\n    zi->ci.crypt_header_size = 0;\n    if ((err==Z_OK) && (password != NULL))\n    {\n        unsigned char bufHead[RAND_HEAD_LEN];\n        unsigned int sizeHead;\n        zi->ci.encrypt = 1;\n        zi->ci.pcrc_32_tab = get_crc_table();\n        /*init_keys(password,zi->ci.keys,zi->ci.pcrc_32_tab);*/\n\n        sizeHead=crypthead(password,bufHead,RAND_HEAD_LEN,zi->ci.keys,zi->ci.pcrc_32_tab,crcForCrypting);\n        zi->ci.crypt_header_size = sizeHead;\n\n        if (ZWRITE64(zi->z_filefunc,zi->filestream,bufHead,sizeHead) != sizeHead)\n                err = ZIP_ERRNO;\n    }\n#    endif\n\n    if (err==Z_OK)\n        zi->in_opened_file_inzip = 1;\n    return err;\n}\n\nextern int ZEXPORT zipOpenNewFileInZip4 (zipFile file, const char* filename, const zip_fileinfo* zipfi,\n                                         const void* extrafield_local, uInt size_extrafield_local,\n                                         const void* extrafield_global, uInt size_extrafield_global,\n                                         const char* comment, int method, int level, int raw,\n                                         int windowBits,int memLevel, int strategy,\n                                         const char* password, uLong crcForCrypting,\n                                         uLong versionMadeBy, uLong flagBase)\n{\n    return zipOpenNewFileInZip4_64 (file, filename, zipfi,\n                                 extrafield_local, size_extrafield_local,\n                                 extrafield_global, size_extrafield_global,\n                                 comment, method, level, raw,\n                                 windowBits, memLevel, strategy,\n                                 password, crcForCrypting, versionMadeBy, flagBase, 0);\n}\n\nextern int ZEXPORT zipOpenNewFileInZip3 (zipFile file, const char* filename, const zip_fileinfo* zipfi,\n                                         const void* extrafield_local, uInt size_extrafield_local,\n                                         const void* extrafield_global, uInt size_extrafield_global,\n                                         const char* comment, int method, int level, int raw,\n                                         int windowBits,int memLevel, int strategy,\n                                         const char* password, uLong crcForCrypting)\n{\n    return zipOpenNewFileInZip4_64 (file, filename, zipfi,\n                                 extrafield_local, size_extrafield_local,\n                                 extrafield_global, size_extrafield_global,\n                                 comment, method, level, raw,\n                                 windowBits, memLevel, strategy,\n                                 password, crcForCrypting, VERSIONMADEBY, 0, 0);\n}\n\nextern int ZEXPORT zipOpenNewFileInZip3_64(zipFile file, const char* filename, const zip_fileinfo* zipfi,\n                                         const void* extrafield_local, uInt size_extrafield_local,\n                                         const void* extrafield_global, uInt size_extrafield_global,\n                                         const char* comment, int method, int level, int raw,\n                                         int windowBits,int memLevel, int strategy,\n                                         const char* password, uLong crcForCrypting, int zip64)\n{\n    return zipOpenNewFileInZip4_64 (file, filename, zipfi,\n                                 extrafield_local, size_extrafield_local,\n                                 extrafield_global, size_extrafield_global,\n                                 comment, method, level, raw,\n                                 windowBits, memLevel, strategy,\n                                 password, crcForCrypting, VERSIONMADEBY, 0, zip64);\n}\n\nextern int ZEXPORT zipOpenNewFileInZip2(zipFile file, const char* filename, const zip_fileinfo* zipfi,\n                                        const void* extrafield_local, uInt size_extrafield_local,\n                                        const void* extrafield_global, uInt size_extrafield_global,\n                                        const char* comment, int method, int level, int raw)\n{\n    return zipOpenNewFileInZip4_64 (file, filename, zipfi,\n                                 extrafield_local, size_extrafield_local,\n                                 extrafield_global, size_extrafield_global,\n                                 comment, method, level, raw,\n                                 -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,\n                                 NULL, 0, VERSIONMADEBY, 0, 0);\n}\n\nextern int ZEXPORT zipOpenNewFileInZip2_64(zipFile file, const char* filename, const zip_fileinfo* zipfi,\n                                        const void* extrafield_local, uInt size_extrafield_local,\n                                        const void* extrafield_global, uInt size_extrafield_global,\n                                        const char* comment, int method, int level, int raw, int zip64)\n{\n    return zipOpenNewFileInZip4_64 (file, filename, zipfi,\n                                 extrafield_local, size_extrafield_local,\n                                 extrafield_global, size_extrafield_global,\n                                 comment, method, level, raw,\n                                 -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,\n                                 NULL, 0, VERSIONMADEBY, 0, zip64);\n}\n\nextern int ZEXPORT zipOpenNewFileInZip64 (zipFile file, const char* filename, const zip_fileinfo* zipfi,\n                                        const void* extrafield_local, uInt size_extrafield_local,\n                                        const void*extrafield_global, uInt size_extrafield_global,\n                                        const char* comment, int method, int level, int zip64)\n{\n    return zipOpenNewFileInZip4_64 (file, filename, zipfi,\n                                 extrafield_local, size_extrafield_local,\n                                 extrafield_global, size_extrafield_global,\n                                 comment, method, level, 0,\n                                 -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,\n                                 NULL, 0, VERSIONMADEBY, 0, zip64);\n}\n\nextern int ZEXPORT zipOpenNewFileInZip (zipFile file, const char* filename, const zip_fileinfo* zipfi,\n                                        const void* extrafield_local, uInt size_extrafield_local,\n                                        const void*extrafield_global, uInt size_extrafield_global,\n                                        const char* comment, int method, int level)\n{\n    return zipOpenNewFileInZip4_64 (file, filename, zipfi,\n                                 extrafield_local, size_extrafield_local,\n                                 extrafield_global, size_extrafield_global,\n                                 comment, method, level, 0,\n                                 -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,\n                                 NULL, 0, VERSIONMADEBY, 0, 0);\n}\n\nlocal int zip64FlushWriteBuffer(zip64_internal* zi)\n{\n    int err=ZIP_OK;\n\n    if (zi->ci.encrypt != 0)\n    {\n#ifndef NOCRYPT\n        uInt i;\n        int t;\n        for (i=0;i<zi->ci.pos_in_buffered_data;i++)\n            zi->ci.buffered_data[i] = zencode(zi->ci.keys, zi->ci.pcrc_32_tab, zi->ci.buffered_data[i],t);\n#endif\n    }\n\n    if (ZWRITE64(zi->z_filefunc,zi->filestream,zi->ci.buffered_data,zi->ci.pos_in_buffered_data) != zi->ci.pos_in_buffered_data)\n      err = ZIP_ERRNO;\n\n    zi->ci.totalCompressedData += zi->ci.pos_in_buffered_data;\n\n#ifdef HAVE_BZIP2\n    if(zi->ci.method == Z_BZIP2ED)\n    {\n      zi->ci.totalUncompressedData += zi->ci.bstream.total_in_lo32;\n      zi->ci.bstream.total_in_lo32 = 0;\n      zi->ci.bstream.total_in_hi32 = 0;\n    }\n    else\n#endif\n    {\n      zi->ci.totalUncompressedData += zi->ci.stream.total_in;\n      zi->ci.stream.total_in = 0;\n    }\n\n\n    zi->ci.pos_in_buffered_data = 0;\n\n    return err;\n}\n\nextern int ZEXPORT zipWriteInFileInZip (zipFile file,const void* buf,unsigned int len)\n{\n    zip64_internal* zi;\n    int err=ZIP_OK;\n\n    if (file == NULL)\n        return ZIP_PARAMERROR;\n    zi = (zip64_internal*)file;\n\n    if (zi->in_opened_file_inzip == 0)\n        return ZIP_PARAMERROR;\n\n    zi->ci.crc32 = crc32(zi->ci.crc32,buf,(uInt)len);\n\n#ifdef HAVE_BZIP2\n    if(zi->ci.method == Z_BZIP2ED && (!zi->ci.raw))\n    {\n      zi->ci.bstream.next_in = (void*)buf;\n      zi->ci.bstream.avail_in = len;\n      err = BZ_RUN_OK;\n\n      while ((err==BZ_RUN_OK) && (zi->ci.bstream.avail_in>0))\n      {\n        if (zi->ci.bstream.avail_out == 0)\n        {\n          if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)\n            err = ZIP_ERRNO;\n          zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;\n          zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;\n        }\n\n\n        if(err != BZ_RUN_OK)\n          break;\n\n        if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))\n        {\n          uLong uTotalOutBefore_lo = zi->ci.bstream.total_out_lo32;\n//          uLong uTotalOutBefore_hi = zi->ci.bstream.total_out_hi32;\n          err=BZ2_bzCompress(&zi->ci.bstream,  BZ_RUN);\n\n          zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore_lo) ;\n        }\n      }\n\n      if(err == BZ_RUN_OK)\n        err = ZIP_OK;\n    }\n    else\n#endif\n    {\n      zi->ci.stream.next_in = (Bytef*)buf;\n      zi->ci.stream.avail_in = len;\n\n      while ((err==ZIP_OK) && (zi->ci.stream.avail_in>0))\n      {\n          if (zi->ci.stream.avail_out == 0)\n          {\n              if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)\n                  err = ZIP_ERRNO;\n              zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;\n              zi->ci.stream.next_out = zi->ci.buffered_data;\n          }\n\n\n          if(err != ZIP_OK)\n              break;\n\n          if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))\n          {\n              uLong uTotalOutBefore = zi->ci.stream.total_out;\n              err=deflate(&zi->ci.stream,  Z_NO_FLUSH);\n              if(uTotalOutBefore > zi->ci.stream.total_out)\n              {\n                int bBreak = 0;\n                bBreak++;\n              }\n\n              zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ;\n          }\n          else\n          {\n              uInt copy_this,i;\n              if (zi->ci.stream.avail_in < zi->ci.stream.avail_out)\n                  copy_this = zi->ci.stream.avail_in;\n              else\n                  copy_this = zi->ci.stream.avail_out;\n\n              for (i = 0; i < copy_this; i++)\n                  *(((char*)zi->ci.stream.next_out)+i) =\n                      *(((const char*)zi->ci.stream.next_in)+i);\n              {\n                  zi->ci.stream.avail_in -= copy_this;\n                  zi->ci.stream.avail_out-= copy_this;\n                  zi->ci.stream.next_in+= copy_this;\n                  zi->ci.stream.next_out+= copy_this;\n                  zi->ci.stream.total_in+= copy_this;\n                  zi->ci.stream.total_out+= copy_this;\n                  zi->ci.pos_in_buffered_data += copy_this;\n              }\n          }\n      }// while(...)\n    }\n\n    return err;\n}\n\nextern int ZEXPORT zipCloseFileInZipRaw (zipFile file, uLong uncompressed_size, uLong crc32)\n{\n    return zipCloseFileInZipRaw64 (file, uncompressed_size, crc32);\n}\n\nextern int ZEXPORT zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompressed_size, uLong crc32)\n{\n    zip64_internal* zi;\n    ZPOS64_T compressed_size;\n    uLong invalidValue = 0xffffffff;\n    short datasize = 0;\n    int err=ZIP_OK;\n\n    if (file == NULL)\n        return ZIP_PARAMERROR;\n    zi = (zip64_internal*)file;\n\n    if (zi->in_opened_file_inzip == 0)\n        return ZIP_PARAMERROR;\n    zi->ci.stream.avail_in = 0;\n\n    if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))\n                {\n                        while (err==ZIP_OK)\n                        {\n                                uLong uTotalOutBefore;\n                                if (zi->ci.stream.avail_out == 0)\n                                {\n                                        if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)\n                                                err = ZIP_ERRNO;\n                                        zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;\n                                        zi->ci.stream.next_out = zi->ci.buffered_data;\n                                }\n                                uTotalOutBefore = zi->ci.stream.total_out;\n                                err=deflate(&zi->ci.stream,  Z_FINISH);\n                                zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ;\n                        }\n                }\n    else if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))\n    {\n#ifdef HAVE_BZIP2\n      err = BZ_FINISH_OK;\n      while (err==BZ_FINISH_OK)\n      {\n        uLong uTotalOutBefore;\n        if (zi->ci.bstream.avail_out == 0)\n        {\n          if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)\n            err = ZIP_ERRNO;\n          zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;\n          zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;\n        }\n        uTotalOutBefore = zi->ci.bstream.total_out_lo32;\n        err=BZ2_bzCompress(&zi->ci.bstream,  BZ_FINISH);\n        if(err == BZ_STREAM_END)\n          err = Z_STREAM_END;\n\n        zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore);\n      }\n\n      if(err == BZ_FINISH_OK)\n        err = ZIP_OK;\n#endif\n    }\n\n    if (err==Z_STREAM_END)\n        err=ZIP_OK; /* this is normal */\n\n    if ((zi->ci.pos_in_buffered_data>0) && (err==ZIP_OK))\n                {\n        if (zip64FlushWriteBuffer(zi)==ZIP_ERRNO)\n            err = ZIP_ERRNO;\n                }\n\n    if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))\n    {\n        int tmp_err = deflateEnd(&zi->ci.stream);\n        if (err == ZIP_OK)\n            err = tmp_err;\n        zi->ci.stream_initialised = 0;\n    }\n#ifdef HAVE_BZIP2\n    else if((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))\n    {\n      int tmperr = BZ2_bzCompressEnd(&zi->ci.bstream);\n                        if (err==ZIP_OK)\n                                err = tmperr;\n                        zi->ci.stream_initialised = 0;\n    }\n#endif\n\n    if (!zi->ci.raw)\n    {\n        crc32 = (uLong)zi->ci.crc32;\n        uncompressed_size = zi->ci.totalUncompressedData;\n    }\n    compressed_size = zi->ci.totalCompressedData;\n\n#    ifndef NOCRYPT\n    compressed_size += zi->ci.crypt_header_size;\n#    endif\n\n    // update Current Item crc and sizes,\n    if(compressed_size >= 0xffffffff || uncompressed_size >= 0xffffffff || zi->ci.pos_local_header >= 0xffffffff)\n    {\n      /*version Made by*/\n      zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)45,2);\n      /*version needed*/\n      zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)45,2);\n\n    }\n\n    zip64local_putValue_inmemory(zi->ci.central_header+16,crc32,4); /*crc*/\n\n\n    if(compressed_size >= 0xffffffff)\n      zip64local_putValue_inmemory(zi->ci.central_header+20, invalidValue,4); /*compr size*/\n    else\n      zip64local_putValue_inmemory(zi->ci.central_header+20, compressed_size,4); /*compr size*/\n\n    /// set internal file attributes field\n    if (zi->ci.stream.data_type == Z_ASCII)\n        zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)Z_ASCII,2);\n\n    if(uncompressed_size >= 0xffffffff)\n      zip64local_putValue_inmemory(zi->ci.central_header+24, invalidValue,4); /*uncompr size*/\n    else\n      zip64local_putValue_inmemory(zi->ci.central_header+24, uncompressed_size,4); /*uncompr size*/\n\n    // Add ZIP64 extra info field for uncompressed size\n    if(uncompressed_size >= 0xffffffff)\n      datasize += 8;\n\n    // Add ZIP64 extra info field for compressed size\n    if(compressed_size >= 0xffffffff)\n      datasize += 8;\n\n    // Add ZIP64 extra info field for relative offset to local file header of current file\n    if(zi->ci.pos_local_header >= 0xffffffff)\n      datasize += 8;\n\n    if(datasize > 0)\n    {\n      char* p = NULL;\n\n      if((uLong)(datasize + 4) > zi->ci.size_centralExtraFree)\n      {\n        // we can not write more data to the buffer that we have room for.\n        return ZIP_BADZIPFILE;\n      }\n\n      p = zi->ci.central_header + zi->ci.size_centralheader;\n\n      // Add Extra Information Header for 'ZIP64 information'\n      zip64local_putValue_inmemory(p, 0x0001, 2); // HeaderID\n      p += 2;\n      zip64local_putValue_inmemory(p, datasize, 2); // DataSize\n      p += 2;\n\n      if(uncompressed_size >= 0xffffffff)\n      {\n        zip64local_putValue_inmemory(p, uncompressed_size, 8);\n        p += 8;\n      }\n\n      if(compressed_size >= 0xffffffff)\n      {\n        zip64local_putValue_inmemory(p, compressed_size, 8);\n        p += 8;\n      }\n\n      if(zi->ci.pos_local_header >= 0xffffffff)\n      {\n        zip64local_putValue_inmemory(p, zi->ci.pos_local_header, 8);\n        p += 8;\n      }\n\n      // Update how much extra free space we got in the memory buffer\n      // and increase the centralheader size so the new ZIP64 fields are included\n      // ( 4 below is the size of HeaderID and DataSize field )\n      zi->ci.size_centralExtraFree -= datasize + 4;\n      zi->ci.size_centralheader += datasize + 4;\n\n      // Update the extra info size field\n      zi->ci.size_centralExtra += datasize + 4;\n      zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)zi->ci.size_centralExtra,2);\n    }\n\n    if (err==ZIP_OK)\n        err = add_data_in_datablock(&zi->central_dir, zi->ci.central_header, (uLong)zi->ci.size_centralheader);\n\n    free(zi->ci.central_header);\n\n    if (err==ZIP_OK)\n    {\n        // Update the LocalFileHeader with the new values.\n\n        ZPOS64_T cur_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream);\n\n        if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_local_header + 14,ZLIB_FILEFUNC_SEEK_SET)!=0)\n            err = ZIP_ERRNO;\n\n        if (err==ZIP_OK)\n            err = zip64local_putValue(&zi->z_filefunc,zi->filestream,crc32,4); /* crc 32, unknown */\n\n        if(uncompressed_size >= 0xffffffff)\n        {\n          if(zi->ci.pos_zip64extrainfo > 0)\n          {\n            // Update the size in the ZIP64 extended field.\n            if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_zip64extrainfo + 4,ZLIB_FILEFUNC_SEEK_SET)!=0)\n              err = ZIP_ERRNO;\n\n            if (err==ZIP_OK) /* compressed size, unknown */\n              err = zip64local_putValue(&zi->z_filefunc, zi->filestream, uncompressed_size, 8);\n\n            if (err==ZIP_OK) /* uncompressed size, unknown */\n              err = zip64local_putValue(&zi->z_filefunc, zi->filestream, compressed_size, 8);\n          }\n        }\n        else\n        {\n          if (err==ZIP_OK) /* compressed size, unknown */\n              err = zip64local_putValue(&zi->z_filefunc,zi->filestream,compressed_size,4);\n\n          if (err==ZIP_OK) /* uncompressed size, unknown */\n              err = zip64local_putValue(&zi->z_filefunc,zi->filestream,uncompressed_size,4);\n        }\n\n        if (ZSEEK64(zi->z_filefunc,zi->filestream, cur_pos_inzip,ZLIB_FILEFUNC_SEEK_SET)!=0)\n            err = ZIP_ERRNO;\n    }\n\n    zi->number_entry ++;\n    zi->in_opened_file_inzip = 0;\n\n    return err;\n}\n\nextern int ZEXPORT zipCloseFileInZip (zipFile file)\n{\n    return zipCloseFileInZipRaw (file,0,0);\n}\n\nint Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip)\n{\n  int err = ZIP_OK;\n  ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writting_offset;\n\n  err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDLOCHEADERMAGIC,4);\n\n  /*num disks*/\n    if (err==ZIP_OK) /* number of the disk with the start of the central directory */\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);\n\n  /*relative offset*/\n    if (err==ZIP_OK) /* Relative offset to the Zip64EndOfCentralDirectory */\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream, pos,8);\n\n  /*total disks*/ /* Do not support spawning of disk so always say 1 here*/\n    if (err==ZIP_OK) /* number of the disk with the start of the central directory */\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)1,4);\n\n    return err;\n}\n\nint Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)\n{\n  int err = ZIP_OK;\n\n  uLong Zip64DataSize = 44;\n\n  err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDHEADERMAGIC,4);\n\n  if (err==ZIP_OK) /* size of this 'zip64 end of central directory' */\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)Zip64DataSize,8); // why ZPOS64_T of this ?\n\n  if (err==ZIP_OK) /* version made by */\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);\n\n  if (err==ZIP_OK) /* version needed */\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);\n\n  if (err==ZIP_OK) /* number of this disk */\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);\n\n  if (err==ZIP_OK) /* number of the disk with the start of the central directory */\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);\n\n  if (err==ZIP_OK) /* total number of entries in the central dir on this disk */\n    err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8);\n\n  if (err==ZIP_OK) /* total number of entries in the central dir */\n    err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8);\n\n  if (err==ZIP_OK) /* size of the central directory */\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)size_centraldir,8);\n\n  if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */\n  {\n    ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (ZPOS64_T)pos,8);\n  }\n  return err;\n}\nint Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)\n{\n  int err = ZIP_OK;\n\n  /*signature*/\n  err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4);\n\n  if (err==ZIP_OK) /* number of this disk */\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2);\n\n  if (err==ZIP_OK) /* number of the disk with the start of the central directory */\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2);\n\n  if (err==ZIP_OK) /* total number of entries in the central dir on this disk */\n  {\n    {\n      if(zi->number_entry >= 0xFFFF)\n        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record\n      else\n        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2);\n    }\n  }\n\n  if (err==ZIP_OK) /* total number of entries in the central dir */\n  {\n    if(zi->number_entry >= 0xFFFF)\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record\n    else\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2);\n  }\n\n  if (err==ZIP_OK) /* size of the central directory */\n    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_centraldir,4);\n\n  if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */\n  {\n    ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;\n    if(pos >= 0xffffffff)\n    {\n      err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)0xffffffff,4);\n    }\n    else\n                  err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)(centraldir_pos_inzip - zi->add_position_when_writting_offset),4);\n  }\n\n   return err;\n}\n\nint Write_GlobalComment(zip64_internal* zi, const char* global_comment)\n{\n  int err = ZIP_OK;\n  uInt size_global_comment = 0;\n\n  if(global_comment != NULL)\n    size_global_comment = (uInt)strlen(global_comment);\n\n  err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_global_comment,2);\n\n  if (err == ZIP_OK && size_global_comment > 0)\n  {\n    if (ZWRITE64(zi->z_filefunc,zi->filestream, global_comment, size_global_comment) != size_global_comment)\n      err = ZIP_ERRNO;\n  }\n  return err;\n}\n\nextern int ZEXPORT zipClose (zipFile file, const char* global_comment)\n{\n    zip64_internal* zi;\n    int err = 0;\n    uLong size_centraldir = 0;\n    ZPOS64_T centraldir_pos_inzip;\n    ZPOS64_T pos;\n\n    if (file == NULL)\n        return ZIP_PARAMERROR;\n\n    zi = (zip64_internal*)file;\n\n    if (zi->in_opened_file_inzip == 1)\n    {\n        err = zipCloseFileInZip (file);\n    }\n\n#ifndef NO_ADDFILEINEXISTINGZIP\n    if (global_comment==NULL)\n        global_comment = zi->globalcomment;\n#endif\n\n    centraldir_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream);\n\n    if (err==ZIP_OK)\n    {\n        linkedlist_datablock_internal* ldi = zi->central_dir.first_block;\n        while (ldi!=NULL)\n        {\n            if ((err==ZIP_OK) && (ldi->filled_in_this_block>0))\n            {\n                if (ZWRITE64(zi->z_filefunc,zi->filestream, ldi->data, ldi->filled_in_this_block) != ldi->filled_in_this_block)\n                    err = ZIP_ERRNO;\n            }\n\n            size_centraldir += ldi->filled_in_this_block;\n            ldi = ldi->next_datablock;\n        }\n    }\n    free_linkedlist(&(zi->central_dir));\n\n    pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;\n    if(pos >= 0xffffffff)\n    {\n      ZPOS64_T Zip64EOCDpos = ZTELL64(zi->z_filefunc,zi->filestream);\n      Write_Zip64EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip);\n\n      Write_Zip64EndOfCentralDirectoryLocator(zi, Zip64EOCDpos);\n    }\n\n    if (err==ZIP_OK)\n      err = Write_EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip);\n\n    if(err == ZIP_OK)\n      err = Write_GlobalComment(zi, global_comment);\n\n    if (ZCLOSE64(zi->z_filefunc,zi->filestream) != 0)\n        if (err == ZIP_OK)\n            err = ZIP_ERRNO;\n\n#ifndef NO_ADDFILEINEXISTINGZIP\n    TRYFREE(zi->globalcomment);\n#endif\n    TRYFREE(zi);\n\n    return err;\n}\n\nextern int ZEXPORT zipRemoveExtraInfoBlock (char* pData, int* dataLen, short sHeader)\n{\n  char* p = pData;\n  int size = 0;\n  char* pNewHeader;\n  char* pTmp;\n  short header;\n  short dataSize;\n\n  int retVal = ZIP_OK;\n\n  if(pData == NULL || *dataLen < 4)\n    return ZIP_PARAMERROR;\n\n  pNewHeader = (char*)ALLOC(*dataLen);\n  pTmp = pNewHeader;\n\n  while(p < (pData + *dataLen))\n  {\n    header = *(short*)p;\n    dataSize = *(((short*)p)+1);\n\n    if( header == sHeader ) // Header found.\n    {\n      p += dataSize + 4; // skip it. do not copy to temp buffer\n    }\n    else\n    {\n      // Extra Info block should not be removed, So copy it to the temp buffer.\n      memcpy(pTmp, p, dataSize + 4);\n      p += dataSize + 4;\n      size += dataSize + 4;\n    }\n\n  }\n\n  if(size < *dataLen)\n  {\n    // clean old extra info block.\n    memset(pData,0, *dataLen);\n\n    // copy the new extra info block over the old\n    if(size > 0)\n      memcpy(pData, pNewHeader, size);\n\n    // set the new extra info size\n    *dataLen = size;\n\n    retVal = ZIP_OK;\n  }\n  else\n    retVal = ZIP_ERRNO;\n\n  TRYFREE(pNewHeader);\n\n  return retVal;\n}\n"
  },
  {
    "path": "external/zlib/contrib/minizip/zip.h",
    "content": "/* zip.h -- IO on .zip files using zlib\n   Version 1.1, February 14h, 2010\n   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )\n\n         Modifications for Zip64 support\n         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )\n\n         For more info read MiniZip_info.txt\n\n         ---------------------------------------------------------------------------\n\n   Condition of use and distribution are the same than zlib :\n\n  This software is provided 'as-is', without any express or implied\n  warranty.  In no event will the authors be held liable for any damages\n  arising from the use of this software.\n\n  Permission is granted to anyone to use this software for any purpose,\n  including commercial applications, and to alter it and redistribute it\n  freely, subject to the following restrictions:\n\n  1. The origin of this software must not be misrepresented; you must not\n     claim that you wrote the original software. If you use this software\n     in a product, an acknowledgment in the product documentation would be\n     appreciated but is not required.\n  2. Altered source versions must be plainly marked as such, and must not be\n     misrepresented as being the original software.\n  3. This notice may not be removed or altered from any source distribution.\n\n        ---------------------------------------------------------------------------\n\n        Changes\n\n        See header of zip.h\n\n*/\n\n#ifndef _zip12_H\n#define _zip12_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n//#define HAVE_BZIP2\n\n#ifndef _ZLIB_H\n#include \"zlib.h\"\n#endif\n\n#ifndef _ZLIBIOAPI_H\n#include \"ioapi.h\"\n#endif\n\n#ifdef HAVE_BZIP2\n#include \"bzlib.h\"\n#endif\n\n#define Z_BZIP2ED 12\n\n#if defined(STRICTZIP) || defined(STRICTZIPUNZIP)\n/* like the STRICT of WIN32, we define a pointer that cannot be converted\n    from (void*) without cast */\ntypedef struct TagzipFile__ { int unused; } zipFile__;\ntypedef zipFile__ *zipFile;\n#else\ntypedef voidp zipFile;\n#endif\n\n#define ZIP_OK                          (0)\n#define ZIP_EOF                         (0)\n#define ZIP_ERRNO                       (Z_ERRNO)\n#define ZIP_PARAMERROR                  (-102)\n#define ZIP_BADZIPFILE                  (-103)\n#define ZIP_INTERNALERROR               (-104)\n\n#ifndef DEF_MEM_LEVEL\n#  if MAX_MEM_LEVEL >= 8\n#    define DEF_MEM_LEVEL 8\n#  else\n#    define DEF_MEM_LEVEL  MAX_MEM_LEVEL\n#  endif\n#endif\n/* default memLevel */\n\n/* tm_zip contain date/time info */\ntypedef struct tm_zip_s\n{\n    uInt tm_sec;            /* seconds after the minute - [0,59] */\n    uInt tm_min;            /* minutes after the hour - [0,59] */\n    uInt tm_hour;           /* hours since midnight - [0,23] */\n    uInt tm_mday;           /* day of the month - [1,31] */\n    uInt tm_mon;            /* months since January - [0,11] */\n    uInt tm_year;           /* years - [1980..2044] */\n} tm_zip;\n\ntypedef struct\n{\n    tm_zip      tmz_date;       /* date in understandable format           */\n    uLong       dosDate;       /* if dos_date == 0, tmu_date is used      */\n/*    uLong       flag;        */   /* general purpose bit flag        2 bytes */\n\n    uLong       internal_fa;    /* internal file attributes        2 bytes */\n    uLong       external_fa;    /* external file attributes        4 bytes */\n} zip_fileinfo;\n\ntypedef const char* zipcharpc;\n\n\n#define APPEND_STATUS_CREATE        (0)\n#define APPEND_STATUS_CREATEAFTER   (1)\n#define APPEND_STATUS_ADDINZIP      (2)\n\nextern zipFile ZEXPORT zipOpen OF((const char *pathname, int append));\nextern zipFile ZEXPORT zipOpen64 OF((const void *pathname, int append));\n/*\n  Create a zipfile.\n     pathname contain on Windows XP a filename like \"c:\\\\zlib\\\\zlib113.zip\" or on\n       an Unix computer \"zlib/zlib113.zip\".\n     if the file pathname exist and append==APPEND_STATUS_CREATEAFTER, the zip\n       will be created at the end of the file.\n         (useful if the file contain a self extractor code)\n     if the file pathname exist and append==APPEND_STATUS_ADDINZIP, we will\n       add files in existing zip (be sure you don't add file that doesn't exist)\n     If the zipfile cannot be opened, the return value is NULL.\n     Else, the return value is a zipFile Handle, usable with other function\n       of this zip package.\n*/\n\n/* Note : there is no delete function into a zipfile.\n   If you want delete file into a zipfile, you must open a zipfile, and create another\n   Of couse, you can use RAW reading and writing to copy the file you did not want delte\n*/\n\nextern zipFile ZEXPORT zipOpen2 OF((const char *pathname,\n                                   int append,\n                                   zipcharpc* globalcomment,\n                                   zlib_filefunc_def* pzlib_filefunc_def));\n\nextern zipFile ZEXPORT zipOpen2_64 OF((const void *pathname,\n                                   int append,\n                                   zipcharpc* globalcomment,\n                                   zlib_filefunc64_def* pzlib_filefunc_def));\n\nextern int ZEXPORT zipOpenNewFileInZip OF((zipFile file,\n                       const char* filename,\n                       const zip_fileinfo* zipfi,\n                       const void* extrafield_local,\n                       uInt size_extrafield_local,\n                       const void* extrafield_global,\n                       uInt size_extrafield_global,\n                       const char* comment,\n                       int method,\n                       int level));\n\nextern int ZEXPORT zipOpenNewFileInZip64 OF((zipFile file,\n                       const char* filename,\n                       const zip_fileinfo* zipfi,\n                       const void* extrafield_local,\n                       uInt size_extrafield_local,\n                       const void* extrafield_global,\n                       uInt size_extrafield_global,\n                       const char* comment,\n                       int method,\n                       int level,\n                       int zip64));\n\n/*\n  Open a file in the ZIP for writing.\n  filename : the filename in zip (if NULL, '-' without quote will be used\n  *zipfi contain supplemental information\n  if extrafield_local!=NULL and size_extrafield_local>0, extrafield_local\n    contains the extrafield data the the local header\n  if extrafield_global!=NULL and size_extrafield_global>0, extrafield_global\n    contains the extrafield data the the local header\n  if comment != NULL, comment contain the comment string\n  method contain the compression method (0 for store, Z_DEFLATED for deflate)\n  level contain the level of compression (can be Z_DEFAULT_COMPRESSION)\n  zip64 is set to 1 if a zip64 extended information block should be added to the local file header.\n                    this MUST be '1' if the uncompressed size is >= 0xffffffff.\n\n*/\n\n\nextern int ZEXPORT zipOpenNewFileInZip2 OF((zipFile file,\n                                            const char* filename,\n                                            const zip_fileinfo* zipfi,\n                                            const void* extrafield_local,\n                                            uInt size_extrafield_local,\n                                            const void* extrafield_global,\n                                            uInt size_extrafield_global,\n                                            const char* comment,\n                                            int method,\n                                            int level,\n                                            int raw));\n\n\nextern int ZEXPORT zipOpenNewFileInZip2_64 OF((zipFile file,\n                                            const char* filename,\n                                            const zip_fileinfo* zipfi,\n                                            const void* extrafield_local,\n                                            uInt size_extrafield_local,\n                                            const void* extrafield_global,\n                                            uInt size_extrafield_global,\n                                            const char* comment,\n                                            int method,\n                                            int level,\n                                            int raw,\n                                            int zip64));\n/*\n  Same than zipOpenNewFileInZip, except if raw=1, we write raw file\n */\n\nextern int ZEXPORT zipOpenNewFileInZip3 OF((zipFile file,\n                                            const char* filename,\n                                            const zip_fileinfo* zipfi,\n                                            const void* extrafield_local,\n                                            uInt size_extrafield_local,\n                                            const void* extrafield_global,\n                                            uInt size_extrafield_global,\n                                            const char* comment,\n                                            int method,\n                                            int level,\n                                            int raw,\n                                            int windowBits,\n                                            int memLevel,\n                                            int strategy,\n                                            const char* password,\n                                            uLong crcForCrypting));\n\nextern int ZEXPORT zipOpenNewFileInZip3_64 OF((zipFile file,\n                                            const char* filename,\n                                            const zip_fileinfo* zipfi,\n                                            const void* extrafield_local,\n                                            uInt size_extrafield_local,\n                                            const void* extrafield_global,\n                                            uInt size_extrafield_global,\n                                            const char* comment,\n                                            int method,\n                                            int level,\n                                            int raw,\n                                            int windowBits,\n                                            int memLevel,\n                                            int strategy,\n                                            const char* password,\n                                            uLong crcForCrypting,\n                                            int zip64\n                                            ));\n\n/*\n  Same than zipOpenNewFileInZip2, except\n    windowBits,memLevel,,strategy : see parameter strategy in deflateInit2\n    password : crypting password (NULL for no crypting)\n    crcForCrypting : crc of file to compress (needed for crypting)\n */\n\nextern int ZEXPORT zipOpenNewFileInZip4 OF((zipFile file,\n                                            const char* filename,\n                                            const zip_fileinfo* zipfi,\n                                            const void* extrafield_local,\n                                            uInt size_extrafield_local,\n                                            const void* extrafield_global,\n                                            uInt size_extrafield_global,\n                                            const char* comment,\n                                            int method,\n                                            int level,\n                                            int raw,\n                                            int windowBits,\n                                            int memLevel,\n                                            int strategy,\n                                            const char* password,\n                                            uLong crcForCrypting,\n                                            uLong versionMadeBy,\n                                            uLong flagBase\n                                            ));\n\n\nextern int ZEXPORT zipOpenNewFileInZip4_64 OF((zipFile file,\n                                            const char* filename,\n                                            const zip_fileinfo* zipfi,\n                                            const void* extrafield_local,\n                                            uInt size_extrafield_local,\n                                            const void* extrafield_global,\n                                            uInt size_extrafield_global,\n                                            const char* comment,\n                                            int method,\n                                            int level,\n                                            int raw,\n                                            int windowBits,\n                                            int memLevel,\n                                            int strategy,\n                                            const char* password,\n                                            uLong crcForCrypting,\n                                            uLong versionMadeBy,\n                                            uLong flagBase,\n                                            int zip64\n                                            ));\n/*\n  Same than zipOpenNewFileInZip4, except\n    versionMadeBy : value for Version made by field\n    flag : value for flag field (compression level info will be added)\n */\n\n\nextern int ZEXPORT zipWriteInFileInZip OF((zipFile file,\n                       const void* buf,\n                       unsigned len));\n/*\n  Write data in the zipfile\n*/\n\nextern int ZEXPORT zipCloseFileInZip OF((zipFile file));\n/*\n  Close the current file in the zipfile\n*/\n\nextern int ZEXPORT zipCloseFileInZipRaw OF((zipFile file,\n                                            uLong uncompressed_size,\n                                            uLong crc32));\n\nextern int ZEXPORT zipCloseFileInZipRaw64 OF((zipFile file,\n                                            ZPOS64_T uncompressed_size,\n                                            uLong crc32));\n\n/*\n  Close the current file in the zipfile, for file opened with\n    parameter raw=1 in zipOpenNewFileInZip2\n  uncompressed_size and crc32 are value for the uncompressed size\n*/\n\nextern int ZEXPORT zipClose OF((zipFile file,\n                const char* global_comment));\n/*\n  Close the zipfile\n*/\n\n\nextern int ZEXPORT zipRemoveExtraInfoBlock OF((char* pData, int* dataLen, short sHeader));\n/*\n  zipRemoveExtraInfoBlock -  Added by Mathias Svensson\n\n  Remove extra information block from a extra information data for the local file header or central directory header\n\n  It is needed to remove ZIP64 extra information blocks when before data is written if using RAW mode.\n\n  0x0001 is the signature header for the ZIP64 extra information blocks\n\n  usage.\n                        Remove ZIP64 Extra information from a central director extra field data\n              zipRemoveExtraInfoBlock(pCenDirExtraFieldData, &nCenDirExtraFieldDataLen, 0x0001);\n\n                        Remove ZIP64 Extra information from a Local File Header extra field data\n        zipRemoveExtraInfoBlock(pLocalHeaderExtraFieldData, &nLocalHeaderExtraFieldDataLen, 0x0001);\n*/\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _zip64_H */\n"
  },
  {
    "path": "external/zlib/contrib/pascal/example.pas",
    "content": "(* example.c -- usage example of the zlib compression library\n * Copyright (C) 1995-2003 Jean-loup Gailly.\n * For conditions of distribution and use, see copyright notice in zlib.h\n *\n * Pascal translation\n * Copyright (C) 1998 by Jacques Nomssi Nzali.\n * For conditions of distribution and use, see copyright notice in readme.txt\n *\n * Adaptation to the zlibpas interface\n * Copyright (C) 2003 by Cosmin Truta.\n * For conditions of distribution and use, see copyright notice in readme.txt\n *)\n\nprogram example;\n\n{$DEFINE TEST_COMPRESS}\n{DO NOT $DEFINE TEST_GZIO}\n{$DEFINE TEST_DEFLATE}\n{$DEFINE TEST_INFLATE}\n{$DEFINE TEST_FLUSH}\n{$DEFINE TEST_SYNC}\n{$DEFINE TEST_DICT}\n\nuses SysUtils, zlibpas;\n\nconst TESTFILE = 'foo.gz';\n\n(* \"hello world\" would be more standard, but the repeated \"hello\"\n * stresses the compression code better, sorry...\n *)\nconst hello: PChar = 'hello, hello!';\n\nconst dictionary: PChar = 'hello';\n\nvar dictId: LongInt; (* Adler32 value of the dictionary *)\n\nprocedure CHECK_ERR(err: Integer; msg: String);\nbegin\n  if err <> Z_OK then\n  begin\n    WriteLn(msg, ' error: ', err);\n    Halt(1);\n  end;\nend;\n\nprocedure EXIT_ERR(const msg: String);\nbegin\n  WriteLn('Error: ', msg);\n  Halt(1);\nend;\n\n(* ===========================================================================\n * Test compress and uncompress\n *)\n{$IFDEF TEST_COMPRESS}\nprocedure test_compress(compr: Pointer; comprLen: LongInt;\n                        uncompr: Pointer; uncomprLen: LongInt);\nvar err: Integer;\n    len: LongInt;\nbegin\n  len := StrLen(hello)+1;\n\n  err := compress(compr, comprLen, hello, len);\n  CHECK_ERR(err, 'compress');\n\n  StrCopy(PChar(uncompr), 'garbage');\n\n  err := uncompress(uncompr, uncomprLen, compr, comprLen);\n  CHECK_ERR(err, 'uncompress');\n\n  if StrComp(PChar(uncompr), hello) <> 0 then\n    EXIT_ERR('bad uncompress')\n  else\n    WriteLn('uncompress(): ', PChar(uncompr));\nend;\n{$ENDIF}\n\n(* ===========================================================================\n * Test read/write of .gz files\n *)\n{$IFDEF TEST_GZIO}\nprocedure test_gzio(const fname: PChar; (* compressed file name *)\n                    uncompr: Pointer;\n                    uncomprLen: LongInt);\nvar err: Integer;\n    len: Integer;\n    zfile: gzFile;\n    pos: LongInt;\nbegin\n  len := StrLen(hello)+1;\n\n  zfile := gzopen(fname, 'wb');\n  if zfile = NIL then\n  begin\n    WriteLn('gzopen error');\n    Halt(1);\n  end;\n  gzputc(zfile, 'h');\n  if gzputs(zfile, 'ello') <> 4 then\n  begin\n    WriteLn('gzputs err: ', gzerror(zfile, err));\n    Halt(1);\n  end;\n  {$IFDEF GZ_FORMAT_STRING}\n  if gzprintf(zfile, ', %s!', 'hello') <> 8 then\n  begin\n    WriteLn('gzprintf err: ', gzerror(zfile, err));\n    Halt(1);\n  end;\n  {$ELSE}\n  if gzputs(zfile, ', hello!') <> 8 then\n  begin\n    WriteLn('gzputs err: ', gzerror(zfile, err));\n    Halt(1);\n  end;\n  {$ENDIF}\n  gzseek(zfile, 1, SEEK_CUR); (* add one zero byte *)\n  gzclose(zfile);\n\n  zfile := gzopen(fname, 'rb');\n  if zfile = NIL then\n  begin\n    WriteLn('gzopen error');\n    Halt(1);\n  end;\n\n  StrCopy(PChar(uncompr), 'garbage');\n\n  if gzread(zfile, uncompr, uncomprLen) <> len then\n  begin\n    WriteLn('gzread err: ', gzerror(zfile, err));\n    Halt(1);\n  end;\n  if StrComp(PChar(uncompr), hello) <> 0 then\n  begin\n    WriteLn('bad gzread: ', PChar(uncompr));\n    Halt(1);\n  end\n  else\n    WriteLn('gzread(): ', PChar(uncompr));\n\n  pos := gzseek(zfile, -8, SEEK_CUR);\n  if (pos <> 6) or (gztell(zfile) <> pos) then\n  begin\n    WriteLn('gzseek error, pos=', pos, ', gztell=', gztell(zfile));\n    Halt(1);\n  end;\n\n  if gzgetc(zfile) <> ' ' then\n  begin\n    WriteLn('gzgetc error');\n    Halt(1);\n  end;\n\n  if gzungetc(' ', zfile) <> ' ' then\n  begin\n    WriteLn('gzungetc error');\n    Halt(1);\n  end;\n\n  gzgets(zfile, PChar(uncompr), uncomprLen);\n  uncomprLen := StrLen(PChar(uncompr));\n  if uncomprLen <> 7 then (* \" hello!\" *)\n  begin\n    WriteLn('gzgets err after gzseek: ', gzerror(zfile, err));\n    Halt(1);\n  end;\n  if StrComp(PChar(uncompr), hello + 6) <> 0 then\n  begin\n    WriteLn('bad gzgets after gzseek');\n    Halt(1);\n  end\n  else\n    WriteLn('gzgets() after gzseek: ', PChar(uncompr));\n\n  gzclose(zfile);\nend;\n{$ENDIF}\n\n(* ===========================================================================\n * Test deflate with small buffers\n *)\n{$IFDEF TEST_DEFLATE}\nprocedure test_deflate(compr: Pointer; comprLen: LongInt);\nvar c_stream: z_stream; (* compression stream *)\n    err: Integer;\n    len: LongInt;\nbegin\n  len := StrLen(hello)+1;\n\n  c_stream.zalloc := NIL;\n  c_stream.zfree := NIL;\n  c_stream.opaque := NIL;\n\n  err := deflateInit(c_stream, Z_DEFAULT_COMPRESSION);\n  CHECK_ERR(err, 'deflateInit');\n\n  c_stream.next_in := hello;\n  c_stream.next_out := compr;\n\n  while (c_stream.total_in <> len) and\n        (c_stream.total_out < comprLen) do\n  begin\n    c_stream.avail_out := 1; { force small buffers }\n    c_stream.avail_in := 1;\n    err := deflate(c_stream, Z_NO_FLUSH);\n    CHECK_ERR(err, 'deflate');\n  end;\n\n  (* Finish the stream, still forcing small buffers: *)\n  while TRUE do\n  begin\n    c_stream.avail_out := 1;\n    err := deflate(c_stream, Z_FINISH);\n    if err = Z_STREAM_END then\n      break;\n    CHECK_ERR(err, 'deflate');\n  end;\n\n  err := deflateEnd(c_stream);\n  CHECK_ERR(err, 'deflateEnd');\nend;\n{$ENDIF}\n\n(* ===========================================================================\n * Test inflate with small buffers\n *)\n{$IFDEF TEST_INFLATE}\nprocedure test_inflate(compr: Pointer; comprLen : LongInt;\n                       uncompr: Pointer; uncomprLen : LongInt);\nvar err: Integer;\n    d_stream: z_stream; (* decompression stream *)\nbegin\n  StrCopy(PChar(uncompr), 'garbage');\n\n  d_stream.zalloc := NIL;\n  d_stream.zfree := NIL;\n  d_stream.opaque := NIL;\n\n  d_stream.next_in := compr;\n  d_stream.avail_in := 0;\n  d_stream.next_out := uncompr;\n\n  err := inflateInit(d_stream);\n  CHECK_ERR(err, 'inflateInit');\n\n  while (d_stream.total_out < uncomprLen) and\n        (d_stream.total_in < comprLen) do\n  begin\n    d_stream.avail_out := 1; (* force small buffers *)\n    d_stream.avail_in := 1;\n    err := inflate(d_stream, Z_NO_FLUSH);\n    if err = Z_STREAM_END then\n      break;\n    CHECK_ERR(err, 'inflate');\n  end;\n\n  err := inflateEnd(d_stream);\n  CHECK_ERR(err, 'inflateEnd');\n\n  if StrComp(PChar(uncompr), hello) <> 0 then\n    EXIT_ERR('bad inflate')\n  else\n    WriteLn('inflate(): ', PChar(uncompr));\nend;\n{$ENDIF}\n\n(* ===========================================================================\n * Test deflate with large buffers and dynamic change of compression level\n *)\n{$IFDEF TEST_DEFLATE}\nprocedure test_large_deflate(compr: Pointer; comprLen: LongInt;\n                             uncompr: Pointer; uncomprLen: LongInt);\nvar c_stream: z_stream; (* compression stream *)\n    err: Integer;\nbegin\n  c_stream.zalloc := NIL;\n  c_stream.zfree := NIL;\n  c_stream.opaque := NIL;\n\n  err := deflateInit(c_stream, Z_BEST_SPEED);\n  CHECK_ERR(err, 'deflateInit');\n\n  c_stream.next_out := compr;\n  c_stream.avail_out := Integer(comprLen);\n\n  (* At this point, uncompr is still mostly zeroes, so it should compress\n   * very well:\n   *)\n  c_stream.next_in := uncompr;\n  c_stream.avail_in := Integer(uncomprLen);\n  err := deflate(c_stream, Z_NO_FLUSH);\n  CHECK_ERR(err, 'deflate');\n  if c_stream.avail_in <> 0 then\n    EXIT_ERR('deflate not greedy');\n\n  (* Feed in already compressed data and switch to no compression: *)\n  deflateParams(c_stream, Z_NO_COMPRESSION, Z_DEFAULT_STRATEGY);\n  c_stream.next_in := compr;\n  c_stream.avail_in := Integer(comprLen div 2);\n  err := deflate(c_stream, Z_NO_FLUSH);\n  CHECK_ERR(err, 'deflate');\n\n  (* Switch back to compressing mode: *)\n  deflateParams(c_stream, Z_BEST_COMPRESSION, Z_FILTERED);\n  c_stream.next_in := uncompr;\n  c_stream.avail_in := Integer(uncomprLen);\n  err := deflate(c_stream, Z_NO_FLUSH);\n  CHECK_ERR(err, 'deflate');\n\n  err := deflate(c_stream, Z_FINISH);\n  if err <> Z_STREAM_END then\n    EXIT_ERR('deflate should report Z_STREAM_END');\n\n  err := deflateEnd(c_stream);\n  CHECK_ERR(err, 'deflateEnd');\nend;\n{$ENDIF}\n\n(* ===========================================================================\n * Test inflate with large buffers\n *)\n{$IFDEF TEST_INFLATE}\nprocedure test_large_inflate(compr: Pointer; comprLen: LongInt;\n                             uncompr: Pointer; uncomprLen: LongInt);\nvar err: Integer;\n    d_stream: z_stream; (* decompression stream *)\nbegin\n  StrCopy(PChar(uncompr), 'garbage');\n\n  d_stream.zalloc := NIL;\n  d_stream.zfree := NIL;\n  d_stream.opaque := NIL;\n\n  d_stream.next_in := compr;\n  d_stream.avail_in := Integer(comprLen);\n\n  err := inflateInit(d_stream);\n  CHECK_ERR(err, 'inflateInit');\n\n  while TRUE do\n  begin\n    d_stream.next_out := uncompr;            (* discard the output *)\n    d_stream.avail_out := Integer(uncomprLen);\n    err := inflate(d_stream, Z_NO_FLUSH);\n    if err = Z_STREAM_END then\n      break;\n    CHECK_ERR(err, 'large inflate');\n  end;\n\n  err := inflateEnd(d_stream);\n  CHECK_ERR(err, 'inflateEnd');\n\n  if d_stream.total_out <> 2 * uncomprLen + comprLen div 2 then\n  begin\n    WriteLn('bad large inflate: ', d_stream.total_out);\n    Halt(1);\n  end\n  else\n    WriteLn('large_inflate(): OK');\nend;\n{$ENDIF}\n\n(* ===========================================================================\n * Test deflate with full flush\n *)\n{$IFDEF TEST_FLUSH}\nprocedure test_flush(compr: Pointer; var comprLen : LongInt);\nvar c_stream: z_stream; (* compression stream *)\n    err: Integer;\n    len: Integer;\nbegin\n  len := StrLen(hello)+1;\n\n  c_stream.zalloc := NIL;\n  c_stream.zfree := NIL;\n  c_stream.opaque := NIL;\n\n  err := deflateInit(c_stream, Z_DEFAULT_COMPRESSION);\n  CHECK_ERR(err, 'deflateInit');\n\n  c_stream.next_in := hello;\n  c_stream.next_out := compr;\n  c_stream.avail_in := 3;\n  c_stream.avail_out := Integer(comprLen);\n  err := deflate(c_stream, Z_FULL_FLUSH);\n  CHECK_ERR(err, 'deflate');\n\n  Inc(PByteArray(compr)^[3]); (* force an error in first compressed block *)\n  c_stream.avail_in := len - 3;\n\n  err := deflate(c_stream, Z_FINISH);\n  if err <> Z_STREAM_END then\n    CHECK_ERR(err, 'deflate');\n\n  err := deflateEnd(c_stream);\n  CHECK_ERR(err, 'deflateEnd');\n\n  comprLen := c_stream.total_out;\nend;\n{$ENDIF}\n\n(* ===========================================================================\n * Test inflateSync()\n *)\n{$IFDEF TEST_SYNC}\nprocedure test_sync(compr: Pointer; comprLen: LongInt;\n                    uncompr: Pointer; uncomprLen : LongInt);\nvar err: Integer;\n    d_stream: z_stream; (* decompression stream *)\nbegin\n  StrCopy(PChar(uncompr), 'garbage');\n\n  d_stream.zalloc := NIL;\n  d_stream.zfree := NIL;\n  d_stream.opaque := NIL;\n\n  d_stream.next_in := compr;\n  d_stream.avail_in := 2; (* just read the zlib header *)\n\n  err := inflateInit(d_stream);\n  CHECK_ERR(err, 'inflateInit');\n\n  d_stream.next_out := uncompr;\n  d_stream.avail_out := Integer(uncomprLen);\n\n  inflate(d_stream, Z_NO_FLUSH);\n  CHECK_ERR(err, 'inflate');\n\n  d_stream.avail_in := Integer(comprLen-2);   (* read all compressed data *)\n  err := inflateSync(d_stream);               (* but skip the damaged part *)\n  CHECK_ERR(err, 'inflateSync');\n\n  err := inflate(d_stream, Z_FINISH);\n  if err <> Z_DATA_ERROR then\n    EXIT_ERR('inflate should report DATA_ERROR');\n    (* Because of incorrect adler32 *)\n\n  err := inflateEnd(d_stream);\n  CHECK_ERR(err, 'inflateEnd');\n\n  WriteLn('after inflateSync(): hel', PChar(uncompr));\nend;\n{$ENDIF}\n\n(* ===========================================================================\n * Test deflate with preset dictionary\n *)\n{$IFDEF TEST_DICT}\nprocedure test_dict_deflate(compr: Pointer; comprLen: LongInt);\nvar c_stream: z_stream; (* compression stream *)\n    err: Integer;\nbegin\n  c_stream.zalloc := NIL;\n  c_stream.zfree := NIL;\n  c_stream.opaque := NIL;\n\n  err := deflateInit(c_stream, Z_BEST_COMPRESSION);\n  CHECK_ERR(err, 'deflateInit');\n\n  err := deflateSetDictionary(c_stream, dictionary, StrLen(dictionary));\n  CHECK_ERR(err, 'deflateSetDictionary');\n\n  dictId := c_stream.adler;\n  c_stream.next_out := compr;\n  c_stream.avail_out := Integer(comprLen);\n\n  c_stream.next_in := hello;\n  c_stream.avail_in := StrLen(hello)+1;\n\n  err := deflate(c_stream, Z_FINISH);\n  if err <> Z_STREAM_END then\n    EXIT_ERR('deflate should report Z_STREAM_END');\n\n  err := deflateEnd(c_stream);\n  CHECK_ERR(err, 'deflateEnd');\nend;\n{$ENDIF}\n\n(* ===========================================================================\n * Test inflate with a preset dictionary\n *)\n{$IFDEF TEST_DICT}\nprocedure test_dict_inflate(compr: Pointer; comprLen: LongInt;\n                            uncompr: Pointer; uncomprLen: LongInt);\nvar err: Integer;\n    d_stream: z_stream; (* decompression stream *)\nbegin\n  StrCopy(PChar(uncompr), 'garbage');\n\n  d_stream.zalloc := NIL;\n  d_stream.zfree := NIL;\n  d_stream.opaque := NIL;\n\n  d_stream.next_in := compr;\n  d_stream.avail_in := Integer(comprLen);\n\n  err := inflateInit(d_stream);\n  CHECK_ERR(err, 'inflateInit');\n\n  d_stream.next_out := uncompr;\n  d_stream.avail_out := Integer(uncomprLen);\n\n  while TRUE do\n  begin\n    err := inflate(d_stream, Z_NO_FLUSH);\n    if err = Z_STREAM_END then\n      break;\n    if err = Z_NEED_DICT then\n    begin\n      if d_stream.adler <> dictId then\n        EXIT_ERR('unexpected dictionary');\n      err := inflateSetDictionary(d_stream, dictionary, StrLen(dictionary));\n    end;\n    CHECK_ERR(err, 'inflate with dict');\n  end;\n\n  err := inflateEnd(d_stream);\n  CHECK_ERR(err, 'inflateEnd');\n\n  if StrComp(PChar(uncompr), hello) <> 0 then\n    EXIT_ERR('bad inflate with dict')\n  else\n    WriteLn('inflate with dictionary: ', PChar(uncompr));\nend;\n{$ENDIF}\n\nvar compr, uncompr: Pointer;\n    comprLen, uncomprLen: LongInt;\n\nbegin\n  if zlibVersion^ <> ZLIB_VERSION[1] then\n    EXIT_ERR('Incompatible zlib version');\n\n  WriteLn('zlib version: ', zlibVersion);\n  WriteLn('zlib compile flags: ', Format('0x%x', [zlibCompileFlags]));\n\n  comprLen := 10000 * SizeOf(Integer); (* don't overflow on MSDOS *)\n  uncomprLen := comprLen;\n  GetMem(compr, comprLen);\n  GetMem(uncompr, uncomprLen);\n  if (compr = NIL) or (uncompr = NIL) then\n    EXIT_ERR('Out of memory');\n  (* compr and uncompr are cleared to avoid reading uninitialized\n   * data and to ensure that uncompr compresses well.\n   *)\n  FillChar(compr^, comprLen, 0);\n  FillChar(uncompr^, uncomprLen, 0);\n\n  {$IFDEF TEST_COMPRESS}\n  WriteLn('** Testing compress');\n  test_compress(compr, comprLen, uncompr, uncomprLen);\n  {$ENDIF}\n\n  {$IFDEF TEST_GZIO}\n  WriteLn('** Testing gzio');\n  if ParamCount >= 1 then\n    test_gzio(ParamStr(1), uncompr, uncomprLen)\n  else\n    test_gzio(TESTFILE, uncompr, uncomprLen);\n  {$ENDIF}\n\n  {$IFDEF TEST_DEFLATE}\n  WriteLn('** Testing deflate with small buffers');\n  test_deflate(compr, comprLen);\n  {$ENDIF}\n  {$IFDEF TEST_INFLATE}\n  WriteLn('** Testing inflate with small buffers');\n  test_inflate(compr, comprLen, uncompr, uncomprLen);\n  {$ENDIF}\n\n  {$IFDEF TEST_DEFLATE}\n  WriteLn('** Testing deflate with large buffers');\n  test_large_deflate(compr, comprLen, uncompr, uncomprLen);\n  {$ENDIF}\n  {$IFDEF TEST_INFLATE}\n  WriteLn('** Testing inflate with large buffers');\n  test_large_inflate(compr, comprLen, uncompr, uncomprLen);\n  {$ENDIF}\n\n  {$IFDEF TEST_FLUSH}\n  WriteLn('** Testing deflate with full flush');\n  test_flush(compr, comprLen);\n  {$ENDIF}\n  {$IFDEF TEST_SYNC}\n  WriteLn('** Testing inflateSync');\n  test_sync(compr, comprLen, uncompr, uncomprLen);\n  {$ENDIF}\n  comprLen := uncomprLen;\n\n  {$IFDEF TEST_DICT}\n  WriteLn('** Testing deflate and inflate with preset dictionary');\n  test_dict_deflate(compr, comprLen);\n  test_dict_inflate(compr, comprLen, uncompr, uncomprLen);\n  {$ENDIF}\n\n  FreeMem(compr, comprLen);\n  FreeMem(uncompr, uncomprLen);\nend.\n"
  },
  {
    "path": "external/zlib/contrib/pascal/readme.txt",
    "content": "\nThis directory contains a Pascal (Delphi, Kylix) interface to the\nzlib data compression library.\n\n\nDirectory listing\n=================\n\nzlibd32.mak     makefile for Borland C++\nexample.pas     usage example of zlib\nzlibpas.pas     the Pascal interface to zlib\nreadme.txt      this file\n\n\nCompatibility notes\n===================\n\n- Although the name \"zlib\" would have been more normal for the\n  zlibpas unit, this name is already taken by Borland's ZLib unit.\n  This is somehow unfortunate, because that unit is not a genuine\n  interface to the full-fledged zlib functionality, but a suite of\n  class wrappers around zlib streams.  Other essential features,\n  such as checksums, are missing.\n  It would have been more appropriate for that unit to have a name\n  like \"ZStreams\", or something similar.\n\n- The C and zlib-supplied types int, uInt, long, uLong, etc. are\n  translated directly into Pascal types of similar sizes (Integer,\n  LongInt, etc.), to avoid namespace pollution.  In particular,\n  there is no conversion of unsigned int into a Pascal unsigned\n  integer.  The Word type is non-portable and has the same size\n  (16 bits) both in a 16-bit and in a 32-bit environment, unlike\n  Integer.  Even if there is a 32-bit Cardinal type, there is no\n  real need for unsigned int in zlib under a 32-bit environment.\n\n- Except for the callbacks, the zlib function interfaces are\n  assuming the calling convention normally used in Pascal\n  (__pascal for DOS and Windows16, __fastcall for Windows32).\n  Since the cdecl keyword is used, the old Turbo Pascal does\n  not work with this interface.\n\n- The gz* function interfaces are not translated, to avoid\n  interfacing problems with the C runtime library.  Besides,\n    gzprintf(gzFile file, const char *format, ...)\n  cannot be translated into Pascal.\n\n\nLegal issues\n============\n\nThe zlibpas interface is:\n  Copyright (C) 1995-2003 Jean-loup Gailly and Mark Adler.\n  Copyright (C) 1998 by Bob Dellaca.\n  Copyright (C) 2003 by Cosmin Truta.\n\nThe example program is:\n  Copyright (C) 1995-2003 by Jean-loup Gailly.\n  Copyright (C) 1998,1999,2000 by Jacques Nomssi Nzali.\n  Copyright (C) 2003 by Cosmin Truta.\n\n  This software is provided 'as-is', without any express or implied\n  warranty.  In no event will the author be held liable for any damages\n  arising from the use of this software.\n\n  Permission is granted to anyone to use this software for any purpose,\n  including commercial applications, and to alter it and redistribute it\n  freely, subject to the following restrictions:\n\n  1. The origin of this software must not be misrepresented; you must not\n     claim that you wrote the original software. If you use this software\n     in a product, an acknowledgment in the product documentation would be\n     appreciated but is not required.\n  2. Altered source versions must be plainly marked as such, and must not be\n     misrepresented as being the original software.\n  3. This notice may not be removed or altered from any source distribution.\n\n"
  },
  {
    "path": "external/zlib/contrib/pascal/zlibd32.mak",
    "content": "# Makefile for zlib\n# For use with Delphi and C++ Builder under Win32\n# Updated for zlib 1.2.x by Cosmin Truta\n\n# ------------ Borland C++ ------------\n\n# This project uses the Delphi (fastcall/register) calling convention:\nLOC = -DZEXPORT=__fastcall -DZEXPORTVA=__cdecl\n\nCC = bcc32\nLD = bcc32\nAR = tlib\n# do not use \"-pr\" in CFLAGS\nCFLAGS = -a -d -k- -O2 $(LOC)\nLDFLAGS =\n\n\n# variables\nZLIB_LIB = zlib.lib\n\nOBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj\nOBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj\nOBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj\nOBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj\n\n\n# targets\nall: $(ZLIB_LIB) example.exe minigzip.exe\n\n.c.obj:\n\t$(CC) -c $(CFLAGS) $*.c\n\nadler32.obj: adler32.c zlib.h zconf.h\n\ncompress.obj: compress.c zlib.h zconf.h\n\ncrc32.obj: crc32.c zlib.h zconf.h crc32.h\n\ndeflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h\n\ngzclose.obj: gzclose.c zlib.h zconf.h gzguts.h\n\ngzlib.obj: gzlib.c zlib.h zconf.h gzguts.h\n\ngzread.obj: gzread.c zlib.h zconf.h gzguts.h\n\ngzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h\n\ninfback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \\\n inffast.h inffixed.h\n\ninffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \\\n inffast.h\n\ninflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \\\n inffast.h inffixed.h\n\ninftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h\n\ntrees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h\n\nuncompr.obj: uncompr.c zlib.h zconf.h\n\nzutil.obj: zutil.c zutil.h zlib.h zconf.h\n\nexample.obj: example.c zlib.h zconf.h\n\nminigzip.obj: minigzip.c zlib.h zconf.h\n\n\n# For the sake of the old Borland make,\n# the command line is cut to fit in the MS-DOS 128 byte limit:\n$(ZLIB_LIB): $(OBJ1) $(OBJ2)\n\t-del $(ZLIB_LIB)\n\t$(AR) $(ZLIB_LIB) $(OBJP1)\n\t$(AR) $(ZLIB_LIB) $(OBJP2)\n\n\n# testing\ntest: example.exe minigzip.exe\n\texample\n\techo hello world | minigzip | minigzip -d\n\nexample.exe: example.obj $(ZLIB_LIB)\n\t$(LD) $(LDFLAGS) example.obj $(ZLIB_LIB)\n\nminigzip.exe: minigzip.obj $(ZLIB_LIB)\n\t$(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB)\n\n\n# cleanup\nclean:\n\t-del *.obj\n\t-del *.exe\n\t-del *.lib\n\t-del *.tds\n\t-del zlib.bak\n\t-del foo.gz\n\n"
  },
  {
    "path": "external/zlib/contrib/pascal/zlibpas.pas",
    "content": "(* zlibpas -- Pascal interface to the zlib data compression library\n *\n * Copyright (C) 2003 Cosmin Truta.\n * Derived from original sources by Bob Dellaca.\n * For conditions of distribution and use, see copyright notice in readme.txt\n *)\n\nunit zlibpas;\n\ninterface\n\nconst\n  ZLIB_VERSION = '1.2.5';\n\ntype\n  alloc_func = function(opaque: Pointer; items, size: Integer): Pointer;\n                 cdecl;\n  free_func  = procedure(opaque, address: Pointer);\n                 cdecl;\n\n  in_func    = function(opaque: Pointer; var buf: PByte): Integer;\n                 cdecl;\n  out_func   = function(opaque: Pointer; buf: PByte; size: Integer): Integer;\n                 cdecl;\n\n  z_streamp = ^z_stream;\n  z_stream = packed record\n    next_in: PChar;       (* next input byte *)\n    avail_in: Integer;    (* number of bytes available at next_in *)\n    total_in: LongInt;    (* total nb of input bytes read so far *)\n\n    next_out: PChar;      (* next output byte should be put there *)\n    avail_out: Integer;   (* remaining free space at next_out *)\n    total_out: LongInt;   (* total nb of bytes output so far *)\n\n    msg: PChar;           (* last error message, NULL if no error *)\n    state: Pointer;       (* not visible by applications *)\n\n    zalloc: alloc_func;   (* used to allocate the internal state *)\n    zfree: free_func;     (* used to free the internal state *)\n    opaque: Pointer;      (* private data object passed to zalloc and zfree *)\n\n    data_type: Integer;   (* best guess about the data type: ascii or binary *)\n    adler: LongInt;       (* adler32 value of the uncompressed data *)\n    reserved: LongInt;    (* reserved for future use *)\n  end;\n\n(* constants *)\nconst\n  Z_NO_FLUSH      = 0;\n  Z_PARTIAL_FLUSH = 1;\n  Z_SYNC_FLUSH    = 2;\n  Z_FULL_FLUSH    = 3;\n  Z_FINISH        = 4;\n\n  Z_OK            =  0;\n  Z_STREAM_END    =  1;\n  Z_NEED_DICT     =  2;\n  Z_ERRNO         = -1;\n  Z_STREAM_ERROR  = -2;\n  Z_DATA_ERROR    = -3;\n  Z_MEM_ERROR     = -4;\n  Z_BUF_ERROR     = -5;\n  Z_VERSION_ERROR = -6;\n\n  Z_NO_COMPRESSION       =  0;\n  Z_BEST_SPEED           =  1;\n  Z_BEST_COMPRESSION     =  9;\n  Z_DEFAULT_COMPRESSION  = -1;\n\n  Z_FILTERED            = 1;\n  Z_HUFFMAN_ONLY        = 2;\n  Z_RLE                 = 3;\n  Z_DEFAULT_STRATEGY    = 0;\n\n  Z_BINARY   = 0;\n  Z_ASCII    = 1;\n  Z_UNKNOWN  = 2;\n\n  Z_DEFLATED = 8;\n\n(* basic functions *)\nfunction zlibVersion: PChar;\nfunction deflateInit(var strm: z_stream; level: Integer): Integer;\nfunction deflate(var strm: z_stream; flush: Integer): Integer;\nfunction deflateEnd(var strm: z_stream): Integer;\nfunction inflateInit(var strm: z_stream): Integer;\nfunction inflate(var strm: z_stream; flush: Integer): Integer;\nfunction inflateEnd(var strm: z_stream): Integer;\n\n(* advanced functions *)\nfunction deflateInit2(var strm: z_stream; level, method, windowBits,\n                      memLevel, strategy: Integer): Integer;\nfunction deflateSetDictionary(var strm: z_stream; const dictionary: PChar;\n                              dictLength: Integer): Integer;\nfunction deflateCopy(var dest, source: z_stream): Integer;\nfunction deflateReset(var strm: z_stream): Integer;\nfunction deflateParams(var strm: z_stream; level, strategy: Integer): Integer;\nfunction deflateBound(var strm: z_stream; sourceLen: LongInt): LongInt;\nfunction deflatePrime(var strm: z_stream; bits, value: Integer): Integer;\nfunction inflateInit2(var strm: z_stream; windowBits: Integer): Integer;\nfunction inflateSetDictionary(var strm: z_stream; const dictionary: PChar;\n                              dictLength: Integer): Integer;\nfunction inflateSync(var strm: z_stream): Integer;\nfunction inflateCopy(var dest, source: z_stream): Integer;\nfunction inflateReset(var strm: z_stream): Integer;\nfunction inflateBackInit(var strm: z_stream;\n                         windowBits: Integer; window: PChar): Integer;\nfunction inflateBack(var strm: z_stream; in_fn: in_func; in_desc: Pointer;\n                     out_fn: out_func; out_desc: Pointer): Integer;\nfunction inflateBackEnd(var strm: z_stream): Integer;\nfunction zlibCompileFlags: LongInt;\n\n(* utility functions *)\nfunction compress(dest: PChar; var destLen: LongInt;\n                  const source: PChar; sourceLen: LongInt): Integer;\nfunction compress2(dest: PChar; var destLen: LongInt;\n                  const source: PChar; sourceLen: LongInt;\n                  level: Integer): Integer;\nfunction compressBound(sourceLen: LongInt): LongInt;\nfunction uncompress(dest: PChar; var destLen: LongInt;\n                    const source: PChar; sourceLen: LongInt): Integer;\n\n(* checksum functions *)\nfunction adler32(adler: LongInt; const buf: PChar; len: Integer): LongInt;\nfunction crc32(crc: LongInt; const buf: PChar; len: Integer): LongInt;\n\n(* various hacks, don't look :) *)\nfunction deflateInit_(var strm: z_stream; level: Integer;\n                      const version: PChar; stream_size: Integer): Integer;\nfunction inflateInit_(var strm: z_stream; const version: PChar;\n                      stream_size: Integer): Integer;\nfunction deflateInit2_(var strm: z_stream;\n                       level, method, windowBits, memLevel, strategy: Integer;\n                       const version: PChar; stream_size: Integer): Integer;\nfunction inflateInit2_(var strm: z_stream; windowBits: Integer;\n                       const version: PChar; stream_size: Integer): Integer;\nfunction inflateBackInit_(var strm: z_stream;\n                          windowBits: Integer; window: PChar;\n                          const version: PChar; stream_size: Integer): Integer;\n\n\nimplementation\n\n{$L adler32.obj}\n{$L compress.obj}\n{$L crc32.obj}\n{$L deflate.obj}\n{$L infback.obj}\n{$L inffast.obj}\n{$L inflate.obj}\n{$L inftrees.obj}\n{$L trees.obj}\n{$L uncompr.obj}\n{$L zutil.obj}\n\nfunction adler32; external;\nfunction compress; external;\nfunction compress2; external;\nfunction compressBound; external;\nfunction crc32; external;\nfunction deflate; external;\nfunction deflateBound; external;\nfunction deflateCopy; external;\nfunction deflateEnd; external;\nfunction deflateInit_; external;\nfunction deflateInit2_; external;\nfunction deflateParams; external;\nfunction deflatePrime; external;\nfunction deflateReset; external;\nfunction deflateSetDictionary; external;\nfunction inflate; external;\nfunction inflateBack; external;\nfunction inflateBackEnd; external;\nfunction inflateBackInit_; external;\nfunction inflateCopy; external;\nfunction inflateEnd; external;\nfunction inflateInit_; external;\nfunction inflateInit2_; external;\nfunction inflateReset; external;\nfunction inflateSetDictionary; external;\nfunction inflateSync; external;\nfunction uncompress; external;\nfunction zlibCompileFlags; external;\nfunction zlibVersion; external;\n\nfunction deflateInit(var strm: z_stream; level: Integer): Integer;\nbegin\n  Result := deflateInit_(strm, level, ZLIB_VERSION, sizeof(z_stream));\nend;\n\nfunction deflateInit2(var strm: z_stream; level, method, windowBits, memLevel,\n                      strategy: Integer): Integer;\nbegin\n  Result := deflateInit2_(strm, level, method, windowBits, memLevel, strategy,\n                          ZLIB_VERSION, sizeof(z_stream));\nend;\n\nfunction inflateInit(var strm: z_stream): Integer;\nbegin\n  Result := inflateInit_(strm, ZLIB_VERSION, sizeof(z_stream));\nend;\n\nfunction inflateInit2(var strm: z_stream; windowBits: Integer): Integer;\nbegin\n  Result := inflateInit2_(strm, windowBits, ZLIB_VERSION, sizeof(z_stream));\nend;\n\nfunction inflateBackInit(var strm: z_stream;\n                         windowBits: Integer; window: PChar): Integer;\nbegin\n  Result := inflateBackInit_(strm, windowBits, window,\n                             ZLIB_VERSION, sizeof(z_stream));\nend;\n\nfunction _malloc(Size: Integer): Pointer; cdecl;\nbegin\n  GetMem(Result, Size);\nend;\n\nprocedure _free(Block: Pointer); cdecl;\nbegin\n  FreeMem(Block);\nend;\n\nprocedure _memset(P: Pointer; B: Byte; count: Integer); cdecl;\nbegin\n  FillChar(P^, count, B);\nend;\n\nprocedure _memcpy(dest, source: Pointer; count: Integer); cdecl;\nbegin\n  Move(source^, dest^, count);\nend;\n\nend.\n"
  },
  {
    "path": "external/zlib/contrib/puff/Makefile",
    "content": "puff: puff.c puff.h\n\tcc -DTEST -o puff puff.c\n\ntest: puff\n\tpuff zeros.raw\n\nclean:\n\trm -f puff puff.o\n"
  },
  {
    "path": "external/zlib/contrib/puff/README",
    "content": "Puff -- A Simple Inflate\n3 Mar 2003\nMark Adler\nmadler@alumni.caltech.edu\n\nWhat this is --\n\npuff.c provides the routine puff() to decompress the deflate data format.  It\ndoes so more slowly than zlib, but the code is about one-fifth the size of the\ninflate code in zlib, and written to be very easy to read.\n\nWhy I wrote this --\n\npuff.c was written to document the deflate format unambiguously, by virtue of\nbeing working C code.  It is meant to supplement RFC 1951, which formally\ndescribes the deflate format.  I have received many questions on details of the\ndeflate format, and I hope that reading this code will answer those questions.\npuff.c is heavily commented with details of the deflate format, especially\nthose little nooks and cranies of the format that might not be obvious from a\nspecification.\n\npuff.c may also be useful in applications where code size or memory usage is a\nvery limited resource, and speed is not as important.\n\nHow to use it --\n\nWell, most likely you should just be reading puff.c and using zlib for actual\napplications, but if you must ...\n\nInclude puff.h in your code, which provides this prototype:\n\nint puff(unsigned char *dest,           /* pointer to destination pointer */\n         unsigned long *destlen,        /* amount of output space */\n         unsigned char *source,         /* pointer to source data pointer */\n         unsigned long *sourcelen);     /* amount of input available */\n\nThen you can call puff() to decompress a deflate stream that is in memory in\nits entirety at source, to a sufficiently sized block of memory for the\ndecompressed data at dest.  puff() is the only external symbol in puff.c  The\nonly C library functions that puff.c needs are setjmp() and longjmp(), which\nare used to simplify error checking in the code to improve readabilty.  puff.c\ndoes no memory allocation, and uses less than 2K bytes off of the stack.\n\nIf destlen is not enough space for the uncompressed data, then inflate will\nreturn an error without writing more than destlen bytes.  Note that this means\nthat in order to decompress the deflate data successfully, you need to know\nthe size of the uncompressed data ahead of time.\n\nIf needed, puff() can determine the size of the uncompressed data with no\noutput space.  This is done by passing dest equal to (unsigned char *)0.  Then\nthe initial value of *destlen is ignored and *destlen is set to the length of\nthe uncompressed data.  So if the size of the uncompressed data is not known,\nthen two passes of puff() can be used--first to determine the size, and second\nto do the actual inflation after allocating the appropriate memory.  Not\npretty, but it works.  (This is one of the reasons you should be using zlib.)\n\nThe deflate format is self-terminating.  If the deflate stream does not end\nin *sourcelen bytes, puff() will return an error without reading at or past\nendsource.\n\nOn return, *sourcelen is updated to the amount of input data consumed, and\n*destlen is updated to the size of the uncompressed data.  See the comments\nin puff.c for the possible return codes for puff().\n"
  },
  {
    "path": "external/zlib/contrib/puff/puff.c",
    "content": "/*\n * puff.c\n * Copyright (C) 2002-2010 Mark Adler\n * For conditions of distribution and use, see copyright notice in puff.h\n * version 2.1, 4 Apr 2010\n *\n * puff.c is a simple inflate written to be an unambiguous way to specify the\n * deflate format.  It is not written for speed but rather simplicity.  As a\n * side benefit, this code might actually be useful when small code is more\n * important than speed, such as bootstrap applications.  For typical deflate\n * data, zlib's inflate() is about four times as fast as puff().  zlib's\n * inflate compiles to around 20K on my machine, whereas puff.c compiles to\n * around 4K on my machine (a PowerPC using GNU cc).  If the faster decode()\n * function here is used, then puff() is only twice as slow as zlib's\n * inflate().\n *\n * All dynamically allocated memory comes from the stack.  The stack required\n * is less than 2K bytes.  This code is compatible with 16-bit int's and\n * assumes that long's are at least 32 bits.  puff.c uses the short data type,\n * assumed to be 16 bits, for arrays in order to to conserve memory.  The code\n * works whether integers are stored big endian or little endian.\n *\n * In the comments below are \"Format notes\" that describe the inflate process\n * and document some of the less obvious aspects of the format.  This source\n * code is meant to supplement RFC 1951, which formally describes the deflate\n * format:\n *\n *    http://www.zlib.org/rfc-deflate.html\n */\n\n/*\n * Change history:\n *\n * 1.0  10 Feb 2002     - First version\n * 1.1  17 Feb 2002     - Clarifications of some comments and notes\n *                      - Update puff() dest and source pointers on negative\n *                        errors to facilitate debugging deflators\n *                      - Remove longest from struct huffman -- not needed\n *                      - Simplify offs[] index in construct()\n *                      - Add input size and checking, using longjmp() to\n *                        maintain easy readability\n *                      - Use short data type for large arrays\n *                      - Use pointers instead of long to specify source and\n *                        destination sizes to avoid arbitrary 4 GB limits\n * 1.2  17 Mar 2002     - Add faster version of decode(), doubles speed (!),\n *                        but leave simple version for readabilty\n *                      - Make sure invalid distances detected if pointers\n *                        are 16 bits\n *                      - Fix fixed codes table error\n *                      - Provide a scanning mode for determining size of\n *                        uncompressed data\n * 1.3  20 Mar 2002     - Go back to lengths for puff() parameters [Jean-loup]\n *                      - Add a puff.h file for the interface\n *                      - Add braces in puff() for else do [Jean-loup]\n *                      - Use indexes instead of pointers for readability\n * 1.4  31 Mar 2002     - Simplify construct() code set check\n *                      - Fix some comments\n *                      - Add FIXLCODES #define\n * 1.5   6 Apr 2002     - Minor comment fixes\n * 1.6   7 Aug 2002     - Minor format changes\n * 1.7   3 Mar 2003     - Added test code for distribution\n *                      - Added zlib-like license\n * 1.8   9 Jan 2004     - Added some comments on no distance codes case\n * 1.9  21 Feb 2008     - Fix bug on 16-bit integer architectures [Pohland]\n *                      - Catch missing end-of-block symbol error\n * 2.0  25 Jul 2008     - Add #define to permit distance too far back\n *                      - Add option in TEST code for puff to write the data\n *                      - Add option in TEST code to skip input bytes\n *                      - Allow TEST code to read from piped stdin\n * 2.1   4 Apr 2010     - Avoid variable initialization for happier compilers\n *                      - Avoid unsigned comparisons for even happier compilers\n */\n\n#include <setjmp.h>             /* for setjmp(), longjmp(), and jmp_buf */\n#include \"puff.h\"               /* prototype for puff() */\n\n#define local static            /* for local function definitions */\n#define NIL ((unsigned char *)0)        /* for no output option */\n\n/*\n * Maximums for allocations and loops.  It is not useful to change these --\n * they are fixed by the deflate format.\n */\n#define MAXBITS 15              /* maximum bits in a code */\n#define MAXLCODES 286           /* maximum number of literal/length codes */\n#define MAXDCODES 30            /* maximum number of distance codes */\n#define MAXCODES (MAXLCODES+MAXDCODES)  /* maximum codes lengths to read */\n#define FIXLCODES 288           /* number of fixed literal/length codes */\n\n/* input and output state */\nstruct state {\n    /* output state */\n    unsigned char *out;         /* output buffer */\n    unsigned long outlen;       /* available space at out */\n    unsigned long outcnt;       /* bytes written to out so far */\n\n    /* input state */\n    unsigned char *in;          /* input buffer */\n    unsigned long inlen;        /* available input at in */\n    unsigned long incnt;        /* bytes read so far */\n    int bitbuf;                 /* bit buffer */\n    int bitcnt;                 /* number of bits in bit buffer */\n\n    /* input limit error return state for bits() and decode() */\n    jmp_buf env;\n};\n\n/*\n * Return need bits from the input stream.  This always leaves less than\n * eight bits in the buffer.  bits() works properly for need == 0.\n *\n * Format notes:\n *\n * - Bits are stored in bytes from the least significant bit to the most\n *   significant bit.  Therefore bits are dropped from the bottom of the bit\n *   buffer, using shift right, and new bytes are appended to the top of the\n *   bit buffer, using shift left.\n */\nlocal int bits(struct state *s, int need)\n{\n    long val;           /* bit accumulator (can use up to 20 bits) */\n\n    /* load at least need bits into val */\n    val = s->bitbuf;\n    while (s->bitcnt < need) {\n        if (s->incnt == s->inlen) longjmp(s->env, 1);   /* out of input */\n        val |= (long)(s->in[s->incnt++]) << s->bitcnt;  /* load eight bits */\n        s->bitcnt += 8;\n    }\n\n    /* drop need bits and update buffer, always zero to seven bits left */\n    s->bitbuf = (int)(val >> need);\n    s->bitcnt -= need;\n\n    /* return need bits, zeroing the bits above that */\n    return (int)(val & ((1L << need) - 1));\n}\n\n/*\n * Process a stored block.\n *\n * Format notes:\n *\n * - After the two-bit stored block type (00), the stored block length and\n *   stored bytes are byte-aligned for fast copying.  Therefore any leftover\n *   bits in the byte that has the last bit of the type, as many as seven, are\n *   discarded.  The value of the discarded bits are not defined and should not\n *   be checked against any expectation.\n *\n * - The second inverted copy of the stored block length does not have to be\n *   checked, but it's probably a good idea to do so anyway.\n *\n * - A stored block can have zero length.  This is sometimes used to byte-align\n *   subsets of the compressed data for random access or partial recovery.\n */\nlocal int stored(struct state *s)\n{\n    unsigned len;       /* length of stored block */\n\n    /* discard leftover bits from current byte (assumes s->bitcnt < 8) */\n    s->bitbuf = 0;\n    s->bitcnt = 0;\n\n    /* get length and check against its one's complement */\n    if (s->incnt + 4 > s->inlen) return 2;      /* not enough input */\n    len = s->in[s->incnt++];\n    len |= s->in[s->incnt++] << 8;\n    if (s->in[s->incnt++] != (~len & 0xff) ||\n        s->in[s->incnt++] != ((~len >> 8) & 0xff))\n        return -2;                              /* didn't match complement! */\n\n    /* copy len bytes from in to out */\n    if (s->incnt + len > s->inlen) return 2;    /* not enough input */\n    if (s->out != NIL) {\n        if (s->outcnt + len > s->outlen)\n            return 1;                           /* not enough output space */\n        while (len--)\n            s->out[s->outcnt++] = s->in[s->incnt++];\n    }\n    else {                                      /* just scanning */\n        s->outcnt += len;\n        s->incnt += len;\n    }\n\n    /* done with a valid stored block */\n    return 0;\n}\n\n/*\n * Huffman code decoding tables.  count[1..MAXBITS] is the number of symbols of\n * each length, which for a canonical code are stepped through in order.\n * symbol[] are the symbol values in canonical order, where the number of\n * entries is the sum of the counts in count[].  The decoding process can be\n * seen in the function decode() below.\n */\nstruct huffman {\n    short *count;       /* number of symbols of each length */\n    short *symbol;      /* canonically ordered symbols */\n};\n\n/*\n * Decode a code from the stream s using huffman table h.  Return the symbol or\n * a negative value if there is an error.  If all of the lengths are zero, i.e.\n * an empty code, or if the code is incomplete and an invalid code is received,\n * then -10 is returned after reading MAXBITS bits.\n *\n * Format notes:\n *\n * - The codes as stored in the compressed data are bit-reversed relative to\n *   a simple integer ordering of codes of the same lengths.  Hence below the\n *   bits are pulled from the compressed data one at a time and used to\n *   build the code value reversed from what is in the stream in order to\n *   permit simple integer comparisons for decoding.  A table-based decoding\n *   scheme (as used in zlib) does not need to do this reversal.\n *\n * - The first code for the shortest length is all zeros.  Subsequent codes of\n *   the same length are simply integer increments of the previous code.  When\n *   moving up a length, a zero bit is appended to the code.  For a complete\n *   code, the last code of the longest length will be all ones.\n *\n * - Incomplete codes are handled by this decoder, since they are permitted\n *   in the deflate format.  See the format notes for fixed() and dynamic().\n */\n#ifdef SLOW\nlocal int decode(struct state *s, struct huffman *h)\n{\n    int len;            /* current number of bits in code */\n    int code;           /* len bits being decoded */\n    int first;          /* first code of length len */\n    int count;          /* number of codes of length len */\n    int index;          /* index of first code of length len in symbol table */\n\n    code = first = index = 0;\n    for (len = 1; len <= MAXBITS; len++) {\n        code |= bits(s, 1);             /* get next bit */\n        count = h->count[len];\n        if (code - count < first)       /* if length len, return symbol */\n            return h->symbol[index + (code - first)];\n        index += count;                 /* else update for next length */\n        first += count;\n        first <<= 1;\n        code <<= 1;\n    }\n    return -10;                         /* ran out of codes */\n}\n\n/*\n * A faster version of decode() for real applications of this code.   It's not\n * as readable, but it makes puff() twice as fast.  And it only makes the code\n * a few percent larger.\n */\n#else /* !SLOW */\nlocal int decode(struct state *s, struct huffman *h)\n{\n    int len;            /* current number of bits in code */\n    int code;           /* len bits being decoded */\n    int first;          /* first code of length len */\n    int count;          /* number of codes of length len */\n    int index;          /* index of first code of length len in symbol table */\n    int bitbuf;         /* bits from stream */\n    int left;           /* bits left in next or left to process */\n    short *next;        /* next number of codes */\n\n    bitbuf = s->bitbuf;\n    left = s->bitcnt;\n    code = first = index = 0;\n    len = 1;\n    next = h->count + 1;\n    while (1) {\n        while (left--) {\n            code |= bitbuf & 1;\n            bitbuf >>= 1;\n            count = *next++;\n            if (code - count < first) { /* if length len, return symbol */\n                s->bitbuf = bitbuf;\n                s->bitcnt = (s->bitcnt - len) & 7;\n                return h->symbol[index + (code - first)];\n            }\n            index += count;             /* else update for next length */\n            first += count;\n            first <<= 1;\n            code <<= 1;\n            len++;\n        }\n        left = (MAXBITS+1) - len;\n        if (left == 0) break;\n        if (s->incnt == s->inlen) longjmp(s->env, 1);   /* out of input */\n        bitbuf = s->in[s->incnt++];\n        if (left > 8) left = 8;\n    }\n    return -10;                         /* ran out of codes */\n}\n#endif /* SLOW */\n\n/*\n * Given the list of code lengths length[0..n-1] representing a canonical\n * Huffman code for n symbols, construct the tables required to decode those\n * codes.  Those tables are the number of codes of each length, and the symbols\n * sorted by length, retaining their original order within each length.  The\n * return value is zero for a complete code set, negative for an over-\n * subscribed code set, and positive for an incomplete code set.  The tables\n * can be used if the return value is zero or positive, but they cannot be used\n * if the return value is negative.  If the return value is zero, it is not\n * possible for decode() using that table to return an error--any stream of\n * enough bits will resolve to a symbol.  If the return value is positive, then\n * it is possible for decode() using that table to return an error for received\n * codes past the end of the incomplete lengths.\n *\n * Not used by decode(), but used for error checking, h->count[0] is the number\n * of the n symbols not in the code.  So n - h->count[0] is the number of\n * codes.  This is useful for checking for incomplete codes that have more than\n * one symbol, which is an error in a dynamic block.\n *\n * Assumption: for all i in 0..n-1, 0 <= length[i] <= MAXBITS\n * This is assured by the construction of the length arrays in dynamic() and\n * fixed() and is not verified by construct().\n *\n * Format notes:\n *\n * - Permitted and expected examples of incomplete codes are one of the fixed\n *   codes and any code with a single symbol which in deflate is coded as one\n *   bit instead of zero bits.  See the format notes for fixed() and dynamic().\n *\n * - Within a given code length, the symbols are kept in ascending order for\n *   the code bits definition.\n */\nlocal int construct(struct huffman *h, short *length, int n)\n{\n    int symbol;         /* current symbol when stepping through length[] */\n    int len;            /* current length when stepping through h->count[] */\n    int left;           /* number of possible codes left of current length */\n    short offs[MAXBITS+1];      /* offsets in symbol table for each length */\n\n    /* count number of codes of each length */\n    for (len = 0; len <= MAXBITS; len++)\n        h->count[len] = 0;\n    for (symbol = 0; symbol < n; symbol++)\n        (h->count[length[symbol]])++;   /* assumes lengths are within bounds */\n    if (h->count[0] == n)               /* no codes! */\n        return 0;                       /* complete, but decode() will fail */\n\n    /* check for an over-subscribed or incomplete set of lengths */\n    left = 1;                           /* one possible code of zero length */\n    for (len = 1; len <= MAXBITS; len++) {\n        left <<= 1;                     /* one more bit, double codes left */\n        left -= h->count[len];          /* deduct count from possible codes */\n        if (left < 0) return left;      /* over-subscribed--return negative */\n    }                                   /* left > 0 means incomplete */\n\n    /* generate offsets into symbol table for each length for sorting */\n    offs[1] = 0;\n    for (len = 1; len < MAXBITS; len++)\n        offs[len + 1] = offs[len] + h->count[len];\n\n    /*\n     * put symbols in table sorted by length, by symbol order within each\n     * length\n     */\n    for (symbol = 0; symbol < n; symbol++)\n        if (length[symbol] != 0)\n            h->symbol[offs[length[symbol]]++] = symbol;\n\n    /* return zero for complete set, positive for incomplete set */\n    return left;\n}\n\n/*\n * Decode literal/length and distance codes until an end-of-block code.\n *\n * Format notes:\n *\n * - Compressed data that is after the block type if fixed or after the code\n *   description if dynamic is a combination of literals and length/distance\n *   pairs terminated by and end-of-block code.  Literals are simply Huffman\n *   coded bytes.  A length/distance pair is a coded length followed by a\n *   coded distance to represent a string that occurs earlier in the\n *   uncompressed data that occurs again at the current location.\n *\n * - Literals, lengths, and the end-of-block code are combined into a single\n *   code of up to 286 symbols.  They are 256 literals (0..255), 29 length\n *   symbols (257..285), and the end-of-block symbol (256).\n *\n * - There are 256 possible lengths (3..258), and so 29 symbols are not enough\n *   to represent all of those.  Lengths 3..10 and 258 are in fact represented\n *   by just a length symbol.  Lengths 11..257 are represented as a symbol and\n *   some number of extra bits that are added as an integer to the base length\n *   of the length symbol.  The number of extra bits is determined by the base\n *   length symbol.  These are in the static arrays below, lens[] for the base\n *   lengths and lext[] for the corresponding number of extra bits.\n *\n * - The reason that 258 gets its own symbol is that the longest length is used\n *   often in highly redundant files.  Note that 258 can also be coded as the\n *   base value 227 plus the maximum extra value of 31.  While a good deflate\n *   should never do this, it is not an error, and should be decoded properly.\n *\n * - If a length is decoded, including its extra bits if any, then it is\n *   followed a distance code.  There are up to 30 distance symbols.  Again\n *   there are many more possible distances (1..32768), so extra bits are added\n *   to a base value represented by the symbol.  The distances 1..4 get their\n *   own symbol, but the rest require extra bits.  The base distances and\n *   corresponding number of extra bits are below in the static arrays dist[]\n *   and dext[].\n *\n * - Literal bytes are simply written to the output.  A length/distance pair is\n *   an instruction to copy previously uncompressed bytes to the output.  The\n *   copy is from distance bytes back in the output stream, copying for length\n *   bytes.\n *\n * - Distances pointing before the beginning of the output data are not\n *   permitted.\n *\n * - Overlapped copies, where the length is greater than the distance, are\n *   allowed and common.  For example, a distance of one and a length of 258\n *   simply copies the last byte 258 times.  A distance of four and a length of\n *   twelve copies the last four bytes three times.  A simple forward copy\n *   ignoring whether the length is greater than the distance or not implements\n *   this correctly.  You should not use memcpy() since its behavior is not\n *   defined for overlapped arrays.  You should not use memmove() or bcopy()\n *   since though their behavior -is- defined for overlapping arrays, it is\n *   defined to do the wrong thing in this case.\n */\nlocal int codes(struct state *s,\n                struct huffman *lencode,\n                struct huffman *distcode)\n{\n    int symbol;         /* decoded symbol */\n    int len;            /* length for copy */\n    unsigned dist;      /* distance for copy */\n    static const short lens[29] = { /* Size base for length codes 257..285 */\n        3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n        35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258};\n    static const short lext[29] = { /* Extra bits for length codes 257..285 */\n        0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,\n        3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0};\n    static const short dists[30] = { /* Offset base for distance codes 0..29 */\n        1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n        257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n        8193, 12289, 16385, 24577};\n    static const short dext[30] = { /* Extra bits for distance codes 0..29 */\n        0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,\n        7, 7, 8, 8, 9, 9, 10, 10, 11, 11,\n        12, 12, 13, 13};\n\n    /* decode literals and length/distance pairs */\n    do {\n        symbol = decode(s, lencode);\n        if (symbol < 0) return symbol;  /* invalid symbol */\n        if (symbol < 256) {             /* literal: symbol is the byte */\n            /* write out the literal */\n            if (s->out != NIL) {\n                if (s->outcnt == s->outlen) return 1;\n                s->out[s->outcnt] = symbol;\n            }\n            s->outcnt++;\n        }\n        else if (symbol > 256) {        /* length */\n            /* get and compute length */\n            symbol -= 257;\n            if (symbol >= 29) return -10;       /* invalid fixed code */\n            len = lens[symbol] + bits(s, lext[symbol]);\n\n            /* get and check distance */\n            symbol = decode(s, distcode);\n            if (symbol < 0) return symbol;      /* invalid symbol */\n            dist = dists[symbol] + bits(s, dext[symbol]);\n#ifndef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n            if (dist > s->outcnt)\n                return -11;     /* distance too far back */\n#endif\n\n            /* copy length bytes from distance bytes back */\n            if (s->out != NIL) {\n                if (s->outcnt + len > s->outlen) return 1;\n                while (len--) {\n                    s->out[s->outcnt] =\n#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n                        dist > s->outcnt ? 0 :\n#endif\n                        s->out[s->outcnt - dist];\n                    s->outcnt++;\n                }\n            }\n            else\n                s->outcnt += len;\n        }\n    } while (symbol != 256);            /* end of block symbol */\n\n    /* done with a valid fixed or dynamic block */\n    return 0;\n}\n\n/*\n * Process a fixed codes block.\n *\n * Format notes:\n *\n * - This block type can be useful for compressing small amounts of data for\n *   which the size of the code descriptions in a dynamic block exceeds the\n *   benefit of custom codes for that block.  For fixed codes, no bits are\n *   spent on code descriptions.  Instead the code lengths for literal/length\n *   codes and distance codes are fixed.  The specific lengths for each symbol\n *   can be seen in the \"for\" loops below.\n *\n * - The literal/length code is complete, but has two symbols that are invalid\n *   and should result in an error if received.  This cannot be implemented\n *   simply as an incomplete code since those two symbols are in the \"middle\"\n *   of the code.  They are eight bits long and the longest literal/length\\\n *   code is nine bits.  Therefore the code must be constructed with those\n *   symbols, and the invalid symbols must be detected after decoding.\n *\n * - The fixed distance codes also have two invalid symbols that should result\n *   in an error if received.  Since all of the distance codes are the same\n *   length, this can be implemented as an incomplete code.  Then the invalid\n *   codes are detected while decoding.\n */\nlocal int fixed(struct state *s)\n{\n    static int virgin = 1;\n    static short lencnt[MAXBITS+1], lensym[FIXLCODES];\n    static short distcnt[MAXBITS+1], distsym[MAXDCODES];\n    static struct huffman lencode, distcode;\n\n    /* build fixed huffman tables if first call (may not be thread safe) */\n    if (virgin) {\n        int symbol;\n        short lengths[FIXLCODES];\n\n        /* literal/length table */\n        for (symbol = 0; symbol < 144; symbol++)\n            lengths[symbol] = 8;\n        for (; symbol < 256; symbol++)\n            lengths[symbol] = 9;\n        for (; symbol < 280; symbol++)\n            lengths[symbol] = 7;\n        for (; symbol < FIXLCODES; symbol++)\n            lengths[symbol] = 8;\n        construct(&lencode, lengths, FIXLCODES);\n\n        /* distance table */\n        for (symbol = 0; symbol < MAXDCODES; symbol++)\n            lengths[symbol] = 5;\n        construct(&distcode, lengths, MAXDCODES);\n\n        /* construct lencode and distcode */\n        lencode.count = lencnt;\n        lencode.symbol = lensym;\n        distcode.count = distcnt;\n        distcode.symbol = distsym;\n\n        /* do this just once */\n        virgin = 0;\n    }\n\n    /* decode data until end-of-block code */\n    return codes(s, &lencode, &distcode);\n}\n\n/*\n * Process a dynamic codes block.\n *\n * Format notes:\n *\n * - A dynamic block starts with a description of the literal/length and\n *   distance codes for that block.  New dynamic blocks allow the compressor to\n *   rapidly adapt to changing data with new codes optimized for that data.\n *\n * - The codes used by the deflate format are \"canonical\", which means that\n *   the actual bits of the codes are generated in an unambiguous way simply\n *   from the number of bits in each code.  Therefore the code descriptions\n *   are simply a list of code lengths for each symbol.\n *\n * - The code lengths are stored in order for the symbols, so lengths are\n *   provided for each of the literal/length symbols, and for each of the\n *   distance symbols.\n *\n * - If a symbol is not used in the block, this is represented by a zero as\n *   as the code length.  This does not mean a zero-length code, but rather\n *   that no code should be created for this symbol.  There is no way in the\n *   deflate format to represent a zero-length code.\n *\n * - The maximum number of bits in a code is 15, so the possible lengths for\n *   any code are 1..15.\n *\n * - The fact that a length of zero is not permitted for a code has an\n *   interesting consequence.  Normally if only one symbol is used for a given\n *   code, then in fact that code could be represented with zero bits.  However\n *   in deflate, that code has to be at least one bit.  So for example, if\n *   only a single distance base symbol appears in a block, then it will be\n *   represented by a single code of length one, in particular one 0 bit.  This\n *   is an incomplete code, since if a 1 bit is received, it has no meaning,\n *   and should result in an error.  So incomplete distance codes of one symbol\n *   should be permitted, and the receipt of invalid codes should be handled.\n *\n * - It is also possible to have a single literal/length code, but that code\n *   must be the end-of-block code, since every dynamic block has one.  This\n *   is not the most efficient way to create an empty block (an empty fixed\n *   block is fewer bits), but it is allowed by the format.  So incomplete\n *   literal/length codes of one symbol should also be permitted.\n *\n * - If there are only literal codes and no lengths, then there are no distance\n *   codes.  This is represented by one distance code with zero bits.\n *\n * - The list of up to 286 length/literal lengths and up to 30 distance lengths\n *   are themselves compressed using Huffman codes and run-length encoding.  In\n *   the list of code lengths, a 0 symbol means no code, a 1..15 symbol means\n *   that length, and the symbols 16, 17, and 18 are run-length instructions.\n *   Each of 16, 17, and 18 are follwed by extra bits to define the length of\n *   the run.  16 copies the last length 3 to 6 times.  17 represents 3 to 10\n *   zero lengths, and 18 represents 11 to 138 zero lengths.  Unused symbols\n *   are common, hence the special coding for zero lengths.\n *\n * - The symbols for 0..18 are Huffman coded, and so that code must be\n *   described first.  This is simply a sequence of up to 19 three-bit values\n *   representing no code (0) or the code length for that symbol (1..7).\n *\n * - A dynamic block starts with three fixed-size counts from which is computed\n *   the number of literal/length code lengths, the number of distance code\n *   lengths, and the number of code length code lengths (ok, you come up with\n *   a better name!) in the code descriptions.  For the literal/length and\n *   distance codes, lengths after those provided are considered zero, i.e. no\n *   code.  The code length code lengths are received in a permuted order (see\n *   the order[] array below) to make a short code length code length list more\n *   likely.  As it turns out, very short and very long codes are less likely\n *   to be seen in a dynamic code description, hence what may appear initially\n *   to be a peculiar ordering.\n *\n * - Given the number of literal/length code lengths (nlen) and distance code\n *   lengths (ndist), then they are treated as one long list of nlen + ndist\n *   code lengths.  Therefore run-length coding can and often does cross the\n *   boundary between the two sets of lengths.\n *\n * - So to summarize, the code description at the start of a dynamic block is\n *   three counts for the number of code lengths for the literal/length codes,\n *   the distance codes, and the code length codes.  This is followed by the\n *   code length code lengths, three bits each.  This is used to construct the\n *   code length code which is used to read the remainder of the lengths.  Then\n *   the literal/length code lengths and distance lengths are read as a single\n *   set of lengths using the code length codes.  Codes are constructed from\n *   the resulting two sets of lengths, and then finally you can start\n *   decoding actual compressed data in the block.\n *\n * - For reference, a \"typical\" size for the code description in a dynamic\n *   block is around 80 bytes.\n */\nlocal int dynamic(struct state *s)\n{\n    int nlen, ndist, ncode;             /* number of lengths in descriptor */\n    int index;                          /* index of lengths[] */\n    int err;                            /* construct() return value */\n    short lengths[MAXCODES];            /* descriptor code lengths */\n    short lencnt[MAXBITS+1], lensym[MAXLCODES];         /* lencode memory */\n    short distcnt[MAXBITS+1], distsym[MAXDCODES];       /* distcode memory */\n    struct huffman lencode, distcode;   /* length and distance codes */\n    static const short order[19] =      /* permutation of code length codes */\n        {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};\n\n    /* construct lencode and distcode */\n    lencode.count = lencnt;\n    lencode.symbol = lensym;\n    distcode.count = distcnt;\n    distcode.symbol = distsym;\n\n    /* get number of lengths in each table, check lengths */\n    nlen = bits(s, 5) + 257;\n    ndist = bits(s, 5) + 1;\n    ncode = bits(s, 4) + 4;\n    if (nlen > MAXLCODES || ndist > MAXDCODES)\n        return -3;                      /* bad counts */\n\n    /* read code length code lengths (really), missing lengths are zero */\n    for (index = 0; index < ncode; index++)\n        lengths[order[index]] = bits(s, 3);\n    for (; index < 19; index++)\n        lengths[order[index]] = 0;\n\n    /* build huffman table for code lengths codes (use lencode temporarily) */\n    err = construct(&lencode, lengths, 19);\n    if (err != 0) return -4;            /* require complete code set here */\n\n    /* read length/literal and distance code length tables */\n    index = 0;\n    while (index < nlen + ndist) {\n        int symbol;             /* decoded value */\n        int len;                /* last length to repeat */\n\n        symbol = decode(s, &lencode);\n        if (symbol < 16)                /* length in 0..15 */\n            lengths[index++] = symbol;\n        else {                          /* repeat instruction */\n            len = 0;                    /* assume repeating zeros */\n            if (symbol == 16) {         /* repeat last length 3..6 times */\n                if (index == 0) return -5;      /* no last length! */\n                len = lengths[index - 1];       /* last length */\n                symbol = 3 + bits(s, 2);\n            }\n            else if (symbol == 17)      /* repeat zero 3..10 times */\n                symbol = 3 + bits(s, 3);\n            else                        /* == 18, repeat zero 11..138 times */\n                symbol = 11 + bits(s, 7);\n            if (index + symbol > nlen + ndist)\n                return -6;              /* too many lengths! */\n            while (symbol--)            /* repeat last or zero symbol times */\n                lengths[index++] = len;\n        }\n    }\n\n    /* check for end-of-block code -- there better be one! */\n    if (lengths[256] == 0)\n        return -9;\n\n    /* build huffman table for literal/length codes */\n    err = construct(&lencode, lengths, nlen);\n    if (err < 0 || (err > 0 && nlen - lencode.count[0] != 1))\n        return -7;      /* only allow incomplete codes if just one code */\n\n    /* build huffman table for distance codes */\n    err = construct(&distcode, lengths + nlen, ndist);\n    if (err < 0 || (err > 0 && ndist - distcode.count[0] != 1))\n        return -8;      /* only allow incomplete codes if just one code */\n\n    /* decode data until end-of-block code */\n    return codes(s, &lencode, &distcode);\n}\n\n/*\n * Inflate source to dest.  On return, destlen and sourcelen are updated to the\n * size of the uncompressed data and the size of the deflate data respectively.\n * On success, the return value of puff() is zero.  If there is an error in the\n * source data, i.e. it is not in the deflate format, then a negative value is\n * returned.  If there is not enough input available or there is not enough\n * output space, then a positive error is returned.  In that case, destlen and\n * sourcelen are not updated to facilitate retrying from the beginning with the\n * provision of more input data or more output space.  In the case of invalid\n * inflate data (a negative error), the dest and source pointers are updated to\n * facilitate the debugging of deflators.\n *\n * puff() also has a mode to determine the size of the uncompressed output with\n * no output written.  For this dest must be (unsigned char *)0.  In this case,\n * the input value of *destlen is ignored, and on return *destlen is set to the\n * size of the uncompressed output.\n *\n * The return codes are:\n *\n *   2:  available inflate data did not terminate\n *   1:  output space exhausted before completing inflate\n *   0:  successful inflate\n *  -1:  invalid block type (type == 3)\n *  -2:  stored block length did not match one's complement\n *  -3:  dynamic block code description: too many length or distance codes\n *  -4:  dynamic block code description: code lengths codes incomplete\n *  -5:  dynamic block code description: repeat lengths with no first length\n *  -6:  dynamic block code description: repeat more than specified lengths\n *  -7:  dynamic block code description: invalid literal/length code lengths\n *  -8:  dynamic block code description: invalid distance code lengths\n *  -9:  dynamic block code description: missing end-of-block code\n * -10:  invalid literal/length or distance code in fixed or dynamic block\n * -11:  distance is too far back in fixed or dynamic block\n *\n * Format notes:\n *\n * - Three bits are read for each block to determine the kind of block and\n *   whether or not it is the last block.  Then the block is decoded and the\n *   process repeated if it was not the last block.\n *\n * - The leftover bits in the last byte of the deflate data after the last\n *   block (if it was a fixed or dynamic block) are undefined and have no\n *   expected values to check.\n */\nint puff(unsigned char *dest,           /* pointer to destination pointer */\n         unsigned long *destlen,        /* amount of output space */\n         unsigned char *source,         /* pointer to source data pointer */\n         unsigned long *sourcelen)      /* amount of input available */\n{\n    struct state s;             /* input/output state */\n    int last, type;             /* block information */\n    int err;                    /* return value */\n\n    /* initialize output state */\n    s.out = dest;\n    s.outlen = *destlen;                /* ignored if dest is NIL */\n    s.outcnt = 0;\n\n    /* initialize input state */\n    s.in = source;\n    s.inlen = *sourcelen;\n    s.incnt = 0;\n    s.bitbuf = 0;\n    s.bitcnt = 0;\n\n    /* return if bits() or decode() tries to read past available input */\n    if (setjmp(s.env) != 0)             /* if came back here via longjmp() */\n        err = 2;                        /* then skip do-loop, return error */\n    else {\n        /* process blocks until last block or error */\n        do {\n            last = bits(&s, 1);         /* one if last block */\n            type = bits(&s, 2);         /* block type 0..3 */\n            err = type == 0 ? stored(&s) :\n                  (type == 1 ? fixed(&s) :\n                   (type == 2 ? dynamic(&s) :\n                    -1));               /* type == 3, invalid */\n            if (err != 0) break;        /* return with error */\n        } while (!last);\n    }\n\n    /* update the lengths and return */\n    if (err <= 0) {\n        *destlen = s.outcnt;\n        *sourcelen = s.incnt;\n    }\n    return err;\n}\n\n#ifdef TEST\n/* Examples of how to use puff().\n\n   Usage: puff [-w] [-nnn] file\n          ... | puff [-w] [-nnn]\n\n   where file is the input file with deflate data, nnn is the number of bytes\n   of input to skip before inflating (e.g. to skip a zlib or gzip header), and\n   -w is used to write the decompressed data to stdout */\n\n#include <stdio.h>\n#include <stdlib.h>\n\n/* Return size times approximately the cube root of 2, keeping the result as 1,\n   3, or 5 times a power of 2 -- the result is always > size, until the result\n   is the maximum value of an unsigned long, where it remains.  This is useful\n   to keep reallocations less than ~33% over the actual data. */\nlocal size_t bythirds(size_t size)\n{\n    int n;\n    size_t m;\n\n    m = size;\n    for (n = 0; m; n++)\n        m >>= 1;\n    if (n < 3)\n        return size + 1;\n    n -= 3;\n    m = size >> n;\n    m += m == 6 ? 2 : 1;\n    m <<= n;\n    return m > size ? m : (size_t)(-1);\n}\n\n/* Read the input file *name, or stdin if name is NULL, into allocated memory.\n   Reallocate to larger buffers until the entire file is read in.  Return a\n   pointer to the allocated data, or NULL if there was a memory allocation\n   failure.  *len is the number of bytes of data read from the input file (even\n   if load() returns NULL).  If the input file was empty or could not be opened\n   or read, *len is zero. */\nlocal void *load(char *name, size_t *len)\n{\n    size_t size;\n    void *buf, *swap;\n    FILE *in;\n\n    *len = 0;\n    buf = malloc(size = 4096);\n    if (buf == NULL)\n        return NULL;\n    in = name == NULL ? stdin : fopen(name, \"rb\");\n    if (in != NULL) {\n        for (;;) {\n            *len += fread((char *)buf + *len, 1, size - *len, in);\n            if (*len < size) break;\n            size = bythirds(size);\n            if (size == *len || (swap = realloc(buf, size)) == NULL) {\n                free(buf);\n                buf = NULL;\n                break;\n            }\n            buf = swap;\n        }\n        fclose(in);\n    }\n    return buf;\n}\n\nint main(int argc, char **argv)\n{\n    int ret, put = 0;\n    unsigned skip = 0;\n    char *arg, *name = NULL;\n    unsigned char *source = NULL, *dest;\n    size_t len = 0;\n    unsigned long sourcelen, destlen;\n\n    /* process arguments */\n    while (arg = *++argv, --argc)\n        if (arg[0] == '-') {\n            if (arg[1] == 'w' && arg[2] == 0)\n                put = 1;\n            else if (arg[1] >= '0' && arg[1] <= '9')\n                skip = (unsigned)atoi(arg + 1);\n            else {\n                fprintf(stderr, \"invalid option %s\\n\", arg);\n                return 3;\n            }\n        }\n        else if (name != NULL) {\n            fprintf(stderr, \"only one file name allowed\\n\");\n            return 3;\n        }\n        else\n            name = arg;\n    source = load(name, &len);\n    if (source == NULL) {\n        fprintf(stderr, \"memory allocation failure\\n\");\n        return 4;\n    }\n    if (len == 0) {\n        fprintf(stderr, \"could not read %s, or it was empty\\n\",\n                name == NULL ? \"<stdin>\" : name);\n        free(source);\n        return 3;\n    }\n    if (skip >= len) {\n        fprintf(stderr, \"skip request of %d leaves no input\\n\", skip);\n        free(source);\n        return 3;\n    }\n\n    /* test inflate data with offset skip */\n    len -= skip;\n    sourcelen = (unsigned long)len;\n    ret = puff(NIL, &destlen, source + skip, &sourcelen);\n    if (ret)\n        fprintf(stderr, \"puff() failed with return code %d\\n\", ret);\n    else {\n        fprintf(stderr, \"puff() succeeded uncompressing %lu bytes\\n\", destlen);\n        if (sourcelen < len) fprintf(stderr, \"%lu compressed bytes unused\\n\",\n                                     len - sourcelen);\n    }\n\n    /* if requested, inflate again and write decompressd data to stdout */\n    if (put) {\n        dest = malloc(destlen);\n        if (dest == NULL) {\n            fprintf(stderr, \"memory allocation failure\\n\");\n            free(source);\n            return 4;\n        }\n        puff(dest, &destlen, source + skip, &sourcelen);\n        fwrite(dest, 1, destlen, stdout);\n        free(dest);\n    }\n\n    /* clean up */\n    free(source);\n    return ret;\n}\n#endif\n"
  },
  {
    "path": "external/zlib/contrib/puff/puff.h",
    "content": "/* puff.h\n  Copyright (C) 2002-2010 Mark Adler, all rights reserved\n  version 2.1, 4 Apr 2010\n\n  This software is provided 'as-is', without any express or implied\n  warranty.  In no event will the author be held liable for any damages\n  arising from the use of this software.\n\n  Permission is granted to anyone to use this software for any purpose,\n  including commercial applications, and to alter it and redistribute it\n  freely, subject to the following restrictions:\n\n  1. The origin of this software must not be misrepresented; you must not\n     claim that you wrote the original software. If you use this software\n     in a product, an acknowledgment in the product documentation would be\n     appreciated but is not required.\n  2. Altered source versions must be plainly marked as such, and must not be\n     misrepresented as being the original software.\n  3. This notice may not be removed or altered from any source distribution.\n\n  Mark Adler    madler@alumni.caltech.edu\n */\n\n\n/*\n * See puff.c for purpose and usage.\n */\nint puff(unsigned char *dest,           /* pointer to destination pointer */\n         unsigned long *destlen,        /* amount of output space */\n         unsigned char *source,         /* pointer to source data pointer */\n         unsigned long *sourcelen);     /* amount of input available */\n"
  },
  {
    "path": "external/zlib/contrib/testzlib/testzlib.c",
    "content": "#include <stdio.h>\n#include <stdlib.h>\n#include <windows.h>\n\n#include \"zlib.h\"\n\n\nvoid MyDoMinus64(LARGE_INTEGER *R,LARGE_INTEGER A,LARGE_INTEGER B)\n{\n    R->HighPart = A.HighPart - B.HighPart;\n    if (A.LowPart >= B.LowPart)\n        R->LowPart = A.LowPart - B.LowPart;\n    else\n    {\n        R->LowPart = A.LowPart - B.LowPart;\n        R->HighPart --;\n    }\n}\n\n#ifdef _M_X64\n// see http://msdn2.microsoft.com/library/twchhe95(en-us,vs.80).aspx for __rdtsc\nunsigned __int64 __rdtsc(void);\nvoid BeginCountRdtsc(LARGE_INTEGER * pbeginTime64)\n{\n //   printf(\"rdtsc = %I64x\\n\",__rdtsc());\n   pbeginTime64->QuadPart=__rdtsc();\n}\n\nLARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf)\n{\n    LARGE_INTEGER LIres;\n    unsigned _int64 res=__rdtsc()-((unsigned _int64)(beginTime64.QuadPart));\n    LIres.QuadPart=res;\n   // printf(\"rdtsc = %I64x\\n\",__rdtsc());\n    return LIres;\n}\n#else\n#ifdef _M_IX86\nvoid myGetRDTSC32(LARGE_INTEGER * pbeginTime64)\n{\n    DWORD dwEdx,dwEax;\n    _asm\n    {\n        rdtsc\n        mov dwEax,eax\n        mov dwEdx,edx\n    }\n    pbeginTime64->LowPart=dwEax;\n    pbeginTime64->HighPart=dwEdx;\n}\n\nvoid BeginCountRdtsc(LARGE_INTEGER * pbeginTime64)\n{\n    myGetRDTSC32(pbeginTime64);\n}\n\nLARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf)\n{\n    LARGE_INTEGER LIres,endTime64;\n    myGetRDTSC32(&endTime64);\n\n    LIres.LowPart=LIres.HighPart=0;\n    MyDoMinus64(&LIres,endTime64,beginTime64);\n    return LIres;\n}\n#else\nvoid myGetRDTSC32(LARGE_INTEGER * pbeginTime64)\n{\n}\n\nvoid BeginCountRdtsc(LARGE_INTEGER * pbeginTime64)\n{\n}\n\nLARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf)\n{\n    LARGE_INTEGER lr;\n    lr.QuadPart=0;\n    return lr;\n}\n#endif\n#endif\n\nvoid BeginCountPerfCounter(LARGE_INTEGER * pbeginTime64,BOOL fComputeTimeQueryPerf)\n{\n    if ((!fComputeTimeQueryPerf) || (!QueryPerformanceCounter(pbeginTime64)))\n    {\n        pbeginTime64->LowPart = GetTickCount();\n        pbeginTime64->HighPart = 0;\n    }\n}\n\nDWORD GetMsecSincePerfCounter(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf)\n{\n    LARGE_INTEGER endTime64,ticksPerSecond,ticks;\n    DWORDLONG ticksShifted,tickSecShifted;\n    DWORD dwLog=16+0;\n    DWORD dwRet;\n    if ((!fComputeTimeQueryPerf) || (!QueryPerformanceCounter(&endTime64)))\n        dwRet = (GetTickCount() - beginTime64.LowPart)*1;\n    else\n    {\n        MyDoMinus64(&ticks,endTime64,beginTime64);\n        QueryPerformanceFrequency(&ticksPerSecond);\n\n\n        {\n            ticksShifted = Int64ShrlMod32(*(DWORDLONG*)&ticks,dwLog);\n            tickSecShifted = Int64ShrlMod32(*(DWORDLONG*)&ticksPerSecond,dwLog);\n\n        }\n\n        dwRet = (DWORD)((((DWORD)ticksShifted)*1000)/(DWORD)(tickSecShifted));\n        dwRet *=1;\n    }\n    return dwRet;\n}\n\nint ReadFileMemory(const char* filename,long* plFileSize,void** pFilePtr)\n{\n    FILE* stream;\n    void* ptr;\n    int retVal=1;\n    stream=fopen(filename, \"rb\");\n    if (stream==NULL)\n        return 0;\n\n    fseek(stream,0,SEEK_END);\n\n    *plFileSize=ftell(stream);\n    fseek(stream,0,SEEK_SET);\n    ptr=malloc((*plFileSize)+1);\n    if (ptr==NULL)\n        retVal=0;\n    else\n    {\n        if (fread(ptr, 1, *plFileSize,stream) != (*plFileSize))\n            retVal=0;\n    }\n    fclose(stream);\n    *pFilePtr=ptr;\n    return retVal;\n}\n\nint main(int argc, char *argv[])\n{\n    int BlockSizeCompress=0x8000;\n    int BlockSizeUncompress=0x8000;\n    int cprLevel=Z_DEFAULT_COMPRESSION ;\n    long lFileSize;\n    unsigned char* FilePtr;\n    long lBufferSizeCpr;\n    long lBufferSizeUncpr;\n    long lCompressedSize=0;\n    unsigned char* CprPtr;\n    unsigned char* UncprPtr;\n    long lSizeCpr,lSizeUncpr;\n    DWORD dwGetTick,dwMsecQP;\n    LARGE_INTEGER li_qp,li_rdtsc,dwResRdtsc;\n\n    if (argc<=1)\n    {\n        printf(\"run TestZlib <File> [BlockSizeCompress] [BlockSizeUncompress] [compres. level]\\n\");\n        return 0;\n    }\n\n    if (ReadFileMemory(argv[1],&lFileSize,&FilePtr)==0)\n    {\n        printf(\"error reading %s\\n\",argv[1]);\n        return 1;\n    }\n    else printf(\"file %s read, %u bytes\\n\",argv[1],lFileSize);\n\n    if (argc>=3)\n        BlockSizeCompress=atol(argv[2]);\n\n    if (argc>=4)\n        BlockSizeUncompress=atol(argv[3]);\n\n    if (argc>=5)\n        cprLevel=(int)atol(argv[4]);\n\n    lBufferSizeCpr = lFileSize + (lFileSize/0x10) + 0x200;\n    lBufferSizeUncpr = lBufferSizeCpr;\n\n    CprPtr=(unsigned char*)malloc(lBufferSizeCpr + BlockSizeCompress);\n\n    BeginCountPerfCounter(&li_qp,TRUE);\n    dwGetTick=GetTickCount();\n    BeginCountRdtsc(&li_rdtsc);\n    {\n        z_stream zcpr;\n        int ret=Z_OK;\n        long lOrigToDo = lFileSize;\n        long lOrigDone = 0;\n        int step=0;\n        memset(&zcpr,0,sizeof(z_stream));\n        deflateInit(&zcpr,cprLevel);\n\n        zcpr.next_in = FilePtr;\n        zcpr.next_out = CprPtr;\n\n\n        do\n        {\n            long all_read_before = zcpr.total_in;\n            zcpr.avail_in = min(lOrigToDo,BlockSizeCompress);\n            zcpr.avail_out = BlockSizeCompress;\n            ret=deflate(&zcpr,(zcpr.avail_in==lOrigToDo) ? Z_FINISH : Z_SYNC_FLUSH);\n            lOrigDone += (zcpr.total_in-all_read_before);\n            lOrigToDo -= (zcpr.total_in-all_read_before);\n            step++;\n        } while (ret==Z_OK);\n\n        lSizeCpr=zcpr.total_out;\n        deflateEnd(&zcpr);\n        dwGetTick=GetTickCount()-dwGetTick;\n        dwMsecQP=GetMsecSincePerfCounter(li_qp,TRUE);\n        dwResRdtsc=GetResRdtsc(li_rdtsc,TRUE);\n        printf(\"total compress size = %u, in %u step\\n\",lSizeCpr,step);\n        printf(\"time = %u msec = %f sec\\n\",dwGetTick,dwGetTick/(double)1000.);\n        printf(\"defcpr time QP = %u msec = %f sec\\n\",dwMsecQP,dwMsecQP/(double)1000.);\n        printf(\"defcpr result rdtsc = %I64x\\n\\n\",dwResRdtsc.QuadPart);\n    }\n\n    CprPtr=(unsigned char*)realloc(CprPtr,lSizeCpr);\n    UncprPtr=(unsigned char*)malloc(lBufferSizeUncpr + BlockSizeUncompress);\n\n    BeginCountPerfCounter(&li_qp,TRUE);\n    dwGetTick=GetTickCount();\n    BeginCountRdtsc(&li_rdtsc);\n    {\n        z_stream zcpr;\n        int ret=Z_OK;\n        long lOrigToDo = lSizeCpr;\n        long lOrigDone = 0;\n        int step=0;\n        memset(&zcpr,0,sizeof(z_stream));\n        inflateInit(&zcpr);\n\n        zcpr.next_in = CprPtr;\n        zcpr.next_out = UncprPtr;\n\n\n        do\n        {\n            long all_read_before = zcpr.total_in;\n            zcpr.avail_in = min(lOrigToDo,BlockSizeUncompress);\n            zcpr.avail_out = BlockSizeUncompress;\n            ret=inflate(&zcpr,Z_SYNC_FLUSH);\n            lOrigDone += (zcpr.total_in-all_read_before);\n            lOrigToDo -= (zcpr.total_in-all_read_before);\n            step++;\n        } while (ret==Z_OK);\n\n        lSizeUncpr=zcpr.total_out;\n        inflateEnd(&zcpr);\n        dwGetTick=GetTickCount()-dwGetTick;\n        dwMsecQP=GetMsecSincePerfCounter(li_qp,TRUE);\n        dwResRdtsc=GetResRdtsc(li_rdtsc,TRUE);\n        printf(\"total uncompress size = %u, in %u step\\n\",lSizeUncpr,step);\n        printf(\"time = %u msec = %f sec\\n\",dwGetTick,dwGetTick/(double)1000.);\n        printf(\"uncpr  time QP = %u msec = %f sec\\n\",dwMsecQP,dwMsecQP/(double)1000.);\n        printf(\"uncpr  result rdtsc = %I64x\\n\\n\",dwResRdtsc.QuadPart);\n    }\n\n    if (lSizeUncpr==lFileSize)\n    {\n        if (memcmp(FilePtr,UncprPtr,lFileSize)==0)\n            printf(\"compare ok\\n\");\n\n    }\n\n    return 0;\n}\n"
  },
  {
    "path": "external/zlib/contrib/testzlib/testzlib.txt",
    "content": "To build testzLib with Visual Studio 2005:\n\ncopy to a directory file from :\n- root of zLib tree\n- contrib/testzlib\n- contrib/masmx86\n- contrib/masmx64\n- contrib/vstudio/vc7\n\nand open testzlib8.sln"
  },
  {
    "path": "external/zlib/contrib/untgz/Makefile",
    "content": "CC=cc\nCFLAGS=-g\n\nuntgz: untgz.o ../../libz.a\n\t$(CC) $(CFLAGS) -o untgz untgz.o -L../.. -lz\n\nuntgz.o: untgz.c ../../zlib.h\n\t$(CC) $(CFLAGS) -c -I../.. untgz.c\n\n../../libz.a:\n\tcd ../..; ./configure; make\n\nclean:\n\trm -f untgz untgz.o *~\n"
  },
  {
    "path": "external/zlib/contrib/untgz/Makefile.msc",
    "content": "CC=cl\nCFLAGS=-MD\n\nuntgz.exe: untgz.obj ..\\..\\zlib.lib\n\t$(CC) $(CFLAGS) untgz.obj ..\\..\\zlib.lib\n\nuntgz.obj: untgz.c ..\\..\\zlib.h\n\t$(CC) $(CFLAGS) -c -I..\\.. untgz.c\n\n..\\..\\zlib.lib:\n\tcd ..\\..\n\t$(MAKE) -f win32\\makefile.msc\n\tcd contrib\\untgz\n\nclean:\n\t-del untgz.obj\n\t-del untgz.exe\n"
  },
  {
    "path": "external/zlib/contrib/untgz/untgz.c",
    "content": "/*\n * untgz.c -- Display contents and extract files from a gzip'd TAR file\n *\n * written by Pedro A. Aranda Gutierrez <paag@tid.es>\n * adaptation to Unix by Jean-loup Gailly <jloup@gzip.org>\n * various fixes by Cosmin Truta <cosmint@cs.ubbcluj.ro>\n */\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <time.h>\n#include <errno.h>\n\n#include \"zlib.h\"\n\n#ifdef unix\n#  include <unistd.h>\n#else\n#  include <direct.h>\n#  include <io.h>\n#endif\n\n#ifdef WIN32\n#include <windows.h>\n#  ifndef F_OK\n#    define F_OK  0\n#  endif\n#  define mkdir(dirname,mode)   _mkdir(dirname)\n#  ifdef _MSC_VER\n#    define access(path,mode)   _access(path,mode)\n#    define chmod(path,mode)    _chmod(path,mode)\n#    define strdup(str)         _strdup(str)\n#  endif\n#else\n#  include <utime.h>\n#endif\n\n\n/* values used in typeflag field */\n\n#define REGTYPE  '0'            /* regular file */\n#define AREGTYPE '\\0'           /* regular file */\n#define LNKTYPE  '1'            /* link */\n#define SYMTYPE  '2'            /* reserved */\n#define CHRTYPE  '3'            /* character special */\n#define BLKTYPE  '4'            /* block special */\n#define DIRTYPE  '5'            /* directory */\n#define FIFOTYPE '6'            /* FIFO special */\n#define CONTTYPE '7'            /* reserved */\n\n/* GNU tar extensions */\n\n#define GNUTYPE_DUMPDIR  'D'    /* file names from dumped directory */\n#define GNUTYPE_LONGLINK 'K'    /* long link name */\n#define GNUTYPE_LONGNAME 'L'    /* long file name */\n#define GNUTYPE_MULTIVOL 'M'    /* continuation of file from another volume */\n#define GNUTYPE_NAMES    'N'    /* file name that does not fit into main hdr */\n#define GNUTYPE_SPARSE   'S'    /* sparse file */\n#define GNUTYPE_VOLHDR   'V'    /* tape/volume header */\n\n\n/* tar header */\n\n#define BLOCKSIZE     512\n#define SHORTNAMESIZE 100\n\nstruct tar_header\n{                               /* byte offset */\n  char name[100];               /*   0 */\n  char mode[8];                 /* 100 */\n  char uid[8];                  /* 108 */\n  char gid[8];                  /* 116 */\n  char size[12];                /* 124 */\n  char mtime[12];               /* 136 */\n  char chksum[8];               /* 148 */\n  char typeflag;                /* 156 */\n  char linkname[100];           /* 157 */\n  char magic[6];                /* 257 */\n  char version[2];              /* 263 */\n  char uname[32];               /* 265 */\n  char gname[32];               /* 297 */\n  char devmajor[8];             /* 329 */\n  char devminor[8];             /* 337 */\n  char prefix[155];             /* 345 */\n                                /* 500 */\n};\n\nunion tar_buffer\n{\n  char               buffer[BLOCKSIZE];\n  struct tar_header  header;\n};\n\nstruct attr_item\n{\n  struct attr_item  *next;\n  char              *fname;\n  int                mode;\n  time_t             time;\n};\n\nenum { TGZ_EXTRACT, TGZ_LIST, TGZ_INVALID };\n\nchar *TGZfname          OF((const char *));\nvoid TGZnotfound        OF((const char *));\n\nint getoct              OF((char *, int));\nchar *strtime           OF((time_t *));\nint setfiletime         OF((char *, time_t));\nvoid push_attr          OF((struct attr_item **, char *, int, time_t));\nvoid restore_attr       OF((struct attr_item **));\n\nint ExprMatch           OF((char *, char *));\n\nint makedir             OF((char *));\nint matchname           OF((int, int, char **, char *));\n\nvoid error              OF((const char *));\nint tar                 OF((gzFile, int, int, int, char **));\n\nvoid help               OF((int));\nint main                OF((int, char **));\n\nchar *prog;\n\nconst char *TGZsuffix[] = { \"\\0\", \".tar\", \".tar.gz\", \".taz\", \".tgz\", NULL };\n\n/* return the file name of the TGZ archive */\n/* or NULL if it does not exist */\n\nchar *TGZfname (const char *arcname)\n{\n  static char buffer[1024];\n  int origlen,i;\n\n  strcpy(buffer,arcname);\n  origlen = strlen(buffer);\n\n  for (i=0; TGZsuffix[i]; i++)\n    {\n       strcpy(buffer+origlen,TGZsuffix[i]);\n       if (access(buffer,F_OK) == 0)\n         return buffer;\n    }\n  return NULL;\n}\n\n\n/* error message for the filename */\n\nvoid TGZnotfound (const char *arcname)\n{\n  int i;\n\n  fprintf(stderr,\"%s: Couldn't find \",prog);\n  for (i=0;TGZsuffix[i];i++)\n    fprintf(stderr,(TGZsuffix[i+1]) ? \"%s%s, \" : \"or %s%s\\n\",\n            arcname,\n            TGZsuffix[i]);\n  exit(1);\n}\n\n\n/* convert octal digits to int */\n/* on error return -1 */\n\nint getoct (char *p,int width)\n{\n  int result = 0;\n  char c;\n\n  while (width--)\n    {\n      c = *p++;\n      if (c == 0)\n        break;\n      if (c == ' ')\n        continue;\n      if (c < '0' || c > '7')\n        return -1;\n      result = result * 8 + (c - '0');\n    }\n  return result;\n}\n\n\n/* convert time_t to string */\n/* use the \"YYYY/MM/DD hh:mm:ss\" format */\n\nchar *strtime (time_t *t)\n{\n  struct tm   *local;\n  static char result[32];\n\n  local = localtime(t);\n  sprintf(result,\"%4d/%02d/%02d %02d:%02d:%02d\",\n          local->tm_year+1900, local->tm_mon+1, local->tm_mday,\n          local->tm_hour, local->tm_min, local->tm_sec);\n  return result;\n}\n\n\n/* set file time */\n\nint setfiletime (char *fname,time_t ftime)\n{\n#ifdef WIN32\n  static int isWinNT = -1;\n  SYSTEMTIME st;\n  FILETIME locft, modft;\n  struct tm *loctm;\n  HANDLE hFile;\n  int result;\n\n  loctm = localtime(&ftime);\n  if (loctm == NULL)\n    return -1;\n\n  st.wYear         = (WORD)loctm->tm_year + 1900;\n  st.wMonth        = (WORD)loctm->tm_mon + 1;\n  st.wDayOfWeek    = (WORD)loctm->tm_wday;\n  st.wDay          = (WORD)loctm->tm_mday;\n  st.wHour         = (WORD)loctm->tm_hour;\n  st.wMinute       = (WORD)loctm->tm_min;\n  st.wSecond       = (WORD)loctm->tm_sec;\n  st.wMilliseconds = 0;\n  if (!SystemTimeToFileTime(&st, &locft) ||\n      !LocalFileTimeToFileTime(&locft, &modft))\n    return -1;\n\n  if (isWinNT < 0)\n    isWinNT = (GetVersion() < 0x80000000) ? 1 : 0;\n  hFile = CreateFile(fname, GENERIC_WRITE, 0, NULL, OPEN_EXISTING,\n                     (isWinNT ? FILE_FLAG_BACKUP_SEMANTICS : 0),\n                     NULL);\n  if (hFile == INVALID_HANDLE_VALUE)\n    return -1;\n  result = SetFileTime(hFile, NULL, NULL, &modft) ? 0 : -1;\n  CloseHandle(hFile);\n  return result;\n#else\n  struct utimbuf settime;\n\n  settime.actime = settime.modtime = ftime;\n  return utime(fname,&settime);\n#endif\n}\n\n\n/* push file attributes */\n\nvoid push_attr(struct attr_item **list,char *fname,int mode,time_t time)\n{\n  struct attr_item *item;\n\n  item = (struct attr_item *)malloc(sizeof(struct attr_item));\n  if (item == NULL)\n    error(\"Out of memory\");\n  item->fname = strdup(fname);\n  item->mode  = mode;\n  item->time  = time;\n  item->next  = *list;\n  *list       = item;\n}\n\n\n/* restore file attributes */\n\nvoid restore_attr(struct attr_item **list)\n{\n  struct attr_item *item, *prev;\n\n  for (item = *list; item != NULL; )\n    {\n      setfiletime(item->fname,item->time);\n      chmod(item->fname,item->mode);\n      prev = item;\n      item = item->next;\n      free(prev);\n    }\n  *list = NULL;\n}\n\n\n/* match regular expression */\n\n#define ISSPECIAL(c) (((c) == '*') || ((c) == '/'))\n\nint ExprMatch (char *string,char *expr)\n{\n  while (1)\n    {\n      if (ISSPECIAL(*expr))\n        {\n          if (*expr == '/')\n            {\n              if (*string != '\\\\' && *string != '/')\n                return 0;\n              string ++; expr++;\n            }\n          else if (*expr == '*')\n            {\n              if (*expr ++ == 0)\n                return 1;\n              while (*++string != *expr)\n                if (*string == 0)\n                  return 0;\n            }\n        }\n      else\n        {\n          if (*string != *expr)\n            return 0;\n          if (*expr++ == 0)\n            return 1;\n          string++;\n        }\n    }\n}\n\n\n/* recursive mkdir */\n/* abort on ENOENT; ignore other errors like \"directory already exists\" */\n/* return 1 if OK */\n/*        0 on error */\n\nint makedir (char *newdir)\n{\n  char *buffer = strdup(newdir);\n  char *p;\n  int  len = strlen(buffer);\n\n  if (len <= 0) {\n    free(buffer);\n    return 0;\n  }\n  if (buffer[len-1] == '/') {\n    buffer[len-1] = '\\0';\n  }\n  if (mkdir(buffer, 0755) == 0)\n    {\n      free(buffer);\n      return 1;\n    }\n\n  p = buffer+1;\n  while (1)\n    {\n      char hold;\n\n      while(*p && *p != '\\\\' && *p != '/')\n        p++;\n      hold = *p;\n      *p = 0;\n      if ((mkdir(buffer, 0755) == -1) && (errno == ENOENT))\n        {\n          fprintf(stderr,\"%s: Couldn't create directory %s\\n\",prog,buffer);\n          free(buffer);\n          return 0;\n        }\n      if (hold == 0)\n        break;\n      *p++ = hold;\n    }\n  free(buffer);\n  return 1;\n}\n\n\nint matchname (int arg,int argc,char **argv,char *fname)\n{\n  if (arg == argc)      /* no arguments given (untgz tgzarchive) */\n    return 1;\n\n  while (arg < argc)\n    if (ExprMatch(fname,argv[arg++]))\n      return 1;\n\n  return 0; /* ignore this for the moment being */\n}\n\n\n/* tar file list or extract */\n\nint tar (gzFile in,int action,int arg,int argc,char **argv)\n{\n  union  tar_buffer buffer;\n  int    len;\n  int    err;\n  int    getheader = 1;\n  int    remaining = 0;\n  FILE   *outfile = NULL;\n  char   fname[BLOCKSIZE];\n  int    tarmode;\n  time_t tartime;\n  struct attr_item *attributes = NULL;\n\n  if (action == TGZ_LIST)\n    printf(\"    date      time     size                       file\\n\"\n           \" ---------- -------- --------- -------------------------------------\\n\");\n  while (1)\n    {\n      len = gzread(in, &buffer, BLOCKSIZE);\n      if (len < 0)\n        error(gzerror(in, &err));\n      /*\n       * Always expect complete blocks to process\n       * the tar information.\n       */\n      if (len != BLOCKSIZE)\n        {\n          action = TGZ_INVALID; /* force error exit */\n          remaining = 0;        /* force I/O cleanup */\n        }\n\n      /*\n       * If we have to get a tar header\n       */\n      if (getheader >= 1)\n        {\n          /*\n           * if we met the end of the tar\n           * or the end-of-tar block,\n           * we are done\n           */\n          if (len == 0 || buffer.header.name[0] == 0)\n            break;\n\n          tarmode = getoct(buffer.header.mode,8);\n          tartime = (time_t)getoct(buffer.header.mtime,12);\n          if (tarmode == -1 || tartime == (time_t)-1)\n            {\n              buffer.header.name[0] = 0;\n              action = TGZ_INVALID;\n            }\n\n          if (getheader == 1)\n            {\n              strncpy(fname,buffer.header.name,SHORTNAMESIZE);\n              if (fname[SHORTNAMESIZE-1] != 0)\n                  fname[SHORTNAMESIZE] = 0;\n            }\n          else\n            {\n              /*\n               * The file name is longer than SHORTNAMESIZE\n               */\n              if (strncmp(fname,buffer.header.name,SHORTNAMESIZE-1) != 0)\n                  error(\"bad long name\");\n              getheader = 1;\n            }\n\n          /*\n           * Act according to the type flag\n           */\n          switch (buffer.header.typeflag)\n            {\n            case DIRTYPE:\n              if (action == TGZ_LIST)\n                printf(\" %s     <dir> %s\\n\",strtime(&tartime),fname);\n              if (action == TGZ_EXTRACT)\n                {\n                  makedir(fname);\n                  push_attr(&attributes,fname,tarmode,tartime);\n                }\n              break;\n            case REGTYPE:\n            case AREGTYPE:\n              remaining = getoct(buffer.header.size,12);\n              if (remaining == -1)\n                {\n                  action = TGZ_INVALID;\n                  break;\n                }\n              if (action == TGZ_LIST)\n                printf(\" %s %9d %s\\n\",strtime(&tartime),remaining,fname);\n              else if (action == TGZ_EXTRACT)\n                {\n                  if (matchname(arg,argc,argv,fname))\n                    {\n                      outfile = fopen(fname,\"wb\");\n                      if (outfile == NULL) {\n                        /* try creating directory */\n                        char *p = strrchr(fname, '/');\n                        if (p != NULL) {\n                          *p = '\\0';\n                          makedir(fname);\n                          *p = '/';\n                          outfile = fopen(fname,\"wb\");\n                        }\n                      }\n                      if (outfile != NULL)\n                        printf(\"Extracting %s\\n\",fname);\n                      else\n                        fprintf(stderr, \"%s: Couldn't create %s\",prog,fname);\n                    }\n                  else\n                    outfile = NULL;\n                }\n              getheader = 0;\n              break;\n            case GNUTYPE_LONGLINK:\n            case GNUTYPE_LONGNAME:\n              remaining = getoct(buffer.header.size,12);\n              if (remaining < 0 || remaining >= BLOCKSIZE)\n                {\n                  action = TGZ_INVALID;\n                  break;\n                }\n              len = gzread(in, fname, BLOCKSIZE);\n              if (len < 0)\n                error(gzerror(in, &err));\n              if (fname[BLOCKSIZE-1] != 0 || (int)strlen(fname) > remaining)\n                {\n                  action = TGZ_INVALID;\n                  break;\n                }\n              getheader = 2;\n              break;\n            default:\n              if (action == TGZ_LIST)\n                printf(\" %s     <---> %s\\n\",strtime(&tartime),fname);\n              break;\n            }\n        }\n      else\n        {\n          unsigned int bytes = (remaining > BLOCKSIZE) ? BLOCKSIZE : remaining;\n\n          if (outfile != NULL)\n            {\n              if (fwrite(&buffer,sizeof(char),bytes,outfile) != bytes)\n                {\n                  fprintf(stderr,\n                    \"%s: Error writing %s -- skipping\\n\",prog,fname);\n                  fclose(outfile);\n                  outfile = NULL;\n                  remove(fname);\n                }\n            }\n          remaining -= bytes;\n        }\n\n      if (remaining == 0)\n        {\n          getheader = 1;\n          if (outfile != NULL)\n            {\n              fclose(outfile);\n              outfile = NULL;\n              if (action != TGZ_INVALID)\n                push_attr(&attributes,fname,tarmode,tartime);\n            }\n        }\n\n      /*\n       * Abandon if errors are found\n       */\n      if (action == TGZ_INVALID)\n        {\n          error(\"broken archive\");\n          break;\n        }\n    }\n\n  /*\n   * Restore file modes and time stamps\n   */\n  restore_attr(&attributes);\n\n  if (gzclose(in) != Z_OK)\n    error(\"failed gzclose\");\n\n  return 0;\n}\n\n\n/* ============================================================ */\n\nvoid help(int exitval)\n{\n  printf(\"untgz version 0.2.1\\n\"\n         \"  using zlib version %s\\n\\n\",\n         zlibVersion());\n  printf(\"Usage: untgz file.tgz            extract all files\\n\"\n         \"       untgz file.tgz fname ...  extract selected files\\n\"\n         \"       untgz -l file.tgz         list archive contents\\n\"\n         \"       untgz -h                  display this help\\n\");\n  exit(exitval);\n}\n\nvoid error(const char *msg)\n{\n  fprintf(stderr, \"%s: %s\\n\", prog, msg);\n  exit(1);\n}\n\n\n/* ============================================================ */\n\n#if defined(WIN32) && defined(__GNUC__)\nint _CRT_glob = 0;      /* disable argument globbing in MinGW */\n#endif\n\nint main(int argc,char **argv)\n{\n    int         action = TGZ_EXTRACT;\n    int         arg = 1;\n    char        *TGZfile;\n    gzFile      *f;\n\n    prog = strrchr(argv[0],'\\\\');\n    if (prog == NULL)\n      {\n        prog = strrchr(argv[0],'/');\n        if (prog == NULL)\n          {\n            prog = strrchr(argv[0],':');\n            if (prog == NULL)\n              prog = argv[0];\n            else\n              prog++;\n          }\n        else\n          prog++;\n      }\n    else\n      prog++;\n\n    if (argc == 1)\n      help(0);\n\n    if (strcmp(argv[arg],\"-l\") == 0)\n      {\n        action = TGZ_LIST;\n        if (argc == ++arg)\n          help(0);\n      }\n    else if (strcmp(argv[arg],\"-h\") == 0)\n      {\n        help(0);\n      }\n\n    if ((TGZfile = TGZfname(argv[arg])) == NULL)\n      TGZnotfound(argv[arg]);\n\n    ++arg;\n    if ((action == TGZ_LIST) && (arg != argc))\n      help(1);\n\n/*\n *  Process the TGZ file\n */\n    switch(action)\n      {\n      case TGZ_LIST:\n      case TGZ_EXTRACT:\n        f = gzopen(TGZfile,\"rb\");\n        if (f == NULL)\n          {\n            fprintf(stderr,\"%s: Couldn't gzopen %s\\n\",prog,TGZfile);\n            return 1;\n          }\n        exit(tar(f, action, arg, argc, argv));\n      break;\n\n      default:\n        error(\"Unknown option\");\n        exit(1);\n      }\n\n    return 0;\n}\n"
  },
  {
    "path": "external/zlib/contrib/vstudio/readme.txt",
    "content": "Building instructions for the DLL versions of Zlib 1.2.4\n========================================================\n\nThis directory contains projects that build zlib and minizip using\nMicrosoft Visual C++ 9.0/10.0, and Visual C++ .\n\nYou don't need to build these projects yourself. You can download the\nbinaries from:\n  http://www.winimage.com/zLibDll\n\nMore information can be found at this site.\n\nfirst compile assembly code by running\nbld_ml64.bat in contrib\\masmx64\nbld_ml32.bat in contrib\\masmx86\n\n\n\n\nBuild instructions for Visual Studio 2008 (32 bits or 64 bits)\n--------------------------------------------------------------\n- Uncompress current zlib, including all contrib/* files\n- Open contrib\\vstudio\\vc9\\zlibvc.sln with Microsoft Visual C++ 2008.0\n- Or run: vcbuild /rebuild contrib\\vstudio\\vc9\\zlibvc.sln \"Release|Win32\"\n\nBuild instructions for Visual Studio 2010 (32 bits or 64 bits)\n--------------------------------------------------------------\n- Uncompress current zlib, including all contrib/* files\n- Open contrib\\vstudio\\vc10\\zlibvc.sln with Microsoft Visual C++ 2010.0\n\n\nImportant\n---------\n- To use zlibwapi.dll in your application, you must define the\n  macro ZLIB_WINAPI when compiling your application's source files.\n\n\nAdditional notes\n----------------\n- This DLL, named zlibwapi.dll, is compatible to the old zlib.dll built\n  by Gilles Vollant from the zlib 1.1.x sources, and distributed at\n    http://www.winimage.com/zLibDll\n  It uses the WINAPI calling convention for the exported functions, and\n  includes the minizip functionality. If your application needs that\n  particular build of zlib.dll, you can rename zlibwapi.dll to zlib.dll.\n\n- The new DLL was renamed because there exist several incompatible\n  versions of zlib.dll on the Internet.\n\n- There is also an official DLL build of zlib, named zlib1.dll. This one\n  is exporting the functions using the CDECL convention. See the file\n  win32\\DLL_FAQ.txt found in this zlib distribution.\n\n- There used to be a ZLIB_DLL macro in zlib 1.1.x, but now this symbol\n  has a slightly different effect. To avoid compatibility problems, do\n  not define it here.\n\n\nGilles Vollant\ninfo@winimage.com\n"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc10/miniunz.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Itanium\">\n      <Configuration>Debug</Configuration>\n      <Platform>Itanium</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Itanium\">\n      <Configuration>Release</Configuration>\n      <Platform>Itanium</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{C52F9E7B-498A-42BE-8DB4-85A15694382A}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">x86\\MiniUnzip$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">x86\\MiniUnzip$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">x86\\MiniUnzip$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">x86\\MiniUnzip$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">x64\\MiniUnzip$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">x64\\MiniUnzip$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">true</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">ia64\\MiniUnzip$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">ia64\\MiniUnzip$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">true</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">x64\\MiniUnzip$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">x64\\MiniUnzip$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">ia64\\MiniUnzip$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">ia64\\MiniUnzip$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">false</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">false</GenerateManifest>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MinimalRebuild>true</MinimalRebuild>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>x86\\ZlibDllDebug\\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)miniunz.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ProgramDatabaseFile>$(OutDir)miniunz.pdb</ProgramDatabaseFile>\n      <SubSystem>Console</SubSystem>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <OmitFramePointers>true</OmitFramePointers>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>x86\\ZlibDllRelease\\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)miniunz.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MinimalRebuild>true</MinimalRebuild>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>x64\\ZlibDllDebug\\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)miniunz.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ProgramDatabaseFile>$(OutDir)miniunz.pdb</ProgramDatabaseFile>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">\n    <Midl>\n      <TargetEnvironment>Itanium</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MinimalRebuild>true</MinimalRebuild>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>ia64\\ZlibDllDebug\\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)miniunz.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ProgramDatabaseFile>$(OutDir)miniunz.pdb</ProgramDatabaseFile>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineIA64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <OmitFramePointers>true</OmitFramePointers>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>x64\\ZlibDllRelease\\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)miniunz.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">\n    <Midl>\n      <TargetEnvironment>Itanium</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <OmitFramePointers>true</OmitFramePointers>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>ia64\\ZlibDllRelease\\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)miniunz.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineIA64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\..\\minizip\\miniunz.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"zlibvc.vcxproj\">\n      <Project>{8fd826f8-3739-44e6-8cc8-997122e53b8d}</Project>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"Source Files\">\n      <UniqueIdentifier>{048af943-022b-4db6-beeb-a54c34774ee2}</UniqueIdentifier>\n      <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm</Extensions>\n    </Filter>\n    <Filter Include=\"Header Files\">\n      <UniqueIdentifier>{c1d600d2-888f-4aea-b73e-8b0dd9befa0c}</UniqueIdentifier>\n      <Extensions>h;hpp;hxx;hm;inl;inc</Extensions>\n    </Filter>\n    <Filter Include=\"Resource Files\">\n      <UniqueIdentifier>{0844199a-966b-4f19-81db-1e0125e141b9}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\..\\minizip\\miniunz.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc10/miniunz.vcxproj.user",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n</Project>"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc10/minizip.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Itanium\">\n      <Configuration>Debug</Configuration>\n      <Platform>Itanium</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Itanium\">\n      <Configuration>Release</Configuration>\n      <Platform>Itanium</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">x86\\MiniZip$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">x86\\MiniZip$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">x86\\MiniZip$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">x86\\MiniZip$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">x64\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">x64\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">true</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">ia64\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">ia64\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">true</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">x64\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">x64\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">ia64\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">ia64\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MinimalRebuild>true</MinimalRebuild>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>x86\\ZlibDllDebug\\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)minizip.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ProgramDatabaseFile>$(OutDir)minizip.pdb</ProgramDatabaseFile>\n      <SubSystem>Console</SubSystem>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <OmitFramePointers>true</OmitFramePointers>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>x86\\ZlibDllRelease\\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)minizip.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MinimalRebuild>true</MinimalRebuild>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>x64\\ZlibDllDebug\\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)minizip.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ProgramDatabaseFile>$(OutDir)minizip.pdb</ProgramDatabaseFile>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">\n    <Midl>\n      <TargetEnvironment>Itanium</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MinimalRebuild>true</MinimalRebuild>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>ia64\\ZlibDllDebug\\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)minizip.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ProgramDatabaseFile>$(OutDir)minizip.pdb</ProgramDatabaseFile>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineIA64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <OmitFramePointers>true</OmitFramePointers>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>x64\\ZlibDllRelease\\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)minizip.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">\n    <Midl>\n      <TargetEnvironment>Itanium</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <OmitFramePointers>true</OmitFramePointers>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>ia64\\ZlibDllRelease\\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)minizip.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineIA64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\..\\minizip\\minizip.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"zlibvc.vcxproj\">\n      <Project>{8fd826f8-3739-44e6-8cc8-997122e53b8d}</Project>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc10/minizip.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"Source Files\">\n      <UniqueIdentifier>{c0419b40-bf50-40da-b153-ff74215b79de}</UniqueIdentifier>\n      <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm</Extensions>\n    </Filter>\n    <Filter Include=\"Header Files\">\n      <UniqueIdentifier>{bb87b070-735b-478e-92ce-7383abb2f36c}</UniqueIdentifier>\n      <Extensions>h;hpp;hxx;hm;inl;inc</Extensions>\n    </Filter>\n    <Filter Include=\"Resource Files\">\n      <UniqueIdentifier>{f46ab6a6-548f-43cb-ae96-681abb5bd5db}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\..\\minizip\\minizip.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc10/minizip.vcxproj.user",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n</Project>"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc10/testzlib.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Itanium\">\n      <Configuration>Debug</Configuration>\n      <Platform>Itanium</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"ReleaseWithoutAsm|Itanium\">\n      <Configuration>ReleaseWithoutAsm</Configuration>\n      <Platform>Itanium</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"ReleaseWithoutAsm|Win32\">\n      <Configuration>ReleaseWithoutAsm</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"ReleaseWithoutAsm|x64\">\n      <Configuration>ReleaseWithoutAsm</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Itanium\">\n      <Configuration>Release</Configuration>\n      <Platform>Itanium</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}</ProjectGuid>\n    <RootNamespace>testzlib</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">x86\\TestZlib$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">x86\\TestZlib$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\">x86\\TestZlib$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\">x86\\TestZlib$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\">false</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">x86\\TestZlib$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">x86\\TestZlib$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">x64\\TestZlib$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">x64\\TestZlib$(Configuration)\\Tmp\\</IntDir>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">ia64\\TestZlib$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">ia64\\TestZlib$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">true</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\">x64\\TestZlib$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\">x64\\TestZlib$(Configuration)\\Tmp\\</IntDir>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\">ia64\\TestZlib$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\">ia64\\TestZlib$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\">false</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">x64\\TestZlib$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">x64\\TestZlib$(Configuration)\\Tmp\\</IntDir>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">ia64\\TestZlib$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">ia64\\TestZlib$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">false</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">false</GenerateManifest>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>..\\..\\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MinimalRebuild>true</MinimalRebuild>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>..\\..\\masmx86\\match686.obj;..\\..\\masmx86\\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)testzlib.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>\n      <SubSystem>Console</SubSystem>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\">\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <OmitFramePointers>true</OmitFramePointers>\n      <AdditionalIncludeDirectories>..\\..\\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <OutputFile>$(OutDir)testzlib.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <OmitFramePointers>true</OmitFramePointers>\n      <AdditionalIncludeDirectories>..\\..\\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>..\\..\\masmx86\\match686.obj;..\\..\\masmx86\\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)testzlib.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>..\\..\\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>..\\..\\masmx64\\gvmat64.obj;..\\..\\masmx64\\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">\n    <Midl>\n      <TargetEnvironment>Itanium</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>..\\..\\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MinimalRebuild>true</MinimalRebuild>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <OutputFile>$(OutDir)testzlib.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineIA64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>..\\..\\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\">\n    <Midl>\n      <TargetEnvironment>Itanium</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <OmitFramePointers>true</OmitFramePointers>\n      <AdditionalIncludeDirectories>..\\..\\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <OutputFile>$(OutDir)testzlib.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineIA64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>..\\..\\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>..\\..\\masmx64\\gvmat64.obj;..\\..\\masmx64\\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">\n    <Midl>\n      <TargetEnvironment>Itanium</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <OmitFramePointers>true</OmitFramePointers>\n      <AdditionalIncludeDirectories>..\\..\\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <OutputFile>$(OutDir)testzlib.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineIA64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\..\\..\\adler32.c\" />\n    <ClCompile Include=\"..\\..\\..\\compress.c\" />\n    <ClCompile Include=\"..\\..\\..\\crc32.c\" />\n    <ClCompile Include=\"..\\..\\..\\deflate.c\" />\n    <ClCompile Include=\"..\\..\\..\\infback.c\" />\n    <ClCompile Include=\"..\\..\\masmx64\\inffas8664.c\">\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">true</ExcludedFromBuild>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\inffast.c\" />\n    <ClCompile Include=\"..\\..\\..\\inflate.c\" />\n    <ClCompile Include=\"..\\..\\..\\inftrees.c\" />\n    <ClCompile Include=\"..\\..\\testzlib\\testzlib.c\" />\n    <ClCompile Include=\"..\\..\\..\\trees.c\" />\n    <ClCompile Include=\"..\\..\\..\\uncompr.c\" />\n    <ClCompile Include=\"..\\..\\..\\zutil.c\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"Source Files\">\n      <UniqueIdentifier>{c1f6a2e3-5da5-4955-8653-310d3efe05a9}</UniqueIdentifier>\n      <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm</Extensions>\n    </Filter>\n    <Filter Include=\"Header Files\">\n      <UniqueIdentifier>{c2aaffdc-2c95-4d6f-8466-4bec5890af2c}</UniqueIdentifier>\n      <Extensions>h;hpp;hxx;hm;inl;inc</Extensions>\n    </Filter>\n    <Filter Include=\"Resource Files\">\n      <UniqueIdentifier>{c274fe07-05f2-461c-964b-f6341e4e7eb5}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\..\\..\\adler32.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\compress.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\crc32.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\deflate.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\infback.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\masmx64\\inffas8664.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\inffast.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\inflate.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\inftrees.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\testzlib\\testzlib.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\trees.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\uncompr.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\zutil.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc10/testzlib.vcxproj.user",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n</Project>"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Itanium\">\n      <Configuration>Debug</Configuration>\n      <Platform>Itanium</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Itanium\">\n      <Configuration>Release</Configuration>\n      <Platform>Itanium</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{C52F9E7B-498A-42BE-8DB4-85A15694366A}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">x86\\TestZlibDll$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">x86\\TestZlibDll$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">x86\\TestZlibDll$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">x86\\TestZlibDll$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">x64\\TestZlibDll$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">x64\\TestZlibDll$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">true</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">ia64\\TestZlibDll$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">ia64\\TestZlibDll$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">true</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">x64\\TestZlibDll$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">x64\\TestZlibDll$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">ia64\\TestZlibDll$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">ia64\\TestZlibDll$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">false</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">false</GenerateManifest>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MinimalRebuild>true</MinimalRebuild>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>x86\\ZlibDllDebug\\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)testzlib.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>\n      <SubSystem>Console</SubSystem>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <OmitFramePointers>true</OmitFramePointers>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>x86\\ZlibDllRelease\\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)testzlib.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MinimalRebuild>true</MinimalRebuild>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>x64\\ZlibDllDebug\\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)testzlib.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">\n    <Midl>\n      <TargetEnvironment>Itanium</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MinimalRebuild>true</MinimalRebuild>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>ia64\\ZlibDllDebug\\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)testzlib.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineIA64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <OmitFramePointers>true</OmitFramePointers>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>x64\\ZlibDllRelease\\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)testzlib.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">\n    <Midl>\n      <TargetEnvironment>Itanium</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <OmitFramePointers>true</OmitFramePointers>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>ia64\\ZlibDllRelease\\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)testzlib.exe</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineIA64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\..\\testzlib\\testzlib.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"zlibvc.vcxproj\">\n      <Project>{8fd826f8-3739-44e6-8cc8-997122e53b8d}</Project>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"Source Files\">\n      <UniqueIdentifier>{fa61a89f-93fc-4c89-b29e-36224b7592f4}</UniqueIdentifier>\n      <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm</Extensions>\n    </Filter>\n    <Filter Include=\"Header Files\">\n      <UniqueIdentifier>{d4b85da0-2ba2-4934-b57f-e2584e3848ee}</UniqueIdentifier>\n      <Extensions>h;hpp;hxx;hm;inl;inc</Extensions>\n    </Filter>\n    <Filter Include=\"Resource Files\">\n      <UniqueIdentifier>{e573e075-00bd-4a7d-bd67-a8cc9bfc5aca}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\..\\testzlib\\testzlib.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.user",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n</Project>"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc10/zlib.rc",
    "content": "#include <windows.h>\n\n#define IDR_VERSION1  1\nIDR_VERSION1\tVERSIONINFO\tMOVEABLE IMPURE LOADONCALL DISCARDABLE\n  FILEVERSION\t 1,2,5,0\n  PRODUCTVERSION 1,2,5,0\n  FILEFLAGSMASK\tVS_FFI_FILEFLAGSMASK\n  FILEFLAGS\t0\n  FILEOS\tVOS_DOS_WINDOWS32\n  FILETYPE\tVFT_DLL\n  FILESUBTYPE\t0\t// not used\nBEGIN\n  BLOCK \"StringFileInfo\"\n  BEGIN\n    BLOCK \"040904E4\"\n    //language ID = U.S. English, char set = Windows, Multilingual\n\n    BEGIN\n      VALUE \"FileDescription\", \"zlib data compression and ZIP file I/O library\\0\"\n      VALUE \"FileVersion\",\t\"1.2.5\\0\"\n      VALUE \"InternalName\",\t\"zlib\\0\"\n      VALUE \"OriginalFilename\",\t\"zlib.dll\\0\"\n      VALUE \"ProductName\",\t\"ZLib.DLL\\0\"\n      VALUE \"Comments\",\"DLL support by Alessandro Iacopetti & Gilles Vollant\\0\"\n      VALUE \"LegalCopyright\", \"(C) 1995-2010 Jean-loup Gailly & Mark Adler\\0\"\n    END\n  END\n  BLOCK \"VarFileInfo\"\n  BEGIN\n    VALUE \"Translation\", 0x0409, 1252\n  END\nEND\n"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc10/zlibstat.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Itanium\">\n      <Configuration>Debug</Configuration>\n      <Platform>Itanium</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"ReleaseWithoutAsm|Itanium\">\n      <Configuration>ReleaseWithoutAsm</Configuration>\n      <Platform>Itanium</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"ReleaseWithoutAsm|Win32\">\n      <Configuration>ReleaseWithoutAsm</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"ReleaseWithoutAsm|x64\">\n      <Configuration>ReleaseWithoutAsm</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Itanium\">\n      <Configuration>Release</Configuration>\n      <Platform>Itanium</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseOfMfc>false</UseOfMfc>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseOfMfc>false</UseOfMfc>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseOfMfc>false</UseOfMfc>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseOfMfc>false</UseOfMfc>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseOfMfc>false</UseOfMfc>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseOfMfc>false</UseOfMfc>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseOfMfc>false</UseOfMfc>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseOfMfc>false</UseOfMfc>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseOfMfc>false</UseOfMfc>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">x86\\ZlibStat$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">x86\\ZlibStat$(Configuration)\\Tmp\\</IntDir>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">x86\\ZlibStat$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">x86\\ZlibStat$(Configuration)\\Tmp\\</IntDir>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\">x86\\ZlibStat$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\">x86\\ZlibStat$(Configuration)\\Tmp\\</IntDir>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">x64\\ZlibStat$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">x64\\ZlibStat$(Configuration)\\Tmp\\</IntDir>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">ia64\\ZlibStat$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">ia64\\ZlibStat$(Configuration)\\Tmp\\</IntDir>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">x64\\ZlibStat$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">x64\\ZlibStat$(Configuration)\\Tmp\\</IntDir>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">ia64\\ZlibStat$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">ia64\\ZlibStat$(Configuration)\\Tmp\\</IntDir>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\">x64\\ZlibStat$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\">x64\\ZlibStat$(Configuration)\\Tmp\\</IntDir>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\">ia64\\ZlibStat$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\">ia64\\ZlibStat$(Configuration)\\Tmp\\</IntDir>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <ObjectFileName>$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>\n      <WarningLevel>Level3</WarningLevel>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <DebugInformationFormat>OldStyle</DebugInformationFormat>\n    </ClCompile>\n    <ResourceCompile>\n      <Culture>0x040c</Culture>\n    </ResourceCompile>\n    <Lib>\n      <AdditionalOptions>/MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)zlibstat.lib</OutputFile>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n    </Lib>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <ObjectFileName>$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>\n      <WarningLevel>Level3</WarningLevel>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n    </ClCompile>\n    <ResourceCompile>\n      <Culture>0x040c</Culture>\n    </ResourceCompile>\n    <Lib>\n      <AdditionalOptions>/MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalDependencies>..\\..\\masmx86\\match686.obj;..\\..\\masmx86\\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)zlibstat.lib</OutputFile>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n    </Lib>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\">\n    <ClCompile>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <ObjectFileName>$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>\n      <WarningLevel>Level3</WarningLevel>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n    </ClCompile>\n    <ResourceCompile>\n      <Culture>0x040c</Culture>\n    </ResourceCompile>\n    <Lib>\n      <AdditionalOptions>/MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)zlibstat.lib</OutputFile>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n    </Lib>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <ObjectFileName>$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>\n      <WarningLevel>Level3</WarningLevel>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <DebugInformationFormat>OldStyle</DebugInformationFormat>\n    </ClCompile>\n    <ResourceCompile>\n      <Culture>0x040c</Culture>\n    </ResourceCompile>\n    <Lib>\n      <AdditionalOptions>/MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)zlibstat.lib</OutputFile>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n    </Lib>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">\n    <Midl>\n      <TargetEnvironment>Itanium</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <ObjectFileName>$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>\n      <WarningLevel>Level3</WarningLevel>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <DebugInformationFormat>OldStyle</DebugInformationFormat>\n    </ClCompile>\n    <ResourceCompile>\n      <Culture>0x040c</Culture>\n    </ResourceCompile>\n    <Lib>\n      <AdditionalOptions>/MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)zlibstat.lib</OutputFile>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n    </Lib>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <ObjectFileName>$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>\n      <WarningLevel>Level3</WarningLevel>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n    </ClCompile>\n    <ResourceCompile>\n      <Culture>0x040c</Culture>\n    </ResourceCompile>\n    <Lib>\n      <AdditionalOptions>/MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalDependencies>..\\..\\masmx64\\gvmat64.obj;..\\..\\masmx64\\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)zlibstat.lib</OutputFile>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n    </Lib>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">\n    <Midl>\n      <TargetEnvironment>Itanium</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <ObjectFileName>$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>\n      <WarningLevel>Level3</WarningLevel>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n    </ClCompile>\n    <ResourceCompile>\n      <Culture>0x040c</Culture>\n    </ResourceCompile>\n    <Lib>\n      <AdditionalOptions>/MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)zlibstat.lib</OutputFile>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n    </Lib>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <ObjectFileName>$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>\n      <WarningLevel>Level3</WarningLevel>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n    </ClCompile>\n    <ResourceCompile>\n      <Culture>0x040c</Culture>\n    </ResourceCompile>\n    <Lib>\n      <AdditionalOptions>/MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)zlibstat.lib</OutputFile>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n    </Lib>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\">\n    <Midl>\n      <TargetEnvironment>Itanium</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <ObjectFileName>$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>\n      <WarningLevel>Level3</WarningLevel>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n    </ClCompile>\n    <ResourceCompile>\n      <Culture>0x040c</Culture>\n    </ResourceCompile>\n    <Lib>\n      <AdditionalOptions>/MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)zlibstat.lib</OutputFile>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n    </Lib>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\..\\..\\adler32.c\" />\n    <ClCompile Include=\"..\\..\\..\\compress.c\" />\n    <ClCompile Include=\"..\\..\\..\\crc32.c\" />\n    <ClCompile Include=\"..\\..\\..\\deflate.c\" />\n    <ClCompile Include=\"..\\..\\..\\gzclose.c\" />\n    <ClCompile Include=\"..\\..\\..\\gzlib.c\" />\n    <ClCompile Include=\"..\\..\\..\\gzread.c\" />\n    <ClCompile Include=\"..\\..\\..\\gzwrite.c\" />\n    <ClCompile Include=\"..\\..\\..\\infback.c\" />\n    <ClCompile Include=\"..\\..\\masmx64\\inffas8664.c\">\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">true</ExcludedFromBuild>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\inffast.c\" />\n    <ClCompile Include=\"..\\..\\..\\inflate.c\" />\n    <ClCompile Include=\"..\\..\\..\\inftrees.c\" />\n    <ClCompile Include=\"..\\..\\minizip\\ioapi.c\" />\n    <ClCompile Include=\"..\\..\\..\\trees.c\" />\n    <ClCompile Include=\"..\\..\\..\\uncompr.c\" />\n    <ClCompile Include=\"..\\..\\minizip\\unzip.c\" />\n    <ClCompile Include=\"..\\..\\minizip\\zip.c\" />\n    <ClCompile Include=\"..\\..\\..\\zutil.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"zlib.rc\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"zlibvc.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"Source Files\">\n      <UniqueIdentifier>{174213f6-7f66-4ae8-a3a8-a1e0a1e6ffdd}</UniqueIdentifier>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\..\\..\\adler32.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\compress.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\crc32.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\deflate.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\gzclose.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\gzlib.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\gzread.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\gzwrite.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\infback.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\masmx64\\inffas8664.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\inffast.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\inflate.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\inftrees.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\minizip\\ioapi.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\trees.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\uncompr.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\minizip\\unzip.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\minizip\\zip.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\zutil.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"zlib.rc\">\n      <Filter>Source Files</Filter>\n    </ResourceCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"zlibvc.def\">\n      <Filter>Source Files</Filter>\n    </None>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.user",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n</Project>"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc10/zlibvc.def",
    "content": "LIBRARY\n; zlib data compression and ZIP file I/O library\n\nVERSION\t\t1.24\n\nEXPORTS\n        adler32                                  @1\n        compress                                 @2\n        crc32                                    @3\n        deflate                                  @4\n        deflateCopy                              @5\n        deflateEnd                               @6\n        deflateInit2_                            @7\n        deflateInit_                             @8\n        deflateParams                            @9\n        deflateReset                             @10\n        deflateSetDictionary                     @11\n        gzclose                                  @12\n        gzdopen                                  @13\n        gzerror                                  @14\n        gzflush                                  @15\n        gzopen                                   @16\n        gzread                                   @17\n        gzwrite                                  @18\n        inflate                                  @19\n        inflateEnd                               @20\n        inflateInit2_                            @21\n        inflateInit_                             @22\n        inflateReset                             @23\n        inflateSetDictionary                     @24\n        inflateSync                              @25\n        uncompress                               @26\n        zlibVersion                              @27\n        gzprintf                                 @28\n        gzputc                                   @29\n        gzgetc                                   @30\n        gzseek                                   @31\n        gzrewind                                 @32\n        gztell                                   @33\n        gzeof                                    @34\n        gzsetparams                              @35\n        zError                                   @36\n        inflateSyncPoint                         @37\n        get_crc_table                            @38\n        compress2                                @39\n        gzputs                                   @40\n        gzgets                                   @41\n        inflateCopy                              @42\n        inflateBackInit_                         @43\n        inflateBack                              @44\n        inflateBackEnd                           @45\n        compressBound                            @46\n        deflateBound                             @47\n        gzclearerr                               @48\n        gzungetc                                 @49\n        zlibCompileFlags                         @50\n        deflatePrime                             @51\n\n        unzOpen                                  @61\n        unzClose                                 @62\n        unzGetGlobalInfo                         @63\n        unzGetCurrentFileInfo                    @64\n        unzGoToFirstFile                         @65\n        unzGoToNextFile                          @66\n        unzOpenCurrentFile                       @67\n        unzReadCurrentFile                       @68\n        unzOpenCurrentFile3                      @69\n        unztell                                  @70\n        unzeof                                   @71\n        unzCloseCurrentFile                      @72\n        unzGetGlobalComment                      @73\n        unzStringFileNameCompare                 @74\n        unzLocateFile                            @75\n        unzGetLocalExtrafield                    @76\n        unzOpen2                                 @77\n        unzOpenCurrentFile2                      @78\n        unzOpenCurrentFilePassword               @79\n\n        zipOpen                                  @80\n        zipOpenNewFileInZip                      @81\n        zipWriteInFileInZip                      @82\n        zipCloseFileInZip                        @83\n        zipClose                                 @84\n        zipOpenNewFileInZip2                     @86\n        zipCloseFileInZipRaw                     @87\n        zipOpen2                                 @88\n        zipOpenNewFileInZip3                     @89\n\n        unzGetFilePos                            @100\n        unzGoToFilePos                           @101\n\n        fill_win32_filefunc                      @110\n\n; zlibwapi v1.2.4 added:\n        fill_win32_filefunc64                   @111\n        fill_win32_filefunc64A                  @112\n        fill_win32_filefunc64W                  @113\n\n        unzOpen64                               @120\n        unzOpen2_64                             @121\n        unzGetGlobalInfo64                      @122\n        unzGetCurrentFileInfo64                 @124\n        unzGetCurrentFileZStreamPos64           @125\n        unztell64                               @126\n        unzGetFilePos64                         @127\n        unzGoToFilePos64                        @128\n\n        zipOpen64                               @130\n        zipOpen2_64                             @131\n        zipOpenNewFileInZip64                   @132\n        zipOpenNewFileInZip2_64                 @133\n        zipOpenNewFileInZip3_64                 @134\n        zipOpenNewFileInZip4_64                 @135\n        zipCloseFileInZipRaw64                  @136\n\n; zlib1 v1.2.4 added:\n        adler32_combine                         @140\n        crc32_combine                           @142\n        deflateSetHeader                        @144\n        deflateTune                             @145\n        gzbuffer                                @146\n        gzclose_r                               @147\n        gzclose_w                               @148\n        gzdirect                                @149\n        gzoffset                                @150\n        inflateGetHeader                        @156\n        inflateMark                             @157\n        inflatePrime                            @158\n        inflateReset2                           @159\n        inflateUndermine                        @160\n"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc10/zlibvc.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 11.00\n# Visual Studio 2010\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"zlibvc\", \"zlibvc.vcxproj\", \"{8FD826F8-3739-44E6-8CC8-997122E53B8D}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"zlibstat\", \"zlibstat.vcxproj\", \"{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"testzlib\", \"testzlib.vcxproj\", \"{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"testzlibdll\", \"testzlibdll.vcxproj\", \"{C52F9E7B-498A-42BE-8DB4-85A15694366A}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"minizip\", \"minizip.vcxproj\", \"{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"miniunz\", \"miniunz.vcxproj\", \"{C52F9E7B-498A-42BE-8DB4-85A15694382A}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Itanium = Debug|Itanium\n\t\tDebug|Win32 = Debug|Win32\n\t\tDebug|x64 = Debug|x64\n\t\tRelease|Itanium = Release|Itanium\n\t\tRelease|Win32 = Release|Win32\n\t\tRelease|x64 = Release|x64\n\t\tReleaseWithoutAsm|Itanium = ReleaseWithoutAsm|Itanium\n\t\tReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32\n\t\tReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.ActiveCfg = Debug|Itanium\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.Build.0 = Debug|Itanium\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.Build.0 = Debug|x64\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.ActiveCfg = Release|Itanium\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.Build.0 = Release|Itanium\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = Release|x64\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = Release|x64\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.ActiveCfg = Debug|Itanium\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.Build.0 = Debug|Itanium\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.Build.0 = Debug|x64\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.ActiveCfg = Release|Itanium\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.Build.0 = Release|Itanium\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.Build.0 = Release|Win32\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.ActiveCfg = Release|x64\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.Build.0 = Release|x64\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.ActiveCfg = Debug|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.Build.0 = Debug|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.Build.0 = Debug|x64\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.ActiveCfg = Release|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.Build.0 = Release|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.Build.0 = Release|Win32\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.ActiveCfg = Release|x64\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.ActiveCfg = Debug|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.Build.0 = Debug|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.Build.0 = Debug|x64\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.ActiveCfg = Release|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.Build.0 = Release|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.Build.0 = Release|Win32\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.ActiveCfg = Release|x64\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc10/zlibvc.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Itanium\">\n      <Configuration>Debug</Configuration>\n      <Platform>Itanium</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"ReleaseWithoutAsm|Itanium\">\n      <Configuration>ReleaseWithoutAsm</Configuration>\n      <Platform>Itanium</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"ReleaseWithoutAsm|Win32\">\n      <Configuration>ReleaseWithoutAsm</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"ReleaseWithoutAsm|x64\">\n      <Configuration>ReleaseWithoutAsm</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Itanium\">\n      <Configuration>Release</Configuration>\n      <Platform>Itanium</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{8FD826F8-3739-44E6-8CC8-997122E53B8D}</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseOfMfc>false</UseOfMfc>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseOfMfc>false</UseOfMfc>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseOfMfc>false</UseOfMfc>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseOfMfc>false</UseOfMfc>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseOfMfc>false</UseOfMfc>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseOfMfc>false</UseOfMfc>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseOfMfc>false</UseOfMfc>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseOfMfc>false</UseOfMfc>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseOfMfc>false</UseOfMfc>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">x86\\ZlibDll$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">x86\\ZlibDll$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\">x86\\ZlibDll$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\">x86\\ZlibDll$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\">false</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">x86\\ZlibDll$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">x86\\ZlibDll$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">x64\\ZlibDll$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">x64\\ZlibDll$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">true</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">ia64\\ZlibDll$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">ia64\\ZlibDll$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">true</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\">x64\\ZlibDll$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\">x64\\ZlibDll$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\">false</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\">ia64\\ZlibDll$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\">ia64\\ZlibDll$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\">false</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">x64\\ZlibDll$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">x64\\ZlibDll$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</GenerateManifest>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">ia64\\ZlibDll$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">ia64\\ZlibDll$(Configuration)\\Tmp\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">false</LinkIncremental>\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">false</GenerateManifest>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Midl>\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MkTypLibCompatible>true</MkTypLibCompatible>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <TargetEnvironment>Win32</TargetEnvironment>\n      <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <ObjectFileName>$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>\n      <BrowseInformation>\n      </BrowseInformation>\n      <WarningLevel>Level3</WarningLevel>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\n    </ClCompile>\n    <ResourceCompile>\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <Culture>0x040c</Culture>\n    </ResourceCompile>\n    <Link>\n      <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalDependencies>..\\..\\masmx86\\match686.obj;..\\..\\masmx86\\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <ModuleDefinitionFile>.\\zlibvc.def</ModuleDefinitionFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>\n      <GenerateMapFile>true</GenerateMapFile>\n      <MapFileName>$(OutDir)zlibwapi.map</MapFileName>\n      <SubSystem>Windows</SubSystem>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\">\n    <Midl>\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MkTypLibCompatible>true</MkTypLibCompatible>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <TargetEnvironment>Win32</TargetEnvironment>\n      <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>\n    </Midl>\n    <ClCompile>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>\n      <AssemblerOutput>All</AssemblerOutput>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <ObjectFileName>$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>\n      <BrowseInformation>\n      </BrowseInformation>\n      <WarningLevel>Level3</WarningLevel>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n    </ClCompile>\n    <ResourceCompile>\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <Culture>0x040c</Culture>\n    </ResourceCompile>\n    <Link>\n      <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>\n      <ModuleDefinitionFile>.\\zlibvc.def</ModuleDefinitionFile>\n      <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>\n      <GenerateMapFile>true</GenerateMapFile>\n      <MapFileName>$(OutDir)zlibwapi.map</MapFileName>\n      <SubSystem>Windows</SubSystem>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Midl>\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MkTypLibCompatible>true</MkTypLibCompatible>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <TargetEnvironment>Win32</TargetEnvironment>\n      <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>\n    </Midl>\n    <ClCompile>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>\n      <AssemblerOutput>All</AssemblerOutput>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <ObjectFileName>$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>\n      <BrowseInformation>\n      </BrowseInformation>\n      <WarningLevel>Level3</WarningLevel>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n    </ClCompile>\n    <ResourceCompile>\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <Culture>0x040c</Culture>\n    </ResourceCompile>\n    <Link>\n      <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalDependencies>..\\..\\masmx86\\match686.obj;..\\..\\masmx86\\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>\n      <ModuleDefinitionFile>.\\zlibvc.def</ModuleDefinitionFile>\n      <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>\n      <GenerateMapFile>true</GenerateMapFile>\n      <MapFileName>$(OutDir)zlibwapi.map</MapFileName>\n      <SubSystem>Windows</SubSystem>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MkTypLibCompatible>true</MkTypLibCompatible>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <TargetEnvironment>X64</TargetEnvironment>\n      <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <ObjectFileName>$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>\n      <BrowseInformation>\n      </BrowseInformation>\n      <WarningLevel>Level3</WarningLevel>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <ResourceCompile>\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <Culture>0x040c</Culture>\n    </ResourceCompile>\n    <Link>\n      <AdditionalDependencies>..\\..\\masmx64\\gvmat64.obj;..\\..\\masmx64\\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <ModuleDefinitionFile>.\\zlibvc.def</ModuleDefinitionFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>\n      <GenerateMapFile>true</GenerateMapFile>\n      <MapFileName>$(OutDir)zlibwapi.map</MapFileName>\n      <SubSystem>Windows</SubSystem>\n      <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>\n      <TargetMachine>MachineX64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">\n    <Midl>\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MkTypLibCompatible>true</MkTypLibCompatible>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <TargetEnvironment>Itanium</TargetEnvironment>\n      <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <ObjectFileName>$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>\n      <BrowseInformation>\n      </BrowseInformation>\n      <WarningLevel>Level3</WarningLevel>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <ResourceCompile>\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <Culture>0x040c</Culture>\n    </ResourceCompile>\n    <Link>\n      <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <ModuleDefinitionFile>.\\zlibvc.def</ModuleDefinitionFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>\n      <GenerateMapFile>true</GenerateMapFile>\n      <MapFileName>$(OutDir)zlibwapi.map</MapFileName>\n      <SubSystem>Windows</SubSystem>\n      <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>\n      <TargetMachine>MachineIA64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'\">\n    <Midl>\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MkTypLibCompatible>true</MkTypLibCompatible>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <TargetEnvironment>X64</TargetEnvironment>\n      <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>\n    </Midl>\n    <ClCompile>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>\n      <AssemblerOutput>All</AssemblerOutput>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <ObjectFileName>$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>\n      <BrowseInformation>\n      </BrowseInformation>\n      <WarningLevel>Level3</WarningLevel>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n    </ClCompile>\n    <ResourceCompile>\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <Culture>0x040c</Culture>\n    </ResourceCompile>\n    <Link>\n      <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>\n      <ModuleDefinitionFile>.\\zlibvc.def</ModuleDefinitionFile>\n      <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>\n      <GenerateMapFile>true</GenerateMapFile>\n      <MapFileName>$(OutDir)zlibwapi.map</MapFileName>\n      <SubSystem>Windows</SubSystem>\n      <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>\n      <TargetMachine>MachineX64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\">\n    <Midl>\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MkTypLibCompatible>true</MkTypLibCompatible>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <TargetEnvironment>Itanium</TargetEnvironment>\n      <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>\n    </Midl>\n    <ClCompile>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>\n      <AssemblerOutput>All</AssemblerOutput>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <ObjectFileName>$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>\n      <BrowseInformation>\n      </BrowseInformation>\n      <WarningLevel>Level3</WarningLevel>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n    </ClCompile>\n    <ResourceCompile>\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <Culture>0x040c</Culture>\n    </ResourceCompile>\n    <Link>\n      <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>\n      <ModuleDefinitionFile>.\\zlibvc.def</ModuleDefinitionFile>\n      <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>\n      <GenerateMapFile>true</GenerateMapFile>\n      <MapFileName>$(OutDir)zlibwapi.map</MapFileName>\n      <SubSystem>Windows</SubSystem>\n      <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>\n      <TargetMachine>MachineIA64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MkTypLibCompatible>true</MkTypLibCompatible>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <TargetEnvironment>X64</TargetEnvironment>\n      <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>\n    </Midl>\n    <ClCompile>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>\n      <AssemblerOutput>All</AssemblerOutput>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <ObjectFileName>$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>\n      <BrowseInformation>\n      </BrowseInformation>\n      <WarningLevel>Level3</WarningLevel>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n    </ClCompile>\n    <ResourceCompile>\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <Culture>0x040c</Culture>\n    </ResourceCompile>\n    <Link>\n      <AdditionalDependencies>..\\..\\masmx64\\gvmat64.obj;..\\..\\masmx64\\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>\n      <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>\n      <ModuleDefinitionFile>.\\zlibvc.def</ModuleDefinitionFile>\n      <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>\n      <GenerateMapFile>true</GenerateMapFile>\n      <MapFileName>$(OutDir)zlibwapi.map</MapFileName>\n      <SubSystem>Windows</SubSystem>\n      <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>\n      <TargetMachine>MachineX64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">\n    <Midl>\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MkTypLibCompatible>true</MkTypLibCompatible>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <TargetEnvironment>Itanium</TargetEnvironment>\n      <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>\n    </Midl>\n    <ClCompile>\n      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n      <AdditionalIncludeDirectories>..\\..\\..;..\\..\\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <StringPooling>true</StringPooling>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <BufferSecurityCheck>false</BufferSecurityCheck>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>\n      <AssemblerOutput>All</AssemblerOutput>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <ObjectFileName>$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>\n      <BrowseInformation>\n      </BrowseInformation>\n      <WarningLevel>Level3</WarningLevel>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n    </ClCompile>\n    <ResourceCompile>\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <Culture>0x040c</Culture>\n    </ResourceCompile>\n    <Link>\n      <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>\n      <ModuleDefinitionFile>.\\zlibvc.def</ModuleDefinitionFile>\n      <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>\n      <GenerateMapFile>true</GenerateMapFile>\n      <MapFileName>$(OutDir)zlibwapi.map</MapFileName>\n      <SubSystem>Windows</SubSystem>\n      <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>\n      <TargetMachine>MachineIA64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\..\\..\\adler32.c\" />\n    <ClCompile Include=\"..\\..\\..\\compress.c\" />\n    <ClCompile Include=\"..\\..\\..\\crc32.c\" />\n    <ClCompile Include=\"..\\..\\..\\deflate.c\" />\n    <ClCompile Include=\"..\\..\\..\\gzclose.c\" />\n    <ClCompile Include=\"..\\..\\..\\gzlib.c\" />\n    <ClCompile Include=\"..\\..\\..\\gzread.c\" />\n    <ClCompile Include=\"..\\..\\..\\gzwrite.c\" />\n    <ClCompile Include=\"..\\..\\..\\infback.c\" />\n    <ClCompile Include=\"..\\..\\masmx64\\inffas8664.c\">\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|Itanium'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">true</ExcludedFromBuild>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\inffast.c\" />\n    <ClCompile Include=\"..\\..\\..\\inflate.c\" />\n    <ClCompile Include=\"..\\..\\..\\inftrees.c\" />\n    <ClCompile Include=\"..\\..\\minizip\\ioapi.c\" />\n    <ClCompile Include=\"..\\..\\minizip\\iowin32.c\" />\n    <ClCompile Include=\"..\\..\\..\\trees.c\" />\n    <ClCompile Include=\"..\\..\\..\\uncompr.c\" />\n    <ClCompile Include=\"..\\..\\minizip\\unzip.c\">\n      <AdditionalIncludeDirectories Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\minizip\\zip.c\">\n      <AdditionalIncludeDirectories Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Release|Itanium'\">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\zutil.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"zlib.rc\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"zlibvc.def\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\..\\..\\deflate.h\" />\n    <ClInclude Include=\"..\\..\\..\\infblock.h\" />\n    <ClInclude Include=\"..\\..\\..\\infcodes.h\" />\n    <ClInclude Include=\"..\\..\\..\\inffast.h\" />\n    <ClInclude Include=\"..\\..\\..\\inftrees.h\" />\n    <ClInclude Include=\"..\\..\\..\\infutil.h\" />\n    <ClInclude Include=\"..\\..\\..\\zconf.h\" />\n    <ClInclude Include=\"..\\..\\..\\zlib.h\" />\n    <ClInclude Include=\"..\\..\\..\\zutil.h\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"Source Files\">\n      <UniqueIdentifier>{07934a85-8b61-443d-a0ee-b2eedb74f3cd}</UniqueIdentifier>\n      <Extensions>cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90</Extensions>\n    </Filter>\n    <Filter Include=\"Header Files\">\n      <UniqueIdentifier>{1d99675b-433d-4a21-9e50-ed4ab8b19762}</UniqueIdentifier>\n      <Extensions>h;hpp;hxx;hm;inl;fi;fd</Extensions>\n    </Filter>\n    <Filter Include=\"Resource Files\">\n      <UniqueIdentifier>{431c0958-fa71-44d0-9084-2d19d100c0cc}</UniqueIdentifier>\n      <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\..\\..\\adler32.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\compress.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\crc32.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\deflate.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\gzclose.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\gzlib.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\gzread.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\gzwrite.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\infback.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\masmx64\\inffas8664.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\inffast.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\inflate.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\inftrees.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\minizip\\ioapi.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\minizip\\iowin32.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\trees.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\uncompr.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\minizip\\unzip.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\minizip\\zip.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\zutil.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"zlib.rc\">\n      <Filter>Source Files</Filter>\n    </ResourceCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"zlibvc.def\">\n      <Filter>Source Files</Filter>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\..\\..\\deflate.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\..\\infblock.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\..\\infcodes.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\..\\inffast.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\..\\inftrees.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\..\\infutil.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\..\\zconf.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\..\\zlib.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"..\\..\\..\\zutil.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.user",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n</Project>"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc9/miniunz.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"miniunz\"\n\tProjectGUID=\"{C52F9E7B-498A-42BE-8DB4-85A15694382A}\"\n\tKeyword=\"Win32Proj\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"x64\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Itanium\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\"x86\\MiniUnzip$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x86\\MiniUnzip$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\minizip\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"x86\\ZlibDllDebug\\zlibwapi.lib\"\n\t\t\t\tOutputFile=\"$(OutDir)/miniunz.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/miniunz.pdb\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\"x86\\MiniUnzip$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x86\\MiniUnzip$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tOmitFramePointers=\"true\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\minizip\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"x86\\ZlibDllRelease\\zlibwapi.lib\"\n\t\t\t\tOutputFile=\"$(OutDir)/miniunz.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tOptimizeForWindows98=\"1\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|x64\"\n\t\t\tOutputDirectory=\"x64\\MiniUnzip$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x64\\MiniUnzip$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tTargetEnvironment=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\minizip\"\n\t\t\t\tPreprocessorDefinitions=\"_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"3\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"x64\\ZlibDllDebug\\zlibwapi.lib\"\n\t\t\t\tOutputFile=\"$(OutDir)/miniunz.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/miniunz.pdb\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tTargetMachine=\"17\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Itanium\"\n\t\t\tOutputDirectory=\"ia64\\MiniUnzip$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"ia64\\MiniUnzip$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tTargetEnvironment=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\minizip\"\n\t\t\t\tPreprocessorDefinitions=\"_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"3\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"ia64\\ZlibDllDebug\\zlibwapi.lib\"\n\t\t\t\tOutputFile=\"$(OutDir)/miniunz.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/miniunz.pdb\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tTargetMachine=\"5\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|x64\"\n\t\t\tOutputDirectory=\"x64\\MiniUnzip$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x64\\MiniUnzip$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tTargetEnvironment=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tOmitFramePointers=\"true\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\minizip\"\n\t\t\t\tPreprocessorDefinitions=\"_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"x64\\ZlibDllRelease\\zlibwapi.lib\"\n\t\t\t\tOutputFile=\"$(OutDir)/miniunz.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tOptimizeForWindows98=\"1\"\n\t\t\t\tTargetMachine=\"17\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Itanium\"\n\t\t\tOutputDirectory=\"ia64\\MiniUnzip$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"ia64\\MiniUnzip$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tTargetEnvironment=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tOmitFramePointers=\"true\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\minizip\"\n\t\t\t\tPreprocessorDefinitions=\"_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"ia64\\ZlibDllRelease\\zlibwapi.lib\"\n\t\t\t\tOutputFile=\"$(OutDir)/miniunz.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tOptimizeForWindows98=\"1\"\n\t\t\t\tTargetMachine=\"5\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;def;odl;idl;hpj;bat;asm\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\minizip\\miniunz.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl;inc\"\n\t\t\t>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc9/minizip.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"minizip\"\n\tProjectGUID=\"{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}\"\n\tKeyword=\"Win32Proj\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"x64\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Itanium\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\"x86\\MiniZip$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x86\\MiniZip$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\minizip\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"x86\\ZlibDllDebug\\zlibwapi.lib\"\n\t\t\t\tOutputFile=\"$(OutDir)/minizip.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/minizip.pdb\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\"x86\\MiniZip$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x86\\MiniZip$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tOmitFramePointers=\"true\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\minizip\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"x86\\ZlibDllRelease\\zlibwapi.lib\"\n\t\t\t\tOutputFile=\"$(OutDir)/minizip.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tOptimizeForWindows98=\"1\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|x64\"\n\t\t\tOutputDirectory=\"x64\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x64\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tTargetEnvironment=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\minizip\"\n\t\t\t\tPreprocessorDefinitions=\"_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"3\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"x64\\ZlibDllDebug\\zlibwapi.lib\"\n\t\t\t\tOutputFile=\"$(OutDir)/minizip.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/minizip.pdb\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tTargetMachine=\"17\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Itanium\"\n\t\t\tOutputDirectory=\"ia64\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"ia64\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tTargetEnvironment=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\minizip\"\n\t\t\t\tPreprocessorDefinitions=\"_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"3\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"ia64\\ZlibDllDebug\\zlibwapi.lib\"\n\t\t\t\tOutputFile=\"$(OutDir)/minizip.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/minizip.pdb\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tTargetMachine=\"5\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|x64\"\n\t\t\tOutputDirectory=\"x64\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x64\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tTargetEnvironment=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tOmitFramePointers=\"true\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\minizip\"\n\t\t\t\tPreprocessorDefinitions=\"_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"x64\\ZlibDllRelease\\zlibwapi.lib\"\n\t\t\t\tOutputFile=\"$(OutDir)/minizip.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tOptimizeForWindows98=\"1\"\n\t\t\t\tTargetMachine=\"17\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Itanium\"\n\t\t\tOutputDirectory=\"ia64\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"ia64\\$(ConfigurationName)\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tTargetEnvironment=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tOmitFramePointers=\"true\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\minizip\"\n\t\t\t\tPreprocessorDefinitions=\"_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"ia64\\ZlibDllRelease\\zlibwapi.lib\"\n\t\t\t\tOutputFile=\"$(OutDir)/minizip.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tOptimizeForWindows98=\"1\"\n\t\t\t\tTargetMachine=\"5\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;def;odl;idl;hpj;bat;asm\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\minizip\\minizip.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl;inc\"\n\t\t\t>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc9/testzlib.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9,00\"\n\tName=\"testzlib\"\n\tProjectGUID=\"{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}\"\n\tRootNamespace=\"testzlib\"\n\tKeyword=\"Win32Proj\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"x64\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Itanium\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\"x86\\TestZlib$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x86\\TestZlib$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..\"\n\t\t\t\tPreprocessorDefinitions=\"ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerOutput=\"4\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"..\\..\\masmx86\\match686.obj ..\\..\\masmx86\\inffas32.obj\"\n\t\t\t\tOutputFile=\"$(OutDir)/testzlib.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/testzlib.pdb\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|x64\"\n\t\t\tOutputDirectory=\"x64\\TestZlib$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x64\\TestZlib$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..\"\n\t\t\t\tPreprocessorDefinitions=\"ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"3\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"..\\..\\masmx64\\gvmat64.obj ..\\..\\masmx64\\inffasx64.obj\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Itanium\"\n\t\t\tOutputDirectory=\"ia64\\TestZlib$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"ia64\\TestZlib$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tTargetEnvironment=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..\"\n\t\t\t\tPreprocessorDefinitions=\"ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"3\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerOutput=\"4\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tOutputFile=\"$(OutDir)/testzlib.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/testzlib.pdb\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tTargetMachine=\"5\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"ReleaseWithoutAsm|Win32\"\n\t\t\tOutputDirectory=\"x86\\TestZlib$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x86\\TestZlib$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"2\"\n\t\t\tWholeProgramOptimization=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tOmitFramePointers=\"true\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tOutputFile=\"$(OutDir)/testzlib.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tOptimizeForWindows98=\"1\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"ReleaseWithoutAsm|x64\"\n\t\t\tOutputDirectory=\"x64\\TestZlib$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x64\\TestZlib$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tWholeProgramOptimization=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"ReleaseWithoutAsm|Itanium\"\n\t\t\tOutputDirectory=\"ia64\\TestZlib$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"ia64\\TestZlib$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"2\"\n\t\t\tWholeProgramOptimization=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tTargetEnvironment=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tOmitFramePointers=\"true\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..\"\n\t\t\t\tPreprocessorDefinitions=\"ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tOutputFile=\"$(OutDir)/testzlib.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tOptimizeForWindows98=\"1\"\n\t\t\t\tTargetMachine=\"5\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\"x86\\TestZlib$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x86\\TestZlib$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"2\"\n\t\t\tWholeProgramOptimization=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tOmitFramePointers=\"true\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..\"\n\t\t\t\tPreprocessorDefinitions=\"ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"..\\..\\masmx86\\match686.obj ..\\..\\masmx86\\inffas32.obj\"\n\t\t\t\tOutputFile=\"$(OutDir)/testzlib.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tOptimizeForWindows98=\"1\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|x64\"\n\t\t\tOutputDirectory=\"x64\\TestZlib$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x64\\TestZlib$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tWholeProgramOptimization=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..\"\n\t\t\t\tPreprocessorDefinitions=\"ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"..\\..\\masmx64\\gvmat64.obj ..\\..\\masmx64\\inffasx64.obj\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Itanium\"\n\t\t\tOutputDirectory=\"ia64\\TestZlib$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"ia64\\TestZlib$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tCharacterSet=\"2\"\n\t\t\tWholeProgramOptimization=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tTargetEnvironment=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tOmitFramePointers=\"true\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..\"\n\t\t\t\tPreprocessorDefinitions=\"ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tOutputFile=\"$(OutDir)/testzlib.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tOptimizeForWindows98=\"1\"\n\t\t\t\tTargetMachine=\"5\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;def;odl;idl;hpj;bat;asm\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\adler32.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\compress.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\crc32.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\deflate.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\infback.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\masmx64\\inffas8664.c\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Itanium\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"ReleaseWithoutAsm|Win32\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"ReleaseWithoutAsm|Itanium\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Itanium\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\inffast.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\inflate.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\inftrees.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\testzlib\\testzlib.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\trees.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\uncompr.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\zutil.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl;inc\"\n\t\t\t>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc9/testzlibdll.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"TestZlibDll\"\n\tProjectGUID=\"{C52F9E7B-498A-42BE-8DB4-85A15694366A}\"\n\tKeyword=\"Win32Proj\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"x64\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Itanium\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\"x86\\TestZlibDll$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x86\\TestZlibDll$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\minizip\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"x86\\ZlibDllDebug\\zlibwapi.lib\"\n\t\t\t\tOutputFile=\"$(OutDir)/testzlib.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/testzlib.pdb\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\"x86\\TestZlibDll$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x86\\TestZlibDll$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tOmitFramePointers=\"true\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\minizip\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"x86\\ZlibDllRelease\\zlibwapi.lib\"\n\t\t\t\tOutputFile=\"$(OutDir)/testzlib.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tOptimizeForWindows98=\"1\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|x64\"\n\t\t\tOutputDirectory=\"x64\\TestZlibDll$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x64\\TestZlibDll$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tTargetEnvironment=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\minizip\"\n\t\t\t\tPreprocessorDefinitions=\"_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"3\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"x64\\ZlibDllDebug\\zlibwapi.lib\"\n\t\t\t\tOutputFile=\"$(OutDir)/testzlib.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/testzlib.pdb\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tTargetMachine=\"17\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Itanium\"\n\t\t\tOutputDirectory=\"ia64\\TestZlibDll$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"ia64\\TestZlibDll$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tTargetEnvironment=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\minizip\"\n\t\t\t\tPreprocessorDefinitions=\"_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"3\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"ia64\\ZlibDllDebug\\zlibwapi.lib\"\n\t\t\t\tOutputFile=\"$(OutDir)/testzlib.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/testzlib.pdb\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tTargetMachine=\"5\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|x64\"\n\t\t\tOutputDirectory=\"x64\\TestZlibDll$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x64\\TestZlibDll$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tTargetEnvironment=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tOmitFramePointers=\"true\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\minizip\"\n\t\t\t\tPreprocessorDefinitions=\"_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"x64\\ZlibDllRelease\\zlibwapi.lib\"\n\t\t\t\tOutputFile=\"$(OutDir)/testzlib.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tOptimizeForWindows98=\"1\"\n\t\t\t\tTargetMachine=\"17\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Itanium\"\n\t\t\tOutputDirectory=\"ia64\\TestZlibDll$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"ia64\\TestZlibDll$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tTargetEnvironment=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tOmitFramePointers=\"true\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\minizip\"\n\t\t\t\tPreprocessorDefinitions=\"_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"ia64\\ZlibDllRelease\\zlibwapi.lib\"\n\t\t\t\tOutputFile=\"$(OutDir)/testzlib.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"1\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tOptimizeForWindows98=\"1\"\n\t\t\t\tTargetMachine=\"5\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebDeploymentTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;def;odl;idl;hpj;bat;asm\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\testzlib\\testzlib.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl;inc\"\n\t\t\t>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc9/zlib.rc",
    "content": "#include <windows.h>\n\n#define IDR_VERSION1  1\nIDR_VERSION1\tVERSIONINFO\tMOVEABLE IMPURE LOADONCALL DISCARDABLE\n  FILEVERSION\t 1,2,5,0\n  PRODUCTVERSION 1,2,5,0\n  FILEFLAGSMASK\tVS_FFI_FILEFLAGSMASK\n  FILEFLAGS\t0\n  FILEOS\tVOS_DOS_WINDOWS32\n  FILETYPE\tVFT_DLL\n  FILESUBTYPE\t0\t// not used\nBEGIN\n  BLOCK \"StringFileInfo\"\n  BEGIN\n    BLOCK \"040904E4\"\n    //language ID = U.S. English, char set = Windows, Multilingual\n\n    BEGIN\n      VALUE \"FileDescription\", \"zlib data compression and ZIP file I/O library\\0\"\n      VALUE \"FileVersion\",\t\"1.2.5\\0\"\n      VALUE \"InternalName\",\t\"zlib\\0\"\n      VALUE \"OriginalFilename\",\t\"zlib.dll\\0\"\n      VALUE \"ProductName\",\t\"ZLib.DLL\\0\"\n      VALUE \"Comments\",\"DLL support by Alessandro Iacopetti & Gilles Vollant\\0\"\n      VALUE \"LegalCopyright\", \"(C) 1995-2010 Jean-loup Gailly & Mark Adler\\0\"\n    END\n  END\n  BLOCK \"VarFileInfo\"\n  BEGIN\n    VALUE \"Translation\", 0x0409, 1252\n  END\nEND\n"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc9/zlibstat.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9,00\"\n\tName=\"zlibstat\"\n\tProjectGUID=\"{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"x64\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Itanium\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\"x86\\ZlibStat$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x86\\ZlibStat$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"4\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\masmx86\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS\"\n\t\t\t\tExceptionHandling=\"0\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tPrecompiledHeaderFile=\"$(IntDir)/zlibstat.pch\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tObjectFile=\"$(IntDir)\\\"\n\t\t\t\tProgramDataBaseFileName=\"$(OutDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tCulture=\"1036\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLibrarianTool\"\n\t\t\t\tAdditionalOptions=\"/MACHINE:X86 /NODEFAULTLIB\"\n\t\t\t\tOutputFile=\"$(OutDir)\\zlibstat.lib\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|x64\"\n\t\t\tOutputDirectory=\"x64\\ZlibStat$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x64\\ZlibStat$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"4\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tTargetEnvironment=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\masmx86\"\n\t\t\t\tPreprocessorDefinitions=\"ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64\"\n\t\t\t\tExceptionHandling=\"0\"\n\t\t\t\tRuntimeLibrary=\"3\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tPrecompiledHeaderFile=\"$(IntDir)/zlibstat.pch\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tObjectFile=\"$(IntDir)\\\"\n\t\t\t\tProgramDataBaseFileName=\"$(OutDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tCulture=\"1036\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLibrarianTool\"\n\t\t\t\tAdditionalOptions=\"/MACHINE:AMD64 /NODEFAULTLIB\"\n\t\t\t\tOutputFile=\"$(OutDir)\\zlibstat.lib\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Itanium\"\n\t\t\tOutputDirectory=\"ia64\\ZlibStat$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"ia64\\ZlibStat$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"4\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tTargetEnvironment=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\masmx86\"\n\t\t\t\tPreprocessorDefinitions=\"ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64\"\n\t\t\t\tExceptionHandling=\"0\"\n\t\t\t\tRuntimeLibrary=\"3\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tPrecompiledHeaderFile=\"$(IntDir)/zlibstat.pch\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tObjectFile=\"$(IntDir)\\\"\n\t\t\t\tProgramDataBaseFileName=\"$(OutDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tCulture=\"1036\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLibrarianTool\"\n\t\t\t\tAdditionalOptions=\"/MACHINE:IA64 /NODEFAULTLIB\"\n\t\t\t\tOutputFile=\"$(OutDir)\\zlibstat.lib\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\"x86\\ZlibStat$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x86\\ZlibStat$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"4\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\masmx86\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tExceptionHandling=\"0\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\"$(IntDir)/zlibstat.pch\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tObjectFile=\"$(IntDir)\\\"\n\t\t\t\tProgramDataBaseFileName=\"$(OutDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tCulture=\"1036\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLibrarianTool\"\n\t\t\t\tAdditionalOptions=\"/MACHINE:X86 /NODEFAULTLIB\"\n\t\t\t\tAdditionalDependencies=\"..\\..\\masmx86\\match686.obj ..\\..\\masmx86\\inffas32.obj \"\n\t\t\t\tOutputFile=\"$(OutDir)\\zlibstat.lib\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|x64\"\n\t\t\tOutputDirectory=\"x64\\ZlibStat$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x64\\ZlibStat$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"4\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tTargetEnvironment=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\masmx86\"\n\t\t\t\tPreprocessorDefinitions=\"ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;WIN64\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tExceptionHandling=\"0\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\"$(IntDir)/zlibstat.pch\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tObjectFile=\"$(IntDir)\\\"\n\t\t\t\tProgramDataBaseFileName=\"$(OutDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tCulture=\"1036\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLibrarianTool\"\n\t\t\t\tAdditionalOptions=\"/MACHINE:AMD64 /NODEFAULTLIB\"\n\t\t\t\tAdditionalDependencies=\"..\\..\\masmx64\\gvmat64.obj ..\\..\\masmx64\\inffasx64.obj \"\n\t\t\t\tOutputFile=\"$(OutDir)\\zlibstat.lib\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Itanium\"\n\t\t\tOutputDirectory=\"ia64\\ZlibStat$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"ia64\\ZlibStat$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"4\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tTargetEnvironment=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\masmx86\"\n\t\t\t\tPreprocessorDefinitions=\"ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tExceptionHandling=\"0\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\"$(IntDir)/zlibstat.pch\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tObjectFile=\"$(IntDir)\\\"\n\t\t\t\tProgramDataBaseFileName=\"$(OutDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tCulture=\"1036\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLibrarianTool\"\n\t\t\t\tAdditionalOptions=\"/MACHINE:IA64 /NODEFAULTLIB\"\n\t\t\t\tOutputFile=\"$(OutDir)\\zlibstat.lib\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"ReleaseWithoutAsm|Win32\"\n\t\t\tOutputDirectory=\"x86\\ZlibStat$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x86\\ZlibStat$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"4\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\masmx86\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tExceptionHandling=\"0\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\"$(IntDir)/zlibstat.pch\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tObjectFile=\"$(IntDir)\\\"\n\t\t\t\tProgramDataBaseFileName=\"$(OutDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tCulture=\"1036\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLibrarianTool\"\n\t\t\t\tAdditionalOptions=\"/MACHINE:X86 /NODEFAULTLIB\"\n\t\t\t\tOutputFile=\"$(OutDir)\\zlibstat.lib\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"ReleaseWithoutAsm|x64\"\n\t\t\tOutputDirectory=\"x64\\ZlibStat$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x64\\ZlibStat$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"4\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tTargetEnvironment=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\masmx86\"\n\t\t\t\tPreprocessorDefinitions=\"ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tExceptionHandling=\"0\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\"$(IntDir)/zlibstat.pch\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tObjectFile=\"$(IntDir)\\\"\n\t\t\t\tProgramDataBaseFileName=\"$(OutDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tCulture=\"1036\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLibrarianTool\"\n\t\t\t\tAdditionalOptions=\"/MACHINE:AMD64 /NODEFAULTLIB\"\n\t\t\t\tOutputFile=\"$(OutDir)\\zlibstat.lib\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"ReleaseWithoutAsm|Itanium\"\n\t\t\tOutputDirectory=\"ia64\\ZlibStat$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"ia64\\ZlibStat$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"4\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tTargetEnvironment=\"2\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\masmx86\"\n\t\t\t\tPreprocessorDefinitions=\"ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tExceptionHandling=\"0\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\"$(IntDir)/zlibstat.pch\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tObjectFile=\"$(IntDir)\\\"\n\t\t\t\tProgramDataBaseFileName=\"$(OutDir)\\\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tCulture=\"1036\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLibrarianTool\"\n\t\t\t\tAdditionalOptions=\"/MACHINE:IA64 /NODEFAULTLIB\"\n\t\t\t\tOutputFile=\"$(OutDir)\\zlibstat.lib\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\adler32.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\compress.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\crc32.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\deflate.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\gzclose.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\gzguts.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\gzlib.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\gzread.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\gzwrite.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\infback.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\masmx64\\inffas8664.c\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Itanium\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Itanium\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"ReleaseWithoutAsm|Win32\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"ReleaseWithoutAsm|Itanium\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\inffast.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\inflate.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\inftrees.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\minizip\\ioapi.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\trees.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\uncompr.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\minizip\\unzip.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\minizip\\zip.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\zlib.rc\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\zlibvc.def\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\zutil.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc9/zlibvc.def",
    "content": "LIBRARY\n; zlib data compression and ZIP file I/O library\n\nVERSION\t\t1.24\n\nEXPORTS\n        adler32                                  @1\n        compress                                 @2\n        crc32                                    @3\n        deflate                                  @4\n        deflateCopy                              @5\n        deflateEnd                               @6\n        deflateInit2_                            @7\n        deflateInit_                             @8\n        deflateParams                            @9\n        deflateReset                             @10\n        deflateSetDictionary                     @11\n        gzclose                                  @12\n        gzdopen                                  @13\n        gzerror                                  @14\n        gzflush                                  @15\n        gzopen                                   @16\n        gzread                                   @17\n        gzwrite                                  @18\n        inflate                                  @19\n        inflateEnd                               @20\n        inflateInit2_                            @21\n        inflateInit_                             @22\n        inflateReset                             @23\n        inflateSetDictionary                     @24\n        inflateSync                              @25\n        uncompress                               @26\n        zlibVersion                              @27\n        gzprintf                                 @28\n        gzputc                                   @29\n        gzgetc                                   @30\n        gzseek                                   @31\n        gzrewind                                 @32\n        gztell                                   @33\n        gzeof                                    @34\n        gzsetparams                              @35\n        zError                                   @36\n        inflateSyncPoint                         @37\n        get_crc_table                            @38\n        compress2                                @39\n        gzputs                                   @40\n        gzgets                                   @41\n        inflateCopy                              @42\n        inflateBackInit_                         @43\n        inflateBack                              @44\n        inflateBackEnd                           @45\n        compressBound                            @46\n        deflateBound                             @47\n        gzclearerr                               @48\n        gzungetc                                 @49\n        zlibCompileFlags                         @50\n        deflatePrime                             @51\n\n        unzOpen                                  @61\n        unzClose                                 @62\n        unzGetGlobalInfo                         @63\n        unzGetCurrentFileInfo                    @64\n        unzGoToFirstFile                         @65\n        unzGoToNextFile                          @66\n        unzOpenCurrentFile                       @67\n        unzReadCurrentFile                       @68\n        unzOpenCurrentFile3                      @69\n        unztell                                  @70\n        unzeof                                   @71\n        unzCloseCurrentFile                      @72\n        unzGetGlobalComment                      @73\n        unzStringFileNameCompare                 @74\n        unzLocateFile                            @75\n        unzGetLocalExtrafield                    @76\n        unzOpen2                                 @77\n        unzOpenCurrentFile2                      @78\n        unzOpenCurrentFilePassword               @79\n\n        zipOpen                                  @80\n        zipOpenNewFileInZip                      @81\n        zipWriteInFileInZip                      @82\n        zipCloseFileInZip                        @83\n        zipClose                                 @84\n        zipOpenNewFileInZip2                     @86\n        zipCloseFileInZipRaw                     @87\n        zipOpen2                                 @88\n        zipOpenNewFileInZip3                     @89\n\n        unzGetFilePos                            @100\n        unzGoToFilePos                           @101\n\n        fill_win32_filefunc                      @110\n\n; zlibwapi v1.2.4 added:\n        fill_win32_filefunc64                   @111\n        fill_win32_filefunc64A                  @112\n        fill_win32_filefunc64W                  @113\n\n        unzOpen64                               @120\n        unzOpen2_64                             @121\n        unzGetGlobalInfo64                      @122\n        unzGetCurrentFileInfo64                 @124\n        unzGetCurrentFileZStreamPos64           @125\n        unztell64                               @126\n        unzGetFilePos64                         @127\n        unzGoToFilePos64                        @128\n\n        zipOpen64                               @130\n        zipOpen2_64                             @131\n        zipOpenNewFileInZip64                   @132\n        zipOpenNewFileInZip2_64                 @133\n        zipOpenNewFileInZip3_64                 @134\n        zipOpenNewFileInZip4_64                 @135\n        zipCloseFileInZipRaw64                  @136\n\n; zlib1 v1.2.4 added:\n        adler32_combine                         @140\n        crc32_combine                           @142\n        deflateSetHeader                        @144\n        deflateTune                             @145\n        gzbuffer                                @146\n        gzclose_r                               @147\n        gzclose_w                               @148\n        gzdirect                                @149\n        gzoffset                                @150\n        inflateGetHeader                        @156\n        inflateMark                             @157\n        inflatePrime                            @158\n        inflateReset2                           @159\n        inflateUndermine                        @160\n"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc9/zlibvc.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 10.00\n# Visual Studio 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"zlibvc\", \"zlibvc.vcproj\", \"{8FD826F8-3739-44E6-8CC8-997122E53B8D}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"zlibstat\", \"zlibstat.vcproj\", \"{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"testzlib\", \"testzlib.vcproj\", \"{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"TestZlibDll\", \"testzlibdll.vcproj\", \"{C52F9E7B-498A-42BE-8DB4-85A15694366A}\"\n\tProjectSection(ProjectDependencies) = postProject\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D} = {8FD826F8-3739-44E6-8CC8-997122E53B8D}\n\tEndProjectSection\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"minizip\", \"minizip.vcproj\", \"{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}\"\n\tProjectSection(ProjectDependencies) = postProject\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D} = {8FD826F8-3739-44E6-8CC8-997122E53B8D}\n\tEndProjectSection\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"miniunz\", \"miniunz.vcproj\", \"{C52F9E7B-498A-42BE-8DB4-85A15694382A}\"\n\tProjectSection(ProjectDependencies) = postProject\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D} = {8FD826F8-3739-44E6-8CC8-997122E53B8D}\n\tEndProjectSection\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Itanium = Debug|Itanium\n\t\tDebug|Win32 = Debug|Win32\n\t\tDebug|x64 = Debug|x64\n\t\tRelease|Itanium = Release|Itanium\n\t\tRelease|Win32 = Release|Win32\n\t\tRelease|x64 = Release|x64\n\t\tReleaseWithoutAsm|Itanium = ReleaseWithoutAsm|Itanium\n\t\tReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32\n\t\tReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.ActiveCfg = Debug|Itanium\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.Build.0 = Debug|Itanium\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.Build.0 = Debug|x64\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.ActiveCfg = Release|Itanium\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.Build.0 = Release|Itanium\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = Release|x64\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = Release|x64\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64\n\t\t{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.ActiveCfg = Debug|Itanium\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.Build.0 = Debug|Itanium\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.Build.0 = Debug|x64\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.ActiveCfg = Release|Itanium\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.Build.0 = Release|Itanium\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.Build.0 = Release|Win32\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.ActiveCfg = Release|x64\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.Build.0 = Release|x64\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64\n\t\t{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64\n\t\t{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.ActiveCfg = Debug|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.Build.0 = Debug|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.Build.0 = Debug|x64\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.ActiveCfg = Release|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.Build.0 = Release|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.Build.0 = Release|Win32\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.ActiveCfg = Release|x64\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32\n\t\t{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.ActiveCfg = Debug|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.Build.0 = Debug|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.Build.0 = Debug|x64\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.ActiveCfg = Release|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.Build.0 = Release|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.Build.0 = Release|Win32\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.ActiveCfg = Release|x64\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32\n\t\t{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "external/zlib/contrib/vstudio/vc9/zlibvc.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9,00\"\n\tName=\"zlibvc\"\n\tProjectGUID=\"{8FD826F8-3739-44E6-8CC8-997122E53B8D}\"\n\tRootNamespace=\"zlibvc\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"x64\"\n\t\t/>\n\t\t<Platform\n\t\t\tName=\"Itanium\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\"x86\\ZlibDll$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x86\\ZlibDll$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\"$(OutDir)/zlibvc.tlb\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\masmx86\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF\"\n\t\t\t\tExceptionHandling=\"0\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tPrecompiledHeaderFile=\"$(IntDir)/zlibvc.pch\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tObjectFile=\"$(IntDir)\\\"\n\t\t\t\tProgramDataBaseFileName=\"$(OutDir)\\\"\n\t\t\t\tBrowseInformation=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tCulture=\"1036\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\"/MACHINE:I386\"\n\t\t\t\tAdditionalDependencies=\"..\\..\\masmx86\\match686.obj ..\\..\\masmx86\\inffas32.obj\"\n\t\t\t\tOutputFile=\"$(OutDir)\\zlibwapi.dll\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tModuleDefinitionFile=\".\\zlibvc.def\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/zlibwapi.pdb\"\n\t\t\t\tGenerateMapFile=\"true\"\n\t\t\t\tMapFileName=\"$(OutDir)/zlibwapi.map\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tImportLibrary=\"$(OutDir)/zlibwapi.lib\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|x64\"\n\t\t\tOutputDirectory=\"x64\\ZlibDll$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x64\\ZlibDll$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"3\"\n\t\t\t\tTypeLibraryName=\"$(OutDir)/zlibvc.tlb\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\masmx86\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64\"\n\t\t\t\tExceptionHandling=\"0\"\n\t\t\t\tRuntimeLibrary=\"3\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tPrecompiledHeaderFile=\"$(IntDir)/zlibvc.pch\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tObjectFile=\"$(IntDir)\\\"\n\t\t\t\tProgramDataBaseFileName=\"$(OutDir)\\\"\n\t\t\t\tBrowseInformation=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tCulture=\"1036\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"..\\..\\masmx64\\gvmat64.obj ..\\..\\masmx64\\inffasx64.obj \"\n\t\t\t\tOutputFile=\"$(OutDir)\\zlibwapi.dll\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tModuleDefinitionFile=\".\\zlibvc.def\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/zlibwapi.pdb\"\n\t\t\t\tGenerateMapFile=\"true\"\n\t\t\t\tMapFileName=\"$(OutDir)/zlibwapi.map\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tImportLibrary=\"$(OutDir)/zlibwapi.lib\"\n\t\t\t\tTargetMachine=\"17\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Itanium\"\n\t\t\tOutputDirectory=\"ia64\\ZlibDll$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"ia64\\ZlibDll$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"2\"\n\t\t\t\tTypeLibraryName=\"$(OutDir)/zlibvc.tlb\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\masmx86\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64\"\n\t\t\t\tExceptionHandling=\"0\"\n\t\t\t\tRuntimeLibrary=\"3\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tPrecompiledHeaderFile=\"$(IntDir)/zlibvc.pch\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tObjectFile=\"$(IntDir)\\\"\n\t\t\t\tProgramDataBaseFileName=\"$(OutDir)\\\"\n\t\t\t\tBrowseInformation=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tCulture=\"1036\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tOutputFile=\"$(OutDir)\\zlibwapi.dll\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tModuleDefinitionFile=\".\\zlibvc.def\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/zlibwapi.pdb\"\n\t\t\t\tGenerateMapFile=\"true\"\n\t\t\t\tMapFileName=\"$(OutDir)/zlibwapi.map\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tImportLibrary=\"$(OutDir)/zlibwapi.lib\"\n\t\t\t\tTargetMachine=\"5\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"ReleaseWithoutAsm|Win32\"\n\t\t\tOutputDirectory=\"x86\\ZlibDll$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x86\\ZlibDll$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tWholeProgramOptimization=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\"$(OutDir)/zlibvc.tlb\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\masmx86\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tExceptionHandling=\"0\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\"$(IntDir)/zlibvc.pch\"\n\t\t\t\tAssemblerOutput=\"2\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tObjectFile=\"$(IntDir)\\\"\n\t\t\t\tProgramDataBaseFileName=\"$(OutDir)\\\"\n\t\t\t\tBrowseInformation=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"1036\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\"/MACHINE:I386\"\n\t\t\t\tOutputFile=\"$(OutDir)\\zlibwapi.dll\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tIgnoreAllDefaultLibraries=\"false\"\n\t\t\t\tModuleDefinitionFile=\".\\zlibvc.def\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/zlibwapi.pdb\"\n\t\t\t\tGenerateMapFile=\"true\"\n\t\t\t\tMapFileName=\"$(OutDir)/zlibwapi.map\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tOptimizeForWindows98=\"1\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tImportLibrary=\"$(OutDir)/zlibwapi.lib\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"ReleaseWithoutAsm|x64\"\n\t\t\tOutputDirectory=\"x64\\ZlibDll$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x64\\ZlibDll$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tWholeProgramOptimization=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"3\"\n\t\t\t\tTypeLibraryName=\"$(OutDir)/zlibvc.tlb\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\masmx86\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tExceptionHandling=\"0\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\"$(IntDir)/zlibvc.pch\"\n\t\t\t\tAssemblerOutput=\"2\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tObjectFile=\"$(IntDir)\\\"\n\t\t\t\tProgramDataBaseFileName=\"$(OutDir)\\\"\n\t\t\t\tBrowseInformation=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"1036\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tOutputFile=\"$(OutDir)\\zlibwapi.dll\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tIgnoreAllDefaultLibraries=\"false\"\n\t\t\t\tModuleDefinitionFile=\".\\zlibvc.def\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/zlibwapi.pdb\"\n\t\t\t\tGenerateMapFile=\"true\"\n\t\t\t\tMapFileName=\"$(OutDir)/zlibwapi.map\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tOptimizeForWindows98=\"1\"\n\t\t\t\tImportLibrary=\"$(OutDir)/zlibwapi.lib\"\n\t\t\t\tTargetMachine=\"17\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"ReleaseWithoutAsm|Itanium\"\n\t\t\tOutputDirectory=\"ia64\\ZlibDll$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"ia64\\ZlibDll$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tWholeProgramOptimization=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"2\"\n\t\t\t\tTypeLibraryName=\"$(OutDir)/zlibvc.tlb\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\masmx86\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tExceptionHandling=\"0\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\"$(IntDir)/zlibvc.pch\"\n\t\t\t\tAssemblerOutput=\"2\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tObjectFile=\"$(IntDir)\\\"\n\t\t\t\tProgramDataBaseFileName=\"$(OutDir)\\\"\n\t\t\t\tBrowseInformation=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"1036\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tOutputFile=\"$(OutDir)\\zlibwapi.dll\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tIgnoreAllDefaultLibraries=\"false\"\n\t\t\t\tModuleDefinitionFile=\".\\zlibvc.def\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/zlibwapi.pdb\"\n\t\t\t\tGenerateMapFile=\"true\"\n\t\t\t\tMapFileName=\"$(OutDir)/zlibwapi.map\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tOptimizeForWindows98=\"1\"\n\t\t\t\tImportLibrary=\"$(OutDir)/zlibwapi.lib\"\n\t\t\t\tTargetMachine=\"5\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\"x86\\ZlibDll$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x86\\ZlibDll$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tWholeProgramOptimization=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\"$(OutDir)/zlibvc.tlb\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\masmx86\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tExceptionHandling=\"0\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\"$(IntDir)/zlibvc.pch\"\n\t\t\t\tAssemblerOutput=\"2\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tObjectFile=\"$(IntDir)\\\"\n\t\t\t\tProgramDataBaseFileName=\"$(OutDir)\\\"\n\t\t\t\tBrowseInformation=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"1036\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalOptions=\"/MACHINE:I386\"\n\t\t\t\tAdditionalDependencies=\"..\\..\\masmx86\\match686.obj ..\\..\\masmx86\\inffas32.obj \"\n\t\t\t\tOutputFile=\"$(OutDir)\\zlibwapi.dll\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tIgnoreAllDefaultLibraries=\"false\"\n\t\t\t\tModuleDefinitionFile=\".\\zlibvc.def\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/zlibwapi.pdb\"\n\t\t\t\tGenerateMapFile=\"true\"\n\t\t\t\tMapFileName=\"$(OutDir)/zlibwapi.map\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tOptimizeForWindows98=\"1\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tImportLibrary=\"$(OutDir)/zlibwapi.lib\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|x64\"\n\t\t\tOutputDirectory=\"x64\\ZlibDll$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"x64\\ZlibDll$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tWholeProgramOptimization=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"3\"\n\t\t\t\tTypeLibraryName=\"$(OutDir)/zlibvc.tlb\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\masmx86\"\n\t\t\t\tPreprocessorDefinitions=\"_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tExceptionHandling=\"0\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\"$(IntDir)/zlibvc.pch\"\n\t\t\t\tAssemblerOutput=\"2\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tObjectFile=\"$(IntDir)\\\"\n\t\t\t\tProgramDataBaseFileName=\"$(OutDir)\\\"\n\t\t\t\tBrowseInformation=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"1036\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"..\\..\\masmx64\\gvmat64.obj ..\\..\\masmx64\\inffasx64.obj \"\n\t\t\t\tOutputFile=\"$(OutDir)\\zlibwapi.dll\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tIgnoreAllDefaultLibraries=\"false\"\n\t\t\t\tModuleDefinitionFile=\".\\zlibvc.def\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/zlibwapi.pdb\"\n\t\t\t\tGenerateMapFile=\"true\"\n\t\t\t\tMapFileName=\"$(OutDir)/zlibwapi.map\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tOptimizeForWindows98=\"1\"\n\t\t\t\tImportLibrary=\"$(OutDir)/zlibwapi.lib\"\n\t\t\t\tTargetMachine=\"17\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Itanium\"\n\t\t\tOutputDirectory=\"ia64\\ZlibDll$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"ia64\\ZlibDll$(ConfigurationName)\\Tmp\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tInheritedPropertySheets=\"UpgradeFromVC70.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tWholeProgramOptimization=\"1\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"2\"\n\t\t\t\tTypeLibraryName=\"$(OutDir)/zlibvc.tlb\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\..;..\\..\\masmx86\"\n\t\t\t\tPreprocessorDefinitions=\"_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tExceptionHandling=\"0\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\"$(IntDir)/zlibvc.pch\"\n\t\t\t\tAssemblerOutput=\"2\"\n\t\t\t\tAssemblerListingLocation=\"$(IntDir)\\\"\n\t\t\t\tObjectFile=\"$(IntDir)\\\"\n\t\t\t\tProgramDataBaseFileName=\"$(OutDir)\\\"\n\t\t\t\tBrowseInformation=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"1036\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tOutputFile=\"$(OutDir)\\zlibwapi.dll\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tIgnoreAllDefaultLibraries=\"false\"\n\t\t\t\tModuleDefinitionFile=\".\\zlibvc.def\"\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/zlibwapi.pdb\"\n\t\t\t\tGenerateMapFile=\"true\"\n\t\t\t\tMapFileName=\"$(OutDir)/zlibwapi.map\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tOptimizeForWindows98=\"1\"\n\t\t\t\tImportLibrary=\"$(OutDir)/zlibwapi.lib\"\n\t\t\t\tTargetMachine=\"5\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\adler32.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\compress.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\crc32.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\deflate.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\gzclose.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\gzguts.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\gzlib.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\gzread.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\gzwrite.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\infback.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\masmx64\\inffas8664.c\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Itanium\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"ReleaseWithoutAsm|Win32\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"ReleaseWithoutAsm|Itanium\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Itanium\"\n\t\t\t\t\tExcludedFromBuild=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\inffast.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\inflate.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\inftrees.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\minizip\\ioapi.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\minizip\\iowin32.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\trees.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\uncompr.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\minizip\\unzip.c\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tAdditionalIncludeDirectories=\"\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"ZLIB_INTERNAL\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|x64\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tAdditionalIncludeDirectories=\"\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"ZLIB_INTERNAL\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Itanium\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tAdditionalIncludeDirectories=\"\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"ZLIB_INTERNAL\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\minizip\\zip.c\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tAdditionalIncludeDirectories=\"\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"ZLIB_INTERNAL\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|x64\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tAdditionalIncludeDirectories=\"\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"ZLIB_INTERNAL\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Itanium\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tAdditionalIncludeDirectories=\"\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"ZLIB_INTERNAL\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\zlib.rc\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\zlibvc.def\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\zutil.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl;fi;fd\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\deflate.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\infblock.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\infcodes.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\inffast.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\inftrees.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\infutil.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\zconf.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\zlib.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\..\\..\\zutil.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "external/zlib/crc32.c",
    "content": "/* crc32.c -- compute the CRC-32 of a data stream\n * Copyright (C) 1995-2006, 2010 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n *\n * Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster\n * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing\n * tables for updating the shift register in one step with three exclusive-ors\n * instead of four steps with four exclusive-ors.  This results in about a\n * factor of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3.\n */\n\n/* @(#) $Id$ */\n\n/*\n  Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore\n  protection on the static variables used to control the first-use generation\n  of the crc tables.  Therefore, if you #define DYNAMIC_CRC_TABLE, you should\n  first call get_crc_table() to initialize the tables before allowing more than\n  one thread to use crc32().\n */\n\n#ifdef MAKECRCH\n#  include <stdio.h>\n#  ifndef DYNAMIC_CRC_TABLE\n#    define DYNAMIC_CRC_TABLE\n#  endif /* !DYNAMIC_CRC_TABLE */\n#endif /* MAKECRCH */\n\n#include \"zutil.h\"      /* for STDC and FAR definitions */\n\n#define local static\n\n/* Find a four-byte integer type for crc32_little() and crc32_big(). */\n#ifndef NOBYFOUR\n#  ifdef STDC           /* need ANSI C limits.h to determine sizes */\n#    include <limits.h>\n#    define BYFOUR\n#    if (UINT_MAX == 0xffffffffUL)\n       typedef unsigned int u4;\n#    else\n#      if (ULONG_MAX == 0xffffffffUL)\n         typedef unsigned long u4;\n#      else\n#        if (USHRT_MAX == 0xffffffffUL)\n           typedef unsigned short u4;\n#        else\n#          undef BYFOUR     /* can't find a four-byte integer type! */\n#        endif\n#      endif\n#    endif\n#  endif /* STDC */\n#endif /* !NOBYFOUR */\n\n/* Definitions for doing the crc four data bytes at a time. */\n#ifdef BYFOUR\n#  define REV(w) ((((w)>>24)&0xff)+(((w)>>8)&0xff00)+ \\\n                (((w)&0xff00)<<8)+(((w)&0xff)<<24))\n   local unsigned long crc32_little OF((unsigned long,\n                        const unsigned char FAR *, unsigned));\n   local unsigned long crc32_big OF((unsigned long,\n                        const unsigned char FAR *, unsigned));\n#  define TBLS 8\n#else\n#  define TBLS 1\n#endif /* BYFOUR */\n\n/* Local functions for crc concatenation */\nlocal unsigned long gf2_matrix_times OF((unsigned long *mat,\n                                         unsigned long vec));\nlocal void gf2_matrix_square OF((unsigned long *square, unsigned long *mat));\nlocal uLong crc32_combine_(uLong crc1, uLong crc2, z_off64_t len2);\n\n\n#ifdef DYNAMIC_CRC_TABLE\n\nlocal volatile int crc_table_empty = 1;\nlocal unsigned long FAR crc_table[TBLS][256];\nlocal void make_crc_table OF((void));\n#ifdef MAKECRCH\n   local void write_table OF((FILE *, const unsigned long FAR *));\n#endif /* MAKECRCH */\n/*\n  Generate tables for a byte-wise 32-bit CRC calculation on the polynomial:\n  x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1.\n\n  Polynomials over GF(2) are represented in binary, one bit per coefficient,\n  with the lowest powers in the most significant bit.  Then adding polynomials\n  is just exclusive-or, and multiplying a polynomial by x is a right shift by\n  one.  If we call the above polynomial p, and represent a byte as the\n  polynomial q, also with the lowest power in the most significant bit (so the\n  byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p,\n  where a mod b means the remainder after dividing a by b.\n\n  This calculation is done using the shift-register method of multiplying and\n  taking the remainder.  The register is initialized to zero, and for each\n  incoming bit, x^32 is added mod p to the register if the bit is a one (where\n  x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by\n  x (which is shifting right by one and adding x^32 mod p if the bit shifted\n  out is a one).  We start with the highest power (least significant bit) of\n  q and repeat for all eight bits of q.\n\n  The first table is simply the CRC of all possible eight bit values.  This is\n  all the information needed to generate CRCs on data a byte at a time for all\n  combinations of CRC register values and incoming bytes.  The remaining tables\n  allow for word-at-a-time CRC calculation for both big-endian and little-\n  endian machines, where a word is four bytes.\n*/\nlocal void make_crc_table()\n{\n    unsigned long c;\n    int n, k;\n    unsigned long poly;                 /* polynomial exclusive-or pattern */\n    /* terms of polynomial defining this crc (except x^32): */\n    static volatile int first = 1;      /* flag to limit concurrent making */\n    static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};\n\n    /* See if another task is already doing this (not thread-safe, but better\n       than nothing -- significantly reduces duration of vulnerability in\n       case the advice about DYNAMIC_CRC_TABLE is ignored) */\n    if (first) {\n        first = 0;\n\n        /* make exclusive-or pattern from polynomial (0xedb88320UL) */\n        poly = 0UL;\n        for (n = 0; n < sizeof(p)/sizeof(unsigned char); n++)\n            poly |= 1UL << (31 - p[n]);\n\n        /* generate a crc for every 8-bit value */\n        for (n = 0; n < 256; n++) {\n            c = (unsigned long)n;\n            for (k = 0; k < 8; k++)\n                c = c & 1 ? poly ^ (c >> 1) : c >> 1;\n            crc_table[0][n] = c;\n        }\n\n#ifdef BYFOUR\n        /* generate crc for each value followed by one, two, and three zeros,\n           and then the byte reversal of those as well as the first table */\n        for (n = 0; n < 256; n++) {\n            c = crc_table[0][n];\n            crc_table[4][n] = REV(c);\n            for (k = 1; k < 4; k++) {\n                c = crc_table[0][c & 0xff] ^ (c >> 8);\n                crc_table[k][n] = c;\n                crc_table[k + 4][n] = REV(c);\n            }\n        }\n#endif /* BYFOUR */\n\n        crc_table_empty = 0;\n    }\n    else {      /* not first */\n        /* wait for the other guy to finish (not efficient, but rare) */\n        while (crc_table_empty)\n            ;\n    }\n\n#ifdef MAKECRCH\n    /* write out CRC tables to crc32.h */\n    {\n        FILE *out;\n\n        out = fopen(\"crc32.h\", \"w\");\n        if (out == NULL) return;\n        fprintf(out, \"/* crc32.h -- tables for rapid CRC calculation\\n\");\n        fprintf(out, \" * Generated automatically by crc32.c\\n */\\n\\n\");\n        fprintf(out, \"local const unsigned long FAR \");\n        fprintf(out, \"crc_table[TBLS][256] =\\n{\\n  {\\n\");\n        write_table(out, crc_table[0]);\n#  ifdef BYFOUR\n        fprintf(out, \"#ifdef BYFOUR\\n\");\n        for (k = 1; k < 8; k++) {\n            fprintf(out, \"  },\\n  {\\n\");\n            write_table(out, crc_table[k]);\n        }\n        fprintf(out, \"#endif\\n\");\n#  endif /* BYFOUR */\n        fprintf(out, \"  }\\n};\\n\");\n        fclose(out);\n    }\n#endif /* MAKECRCH */\n}\n\n#ifdef MAKECRCH\nlocal void write_table(out, table)\n    FILE *out;\n    const unsigned long FAR *table;\n{\n    int n;\n\n    for (n = 0; n < 256; n++)\n        fprintf(out, \"%s0x%08lxUL%s\", n % 5 ? \"\" : \"    \", table[n],\n                n == 255 ? \"\\n\" : (n % 5 == 4 ? \",\\n\" : \", \"));\n}\n#endif /* MAKECRCH */\n\n#else /* !DYNAMIC_CRC_TABLE */\n/* ========================================================================\n * Tables of CRC-32s of all single-byte values, made by make_crc_table().\n */\n#include \"crc32.h\"\n#endif /* DYNAMIC_CRC_TABLE */\n\n/* =========================================================================\n * This function can be used by asm versions of crc32()\n */\nconst unsigned long FAR * ZEXPORT get_crc_table()\n{\n#ifdef DYNAMIC_CRC_TABLE\n    if (crc_table_empty)\n        make_crc_table();\n#endif /* DYNAMIC_CRC_TABLE */\n    return (const unsigned long FAR *)crc_table;\n}\n\n/* ========================================================================= */\n#define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8)\n#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1\n\n/* ========================================================================= */\nunsigned long ZEXPORT crc32(crc, buf, len)\n    unsigned long crc;\n    const unsigned char FAR *buf;\n    uInt len;\n{\n    if (buf == Z_NULL) return 0UL;\n\n#ifdef DYNAMIC_CRC_TABLE\n    if (crc_table_empty)\n        make_crc_table();\n#endif /* DYNAMIC_CRC_TABLE */\n\n#ifdef BYFOUR\n    if (sizeof(void *) == sizeof(ptrdiff_t)) {\n        u4 endian;\n\n        endian = 1;\n        if (*((unsigned char *)(&endian)))\n            return crc32_little(crc, buf, len);\n        else\n            return crc32_big(crc, buf, len);\n    }\n#endif /* BYFOUR */\n    crc = crc ^ 0xffffffffUL;\n    while (len >= 8) {\n        DO8;\n        len -= 8;\n    }\n    if (len) do {\n        DO1;\n    } while (--len);\n    return crc ^ 0xffffffffUL;\n}\n\n#ifdef BYFOUR\n\n/* ========================================================================= */\n#define DOLIT4 c ^= *buf4++; \\\n        c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \\\n            crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24]\n#define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4\n\n/* ========================================================================= */\nlocal unsigned long crc32_little(crc, buf, len)\n    unsigned long crc;\n    const unsigned char FAR *buf;\n    unsigned len;\n{\n    register u4 c;\n    register const u4 FAR *buf4;\n\n    c = (u4)crc;\n    c = ~c;\n    while (len && ((ptrdiff_t)buf & 3)) {\n        c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);\n        len--;\n    }\n\n    buf4 = (const u4 FAR *)(const void FAR *)buf;\n    while (len >= 32) {\n        DOLIT32;\n        len -= 32;\n    }\n    while (len >= 4) {\n        DOLIT4;\n        len -= 4;\n    }\n    buf = (const unsigned char FAR *)buf4;\n\n    if (len) do {\n        c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);\n    } while (--len);\n    c = ~c;\n    return (unsigned long)c;\n}\n\n/* ========================================================================= */\n#define DOBIG4 c ^= *++buf4; \\\n        c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \\\n            crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24]\n#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4\n\n/* ========================================================================= */\nlocal unsigned long crc32_big(crc, buf, len)\n    unsigned long crc;\n    const unsigned char FAR *buf;\n    unsigned len;\n{\n    register u4 c;\n    register const u4 FAR *buf4;\n\n    c = REV((u4)crc);\n    c = ~c;\n    while (len && ((ptrdiff_t)buf & 3)) {\n        c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);\n        len--;\n    }\n\n    buf4 = (const u4 FAR *)(const void FAR *)buf;\n    buf4--;\n    while (len >= 32) {\n        DOBIG32;\n        len -= 32;\n    }\n    while (len >= 4) {\n        DOBIG4;\n        len -= 4;\n    }\n    buf4++;\n    buf = (const unsigned char FAR *)buf4;\n\n    if (len) do {\n        c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);\n    } while (--len);\n    c = ~c;\n    return (unsigned long)(REV(c));\n}\n\n#endif /* BYFOUR */\n\n#define GF2_DIM 32      /* dimension of GF(2) vectors (length of CRC) */\n\n/* ========================================================================= */\nlocal unsigned long gf2_matrix_times(mat, vec)\n    unsigned long *mat;\n    unsigned long vec;\n{\n    unsigned long sum;\n\n    sum = 0;\n    while (vec) {\n        if (vec & 1)\n            sum ^= *mat;\n        vec >>= 1;\n        mat++;\n    }\n    return sum;\n}\n\n/* ========================================================================= */\nlocal void gf2_matrix_square(square, mat)\n    unsigned long *square;\n    unsigned long *mat;\n{\n    int n;\n\n    for (n = 0; n < GF2_DIM; n++)\n        square[n] = gf2_matrix_times(mat, mat[n]);\n}\n\n/* ========================================================================= */\nlocal uLong crc32_combine_(crc1, crc2, len2)\n    uLong crc1;\n    uLong crc2;\n    z_off64_t len2;\n{\n    int n;\n    unsigned long row;\n    unsigned long even[GF2_DIM];    /* even-power-of-two zeros operator */\n    unsigned long odd[GF2_DIM];     /* odd-power-of-two zeros operator */\n\n    /* degenerate case (also disallow negative lengths) */\n    if (len2 <= 0)\n        return crc1;\n\n    /* put operator for one zero bit in odd */\n    odd[0] = 0xedb88320UL;          /* CRC-32 polynomial */\n    row = 1;\n    for (n = 1; n < GF2_DIM; n++) {\n        odd[n] = row;\n        row <<= 1;\n    }\n\n    /* put operator for two zero bits in even */\n    gf2_matrix_square(even, odd);\n\n    /* put operator for four zero bits in odd */\n    gf2_matrix_square(odd, even);\n\n    /* apply len2 zeros to crc1 (first square will put the operator for one\n       zero byte, eight zero bits, in even) */\n    do {\n        /* apply zeros operator for this bit of len2 */\n        gf2_matrix_square(even, odd);\n        if (len2 & 1)\n            crc1 = gf2_matrix_times(even, crc1);\n        len2 >>= 1;\n\n        /* if no more bits set, then done */\n        if (len2 == 0)\n            break;\n\n        /* another iteration of the loop with odd and even swapped */\n        gf2_matrix_square(odd, even);\n        if (len2 & 1)\n            crc1 = gf2_matrix_times(odd, crc1);\n        len2 >>= 1;\n\n        /* if no more bits set, then done */\n    } while (len2 != 0);\n\n    /* return combined crc */\n    crc1 ^= crc2;\n    return crc1;\n}\n\n/* ========================================================================= */\nuLong ZEXPORT crc32_combine(crc1, crc2, len2)\n    uLong crc1;\n    uLong crc2;\n    z_off_t len2;\n{\n    return crc32_combine_(crc1, crc2, len2);\n}\n\nuLong ZEXPORT crc32_combine64(crc1, crc2, len2)\n    uLong crc1;\n    uLong crc2;\n    z_off64_t len2;\n{\n    return crc32_combine_(crc1, crc2, len2);\n}\n"
  },
  {
    "path": "external/zlib/crc32.h",
    "content": "/* crc32.h -- tables for rapid CRC calculation\n * Generated automatically by crc32.c\n */\n\nlocal const unsigned long FAR crc_table[TBLS][256] =\n{\n  {\n    0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL,\n    0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL,\n    0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL,\n    0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL,\n    0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL,\n    0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL,\n    0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL,\n    0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL,\n    0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL,\n    0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL,\n    0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL,\n    0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL,\n    0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL,\n    0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL,\n    0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL,\n    0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL,\n    0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL,\n    0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL,\n    0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL,\n    0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL,\n    0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL,\n    0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL,\n    0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL,\n    0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL,\n    0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL,\n    0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL,\n    0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL,\n    0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL,\n    0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL,\n    0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL,\n    0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL,\n    0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL,\n    0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL,\n    0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL,\n    0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL,\n    0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL,\n    0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL,\n    0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL,\n    0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL,\n    0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL,\n    0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL,\n    0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL,\n    0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL,\n    0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL,\n    0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL,\n    0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL,\n    0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL,\n    0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL,\n    0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL,\n    0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL,\n    0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL,\n    0x2d02ef8dUL\n#ifdef BYFOUR\n  },\n  {\n    0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL,\n    0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL,\n    0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL,\n    0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL,\n    0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL,\n    0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL,\n    0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL,\n    0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL,\n    0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL,\n    0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL,\n    0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL,\n    0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL,\n    0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL,\n    0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL,\n    0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL,\n    0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL,\n    0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL,\n    0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL,\n    0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL,\n    0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL,\n    0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL,\n    0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL,\n    0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL,\n    0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL,\n    0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL,\n    0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL,\n    0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL,\n    0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL,\n    0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL,\n    0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL,\n    0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL,\n    0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL,\n    0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL,\n    0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL,\n    0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL,\n    0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL,\n    0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL,\n    0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL,\n    0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL,\n    0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL,\n    0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL,\n    0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL,\n    0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL,\n    0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL,\n    0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL,\n    0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL,\n    0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL,\n    0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL,\n    0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL,\n    0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL,\n    0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL,\n    0x9324fd72UL\n  },\n  {\n    0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL,\n    0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL,\n    0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL,\n    0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL,\n    0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL,\n    0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL,\n    0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL,\n    0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL,\n    0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL,\n    0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL,\n    0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL,\n    0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL,\n    0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL,\n    0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL,\n    0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL,\n    0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL,\n    0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL,\n    0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL,\n    0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL,\n    0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL,\n    0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL,\n    0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL,\n    0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL,\n    0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL,\n    0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL,\n    0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL,\n    0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL,\n    0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL,\n    0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL,\n    0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL,\n    0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL,\n    0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL,\n    0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL,\n    0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL,\n    0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL,\n    0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL,\n    0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL,\n    0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL,\n    0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL,\n    0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL,\n    0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL,\n    0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL,\n    0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL,\n    0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL,\n    0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL,\n    0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL,\n    0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL,\n    0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL,\n    0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL,\n    0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL,\n    0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL,\n    0xbe9834edUL\n  },\n  {\n    0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL,\n    0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL,\n    0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL,\n    0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL,\n    0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL,\n    0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL,\n    0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL,\n    0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL,\n    0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL,\n    0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL,\n    0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL,\n    0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL,\n    0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL,\n    0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL,\n    0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL,\n    0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL,\n    0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL,\n    0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL,\n    0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL,\n    0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL,\n    0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL,\n    0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL,\n    0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL,\n    0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL,\n    0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL,\n    0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL,\n    0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL,\n    0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL,\n    0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL,\n    0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL,\n    0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL,\n    0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL,\n    0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL,\n    0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL,\n    0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL,\n    0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL,\n    0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL,\n    0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL,\n    0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL,\n    0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL,\n    0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL,\n    0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL,\n    0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL,\n    0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL,\n    0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL,\n    0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL,\n    0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL,\n    0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL,\n    0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL,\n    0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL,\n    0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL,\n    0xde0506f1UL\n  },\n  {\n    0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL,\n    0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL,\n    0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL,\n    0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL,\n    0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL,\n    0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL,\n    0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL,\n    0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL,\n    0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL,\n    0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL,\n    0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL,\n    0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL,\n    0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL,\n    0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL,\n    0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL,\n    0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL,\n    0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL,\n    0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL,\n    0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL,\n    0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL,\n    0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL,\n    0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL,\n    0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL,\n    0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL,\n    0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL,\n    0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL,\n    0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL,\n    0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL,\n    0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL,\n    0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL,\n    0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL,\n    0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL,\n    0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL,\n    0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL,\n    0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL,\n    0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL,\n    0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL,\n    0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL,\n    0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL,\n    0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL,\n    0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL,\n    0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL,\n    0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL,\n    0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL,\n    0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL,\n    0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL,\n    0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL,\n    0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL,\n    0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL,\n    0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL,\n    0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL,\n    0x8def022dUL\n  },\n  {\n    0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL,\n    0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL,\n    0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL,\n    0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL,\n    0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL,\n    0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL,\n    0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL,\n    0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL,\n    0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL,\n    0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL,\n    0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL,\n    0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL,\n    0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL,\n    0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL,\n    0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL,\n    0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL,\n    0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL,\n    0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL,\n    0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL,\n    0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL,\n    0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL,\n    0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL,\n    0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL,\n    0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL,\n    0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL,\n    0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL,\n    0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL,\n    0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL,\n    0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL,\n    0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL,\n    0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL,\n    0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL,\n    0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL,\n    0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL,\n    0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL,\n    0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL,\n    0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL,\n    0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL,\n    0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL,\n    0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL,\n    0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL,\n    0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL,\n    0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL,\n    0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL,\n    0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL,\n    0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL,\n    0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL,\n    0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL,\n    0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL,\n    0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL,\n    0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL,\n    0x72fd2493UL\n  },\n  {\n    0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL,\n    0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL,\n    0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL,\n    0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL,\n    0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL,\n    0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL,\n    0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL,\n    0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL,\n    0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL,\n    0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL,\n    0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL,\n    0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL,\n    0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL,\n    0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL,\n    0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL,\n    0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL,\n    0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL,\n    0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL,\n    0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL,\n    0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL,\n    0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL,\n    0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL,\n    0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL,\n    0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL,\n    0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL,\n    0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL,\n    0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL,\n    0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL,\n    0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL,\n    0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL,\n    0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL,\n    0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL,\n    0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL,\n    0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL,\n    0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL,\n    0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL,\n    0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL,\n    0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL,\n    0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL,\n    0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL,\n    0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL,\n    0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL,\n    0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL,\n    0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL,\n    0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL,\n    0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL,\n    0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL,\n    0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL,\n    0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL,\n    0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL,\n    0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL,\n    0xed3498beUL\n  },\n  {\n    0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL,\n    0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL,\n    0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL,\n    0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL,\n    0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL,\n    0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL,\n    0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL,\n    0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL,\n    0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL,\n    0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL,\n    0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL,\n    0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL,\n    0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL,\n    0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL,\n    0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL,\n    0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL,\n    0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL,\n    0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL,\n    0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL,\n    0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL,\n    0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL,\n    0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL,\n    0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL,\n    0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL,\n    0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL,\n    0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL,\n    0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL,\n    0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL,\n    0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL,\n    0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL,\n    0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL,\n    0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL,\n    0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL,\n    0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL,\n    0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL,\n    0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL,\n    0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL,\n    0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL,\n    0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL,\n    0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL,\n    0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL,\n    0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL,\n    0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL,\n    0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL,\n    0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL,\n    0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL,\n    0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL,\n    0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL,\n    0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL,\n    0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL,\n    0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL,\n    0xf10605deUL\n#endif\n  }\n};\n"
  },
  {
    "path": "external/zlib/deflate.c",
    "content": "/* deflate.c -- compress data using the deflation algorithm\n * Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n/*\n *  ALGORITHM\n *\n *      The \"deflation\" process depends on being able to identify portions\n *      of the input text which are identical to earlier input (within a\n *      sliding window trailing behind the input currently being processed).\n *\n *      The most straightforward technique turns out to be the fastest for\n *      most input files: try all possible matches and select the longest.\n *      The key feature of this algorithm is that insertions into the string\n *      dictionary are very simple and thus fast, and deletions are avoided\n *      completely. Insertions are performed at each input character, whereas\n *      string matches are performed only when the previous match ends. So it\n *      is preferable to spend more time in matches to allow very fast string\n *      insertions and avoid deletions. The matching algorithm for small\n *      strings is inspired from that of Rabin & Karp. A brute force approach\n *      is used to find longer strings when a small match has been found.\n *      A similar algorithm is used in comic (by Jan-Mark Wams) and freeze\n *      (by Leonid Broukhis).\n *         A previous version of this file used a more sophisticated algorithm\n *      (by Fiala and Greene) which is guaranteed to run in linear amortized\n *      time, but has a larger average cost, uses more memory and is patented.\n *      However the F&G algorithm may be faster for some highly redundant\n *      files if the parameter max_chain_length (described below) is too large.\n *\n *  ACKNOWLEDGEMENTS\n *\n *      The idea of lazy evaluation of matches is due to Jan-Mark Wams, and\n *      I found it in 'freeze' written by Leonid Broukhis.\n *      Thanks to many people for bug reports and testing.\n *\n *  REFERENCES\n *\n *      Deutsch, L.P.,\"DEFLATE Compressed Data Format Specification\".\n *      Available in http://www.ietf.org/rfc/rfc1951.txt\n *\n *      A description of the Rabin and Karp algorithm is given in the book\n *         \"Algorithms\" by R. Sedgewick, Addison-Wesley, p252.\n *\n *      Fiala,E.R., and Greene,D.H.\n *         Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595\n *\n */\n\n/* @(#) $Id$ */\n\n#include \"deflate.h\"\n\nconst char deflate_copyright[] =\n   \" deflate 1.2.5 Copyright 1995-2010 Jean-loup Gailly and Mark Adler \";\n/*\n  If you use the zlib library in a product, an acknowledgment is welcome\n  in the documentation of your product. If for some reason you cannot\n  include such an acknowledgment, I would appreciate that you keep this\n  copyright string in the executable of your product.\n */\n\n/* ===========================================================================\n *  Function prototypes.\n */\ntypedef enum {\n    need_more,      /* block not completed, need more input or more output */\n    block_done,     /* block flush performed */\n    finish_started, /* finish started, need only more output at next deflate */\n    finish_done     /* finish done, accept no more input or output */\n} block_state;\n\ntypedef block_state (*compress_func) OF((deflate_state *s, int flush));\n/* Compression function. Returns the block state after the call. */\n\nlocal void fill_window    OF((deflate_state *s));\nlocal block_state deflate_stored OF((deflate_state *s, int flush));\nlocal block_state deflate_fast   OF((deflate_state *s, int flush));\n#ifndef FASTEST\nlocal block_state deflate_slow   OF((deflate_state *s, int flush));\n#endif\nlocal block_state deflate_rle    OF((deflate_state *s, int flush));\nlocal block_state deflate_huff   OF((deflate_state *s, int flush));\nlocal void lm_init        OF((deflate_state *s));\nlocal void putShortMSB    OF((deflate_state *s, uInt b));\nlocal void flush_pending  OF((z_streamp strm));\nlocal int read_buf        OF((z_streamp strm, Bytef *buf, unsigned size));\n#ifdef ASMV\n      void match_init OF((void)); /* asm code initialization */\n      uInt longest_match  OF((deflate_state *s, IPos cur_match));\n#else\nlocal uInt longest_match  OF((deflate_state *s, IPos cur_match));\n#endif\n\n#ifdef DEBUG\nlocal  void check_match OF((deflate_state *s, IPos start, IPos match,\n                            int length));\n#endif\n\n/* ===========================================================================\n * Local data\n */\n\n#define NIL 0\n/* Tail of hash chains */\n\n#ifndef TOO_FAR\n#  define TOO_FAR 4096\n#endif\n/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\ntypedef struct config_s {\n   ush good_length; /* reduce lazy search above this match length */\n   ush max_lazy;    /* do not perform lazy search above this match length */\n   ush nice_length; /* quit search above this match length */\n   ush max_chain;\n   compress_func func;\n} config;\n\n#ifdef FASTEST\nlocal const config configuration_table[2] = {\n/*      good lazy nice chain */\n/* 0 */ {0,    0,  0,    0, deflate_stored},  /* store only */\n/* 1 */ {4,    4,  8,    4, deflate_fast}}; /* max speed, no lazy matches */\n#else\nlocal const config configuration_table[10] = {\n/*      good lazy nice chain */\n/* 0 */ {0,    0,  0,    0, deflate_stored},  /* store only */\n/* 1 */ {4,    4,  8,    4, deflate_fast}, /* max speed, no lazy matches */\n/* 2 */ {4,    5, 16,    8, deflate_fast},\n/* 3 */ {4,    6, 32,   32, deflate_fast},\n\n/* 4 */ {4,    4, 16,   16, deflate_slow},  /* lazy matches */\n/* 5 */ {8,   16, 32,   32, deflate_slow},\n/* 6 */ {8,   16, 128, 128, deflate_slow},\n/* 7 */ {8,   32, 128, 256, deflate_slow},\n/* 8 */ {32, 128, 258, 1024, deflate_slow},\n/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */\n#endif\n\n/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4\n * For deflate_fast() (levels <= 3) good is ignored and lazy has a different\n * meaning.\n */\n\n#define EQUAL 0\n/* result of memcmp for equal strings */\n\n#ifndef NO_DUMMY_DECL\nstruct static_tree_desc_s {int dummy;}; /* for buggy compilers */\n#endif\n\n/* ===========================================================================\n * Update a hash value with the given input byte\n * IN  assertion: all calls to to UPDATE_HASH are made with consecutive\n *    input characters, so that a running hash key can be computed from the\n *    previous key instead of complete recalculation each time.\n */\n#define UPDATE_HASH(s,h,c) (h = (((h)<<s->hash_shift) ^ (c)) & s->hash_mask)\n\n\n/* ===========================================================================\n * Insert string str in the dictionary and set match_head to the previous head\n * of the hash chain (the most recent string with same hash key). Return\n * the previous length of the hash chain.\n * If this file is compiled with -DFASTEST, the compression level is forced\n * to 1, and no hash chains are maintained.\n * IN  assertion: all calls to to INSERT_STRING are made with consecutive\n *    input characters and the first MIN_MATCH bytes of str are valid\n *    (except for the last MIN_MATCH-1 bytes of the input file).\n */\n#ifdef FASTEST\n#define INSERT_STRING(s, str, match_head) \\\n   (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \\\n    match_head = s->head[s->ins_h], \\\n    s->head[s->ins_h] = (Pos)(str))\n#else\n#define INSERT_STRING(s, str, match_head) \\\n   (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \\\n    match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \\\n    s->head[s->ins_h] = (Pos)(str))\n#endif\n\n/* ===========================================================================\n * Initialize the hash table (avoiding 64K overflow for 16 bit systems).\n * prev[] will be initialized on the fly.\n */\n#define CLEAR_HASH(s) \\\n    s->head[s->hash_size-1] = NIL; \\\n    zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));\n\n/* ========================================================================= */\nint ZEXPORT deflateInit_(strm, level, version, stream_size)\n    z_streamp strm;\n    int level;\n    const char *version;\n    int stream_size;\n{\n    return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL,\n                         Z_DEFAULT_STRATEGY, version, stream_size);\n    /* To do: ignore strm->next_in if we use it as window */\n}\n\n/* ========================================================================= */\nint ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,\n                  version, stream_size)\n    z_streamp strm;\n    int  level;\n    int  method;\n    int  windowBits;\n    int  memLevel;\n    int  strategy;\n    const char *version;\n    int stream_size;\n{\n    deflate_state *s;\n    int wrap = 1;\n    static const char my_version[] = ZLIB_VERSION;\n\n    ushf *overlay;\n    /* We overlay pending_buf and d_buf+l_buf. This works since the average\n     * output size for (length,distance) codes is <= 24 bits.\n     */\n\n    if (version == Z_NULL || version[0] != my_version[0] ||\n        stream_size != sizeof(z_stream)) {\n        return Z_VERSION_ERROR;\n    }\n    if (strm == Z_NULL) return Z_STREAM_ERROR;\n\n    strm->msg = Z_NULL;\n    if (strm->zalloc == (alloc_func)0) {\n        strm->zalloc = zcalloc;\n        strm->opaque = (voidpf)0;\n    }\n    if (strm->zfree == (free_func)0) strm->zfree = zcfree;\n\n#ifdef FASTEST\n    if (level != 0) level = 1;\n#else\n    if (level == Z_DEFAULT_COMPRESSION) level = 6;\n#endif\n\n    if (windowBits < 0) { /* suppress zlib wrapper */\n        wrap = 0;\n        windowBits = -windowBits;\n    }\n#ifdef GZIP\n    else if (windowBits > 15) {\n        wrap = 2;       /* write gzip wrapper instead */\n        windowBits -= 16;\n    }\n#endif\n    if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||\n        windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n        strategy < 0 || strategy > Z_FIXED) {\n        return Z_STREAM_ERROR;\n    }\n    if (windowBits == 8) windowBits = 9;  /* until 256-byte window bug fixed */\n    s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state));\n    if (s == Z_NULL) return Z_MEM_ERROR;\n    strm->state = (struct internal_state FAR *)s;\n    s->strm = strm;\n\n    s->wrap = wrap;\n    s->gzhead = Z_NULL;\n    s->w_bits = windowBits;\n    s->w_size = 1 << s->w_bits;\n    s->w_mask = s->w_size - 1;\n\n    s->hash_bits = memLevel + 7;\n    s->hash_size = 1 << s->hash_bits;\n    s->hash_mask = s->hash_size - 1;\n    s->hash_shift =  ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH);\n\n    s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte));\n    s->prev   = (Posf *)  ZALLOC(strm, s->w_size, sizeof(Pos));\n    s->head   = (Posf *)  ZALLOC(strm, s->hash_size, sizeof(Pos));\n\n    s->high_water = 0;      /* nothing written to s->window yet */\n\n    s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n    overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n    s->pending_buf = (uchf *) overlay;\n    s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);\n\n    if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||\n        s->pending_buf == Z_NULL) {\n        s->status = FINISH_STATE;\n        strm->msg = (char*)ERR_MSG(Z_MEM_ERROR);\n        deflateEnd (strm);\n        return Z_MEM_ERROR;\n    }\n    s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n    s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n\n    s->level = level;\n    s->strategy = strategy;\n    s->method = (Byte)method;\n\n    return deflateReset(strm);\n}\n\n/* ========================================================================= */\nint ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)\n    z_streamp strm;\n    const Bytef *dictionary;\n    uInt  dictLength;\n{\n    deflate_state *s;\n    uInt length = dictLength;\n    uInt n;\n    IPos hash_head = 0;\n\n    if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL ||\n        strm->state->wrap == 2 ||\n        (strm->state->wrap == 1 && strm->state->status != INIT_STATE))\n        return Z_STREAM_ERROR;\n\n    s = strm->state;\n    if (s->wrap)\n        strm->adler = adler32(strm->adler, dictionary, dictLength);\n\n    if (length < MIN_MATCH) return Z_OK;\n    if (length > s->w_size) {\n        length = s->w_size;\n        dictionary += dictLength - length; /* use the tail of the dictionary */\n    }\n    zmemcpy(s->window, dictionary, length);\n    s->strstart = length;\n    s->block_start = (long)length;\n\n    /* Insert all strings in the hash table (except for the last two bytes).\n     * s->lookahead stays null, so s->ins_h will be recomputed at the next\n     * call of fill_window.\n     */\n    s->ins_h = s->window[0];\n    UPDATE_HASH(s, s->ins_h, s->window[1]);\n    for (n = 0; n <= length - MIN_MATCH; n++) {\n        INSERT_STRING(s, n, hash_head);\n    }\n    if (hash_head) hash_head = 0;  /* to make compiler happy */\n    return Z_OK;\n}\n\n/* ========================================================================= */\nint ZEXPORT deflateReset (strm)\n    z_streamp strm;\n{\n    deflate_state *s;\n\n    if (strm == Z_NULL || strm->state == Z_NULL ||\n        strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) {\n        return Z_STREAM_ERROR;\n    }\n\n    strm->total_in = strm->total_out = 0;\n    strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */\n    strm->data_type = Z_UNKNOWN;\n\n    s = (deflate_state *)strm->state;\n    s->pending = 0;\n    s->pending_out = s->pending_buf;\n\n    if (s->wrap < 0) {\n        s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */\n    }\n    s->status = s->wrap ? INIT_STATE : BUSY_STATE;\n    strm->adler =\n#ifdef GZIP\n        s->wrap == 2 ? crc32(0L, Z_NULL, 0) :\n#endif\n        adler32(0L, Z_NULL, 0);\n    s->last_flush = Z_NO_FLUSH;\n\n    _tr_init(s);\n    lm_init(s);\n\n    return Z_OK;\n}\n\n/* ========================================================================= */\nint ZEXPORT deflateSetHeader (strm, head)\n    z_streamp strm;\n    gz_headerp head;\n{\n    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;\n    if (strm->state->wrap != 2) return Z_STREAM_ERROR;\n    strm->state->gzhead = head;\n    return Z_OK;\n}\n\n/* ========================================================================= */\nint ZEXPORT deflatePrime (strm, bits, value)\n    z_streamp strm;\n    int bits;\n    int value;\n{\n    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;\n    strm->state->bi_valid = bits;\n    strm->state->bi_buf = (ush)(value & ((1 << bits) - 1));\n    return Z_OK;\n}\n\n/* ========================================================================= */\nint ZEXPORT deflateParams(strm, level, strategy)\n    z_streamp strm;\n    int level;\n    int strategy;\n{\n    deflate_state *s;\n    compress_func func;\n    int err = Z_OK;\n\n    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;\n    s = strm->state;\n\n#ifdef FASTEST\n    if (level != 0) level = 1;\n#else\n    if (level == Z_DEFAULT_COMPRESSION) level = 6;\n#endif\n    if (level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) {\n        return Z_STREAM_ERROR;\n    }\n    func = configuration_table[s->level].func;\n\n    if ((strategy != s->strategy || func != configuration_table[level].func) &&\n        strm->total_in != 0) {\n        /* Flush the last buffer: */\n        err = deflate(strm, Z_BLOCK);\n    }\n    if (s->level != level) {\n        s->level = level;\n        s->max_lazy_match   = configuration_table[level].max_lazy;\n        s->good_match       = configuration_table[level].good_length;\n        s->nice_match       = configuration_table[level].nice_length;\n        s->max_chain_length = configuration_table[level].max_chain;\n    }\n    s->strategy = strategy;\n    return err;\n}\n\n/* ========================================================================= */\nint ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain)\n    z_streamp strm;\n    int good_length;\n    int max_lazy;\n    int nice_length;\n    int max_chain;\n{\n    deflate_state *s;\n\n    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;\n    s = strm->state;\n    s->good_match = good_length;\n    s->max_lazy_match = max_lazy;\n    s->nice_match = nice_length;\n    s->max_chain_length = max_chain;\n    return Z_OK;\n}\n\n/* =========================================================================\n * For the default windowBits of 15 and memLevel of 8, this function returns\n * a close to exact, as well as small, upper bound on the compressed size.\n * They are coded as constants here for a reason--if the #define's are\n * changed, then this function needs to be changed as well.  The return\n * value for 15 and 8 only works for those exact settings.\n *\n * For any setting other than those defaults for windowBits and memLevel,\n * the value returned is a conservative worst case for the maximum expansion\n * resulting from using fixed blocks instead of stored blocks, which deflate\n * can emit on compressed data for some combinations of the parameters.\n *\n * This function could be more sophisticated to provide closer upper bounds for\n * every combination of windowBits and memLevel.  But even the conservative\n * upper bound of about 14% expansion does not seem onerous for output buffer\n * allocation.\n */\nuLong ZEXPORT deflateBound(strm, sourceLen)\n    z_streamp strm;\n    uLong sourceLen;\n{\n    deflate_state *s;\n    uLong complen, wraplen;\n    Bytef *str;\n\n    /* conservative upper bound for compressed data */\n    complen = sourceLen +\n              ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5;\n\n    /* if can't get parameters, return conservative bound plus zlib wrapper */\n    if (strm == Z_NULL || strm->state == Z_NULL)\n        return complen + 6;\n\n    /* compute wrapper length */\n    s = strm->state;\n    switch (s->wrap) {\n    case 0:                                 /* raw deflate */\n        wraplen = 0;\n        break;\n    case 1:                                 /* zlib wrapper */\n        wraplen = 6 + (s->strstart ? 4 : 0);\n        break;\n    case 2:                                 /* gzip wrapper */\n        wraplen = 18;\n        if (s->gzhead != Z_NULL) {          /* user-supplied gzip header */\n            if (s->gzhead->extra != Z_NULL)\n                wraplen += 2 + s->gzhead->extra_len;\n            str = s->gzhead->name;\n            if (str != Z_NULL)\n                do {\n                    wraplen++;\n                } while (*str++);\n            str = s->gzhead->comment;\n            if (str != Z_NULL)\n                do {\n                    wraplen++;\n                } while (*str++);\n            if (s->gzhead->hcrc)\n                wraplen += 2;\n        }\n        break;\n    default:                                /* for compiler happiness */\n        wraplen = 6;\n    }\n\n    /* if not default parameters, return conservative bound */\n    if (s->w_bits != 15 || s->hash_bits != 8 + 7)\n        return complen + wraplen;\n\n    /* default settings: return tight bound for that case */\n    return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +\n           (sourceLen >> 25) + 13 - 6 + wraplen;\n}\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nlocal void putShortMSB (s, b)\n    deflate_state *s;\n    uInt b;\n{\n    put_byte(s, (Byte)(b >> 8));\n    put_byte(s, (Byte)(b & 0xff));\n}\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->next_out buffer and copying into it.\n * (See also read_buf()).\n */\nlocal void flush_pending(strm)\n    z_streamp strm;\n{\n    unsigned len = strm->state->pending;\n\n    if (len > strm->avail_out) len = strm->avail_out;\n    if (len == 0) return;\n\n    zmemcpy(strm->next_out, strm->state->pending_out, len);\n    strm->next_out  += len;\n    strm->state->pending_out  += len;\n    strm->total_out += len;\n    strm->avail_out  -= len;\n    strm->state->pending -= len;\n    if (strm->state->pending == 0) {\n        strm->state->pending_out = strm->state->pending_buf;\n    }\n}\n\n/* ========================================================================= */\nint ZEXPORT deflate (strm, flush)\n    z_streamp strm;\n    int flush;\n{\n    int old_flush; /* value of flush param for previous deflate call */\n    deflate_state *s;\n\n    if (strm == Z_NULL || strm->state == Z_NULL ||\n        flush > Z_BLOCK || flush < 0) {\n        return Z_STREAM_ERROR;\n    }\n    s = strm->state;\n\n    if (strm->next_out == Z_NULL ||\n        (strm->next_in == Z_NULL && strm->avail_in != 0) ||\n        (s->status == FINISH_STATE && flush != Z_FINISH)) {\n        ERR_RETURN(strm, Z_STREAM_ERROR);\n    }\n    if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);\n\n    s->strm = strm; /* just in case */\n    old_flush = s->last_flush;\n    s->last_flush = flush;\n\n    /* Write the header */\n    if (s->status == INIT_STATE) {\n#ifdef GZIP\n        if (s->wrap == 2) {\n            strm->adler = crc32(0L, Z_NULL, 0);\n            put_byte(s, 31);\n            put_byte(s, 139);\n            put_byte(s, 8);\n            if (s->gzhead == Z_NULL) {\n                put_byte(s, 0);\n                put_byte(s, 0);\n                put_byte(s, 0);\n                put_byte(s, 0);\n                put_byte(s, 0);\n                put_byte(s, s->level == 9 ? 2 :\n                            (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?\n                             4 : 0));\n                put_byte(s, OS_CODE);\n                s->status = BUSY_STATE;\n            }\n            else {\n                put_byte(s, (s->gzhead->text ? 1 : 0) +\n                            (s->gzhead->hcrc ? 2 : 0) +\n                            (s->gzhead->extra == Z_NULL ? 0 : 4) +\n                            (s->gzhead->name == Z_NULL ? 0 : 8) +\n                            (s->gzhead->comment == Z_NULL ? 0 : 16)\n                        );\n                put_byte(s, (Byte)(s->gzhead->time & 0xff));\n                put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff));\n                put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff));\n                put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff));\n                put_byte(s, s->level == 9 ? 2 :\n                            (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?\n                             4 : 0));\n                put_byte(s, s->gzhead->os & 0xff);\n                if (s->gzhead->extra != Z_NULL) {\n                    put_byte(s, s->gzhead->extra_len & 0xff);\n                    put_byte(s, (s->gzhead->extra_len >> 8) & 0xff);\n                }\n                if (s->gzhead->hcrc)\n                    strm->adler = crc32(strm->adler, s->pending_buf,\n                                        s->pending);\n                s->gzindex = 0;\n                s->status = EXTRA_STATE;\n            }\n        }\n        else\n#endif\n        {\n            uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;\n            uInt level_flags;\n\n            if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2)\n                level_flags = 0;\n            else if (s->level < 6)\n                level_flags = 1;\n            else if (s->level == 6)\n                level_flags = 2;\n            else\n                level_flags = 3;\n            header |= (level_flags << 6);\n            if (s->strstart != 0) header |= PRESET_DICT;\n            header += 31 - (header % 31);\n\n            s->status = BUSY_STATE;\n            putShortMSB(s, header);\n\n            /* Save the adler32 of the preset dictionary: */\n            if (s->strstart != 0) {\n                putShortMSB(s, (uInt)(strm->adler >> 16));\n                putShortMSB(s, (uInt)(strm->adler & 0xffff));\n            }\n            strm->adler = adler32(0L, Z_NULL, 0);\n        }\n    }\n#ifdef GZIP\n    if (s->status == EXTRA_STATE) {\n        if (s->gzhead->extra != Z_NULL) {\n            uInt beg = s->pending;  /* start of bytes to update crc */\n\n            while (s->gzindex < (s->gzhead->extra_len & 0xffff)) {\n                if (s->pending == s->pending_buf_size) {\n                    if (s->gzhead->hcrc && s->pending > beg)\n                        strm->adler = crc32(strm->adler, s->pending_buf + beg,\n                                            s->pending - beg);\n                    flush_pending(strm);\n                    beg = s->pending;\n                    if (s->pending == s->pending_buf_size)\n                        break;\n                }\n                put_byte(s, s->gzhead->extra[s->gzindex]);\n                s->gzindex++;\n            }\n            if (s->gzhead->hcrc && s->pending > beg)\n                strm->adler = crc32(strm->adler, s->pending_buf + beg,\n                                    s->pending - beg);\n            if (s->gzindex == s->gzhead->extra_len) {\n                s->gzindex = 0;\n                s->status = NAME_STATE;\n            }\n        }\n        else\n            s->status = NAME_STATE;\n    }\n    if (s->status == NAME_STATE) {\n        if (s->gzhead->name != Z_NULL) {\n            uInt beg = s->pending;  /* start of bytes to update crc */\n            int val;\n\n            do {\n                if (s->pending == s->pending_buf_size) {\n                    if (s->gzhead->hcrc && s->pending > beg)\n                        strm->adler = crc32(strm->adler, s->pending_buf + beg,\n                                            s->pending - beg);\n                    flush_pending(strm);\n                    beg = s->pending;\n                    if (s->pending == s->pending_buf_size) {\n                        val = 1;\n                        break;\n                    }\n                }\n                val = s->gzhead->name[s->gzindex++];\n                put_byte(s, val);\n            } while (val != 0);\n            if (s->gzhead->hcrc && s->pending > beg)\n                strm->adler = crc32(strm->adler, s->pending_buf + beg,\n                                    s->pending - beg);\n            if (val == 0) {\n                s->gzindex = 0;\n                s->status = COMMENT_STATE;\n            }\n        }\n        else\n            s->status = COMMENT_STATE;\n    }\n    if (s->status == COMMENT_STATE) {\n        if (s->gzhead->comment != Z_NULL) {\n            uInt beg = s->pending;  /* start of bytes to update crc */\n            int val;\n\n            do {\n                if (s->pending == s->pending_buf_size) {\n                    if (s->gzhead->hcrc && s->pending > beg)\n                        strm->adler = crc32(strm->adler, s->pending_buf + beg,\n                                            s->pending - beg);\n                    flush_pending(strm);\n                    beg = s->pending;\n                    if (s->pending == s->pending_buf_size) {\n                        val = 1;\n                        break;\n                    }\n                }\n                val = s->gzhead->comment[s->gzindex++];\n                put_byte(s, val);\n            } while (val != 0);\n            if (s->gzhead->hcrc && s->pending > beg)\n                strm->adler = crc32(strm->adler, s->pending_buf + beg,\n                                    s->pending - beg);\n            if (val == 0)\n                s->status = HCRC_STATE;\n        }\n        else\n            s->status = HCRC_STATE;\n    }\n    if (s->status == HCRC_STATE) {\n        if (s->gzhead->hcrc) {\n            if (s->pending + 2 > s->pending_buf_size)\n                flush_pending(strm);\n            if (s->pending + 2 <= s->pending_buf_size) {\n                put_byte(s, (Byte)(strm->adler & 0xff));\n                put_byte(s, (Byte)((strm->adler >> 8) & 0xff));\n                strm->adler = crc32(0L, Z_NULL, 0);\n                s->status = BUSY_STATE;\n            }\n        }\n        else\n            s->status = BUSY_STATE;\n    }\n#endif\n\n    /* Flush as much pending output as possible */\n    if (s->pending != 0) {\n        flush_pending(strm);\n        if (strm->avail_out == 0) {\n            /* Since avail_out is 0, deflate will be called again with\n             * more output space, but possibly with both pending and\n             * avail_in equal to zero. There won't be anything to do,\n             * but this is not an error situation so make sure we\n             * return OK instead of BUF_ERROR at next call of deflate:\n             */\n            s->last_flush = -1;\n            return Z_OK;\n        }\n\n    /* Make sure there is something to do and avoid duplicate consecutive\n     * flushes. For repeated and useless calls with Z_FINISH, we keep\n     * returning Z_STREAM_END instead of Z_BUF_ERROR.\n     */\n    } else if (strm->avail_in == 0 && flush <= old_flush &&\n               flush != Z_FINISH) {\n        ERR_RETURN(strm, Z_BUF_ERROR);\n    }\n\n    /* User must not provide more input after the first FINISH: */\n    if (s->status == FINISH_STATE && strm->avail_in != 0) {\n        ERR_RETURN(strm, Z_BUF_ERROR);\n    }\n\n    /* Start a new block or continue the current one.\n     */\n    if (strm->avail_in != 0 || s->lookahead != 0 ||\n        (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {\n        block_state bstate;\n\n        bstate = s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :\n                    (s->strategy == Z_RLE ? deflate_rle(s, flush) :\n                        (*(configuration_table[s->level].func))(s, flush));\n\n        if (bstate == finish_started || bstate == finish_done) {\n            s->status = FINISH_STATE;\n        }\n        if (bstate == need_more || bstate == finish_started) {\n            if (strm->avail_out == 0) {\n                s->last_flush = -1; /* avoid BUF_ERROR next call, see above */\n            }\n            return Z_OK;\n            /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n             * of deflate should use the same flush parameter to make sure\n             * that the flush is complete. So we don't have to output an\n             * empty block here, this will be done at next call. This also\n             * ensures that for a very small output buffer, we emit at most\n             * one empty block.\n             */\n        }\n        if (bstate == block_done) {\n            if (flush == Z_PARTIAL_FLUSH) {\n                _tr_align(s);\n            } else if (flush != Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n                _tr_stored_block(s, (char*)0, 0L, 0);\n                /* For a full flush, this empty block will be recognized\n                 * as a special marker by inflate_sync().\n                 */\n                if (flush == Z_FULL_FLUSH) {\n                    CLEAR_HASH(s);             /* forget history */\n                    if (s->lookahead == 0) {\n                        s->strstart = 0;\n                        s->block_start = 0L;\n                    }\n                }\n            }\n            flush_pending(strm);\n            if (strm->avail_out == 0) {\n              s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n              return Z_OK;\n            }\n        }\n    }\n    Assert(strm->avail_out > 0, \"bug2\");\n\n    if (flush != Z_FINISH) return Z_OK;\n    if (s->wrap <= 0) return Z_STREAM_END;\n\n    /* Write the trailer */\n#ifdef GZIP\n    if (s->wrap == 2) {\n        put_byte(s, (Byte)(strm->adler & 0xff));\n        put_byte(s, (Byte)((strm->adler >> 8) & 0xff));\n        put_byte(s, (Byte)((strm->adler >> 16) & 0xff));\n        put_byte(s, (Byte)((strm->adler >> 24) & 0xff));\n        put_byte(s, (Byte)(strm->total_in & 0xff));\n        put_byte(s, (Byte)((strm->total_in >> 8) & 0xff));\n        put_byte(s, (Byte)((strm->total_in >> 16) & 0xff));\n        put_byte(s, (Byte)((strm->total_in >> 24) & 0xff));\n    }\n    else\n#endif\n    {\n        putShortMSB(s, (uInt)(strm->adler >> 16));\n        putShortMSB(s, (uInt)(strm->adler & 0xffff));\n    }\n    flush_pending(strm);\n    /* If avail_out is zero, the application will call deflate again\n     * to flush the rest.\n     */\n    if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */\n    return s->pending != 0 ? Z_OK : Z_STREAM_END;\n}\n\n/* ========================================================================= */\nint ZEXPORT deflateEnd (strm)\n    z_streamp strm;\n{\n    int status;\n\n    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;\n\n    status = strm->state->status;\n    if (status != INIT_STATE &&\n        status != EXTRA_STATE &&\n        status != NAME_STATE &&\n        status != COMMENT_STATE &&\n        status != HCRC_STATE &&\n        status != BUSY_STATE &&\n        status != FINISH_STATE) {\n      return Z_STREAM_ERROR;\n    }\n\n    /* Deallocate in reverse order of allocations: */\n    TRY_FREE(strm, strm->state->pending_buf);\n    TRY_FREE(strm, strm->state->head);\n    TRY_FREE(strm, strm->state->prev);\n    TRY_FREE(strm, strm->state->window);\n\n    ZFREE(strm, strm->state);\n    strm->state = Z_NULL;\n\n    return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;\n}\n\n/* =========================================================================\n * Copy the source state to the destination state.\n * To simplify the source, this is not supported for 16-bit MSDOS (which\n * doesn't have enough memory anyway to duplicate compression states).\n */\nint ZEXPORT deflateCopy (dest, source)\n    z_streamp dest;\n    z_streamp source;\n{\n#ifdef MAXSEG_64K\n    return Z_STREAM_ERROR;\n#else\n    deflate_state *ds;\n    deflate_state *ss;\n    ushf *overlay;\n\n\n    if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) {\n        return Z_STREAM_ERROR;\n    }\n\n    ss = source->state;\n\n    zmemcpy(dest, source, sizeof(z_stream));\n\n    ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));\n    if (ds == Z_NULL) return Z_MEM_ERROR;\n    dest->state = (struct internal_state FAR *) ds;\n    zmemcpy(ds, ss, sizeof(deflate_state));\n    ds->strm = dest;\n\n    ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));\n    ds->prev   = (Posf *)  ZALLOC(dest, ds->w_size, sizeof(Pos));\n    ds->head   = (Posf *)  ZALLOC(dest, ds->hash_size, sizeof(Pos));\n    overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2);\n    ds->pending_buf = (uchf *) overlay;\n\n    if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||\n        ds->pending_buf == Z_NULL) {\n        deflateEnd (dest);\n        return Z_MEM_ERROR;\n    }\n    /* following zmemcpy do not work for 16-bit MSDOS */\n    zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));\n    zmemcpy(ds->prev, ss->prev, ds->w_size * sizeof(Pos));\n    zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos));\n    zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);\n\n    ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);\n    ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);\n    ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;\n\n    ds->l_desc.dyn_tree = ds->dyn_ltree;\n    ds->d_desc.dyn_tree = ds->dyn_dtree;\n    ds->bl_desc.dyn_tree = ds->bl_tree;\n\n    return Z_OK;\n#endif /* MAXSEG_64K */\n}\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read.  All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->next_in buffer and copying from it.\n * (See also flush_pending()).\n */\nlocal int read_buf(strm, buf, size)\n    z_streamp strm;\n    Bytef *buf;\n    unsigned size;\n{\n    unsigned len = strm->avail_in;\n\n    if (len > size) len = size;\n    if (len == 0) return 0;\n\n    strm->avail_in  -= len;\n\n    if (strm->state->wrap == 1) {\n        strm->adler = adler32(strm->adler, strm->next_in, len);\n    }\n#ifdef GZIP\n    else if (strm->state->wrap == 2) {\n        strm->adler = crc32(strm->adler, strm->next_in, len);\n    }\n#endif\n    zmemcpy(buf, strm->next_in, len);\n    strm->next_in  += len;\n    strm->total_in += len;\n\n    return (int)len;\n}\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nlocal void lm_init (s)\n    deflate_state *s;\n{\n    s->window_size = (ulg)2L*s->w_size;\n\n    CLEAR_HASH(s);\n\n    /* Set the default configuration parameters:\n     */\n    s->max_lazy_match   = configuration_table[s->level].max_lazy;\n    s->good_match       = configuration_table[s->level].good_length;\n    s->nice_match       = configuration_table[s->level].nice_length;\n    s->max_chain_length = configuration_table[s->level].max_chain;\n\n    s->strstart = 0;\n    s->block_start = 0L;\n    s->lookahead = 0;\n    s->match_length = s->prev_length = MIN_MATCH-1;\n    s->match_available = 0;\n    s->ins_h = 0;\n#ifndef FASTEST\n#ifdef ASMV\n    match_init(); /* initialize the asm code */\n#endif\n#endif\n}\n\n#ifndef FASTEST\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\n#ifndef ASMV\n/* For 80x86 and 680x0, an optimized version will be provided in match.asm or\n * match.S. The code will be functionally equivalent.\n */\nlocal uInt longest_match(s, cur_match)\n    deflate_state *s;\n    IPos cur_match;                             /* current match */\n{\n    unsigned chain_length = s->max_chain_length;/* max hash chain length */\n    register Bytef *scan = s->window + s->strstart; /* current string */\n    register Bytef *match;                       /* matched string */\n    register int len;                           /* length of current match */\n    int best_len = s->prev_length;              /* best match length so far */\n    int nice_match = s->nice_match;             /* stop if match long enough */\n    IPos limit = s->strstart > (IPos)MAX_DIST(s) ?\n        s->strstart - (IPos)MAX_DIST(s) : NIL;\n    /* Stop when cur_match becomes <= limit. To simplify the code,\n     * we prevent matches with the string of window index 0.\n     */\n    Posf *prev = s->prev;\n    uInt wmask = s->w_mask;\n\n#ifdef UNALIGNED_OK\n    /* Compare two bytes at a time. Note: this is not always beneficial.\n     * Try with and without -DUNALIGNED_OK to check.\n     */\n    register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;\n    register ush scan_start = *(ushf*)scan;\n    register ush scan_end   = *(ushf*)(scan+best_len-1);\n#else\n    register Bytef *strend = s->window + s->strstart + MAX_MATCH;\n    register Byte scan_end1  = scan[best_len-1];\n    register Byte scan_end   = scan[best_len];\n#endif\n\n    /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n     * It is easy to get rid of this optimization if necessary.\n     */\n    Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n    /* Do not waste too much time if we already have a good match: */\n    if (s->prev_length >= s->good_match) {\n        chain_length >>= 2;\n    }\n    /* Do not look for matches beyond the end of the input. This is necessary\n     * to make deflate deterministic.\n     */\n    if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;\n\n    Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n    do {\n        Assert(cur_match < s->strstart, \"no future\");\n        match = s->window + cur_match;\n\n        /* Skip to next match if the match length cannot increase\n         * or if the match length is less than 2.  Note that the checks below\n         * for insufficient lookahead only occur occasionally for performance\n         * reasons.  Therefore uninitialized memory will be accessed, and\n         * conditional jumps will be made that depend on those values.\n         * However the length of the match is limited to the lookahead, so\n         * the output of deflate is not affected by the uninitialized values.\n         */\n#if (defined(UNALIGNED_OK) && MAX_MATCH == 258)\n        /* This code assumes sizeof(unsigned short) == 2. Do not use\n         * UNALIGNED_OK if your compiler uses a different size.\n         */\n        if (*(ushf*)(match+best_len-1) != scan_end ||\n            *(ushf*)match != scan_start) continue;\n\n        /* It is not necessary to compare scan[2] and match[2] since they are\n         * always equal when the other bytes match, given that the hash keys\n         * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at\n         * strstart+3, +5, ... up to strstart+257. We check for insufficient\n         * lookahead only every 4th comparison; the 128th check will be made\n         * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is\n         * necessary to put more guard bytes at the end of the window, or\n         * to check more often for insufficient lookahead.\n         */\n        Assert(scan[2] == match[2], \"scan[2]?\");\n        scan++, match++;\n        do {\n        } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) &&\n                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&\n                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&\n                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&\n                 scan < strend);\n        /* The funny \"do {}\" generates better code on most compilers */\n\n        /* Here, scan <= window+strstart+257 */\n        Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n        if (*scan == *match) scan++;\n\n        len = (MAX_MATCH - 1) - (int)(strend-scan);\n        scan = strend - (MAX_MATCH-1);\n\n#else /* UNALIGNED_OK */\n\n        if (match[best_len]   != scan_end  ||\n            match[best_len-1] != scan_end1 ||\n            *match            != *scan     ||\n            *++match          != scan[1])      continue;\n\n        /* The check at best_len-1 can be removed because it will be made\n         * again later. (This heuristic is not always a win.)\n         * It is not necessary to compare scan[2] and match[2] since they\n         * are always equal when the other bytes match, given that\n         * the hash keys are equal and that HASH_BITS >= 8.\n         */\n        scan += 2, match++;\n        Assert(*scan == *match, \"match[2]?\");\n\n        /* We check for insufficient lookahead only every 8th comparison;\n         * the 256th check will be made at strstart+258.\n         */\n        do {\n        } while (*++scan == *++match && *++scan == *++match &&\n                 *++scan == *++match && *++scan == *++match &&\n                 *++scan == *++match && *++scan == *++match &&\n                 *++scan == *++match && *++scan == *++match &&\n                 scan < strend);\n\n        Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n        len = MAX_MATCH - (int)(strend - scan);\n        scan = strend - MAX_MATCH;\n\n#endif /* UNALIGNED_OK */\n\n        if (len > best_len) {\n            s->match_start = cur_match;\n            best_len = len;\n            if (len >= nice_match) break;\n#ifdef UNALIGNED_OK\n            scan_end = *(ushf*)(scan+best_len-1);\n#else\n            scan_end1  = scan[best_len-1];\n            scan_end   = scan[best_len];\n#endif\n        }\n    } while ((cur_match = prev[cur_match & wmask]) > limit\n             && --chain_length != 0);\n\n    if ((uInt)best_len <= s->lookahead) return (uInt)best_len;\n    return s->lookahead;\n}\n#endif /* ASMV */\n\n#else /* FASTEST */\n\n/* ---------------------------------------------------------------------------\n * Optimized version for FASTEST only\n */\nlocal uInt longest_match(s, cur_match)\n    deflate_state *s;\n    IPos cur_match;                             /* current match */\n{\n    register Bytef *scan = s->window + s->strstart; /* current string */\n    register Bytef *match;                       /* matched string */\n    register int len;                           /* length of current match */\n    register Bytef *strend = s->window + s->strstart + MAX_MATCH;\n\n    /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n     * It is easy to get rid of this optimization if necessary.\n     */\n    Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n    Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n    Assert(cur_match < s->strstart, \"no future\");\n\n    match = s->window + cur_match;\n\n    /* Return failure if the match length is less than 2:\n     */\n    if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1;\n\n    /* The check at best_len-1 can be removed because it will be made\n     * again later. (This heuristic is not always a win.)\n     * It is not necessary to compare scan[2] and match[2] since they\n     * are always equal when the other bytes match, given that\n     * the hash keys are equal and that HASH_BITS >= 8.\n     */\n    scan += 2, match += 2;\n    Assert(*scan == *match, \"match[2]?\");\n\n    /* We check for insufficient lookahead only every 8th comparison;\n     * the 256th check will be made at strstart+258.\n     */\n    do {\n    } while (*++scan == *++match && *++scan == *++match &&\n             *++scan == *++match && *++scan == *++match &&\n             *++scan == *++match && *++scan == *++match &&\n             *++scan == *++match && *++scan == *++match &&\n             scan < strend);\n\n    Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n    len = MAX_MATCH - (int)(strend - scan);\n\n    if (len < MIN_MATCH) return MIN_MATCH - 1;\n\n    s->match_start = cur_match;\n    return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead;\n}\n\n#endif /* FASTEST */\n\n#ifdef DEBUG\n/* ===========================================================================\n * Check that the match at match_start is indeed a match.\n */\nlocal void check_match(s, start, match, length)\n    deflate_state *s;\n    IPos start, match;\n    int length;\n{\n    /* check that the match is indeed a match */\n    if (zmemcmp(s->window + match,\n                s->window + start, length) != EQUAL) {\n        fprintf(stderr, \" start %u, match %u, length %d\\n\",\n                start, match, length);\n        do {\n            fprintf(stderr, \"%c%c\", s->window[match++], s->window[start++]);\n        } while (--length != 0);\n        z_error(\"invalid match\");\n    }\n    if (z_verbose > 1) {\n        fprintf(stderr,\"\\\\[%d,%d]\", start-match, length);\n        do { putc(s->window[start++], stderr); } while (--length != 0);\n    }\n}\n#else\n#  define check_match(s, start, match, length)\n#endif /* DEBUG */\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n *    At least one byte has been read, or avail_in == 0; reads are\n *    performed for at least two bytes (required for the zip translate_eol\n *    option -- not supported here).\n */\nlocal void fill_window(s)\n    deflate_state *s;\n{\n    register unsigned n, m;\n    register Posf *p;\n    unsigned more;    /* Amount of free space at the end of the window. */\n    uInt wsize = s->w_size;\n\n    do {\n        more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);\n\n        /* Deal with !@#$% 64K limit: */\n        if (sizeof(int) <= 2) {\n            if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n                more = wsize;\n\n            } else if (more == (unsigned)(-1)) {\n                /* Very unlikely, but possible on 16 bit machine if\n                 * strstart == 0 && lookahead == 1 (input done a byte at time)\n                 */\n                more--;\n            }\n        }\n\n        /* If the window is almost full and there is insufficient lookahead,\n         * move the upper half to the lower one to make room in the upper half.\n         */\n        if (s->strstart >= wsize+MAX_DIST(s)) {\n\n            zmemcpy(s->window, s->window+wsize, (unsigned)wsize);\n            s->match_start -= wsize;\n            s->strstart    -= wsize; /* we now have strstart >= MAX_DIST */\n            s->block_start -= (long) wsize;\n\n            /* Slide the hash table (could be avoided with 32 bit values\n               at the expense of memory usage). We slide even when level == 0\n               to keep the hash table consistent if we switch back to level > 0\n               later. (Using level 0 permanently is not an optimal usage of\n               zlib, so we don't care about this pathological case.)\n             */\n            n = s->hash_size;\n            p = &s->head[n];\n            do {\n                m = *--p;\n                *p = (Pos)(m >= wsize ? m-wsize : NIL);\n            } while (--n);\n\n            n = wsize;\n#ifndef FASTEST\n            p = &s->prev[n];\n            do {\n                m = *--p;\n                *p = (Pos)(m >= wsize ? m-wsize : NIL);\n                /* If n is not on any hash chain, prev[n] is garbage but\n                 * its value will never be used.\n                 */\n            } while (--n);\n#endif\n            more += wsize;\n        }\n        if (s->strm->avail_in == 0) return;\n\n        /* If there was no sliding:\n         *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n         *    more == window_size - lookahead - strstart\n         * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n         * => more >= window_size - 2*WSIZE + 2\n         * In the BIG_MEM or MMAP case (not yet supported),\n         *   window_size == input_size + MIN_LOOKAHEAD  &&\n         *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n         * Otherwise, window_size == 2*WSIZE so more >= 2.\n         * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n         */\n        Assert(more >= 2, \"more < 2\");\n\n        n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more);\n        s->lookahead += n;\n\n        /* Initialize the hash value now that we have some input: */\n        if (s->lookahead >= MIN_MATCH) {\n            s->ins_h = s->window[s->strstart];\n            UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);\n#if MIN_MATCH != 3\n            Call UPDATE_HASH() MIN_MATCH-3 more times\n#endif\n        }\n        /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n         * but this is not important since only literal bytes will be emitted.\n         */\n\n    } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0);\n\n    /* If the WIN_INIT bytes after the end of the current data have never been\n     * written, then zero those bytes in order to avoid memory check reports of\n     * the use of uninitialized (or uninitialised as Julian writes) bytes by\n     * the longest match routines.  Update the high water mark for the next\n     * time through here.  WIN_INIT is set to MAX_MATCH since the longest match\n     * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n     */\n    if (s->high_water < s->window_size) {\n        ulg curr = s->strstart + (ulg)(s->lookahead);\n        ulg init;\n\n        if (s->high_water < curr) {\n            /* Previous high water mark below current data -- zero WIN_INIT\n             * bytes or up to end of window, whichever is less.\n             */\n            init = s->window_size - curr;\n            if (init > WIN_INIT)\n                init = WIN_INIT;\n            zmemzero(s->window + curr, (unsigned)init);\n            s->high_water = curr + init;\n        }\n        else if (s->high_water < (ulg)curr + WIN_INIT) {\n            /* High water mark at or above current data, but below current data\n             * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n             * to end of window, whichever is less.\n             */\n            init = (ulg)curr + WIN_INIT - s->high_water;\n            if (init > s->window_size - s->high_water)\n                init = s->window_size - s->high_water;\n            zmemzero(s->window + s->high_water, (unsigned)init);\n            s->high_water += init;\n        }\n    }\n}\n\n/* ===========================================================================\n * Flush the current block, with given end-of-file flag.\n * IN assertion: strstart is set to the end of the current match.\n */\n#define FLUSH_BLOCK_ONLY(s, last) { \\\n   _tr_flush_block(s, (s->block_start >= 0L ? \\\n                   (charf *)&s->window[(unsigned)s->block_start] : \\\n                   (charf *)Z_NULL), \\\n                (ulg)((long)s->strstart - s->block_start), \\\n                (last)); \\\n   s->block_start = s->strstart; \\\n   flush_pending(s->strm); \\\n   Tracev((stderr,\"[FLUSH]\")); \\\n}\n\n/* Same but force premature exit if necessary. */\n#define FLUSH_BLOCK(s, last) { \\\n   FLUSH_BLOCK_ONLY(s, last); \\\n   if (s->strm->avail_out == 0) return (last) ? finish_started : need_more; \\\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nlocal block_state deflate_stored(s, flush)\n    deflate_state *s;\n    int flush;\n{\n    /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n     * to pending_buf_size, and each stored block has a 5 byte header:\n     */\n    ulg max_block_size = 0xffff;\n    ulg max_start;\n\n    if (max_block_size > s->pending_buf_size - 5) {\n        max_block_size = s->pending_buf_size - 5;\n    }\n\n    /* Copy as much as possible from input to output: */\n    for (;;) {\n        /* Fill the window as much as possible: */\n        if (s->lookahead <= 1) {\n\n            Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n                   s->block_start >= (long)s->w_size, \"slide too late\");\n\n            fill_window(s);\n            if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;\n\n            if (s->lookahead == 0) break; /* flush the current block */\n        }\n        Assert(s->block_start >= 0L, \"block gone\");\n\n        s->strstart += s->lookahead;\n        s->lookahead = 0;\n\n        /* Emit a stored block if pending_buf will be full: */\n        max_start = s->block_start + max_block_size;\n        if (s->strstart == 0 || (ulg)s->strstart >= max_start) {\n            /* strstart == 0 is possible when wraparound on 16-bit machine */\n            s->lookahead = (uInt)(s->strstart - max_start);\n            s->strstart = (uInt)max_start;\n            FLUSH_BLOCK(s, 0);\n        }\n        /* Flush if we may have to slide, otherwise block_start may become\n         * negative and the data will be gone:\n         */\n        if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {\n            FLUSH_BLOCK(s, 0);\n        }\n    }\n    FLUSH_BLOCK(s, flush == Z_FINISH);\n    return flush == Z_FINISH ? finish_done : block_done;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nlocal block_state deflate_fast(s, flush)\n    deflate_state *s;\n    int flush;\n{\n    IPos hash_head;       /* head of the hash chain */\n    int bflush;           /* set if current block must be flushed */\n\n    for (;;) {\n        /* Make sure that we always have enough lookahead, except\n         * at the end of the input file. We need MAX_MATCH bytes\n         * for the next match, plus MIN_MATCH bytes to insert the\n         * string following the next match.\n         */\n        if (s->lookahead < MIN_LOOKAHEAD) {\n            fill_window(s);\n            if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {\n                return need_more;\n            }\n            if (s->lookahead == 0) break; /* flush the current block */\n        }\n\n        /* Insert the string window[strstart .. strstart+2] in the\n         * dictionary, and set hash_head to the head of the hash chain:\n         */\n        hash_head = NIL;\n        if (s->lookahead >= MIN_MATCH) {\n            INSERT_STRING(s, s->strstart, hash_head);\n        }\n\n        /* Find the longest match, discarding those <= prev_length.\n         * At this point we have always match_length < MIN_MATCH\n         */\n        if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) {\n            /* To simplify the code, we prevent matches with the string\n             * of window index 0 (in particular we have to avoid a match\n             * of the string with itself at the start of the input file).\n             */\n            s->match_length = longest_match (s, hash_head);\n            /* longest_match() sets match_start */\n        }\n        if (s->match_length >= MIN_MATCH) {\n            check_match(s, s->strstart, s->match_start, s->match_length);\n\n            _tr_tally_dist(s, s->strstart - s->match_start,\n                           s->match_length - MIN_MATCH, bflush);\n\n            s->lookahead -= s->match_length;\n\n            /* Insert new strings in the hash table only if the match length\n             * is not too large. This saves time but degrades compression.\n             */\n#ifndef FASTEST\n            if (s->match_length <= s->max_insert_length &&\n                s->lookahead >= MIN_MATCH) {\n                s->match_length--; /* string at strstart already in table */\n                do {\n                    s->strstart++;\n                    INSERT_STRING(s, s->strstart, hash_head);\n                    /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n                     * always MIN_MATCH bytes ahead.\n                     */\n                } while (--s->match_length != 0);\n                s->strstart++;\n            } else\n#endif\n            {\n                s->strstart += s->match_length;\n                s->match_length = 0;\n                s->ins_h = s->window[s->strstart];\n                UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);\n#if MIN_MATCH != 3\n                Call UPDATE_HASH() MIN_MATCH-3 more times\n#endif\n                /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n                 * matter since it will be recomputed at next deflate call.\n                 */\n            }\n        } else {\n            /* No match, output a literal byte */\n            Tracevv((stderr,\"%c\", s->window[s->strstart]));\n            _tr_tally_lit (s, s->window[s->strstart], bflush);\n            s->lookahead--;\n            s->strstart++;\n        }\n        if (bflush) FLUSH_BLOCK(s, 0);\n    }\n    FLUSH_BLOCK(s, flush == Z_FINISH);\n    return flush == Z_FINISH ? finish_done : block_done;\n}\n\n#ifndef FASTEST\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nlocal block_state deflate_slow(s, flush)\n    deflate_state *s;\n    int flush;\n{\n    IPos hash_head;          /* head of hash chain */\n    int bflush;              /* set if current block must be flushed */\n\n    /* Process the input block. */\n    for (;;) {\n        /* Make sure that we always have enough lookahead, except\n         * at the end of the input file. We need MAX_MATCH bytes\n         * for the next match, plus MIN_MATCH bytes to insert the\n         * string following the next match.\n         */\n        if (s->lookahead < MIN_LOOKAHEAD) {\n            fill_window(s);\n            if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {\n                return need_more;\n            }\n            if (s->lookahead == 0) break; /* flush the current block */\n        }\n\n        /* Insert the string window[strstart .. strstart+2] in the\n         * dictionary, and set hash_head to the head of the hash chain:\n         */\n        hash_head = NIL;\n        if (s->lookahead >= MIN_MATCH) {\n            INSERT_STRING(s, s->strstart, hash_head);\n        }\n\n        /* Find the longest match, discarding those <= prev_length.\n         */\n        s->prev_length = s->match_length, s->prev_match = s->match_start;\n        s->match_length = MIN_MATCH-1;\n\n        if (hash_head != NIL && s->prev_length < s->max_lazy_match &&\n            s->strstart - hash_head <= MAX_DIST(s)) {\n            /* To simplify the code, we prevent matches with the string\n             * of window index 0 (in particular we have to avoid a match\n             * of the string with itself at the start of the input file).\n             */\n            s->match_length = longest_match (s, hash_head);\n            /* longest_match() sets match_start */\n\n            if (s->match_length <= 5 && (s->strategy == Z_FILTERED\n#if TOO_FAR <= 32767\n                || (s->match_length == MIN_MATCH &&\n                    s->strstart - s->match_start > TOO_FAR)\n#endif\n                )) {\n\n                /* If prev_match is also MIN_MATCH, match_start is garbage\n                 * but we will ignore the current match anyway.\n                 */\n                s->match_length = MIN_MATCH-1;\n            }\n        }\n        /* If there was a match at the previous step and the current\n         * match is not better, output the previous match:\n         */\n        if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) {\n            uInt max_insert = s->strstart + s->lookahead - MIN_MATCH;\n            /* Do not insert strings in hash table beyond this. */\n\n            check_match(s, s->strstart-1, s->prev_match, s->prev_length);\n\n            _tr_tally_dist(s, s->strstart -1 - s->prev_match,\n                           s->prev_length - MIN_MATCH, bflush);\n\n            /* Insert in hash table all strings up to the end of the match.\n             * strstart-1 and strstart are already inserted. If there is not\n             * enough lookahead, the last two strings are not inserted in\n             * the hash table.\n             */\n            s->lookahead -= s->prev_length-1;\n            s->prev_length -= 2;\n            do {\n                if (++s->strstart <= max_insert) {\n                    INSERT_STRING(s, s->strstart, hash_head);\n                }\n            } while (--s->prev_length != 0);\n            s->match_available = 0;\n            s->match_length = MIN_MATCH-1;\n            s->strstart++;\n\n            if (bflush) FLUSH_BLOCK(s, 0);\n\n        } else if (s->match_available) {\n            /* If there was no match at the previous position, output a\n             * single literal. If there was a match but the current match\n             * is longer, truncate the previous match to a single literal.\n             */\n            Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n            _tr_tally_lit(s, s->window[s->strstart-1], bflush);\n            if (bflush) {\n                FLUSH_BLOCK_ONLY(s, 0);\n            }\n            s->strstart++;\n            s->lookahead--;\n            if (s->strm->avail_out == 0) return need_more;\n        } else {\n            /* There is no previous match to compare with, wait for\n             * the next step to decide.\n             */\n            s->match_available = 1;\n            s->strstart++;\n            s->lookahead--;\n        }\n    }\n    Assert (flush != Z_NO_FLUSH, \"no flush?\");\n    if (s->match_available) {\n        Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n        _tr_tally_lit(s, s->window[s->strstart-1], bflush);\n        s->match_available = 0;\n    }\n    FLUSH_BLOCK(s, flush == Z_FINISH);\n    return flush == Z_FINISH ? finish_done : block_done;\n}\n#endif /* FASTEST */\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one.  Do not maintain a hash table.  (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nlocal block_state deflate_rle(s, flush)\n    deflate_state *s;\n    int flush;\n{\n    int bflush;             /* set if current block must be flushed */\n    uInt prev;              /* byte at distance one to match */\n    Bytef *scan, *strend;   /* scan goes up to strend for length of run */\n\n    for (;;) {\n        /* Make sure that we always have enough lookahead, except\n         * at the end of the input file. We need MAX_MATCH bytes\n         * for the longest encodable run.\n         */\n        if (s->lookahead < MAX_MATCH) {\n            fill_window(s);\n            if (s->lookahead < MAX_MATCH && flush == Z_NO_FLUSH) {\n                return need_more;\n            }\n            if (s->lookahead == 0) break; /* flush the current block */\n        }\n\n        /* See how many times the previous byte repeats */\n        s->match_length = 0;\n        if (s->lookahead >= MIN_MATCH && s->strstart > 0) {\n            scan = s->window + s->strstart - 1;\n            prev = *scan;\n            if (prev == *++scan && prev == *++scan && prev == *++scan) {\n                strend = s->window + s->strstart + MAX_MATCH;\n                do {\n                } while (prev == *++scan && prev == *++scan &&\n                         prev == *++scan && prev == *++scan &&\n                         prev == *++scan && prev == *++scan &&\n                         prev == *++scan && prev == *++scan &&\n                         scan < strend);\n                s->match_length = MAX_MATCH - (int)(strend - scan);\n                if (s->match_length > s->lookahead)\n                    s->match_length = s->lookahead;\n            }\n        }\n\n        /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n        if (s->match_length >= MIN_MATCH) {\n            check_match(s, s->strstart, s->strstart - 1, s->match_length);\n\n            _tr_tally_dist(s, 1, s->match_length - MIN_MATCH, bflush);\n\n            s->lookahead -= s->match_length;\n            s->strstart += s->match_length;\n            s->match_length = 0;\n        } else {\n            /* No match, output a literal byte */\n            Tracevv((stderr,\"%c\", s->window[s->strstart]));\n            _tr_tally_lit (s, s->window[s->strstart], bflush);\n            s->lookahead--;\n            s->strstart++;\n        }\n        if (bflush) FLUSH_BLOCK(s, 0);\n    }\n    FLUSH_BLOCK(s, flush == Z_FINISH);\n    return flush == Z_FINISH ? finish_done : block_done;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nlocal block_state deflate_huff(s, flush)\n    deflate_state *s;\n    int flush;\n{\n    int bflush;             /* set if current block must be flushed */\n\n    for (;;) {\n        /* Make sure that we have a literal to write. */\n        if (s->lookahead == 0) {\n            fill_window(s);\n            if (s->lookahead == 0) {\n                if (flush == Z_NO_FLUSH)\n                    return need_more;\n                break;      /* flush the current block */\n            }\n        }\n\n        /* Output a literal byte */\n        s->match_length = 0;\n        Tracevv((stderr,\"%c\", s->window[s->strstart]));\n        _tr_tally_lit (s, s->window[s->strstart], bflush);\n        s->lookahead--;\n        s->strstart++;\n        if (bflush) FLUSH_BLOCK(s, 0);\n    }\n    FLUSH_BLOCK(s, flush == Z_FINISH);\n    return flush == Z_FINISH ? finish_done : block_done;\n}\n"
  },
  {
    "path": "external/zlib/deflate.h",
    "content": "/* deflate.h -- internal compression state\n * Copyright (C) 1995-2010 Jean-loup Gailly\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n/* WARNING: this file should *not* be used by applications. It is\n   part of the implementation of the compression library and is\n   subject to change. Applications should only use zlib.h.\n */\n\n/* @(#) $Id$ */\n\n#ifndef DEFLATE_H\n#define DEFLATE_H\n\n#include \"zutil.h\"\n\n/* define NO_GZIP when compiling if you want to disable gzip header and\n   trailer creation by deflate().  NO_GZIP would be used to avoid linking in\n   the crc code when it is not needed.  For shared libraries, gzip encoding\n   should be left enabled. */\n#ifndef NO_GZIP\n#  define GZIP\n#endif\n\n/* ===========================================================================\n * Internal compression state.\n */\n\n#define LENGTH_CODES 29\n/* number of length codes, not counting the special END_BLOCK code */\n\n#define LITERALS  256\n/* number of literal bytes 0..255 */\n\n#define L_CODES (LITERALS+1+LENGTH_CODES)\n/* number of Literal or Length codes, including the END_BLOCK code */\n\n#define D_CODES   30\n/* number of distance codes */\n\n#define BL_CODES  19\n/* number of codes used to transfer the bit lengths */\n\n#define HEAP_SIZE (2*L_CODES+1)\n/* maximum heap size */\n\n#define MAX_BITS 15\n/* All codes must not exceed MAX_BITS bits */\n\n#define INIT_STATE    42\n#define EXTRA_STATE   69\n#define NAME_STATE    73\n#define COMMENT_STATE 91\n#define HCRC_STATE   103\n#define BUSY_STATE   113\n#define FINISH_STATE 666\n/* Stream status */\n\n\n/* Data structure describing a single value and its code string. */\ntypedef struct ct_data_s {\n    union {\n        ush  freq;       /* frequency count */\n        ush  code;       /* bit string */\n    } fc;\n    union {\n        ush  dad;        /* father node in Huffman tree */\n        ush  len;        /* length of bit string */\n    } dl;\n} FAR ct_data;\n\n#define Freq fc.freq\n#define Code fc.code\n#define Dad  dl.dad\n#define Len  dl.len\n\ntypedef struct static_tree_desc_s  static_tree_desc;\n\ntypedef struct tree_desc_s {\n    ct_data *dyn_tree;           /* the dynamic tree */\n    int     max_code;            /* largest code with non zero frequency */\n    static_tree_desc *stat_desc; /* the corresponding static tree */\n} FAR tree_desc;\n\ntypedef ush Pos;\ntypedef Pos FAR Posf;\ntypedef unsigned IPos;\n\n/* A Pos is an index in the character window. We use short instead of int to\n * save space in the various tables. IPos is used only for parameter passing.\n */\n\ntypedef struct internal_state {\n    z_streamp strm;      /* pointer back to this zlib stream */\n    int   status;        /* as the name implies */\n    Bytef *pending_buf;  /* output still pending */\n    ulg   pending_buf_size; /* size of pending_buf */\n    Bytef *pending_out;  /* next pending byte to output to the stream */\n    uInt   pending;      /* nb of bytes in the pending buffer */\n    int   wrap;          /* bit 0 true for zlib, bit 1 true for gzip */\n    gz_headerp  gzhead;  /* gzip header information to write */\n    uInt   gzindex;      /* where in extra, name, or comment */\n    Byte  method;        /* STORED (for zip only) or DEFLATED */\n    int   last_flush;    /* value of flush param for previous deflate call */\n\n                /* used by deflate.c: */\n\n    uInt  w_size;        /* LZ77 window size (32K by default) */\n    uInt  w_bits;        /* log2(w_size)  (8..16) */\n    uInt  w_mask;        /* w_size - 1 */\n\n    Bytef *window;\n    /* Sliding window. Input bytes are read into the second half of the window,\n     * and move to the first half later to keep a dictionary of at least wSize\n     * bytes. With this organization, matches are limited to a distance of\n     * wSize-MAX_MATCH bytes, but this ensures that IO is always\n     * performed with a length multiple of the block size. Also, it limits\n     * the window size to 64K, which is quite useful on MSDOS.\n     * To do: use the user input buffer as sliding window.\n     */\n\n    ulg window_size;\n    /* Actual size of window: 2*wSize, except when the user input buffer\n     * is directly used as sliding window.\n     */\n\n    Posf *prev;\n    /* Link to older string with same hash index. To limit the size of this\n     * array to 64K, this link is maintained only for the last 32K strings.\n     * An index in this array is thus a window index modulo 32K.\n     */\n\n    Posf *head; /* Heads of the hash chains or NIL. */\n\n    uInt  ins_h;          /* hash index of string to be inserted */\n    uInt  hash_size;      /* number of elements in hash table */\n    uInt  hash_bits;      /* log2(hash_size) */\n    uInt  hash_mask;      /* hash_size-1 */\n\n    uInt  hash_shift;\n    /* Number of bits by which ins_h must be shifted at each input\n     * step. It must be such that after MIN_MATCH steps, the oldest\n     * byte no longer takes part in the hash key, that is:\n     *   hash_shift * MIN_MATCH >= hash_bits\n     */\n\n    long block_start;\n    /* Window position at the beginning of the current output block. Gets\n     * negative when the window is moved backwards.\n     */\n\n    uInt match_length;           /* length of best match */\n    IPos prev_match;             /* previous match */\n    int match_available;         /* set if previous match exists */\n    uInt strstart;               /* start of string to insert */\n    uInt match_start;            /* start of matching string */\n    uInt lookahead;              /* number of valid bytes ahead in window */\n\n    uInt prev_length;\n    /* Length of the best match at previous step. Matches not greater than this\n     * are discarded. This is used in the lazy match evaluation.\n     */\n\n    uInt max_chain_length;\n    /* To speed up deflation, hash chains are never searched beyond this\n     * length.  A higher limit improves compression ratio but degrades the\n     * speed.\n     */\n\n    uInt max_lazy_match;\n    /* Attempt to find a better match only when the current match is strictly\n     * smaller than this value. This mechanism is used only for compression\n     * levels >= 4.\n     */\n#   define max_insert_length  max_lazy_match\n    /* Insert new strings in the hash table only if the match length is not\n     * greater than this length. This saves time but degrades compression.\n     * max_insert_length is used only for compression levels <= 3.\n     */\n\n    int level;    /* compression level (1..9) */\n    int strategy; /* favor or force Huffman coding*/\n\n    uInt good_match;\n    /* Use a faster search when the previous match is longer than this */\n\n    int nice_match; /* Stop searching when current match exceeds this */\n\n                /* used by trees.c: */\n    /* Didn't use ct_data typedef below to supress compiler warning */\n    struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */\n    struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n    struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */\n\n    struct tree_desc_s l_desc;               /* desc. for literal tree */\n    struct tree_desc_s d_desc;               /* desc. for distance tree */\n    struct tree_desc_s bl_desc;              /* desc. for bit length tree */\n\n    ush bl_count[MAX_BITS+1];\n    /* number of codes at each bit length for an optimal tree */\n\n    int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */\n    int heap_len;               /* number of elements in the heap */\n    int heap_max;               /* element of largest frequency */\n    /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n     * The same heap array is used to build all trees.\n     */\n\n    uch depth[2*L_CODES+1];\n    /* Depth of each subtree used as tie breaker for trees of equal frequency\n     */\n\n    uchf *l_buf;          /* buffer for literals or lengths */\n\n    uInt  lit_bufsize;\n    /* Size of match buffer for literals/lengths.  There are 4 reasons for\n     * limiting lit_bufsize to 64K:\n     *   - frequencies can be kept in 16 bit counters\n     *   - if compression is not successful for the first block, all input\n     *     data is still in the window so we can still emit a stored block even\n     *     when input comes from standard input.  (This can also be done for\n     *     all blocks if lit_bufsize is not greater than 32K.)\n     *   - if compression is not successful for a file smaller than 64K, we can\n     *     even emit a stored file instead of a stored block (saving 5 bytes).\n     *     This is applicable only for zip (not gzip or zlib).\n     *   - creating new Huffman trees less frequently may not provide fast\n     *     adaptation to changes in the input data statistics. (Take for\n     *     example a binary file with poorly compressible code followed by\n     *     a highly compressible string table.) Smaller buffer sizes give\n     *     fast adaptation but have of course the overhead of transmitting\n     *     trees more frequently.\n     *   - I can't count above 4\n     */\n\n    uInt last_lit;      /* running index in l_buf */\n\n    ushf *d_buf;\n    /* Buffer for distances. To simplify the code, d_buf and l_buf have\n     * the same number of elements. To use different lengths, an extra flag\n     * array would be necessary.\n     */\n\n    ulg opt_len;        /* bit length of current block with optimal trees */\n    ulg static_len;     /* bit length of current block with static trees */\n    uInt matches;       /* number of string matches in current block */\n    int last_eob_len;   /* bit length of EOB code for last block */\n\n#ifdef DEBUG\n    ulg compressed_len; /* total bit length of compressed file mod 2^32 */\n    ulg bits_sent;      /* bit length of compressed data sent mod 2^32 */\n#endif\n\n    ush bi_buf;\n    /* Output buffer. bits are inserted starting at the bottom (least\n     * significant bits).\n     */\n    int bi_valid;\n    /* Number of valid bits in bi_buf.  All bits above the last valid bit\n     * are always zero.\n     */\n\n    ulg high_water;\n    /* High water mark offset in window for initialized bytes -- bytes above\n     * this are set to zero in order to avoid memory check warnings when\n     * longest match routines access bytes past the input.  This is then\n     * updated to the new high water mark.\n     */\n\n} FAR deflate_state;\n\n/* Output a byte on the stream.\n * IN assertion: there is enough room in pending_buf.\n */\n#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}\n\n\n#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)\n/* Minimum amount of lookahead, except at the end of the input file.\n * See deflate.c for comments about the MIN_MATCH+1.\n */\n\n#define MAX_DIST(s)  ((s)->w_size-MIN_LOOKAHEAD)\n/* In order to simplify the code, particularly on 16 bit machines, match\n * distances are limited to MAX_DIST instead of WSIZE.\n */\n\n#define WIN_INIT MAX_MATCH\n/* Number of bytes after end of data in window to initialize in order to avoid\n   memory checker errors from longest match routines */\n\n        /* in trees.c */\nvoid ZLIB_INTERNAL _tr_init OF((deflate_state *s));\nint ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc));\nvoid ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf,\n                        ulg stored_len, int last));\nvoid ZLIB_INTERNAL _tr_align OF((deflate_state *s));\nvoid ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,\n                        ulg stored_len, int last));\n\n#define d_code(dist) \\\n   ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])\n/* Mapping from a distance to a distance code. dist is the distance - 1 and\n * must not have side effects. _dist_code[256] and _dist_code[257] are never\n * used.\n */\n\n#ifndef DEBUG\n/* Inline versions of _tr_tally for speed: */\n\n#if defined(GEN_TREES_H) || !defined(STDC)\n  extern uch ZLIB_INTERNAL _length_code[];\n  extern uch ZLIB_INTERNAL _dist_code[];\n#else\n  extern const uch ZLIB_INTERNAL _length_code[];\n  extern const uch ZLIB_INTERNAL _dist_code[];\n#endif\n\n# define _tr_tally_lit(s, c, flush) \\\n  { uch cc = (c); \\\n    s->d_buf[s->last_lit] = 0; \\\n    s->l_buf[s->last_lit++] = cc; \\\n    s->dyn_ltree[cc].Freq++; \\\n    flush = (s->last_lit == s->lit_bufsize-1); \\\n   }\n# define _tr_tally_dist(s, distance, length, flush) \\\n  { uch len = (length); \\\n    ush dist = (distance); \\\n    s->d_buf[s->last_lit] = dist; \\\n    s->l_buf[s->last_lit++] = len; \\\n    dist--; \\\n    s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \\\n    s->dyn_dtree[d_code(dist)].Freq++; \\\n    flush = (s->last_lit == s->lit_bufsize-1); \\\n  }\n#else\n# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)\n# define _tr_tally_dist(s, distance, length, flush) \\\n              flush = _tr_tally(s, distance, length)\n#endif\n\n#endif /* DEFLATE_H */\n"
  },
  {
    "path": "external/zlib/doc/algorithm.txt",
    "content": "1. Compression algorithm (deflate)\n\nThe deflation algorithm used by gzip (also zip and zlib) is a variation of\nLZ77 (Lempel-Ziv 1977, see reference below). It finds duplicated strings in\nthe input data.  The second occurrence of a string is replaced by a\npointer to the previous string, in the form of a pair (distance,\nlength).  Distances are limited to 32K bytes, and lengths are limited\nto 258 bytes. When a string does not occur anywhere in the previous\n32K bytes, it is emitted as a sequence of literal bytes.  (In this\ndescription, `string' must be taken as an arbitrary sequence of bytes,\nand is not restricted to printable characters.)\n\nLiterals or match lengths are compressed with one Huffman tree, and\nmatch distances are compressed with another tree. The trees are stored\nin a compact form at the start of each block. The blocks can have any\nsize (except that the compressed data for one block must fit in\navailable memory). A block is terminated when deflate() determines that\nit would be useful to start another block with fresh trees. (This is\nsomewhat similar to the behavior of LZW-based _compress_.)\n\nDuplicated strings are found using a hash table. All input strings of\nlength 3 are inserted in the hash table. A hash index is computed for\nthe next 3 bytes. If the hash chain for this index is not empty, all\nstrings in the chain are compared with the current input string, and\nthe longest match is selected.\n\nThe hash chains are searched starting with the most recent strings, to\nfavor small distances and thus take advantage of the Huffman encoding.\nThe hash chains are singly linked. There are no deletions from the\nhash chains, the algorithm simply discards matches that are too old.\n\nTo avoid a worst-case situation, very long hash chains are arbitrarily\ntruncated at a certain length, determined by a runtime option (level\nparameter of deflateInit). So deflate() does not always find the longest\npossible match but generally finds a match which is long enough.\n\ndeflate() also defers the selection of matches with a lazy evaluation\nmechanism. After a match of length N has been found, deflate() searches for\na longer match at the next input byte. If a longer match is found, the\nprevious match is truncated to a length of one (thus producing a single\nliteral byte) and the process of lazy evaluation begins again. Otherwise,\nthe original match is kept, and the next match search is attempted only N\nsteps later.\n\nThe lazy match evaluation is also subject to a runtime parameter. If\nthe current match is long enough, deflate() reduces the search for a longer\nmatch, thus speeding up the whole process. If compression ratio is more\nimportant than speed, deflate() attempts a complete second search even if\nthe first match is already long enough.\n\nThe lazy match evaluation is not performed for the fastest compression\nmodes (level parameter 1 to 3). For these fast modes, new strings\nare inserted in the hash table only when no match was found, or\nwhen the match is not too long. This degrades the compression ratio\nbut saves time since there are both fewer insertions and fewer searches.\n\n\n2. Decompression algorithm (inflate)\n\n2.1 Introduction\n\nThe key question is how to represent a Huffman code (or any prefix code) so\nthat you can decode fast.  The most important characteristic is that shorter\ncodes are much more common than longer codes, so pay attention to decoding the\nshort codes fast, and let the long codes take longer to decode.\n\ninflate() sets up a first level table that covers some number of bits of\ninput less than the length of longest code.  It gets that many bits from the\nstream, and looks it up in the table.  The table will tell if the next\ncode is that many bits or less and how many, and if it is, it will tell\nthe value, else it will point to the next level table for which inflate()\ngrabs more bits and tries to decode a longer code.\n\nHow many bits to make the first lookup is a tradeoff between the time it\ntakes to decode and the time it takes to build the table.  If building the\ntable took no time (and if you had infinite memory), then there would only\nbe a first level table to cover all the way to the longest code.  However,\nbuilding the table ends up taking a lot longer for more bits since short\ncodes are replicated many times in such a table.  What inflate() does is\nsimply to make the number of bits in the first table a variable, and  then\nto set that variable for the maximum speed.\n\nFor inflate, which has 286 possible codes for the literal/length tree, the size\nof the first table is nine bits.  Also the distance trees have 30 possible\nvalues, and the size of the first table is six bits.  Note that for each of\nthose cases, the table ended up one bit longer than the ``average'' code\nlength, i.e. the code length of an approximately flat code which would be a\nlittle more than eight bits for 286 symbols and a little less than five bits\nfor 30 symbols.\n\n\n2.2 More details on the inflate table lookup\n\nOk, you want to know what this cleverly obfuscated inflate tree actually\nlooks like.  You are correct that it's not a Huffman tree.  It is simply a\nlookup table for the first, let's say, nine bits of a Huffman symbol.  The\nsymbol could be as short as one bit or as long as 15 bits.  If a particular\nsymbol is shorter than nine bits, then that symbol's translation is duplicated\nin all those entries that start with that symbol's bits.  For example, if the\nsymbol is four bits, then it's duplicated 32 times in a nine-bit table.  If a\nsymbol is nine bits long, it appears in the table once.\n\nIf the symbol is longer than nine bits, then that entry in the table points\nto another similar table for the remaining bits.  Again, there are duplicated\nentries as needed.  The idea is that most of the time the symbol will be short\nand there will only be one table look up.  (That's whole idea behind data\ncompression in the first place.)  For the less frequent long symbols, there\nwill be two lookups.  If you had a compression method with really long\nsymbols, you could have as many levels of lookups as is efficient.  For\ninflate, two is enough.\n\nSo a table entry either points to another table (in which case nine bits in\nthe above example are gobbled), or it contains the translation for the symbol\nand the number of bits to gobble.  Then you start again with the next\nungobbled bit.\n\nYou may wonder: why not just have one lookup table for how ever many bits the\nlongest symbol is?  The reason is that if you do that, you end up spending\nmore time filling in duplicate symbol entries than you do actually decoding.\nAt least for deflate's output that generates new trees every several 10's of\nkbytes.  You can imagine that filling in a 2^15 entry table for a 15-bit code\nwould take too long if you're only decoding several thousand symbols.  At the\nother extreme, you could make a new table for every bit in the code.  In fact,\nthat's essentially a Huffman tree.  But then you spend too much time\ntraversing the tree while decoding, even for short symbols.\n\nSo the number of bits for the first lookup table is a trade of the time to\nfill out the table vs. the time spent looking at the second level and above of\nthe table.\n\nHere is an example, scaled down:\n\nThe code being decoded, with 10 symbols, from 1 to 6 bits long:\n\nA: 0\nB: 10\nC: 1100\nD: 11010\nE: 11011\nF: 11100\nG: 11101\nH: 11110\nI: 111110\nJ: 111111\n\nLet's make the first table three bits long (eight entries):\n\n000: A,1\n001: A,1\n010: A,1\n011: A,1\n100: B,2\n101: B,2\n110: -> table X (gobble 3 bits)\n111: -> table Y (gobble 3 bits)\n\nEach entry is what the bits decode as and how many bits that is, i.e. how\nmany bits to gobble.  Or the entry points to another table, with the number of\nbits to gobble implicit in the size of the table.\n\nTable X is two bits long since the longest code starting with 110 is five bits\nlong:\n\n00: C,1\n01: C,1\n10: D,2\n11: E,2\n\nTable Y is three bits long since the longest code starting with 111 is six\nbits long:\n\n000: F,2\n001: F,2\n010: G,2\n011: G,2\n100: H,2\n101: H,2\n110: I,3\n111: J,3\n\nSo what we have here are three tables with a total of 20 entries that had to\nbe constructed.  That's compared to 64 entries for a single table.  Or\ncompared to 16 entries for a Huffman tree (six two entry tables and one four\nentry table).  Assuming that the code ideally represents the probability of\nthe symbols, it takes on the average 1.25 lookups per symbol.  That's compared\nto one lookup for the single table, or 1.66 lookups per symbol for the\nHuffman tree.\n\nThere, I think that gives you a picture of what's going on.  For inflate, the\nmeaning of a particular symbol is often more than just a letter.  It can be a\nbyte (a \"literal\"), or it can be either a length or a distance which\nindicates a base value and a number of bits to fetch after the code that is\nadded to the base value.  Or it might be the special end-of-block code.  The\ndata structures created in inftrees.c try to encode all that information\ncompactly in the tables.\n\n\nJean-loup Gailly        Mark Adler\njloup@gzip.org          madler@alumni.caltech.edu\n\n\nReferences:\n\n[LZ77] Ziv J., Lempel A., ``A Universal Algorithm for Sequential Data\nCompression,'' IEEE Transactions on Information Theory, Vol. 23, No. 3,\npp. 337-343.\n\n``DEFLATE Compressed Data Format Specification'' available in\nhttp://www.ietf.org/rfc/rfc1951.txt\n"
  },
  {
    "path": "external/zlib/doc/rfc1950.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                         P. Deutsch\nRequest for Comments: 1950                           Aladdin Enterprises\nCategory: Informational                                      J-L. Gailly\n                                                                Info-ZIP\n                                                                May 1996\n\n\n         ZLIB Compressed Data Format Specification version 3.3\n\nStatus of This Memo\n\n   This memo provides information for the Internet community.  This memo\n   does not specify an Internet standard of any kind.  Distribution of\n   this memo is unlimited.\n\nIESG Note:\n\n   The IESG takes no position on the validity of any Intellectual\n   Property Rights statements contained in this document.\n\nNotices\n\n   Copyright (c) 1996 L. Peter Deutsch and Jean-Loup Gailly\n\n   Permission is granted to copy and distribute this document for any\n   purpose and without charge, including translations into other\n   languages and incorporation into compilations, provided that the\n   copyright notice and this notice are preserved, and that any\n   substantive changes or deletions from the original are clearly\n   marked.\n\n   A pointer to the latest version of this and related documentation in\n   HTML format can be found at the URL\n   <ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html>.\n\nAbstract\n\n   This specification defines a lossless compressed data format.  The\n   data can be produced or consumed, even for an arbitrarily long\n   sequentially presented input data stream, using only an a priori\n   bounded amount of intermediate storage.  The format presently uses\n   the DEFLATE compression method but can be easily extended to use\n   other compression methods.  It can be implemented readily in a manner\n   not covered by patents.  This specification also defines the ADLER-32\n   checksum (an extension and improvement of the Fletcher checksum),\n   used for detection of data corruption, and provides an algorithm for\n   computing it.\n\n\n\n\nDeutsch & Gailly             Informational                      [Page 1]\n\f\nRFC 1950       ZLIB Compressed Data Format Specification        May 1996\n\n\nTable of Contents\n\n   1. Introduction ................................................... 2\n      1.1. Purpose ................................................... 2\n      1.2. Intended audience ......................................... 3\n      1.3. Scope ..................................................... 3\n      1.4. Compliance ................................................ 3\n      1.5.  Definitions of terms and conventions used ................ 3\n      1.6. Changes from previous versions ............................ 3\n   2. Detailed specification ......................................... 3\n      2.1. Overall conventions ....................................... 3\n      2.2. Data format ............................................... 4\n      2.3. Compliance ................................................ 7\n   3. References ..................................................... 7\n   4. Source code .................................................... 8\n   5. Security Considerations ........................................ 8\n   6. Acknowledgements ............................................... 8\n   7. Authors' Addresses ............................................. 8\n   8. Appendix: Rationale ............................................ 9\n   9. Appendix: Sample code ..........................................10\n\n1. Introduction\n\n   1.1. Purpose\n\n      The purpose of this specification is to define a lossless\n      compressed data format that:\n\n          * Is independent of CPU type, operating system, file system,\n            and character set, and hence can be used for interchange;\n\n          * Can be produced or consumed, even for an arbitrarily long\n            sequentially presented input data stream, using only an a\n            priori bounded amount of intermediate storage, and hence can\n            be used in data communications or similar structures such as\n            Unix filters;\n\n          * Can use a number of different compression methods;\n\n          * Can be implemented readily in a manner not covered by\n            patents, and hence can be practiced freely.\n\n      The data format defined by this specification does not attempt to\n      allow random access to compressed data.\n\n\n\n\n\n\n\nDeutsch & Gailly             Informational                      [Page 2]\n\f\nRFC 1950       ZLIB Compressed Data Format Specification        May 1996\n\n\n   1.2. Intended audience\n\n      This specification is intended for use by implementors of software\n      to compress data into zlib format and/or decompress data from zlib\n      format.\n\n      The text of the specification assumes a basic background in\n      programming at the level of bits and other primitive data\n      representations.\n\n   1.3. Scope\n\n      The specification specifies a compressed data format that can be\n      used for in-memory compression of a sequence of arbitrary bytes.\n\n   1.4. Compliance\n\n      Unless otherwise indicated below, a compliant decompressor must be\n      able to accept and decompress any data set that conforms to all\n      the specifications presented here; a compliant compressor must\n      produce data sets that conform to all the specifications presented\n      here.\n\n   1.5.  Definitions of terms and conventions used\n\n      byte: 8 bits stored or transmitted as a unit (same as an octet).\n      (For this specification, a byte is exactly 8 bits, even on\n      machines which store a character on a number of bits different\n      from 8.) See below, for the numbering of bits within a byte.\n\n   1.6. Changes from previous versions\n\n      Version 3.1 was the first public release of this specification.\n      In version 3.2, some terminology was changed and the Adler-32\n      sample code was rewritten for clarity.  In version 3.3, the\n      support for a preset dictionary was introduced, and the\n      specification was converted to RFC style.\n\n2. Detailed specification\n\n   2.1. Overall conventions\n\n      In the diagrams below, a box like this:\n\n         +---+\n         |   | <-- the vertical bars might be missing\n         +---+\n\n\n\n\nDeutsch & Gailly             Informational                      [Page 3]\n\f\nRFC 1950       ZLIB Compressed Data Format Specification        May 1996\n\n\n      represents one byte; a box like this:\n\n         +==============+\n         |              |\n         +==============+\n\n      represents a variable number of bytes.\n\n      Bytes stored within a computer do not have a \"bit order\", since\n      they are always treated as a unit.  However, a byte considered as\n      an integer between 0 and 255 does have a most- and least-\n      significant bit, and since we write numbers with the most-\n      significant digit on the left, we also write bytes with the most-\n      significant bit on the left.  In the diagrams below, we number the\n      bits of a byte so that bit 0 is the least-significant bit, i.e.,\n      the bits are numbered:\n\n         +--------+\n         |76543210|\n         +--------+\n\n      Within a computer, a number may occupy multiple bytes.  All\n      multi-byte numbers in the format described here are stored with\n      the MOST-significant byte first (at the lower memory address).\n      For example, the decimal number 520 is stored as:\n\n             0     1\n         +--------+--------+\n         |00000010|00001000|\n         +--------+--------+\n          ^        ^\n          |        |\n          |        + less significant byte = 8\n          + more significant byte = 2 x 256\n\n   2.2. Data format\n\n      A zlib stream has the following structure:\n\n           0   1\n         +---+---+\n         |CMF|FLG|   (more-->)\n         +---+---+\n\n\n\n\n\n\n\n\nDeutsch & Gailly             Informational                      [Page 4]\n\f\nRFC 1950       ZLIB Compressed Data Format Specification        May 1996\n\n\n      (if FLG.FDICT set)\n\n           0   1   2   3\n         +---+---+---+---+\n         |     DICTID    |   (more-->)\n         +---+---+---+---+\n\n         +=====================+---+---+---+---+\n         |...compressed data...|    ADLER32    |\n         +=====================+---+---+---+---+\n\n      Any data which may appear after ADLER32 are not part of the zlib\n      stream.\n\n      CMF (Compression Method and flags)\n         This byte is divided into a 4-bit compression method and a 4-\n         bit information field depending on the compression method.\n\n            bits 0 to 3  CM     Compression method\n            bits 4 to 7  CINFO  Compression info\n\n      CM (Compression method)\n         This identifies the compression method used in the file. CM = 8\n         denotes the \"deflate\" compression method with a window size up\n         to 32K.  This is the method used by gzip and PNG (see\n         references [1] and [2] in Chapter 3, below, for the reference\n         documents).  CM = 15 is reserved.  It might be used in a future\n         version of this specification to indicate the presence of an\n         extra field before the compressed data.\n\n      CINFO (Compression info)\n         For CM = 8, CINFO is the base-2 logarithm of the LZ77 window\n         size, minus eight (CINFO=7 indicates a 32K window size). Values\n         of CINFO above 7 are not allowed in this version of the\n         specification.  CINFO is not defined in this specification for\n         CM not equal to 8.\n\n      FLG (FLaGs)\n         This flag byte is divided as follows:\n\n            bits 0 to 4  FCHECK  (check bits for CMF and FLG)\n            bit  5       FDICT   (preset dictionary)\n            bits 6 to 7  FLEVEL  (compression level)\n\n         The FCHECK value must be such that CMF and FLG, when viewed as\n         a 16-bit unsigned integer stored in MSB order (CMF*256 + FLG),\n         is a multiple of 31.\n\n\n\n\nDeutsch & Gailly             Informational                      [Page 5]\n\f\nRFC 1950       ZLIB Compressed Data Format Specification        May 1996\n\n\n      FDICT (Preset dictionary)\n         If FDICT is set, a DICT dictionary identifier is present\n         immediately after the FLG byte. The dictionary is a sequence of\n         bytes which are initially fed to the compressor without\n         producing any compressed output. DICT is the Adler-32 checksum\n         of this sequence of bytes (see the definition of ADLER32\n         below).  The decompressor can use this identifier to determine\n         which dictionary has been used by the compressor.\n\n      FLEVEL (Compression level)\n         These flags are available for use by specific compression\n         methods.  The \"deflate\" method (CM = 8) sets these flags as\n         follows:\n\n            0 - compressor used fastest algorithm\n            1 - compressor used fast algorithm\n            2 - compressor used default algorithm\n            3 - compressor used maximum compression, slowest algorithm\n\n         The information in FLEVEL is not needed for decompression; it\n         is there to indicate if recompression might be worthwhile.\n\n      compressed data\n         For compression method 8, the compressed data is stored in the\n         deflate compressed data format as described in the document\n         \"DEFLATE Compressed Data Format Specification\" by L. Peter\n         Deutsch. (See reference [3] in Chapter 3, below)\n\n         Other compressed data formats are not specified in this version\n         of the zlib specification.\n\n      ADLER32 (Adler-32 checksum)\n         This contains a checksum value of the uncompressed data\n         (excluding any dictionary data) computed according to Adler-32\n         algorithm. This algorithm is a 32-bit extension and improvement\n         of the Fletcher algorithm, used in the ITU-T X.224 / ISO 8073\n         standard. See references [4] and [5] in Chapter 3, below)\n\n         Adler-32 is composed of two sums accumulated per byte: s1 is\n         the sum of all bytes, s2 is the sum of all s1 values. Both sums\n         are done modulo 65521. s1 is initialized to 1, s2 to zero.  The\n         Adler-32 checksum is stored as s2*65536 + s1 in most-\n         significant-byte first (network) order.\n\n\n\n\n\n\n\n\nDeutsch & Gailly             Informational                      [Page 6]\n\f\nRFC 1950       ZLIB Compressed Data Format Specification        May 1996\n\n\n   2.3. Compliance\n\n      A compliant compressor must produce streams with correct CMF, FLG\n      and ADLER32, but need not support preset dictionaries.  When the\n      zlib data format is used as part of another standard data format,\n      the compressor may use only preset dictionaries that are specified\n      by this other data format.  If this other format does not use the\n      preset dictionary feature, the compressor must not set the FDICT\n      flag.\n\n      A compliant decompressor must check CMF, FLG, and ADLER32, and\n      provide an error indication if any of these have incorrect values.\n      A compliant decompressor must give an error indication if CM is\n      not one of the values defined in this specification (only the\n      value 8 is permitted in this version), since another value could\n      indicate the presence of new features that would cause subsequent\n      data to be interpreted incorrectly.  A compliant decompressor must\n      give an error indication if FDICT is set and DICTID is not the\n      identifier of a known preset dictionary.  A decompressor may\n      ignore FLEVEL and still be compliant.  When the zlib data format\n      is being used as a part of another standard format, a compliant\n      decompressor must support all the preset dictionaries specified by\n      the other format. When the other format does not use the preset\n      dictionary feature, a compliant decompressor must reject any\n      stream in which the FDICT flag is set.\n\n3. References\n\n   [1] Deutsch, L.P.,\"GZIP Compressed Data Format Specification\",\n       available in ftp://ftp.uu.net/pub/archiving/zip/doc/\n\n   [2] Thomas Boutell, \"PNG (Portable Network Graphics) specification\",\n       available in ftp://ftp.uu.net/graphics/png/documents/\n\n   [3] Deutsch, L.P.,\"DEFLATE Compressed Data Format Specification\",\n       available in ftp://ftp.uu.net/pub/archiving/zip/doc/\n\n   [4] Fletcher, J. G., \"An Arithmetic Checksum for Serial\n       Transmissions,\" IEEE Transactions on Communications, Vol. COM-30,\n       No. 1, January 1982, pp. 247-252.\n\n   [5] ITU-T Recommendation X.224, Annex D, \"Checksum Algorithms,\"\n       November, 1993, pp. 144, 145. (Available from\n       gopher://info.itu.ch). ITU-T X.244 is also the same as ISO 8073.\n\n\n\n\n\n\n\nDeutsch & Gailly             Informational                      [Page 7]\n\f\nRFC 1950       ZLIB Compressed Data Format Specification        May 1996\n\n\n4. Source code\n\n   Source code for a C language implementation of a \"zlib\" compliant\n   library is available at ftp://ftp.uu.net/pub/archiving/zip/zlib/.\n\n5. Security Considerations\n\n   A decoder that fails to check the ADLER32 checksum value may be\n   subject to undetected data corruption.\n\n6. Acknowledgements\n\n   Trademarks cited in this document are the property of their\n   respective owners.\n\n   Jean-Loup Gailly and Mark Adler designed the zlib format and wrote\n   the related software described in this specification.  Glenn\n   Randers-Pehrson converted this document to RFC and HTML format.\n\n7. Authors' Addresses\n\n   L. Peter Deutsch\n   Aladdin Enterprises\n   203 Santa Margarita Ave.\n   Menlo Park, CA 94025\n\n   Phone: (415) 322-0103 (AM only)\n   FAX:   (415) 322-1734\n   EMail: <ghost@aladdin.com>\n\n\n   Jean-Loup Gailly\n\n   EMail: <gzip@prep.ai.mit.edu>\n\n   Questions about the technical content of this specification can be\n   sent by email to\n\n   Jean-Loup Gailly <gzip@prep.ai.mit.edu> and\n   Mark Adler <madler@alumni.caltech.edu>\n\n   Editorial comments on this specification can be sent by email to\n\n   L. Peter Deutsch <ghost@aladdin.com> and\n   Glenn Randers-Pehrson <randeg@alumni.rpi.edu>\n\n\n\n\n\n\nDeutsch & Gailly             Informational                      [Page 8]\n\f\nRFC 1950       ZLIB Compressed Data Format Specification        May 1996\n\n\n8. Appendix: Rationale\n\n   8.1. Preset dictionaries\n\n      A preset dictionary is specially useful to compress short input\n      sequences. The compressor can take advantage of the dictionary\n      context to encode the input in a more compact manner. The\n      decompressor can be initialized with the appropriate context by\n      virtually decompressing a compressed version of the dictionary\n      without producing any output. However for certain compression\n      algorithms such as the deflate algorithm this operation can be\n      achieved without actually performing any decompression.\n\n      The compressor and the decompressor must use exactly the same\n      dictionary. The dictionary may be fixed or may be chosen among a\n      certain number of predefined dictionaries, according to the kind\n      of input data. The decompressor can determine which dictionary has\n      been chosen by the compressor by checking the dictionary\n      identifier. This document does not specify the contents of\n      predefined dictionaries, since the optimal dictionaries are\n      application specific. Standard data formats using this feature of\n      the zlib specification must precisely define the allowed\n      dictionaries.\n\n   8.2. The Adler-32 algorithm\n\n      The Adler-32 algorithm is much faster than the CRC32 algorithm yet\n      still provides an extremely low probability of undetected errors.\n\n      The modulo on unsigned long accumulators can be delayed for 5552\n      bytes, so the modulo operation time is negligible.  If the bytes\n      are a, b, c, the second sum is 3a + 2b + c + 3, and so is position\n      and order sensitive, unlike the first sum, which is just a\n      checksum.  That 65521 is prime is important to avoid a possible\n      large class of two-byte errors that leave the check unchanged.\n      (The Fletcher checksum uses 255, which is not prime and which also\n      makes the Fletcher check insensitive to single byte changes 0 <->\n      255.)\n\n      The sum s1 is initialized to 1 instead of zero to make the length\n      of the sequence part of s2, so that the length does not have to be\n      checked separately. (Any sequence of zeroes has a Fletcher\n      checksum of zero.)\n\n\n\n\n\n\n\n\nDeutsch & Gailly             Informational                      [Page 9]\n\f\nRFC 1950       ZLIB Compressed Data Format Specification        May 1996\n\n\n9. Appendix: Sample code\n\n   The following C code computes the Adler-32 checksum of a data buffer.\n   It is written for clarity, not for speed.  The sample code is in the\n   ANSI C programming language. Non C users may find it easier to read\n   with these hints:\n\n      &      Bitwise AND operator.\n      >>     Bitwise right shift operator. When applied to an\n             unsigned quantity, as here, right shift inserts zero bit(s)\n             at the left.\n      <<     Bitwise left shift operator. Left shift inserts zero\n             bit(s) at the right.\n      ++     \"n++\" increments the variable n.\n      %      modulo operator: a % b is the remainder of a divided by b.\n\n      #define BASE 65521 /* largest prime smaller than 65536 */\n\n      /*\n         Update a running Adler-32 checksum with the bytes buf[0..len-1]\n       and return the updated checksum. The Adler-32 checksum should be\n       initialized to 1.\n\n       Usage example:\n\n         unsigned long adler = 1L;\n\n         while (read_buffer(buffer, length) != EOF) {\n           adler = update_adler32(adler, buffer, length);\n         }\n         if (adler != original_adler) error();\n      */\n      unsigned long update_adler32(unsigned long adler,\n         unsigned char *buf, int len)\n      {\n        unsigned long s1 = adler & 0xffff;\n        unsigned long s2 = (adler >> 16) & 0xffff;\n        int n;\n\n        for (n = 0; n < len; n++) {\n          s1 = (s1 + buf[n]) % BASE;\n          s2 = (s2 + s1)     % BASE;\n        }\n        return (s2 << 16) + s1;\n      }\n\n      /* Return the adler32 of the bytes buf[0..len-1] */\n\n\n\n\nDeutsch & Gailly             Informational                     [Page 10]\n\f\nRFC 1950       ZLIB Compressed Data Format Specification        May 1996\n\n\n      unsigned long adler32(unsigned char *buf, int len)\n      {\n        return update_adler32(1L, buf, len);\n      }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nDeutsch & Gailly             Informational                     [Page 11]\n\f\n"
  },
  {
    "path": "external/zlib/doc/rfc1951.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                         P. Deutsch\nRequest for Comments: 1951                           Aladdin Enterprises\nCategory: Informational                                         May 1996\n\n\n        DEFLATE Compressed Data Format Specification version 1.3\n\nStatus of This Memo\n\n   This memo provides information for the Internet community.  This memo\n   does not specify an Internet standard of any kind.  Distribution of\n   this memo is unlimited.\n\nIESG Note:\n\n   The IESG takes no position on the validity of any Intellectual\n   Property Rights statements contained in this document.\n\nNotices\n\n   Copyright (c) 1996 L. Peter Deutsch\n\n   Permission is granted to copy and distribute this document for any\n   purpose and without charge, including translations into other\n   languages and incorporation into compilations, provided that the\n   copyright notice and this notice are preserved, and that any\n   substantive changes or deletions from the original are clearly\n   marked.\n\n   A pointer to the latest version of this and related documentation in\n   HTML format can be found at the URL\n   <ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html>.\n\nAbstract\n\n   This specification defines a lossless compressed data format that\n   compresses data using a combination of the LZ77 algorithm and Huffman\n   coding, with efficiency comparable to the best currently available\n   general-purpose compression methods.  The data can be produced or\n   consumed, even for an arbitrarily long sequentially presented input\n   data stream, using only an a priori bounded amount of intermediate\n   storage.  The format can be implemented readily in a manner not\n   covered by patents.\n\n\n\n\n\n\n\n\nDeutsch                      Informational                      [Page 1]\n\f\nRFC 1951      DEFLATE Compressed Data Format Specification      May 1996\n\n\nTable of Contents\n\n   1. Introduction ................................................... 2\n      1.1. Purpose ................................................... 2\n      1.2. Intended audience ......................................... 3\n      1.3. Scope ..................................................... 3\n      1.4. Compliance ................................................ 3\n      1.5.  Definitions of terms and conventions used ................ 3\n      1.6. Changes from previous versions ............................ 4\n   2. Compressed representation overview ............................. 4\n   3. Detailed specification ......................................... 5\n      3.1. Overall conventions ....................................... 5\n          3.1.1. Packing into bytes .................................. 5\n      3.2. Compressed block format ................................... 6\n          3.2.1. Synopsis of prefix and Huffman coding ............... 6\n          3.2.2. Use of Huffman coding in the \"deflate\" format ....... 7\n          3.2.3. Details of block format ............................. 9\n          3.2.4. Non-compressed blocks (BTYPE=00) ................... 11\n          3.2.5. Compressed blocks (length and distance codes) ...... 11\n          3.2.6. Compression with fixed Huffman codes (BTYPE=01) .... 12\n          3.2.7. Compression with dynamic Huffman codes (BTYPE=10) .. 13\n      3.3. Compliance ............................................... 14\n   4. Compression algorithm details ................................. 14\n   5. References .................................................... 16\n   6. Security Considerations ....................................... 16\n   7. Source code ................................................... 16\n   8. Acknowledgements .............................................. 16\n   9. Author's Address .............................................. 17\n\n1. Introduction\n\n   1.1. Purpose\n\n      The purpose of this specification is to define a lossless\n      compressed data format that:\n          * Is independent of CPU type, operating system, file system,\n            and character set, and hence can be used for interchange;\n          * Can be produced or consumed, even for an arbitrarily long\n            sequentially presented input data stream, using only an a\n            priori bounded amount of intermediate storage, and hence\n            can be used in data communications or similar structures\n            such as Unix filters;\n          * Compresses data with efficiency comparable to the best\n            currently available general-purpose compression methods,\n            and in particular considerably better than the \"compress\"\n            program;\n          * Can be implemented readily in a manner not covered by\n            patents, and hence can be practiced freely;\n\n\n\nDeutsch                      Informational                      [Page 2]\n\f\nRFC 1951      DEFLATE Compressed Data Format Specification      May 1996\n\n\n          * Is compatible with the file format produced by the current\n            widely used gzip utility, in that conforming decompressors\n            will be able to read data produced by the existing gzip\n            compressor.\n\n      The data format defined by this specification does not attempt to:\n\n          * Allow random access to compressed data;\n          * Compress specialized data (e.g., raster graphics) as well\n            as the best currently available specialized algorithms.\n\n      A simple counting argument shows that no lossless compression\n      algorithm can compress every possible input data set.  For the\n      format defined here, the worst case expansion is 5 bytes per 32K-\n      byte block, i.e., a size increase of 0.015% for large data sets.\n      English text usually compresses by a factor of 2.5 to 3;\n      executable files usually compress somewhat less; graphical data\n      such as raster images may compress much more.\n\n   1.2. Intended audience\n\n      This specification is intended for use by implementors of software\n      to compress data into \"deflate\" format and/or decompress data from\n      \"deflate\" format.\n\n      The text of the specification assumes a basic background in\n      programming at the level of bits and other primitive data\n      representations.  Familiarity with the technique of Huffman coding\n      is helpful but not required.\n\n   1.3. Scope\n\n      The specification specifies a method for representing a sequence\n      of bytes as a (usually shorter) sequence of bits, and a method for\n      packing the latter bit sequence into bytes.\n\n   1.4. Compliance\n\n      Unless otherwise indicated below, a compliant decompressor must be\n      able to accept and decompress any data set that conforms to all\n      the specifications presented here; a compliant compressor must\n      produce data sets that conform to all the specifications presented\n      here.\n\n   1.5.  Definitions of terms and conventions used\n\n      Byte: 8 bits stored or transmitted as a unit (same as an octet).\n      For this specification, a byte is exactly 8 bits, even on machines\n\n\n\nDeutsch                      Informational                      [Page 3]\n\f\nRFC 1951      DEFLATE Compressed Data Format Specification      May 1996\n\n\n      which store a character on a number of bits different from eight.\n      See below, for the numbering of bits within a byte.\n\n      String: a sequence of arbitrary bytes.\n\n   1.6. Changes from previous versions\n\n      There have been no technical changes to the deflate format since\n      version 1.1 of this specification.  In version 1.2, some\n      terminology was changed.  Version 1.3 is a conversion of the\n      specification to RFC style.\n\n2. Compressed representation overview\n\n   A compressed data set consists of a series of blocks, corresponding\n   to successive blocks of input data.  The block sizes are arbitrary,\n   except that non-compressible blocks are limited to 65,535 bytes.\n\n   Each block is compressed using a combination of the LZ77 algorithm\n   and Huffman coding. The Huffman trees for each block are independent\n   of those for previous or subsequent blocks; the LZ77 algorithm may\n   use a reference to a duplicated string occurring in a previous block,\n   up to 32K input bytes before.\n\n   Each block consists of two parts: a pair of Huffman code trees that\n   describe the representation of the compressed data part, and a\n   compressed data part.  (The Huffman trees themselves are compressed\n   using Huffman encoding.)  The compressed data consists of a series of\n   elements of two types: literal bytes (of strings that have not been\n   detected as duplicated within the previous 32K input bytes), and\n   pointers to duplicated strings, where a pointer is represented as a\n   pair <length, backward distance>.  The representation used in the\n   \"deflate\" format limits distances to 32K bytes and lengths to 258\n   bytes, but does not limit the size of a block, except for\n   uncompressible blocks, which are limited as noted above.\n\n   Each type of value (literals, distances, and lengths) in the\n   compressed data is represented using a Huffman code, using one code\n   tree for literals and lengths and a separate code tree for distances.\n   The code trees for each block appear in a compact form just before\n   the compressed data for that block.\n\n\n\n\n\n\n\n\n\n\nDeutsch                      Informational                      [Page 4]\n\f\nRFC 1951      DEFLATE Compressed Data Format Specification      May 1996\n\n\n3. Detailed specification\n\n   3.1. Overall conventions In the diagrams below, a box like this:\n\n         +---+\n         |   | <-- the vertical bars might be missing\n         +---+\n\n      represents one byte; a box like this:\n\n         +==============+\n         |              |\n         +==============+\n\n      represents a variable number of bytes.\n\n      Bytes stored within a computer do not have a \"bit order\", since\n      they are always treated as a unit.  However, a byte considered as\n      an integer between 0 and 255 does have a most- and least-\n      significant bit, and since we write numbers with the most-\n      significant digit on the left, we also write bytes with the most-\n      significant bit on the left.  In the diagrams below, we number the\n      bits of a byte so that bit 0 is the least-significant bit, i.e.,\n      the bits are numbered:\n\n         +--------+\n         |76543210|\n         +--------+\n\n      Within a computer, a number may occupy multiple bytes.  All\n      multi-byte numbers in the format described here are stored with\n      the least-significant byte first (at the lower memory address).\n      For example, the decimal number 520 is stored as:\n\n             0        1\n         +--------+--------+\n         |00001000|00000010|\n         +--------+--------+\n          ^        ^\n          |        |\n          |        + more significant byte = 2 x 256\n          + less significant byte = 8\n\n      3.1.1. Packing into bytes\n\n         This document does not address the issue of the order in which\n         bits of a byte are transmitted on a bit-sequential medium,\n         since the final data format described here is byte- rather than\n\n\n\nDeutsch                      Informational                      [Page 5]\n\f\nRFC 1951      DEFLATE Compressed Data Format Specification      May 1996\n\n\n         bit-oriented.  However, we describe the compressed block format\n         in below, as a sequence of data elements of various bit\n         lengths, not a sequence of bytes.  We must therefore specify\n         how to pack these data elements into bytes to form the final\n         compressed byte sequence:\n\n             * Data elements are packed into bytes in order of\n               increasing bit number within the byte, i.e., starting\n               with the least-significant bit of the byte.\n             * Data elements other than Huffman codes are packed\n               starting with the least-significant bit of the data\n               element.\n             * Huffman codes are packed starting with the most-\n               significant bit of the code.\n\n         In other words, if one were to print out the compressed data as\n         a sequence of bytes, starting with the first byte at the\n         *right* margin and proceeding to the *left*, with the most-\n         significant bit of each byte on the left as usual, one would be\n         able to parse the result from right to left, with fixed-width\n         elements in the correct MSB-to-LSB order and Huffman codes in\n         bit-reversed order (i.e., with the first bit of the code in the\n         relative LSB position).\n\n   3.2. Compressed block format\n\n      3.2.1. Synopsis of prefix and Huffman coding\n\n         Prefix coding represents symbols from an a priori known\n         alphabet by bit sequences (codes), one code for each symbol, in\n         a manner such that different symbols may be represented by bit\n         sequences of different lengths, but a parser can always parse\n         an encoded string unambiguously symbol-by-symbol.\n\n         We define a prefix code in terms of a binary tree in which the\n         two edges descending from each non-leaf node are labeled 0 and\n         1 and in which the leaf nodes correspond one-for-one with (are\n         labeled with) the symbols of the alphabet; then the code for a\n         symbol is the sequence of 0's and 1's on the edges leading from\n         the root to the leaf labeled with that symbol.  For example:\n\n\n\n\n\n\n\n\n\n\n\nDeutsch                      Informational                      [Page 6]\n\f\nRFC 1951      DEFLATE Compressed Data Format Specification      May 1996\n\n\n                          /\\              Symbol    Code\n                         0  1             ------    ----\n                        /    \\                A      00\n                       /\\     B               B       1\n                      0  1                    C     011\n                     /    \\                   D     010\n                    A     /\\\n                         0  1\n                        /    \\\n                       D      C\n\n         A parser can decode the next symbol from an encoded input\n         stream by walking down the tree from the root, at each step\n         choosing the edge corresponding to the next input bit.\n\n         Given an alphabet with known symbol frequencies, the Huffman\n         algorithm allows the construction of an optimal prefix code\n         (one which represents strings with those symbol frequencies\n         using the fewest bits of any possible prefix codes for that\n         alphabet).  Such a code is called a Huffman code.  (See\n         reference [1] in Chapter 5, references for additional\n         information on Huffman codes.)\n\n         Note that in the \"deflate\" format, the Huffman codes for the\n         various alphabets must not exceed certain maximum code lengths.\n         This constraint complicates the algorithm for computing code\n         lengths from symbol frequencies.  Again, see Chapter 5,\n         references for details.\n\n      3.2.2. Use of Huffman coding in the \"deflate\" format\n\n         The Huffman codes used for each alphabet in the \"deflate\"\n         format have two additional rules:\n\n             * All codes of a given bit length have lexicographically\n               consecutive values, in the same order as the symbols\n               they represent;\n\n             * Shorter codes lexicographically precede longer codes.\n\n\n\n\n\n\n\n\n\n\n\n\nDeutsch                      Informational                      [Page 7]\n\f\nRFC 1951      DEFLATE Compressed Data Format Specification      May 1996\n\n\n         We could recode the example above to follow this rule as\n         follows, assuming that the order of the alphabet is ABCD:\n\n            Symbol  Code\n            ------  ----\n            A       10\n            B       0\n            C       110\n            D       111\n\n         I.e., 0 precedes 10 which precedes 11x, and 110 and 111 are\n         lexicographically consecutive.\n\n         Given this rule, we can define the Huffman code for an alphabet\n         just by giving the bit lengths of the codes for each symbol of\n         the alphabet in order; this is sufficient to determine the\n         actual codes.  In our example, the code is completely defined\n         by the sequence of bit lengths (2, 1, 3, 3).  The following\n         algorithm generates the codes as integers, intended to be read\n         from most- to least-significant bit.  The code lengths are\n         initially in tree[I].Len; the codes are produced in\n         tree[I].Code.\n\n         1)  Count the number of codes for each code length.  Let\n             bl_count[N] be the number of codes of length N, N >= 1.\n\n         2)  Find the numerical value of the smallest code for each\n             code length:\n\n                code = 0;\n                bl_count[0] = 0;\n                for (bits = 1; bits <= MAX_BITS; bits++) {\n                    code = (code + bl_count[bits-1]) << 1;\n                    next_code[bits] = code;\n                }\n\n         3)  Assign numerical values to all codes, using consecutive\n             values for all codes of the same length with the base\n             values determined at step 2. Codes that are never used\n             (which have a bit length of zero) must not be assigned a\n             value.\n\n                for (n = 0;  n <= max_code; n++) {\n                    len = tree[n].Len;\n                    if (len != 0) {\n                        tree[n].Code = next_code[len];\n                        next_code[len]++;\n                    }\n\n\n\nDeutsch                      Informational                      [Page 8]\n\f\nRFC 1951      DEFLATE Compressed Data Format Specification      May 1996\n\n\n                }\n\n         Example:\n\n         Consider the alphabet ABCDEFGH, with bit lengths (3, 3, 3, 3,\n         3, 2, 4, 4).  After step 1, we have:\n\n            N      bl_count[N]\n            -      -----------\n            2      1\n            3      5\n            4      2\n\n         Step 2 computes the following next_code values:\n\n            N      next_code[N]\n            -      ------------\n            1      0\n            2      0\n            3      2\n            4      14\n\n         Step 3 produces the following code values:\n\n            Symbol Length   Code\n            ------ ------   ----\n            A       3        010\n            B       3        011\n            C       3        100\n            D       3        101\n            E       3        110\n            F       2         00\n            G       4       1110\n            H       4       1111\n\n      3.2.3. Details of block format\n\n         Each block of compressed data begins with 3 header bits\n         containing the following data:\n\n            first bit       BFINAL\n            next 2 bits     BTYPE\n\n         Note that the header bits do not necessarily begin on a byte\n         boundary, since a block does not necessarily occupy an integral\n         number of bytes.\n\n\n\n\n\nDeutsch                      Informational                      [Page 9]\n\f\nRFC 1951      DEFLATE Compressed Data Format Specification      May 1996\n\n\n         BFINAL is set if and only if this is the last block of the data\n         set.\n\n         BTYPE specifies how the data are compressed, as follows:\n\n            00 - no compression\n            01 - compressed with fixed Huffman codes\n            10 - compressed with dynamic Huffman codes\n            11 - reserved (error)\n\n         The only difference between the two compressed cases is how the\n         Huffman codes for the literal/length and distance alphabets are\n         defined.\n\n         In all cases, the decoding algorithm for the actual data is as\n         follows:\n\n            do\n               read block header from input stream.\n               if stored with no compression\n                  skip any remaining bits in current partially\n                     processed byte\n                  read LEN and NLEN (see next section)\n                  copy LEN bytes of data to output\n               otherwise\n                  if compressed with dynamic Huffman codes\n                     read representation of code trees (see\n                        subsection below)\n                  loop (until end of block code recognized)\n                     decode literal/length value from input stream\n                     if value < 256\n                        copy value (literal byte) to output stream\n                     otherwise\n                        if value = end of block (256)\n                           break from loop\n                        otherwise (value = 257..285)\n                           decode distance from input stream\n\n                           move backwards distance bytes in the output\n                           stream, and copy length bytes from this\n                           position to the output stream.\n                  end loop\n            while not last block\n\n         Note that a duplicated string reference may refer to a string\n         in a previous block; i.e., the backward distance may cross one\n         or more block boundaries.  However a distance cannot refer past\n         the beginning of the output stream.  (An application using a\n\n\n\nDeutsch                      Informational                     [Page 10]\n\f\nRFC 1951      DEFLATE Compressed Data Format Specification      May 1996\n\n\n         preset dictionary might discard part of the output stream; a\n         distance can refer to that part of the output stream anyway)\n         Note also that the referenced string may overlap the current\n         position; for example, if the last 2 bytes decoded have values\n         X and Y, a string reference with <length = 5, distance = 2>\n         adds X,Y,X,Y,X to the output stream.\n\n         We now specify each compression method in turn.\n\n      3.2.4. Non-compressed blocks (BTYPE=00)\n\n         Any bits of input up to the next byte boundary are ignored.\n         The rest of the block consists of the following information:\n\n              0   1   2   3   4...\n            +---+---+---+---+================================+\n            |  LEN  | NLEN  |... LEN bytes of literal data...|\n            +---+---+---+---+================================+\n\n         LEN is the number of data bytes in the block.  NLEN is the\n         one's complement of LEN.\n\n      3.2.5. Compressed blocks (length and distance codes)\n\n         As noted above, encoded data blocks in the \"deflate\" format\n         consist of sequences of symbols drawn from three conceptually\n         distinct alphabets: either literal bytes, from the alphabet of\n         byte values (0..255), or <length, backward distance> pairs,\n         where the length is drawn from (3..258) and the distance is\n         drawn from (1..32,768).  In fact, the literal and length\n         alphabets are merged into a single alphabet (0..285), where\n         values 0..255 represent literal bytes, the value 256 indicates\n         end-of-block, and values 257..285 represent length codes\n         (possibly in conjunction with extra bits following the symbol\n         code) as follows:\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nDeutsch                      Informational                     [Page 11]\n\f\nRFC 1951      DEFLATE Compressed Data Format Specification      May 1996\n\n\n                 Extra               Extra               Extra\n            Code Bits Length(s) Code Bits Lengths   Code Bits Length(s)\n            ---- ---- ------     ---- ---- -------   ---- ---- -------\n             257   0     3       267   1   15,16     277   4   67-82\n             258   0     4       268   1   17,18     278   4   83-98\n             259   0     5       269   2   19-22     279   4   99-114\n             260   0     6       270   2   23-26     280   4  115-130\n             261   0     7       271   2   27-30     281   5  131-162\n             262   0     8       272   2   31-34     282   5  163-194\n             263   0     9       273   3   35-42     283   5  195-226\n             264   0    10       274   3   43-50     284   5  227-257\n             265   1  11,12      275   3   51-58     285   0    258\n             266   1  13,14      276   3   59-66\n\n         The extra bits should be interpreted as a machine integer\n         stored with the most-significant bit first, e.g., bits 1110\n         represent the value 14.\n\n                  Extra           Extra               Extra\n             Code Bits Dist  Code Bits   Dist     Code Bits Distance\n             ---- ---- ----  ---- ----  ------    ---- ---- --------\n               0   0    1     10   4     33-48    20    9   1025-1536\n               1   0    2     11   4     49-64    21    9   1537-2048\n               2   0    3     12   5     65-96    22   10   2049-3072\n               3   0    4     13   5     97-128   23   10   3073-4096\n               4   1   5,6    14   6    129-192   24   11   4097-6144\n               5   1   7,8    15   6    193-256   25   11   6145-8192\n               6   2   9-12   16   7    257-384   26   12  8193-12288\n               7   2  13-16   17   7    385-512   27   12 12289-16384\n               8   3  17-24   18   8    513-768   28   13 16385-24576\n               9   3  25-32   19   8   769-1024   29   13 24577-32768\n\n      3.2.6. Compression with fixed Huffman codes (BTYPE=01)\n\n         The Huffman codes for the two alphabets are fixed, and are not\n         represented explicitly in the data.  The Huffman code lengths\n         for the literal/length alphabet are:\n\n                   Lit Value    Bits        Codes\n                   ---------    ----        -----\n                     0 - 143     8          00110000 through\n                                            10111111\n                   144 - 255     9          110010000 through\n                                            111111111\n                   256 - 279     7          0000000 through\n                                            0010111\n                   280 - 287     8          11000000 through\n                                            11000111\n\n\n\nDeutsch                      Informational                     [Page 12]\n\f\nRFC 1951      DEFLATE Compressed Data Format Specification      May 1996\n\n\n         The code lengths are sufficient to generate the actual codes,\n         as described above; we show the codes in the table for added\n         clarity.  Literal/length values 286-287 will never actually\n         occur in the compressed data, but participate in the code\n         construction.\n\n         Distance codes 0-31 are represented by (fixed-length) 5-bit\n         codes, with possible additional bits as shown in the table\n         shown in Paragraph 3.2.5, above.  Note that distance codes 30-\n         31 will never actually occur in the compressed data.\n\n      3.2.7. Compression with dynamic Huffman codes (BTYPE=10)\n\n         The Huffman codes for the two alphabets appear in the block\n         immediately after the header bits and before the actual\n         compressed data, first the literal/length code and then the\n         distance code.  Each code is defined by a sequence of code\n         lengths, as discussed in Paragraph 3.2.2, above.  For even\n         greater compactness, the code length sequences themselves are\n         compressed using a Huffman code.  The alphabet for code lengths\n         is as follows:\n\n               0 - 15: Represent code lengths of 0 - 15\n                   16: Copy the previous code length 3 - 6 times.\n                       The next 2 bits indicate repeat length\n                             (0 = 3, ... , 3 = 6)\n                          Example:  Codes 8, 16 (+2 bits 11),\n                                    16 (+2 bits 10) will expand to\n                                    12 code lengths of 8 (1 + 6 + 5)\n                   17: Repeat a code length of 0 for 3 - 10 times.\n                       (3 bits of length)\n                   18: Repeat a code length of 0 for 11 - 138 times\n                       (7 bits of length)\n\n         A code length of 0 indicates that the corresponding symbol in\n         the literal/length or distance alphabet will not occur in the\n         block, and should not participate in the Huffman code\n         construction algorithm given earlier.  If only one distance\n         code is used, it is encoded using one bit, not zero bits; in\n         this case there is a single code length of one, with one unused\n         code.  One distance code of zero bits means that there are no\n         distance codes used at all (the data is all literals).\n\n         We can now define the format of the block:\n\n               5 Bits: HLIT, # of Literal/Length codes - 257 (257 - 286)\n               5 Bits: HDIST, # of Distance codes - 1        (1 - 32)\n               4 Bits: HCLEN, # of Code Length codes - 4     (4 - 19)\n\n\n\nDeutsch                      Informational                     [Page 13]\n\f\nRFC 1951      DEFLATE Compressed Data Format Specification      May 1996\n\n\n               (HCLEN + 4) x 3 bits: code lengths for the code length\n                  alphabet given just above, in the order: 16, 17, 18,\n                  0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15\n\n                  These code lengths are interpreted as 3-bit integers\n                  (0-7); as above, a code length of 0 means the\n                  corresponding symbol (literal/length or distance code\n                  length) is not used.\n\n               HLIT + 257 code lengths for the literal/length alphabet,\n                  encoded using the code length Huffman code\n\n               HDIST + 1 code lengths for the distance alphabet,\n                  encoded using the code length Huffman code\n\n               The actual compressed data of the block,\n                  encoded using the literal/length and distance Huffman\n                  codes\n\n               The literal/length symbol 256 (end of data),\n                  encoded using the literal/length Huffman code\n\n         The code length repeat codes can cross from HLIT + 257 to the\n         HDIST + 1 code lengths.  In other words, all code lengths form\n         a single sequence of HLIT + HDIST + 258 values.\n\n   3.3. Compliance\n\n      A compressor may limit further the ranges of values specified in\n      the previous section and still be compliant; for example, it may\n      limit the range of backward pointers to some value smaller than\n      32K.  Similarly, a compressor may limit the size of blocks so that\n      a compressible block fits in memory.\n\n      A compliant decompressor must accept the full range of possible\n      values defined in the previous section, and must accept blocks of\n      arbitrary size.\n\n4. Compression algorithm details\n\n   While it is the intent of this document to define the \"deflate\"\n   compressed data format without reference to any particular\n   compression algorithm, the format is related to the compressed\n   formats produced by LZ77 (Lempel-Ziv 1977, see reference [2] below);\n   since many variations of LZ77 are patented, it is strongly\n   recommended that the implementor of a compressor follow the general\n   algorithm presented here, which is known not to be patented per se.\n   The material in this section is not part of the definition of the\n\n\n\nDeutsch                      Informational                     [Page 14]\n\f\nRFC 1951      DEFLATE Compressed Data Format Specification      May 1996\n\n\n   specification per se, and a compressor need not follow it in order to\n   be compliant.\n\n   The compressor terminates a block when it determines that starting a\n   new block with fresh trees would be useful, or when the block size\n   fills up the compressor's block buffer.\n\n   The compressor uses a chained hash table to find duplicated strings,\n   using a hash function that operates on 3-byte sequences.  At any\n   given point during compression, let XYZ be the next 3 input bytes to\n   be examined (not necessarily all different, of course).  First, the\n   compressor examines the hash chain for XYZ.  If the chain is empty,\n   the compressor simply writes out X as a literal byte and advances one\n   byte in the input.  If the hash chain is not empty, indicating that\n   the sequence XYZ (or, if we are unlucky, some other 3 bytes with the\n   same hash function value) has occurred recently, the compressor\n   compares all strings on the XYZ hash chain with the actual input data\n   sequence starting at the current point, and selects the longest\n   match.\n\n   The compressor searches the hash chains starting with the most recent\n   strings, to favor small distances and thus take advantage of the\n   Huffman encoding.  The hash chains are singly linked. There are no\n   deletions from the hash chains; the algorithm simply discards matches\n   that are too old.  To avoid a worst-case situation, very long hash\n   chains are arbitrarily truncated at a certain length, determined by a\n   run-time parameter.\n\n   To improve overall compression, the compressor optionally defers the\n   selection of matches (\"lazy matching\"): after a match of length N has\n   been found, the compressor searches for a longer match starting at\n   the next input byte.  If it finds a longer match, it truncates the\n   previous match to a length of one (thus producing a single literal\n   byte) and then emits the longer match.  Otherwise, it emits the\n   original match, and, as described above, advances N bytes before\n   continuing.\n\n   Run-time parameters also control this \"lazy match\" procedure.  If\n   compression ratio is most important, the compressor attempts a\n   complete second search regardless of the length of the first match.\n   In the normal case, if the current match is \"long enough\", the\n   compressor reduces the search for a longer match, thus speeding up\n   the process.  If speed is most important, the compressor inserts new\n   strings in the hash table only when no match was found, or when the\n   match is not \"too long\".  This degrades the compression ratio but\n   saves time since there are both fewer insertions and fewer searches.\n\n\n\n\n\nDeutsch                      Informational                     [Page 15]\n\f\nRFC 1951      DEFLATE Compressed Data Format Specification      May 1996\n\n\n5. References\n\n   [1] Huffman, D. A., \"A Method for the Construction of Minimum\n       Redundancy Codes\", Proceedings of the Institute of Radio\n       Engineers, September 1952, Volume 40, Number 9, pp. 1098-1101.\n\n   [2] Ziv J., Lempel A., \"A Universal Algorithm for Sequential Data\n       Compression\", IEEE Transactions on Information Theory, Vol. 23,\n       No. 3, pp. 337-343.\n\n   [3] Gailly, J.-L., and Adler, M., ZLIB documentation and sources,\n       available in ftp://ftp.uu.net/pub/archiving/zip/doc/\n\n   [4] Gailly, J.-L., and Adler, M., GZIP documentation and sources,\n       available as gzip-*.tar in ftp://prep.ai.mit.edu/pub/gnu/\n\n   [5] Schwartz, E. S., and Kallick, B. \"Generating a canonical prefix\n       encoding.\" Comm. ACM, 7,3 (Mar. 1964), pp. 166-169.\n\n   [6] Hirschberg and Lelewer, \"Efficient decoding of prefix codes,\"\n       Comm. ACM, 33,4, April 1990, pp. 449-459.\n\n6. Security Considerations\n\n   Any data compression method involves the reduction of redundancy in\n   the data.  Consequently, any corruption of the data is likely to have\n   severe effects and be difficult to correct.  Uncompressed text, on\n   the other hand, will probably still be readable despite the presence\n   of some corrupted bytes.\n\n   It is recommended that systems using this data format provide some\n   means of validating the integrity of the compressed data.  See\n   reference [3], for example.\n\n7. Source code\n\n   Source code for a C language implementation of a \"deflate\" compliant\n   compressor and decompressor is available within the zlib package at\n   ftp://ftp.uu.net/pub/archiving/zip/zlib/.\n\n8. Acknowledgements\n\n   Trademarks cited in this document are the property of their\n   respective owners.\n\n   Phil Katz designed the deflate format.  Jean-Loup Gailly and Mark\n   Adler wrote the related software described in this specification.\n   Glenn Randers-Pehrson converted this document to RFC and HTML format.\n\n\n\nDeutsch                      Informational                     [Page 16]\n\f\nRFC 1951      DEFLATE Compressed Data Format Specification      May 1996\n\n\n9. Author's Address\n\n   L. Peter Deutsch\n   Aladdin Enterprises\n   203 Santa Margarita Ave.\n   Menlo Park, CA 94025\n\n   Phone: (415) 322-0103 (AM only)\n   FAX:   (415) 322-1734\n   EMail: <ghost@aladdin.com>\n\n   Questions about the technical content of this specification can be\n   sent by email to:\n\n   Jean-Loup Gailly <gzip@prep.ai.mit.edu> and\n   Mark Adler <madler@alumni.caltech.edu>\n\n   Editorial comments on this specification can be sent by email to:\n\n   L. Peter Deutsch <ghost@aladdin.com> and\n   Glenn Randers-Pehrson <randeg@alumni.rpi.edu>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nDeutsch                      Informational                     [Page 17]\n\f\n"
  },
  {
    "path": "external/zlib/doc/rfc1952.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                         P. Deutsch\nRequest for Comments: 1952                           Aladdin Enterprises\nCategory: Informational                                         May 1996\n\n\n               GZIP file format specification version 4.3\n\nStatus of This Memo\n\n   This memo provides information for the Internet community.  This memo\n   does not specify an Internet standard of any kind.  Distribution of\n   this memo is unlimited.\n\nIESG Note:\n\n   The IESG takes no position on the validity of any Intellectual\n   Property Rights statements contained in this document.\n\nNotices\n\n   Copyright (c) 1996 L. Peter Deutsch\n\n   Permission is granted to copy and distribute this document for any\n   purpose and without charge, including translations into other\n   languages and incorporation into compilations, provided that the\n   copyright notice and this notice are preserved, and that any\n   substantive changes or deletions from the original are clearly\n   marked.\n\n   A pointer to the latest version of this and related documentation in\n   HTML format can be found at the URL\n   <ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html>.\n\nAbstract\n\n   This specification defines a lossless compressed data format that is\n   compatible with the widely used GZIP utility.  The format includes a\n   cyclic redundancy check value for detecting data corruption.  The\n   format presently uses the DEFLATE method of compression but can be\n   easily extended to use other compression methods.  The format can be\n   implemented readily in a manner not covered by patents.\n\n\n\n\n\n\n\n\n\n\nDeutsch                      Informational                      [Page 1]\n\f\nRFC 1952             GZIP File Format Specification             May 1996\n\n\nTable of Contents\n\n   1. Introduction ................................................... 2\n      1.1. Purpose ................................................... 2\n      1.2. Intended audience ......................................... 3\n      1.3. Scope ..................................................... 3\n      1.4. Compliance ................................................ 3\n      1.5. Definitions of terms and conventions used ................. 3\n      1.6. Changes from previous versions ............................ 3\n   2. Detailed specification ......................................... 4\n      2.1. Overall conventions ....................................... 4\n      2.2. File format ............................................... 5\n      2.3. Member format ............................................. 5\n          2.3.1. Member header and trailer ........................... 6\n              2.3.1.1. Extra field ................................... 8\n              2.3.1.2. Compliance .................................... 9\n      3. References .................................................. 9\n      4. Security Considerations .................................... 10\n      5. Acknowledgements ........................................... 10\n      6. Author's Address ........................................... 10\n      7. Appendix: Jean-Loup Gailly's gzip utility .................. 11\n      8. Appendix: Sample CRC Code .................................. 11\n\n1. Introduction\n\n   1.1. Purpose\n\n      The purpose of this specification is to define a lossless\n      compressed data format that:\n\n          * Is independent of CPU type, operating system, file system,\n            and character set, and hence can be used for interchange;\n          * Can compress or decompress a data stream (as opposed to a\n            randomly accessible file) to produce another data stream,\n            using only an a priori bounded amount of intermediate\n            storage, and hence can be used in data communications or\n            similar structures such as Unix filters;\n          * Compresses data with efficiency comparable to the best\n            currently available general-purpose compression methods,\n            and in particular considerably better than the \"compress\"\n            program;\n          * Can be implemented readily in a manner not covered by\n            patents, and hence can be practiced freely;\n          * Is compatible with the file format produced by the current\n            widely used gzip utility, in that conforming decompressors\n            will be able to read data produced by the existing gzip\n            compressor.\n\n\n\n\nDeutsch                      Informational                      [Page 2]\n\f\nRFC 1952             GZIP File Format Specification             May 1996\n\n\n      The data format defined by this specification does not attempt to:\n\n          * Provide random access to compressed data;\n          * Compress specialized data (e.g., raster graphics) as well as\n            the best currently available specialized algorithms.\n\n   1.2. Intended audience\n\n      This specification is intended for use by implementors of software\n      to compress data into gzip format and/or decompress data from gzip\n      format.\n\n      The text of the specification assumes a basic background in\n      programming at the level of bits and other primitive data\n      representations.\n\n   1.3. Scope\n\n      The specification specifies a compression method and a file format\n      (the latter assuming only that a file can store a sequence of\n      arbitrary bytes).  It does not specify any particular interface to\n      a file system or anything about character sets or encodings\n      (except for file names and comments, which are optional).\n\n   1.4. Compliance\n\n      Unless otherwise indicated below, a compliant decompressor must be\n      able to accept and decompress any file that conforms to all the\n      specifications presented here; a compliant compressor must produce\n      files that conform to all the specifications presented here.  The\n      material in the appendices is not part of the specification per se\n      and is not relevant to compliance.\n\n   1.5. Definitions of terms and conventions used\n\n      byte: 8 bits stored or transmitted as a unit (same as an octet).\n      (For this specification, a byte is exactly 8 bits, even on\n      machines which store a character on a number of bits different\n      from 8.)  See below for the numbering of bits within a byte.\n\n   1.6. Changes from previous versions\n\n      There have been no technical changes to the gzip format since\n      version 4.1 of this specification.  In version 4.2, some\n      terminology was changed, and the sample CRC code was rewritten for\n      clarity and to eliminate the requirement for the caller to do pre-\n      and post-conditioning.  Version 4.3 is a conversion of the\n      specification to RFC style.\n\n\n\nDeutsch                      Informational                      [Page 3]\n\f\nRFC 1952             GZIP File Format Specification             May 1996\n\n\n2. Detailed specification\n\n   2.1. Overall conventions\n\n      In the diagrams below, a box like this:\n\n         +---+\n         |   | <-- the vertical bars might be missing\n         +---+\n\n      represents one byte; a box like this:\n\n         +==============+\n         |              |\n         +==============+\n\n      represents a variable number of bytes.\n\n      Bytes stored within a computer do not have a \"bit order\", since\n      they are always treated as a unit.  However, a byte considered as\n      an integer between 0 and 255 does have a most- and least-\n      significant bit, and since we write numbers with the most-\n      significant digit on the left, we also write bytes with the most-\n      significant bit on the left.  In the diagrams below, we number the\n      bits of a byte so that bit 0 is the least-significant bit, i.e.,\n      the bits are numbered:\n\n         +--------+\n         |76543210|\n         +--------+\n\n      This document does not address the issue of the order in which\n      bits of a byte are transmitted on a bit-sequential medium, since\n      the data format described here is byte- rather than bit-oriented.\n\n      Within a computer, a number may occupy multiple bytes.  All\n      multi-byte numbers in the format described here are stored with\n      the least-significant byte first (at the lower memory address).\n      For example, the decimal number 520 is stored as:\n\n             0        1\n         +--------+--------+\n         |00001000|00000010|\n         +--------+--------+\n          ^        ^\n          |        |\n          |        + more significant byte = 2 x 256\n          + less significant byte = 8\n\n\n\nDeutsch                      Informational                      [Page 4]\n\f\nRFC 1952             GZIP File Format Specification             May 1996\n\n\n   2.2. File format\n\n      A gzip file consists of a series of \"members\" (compressed data\n      sets).  The format of each member is specified in the following\n      section.  The members simply appear one after another in the file,\n      with no additional information before, between, or after them.\n\n   2.3. Member format\n\n      Each member has the following structure:\n\n         +---+---+---+---+---+---+---+---+---+---+\n         |ID1|ID2|CM |FLG|     MTIME     |XFL|OS | (more-->)\n         +---+---+---+---+---+---+---+---+---+---+\n\n      (if FLG.FEXTRA set)\n\n         +---+---+=================================+\n         | XLEN  |...XLEN bytes of \"extra field\"...| (more-->)\n         +---+---+=================================+\n\n      (if FLG.FNAME set)\n\n         +=========================================+\n         |...original file name, zero-terminated...| (more-->)\n         +=========================================+\n\n      (if FLG.FCOMMENT set)\n\n         +===================================+\n         |...file comment, zero-terminated...| (more-->)\n         +===================================+\n\n      (if FLG.FHCRC set)\n\n         +---+---+\n         | CRC16 |\n         +---+---+\n\n         +=======================+\n         |...compressed blocks...| (more-->)\n         +=======================+\n\n           0   1   2   3   4   5   6   7\n         +---+---+---+---+---+---+---+---+\n         |     CRC32     |     ISIZE     |\n         +---+---+---+---+---+---+---+---+\n\n\n\n\nDeutsch                      Informational                      [Page 5]\n\f\nRFC 1952             GZIP File Format Specification             May 1996\n\n\n      2.3.1. Member header and trailer\n\n         ID1 (IDentification 1)\n         ID2 (IDentification 2)\n            These have the fixed values ID1 = 31 (0x1f, \\037), ID2 = 139\n            (0x8b, \\213), to identify the file as being in gzip format.\n\n         CM (Compression Method)\n            This identifies the compression method used in the file.  CM\n            = 0-7 are reserved.  CM = 8 denotes the \"deflate\"\n            compression method, which is the one customarily used by\n            gzip and which is documented elsewhere.\n\n         FLG (FLaGs)\n            This flag byte is divided into individual bits as follows:\n\n               bit 0   FTEXT\n               bit 1   FHCRC\n               bit 2   FEXTRA\n               bit 3   FNAME\n               bit 4   FCOMMENT\n               bit 5   reserved\n               bit 6   reserved\n               bit 7   reserved\n\n            If FTEXT is set, the file is probably ASCII text.  This is\n            an optional indication, which the compressor may set by\n            checking a small amount of the input data to see whether any\n            non-ASCII characters are present.  In case of doubt, FTEXT\n            is cleared, indicating binary data. For systems which have\n            different file formats for ascii text and binary data, the\n            decompressor can use FTEXT to choose the appropriate format.\n            We deliberately do not specify the algorithm used to set\n            this bit, since a compressor always has the option of\n            leaving it cleared and a decompressor always has the option\n            of ignoring it and letting some other program handle issues\n            of data conversion.\n\n            If FHCRC is set, a CRC16 for the gzip header is present,\n            immediately before the compressed data. The CRC16 consists\n            of the two least significant bytes of the CRC32 for all\n            bytes of the gzip header up to and not including the CRC16.\n            [The FHCRC bit was never set by versions of gzip up to\n            1.2.4, even though it was documented with a different\n            meaning in gzip 1.2.4.]\n\n            If FEXTRA is set, optional extra fields are present, as\n            described in a following section.\n\n\n\nDeutsch                      Informational                      [Page 6]\n\f\nRFC 1952             GZIP File Format Specification             May 1996\n\n\n            If FNAME is set, an original file name is present,\n            terminated by a zero byte.  The name must consist of ISO\n            8859-1 (LATIN-1) characters; on operating systems using\n            EBCDIC or any other character set for file names, the name\n            must be translated to the ISO LATIN-1 character set.  This\n            is the original name of the file being compressed, with any\n            directory components removed, and, if the file being\n            compressed is on a file system with case insensitive names,\n            forced to lower case. There is no original file name if the\n            data was compressed from a source other than a named file;\n            for example, if the source was stdin on a Unix system, there\n            is no file name.\n\n            If FCOMMENT is set, a zero-terminated file comment is\n            present.  This comment is not interpreted; it is only\n            intended for human consumption.  The comment must consist of\n            ISO 8859-1 (LATIN-1) characters.  Line breaks should be\n            denoted by a single line feed character (10 decimal).\n\n            Reserved FLG bits must be zero.\n\n         MTIME (Modification TIME)\n            This gives the most recent modification time of the original\n            file being compressed.  The time is in Unix format, i.e.,\n            seconds since 00:00:00 GMT, Jan.  1, 1970.  (Note that this\n            may cause problems for MS-DOS and other systems that use\n            local rather than Universal time.)  If the compressed data\n            did not come from a file, MTIME is set to the time at which\n            compression started.  MTIME = 0 means no time stamp is\n            available.\n\n         XFL (eXtra FLags)\n            These flags are available for use by specific compression\n            methods.  The \"deflate\" method (CM = 8) sets these flags as\n            follows:\n\n               XFL = 2 - compressor used maximum compression,\n                         slowest algorithm\n               XFL = 4 - compressor used fastest algorithm\n\n         OS (Operating System)\n            This identifies the type of file system on which compression\n            took place.  This may be useful in determining end-of-line\n            convention for text files.  The currently defined values are\n            as follows:\n\n\n\n\n\n\nDeutsch                      Informational                      [Page 7]\n\f\nRFC 1952             GZIP File Format Specification             May 1996\n\n\n                 0 - FAT filesystem (MS-DOS, OS/2, NT/Win32)\n                 1 - Amiga\n                 2 - VMS (or OpenVMS)\n                 3 - Unix\n                 4 - VM/CMS\n                 5 - Atari TOS\n                 6 - HPFS filesystem (OS/2, NT)\n                 7 - Macintosh\n                 8 - Z-System\n                 9 - CP/M\n                10 - TOPS-20\n                11 - NTFS filesystem (NT)\n                12 - QDOS\n                13 - Acorn RISCOS\n               255 - unknown\n\n         XLEN (eXtra LENgth)\n            If FLG.FEXTRA is set, this gives the length of the optional\n            extra field.  See below for details.\n\n         CRC32 (CRC-32)\n            This contains a Cyclic Redundancy Check value of the\n            uncompressed data computed according to CRC-32 algorithm\n            used in the ISO 3309 standard and in section 8.1.1.6.2 of\n            ITU-T recommendation V.42.  (See http://www.iso.ch for\n            ordering ISO documents. See gopher://info.itu.ch for an\n            online version of ITU-T V.42.)\n\n         ISIZE (Input SIZE)\n            This contains the size of the original (uncompressed) input\n            data modulo 2^32.\n\n      2.3.1.1. Extra field\n\n         If the FLG.FEXTRA bit is set, an \"extra field\" is present in\n         the header, with total length XLEN bytes.  It consists of a\n         series of subfields, each of the form:\n\n            +---+---+---+---+==================================+\n            |SI1|SI2|  LEN  |... LEN bytes of subfield data ...|\n            +---+---+---+---+==================================+\n\n         SI1 and SI2 provide a subfield ID, typically two ASCII letters\n         with some mnemonic value.  Jean-Loup Gailly\n         <gzip@prep.ai.mit.edu> is maintaining a registry of subfield\n         IDs; please send him any subfield ID you wish to use.  Subfield\n         IDs with SI2 = 0 are reserved for future use.  The following\n         IDs are currently defined:\n\n\n\nDeutsch                      Informational                      [Page 8]\n\f\nRFC 1952             GZIP File Format Specification             May 1996\n\n\n            SI1         SI2         Data\n            ----------  ----------  ----\n            0x41 ('A')  0x70 ('P')  Apollo file type information\n\n         LEN gives the length of the subfield data, excluding the 4\n         initial bytes.\n\n      2.3.1.2. Compliance\n\n         A compliant compressor must produce files with correct ID1,\n         ID2, CM, CRC32, and ISIZE, but may set all the other fields in\n         the fixed-length part of the header to default values (255 for\n         OS, 0 for all others).  The compressor must set all reserved\n         bits to zero.\n\n         A compliant decompressor must check ID1, ID2, and CM, and\n         provide an error indication if any of these have incorrect\n         values.  It must examine FEXTRA/XLEN, FNAME, FCOMMENT and FHCRC\n         at least so it can skip over the optional fields if they are\n         present.  It need not examine any other part of the header or\n         trailer; in particular, a decompressor may ignore FTEXT and OS\n         and always produce binary output, and still be compliant.  A\n         compliant decompressor must give an error indication if any\n         reserved bit is non-zero, since such a bit could indicate the\n         presence of a new field that would cause subsequent data to be\n         interpreted incorrectly.\n\n3. References\n\n   [1] \"Information Processing - 8-bit single-byte coded graphic\n       character sets - Part 1: Latin alphabet No.1\" (ISO 8859-1:1987).\n       The ISO 8859-1 (Latin-1) character set is a superset of 7-bit\n       ASCII. Files defining this character set are available as\n       iso_8859-1.* in ftp://ftp.uu.net/graphics/png/documents/\n\n   [2] ISO 3309\n\n   [3] ITU-T recommendation V.42\n\n   [4] Deutsch, L.P.,\"DEFLATE Compressed Data Format Specification\",\n       available in ftp://ftp.uu.net/pub/archiving/zip/doc/\n\n   [5] Gailly, J.-L., GZIP documentation, available as gzip-*.tar in\n       ftp://prep.ai.mit.edu/pub/gnu/\n\n   [6] Sarwate, D.V., \"Computation of Cyclic Redundancy Checks via Table\n       Look-Up\", Communications of the ACM, 31(8), pp.1008-1013.\n\n\n\n\nDeutsch                      Informational                      [Page 9]\n\f\nRFC 1952             GZIP File Format Specification             May 1996\n\n\n   [7] Schwaderer, W.D., \"CRC Calculation\", April 85 PC Tech Journal,\n       pp.118-133.\n\n   [8] ftp://ftp.adelaide.edu.au/pub/rocksoft/papers/crc_v3.txt,\n       describing the CRC concept.\n\n4. Security Considerations\n\n   Any data compression method involves the reduction of redundancy in\n   the data.  Consequently, any corruption of the data is likely to have\n   severe effects and be difficult to correct.  Uncompressed text, on\n   the other hand, will probably still be readable despite the presence\n   of some corrupted bytes.\n\n   It is recommended that systems using this data format provide some\n   means of validating the integrity of the compressed data, such as by\n   setting and checking the CRC-32 check value.\n\n5. Acknowledgements\n\n   Trademarks cited in this document are the property of their\n   respective owners.\n\n   Jean-Loup Gailly designed the gzip format and wrote, with Mark Adler,\n   the related software described in this specification.  Glenn\n   Randers-Pehrson converted this document to RFC and HTML format.\n\n6. Author's Address\n\n   L. Peter Deutsch\n   Aladdin Enterprises\n   203 Santa Margarita Ave.\n   Menlo Park, CA 94025\n\n   Phone: (415) 322-0103 (AM only)\n   FAX:   (415) 322-1734\n   EMail: <ghost@aladdin.com>\n\n   Questions about the technical content of this specification can be\n   sent by email to:\n\n   Jean-Loup Gailly <gzip@prep.ai.mit.edu> and\n   Mark Adler <madler@alumni.caltech.edu>\n\n   Editorial comments on this specification can be sent by email to:\n\n   L. Peter Deutsch <ghost@aladdin.com> and\n   Glenn Randers-Pehrson <randeg@alumni.rpi.edu>\n\n\n\nDeutsch                      Informational                     [Page 10]\n\f\nRFC 1952             GZIP File Format Specification             May 1996\n\n\n7. Appendix: Jean-Loup Gailly's gzip utility\n\n   The most widely used implementation of gzip compression, and the\n   original documentation on which this specification is based, were\n   created by Jean-Loup Gailly <gzip@prep.ai.mit.edu>.  Since this\n   implementation is a de facto standard, we mention some more of its\n   features here.  Again, the material in this section is not part of\n   the specification per se, and implementations need not follow it to\n   be compliant.\n\n   When compressing or decompressing a file, gzip preserves the\n   protection, ownership, and modification time attributes on the local\n   file system, since there is no provision for representing protection\n   attributes in the gzip file format itself.  Since the file format\n   includes a modification time, the gzip decompressor provides a\n   command line switch that assigns the modification time from the file,\n   rather than the local modification time of the compressed input, to\n   the decompressed output.\n\n8. Appendix: Sample CRC Code\n\n   The following sample code represents a practical implementation of\n   the CRC (Cyclic Redundancy Check). (See also ISO 3309 and ITU-T V.42\n   for a formal specification.)\n\n   The sample code is in the ANSI C programming language. Non C users\n   may find it easier to read with these hints:\n\n      &      Bitwise AND operator.\n      ^      Bitwise exclusive-OR operator.\n      >>     Bitwise right shift operator. When applied to an\n             unsigned quantity, as here, right shift inserts zero\n             bit(s) at the left.\n      !      Logical NOT operator.\n      ++     \"n++\" increments the variable n.\n      0xNNN  0x introduces a hexadecimal (base 16) constant.\n             Suffix L indicates a long value (at least 32 bits).\n\n      /* Table of CRCs of all 8-bit messages. */\n      unsigned long crc_table[256];\n\n      /* Flag: has the table been computed? Initially false. */\n      int crc_table_computed = 0;\n\n      /* Make the table for a fast CRC. */\n      void make_crc_table(void)\n      {\n        unsigned long c;\n\n\n\nDeutsch                      Informational                     [Page 11]\n\f\nRFC 1952             GZIP File Format Specification             May 1996\n\n\n        int n, k;\n        for (n = 0; n < 256; n++) {\n          c = (unsigned long) n;\n          for (k = 0; k < 8; k++) {\n            if (c & 1) {\n              c = 0xedb88320L ^ (c >> 1);\n            } else {\n              c = c >> 1;\n            }\n          }\n          crc_table[n] = c;\n        }\n        crc_table_computed = 1;\n      }\n\n      /*\n         Update a running crc with the bytes buf[0..len-1] and return\n       the updated crc. The crc should be initialized to zero. Pre- and\n       post-conditioning (one's complement) is performed within this\n       function so it shouldn't be done by the caller. Usage example:\n\n         unsigned long crc = 0L;\n\n         while (read_buffer(buffer, length) != EOF) {\n           crc = update_crc(crc, buffer, length);\n         }\n         if (crc != original_crc) error();\n      */\n      unsigned long update_crc(unsigned long crc,\n                      unsigned char *buf, int len)\n      {\n        unsigned long c = crc ^ 0xffffffffL;\n        int n;\n\n        if (!crc_table_computed)\n          make_crc_table();\n        for (n = 0; n < len; n++) {\n          c = crc_table[(c ^ buf[n]) & 0xff] ^ (c >> 8);\n        }\n        return c ^ 0xffffffffL;\n      }\n\n      /* Return the CRC of the bytes buf[0..len-1]. */\n      unsigned long crc(unsigned char *buf, int len)\n      {\n        return update_crc(0L, buf, len);\n      }\n\n\n\n\nDeutsch                      Informational                     [Page 12]\n\f\n"
  },
  {
    "path": "external/zlib/doc/txtvsbin.txt",
    "content": "A Fast Method for Identifying Plain Text Files\n==============================================\n\n\nIntroduction\n------------\n\nGiven a file coming from an unknown source, it is sometimes desirable\nto find out whether the format of that file is plain text.  Although\nthis may appear like a simple task, a fully accurate detection of the\nfile type requires heavy-duty semantic analysis on the file contents.\nIt is, however, possible to obtain satisfactory results by employing\nvarious heuristics.\n\nPrevious versions of PKZip and other zip-compatible compression tools\nwere using a crude detection scheme: if more than 80% (4/5) of the bytes\nfound in a certain buffer are within the range [7..127], the file is\nlabeled as plain text, otherwise it is labeled as binary.  A prominent\nlimitation of this scheme is the restriction to Latin-based alphabets.\nOther alphabets, like Greek, Cyrillic or Asian, make extensive use of\nthe bytes within the range [128..255], and texts using these alphabets\nare most often misidentified by this scheme; in other words, the rate\nof false negatives is sometimes too high, which means that the recall\nis low.  Another weakness of this scheme is a reduced precision, due to\nthe false positives that may occur when binary files containing large\namounts of textual characters are misidentified as plain text.\n\nIn this article we propose a new, simple detection scheme that features\na much increased precision and a near-100% recall.  This scheme is\ndesigned to work on ASCII, Unicode and other ASCII-derived alphabets,\nand it handles single-byte encodings (ISO-8859, MacRoman, KOI8, etc.)\nand variable-sized encodings (ISO-2022, UTF-8, etc.).  Wider encodings\n(UCS-2/UTF-16 and UCS-4/UTF-32) are not handled, however.\n\n\nThe Algorithm\n-------------\n\nThe algorithm works by dividing the set of bytecodes [0..255] into three\ncategories:\n- The white list of textual bytecodes:\n  9 (TAB), 10 (LF), 13 (CR), 32 (SPACE) to 255.\n- The gray list of tolerated bytecodes:\n  7 (BEL), 8 (BS), 11 (VT), 12 (FF), 26 (SUB), 27 (ESC).\n- The black list of undesired, non-textual bytecodes:\n  0 (NUL) to 6, 14 to 31.\n\nIf a file contains at least one byte that belongs to the white list and\nno byte that belongs to the black list, then the file is categorized as\nplain text; otherwise, it is categorized as binary.  (The boundary case,\nwhen the file is empty, automatically falls into the latter category.)\n\n\nRationale\n---------\n\nThe idea behind this algorithm relies on two observations.\n\nThe first observation is that, although the full range of 7-bit codes\n[0..127] is properly specified by the ASCII standard, most control\ncharacters in the range [0..31] are not used in practice.  The only\nwidely-used, almost universally-portable control codes are 9 (TAB),\n10 (LF) and 13 (CR).  There are a few more control codes that are\nrecognized on a reduced range of platforms and text viewers/editors:\n7 (BEL), 8 (BS), 11 (VT), 12 (FF), 26 (SUB) and 27 (ESC); but these\ncodes are rarely (if ever) used alone, without being accompanied by\nsome printable text.  Even the newer, portable text formats such as\nXML avoid using control characters outside the list mentioned here.\n\nThe second observation is that most of the binary files tend to contain\ncontrol characters, especially 0 (NUL).  Even though the older text\ndetection schemes observe the presence of non-ASCII codes from the range\n[128..255], the precision rarely has to suffer if this upper range is\nlabeled as textual, because the files that are genuinely binary tend to\ncontain both control characters and codes from the upper range.  On the\nother hand, the upper range needs to be labeled as textual, because it\nis used by virtually all ASCII extensions.  In particular, this range is\nused for encoding non-Latin scripts.\n\nSince there is no counting involved, other than simply observing the\npresence or the absence of some byte values, the algorithm produces\nconsistent results, regardless what alphabet encoding is being used.\n(If counting were involved, it could be possible to obtain different\nresults on a text encoded, say, using ISO-8859-16 versus UTF-8.)\n\nThere is an extra category of plain text files that are \"polluted\" with\none or more black-listed codes, either by mistake or by peculiar design\nconsiderations.  In such cases, a scheme that tolerates a small fraction\nof black-listed codes would provide an increased recall (i.e. more true\npositives).  This, however, incurs a reduced precision overall, since\nfalse positives are more likely to appear in binary files that contain\nlarge chunks of textual data.  Furthermore, \"polluted\" plain text should\nbe regarded as binary by general-purpose text detection schemes, because\ngeneral-purpose text processing algorithms might not be applicable.\nUnder this premise, it is safe to say that our detection method provides\na near-100% recall.\n\nExperiments have been run on many files coming from various platforms\nand applications.  We tried plain text files, system logs, source code,\nformatted office documents, compiled object code, etc.  The results\nconfirm the optimistic assumptions about the capabilities of this\nalgorithm.\n\n\n--\nCosmin Truta\nLast updated: 2006-May-28\n"
  },
  {
    "path": "external/zlib/example.c",
    "content": "/* example.c -- usage example of the zlib compression library\n * Copyright (C) 1995-2006 Jean-loup Gailly.\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n/* @(#) $Id$ */\n\n#include \"zlib.h\"\n#include <stdio.h>\n\n#ifdef STDC\n#  include <string.h>\n#  include <stdlib.h>\n#endif\n\n#if defined(VMS) || defined(RISCOS)\n#  define TESTFILE \"foo-gz\"\n#else\n#  define TESTFILE \"foo.gz\"\n#endif\n\n#define CHECK_ERR(err, msg) { \\\n    if (err != Z_OK) { \\\n        fprintf(stderr, \"%s error: %d\\n\", msg, err); \\\n        exit(1); \\\n    } \\\n}\n\nconst char hello[] = \"hello, hello!\";\n/* \"hello world\" would be more standard, but the repeated \"hello\"\n * stresses the compression code better, sorry...\n */\n\nconst char dictionary[] = \"hello\";\nuLong dictId; /* Adler32 value of the dictionary */\n\nvoid test_compress      OF((Byte *compr, uLong comprLen,\n                            Byte *uncompr, uLong uncomprLen));\nvoid test_gzio          OF((const char *fname,\n                            Byte *uncompr, uLong uncomprLen));\nvoid test_deflate       OF((Byte *compr, uLong comprLen));\nvoid test_inflate       OF((Byte *compr, uLong comprLen,\n                            Byte *uncompr, uLong uncomprLen));\nvoid test_large_deflate OF((Byte *compr, uLong comprLen,\n                            Byte *uncompr, uLong uncomprLen));\nvoid test_large_inflate OF((Byte *compr, uLong comprLen,\n                            Byte *uncompr, uLong uncomprLen));\nvoid test_flush         OF((Byte *compr, uLong *comprLen));\nvoid test_sync          OF((Byte *compr, uLong comprLen,\n                            Byte *uncompr, uLong uncomprLen));\nvoid test_dict_deflate  OF((Byte *compr, uLong comprLen));\nvoid test_dict_inflate  OF((Byte *compr, uLong comprLen,\n                            Byte *uncompr, uLong uncomprLen));\nint  main               OF((int argc, char *argv[]));\n\n/* ===========================================================================\n * Test compress() and uncompress()\n */\nvoid test_compress(compr, comprLen, uncompr, uncomprLen)\n    Byte *compr, *uncompr;\n    uLong comprLen, uncomprLen;\n{\n    int err;\n    uLong len = (uLong)strlen(hello)+1;\n\n    err = compress(compr, &comprLen, (const Bytef*)hello, len);\n    CHECK_ERR(err, \"compress\");\n\n    strcpy((char*)uncompr, \"garbage\");\n\n    err = uncompress(uncompr, &uncomprLen, compr, comprLen);\n    CHECK_ERR(err, \"uncompress\");\n\n    if (strcmp((char*)uncompr, hello)) {\n        fprintf(stderr, \"bad uncompress\\n\");\n        exit(1);\n    } else {\n        printf(\"uncompress(): %s\\n\", (char *)uncompr);\n    }\n}\n\n/* ===========================================================================\n * Test read/write of .gz files\n */\nvoid test_gzio(fname, uncompr, uncomprLen)\n    const char *fname; /* compressed file name */\n    Byte *uncompr;\n    uLong uncomprLen;\n{\n#ifdef NO_GZCOMPRESS\n    fprintf(stderr, \"NO_GZCOMPRESS -- gz* functions cannot compress\\n\");\n#else\n    int err;\n    int len = (int)strlen(hello)+1;\n    gzFile file;\n    z_off_t pos;\n\n    file = gzopen(fname, \"wb\");\n    if (file == NULL) {\n        fprintf(stderr, \"gzopen error\\n\");\n        exit(1);\n    }\n    gzputc(file, 'h');\n    if (gzputs(file, \"ello\") != 4) {\n        fprintf(stderr, \"gzputs err: %s\\n\", gzerror(file, &err));\n        exit(1);\n    }\n    if (gzprintf(file, \", %s!\", \"hello\") != 8) {\n        fprintf(stderr, \"gzprintf err: %s\\n\", gzerror(file, &err));\n        exit(1);\n    }\n    gzseek(file, 1L, SEEK_CUR); /* add one zero byte */\n    gzclose(file);\n\n    file = gzopen(fname, \"rb\");\n    if (file == NULL) {\n        fprintf(stderr, \"gzopen error\\n\");\n        exit(1);\n    }\n    strcpy((char*)uncompr, \"garbage\");\n\n    if (gzread(file, uncompr, (unsigned)uncomprLen) != len) {\n        fprintf(stderr, \"gzread err: %s\\n\", gzerror(file, &err));\n        exit(1);\n    }\n    if (strcmp((char*)uncompr, hello)) {\n        fprintf(stderr, \"bad gzread: %s\\n\", (char*)uncompr);\n        exit(1);\n    } else {\n        printf(\"gzread(): %s\\n\", (char*)uncompr);\n    }\n\n    pos = gzseek(file, -8L, SEEK_CUR);\n    if (pos != 6 || gztell(file) != pos) {\n        fprintf(stderr, \"gzseek error, pos=%ld, gztell=%ld\\n\",\n                (long)pos, (long)gztell(file));\n        exit(1);\n    }\n\n    if (gzgetc(file) != ' ') {\n        fprintf(stderr, \"gzgetc error\\n\");\n        exit(1);\n    }\n\n    if (gzungetc(' ', file) != ' ') {\n        fprintf(stderr, \"gzungetc error\\n\");\n        exit(1);\n    }\n\n    gzgets(file, (char*)uncompr, (int)uncomprLen);\n    if (strlen((char*)uncompr) != 7) { /* \" hello!\" */\n        fprintf(stderr, \"gzgets err after gzseek: %s\\n\", gzerror(file, &err));\n        exit(1);\n    }\n    if (strcmp((char*)uncompr, hello + 6)) {\n        fprintf(stderr, \"bad gzgets after gzseek\\n\");\n        exit(1);\n    } else {\n        printf(\"gzgets() after gzseek: %s\\n\", (char*)uncompr);\n    }\n\n    gzclose(file);\n#endif\n}\n\n/* ===========================================================================\n * Test deflate() with small buffers\n */\nvoid test_deflate(compr, comprLen)\n    Byte *compr;\n    uLong comprLen;\n{\n    z_stream c_stream; /* compression stream */\n    int err;\n    uLong len = (uLong)strlen(hello)+1;\n\n    c_stream.zalloc = (alloc_func)0;\n    c_stream.zfree = (free_func)0;\n    c_stream.opaque = (voidpf)0;\n\n    err = deflateInit(&c_stream, Z_DEFAULT_COMPRESSION);\n    CHECK_ERR(err, \"deflateInit\");\n\n    c_stream.next_in  = (Bytef*)hello;\n    c_stream.next_out = compr;\n\n    while (c_stream.total_in != len && c_stream.total_out < comprLen) {\n        c_stream.avail_in = c_stream.avail_out = 1; /* force small buffers */\n        err = deflate(&c_stream, Z_NO_FLUSH);\n        CHECK_ERR(err, \"deflate\");\n    }\n    /* Finish the stream, still forcing small buffers: */\n    for (;;) {\n        c_stream.avail_out = 1;\n        err = deflate(&c_stream, Z_FINISH);\n        if (err == Z_STREAM_END) break;\n        CHECK_ERR(err, \"deflate\");\n    }\n\n    err = deflateEnd(&c_stream);\n    CHECK_ERR(err, \"deflateEnd\");\n}\n\n/* ===========================================================================\n * Test inflate() with small buffers\n */\nvoid test_inflate(compr, comprLen, uncompr, uncomprLen)\n    Byte *compr, *uncompr;\n    uLong comprLen, uncomprLen;\n{\n    int err;\n    z_stream d_stream; /* decompression stream */\n\n    strcpy((char*)uncompr, \"garbage\");\n\n    d_stream.zalloc = (alloc_func)0;\n    d_stream.zfree = (free_func)0;\n    d_stream.opaque = (voidpf)0;\n\n    d_stream.next_in  = compr;\n    d_stream.avail_in = 0;\n    d_stream.next_out = uncompr;\n\n    err = inflateInit(&d_stream);\n    CHECK_ERR(err, \"inflateInit\");\n\n    while (d_stream.total_out < uncomprLen && d_stream.total_in < comprLen) {\n        d_stream.avail_in = d_stream.avail_out = 1; /* force small buffers */\n        err = inflate(&d_stream, Z_NO_FLUSH);\n        if (err == Z_STREAM_END) break;\n        CHECK_ERR(err, \"inflate\");\n    }\n\n    err = inflateEnd(&d_stream);\n    CHECK_ERR(err, \"inflateEnd\");\n\n    if (strcmp((char*)uncompr, hello)) {\n        fprintf(stderr, \"bad inflate\\n\");\n        exit(1);\n    } else {\n        printf(\"inflate(): %s\\n\", (char *)uncompr);\n    }\n}\n\n/* ===========================================================================\n * Test deflate() with large buffers and dynamic change of compression level\n */\nvoid test_large_deflate(compr, comprLen, uncompr, uncomprLen)\n    Byte *compr, *uncompr;\n    uLong comprLen, uncomprLen;\n{\n    z_stream c_stream; /* compression stream */\n    int err;\n\n    c_stream.zalloc = (alloc_func)0;\n    c_stream.zfree = (free_func)0;\n    c_stream.opaque = (voidpf)0;\n\n    err = deflateInit(&c_stream, Z_BEST_SPEED);\n    CHECK_ERR(err, \"deflateInit\");\n\n    c_stream.next_out = compr;\n    c_stream.avail_out = (uInt)comprLen;\n\n    /* At this point, uncompr is still mostly zeroes, so it should compress\n     * very well:\n     */\n    c_stream.next_in = uncompr;\n    c_stream.avail_in = (uInt)uncomprLen;\n    err = deflate(&c_stream, Z_NO_FLUSH);\n    CHECK_ERR(err, \"deflate\");\n    if (c_stream.avail_in != 0) {\n        fprintf(stderr, \"deflate not greedy\\n\");\n        exit(1);\n    }\n\n    /* Feed in already compressed data and switch to no compression: */\n    deflateParams(&c_stream, Z_NO_COMPRESSION, Z_DEFAULT_STRATEGY);\n    c_stream.next_in = compr;\n    c_stream.avail_in = (uInt)comprLen/2;\n    err = deflate(&c_stream, Z_NO_FLUSH);\n    CHECK_ERR(err, \"deflate\");\n\n    /* Switch back to compressing mode: */\n    deflateParams(&c_stream, Z_BEST_COMPRESSION, Z_FILTERED);\n    c_stream.next_in = uncompr;\n    c_stream.avail_in = (uInt)uncomprLen;\n    err = deflate(&c_stream, Z_NO_FLUSH);\n    CHECK_ERR(err, \"deflate\");\n\n    err = deflate(&c_stream, Z_FINISH);\n    if (err != Z_STREAM_END) {\n        fprintf(stderr, \"deflate should report Z_STREAM_END\\n\");\n        exit(1);\n    }\n    err = deflateEnd(&c_stream);\n    CHECK_ERR(err, \"deflateEnd\");\n}\n\n/* ===========================================================================\n * Test inflate() with large buffers\n */\nvoid test_large_inflate(compr, comprLen, uncompr, uncomprLen)\n    Byte *compr, *uncompr;\n    uLong comprLen, uncomprLen;\n{\n    int err;\n    z_stream d_stream; /* decompression stream */\n\n    strcpy((char*)uncompr, \"garbage\");\n\n    d_stream.zalloc = (alloc_func)0;\n    d_stream.zfree = (free_func)0;\n    d_stream.opaque = (voidpf)0;\n\n    d_stream.next_in  = compr;\n    d_stream.avail_in = (uInt)comprLen;\n\n    err = inflateInit(&d_stream);\n    CHECK_ERR(err, \"inflateInit\");\n\n    for (;;) {\n        d_stream.next_out = uncompr;            /* discard the output */\n        d_stream.avail_out = (uInt)uncomprLen;\n        err = inflate(&d_stream, Z_NO_FLUSH);\n        if (err == Z_STREAM_END) break;\n        CHECK_ERR(err, \"large inflate\");\n    }\n\n    err = inflateEnd(&d_stream);\n    CHECK_ERR(err, \"inflateEnd\");\n\n    if (d_stream.total_out != 2*uncomprLen + comprLen/2) {\n        fprintf(stderr, \"bad large inflate: %ld\\n\", d_stream.total_out);\n        exit(1);\n    } else {\n        printf(\"large_inflate(): OK\\n\");\n    }\n}\n\n/* ===========================================================================\n * Test deflate() with full flush\n */\nvoid test_flush(compr, comprLen)\n    Byte *compr;\n    uLong *comprLen;\n{\n    z_stream c_stream; /* compression stream */\n    int err;\n    uInt len = (uInt)strlen(hello)+1;\n\n    c_stream.zalloc = (alloc_func)0;\n    c_stream.zfree = (free_func)0;\n    c_stream.opaque = (voidpf)0;\n\n    err = deflateInit(&c_stream, Z_DEFAULT_COMPRESSION);\n    CHECK_ERR(err, \"deflateInit\");\n\n    c_stream.next_in  = (Bytef*)hello;\n    c_stream.next_out = compr;\n    c_stream.avail_in = 3;\n    c_stream.avail_out = (uInt)*comprLen;\n    err = deflate(&c_stream, Z_FULL_FLUSH);\n    CHECK_ERR(err, \"deflate\");\n\n    compr[3]++; /* force an error in first compressed block */\n    c_stream.avail_in = len - 3;\n\n    err = deflate(&c_stream, Z_FINISH);\n    if (err != Z_STREAM_END) {\n        CHECK_ERR(err, \"deflate\");\n    }\n    err = deflateEnd(&c_stream);\n    CHECK_ERR(err, \"deflateEnd\");\n\n    *comprLen = c_stream.total_out;\n}\n\n/* ===========================================================================\n * Test inflateSync()\n */\nvoid test_sync(compr, comprLen, uncompr, uncomprLen)\n    Byte *compr, *uncompr;\n    uLong comprLen, uncomprLen;\n{\n    int err;\n    z_stream d_stream; /* decompression stream */\n\n    strcpy((char*)uncompr, \"garbage\");\n\n    d_stream.zalloc = (alloc_func)0;\n    d_stream.zfree = (free_func)0;\n    d_stream.opaque = (voidpf)0;\n\n    d_stream.next_in  = compr;\n    d_stream.avail_in = 2; /* just read the zlib header */\n\n    err = inflateInit(&d_stream);\n    CHECK_ERR(err, \"inflateInit\");\n\n    d_stream.next_out = uncompr;\n    d_stream.avail_out = (uInt)uncomprLen;\n\n    inflate(&d_stream, Z_NO_FLUSH);\n    CHECK_ERR(err, \"inflate\");\n\n    d_stream.avail_in = (uInt)comprLen-2;   /* read all compressed data */\n    err = inflateSync(&d_stream);           /* but skip the damaged part */\n    CHECK_ERR(err, \"inflateSync\");\n\n    err = inflate(&d_stream, Z_FINISH);\n    if (err != Z_DATA_ERROR) {\n        fprintf(stderr, \"inflate should report DATA_ERROR\\n\");\n        /* Because of incorrect adler32 */\n        exit(1);\n    }\n    err = inflateEnd(&d_stream);\n    CHECK_ERR(err, \"inflateEnd\");\n\n    printf(\"after inflateSync(): hel%s\\n\", (char *)uncompr);\n}\n\n/* ===========================================================================\n * Test deflate() with preset dictionary\n */\nvoid test_dict_deflate(compr, comprLen)\n    Byte *compr;\n    uLong comprLen;\n{\n    z_stream c_stream; /* compression stream */\n    int err;\n\n    c_stream.zalloc = (alloc_func)0;\n    c_stream.zfree = (free_func)0;\n    c_stream.opaque = (voidpf)0;\n\n    err = deflateInit(&c_stream, Z_BEST_COMPRESSION);\n    CHECK_ERR(err, \"deflateInit\");\n\n    err = deflateSetDictionary(&c_stream,\n                               (const Bytef*)dictionary, sizeof(dictionary));\n    CHECK_ERR(err, \"deflateSetDictionary\");\n\n    dictId = c_stream.adler;\n    c_stream.next_out = compr;\n    c_stream.avail_out = (uInt)comprLen;\n\n    c_stream.next_in = (Bytef*)hello;\n    c_stream.avail_in = (uInt)strlen(hello)+1;\n\n    err = deflate(&c_stream, Z_FINISH);\n    if (err != Z_STREAM_END) {\n        fprintf(stderr, \"deflate should report Z_STREAM_END\\n\");\n        exit(1);\n    }\n    err = deflateEnd(&c_stream);\n    CHECK_ERR(err, \"deflateEnd\");\n}\n\n/* ===========================================================================\n * Test inflate() with a preset dictionary\n */\nvoid test_dict_inflate(compr, comprLen, uncompr, uncomprLen)\n    Byte *compr, *uncompr;\n    uLong comprLen, uncomprLen;\n{\n    int err;\n    z_stream d_stream; /* decompression stream */\n\n    strcpy((char*)uncompr, \"garbage\");\n\n    d_stream.zalloc = (alloc_func)0;\n    d_stream.zfree = (free_func)0;\n    d_stream.opaque = (voidpf)0;\n\n    d_stream.next_in  = compr;\n    d_stream.avail_in = (uInt)comprLen;\n\n    err = inflateInit(&d_stream);\n    CHECK_ERR(err, \"inflateInit\");\n\n    d_stream.next_out = uncompr;\n    d_stream.avail_out = (uInt)uncomprLen;\n\n    for (;;) {\n        err = inflate(&d_stream, Z_NO_FLUSH);\n        if (err == Z_STREAM_END) break;\n        if (err == Z_NEED_DICT) {\n            if (d_stream.adler != dictId) {\n                fprintf(stderr, \"unexpected dictionary\");\n                exit(1);\n            }\n            err = inflateSetDictionary(&d_stream, (const Bytef*)dictionary,\n                                       sizeof(dictionary));\n        }\n        CHECK_ERR(err, \"inflate with dict\");\n    }\n\n    err = inflateEnd(&d_stream);\n    CHECK_ERR(err, \"inflateEnd\");\n\n    if (strcmp((char*)uncompr, hello)) {\n        fprintf(stderr, \"bad inflate with dict\\n\");\n        exit(1);\n    } else {\n        printf(\"inflate with dictionary: %s\\n\", (char *)uncompr);\n    }\n}\n\n/* ===========================================================================\n * Usage:  example [output.gz  [input.gz]]\n */\n\nint main(argc, argv)\n    int argc;\n    char *argv[];\n{\n    Byte *compr, *uncompr;\n    uLong comprLen = 10000*sizeof(int); /* don't overflow on MSDOS */\n    uLong uncomprLen = comprLen;\n    static const char* myVersion = ZLIB_VERSION;\n\n    if (zlibVersion()[0] != myVersion[0]) {\n        fprintf(stderr, \"incompatible zlib version\\n\");\n        exit(1);\n\n    } else if (strcmp(zlibVersion(), ZLIB_VERSION) != 0) {\n        fprintf(stderr, \"warning: different zlib version\\n\");\n    }\n\n    printf(\"zlib version %s = 0x%04x, compile flags = 0x%lx\\n\",\n            ZLIB_VERSION, ZLIB_VERNUM, zlibCompileFlags());\n\n    compr    = (Byte*)calloc((uInt)comprLen, 1);\n    uncompr  = (Byte*)calloc((uInt)uncomprLen, 1);\n    /* compr and uncompr are cleared to avoid reading uninitialized\n     * data and to ensure that uncompr compresses well.\n     */\n    if (compr == Z_NULL || uncompr == Z_NULL) {\n        printf(\"out of memory\\n\");\n        exit(1);\n    }\n    test_compress(compr, comprLen, uncompr, uncomprLen);\n\n    test_gzio((argc > 1 ? argv[1] : TESTFILE),\n              uncompr, uncomprLen);\n\n    test_deflate(compr, comprLen);\n    test_inflate(compr, comprLen, uncompr, uncomprLen);\n\n    test_large_deflate(compr, comprLen, uncompr, uncomprLen);\n    test_large_inflate(compr, comprLen, uncompr, uncomprLen);\n\n    test_flush(compr, &comprLen);\n    test_sync(compr, comprLen, uncompr, uncomprLen);\n    comprLen = uncomprLen;\n\n    test_dict_deflate(compr, comprLen);\n    test_dict_inflate(compr, comprLen, uncompr, uncomprLen);\n\n    free(compr);\n    free(uncompr);\n\n    return 0;\n}\n"
  },
  {
    "path": "external/zlib/examples/README.examples",
    "content": "This directory contains examples of the use of zlib and other relevant\nprograms and documentation.\n\nenough.c\n    calculation and justification of ENOUGH parameter in inftrees.h\n    - calculates the maximum table space used in inflate tree\n      construction over all possible Huffman codes\n\nfitblk.c\n    compress just enough input to nearly fill a requested output size\n    - zlib isn't designed to do this, but fitblk does it anyway\n\ngun.c\n    uncompress a gzip file\n    - illustrates the use of inflateBack() for high speed file-to-file\n      decompression using call-back functions\n    - is approximately twice as fast as gzip -d\n    - also provides Unix uncompress functionality, again twice as fast\n\ngzappend.c\n    append to a gzip file\n    - illustrates the use of the Z_BLOCK flush parameter for inflate()\n    - illustrates the use of deflatePrime() to start at any bit\n\ngzjoin.c\n    join gzip files without recalculating the crc or recompressing\n    - illustrates the use of the Z_BLOCK flush parameter for inflate()\n    - illustrates the use of crc32_combine()\n\ngzlog.c\ngzlog.h\n    efficiently and robustly maintain a message log file in gzip format\n    - illustrates use of raw deflate, Z_PARTIAL_FLUSH, deflatePrime(),\n      and deflateSetDictionary()\n    - illustrates use of a gzip header extra field\n\nzlib_how.html\n    painfully comprehensive description of zpipe.c (see below)\n    - describes in excruciating detail the use of deflate() and inflate()\n\nzpipe.c\n    reads and writes zlib streams from stdin to stdout\n    - illustrates the proper use of deflate() and inflate()\n    - deeply commented in zlib_how.html (see above)\n\nzran.c\n    index a zlib or gzip stream and randomly access it\n    - illustrates the use of Z_BLOCK, inflatePrime(), and\n      inflateSetDictionary() to provide random access\n"
  },
  {
    "path": "external/zlib/examples/enough.c",
    "content": "/* enough.c -- determine the maximum size of inflate's Huffman code tables over\n * all possible valid and complete Huffman codes, subject to a length limit.\n * Copyright (C) 2007, 2008 Mark Adler\n * Version 1.3  17 February 2008  Mark Adler\n */\n\n/* Version history:\n   1.0   3 Jan 2007  First version (derived from codecount.c version 1.4)\n   1.1   4 Jan 2007  Use faster incremental table usage computation\n                     Prune examine() search on previously visited states\n   1.2   5 Jan 2007  Comments clean up\n                     As inflate does, decrease root for short codes\n                     Refuse cases where inflate would increase root\n   1.3  17 Feb 2008  Add argument for initial root table size\n                     Fix bug for initial root table size == max - 1\n                     Use a macro to compute the history index\n */\n\n/*\n   Examine all possible Huffman codes for a given number of symbols and a\n   maximum code length in bits to determine the maximum table size for zilb's\n   inflate.  Only complete Huffman codes are counted.\n\n   Two codes are considered distinct if the vectors of the number of codes per\n   length are not identical.  So permutations of the symbol assignments result\n   in the same code for the counting, as do permutations of the assignments of\n   the bit values to the codes (i.e. only canonical codes are counted).\n\n   We build a code from shorter to longer lengths, determining how many symbols\n   are coded at each length.  At each step, we have how many symbols remain to\n   be coded, what the last code length used was, and how many bit patterns of\n   that length remain unused. Then we add one to the code length and double the\n   number of unused patterns to graduate to the next code length.  We then\n   assign all portions of the remaining symbols to that code length that\n   preserve the properties of a correct and eventually complete code.  Those\n   properties are: we cannot use more bit patterns than are available; and when\n   all the symbols are used, there are exactly zero possible bit patterns\n   remaining.\n\n   The inflate Huffman decoding algorithm uses two-level lookup tables for\n   speed.  There is a single first-level table to decode codes up to root bits\n   in length (root == 9 in the current inflate implementation).  The table\n   has 1 << root entries and is indexed by the next root bits of input.  Codes\n   shorter than root bits have replicated table entries, so that the correct\n   entry is pointed to regardless of the bits that follow the short code.  If\n   the code is longer than root bits, then the table entry points to a second-\n   level table.  The size of that table is determined by the longest code with\n   that root-bit prefix.  If that longest code has length len, then the table\n   has size 1 << (len - root), to index the remaining bits in that set of\n   codes.  Each subsequent root-bit prefix then has its own sub-table.  The\n   total number of table entries required by the code is calculated\n   incrementally as the number of codes at each bit length is populated.  When\n   all of the codes are shorter than root bits, then root is reduced to the\n   longest code length, resulting in a single, smaller, one-level table.\n\n   The inflate algorithm also provides for small values of root (relative to\n   the log2 of the number of symbols), where the shortest code has more bits\n   than root.  In that case, root is increased to the length of the shortest\n   code.  This program, by design, does not handle that case, so it is verified\n   that the number of symbols is less than 2^(root + 1).\n\n   In order to speed up the examination (by about ten orders of magnitude for\n   the default arguments), the intermediate states in the build-up of a code\n   are remembered and previously visited branches are pruned.  The memory\n   required for this will increase rapidly with the total number of symbols and\n   the maximum code length in bits.  However this is a very small price to pay\n   for the vast speedup.\n\n   First, all of the possible Huffman codes are counted, and reachable\n   intermediate states are noted by a non-zero count in a saved-results array.\n   Second, the intermediate states that lead to (root + 1) bit or longer codes\n   are used to look at all sub-codes from those junctures for their inflate\n   memory usage.  (The amount of memory used is not affected by the number of\n   codes of root bits or less in length.)  Third, the visited states in the\n   construction of those sub-codes and the associated calculation of the table\n   size is recalled in order to avoid recalculating from the same juncture.\n   Beginning the code examination at (root + 1) bit codes, which is enabled by\n   identifying the reachable nodes, accounts for about six of the orders of\n   magnitude of improvement for the default arguments.  About another four\n   orders of magnitude come from not revisiting previous states.  Out of\n   approximately 2x10^16 possible Huffman codes, only about 2x10^6 sub-codes\n   need to be examined to cover all of the possible table memory usage cases\n   for the default arguments of 286 symbols limited to 15-bit codes.\n\n   Note that an unsigned long long type is used for counting.  It is quite easy\n   to exceed the capacity of an eight-byte integer with a large number of\n   symbols and a large maximum code length, so multiple-precision arithmetic\n   would need to replace the unsigned long long arithmetic in that case.  This\n   program will abort if an overflow occurs.  The big_t type identifies where\n   the counting takes place.\n\n   An unsigned long long type is also used for calculating the number of\n   possible codes remaining at the maximum length.  This limits the maximum\n   code length to the number of bits in a long long minus the number of bits\n   needed to represent the symbols in a flat code.  The code_t type identifies\n   where the bit pattern counting takes place.\n */\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <assert.h>\n\n#define local static\n\n/* special data types */\ntypedef unsigned long long big_t;   /* type for code counting */\ntypedef unsigned long long code_t;  /* type for bit pattern counting */\nstruct tab {                        /* type for been here check */\n    size_t len;         /* length of bit vector in char's */\n    char *vec;          /* allocated bit vector */\n};\n\n/* The array for saving results, num[], is indexed with this triplet:\n\n      syms: number of symbols remaining to code\n      left: number of available bit patterns at length len\n      len: number of bits in the codes currently being assigned\n\n   Those indices are constrained thusly when saving results:\n\n      syms: 3..totsym (totsym == total symbols to code)\n      left: 2..syms - 1, but only the evens (so syms == 8 -> 2, 4, 6)\n      len: 1..max - 1 (max == maximum code length in bits)\n\n   syms == 2 is not saved since that immediately leads to a single code.  left\n   must be even, since it represents the number of available bit patterns at\n   the current length, which is double the number at the previous length.\n   left ends at syms-1 since left == syms immediately results in a single code.\n   (left > sym is not allowed since that would result in an incomplete code.)\n   len is less than max, since the code completes immediately when len == max.\n\n   The offset into the array is calculated for the three indices with the\n   first one (syms) being outermost, and the last one (len) being innermost.\n   We build the array with length max-1 lists for the len index, with syms-3\n   of those for each symbol.  There are totsym-2 of those, with each one\n   varying in length as a function of sym.  See the calculation of index in\n   count() for the index, and the calculation of size in main() for the size\n   of the array.\n\n   For the deflate example of 286 symbols limited to 15-bit codes, the array\n   has 284,284 entries, taking up 2.17 MB for an 8-byte big_t.  More than\n   half of the space allocated for saved results is actually used -- not all\n   possible triplets are reached in the generation of valid Huffman codes.\n */\n\n/* The array for tracking visited states, done[], is itself indexed identically\n   to the num[] array as described above for the (syms, left, len) triplet.\n   Each element in the array is further indexed by the (mem, rem) doublet,\n   where mem is the amount of inflate table space used so far, and rem is the\n   remaining unused entries in the current inflate sub-table.  Each indexed\n   element is simply one bit indicating whether the state has been visited or\n   not.  Since the ranges for mem and rem are not known a priori, each bit\n   vector is of a variable size, and grows as needed to accommodate the visited\n   states.  mem and rem are used to calculate a single index in a triangular\n   array.  Since the range of mem is expected in the default case to be about\n   ten times larger than the range of rem, the array is skewed to reduce the\n   memory usage, with eight times the range for mem than for rem.  See the\n   calculations for offset and bit in beenhere() for the details.\n\n   For the deflate example of 286 symbols limited to 15-bit codes, the bit\n   vectors grow to total approximately 21 MB, in addition to the 4.3 MB done[]\n   array itself.\n */\n\n/* Globals to avoid propagating constants or constant pointers recursively */\nlocal int max;          /* maximum allowed bit length for the codes */\nlocal int root;         /* size of base code table in bits */\nlocal int large;        /* largest code table so far */\nlocal size_t size;      /* number of elements in num and done */\nlocal int *code;        /* number of symbols assigned to each bit length */\nlocal big_t *num;       /* saved results array for code counting */\nlocal struct tab *done; /* states already evaluated array */\n\n/* Index function for num[] and done[] */\n#define INDEX(i,j,k) (((size_t)((i-1)>>1)*((i-2)>>1)+(j>>1)-1)*(max-1)+k-1)\n\n/* Free allocated space.  Uses globals code, num, and done. */\nlocal void cleanup(void)\n{\n    size_t n;\n\n    if (done != NULL) {\n        for (n = 0; n < size; n++)\n            if (done[n].len)\n                free(done[n].vec);\n        free(done);\n    }\n    if (num != NULL)\n        free(num);\n    if (code != NULL)\n        free(code);\n}\n\n/* Return the number of possible Huffman codes using bit patterns of lengths\n   len through max inclusive, coding syms symbols, with left bit patterns of\n   length len unused -- return -1 if there is an overflow in the counting.\n   Keep a record of previous results in num to prevent repeating the same\n   calculation.  Uses the globals max and num. */\nlocal big_t count(int syms, int len, int left)\n{\n    big_t sum;          /* number of possible codes from this juncture */\n    big_t got;          /* value returned from count() */\n    int least;          /* least number of syms to use at this juncture */\n    int most;           /* most number of syms to use at this juncture */\n    int use;            /* number of bit patterns to use in next call */\n    size_t index;       /* index of this case in *num */\n\n    /* see if only one possible code */\n    if (syms == left)\n        return 1;\n\n    /* note and verify the expected state */\n    assert(syms > left && left > 0 && len < max);\n\n    /* see if we've done this one already */\n    index = INDEX(syms, left, len);\n    got = num[index];\n    if (got)\n        return got;         /* we have -- return the saved result */\n\n    /* we need to use at least this many bit patterns so that the code won't be\n       incomplete at the next length (more bit patterns than symbols) */\n    least = (left << 1) - syms;\n    if (least < 0)\n        least = 0;\n\n    /* we can use at most this many bit patterns, lest there not be enough\n       available for the remaining symbols at the maximum length (if there were\n       no limit to the code length, this would become: most = left - 1) */\n    most = (((code_t)left << (max - len)) - syms) /\n            (((code_t)1 << (max - len)) - 1);\n\n    /* count all possible codes from this juncture and add them up */\n    sum = 0;\n    for (use = least; use <= most; use++) {\n        got = count(syms - use, len + 1, (left - use) << 1);\n        sum += got;\n        if (got == -1 || sum < got)         /* overflow */\n            return -1;\n    }\n\n    /* verify that all recursive calls are productive */\n    assert(sum != 0);\n\n    /* save the result and return it */\n    num[index] = sum;\n    return sum;\n}\n\n/* Return true if we've been here before, set to true if not.  Set a bit in a\n   bit vector to indicate visiting this state.  Each (syms,len,left) state\n   has a variable size bit vector indexed by (mem,rem).  The bit vector is\n   lengthened if needed to allow setting the (mem,rem) bit. */\nlocal int beenhere(int syms, int len, int left, int mem, int rem)\n{\n    size_t index;       /* index for this state's bit vector */\n    size_t offset;      /* offset in this state's bit vector */\n    int bit;            /* mask for this state's bit */\n    size_t length;      /* length of the bit vector in bytes */\n    char *vector;       /* new or enlarged bit vector */\n\n    /* point to vector for (syms,left,len), bit in vector for (mem,rem) */\n    index = INDEX(syms, left, len);\n    mem -= 1 << root;\n    offset = (mem >> 3) + rem;\n    offset = ((offset * (offset + 1)) >> 1) + rem;\n    bit = 1 << (mem & 7);\n\n    /* see if we've been here */\n    length = done[index].len;\n    if (offset < length && (done[index].vec[offset] & bit) != 0)\n        return 1;       /* done this! */\n\n    /* we haven't been here before -- set the bit to show we have now */\n\n    /* see if we need to lengthen the vector in order to set the bit */\n    if (length <= offset) {\n        /* if we have one already, enlarge it, zero out the appended space */\n        if (length) {\n            do {\n                length <<= 1;\n            } while (length <= offset);\n            vector = realloc(done[index].vec, length);\n            if (vector != NULL)\n                memset(vector + done[index].len, 0, length - done[index].len);\n        }\n\n        /* otherwise we need to make a new vector and zero it out */\n        else {\n            length = 1 << (len - root);\n            while (length <= offset)\n                length <<= 1;\n            vector = calloc(length, sizeof(char));\n        }\n\n        /* in either case, bail if we can't get the memory */\n        if (vector == NULL) {\n            fputs(\"abort: unable to allocate enough memory\\n\", stderr);\n            cleanup();\n            exit(1);\n        }\n\n        /* install the new vector */\n        done[index].len = length;\n        done[index].vec = vector;\n    }\n\n    /* set the bit */\n    done[index].vec[offset] |= bit;\n    return 0;\n}\n\n/* Examine all possible codes from the given node (syms, len, left).  Compute\n   the amount of memory required to build inflate's decoding tables, where the\n   number of code structures used so far is mem, and the number remaining in\n   the current sub-table is rem.  Uses the globals max, code, root, large, and\n   done. */\nlocal void examine(int syms, int len, int left, int mem, int rem)\n{\n    int least;          /* least number of syms to use at this juncture */\n    int most;           /* most number of syms to use at this juncture */\n    int use;            /* number of bit patterns to use in next call */\n\n    /* see if we have a complete code */\n    if (syms == left) {\n        /* set the last code entry */\n        code[len] = left;\n\n        /* complete computation of memory used by this code */\n        while (rem < left) {\n            left -= rem;\n            rem = 1 << (len - root);\n            mem += rem;\n        }\n        assert(rem == left);\n\n        /* if this is a new maximum, show the entries used and the sub-code */\n        if (mem > large) {\n            large = mem;\n            printf(\"max %d: \", mem);\n            for (use = root + 1; use <= max; use++)\n                if (code[use])\n                    printf(\"%d[%d] \", code[use], use);\n            putchar('\\n');\n            fflush(stdout);\n        }\n\n        /* remove entries as we drop back down in the recursion */\n        code[len] = 0;\n        return;\n    }\n\n    /* prune the tree if we can */\n    if (beenhere(syms, len, left, mem, rem))\n        return;\n\n    /* we need to use at least this many bit patterns so that the code won't be\n       incomplete at the next length (more bit patterns than symbols) */\n    least = (left << 1) - syms;\n    if (least < 0)\n        least = 0;\n\n    /* we can use at most this many bit patterns, lest there not be enough\n       available for the remaining symbols at the maximum length (if there were\n       no limit to the code length, this would become: most = left - 1) */\n    most = (((code_t)left << (max - len)) - syms) /\n            (((code_t)1 << (max - len)) - 1);\n\n    /* occupy least table spaces, creating new sub-tables as needed */\n    use = least;\n    while (rem < use) {\n        use -= rem;\n        rem = 1 << (len - root);\n        mem += rem;\n    }\n    rem -= use;\n\n    /* examine codes from here, updating table space as we go */\n    for (use = least; use <= most; use++) {\n        code[len] = use;\n        examine(syms - use, len + 1, (left - use) << 1,\n                mem + (rem ? 1 << (len - root) : 0), rem << 1);\n        if (rem == 0) {\n            rem = 1 << (len - root);\n            mem += rem;\n        }\n        rem--;\n    }\n\n    /* remove entries as we drop back down in the recursion */\n    code[len] = 0;\n}\n\n/* Look at all sub-codes starting with root + 1 bits.  Look at only the valid\n   intermediate code states (syms, left, len).  For each completed code,\n   calculate the amount of memory required by inflate to build the decoding\n   tables. Find the maximum amount of memory required and show the code that\n   requires that maximum.  Uses the globals max, root, and num. */\nlocal void enough(int syms)\n{\n    int n;              /* number of remaing symbols for this node */\n    int left;           /* number of unused bit patterns at this length */\n    size_t index;       /* index of this case in *num */\n\n    /* clear code */\n    for (n = 0; n <= max; n++)\n        code[n] = 0;\n\n    /* look at all (root + 1) bit and longer codes */\n    large = 1 << root;              /* base table */\n    if (root < max)                 /* otherwise, there's only a base table */\n        for (n = 3; n <= syms; n++)\n            for (left = 2; left < n; left += 2)\n            {\n                /* look at all reachable (root + 1) bit nodes, and the\n                   resulting codes (complete at root + 2 or more) */\n                index = INDEX(n, left, root + 1);\n                if (root + 1 < max && num[index])       /* reachable node */\n                    examine(n, root + 1, left, 1 << root, 0);\n\n                /* also look at root bit codes with completions at root + 1\n                   bits (not saved in num, since complete), just in case */\n                if (num[index - 1] && n <= left << 1)\n                    examine((n - left) << 1, root + 1, (n - left) << 1,\n                            1 << root, 0);\n            }\n\n    /* done */\n    printf(\"done: maximum of %d table entries\\n\", large);\n}\n\n/*\n   Examine and show the total number of possible Huffman codes for a given\n   maximum number of symbols, initial root table size, and maximum code length\n   in bits -- those are the command arguments in that order.  The default\n   values are 286, 9, and 15 respectively, for the deflate literal/length code.\n   The possible codes are counted for each number of coded symbols from two to\n   the maximum.  The counts for each of those and the total number of codes are\n   shown.  The maximum number of inflate table entires is then calculated\n   across all possible codes.  Each new maximum number of table entries and the\n   associated sub-code (starting at root + 1 == 10 bits) is shown.\n\n   To count and examine Huffman codes that are not length-limited, provide a\n   maximum length equal to the number of symbols minus one.\n\n   For the deflate literal/length code, use \"enough\".  For the deflate distance\n   code, use \"enough 30 6\".\n\n   This uses the %llu printf format to print big_t numbers, which assumes that\n   big_t is an unsigned long long.  If the big_t type is changed (for example\n   to a multiple precision type), the method of printing will also need to be\n   updated.\n */\nint main(int argc, char **argv)\n{\n    int syms;           /* total number of symbols to code */\n    int n;              /* number of symbols to code for this run */\n    big_t got;          /* return value of count() */\n    big_t sum;          /* accumulated number of codes over n */\n\n    /* set up globals for cleanup() */\n    code = NULL;\n    num = NULL;\n    done = NULL;\n\n    /* get arguments -- default to the deflate literal/length code */\n    syms = 286;\n        root = 9;\n    max = 15;\n    if (argc > 1) {\n        syms = atoi(argv[1]);\n        if (argc > 2) {\n            root = atoi(argv[2]);\n                        if (argc > 3)\n                                max = atoi(argv[3]);\n                }\n    }\n    if (argc > 4 || syms < 2 || root < 1 || max < 1) {\n        fputs(\"invalid arguments, need: [sym >= 2 [root >= 1 [max >= 1]]]\\n\",\n                          stderr);\n        return 1;\n    }\n\n    /* if not restricting the code length, the longest is syms - 1 */\n    if (max > syms - 1)\n        max = syms - 1;\n\n    /* determine the number of bits in a code_t */\n    n = 0;\n    while (((code_t)1 << n) != 0)\n        n++;\n\n    /* make sure that the calculation of most will not overflow */\n    if (max > n || syms - 2 >= (((code_t)0 - 1) >> (max - 1))) {\n        fputs(\"abort: code length too long for internal types\\n\", stderr);\n        return 1;\n    }\n\n    /* reject impossible code requests */\n    if (syms - 1 > ((code_t)1 << max) - 1) {\n        fprintf(stderr, \"%d symbols cannot be coded in %d bits\\n\",\n                syms, max);\n        return 1;\n    }\n\n    /* allocate code vector */\n    code = calloc(max + 1, sizeof(int));\n    if (code == NULL) {\n        fputs(\"abort: unable to allocate enough memory\\n\", stderr);\n        return 1;\n    }\n\n    /* determine size of saved results array, checking for overflows,\n       allocate and clear the array (set all to zero with calloc()) */\n    if (syms == 2)              /* iff max == 1 */\n        num = NULL;             /* won't be saving any results */\n    else {\n        size = syms >> 1;\n        if (size > ((size_t)0 - 1) / (n = (syms - 1) >> 1) ||\n                (size *= n, size > ((size_t)0 - 1) / (n = max - 1)) ||\n                (size *= n, size > ((size_t)0 - 1) / sizeof(big_t)) ||\n                (num = calloc(size, sizeof(big_t))) == NULL) {\n            fputs(\"abort: unable to allocate enough memory\\n\", stderr);\n            cleanup();\n            return 1;\n        }\n    }\n\n    /* count possible codes for all numbers of symbols, add up counts */\n    sum = 0;\n    for (n = 2; n <= syms; n++) {\n        got = count(n, 1, 2);\n        sum += got;\n        if (got == -1 || sum < got) {       /* overflow */\n            fputs(\"abort: can't count that high!\\n\", stderr);\n            cleanup();\n            return 1;\n        }\n        printf(\"%llu %d-codes\\n\", got, n);\n    }\n    printf(\"%llu total codes for 2 to %d symbols\", sum, syms);\n    if (max < syms - 1)\n        printf(\" (%d-bit length limit)\\n\", max);\n    else\n        puts(\" (no length limit)\");\n\n    /* allocate and clear done array for beenhere() */\n    if (syms == 2)\n        done = NULL;\n    else if (size > ((size_t)0 - 1) / sizeof(struct tab) ||\n             (done = calloc(size, sizeof(struct tab))) == NULL) {\n        fputs(\"abort: unable to allocate enough memory\\n\", stderr);\n        cleanup();\n        return 1;\n    }\n\n    /* find and show maximum inflate table usage */\n        if (root > max)                 /* reduce root to max length */\n                root = max;\n    if (syms < ((code_t)1 << (root + 1)))\n        enough(syms);\n    else\n        puts(\"cannot handle minimum code lengths > root\");\n\n    /* done */\n    cleanup();\n    return 0;\n}\n"
  },
  {
    "path": "external/zlib/examples/fitblk.c",
    "content": "/* fitblk.c: example of fitting compressed output to a specified size\n   Not copyrighted -- provided to the public domain\n   Version 1.1  25 November 2004  Mark Adler */\n\n/* Version history:\n   1.0  24 Nov 2004  First version\n   1.1  25 Nov 2004  Change deflateInit2() to deflateInit()\n                     Use fixed-size, stack-allocated raw buffers\n                     Simplify code moving compression to subroutines\n                     Use assert() for internal errors\n                     Add detailed description of approach\n */\n\n/* Approach to just fitting a requested compressed size:\n\n   fitblk performs three compression passes on a portion of the input\n   data in order to determine how much of that input will compress to\n   nearly the requested output block size.  The first pass generates\n   enough deflate blocks to produce output to fill the requested\n   output size plus a specfied excess amount (see the EXCESS define\n   below).  The last deflate block may go quite a bit past that, but\n   is discarded.  The second pass decompresses and recompresses just\n   the compressed data that fit in the requested plus excess sized\n   buffer.  The deflate process is terminated after that amount of\n   input, which is less than the amount consumed on the first pass.\n   The last deflate block of the result will be of a comparable size\n   to the final product, so that the header for that deflate block and\n   the compression ratio for that block will be about the same as in\n   the final product.  The third compression pass decompresses the\n   result of the second step, but only the compressed data up to the\n   requested size minus an amount to allow the compressed stream to\n   complete (see the MARGIN define below).  That will result in a\n   final compressed stream whose length is less than or equal to the\n   requested size.  Assuming sufficient input and a requested size\n   greater than a few hundred bytes, the shortfall will typically be\n   less than ten bytes.\n\n   If the input is short enough that the first compression completes\n   before filling the requested output size, then that compressed\n   stream is return with no recompression.\n\n   EXCESS is chosen to be just greater than the shortfall seen in a\n   two pass approach similar to the above.  That shortfall is due to\n   the last deflate block compressing more efficiently with a smaller\n   header on the second pass.  EXCESS is set to be large enough so\n   that there is enough uncompressed data for the second pass to fill\n   out the requested size, and small enough so that the final deflate\n   block of the second pass will be close in size to the final deflate\n   block of the third and final pass.  MARGIN is chosen to be just\n   large enough to assure that the final compression has enough room\n   to complete in all cases.\n */\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <assert.h>\n#include \"zlib.h\"\n\n#define local static\n\n/* print nastygram and leave */\nlocal void quit(char *why)\n{\n    fprintf(stderr, \"fitblk abort: %s\\n\", why);\n    exit(1);\n}\n\n#define RAWLEN 4096    /* intermediate uncompressed buffer size */\n\n/* compress from file to def until provided buffer is full or end of\n   input reached; return last deflate() return value, or Z_ERRNO if\n   there was read error on the file */\nlocal int partcompress(FILE *in, z_streamp def)\n{\n    int ret, flush;\n    unsigned char raw[RAWLEN];\n\n    flush = Z_NO_FLUSH;\n    do {\n        def->avail_in = fread(raw, 1, RAWLEN, in);\n        if (ferror(in))\n            return Z_ERRNO;\n        def->next_in = raw;\n        if (feof(in))\n            flush = Z_FINISH;\n        ret = deflate(def, flush);\n        assert(ret != Z_STREAM_ERROR);\n    } while (def->avail_out != 0 && flush == Z_NO_FLUSH);\n    return ret;\n}\n\n/* recompress from inf's input to def's output; the input for inf and\n   the output for def are set in those structures before calling;\n   return last deflate() return value, or Z_MEM_ERROR if inflate()\n   was not able to allocate enough memory when it needed to */\nlocal int recompress(z_streamp inf, z_streamp def)\n{\n    int ret, flush;\n    unsigned char raw[RAWLEN];\n\n    flush = Z_NO_FLUSH;\n    do {\n        /* decompress */\n        inf->avail_out = RAWLEN;\n        inf->next_out = raw;\n        ret = inflate(inf, Z_NO_FLUSH);\n        assert(ret != Z_STREAM_ERROR && ret != Z_DATA_ERROR &&\n               ret != Z_NEED_DICT);\n        if (ret == Z_MEM_ERROR)\n            return ret;\n\n        /* compress what was decompresed until done or no room */\n        def->avail_in = RAWLEN - inf->avail_out;\n        def->next_in = raw;\n        if (inf->avail_out != 0)\n            flush = Z_FINISH;\n        ret = deflate(def, flush);\n        assert(ret != Z_STREAM_ERROR);\n    } while (ret != Z_STREAM_END && def->avail_out != 0);\n    return ret;\n}\n\n#define EXCESS 256      /* empirically determined stream overage */\n#define MARGIN 8        /* amount to back off for completion */\n\n/* compress from stdin to fixed-size block on stdout */\nint main(int argc, char **argv)\n{\n    int ret;                /* return code */\n    unsigned size;          /* requested fixed output block size */\n    unsigned have;          /* bytes written by deflate() call */\n    unsigned char *blk;     /* intermediate and final stream */\n    unsigned char *tmp;     /* close to desired size stream */\n    z_stream def, inf;      /* zlib deflate and inflate states */\n\n    /* get requested output size */\n    if (argc != 2)\n        quit(\"need one argument: size of output block\");\n    ret = strtol(argv[1], argv + 1, 10);\n    if (argv[1][0] != 0)\n        quit(\"argument must be a number\");\n    if (ret < 8)            /* 8 is minimum zlib stream size */\n        quit(\"need positive size of 8 or greater\");\n    size = (unsigned)ret;\n\n    /* allocate memory for buffers and compression engine */\n    blk = malloc(size + EXCESS);\n    def.zalloc = Z_NULL;\n    def.zfree = Z_NULL;\n    def.opaque = Z_NULL;\n    ret = deflateInit(&def, Z_DEFAULT_COMPRESSION);\n    if (ret != Z_OK || blk == NULL)\n        quit(\"out of memory\");\n\n    /* compress from stdin until output full, or no more input */\n    def.avail_out = size + EXCESS;\n    def.next_out = blk;\n    ret = partcompress(stdin, &def);\n    if (ret == Z_ERRNO)\n        quit(\"error reading input\");\n\n    /* if it all fit, then size was undersubscribed -- done! */\n    if (ret == Z_STREAM_END && def.avail_out >= EXCESS) {\n        /* write block to stdout */\n        have = size + EXCESS - def.avail_out;\n        if (fwrite(blk, 1, have, stdout) != have || ferror(stdout))\n            quit(\"error writing output\");\n\n        /* clean up and print results to stderr */\n        ret = deflateEnd(&def);\n        assert(ret != Z_STREAM_ERROR);\n        free(blk);\n        fprintf(stderr,\n                \"%u bytes unused out of %u requested (all input)\\n\",\n                size - have, size);\n        return 0;\n    }\n\n    /* it didn't all fit -- set up for recompression */\n    inf.zalloc = Z_NULL;\n    inf.zfree = Z_NULL;\n    inf.opaque = Z_NULL;\n    inf.avail_in = 0;\n    inf.next_in = Z_NULL;\n    ret = inflateInit(&inf);\n    tmp = malloc(size + EXCESS);\n    if (ret != Z_OK || tmp == NULL)\n        quit(\"out of memory\");\n    ret = deflateReset(&def);\n    assert(ret != Z_STREAM_ERROR);\n\n    /* do first recompression close to the right amount */\n    inf.avail_in = size + EXCESS;\n    inf.next_in = blk;\n    def.avail_out = size + EXCESS;\n    def.next_out = tmp;\n    ret = recompress(&inf, &def);\n    if (ret == Z_MEM_ERROR)\n        quit(\"out of memory\");\n\n    /* set up for next reocmpression */\n    ret = inflateReset(&inf);\n    assert(ret != Z_STREAM_ERROR);\n    ret = deflateReset(&def);\n    assert(ret != Z_STREAM_ERROR);\n\n    /* do second and final recompression (third compression) */\n    inf.avail_in = size - MARGIN;   /* assure stream will complete */\n    inf.next_in = tmp;\n    def.avail_out = size;\n    def.next_out = blk;\n    ret = recompress(&inf, &def);\n    if (ret == Z_MEM_ERROR)\n        quit(\"out of memory\");\n    assert(ret == Z_STREAM_END);    /* otherwise MARGIN too small */\n\n    /* done -- write block to stdout */\n    have = size - def.avail_out;\n    if (fwrite(blk, 1, have, stdout) != have || ferror(stdout))\n        quit(\"error writing output\");\n\n    /* clean up and print results to stderr */\n    free(tmp);\n    ret = inflateEnd(&inf);\n    assert(ret != Z_STREAM_ERROR);\n    ret = deflateEnd(&def);\n    assert(ret != Z_STREAM_ERROR);\n    free(blk);\n    fprintf(stderr,\n            \"%u bytes unused out of %u requested (%lu input)\\n\",\n            size - have, size, def.total_in);\n    return 0;\n}\n"
  },
  {
    "path": "external/zlib/examples/gun.c",
    "content": "/* gun.c -- simple gunzip to give an example of the use of inflateBack()\n * Copyright (C) 2003, 2005, 2008, 2010 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n   Version 1.6  17 January 2010  Mark Adler */\n\n/* Version history:\n   1.0  16 Feb 2003  First version for testing of inflateBack()\n   1.1  21 Feb 2005  Decompress concatenated gzip streams\n                     Remove use of \"this\" variable (C++ keyword)\n                     Fix return value for in()\n                     Improve allocation failure checking\n                     Add typecasting for void * structures\n                     Add -h option for command version and usage\n                     Add a bunch of comments\n   1.2  20 Mar 2005  Add Unix compress (LZW) decompression\n                     Copy file attributes from input file to output file\n   1.3  12 Jun 2005  Add casts for error messages [Oberhumer]\n   1.4   8 Dec 2006  LZW decompression speed improvements\n   1.5   9 Feb 2008  Avoid warning in latest version of gcc\n   1.6  17 Jan 2010  Avoid signed/unsigned comparison warnings\n */\n\n/*\n   gun [ -t ] [ name ... ]\n\n   decompresses the data in the named gzip files.  If no arguments are given,\n   gun will decompress from stdin to stdout.  The names must end in .gz, -gz,\n   .z, -z, _z, or .Z.  The uncompressed data will be written to a file name\n   with the suffix stripped.  On success, the original file is deleted.  On\n   failure, the output file is deleted.  For most failures, the command will\n   continue to process the remaining names on the command line.  A memory\n   allocation failure will abort the command.  If -t is specified, then the\n   listed files or stdin will be tested as gzip files for integrity (without\n   checking for a proper suffix), no output will be written, and no files\n   will be deleted.\n\n   Like gzip, gun allows concatenated gzip streams and will decompress them,\n   writing all of the uncompressed data to the output.  Unlike gzip, gun allows\n   an empty file on input, and will produce no error writing an empty output\n   file.\n\n   gun will also decompress files made by Unix compress, which uses LZW\n   compression.  These files are automatically detected by virtue of their\n   magic header bytes.  Since the end of Unix compress stream is marked by the\n   end-of-file, they cannot be concantenated.  If a Unix compress stream is\n   encountered in an input file, it is the last stream in that file.\n\n   Like gunzip and uncompress, the file attributes of the orignal compressed\n   file are maintained in the final uncompressed file, to the extent that the\n   user permissions allow it.\n\n   On my Mac OS X PowerPC G4, gun is almost twice as fast as gunzip (version\n   1.2.4) is on the same file, when gun is linked with zlib 1.2.2.  Also the\n   LZW decompression provided by gun is about twice as fast as the standard\n   Unix uncompress command.\n */\n\n/* external functions and related types and constants */\n#include <stdio.h>          /* fprintf() */\n#include <stdlib.h>         /* malloc(), free() */\n#include <string.h>         /* strerror(), strcmp(), strlen(), memcpy() */\n#include <errno.h>          /* errno */\n#include <fcntl.h>          /* open() */\n#include <unistd.h>         /* read(), write(), close(), chown(), unlink() */\n#include <sys/types.h>\n#include <sys/stat.h>       /* stat(), chmod() */\n#include <utime.h>          /* utime() */\n#include \"zlib.h\"           /* inflateBackInit(), inflateBack(), */\n                            /* inflateBackEnd(), crc32() */\n\n/* function declaration */\n#define local static\n\n/* buffer constants */\n#define SIZE 32768U         /* input and output buffer sizes */\n#define PIECE 16384         /* limits i/o chunks for 16-bit int case */\n\n/* structure for infback() to pass to input function in() -- it maintains the\n   input file and a buffer of size SIZE */\nstruct ind {\n    int infile;\n    unsigned char *inbuf;\n};\n\n/* Load input buffer, assumed to be empty, and return bytes loaded and a\n   pointer to them.  read() is called until the buffer is full, or until it\n   returns end-of-file or error.  Return 0 on error. */\nlocal unsigned in(void *in_desc, unsigned char **buf)\n{\n    int ret;\n    unsigned len;\n    unsigned char *next;\n    struct ind *me = (struct ind *)in_desc;\n\n    next = me->inbuf;\n    *buf = next;\n    len = 0;\n    do {\n        ret = PIECE;\n        if ((unsigned)ret > SIZE - len)\n            ret = (int)(SIZE - len);\n        ret = (int)read(me->infile, next, ret);\n        if (ret == -1) {\n            len = 0;\n            break;\n        }\n        next += ret;\n        len += ret;\n    } while (ret != 0 && len < SIZE);\n    return len;\n}\n\n/* structure for infback() to pass to output function out() -- it maintains the\n   output file, a running CRC-32 check on the output and the total number of\n   bytes output, both for checking against the gzip trailer.  (The length in\n   the gzip trailer is stored modulo 2^32, so it's ok if a long is 32 bits and\n   the output is greater than 4 GB.) */\nstruct outd {\n    int outfile;\n    int check;                  /* true if checking crc and total */\n    unsigned long crc;\n    unsigned long total;\n};\n\n/* Write output buffer and update the CRC-32 and total bytes written.  write()\n   is called until all of the output is written or an error is encountered.\n   On success out() returns 0.  For a write failure, out() returns 1.  If the\n   output file descriptor is -1, then nothing is written.\n */\nlocal int out(void *out_desc, unsigned char *buf, unsigned len)\n{\n    int ret;\n    struct outd *me = (struct outd *)out_desc;\n\n    if (me->check) {\n        me->crc = crc32(me->crc, buf, len);\n        me->total += len;\n    }\n    if (me->outfile != -1)\n        do {\n            ret = PIECE;\n            if ((unsigned)ret > len)\n                ret = (int)len;\n            ret = (int)write(me->outfile, buf, ret);\n            if (ret == -1)\n                return 1;\n            buf += ret;\n            len -= ret;\n        } while (len != 0);\n    return 0;\n}\n\n/* next input byte macro for use inside lunpipe() and gunpipe() */\n#define NEXT() (have ? 0 : (have = in(indp, &next)), \\\n                last = have ? (have--, (int)(*next++)) : -1)\n\n/* memory for gunpipe() and lunpipe() --\n   the first 256 entries of prefix[] and suffix[] are never used, could\n   have offset the index, but it's faster to waste the memory */\nunsigned char inbuf[SIZE];              /* input buffer */\nunsigned char outbuf[SIZE];             /* output buffer */\nunsigned short prefix[65536];           /* index to LZW prefix string */\nunsigned char suffix[65536];            /* one-character LZW suffix */\nunsigned char match[65280 + 2];         /* buffer for reversed match or gzip\n                                           32K sliding window */\n\n/* throw out what's left in the current bits byte buffer (this is a vestigial\n   aspect of the compressed data format derived from an implementation that\n   made use of a special VAX machine instruction!) */\n#define FLUSHCODE() \\\n    do { \\\n        left = 0; \\\n        rem = 0; \\\n        if (chunk > have) { \\\n            chunk -= have; \\\n            have = 0; \\\n            if (NEXT() == -1) \\\n                break; \\\n            chunk--; \\\n            if (chunk > have) { \\\n                chunk = have = 0; \\\n                break; \\\n            } \\\n        } \\\n        have -= chunk; \\\n        next += chunk; \\\n        chunk = 0; \\\n    } while (0)\n\n/* Decompress a compress (LZW) file from indp to outfile.  The compress magic\n   header (two bytes) has already been read and verified.  There are have bytes\n   of buffered input at next.  strm is used for passing error information back\n   to gunpipe().\n\n   lunpipe() will return Z_OK on success, Z_BUF_ERROR for an unexpected end of\n   file, read error, or write error (a write error indicated by strm->next_in\n   not equal to Z_NULL), or Z_DATA_ERROR for invalid input.\n */\nlocal int lunpipe(unsigned have, unsigned char *next, struct ind *indp,\n                  int outfile, z_stream *strm)\n{\n    int last;                   /* last byte read by NEXT(), or -1 if EOF */\n    unsigned chunk;             /* bytes left in current chunk */\n    int left;                   /* bits left in rem */\n    unsigned rem;               /* unused bits from input */\n    int bits;                   /* current bits per code */\n    unsigned code;              /* code, table traversal index */\n    unsigned mask;              /* mask for current bits codes */\n    int max;                    /* maximum bits per code for this stream */\n    unsigned flags;             /* compress flags, then block compress flag */\n    unsigned end;               /* last valid entry in prefix/suffix tables */\n    unsigned temp;              /* current code */\n    unsigned prev;              /* previous code */\n    unsigned final;             /* last character written for previous code */\n    unsigned stack;             /* next position for reversed string */\n    unsigned outcnt;            /* bytes in output buffer */\n    struct outd outd;           /* output structure */\n    unsigned char *p;\n\n    /* set up output */\n    outd.outfile = outfile;\n    outd.check = 0;\n\n    /* process remainder of compress header -- a flags byte */\n    flags = NEXT();\n    if (last == -1)\n        return Z_BUF_ERROR;\n    if (flags & 0x60) {\n        strm->msg = (char *)\"unknown lzw flags set\";\n        return Z_DATA_ERROR;\n    }\n    max = flags & 0x1f;\n    if (max < 9 || max > 16) {\n        strm->msg = (char *)\"lzw bits out of range\";\n        return Z_DATA_ERROR;\n    }\n    if (max == 9)                           /* 9 doesn't really mean 9 */\n        max = 10;\n    flags &= 0x80;                          /* true if block compress */\n\n    /* clear table */\n    bits = 9;\n    mask = 0x1ff;\n    end = flags ? 256 : 255;\n\n    /* set up: get first 9-bit code, which is the first decompressed byte, but\n       don't create a table entry until the next code */\n    if (NEXT() == -1)                       /* no compressed data is ok */\n        return Z_OK;\n    final = prev = (unsigned)last;          /* low 8 bits of code */\n    if (NEXT() == -1)                       /* missing a bit */\n        return Z_BUF_ERROR;\n    if (last & 1) {                         /* code must be < 256 */\n        strm->msg = (char *)\"invalid lzw code\";\n        return Z_DATA_ERROR;\n    }\n    rem = (unsigned)last >> 1;              /* remaining 7 bits */\n    left = 7;\n    chunk = bits - 2;                       /* 7 bytes left in this chunk */\n    outbuf[0] = (unsigned char)final;       /* write first decompressed byte */\n    outcnt = 1;\n\n    /* decode codes */\n    stack = 0;\n    for (;;) {\n        /* if the table will be full after this, increment the code size */\n        if (end >= mask && bits < max) {\n            FLUSHCODE();\n            bits++;\n            mask <<= 1;\n            mask++;\n        }\n\n        /* get a code of length bits */\n        if (chunk == 0)                     /* decrement chunk modulo bits */\n            chunk = bits;\n        code = rem;                         /* low bits of code */\n        if (NEXT() == -1) {                 /* EOF is end of compressed data */\n            /* write remaining buffered output */\n            if (outcnt && out(&outd, outbuf, outcnt)) {\n                strm->next_in = outbuf;     /* signal write error */\n                return Z_BUF_ERROR;\n            }\n            return Z_OK;\n        }\n        code += (unsigned)last << left;     /* middle (or high) bits of code */\n        left += 8;\n        chunk--;\n        if (bits > left) {                  /* need more bits */\n            if (NEXT() == -1)               /* can't end in middle of code */\n                return Z_BUF_ERROR;\n            code += (unsigned)last << left; /* high bits of code */\n            left += 8;\n            chunk--;\n        }\n        code &= mask;                       /* mask to current code length */\n        left -= bits;                       /* number of unused bits */\n        rem = (unsigned)last >> (8 - left); /* unused bits from last byte */\n\n        /* process clear code (256) */\n        if (code == 256 && flags) {\n            FLUSHCODE();\n            bits = 9;                       /* initialize bits and mask */\n            mask = 0x1ff;\n            end = 255;                      /* empty table */\n            continue;                       /* get next code */\n        }\n\n        /* special code to reuse last match */\n        temp = code;                        /* save the current code */\n        if (code > end) {\n            /* Be picky on the allowed code here, and make sure that the code\n               we drop through (prev) will be a valid index so that random\n               input does not cause an exception.  The code != end + 1 check is\n               empirically derived, and not checked in the original uncompress\n               code.  If this ever causes a problem, that check could be safely\n               removed.  Leaving this check in greatly improves gun's ability\n               to detect random or corrupted input after a compress header.\n               In any case, the prev > end check must be retained. */\n            if (code != end + 1 || prev > end) {\n                strm->msg = (char *)\"invalid lzw code\";\n                return Z_DATA_ERROR;\n            }\n            match[stack++] = (unsigned char)final;\n            code = prev;\n        }\n\n        /* walk through linked list to generate output in reverse order */\n        p = match + stack;\n        while (code >= 256) {\n            *p++ = suffix[code];\n            code = prefix[code];\n        }\n        stack = p - match;\n        match[stack++] = (unsigned char)code;\n        final = code;\n\n        /* link new table entry */\n        if (end < mask) {\n            end++;\n            prefix[end] = (unsigned short)prev;\n            suffix[end] = (unsigned char)final;\n        }\n\n        /* set previous code for next iteration */\n        prev = temp;\n\n        /* write output in forward order */\n        while (stack > SIZE - outcnt) {\n            while (outcnt < SIZE)\n                outbuf[outcnt++] = match[--stack];\n            if (out(&outd, outbuf, outcnt)) {\n                strm->next_in = outbuf; /* signal write error */\n                return Z_BUF_ERROR;\n            }\n            outcnt = 0;\n        }\n        p = match + stack;\n        do {\n            outbuf[outcnt++] = *--p;\n        } while (p > match);\n        stack = 0;\n\n        /* loop for next code with final and prev as the last match, rem and\n           left provide the first 0..7 bits of the next code, end is the last\n           valid table entry */\n    }\n}\n\n/* Decompress a gzip file from infile to outfile.  strm is assumed to have been\n   successfully initialized with inflateBackInit().  The input file may consist\n   of a series of gzip streams, in which case all of them will be decompressed\n   to the output file.  If outfile is -1, then the gzip stream(s) integrity is\n   checked and nothing is written.\n\n   The return value is a zlib error code: Z_MEM_ERROR if out of memory,\n   Z_DATA_ERROR if the header or the compressed data is invalid, or if the\n   trailer CRC-32 check or length doesn't match, Z_BUF_ERROR if the input ends\n   prematurely or a write error occurs, or Z_ERRNO if junk (not a another gzip\n   stream) follows a valid gzip stream.\n */\nlocal int gunpipe(z_stream *strm, int infile, int outfile)\n{\n    int ret, first, last;\n    unsigned have, flags, len;\n    unsigned char *next = NULL;\n    struct ind ind, *indp;\n    struct outd outd;\n\n    /* setup input buffer */\n    ind.infile = infile;\n    ind.inbuf = inbuf;\n    indp = &ind;\n\n    /* decompress concatenated gzip streams */\n    have = 0;                               /* no input data read in yet */\n    first = 1;                              /* looking for first gzip header */\n    strm->next_in = Z_NULL;                 /* so Z_BUF_ERROR means EOF */\n    for (;;) {\n        /* look for the two magic header bytes for a gzip stream */\n        if (NEXT() == -1) {\n            ret = Z_OK;\n            break;                          /* empty gzip stream is ok */\n        }\n        if (last != 31 || (NEXT() != 139 && last != 157)) {\n            strm->msg = (char *)\"incorrect header check\";\n            ret = first ? Z_DATA_ERROR : Z_ERRNO;\n            break;                          /* not a gzip or compress header */\n        }\n        first = 0;                          /* next non-header is junk */\n\n        /* process a compress (LZW) file -- can't be concatenated after this */\n        if (last == 157) {\n            ret = lunpipe(have, next, indp, outfile, strm);\n            break;\n        }\n\n        /* process remainder of gzip header */\n        ret = Z_BUF_ERROR;\n        if (NEXT() != 8) {                  /* only deflate method allowed */\n            if (last == -1) break;\n            strm->msg = (char *)\"unknown compression method\";\n            ret = Z_DATA_ERROR;\n            break;\n        }\n        flags = NEXT();                     /* header flags */\n        NEXT();                             /* discard mod time, xflgs, os */\n        NEXT();\n        NEXT();\n        NEXT();\n        NEXT();\n        NEXT();\n        if (last == -1) break;\n        if (flags & 0xe0) {\n            strm->msg = (char *)\"unknown header flags set\";\n            ret = Z_DATA_ERROR;\n            break;\n        }\n        if (flags & 4) {                    /* extra field */\n            len = NEXT();\n            len += (unsigned)(NEXT()) << 8;\n            if (last == -1) break;\n            while (len > have) {\n                len -= have;\n                have = 0;\n                if (NEXT() == -1) break;\n                len--;\n            }\n            if (last == -1) break;\n            have -= len;\n            next += len;\n        }\n        if (flags & 8)                      /* file name */\n            while (NEXT() != 0 && last != -1)\n                ;\n        if (flags & 16)                     /* comment */\n            while (NEXT() != 0 && last != -1)\n                ;\n        if (flags & 2) {                    /* header crc */\n            NEXT();\n            NEXT();\n        }\n        if (last == -1) break;\n\n        /* set up output */\n        outd.outfile = outfile;\n        outd.check = 1;\n        outd.crc = crc32(0L, Z_NULL, 0);\n        outd.total = 0;\n\n        /* decompress data to output */\n        strm->next_in = next;\n        strm->avail_in = have;\n        ret = inflateBack(strm, in, indp, out, &outd);\n        if (ret != Z_STREAM_END) break;\n        next = strm->next_in;\n        have = strm->avail_in;\n        strm->next_in = Z_NULL;             /* so Z_BUF_ERROR means EOF */\n\n        /* check trailer */\n        ret = Z_BUF_ERROR;\n        if (NEXT() != (int)(outd.crc & 0xff) ||\n            NEXT() != (int)((outd.crc >> 8) & 0xff) ||\n            NEXT() != (int)((outd.crc >> 16) & 0xff) ||\n            NEXT() != (int)((outd.crc >> 24) & 0xff)) {\n            /* crc error */\n            if (last != -1) {\n                strm->msg = (char *)\"incorrect data check\";\n                ret = Z_DATA_ERROR;\n            }\n            break;\n        }\n        if (NEXT() != (int)(outd.total & 0xff) ||\n            NEXT() != (int)((outd.total >> 8) & 0xff) ||\n            NEXT() != (int)((outd.total >> 16) & 0xff) ||\n            NEXT() != (int)((outd.total >> 24) & 0xff)) {\n            /* length error */\n            if (last != -1) {\n                strm->msg = (char *)\"incorrect length check\";\n                ret = Z_DATA_ERROR;\n            }\n            break;\n        }\n\n        /* go back and look for another gzip stream */\n    }\n\n    /* clean up and return */\n    return ret;\n}\n\n/* Copy file attributes, from -> to, as best we can.  This is best effort, so\n   no errors are reported.  The mode bits, including suid, sgid, and the sticky\n   bit are copied (if allowed), the owner's user id and group id are copied\n   (again if allowed), and the access and modify times are copied. */\nlocal void copymeta(char *from, char *to)\n{\n    struct stat was;\n    struct utimbuf when;\n\n    /* get all of from's Unix meta data, return if not a regular file */\n    if (stat(from, &was) != 0 || (was.st_mode & S_IFMT) != S_IFREG)\n        return;\n\n    /* set to's mode bits, ignore errors */\n    (void)chmod(to, was.st_mode & 07777);\n\n    /* copy owner's user and group, ignore errors */\n    (void)chown(to, was.st_uid, was.st_gid);\n\n    /* copy access and modify times, ignore errors */\n    when.actime = was.st_atime;\n    when.modtime = was.st_mtime;\n    (void)utime(to, &when);\n}\n\n/* Decompress the file inname to the file outnname, of if test is true, just\n   decompress without writing and check the gzip trailer for integrity.  If\n   inname is NULL or an empty string, read from stdin.  If outname is NULL or\n   an empty string, write to stdout.  strm is a pre-initialized inflateBack\n   structure.  When appropriate, copy the file attributes from inname to\n   outname.\n\n   gunzip() returns 1 if there is an out-of-memory error or an unexpected\n   return code from gunpipe().  Otherwise it returns 0.\n */\nlocal int gunzip(z_stream *strm, char *inname, char *outname, int test)\n{\n    int ret;\n    int infile, outfile;\n\n    /* open files */\n    if (inname == NULL || *inname == 0) {\n        inname = \"-\";\n        infile = 0;     /* stdin */\n    }\n    else {\n        infile = open(inname, O_RDONLY, 0);\n        if (infile == -1) {\n            fprintf(stderr, \"gun cannot open %s\\n\", inname);\n            return 0;\n        }\n    }\n    if (test)\n        outfile = -1;\n    else if (outname == NULL || *outname == 0) {\n        outname = \"-\";\n        outfile = 1;    /* stdout */\n    }\n    else {\n        outfile = open(outname, O_CREAT | O_TRUNC | O_WRONLY, 0666);\n        if (outfile == -1) {\n            close(infile);\n            fprintf(stderr, \"gun cannot create %s\\n\", outname);\n            return 0;\n        }\n    }\n    errno = 0;\n\n    /* decompress */\n    ret = gunpipe(strm, infile, outfile);\n    if (outfile > 2) close(outfile);\n    if (infile > 2) close(infile);\n\n    /* interpret result */\n    switch (ret) {\n    case Z_OK:\n    case Z_ERRNO:\n        if (infile > 2 && outfile > 2) {\n            copymeta(inname, outname);          /* copy attributes */\n            unlink(inname);\n        }\n        if (ret == Z_ERRNO)\n            fprintf(stderr, \"gun warning: trailing garbage ignored in %s\\n\",\n                    inname);\n        break;\n    case Z_DATA_ERROR:\n        if (outfile > 2) unlink(outname);\n        fprintf(stderr, \"gun data error on %s: %s\\n\", inname, strm->msg);\n        break;\n    case Z_MEM_ERROR:\n        if (outfile > 2) unlink(outname);\n        fprintf(stderr, \"gun out of memory error--aborting\\n\");\n        return 1;\n    case Z_BUF_ERROR:\n        if (outfile > 2) unlink(outname);\n        if (strm->next_in != Z_NULL) {\n            fprintf(stderr, \"gun write error on %s: %s\\n\",\n                    outname, strerror(errno));\n        }\n        else if (errno) {\n            fprintf(stderr, \"gun read error on %s: %s\\n\",\n                    inname, strerror(errno));\n        }\n        else {\n            fprintf(stderr, \"gun unexpected end of file on %s\\n\",\n                    inname);\n        }\n        break;\n    default:\n        if (outfile > 2) unlink(outname);\n        fprintf(stderr, \"gun internal error--aborting\\n\");\n        return 1;\n    }\n    return 0;\n}\n\n/* Process the gun command line arguments.  See the command syntax near the\n   beginning of this source file. */\nint main(int argc, char **argv)\n{\n    int ret, len, test;\n    char *outname;\n    unsigned char *window;\n    z_stream strm;\n\n    /* initialize inflateBack state for repeated use */\n    window = match;                         /* reuse LZW match buffer */\n    strm.zalloc = Z_NULL;\n    strm.zfree = Z_NULL;\n    strm.opaque = Z_NULL;\n    ret = inflateBackInit(&strm, 15, window);\n    if (ret != Z_OK) {\n        fprintf(stderr, \"gun out of memory error--aborting\\n\");\n        return 1;\n    }\n\n    /* decompress each file to the same name with the suffix removed */\n    argc--;\n    argv++;\n    test = 0;\n    if (argc && strcmp(*argv, \"-h\") == 0) {\n        fprintf(stderr, \"gun 1.6 (17 Jan 2010)\\n\");\n        fprintf(stderr, \"Copyright (C) 2003-2010 Mark Adler\\n\");\n        fprintf(stderr, \"usage: gun [-t] [file1.gz [file2.Z ...]]\\n\");\n        return 0;\n    }\n    if (argc && strcmp(*argv, \"-t\") == 0) {\n        test = 1;\n        argc--;\n        argv++;\n    }\n    if (argc)\n        do {\n            if (test)\n                outname = NULL;\n            else {\n                len = (int)strlen(*argv);\n                if (strcmp(*argv + len - 3, \".gz\") == 0 ||\n                    strcmp(*argv + len - 3, \"-gz\") == 0)\n                    len -= 3;\n                else if (strcmp(*argv + len - 2, \".z\") == 0 ||\n                    strcmp(*argv + len - 2, \"-z\") == 0 ||\n                    strcmp(*argv + len - 2, \"_z\") == 0 ||\n                    strcmp(*argv + len - 2, \".Z\") == 0)\n                    len -= 2;\n                else {\n                    fprintf(stderr, \"gun error: no gz type on %s--skipping\\n\",\n                            *argv);\n                    continue;\n                }\n                outname = malloc(len + 1);\n                if (outname == NULL) {\n                    fprintf(stderr, \"gun out of memory error--aborting\\n\");\n                    ret = 1;\n                    break;\n                }\n                memcpy(outname, *argv, len);\n                outname[len] = 0;\n            }\n            ret = gunzip(&strm, *argv, outname, test);\n            if (outname != NULL) free(outname);\n            if (ret) break;\n        } while (argv++, --argc);\n    else\n        ret = gunzip(&strm, NULL, NULL, test);\n\n    /* clean up */\n    inflateBackEnd(&strm);\n    return ret;\n}\n"
  },
  {
    "path": "external/zlib/examples/gzappend.c",
    "content": "/* gzappend -- command to append to a gzip file\n\n  Copyright (C) 2003 Mark Adler, all rights reserved\n  version 1.1, 4 Nov 2003\n\n  This software is provided 'as-is', without any express or implied\n  warranty.  In no event will the author be held liable for any damages\n  arising from the use of this software.\n\n  Permission is granted to anyone to use this software for any purpose,\n  including commercial applications, and to alter it and redistribute it\n  freely, subject to the following restrictions:\n\n  1. The origin of this software must not be misrepresented; you must not\n     claim that you wrote the original software. If you use this software\n     in a product, an acknowledgment in the product documentation would be\n     appreciated but is not required.\n  2. Altered source versions must be plainly marked as such, and must not be\n     misrepresented as being the original software.\n  3. This notice may not be removed or altered from any source distribution.\n\n  Mark Adler    madler@alumni.caltech.edu\n */\n\n/*\n * Change history:\n *\n * 1.0  19 Oct 2003     - First version\n * 1.1   4 Nov 2003     - Expand and clarify some comments and notes\n *                      - Add version and copyright to help\n *                      - Send help to stdout instead of stderr\n *                      - Add some preemptive typecasts\n *                      - Add L to constants in lseek() calls\n *                      - Remove some debugging information in error messages\n *                      - Use new data_type definition for zlib 1.2.1\n *                      - Simplfy and unify file operations\n *                      - Finish off gzip file in gztack()\n *                      - Use deflatePrime() instead of adding empty blocks\n *                      - Keep gzip file clean on appended file read errors\n *                      - Use in-place rotate instead of auxiliary buffer\n *                        (Why you ask?  Because it was fun to write!)\n */\n\n/*\n   gzappend takes a gzip file and appends to it, compressing files from the\n   command line or data from stdin.  The gzip file is written to directly, to\n   avoid copying that file, in case it's large.  Note that this results in the\n   unfriendly behavior that if gzappend fails, the gzip file is corrupted.\n\n   This program was written to illustrate the use of the new Z_BLOCK option of\n   zlib 1.2.x's inflate() function.  This option returns from inflate() at each\n   block boundary to facilitate locating and modifying the last block bit at\n   the start of the final deflate block.  Also whether using Z_BLOCK or not,\n   another required feature of zlib 1.2.x is that inflate() now provides the\n   number of unusued bits in the last input byte used.  gzappend will not work\n   with versions of zlib earlier than 1.2.1.\n\n   gzappend first decompresses the gzip file internally, discarding all but\n   the last 32K of uncompressed data, and noting the location of the last block\n   bit and the number of unused bits in the last byte of the compressed data.\n   The gzip trailer containing the CRC-32 and length of the uncompressed data\n   is verified.  This trailer will be later overwritten.\n\n   Then the last block bit is cleared by seeking back in the file and rewriting\n   the byte that contains it.  Seeking forward, the last byte of the compressed\n   data is saved along with the number of unused bits to initialize deflate.\n\n   A deflate process is initialized, using the last 32K of the uncompressed\n   data from the gzip file to initialize the dictionary.  If the total\n   uncompressed data was less than 32K, then all of it is used to initialize\n   the dictionary.  The deflate output bit buffer is also initialized with the\n   last bits from the original deflate stream.  From here on, the data to\n   append is simply compressed using deflate, and written to the gzip file.\n   When that is complete, the new CRC-32 and uncompressed length are written\n   as the trailer of the gzip file.\n */\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <fcntl.h>\n#include <unistd.h>\n#include \"zlib.h\"\n\n#define local static\n#define LGCHUNK 14\n#define CHUNK (1U << LGCHUNK)\n#define DSIZE 32768U\n\n/* print an error message and terminate with extreme prejudice */\nlocal void bye(char *msg1, char *msg2)\n{\n    fprintf(stderr, \"gzappend error: %s%s\\n\", msg1, msg2);\n    exit(1);\n}\n\n/* return the greatest common divisor of a and b using Euclid's algorithm,\n   modified to be fast when one argument much greater than the other, and\n   coded to avoid unnecessary swapping */\nlocal unsigned gcd(unsigned a, unsigned b)\n{\n    unsigned c;\n\n    while (a && b)\n        if (a > b) {\n            c = b;\n            while (a - c >= c)\n                c <<= 1;\n            a -= c;\n        }\n        else {\n            c = a;\n            while (b - c >= c)\n                c <<= 1;\n            b -= c;\n        }\n    return a + b;\n}\n\n/* rotate list[0..len-1] left by rot positions, in place */\nlocal void rotate(unsigned char *list, unsigned len, unsigned rot)\n{\n    unsigned char tmp;\n    unsigned cycles;\n    unsigned char *start, *last, *to, *from;\n\n    /* normalize rot and handle degenerate cases */\n    if (len < 2) return;\n    if (rot >= len) rot %= len;\n    if (rot == 0) return;\n\n    /* pointer to last entry in list */\n    last = list + (len - 1);\n\n    /* do simple left shift by one */\n    if (rot == 1) {\n        tmp = *list;\n        memcpy(list, list + 1, len - 1);\n        *last = tmp;\n        return;\n    }\n\n    /* do simple right shift by one */\n    if (rot == len - 1) {\n        tmp = *last;\n        memmove(list + 1, list, len - 1);\n        *list = tmp;\n        return;\n    }\n\n    /* otherwise do rotate as a set of cycles in place */\n    cycles = gcd(len, rot);             /* number of cycles */\n    do {\n        start = from = list + cycles;   /* start index is arbitrary */\n        tmp = *from;                    /* save entry to be overwritten */\n        for (;;) {\n            to = from;                  /* next step in cycle */\n            from += rot;                /* go right rot positions */\n            if (from > last) from -= len;   /* (pointer better not wrap) */\n            if (from == start) break;   /* all but one shifted */\n            *to = *from;                /* shift left */\n        }\n        *to = tmp;                      /* complete the circle */\n    } while (--cycles);\n}\n\n/* structure for gzip file read operations */\ntypedef struct {\n    int fd;                     /* file descriptor */\n    int size;                   /* 1 << size is bytes in buf */\n    unsigned left;              /* bytes available at next */\n    unsigned char *buf;         /* buffer */\n    unsigned char *next;        /* next byte in buffer */\n    char *name;                 /* file name for error messages */\n} file;\n\n/* reload buffer */\nlocal int readin(file *in)\n{\n    int len;\n\n    len = read(in->fd, in->buf, 1 << in->size);\n    if (len == -1) bye(\"error reading \", in->name);\n    in->left = (unsigned)len;\n    in->next = in->buf;\n    return len;\n}\n\n/* read from file in, exit if end-of-file */\nlocal int readmore(file *in)\n{\n    if (readin(in) == 0) bye(\"unexpected end of \", in->name);\n    return 0;\n}\n\n#define read1(in) (in->left == 0 ? readmore(in) : 0, \\\n                   in->left--, *(in->next)++)\n\n/* skip over n bytes of in */\nlocal void skip(file *in, unsigned n)\n{\n    unsigned bypass;\n\n    if (n > in->left) {\n        n -= in->left;\n        bypass = n & ~((1U << in->size) - 1);\n        if (bypass) {\n            if (lseek(in->fd, (off_t)bypass, SEEK_CUR) == -1)\n                bye(\"seeking \", in->name);\n            n -= bypass;\n        }\n        readmore(in);\n        if (n > in->left)\n            bye(\"unexpected end of \", in->name);\n    }\n    in->left -= n;\n    in->next += n;\n}\n\n/* read a four-byte unsigned integer, little-endian, from in */\nunsigned long read4(file *in)\n{\n    unsigned long val;\n\n    val = read1(in);\n    val += (unsigned)read1(in) << 8;\n    val += (unsigned long)read1(in) << 16;\n    val += (unsigned long)read1(in) << 24;\n    return val;\n}\n\n/* skip over gzip header */\nlocal void gzheader(file *in)\n{\n    int flags;\n    unsigned n;\n\n    if (read1(in) != 31 || read1(in) != 139) bye(in->name, \" not a gzip file\");\n    if (read1(in) != 8) bye(\"unknown compression method in\", in->name);\n    flags = read1(in);\n    if (flags & 0xe0) bye(\"unknown header flags set in\", in->name);\n    skip(in, 6);\n    if (flags & 4) {\n        n = read1(in);\n        n += (unsigned)(read1(in)) << 8;\n        skip(in, n);\n    }\n    if (flags & 8) while (read1(in) != 0) ;\n    if (flags & 16) while (read1(in) != 0) ;\n    if (flags & 2) skip(in, 2);\n}\n\n/* decompress gzip file \"name\", return strm with a deflate stream ready to\n   continue compression of the data in the gzip file, and return a file\n   descriptor pointing to where to write the compressed data -- the deflate\n   stream is initialized to compress using level \"level\" */\nlocal int gzscan(char *name, z_stream *strm, int level)\n{\n    int ret, lastbit, left, full;\n    unsigned have;\n    unsigned long crc, tot;\n    unsigned char *window;\n    off_t lastoff, end;\n    file gz;\n\n    /* open gzip file */\n    gz.name = name;\n    gz.fd = open(name, O_RDWR, 0);\n    if (gz.fd == -1) bye(\"cannot open \", name);\n    gz.buf = malloc(CHUNK);\n    if (gz.buf == NULL) bye(\"out of memory\", \"\");\n    gz.size = LGCHUNK;\n    gz.left = 0;\n\n    /* skip gzip header */\n    gzheader(&gz);\n\n    /* prepare to decompress */\n    window = malloc(DSIZE);\n    if (window == NULL) bye(\"out of memory\", \"\");\n    strm->zalloc = Z_NULL;\n    strm->zfree = Z_NULL;\n    strm->opaque = Z_NULL;\n    ret = inflateInit2(strm, -15);\n    if (ret != Z_OK) bye(\"out of memory\", \" or library mismatch\");\n\n    /* decompress the deflate stream, saving append information */\n    lastbit = 0;\n    lastoff = lseek(gz.fd, 0L, SEEK_CUR) - gz.left;\n    left = 0;\n    strm->avail_in = gz.left;\n    strm->next_in = gz.next;\n    crc = crc32(0L, Z_NULL, 0);\n    have = full = 0;\n    do {\n        /* if needed, get more input */\n        if (strm->avail_in == 0) {\n            readmore(&gz);\n            strm->avail_in = gz.left;\n            strm->next_in = gz.next;\n        }\n\n        /* set up output to next available section of sliding window */\n        strm->avail_out = DSIZE - have;\n        strm->next_out = window + have;\n\n        /* inflate and check for errors */\n        ret = inflate(strm, Z_BLOCK);\n        if (ret == Z_STREAM_ERROR) bye(\"internal stream error!\", \"\");\n        if (ret == Z_MEM_ERROR) bye(\"out of memory\", \"\");\n        if (ret == Z_DATA_ERROR)\n            bye(\"invalid compressed data--format violated in\", name);\n\n        /* update crc and sliding window pointer */\n        crc = crc32(crc, window + have, DSIZE - have - strm->avail_out);\n        if (strm->avail_out)\n            have = DSIZE - strm->avail_out;\n        else {\n            have = 0;\n            full = 1;\n        }\n\n        /* process end of block */\n        if (strm->data_type & 128) {\n            if (strm->data_type & 64)\n                left = strm->data_type & 0x1f;\n            else {\n                lastbit = strm->data_type & 0x1f;\n                lastoff = lseek(gz.fd, 0L, SEEK_CUR) - strm->avail_in;\n            }\n        }\n    } while (ret != Z_STREAM_END);\n    inflateEnd(strm);\n    gz.left = strm->avail_in;\n    gz.next = strm->next_in;\n\n    /* save the location of the end of the compressed data */\n    end = lseek(gz.fd, 0L, SEEK_CUR) - gz.left;\n\n    /* check gzip trailer and save total for deflate */\n    if (crc != read4(&gz))\n        bye(\"invalid compressed data--crc mismatch in \", name);\n    tot = strm->total_out;\n    if ((tot & 0xffffffffUL) != read4(&gz))\n        bye(\"invalid compressed data--length mismatch in\", name);\n\n    /* if not at end of file, warn */\n    if (gz.left || readin(&gz))\n        fprintf(stderr,\n            \"gzappend warning: junk at end of gzip file overwritten\\n\");\n\n    /* clear last block bit */\n    lseek(gz.fd, lastoff - (lastbit != 0), SEEK_SET);\n    if (read(gz.fd, gz.buf, 1) != 1) bye(\"reading after seek on \", name);\n    *gz.buf = (unsigned char)(*gz.buf ^ (1 << ((8 - lastbit) & 7)));\n    lseek(gz.fd, -1L, SEEK_CUR);\n    if (write(gz.fd, gz.buf, 1) != 1) bye(\"writing after seek to \", name);\n\n    /* if window wrapped, build dictionary from window by rotating */\n    if (full) {\n        rotate(window, DSIZE, have);\n        have = DSIZE;\n    }\n\n    /* set up deflate stream with window, crc, total_in, and leftover bits */\n    ret = deflateInit2(strm, level, Z_DEFLATED, -15, 8, Z_DEFAULT_STRATEGY);\n    if (ret != Z_OK) bye(\"out of memory\", \"\");\n    deflateSetDictionary(strm, window, have);\n    strm->adler = crc;\n    strm->total_in = tot;\n    if (left) {\n        lseek(gz.fd, --end, SEEK_SET);\n        if (read(gz.fd, gz.buf, 1) != 1) bye(\"reading after seek on \", name);\n        deflatePrime(strm, 8 - left, *gz.buf);\n    }\n    lseek(gz.fd, end, SEEK_SET);\n\n    /* clean up and return */\n    free(window);\n    free(gz.buf);\n    return gz.fd;\n}\n\n/* append file \"name\" to gzip file gd using deflate stream strm -- if last\n   is true, then finish off the deflate stream at the end */\nlocal void gztack(char *name, int gd, z_stream *strm, int last)\n{\n    int fd, len, ret;\n    unsigned left;\n    unsigned char *in, *out;\n\n    /* open file to compress and append */\n    fd = 0;\n    if (name != NULL) {\n        fd = open(name, O_RDONLY, 0);\n        if (fd == -1)\n            fprintf(stderr, \"gzappend warning: %s not found, skipping ...\\n\",\n                    name);\n    }\n\n    /* allocate buffers */\n    in = fd == -1 ? NULL : malloc(CHUNK);\n    out = malloc(CHUNK);\n    if (out == NULL) bye(\"out of memory\", \"\");\n\n    /* compress input file and append to gzip file */\n    do {\n        /* get more input */\n        len = fd == -1 ? 0 : read(fd, in, CHUNK);\n        if (len == -1) {\n            fprintf(stderr,\n                    \"gzappend warning: error reading %s, skipping rest ...\\n\",\n                    name);\n            len = 0;\n        }\n        strm->avail_in = (unsigned)len;\n        strm->next_in = in;\n        if (len) strm->adler = crc32(strm->adler, in, (unsigned)len);\n\n        /* compress and write all available output */\n        do {\n            strm->avail_out = CHUNK;\n            strm->next_out = out;\n            ret = deflate(strm, last && len == 0 ? Z_FINISH : Z_NO_FLUSH);\n            left = CHUNK - strm->avail_out;\n            while (left) {\n                len = write(gd, out + CHUNK - strm->avail_out - left, left);\n                if (len == -1) bye(\"writing gzip file\", \"\");\n                left -= (unsigned)len;\n            }\n        } while (strm->avail_out == 0 && ret != Z_STREAM_END);\n    } while (len != 0);\n\n    /* write trailer after last entry */\n    if (last) {\n        deflateEnd(strm);\n        out[0] = (unsigned char)(strm->adler);\n        out[1] = (unsigned char)(strm->adler >> 8);\n        out[2] = (unsigned char)(strm->adler >> 16);\n        out[3] = (unsigned char)(strm->adler >> 24);\n        out[4] = (unsigned char)(strm->total_in);\n        out[5] = (unsigned char)(strm->total_in >> 8);\n        out[6] = (unsigned char)(strm->total_in >> 16);\n        out[7] = (unsigned char)(strm->total_in >> 24);\n        len = 8;\n        do {\n            ret = write(gd, out + 8 - len, len);\n            if (ret == -1) bye(\"writing gzip file\", \"\");\n            len -= ret;\n        } while (len);\n        close(gd);\n    }\n\n    /* clean up and return */\n    free(out);\n    if (in != NULL) free(in);\n    if (fd > 0) close(fd);\n}\n\n/* process the compression level option if present, scan the gzip file, and\n   append the specified files, or append the data from stdin if no other file\n   names are provided on the command line -- the gzip file must be writable\n   and seekable */\nint main(int argc, char **argv)\n{\n    int gd, level;\n    z_stream strm;\n\n    /* ignore command name */\n    argv++;\n\n    /* provide usage if no arguments */\n    if (*argv == NULL) {\n        printf(\"gzappend 1.1 (4 Nov 2003) Copyright (C) 2003 Mark Adler\\n\");\n        printf(\n            \"usage: gzappend [-level] file.gz [ addthis [ andthis ... ]]\\n\");\n        return 0;\n    }\n\n    /* set compression level */\n    level = Z_DEFAULT_COMPRESSION;\n    if (argv[0][0] == '-') {\n        if (argv[0][1] < '0' || argv[0][1] > '9' || argv[0][2] != 0)\n            bye(\"invalid compression level\", \"\");\n        level = argv[0][1] - '0';\n        if (*++argv == NULL) bye(\"no gzip file name after options\", \"\");\n    }\n\n    /* prepare to append to gzip file */\n    gd = gzscan(*argv++, &strm, level);\n\n    /* append files on command line, or from stdin if none */\n    if (*argv == NULL)\n        gztack(NULL, gd, &strm, 1);\n    else\n        do {\n            gztack(*argv, gd, &strm, argv[1] == NULL);\n        } while (*++argv != NULL);\n    return 0;\n}\n"
  },
  {
    "path": "external/zlib/examples/gzjoin.c",
    "content": "/* gzjoin -- command to join gzip files into one gzip file\n\n  Copyright (C) 2004 Mark Adler, all rights reserved\n  version 1.0, 11 Dec 2004\n\n  This software is provided 'as-is', without any express or implied\n  warranty.  In no event will the author be held liable for any damages\n  arising from the use of this software.\n\n  Permission is granted to anyone to use this software for any purpose,\n  including commercial applications, and to alter it and redistribute it\n  freely, subject to the following restrictions:\n\n  1. The origin of this software must not be misrepresented; you must not\n     claim that you wrote the original software. If you use this software\n     in a product, an acknowledgment in the product documentation would be\n     appreciated but is not required.\n  2. Altered source versions must be plainly marked as such, and must not be\n     misrepresented as being the original software.\n  3. This notice may not be removed or altered from any source distribution.\n\n  Mark Adler    madler@alumni.caltech.edu\n */\n\n/*\n * Change history:\n *\n * 1.0  11 Dec 2004     - First version\n * 1.1  12 Jun 2005     - Changed ssize_t to long for portability\n */\n\n/*\n   gzjoin takes one or more gzip files on the command line and writes out a\n   single gzip file that will uncompress to the concatenation of the\n   uncompressed data from the individual gzip files.  gzjoin does this without\n   having to recompress any of the data and without having to calculate a new\n   crc32 for the concatenated uncompressed data.  gzjoin does however have to\n   decompress all of the input data in order to find the bits in the compressed\n   data that need to be modified to concatenate the streams.\n\n   gzjoin does not do an integrity check on the input gzip files other than\n   checking the gzip header and decompressing the compressed data.  They are\n   otherwise assumed to be complete and correct.\n\n   Each joint between gzip files removes at least 18 bytes of previous trailer\n   and subsequent header, and inserts an average of about three bytes to the\n   compressed data in order to connect the streams.  The output gzip file\n   has a minimal ten-byte gzip header with no file name or modification time.\n\n   This program was written to illustrate the use of the Z_BLOCK option of\n   inflate() and the crc32_combine() function.  gzjoin will not compile with\n   versions of zlib earlier than 1.2.3.\n */\n\n#include <stdio.h>      /* fputs(), fprintf(), fwrite(), putc() */\n#include <stdlib.h>     /* exit(), malloc(), free() */\n#include <fcntl.h>      /* open() */\n#include <unistd.h>     /* close(), read(), lseek() */\n#include \"zlib.h\"\n    /* crc32(), crc32_combine(), inflateInit2(), inflate(), inflateEnd() */\n\n#define local static\n\n/* exit with an error (return a value to allow use in an expression) */\nlocal int bail(char *why1, char *why2)\n{\n    fprintf(stderr, \"gzjoin error: %s%s, output incomplete\\n\", why1, why2);\n    exit(1);\n    return 0;\n}\n\n/* -- simple buffered file input with access to the buffer -- */\n\n#define CHUNK 32768         /* must be a power of two and fit in unsigned */\n\n/* bin buffered input file type */\ntypedef struct {\n    char *name;             /* name of file for error messages */\n    int fd;                 /* file descriptor */\n    unsigned left;          /* bytes remaining at next */\n    unsigned char *next;    /* next byte to read */\n    unsigned char *buf;     /* allocated buffer of length CHUNK */\n} bin;\n\n/* close a buffered file and free allocated memory */\nlocal void bclose(bin *in)\n{\n    if (in != NULL) {\n        if (in->fd != -1)\n            close(in->fd);\n        if (in->buf != NULL)\n            free(in->buf);\n        free(in);\n    }\n}\n\n/* open a buffered file for input, return a pointer to type bin, or NULL on\n   failure */\nlocal bin *bopen(char *name)\n{\n    bin *in;\n\n    in = malloc(sizeof(bin));\n    if (in == NULL)\n        return NULL;\n    in->buf = malloc(CHUNK);\n    in->fd = open(name, O_RDONLY, 0);\n    if (in->buf == NULL || in->fd == -1) {\n        bclose(in);\n        return NULL;\n    }\n    in->left = 0;\n    in->next = in->buf;\n    in->name = name;\n    return in;\n}\n\n/* load buffer from file, return -1 on read error, 0 or 1 on success, with\n   1 indicating that end-of-file was reached */\nlocal int bload(bin *in)\n{\n    long len;\n\n    if (in == NULL)\n        return -1;\n    if (in->left != 0)\n        return 0;\n    in->next = in->buf;\n    do {\n        len = (long)read(in->fd, in->buf + in->left, CHUNK - in->left);\n        if (len < 0)\n            return -1;\n        in->left += (unsigned)len;\n    } while (len != 0 && in->left < CHUNK);\n    return len == 0 ? 1 : 0;\n}\n\n/* get a byte from the file, bail if end of file */\n#define bget(in) (in->left ? 0 : bload(in), \\\n                  in->left ? (in->left--, *(in->next)++) : \\\n                    bail(\"unexpected end of file on \", in->name))\n\n/* get a four-byte little-endian unsigned integer from file */\nlocal unsigned long bget4(bin *in)\n{\n    unsigned long val;\n\n    val = bget(in);\n    val += (unsigned long)(bget(in)) << 8;\n    val += (unsigned long)(bget(in)) << 16;\n    val += (unsigned long)(bget(in)) << 24;\n    return val;\n}\n\n/* skip bytes in file */\nlocal void bskip(bin *in, unsigned skip)\n{\n    /* check pointer */\n    if (in == NULL)\n        return;\n\n    /* easy case -- skip bytes in buffer */\n    if (skip <= in->left) {\n        in->left -= skip;\n        in->next += skip;\n        return;\n    }\n\n    /* skip what's in buffer, discard buffer contents */\n    skip -= in->left;\n    in->left = 0;\n\n    /* seek past multiples of CHUNK bytes */\n    if (skip > CHUNK) {\n        unsigned left;\n\n        left = skip & (CHUNK - 1);\n        if (left == 0) {\n            /* exact number of chunks: seek all the way minus one byte to check\n               for end-of-file with a read */\n            lseek(in->fd, skip - 1, SEEK_CUR);\n            if (read(in->fd, in->buf, 1) != 1)\n                bail(\"unexpected end of file on \", in->name);\n            return;\n        }\n\n        /* skip the integral chunks, update skip with remainder */\n        lseek(in->fd, skip - left, SEEK_CUR);\n        skip = left;\n    }\n\n    /* read more input and skip remainder */\n    bload(in);\n    if (skip > in->left)\n        bail(\"unexpected end of file on \", in->name);\n    in->left -= skip;\n    in->next += skip;\n}\n\n/* -- end of buffered input functions -- */\n\n/* skip the gzip header from file in */\nlocal void gzhead(bin *in)\n{\n    int flags;\n\n    /* verify gzip magic header and compression method */\n    if (bget(in) != 0x1f || bget(in) != 0x8b || bget(in) != 8)\n        bail(in->name, \" is not a valid gzip file\");\n\n    /* get and verify flags */\n    flags = bget(in);\n    if ((flags & 0xe0) != 0)\n        bail(\"unknown reserved bits set in \", in->name);\n\n    /* skip modification time, extra flags, and os */\n    bskip(in, 6);\n\n    /* skip extra field if present */\n    if (flags & 4) {\n        unsigned len;\n\n        len = bget(in);\n        len += (unsigned)(bget(in)) << 8;\n        bskip(in, len);\n    }\n\n    /* skip file name if present */\n    if (flags & 8)\n        while (bget(in) != 0)\n            ;\n\n    /* skip comment if present */\n    if (flags & 16)\n        while (bget(in) != 0)\n            ;\n\n    /* skip header crc if present */\n    if (flags & 2)\n        bskip(in, 2);\n}\n\n/* write a four-byte little-endian unsigned integer to out */\nlocal void put4(unsigned long val, FILE *out)\n{\n    putc(val & 0xff, out);\n    putc((val >> 8) & 0xff, out);\n    putc((val >> 16) & 0xff, out);\n    putc((val >> 24) & 0xff, out);\n}\n\n/* Load up zlib stream from buffered input, bail if end of file */\nlocal void zpull(z_streamp strm, bin *in)\n{\n    if (in->left == 0)\n        bload(in);\n    if (in->left == 0)\n        bail(\"unexpected end of file on \", in->name);\n    strm->avail_in = in->left;\n    strm->next_in = in->next;\n}\n\n/* Write header for gzip file to out and initialize trailer. */\nlocal void gzinit(unsigned long *crc, unsigned long *tot, FILE *out)\n{\n    fwrite(\"\\x1f\\x8b\\x08\\0\\0\\0\\0\\0\\0\\xff\", 1, 10, out);\n    *crc = crc32(0L, Z_NULL, 0);\n    *tot = 0;\n}\n\n/* Copy the compressed data from name, zeroing the last block bit of the last\n   block if clr is true, and adding empty blocks as needed to get to a byte\n   boundary.  If clr is false, then the last block becomes the last block of\n   the output, and the gzip trailer is written.  crc and tot maintains the\n   crc and length (modulo 2^32) of the output for the trailer.  The resulting\n   gzip file is written to out.  gzinit() must be called before the first call\n   of gzcopy() to write the gzip header and to initialize crc and tot. */\nlocal void gzcopy(char *name, int clr, unsigned long *crc, unsigned long *tot,\n                  FILE *out)\n{\n    int ret;                /* return value from zlib functions */\n    int pos;                /* where the \"last block\" bit is in byte */\n    int last;               /* true if processing the last block */\n    bin *in;                /* buffered input file */\n    unsigned char *start;   /* start of compressed data in buffer */\n    unsigned char *junk;    /* buffer for uncompressed data -- discarded */\n    z_off_t len;            /* length of uncompressed data (support > 4 GB) */\n    z_stream strm;          /* zlib inflate stream */\n\n    /* open gzip file and skip header */\n    in = bopen(name);\n    if (in == NULL)\n        bail(\"could not open \", name);\n    gzhead(in);\n\n    /* allocate buffer for uncompressed data and initialize raw inflate\n       stream */\n    junk = malloc(CHUNK);\n    strm.zalloc = Z_NULL;\n    strm.zfree = Z_NULL;\n    strm.opaque = Z_NULL;\n    strm.avail_in = 0;\n    strm.next_in = Z_NULL;\n    ret = inflateInit2(&strm, -15);\n    if (junk == NULL || ret != Z_OK)\n        bail(\"out of memory\", \"\");\n\n    /* inflate and copy compressed data, clear last-block bit if requested */\n    len = 0;\n    zpull(&strm, in);\n    start = strm.next_in;\n    last = start[0] & 1;\n    if (last && clr)\n        start[0] &= ~1;\n    strm.avail_out = 0;\n    for (;;) {\n        /* if input used and output done, write used input and get more */\n        if (strm.avail_in == 0 && strm.avail_out != 0) {\n            fwrite(start, 1, strm.next_in - start, out);\n            start = in->buf;\n            in->left = 0;\n            zpull(&strm, in);\n        }\n\n        /* decompress -- return early when end-of-block reached */\n        strm.avail_out = CHUNK;\n        strm.next_out = junk;\n        ret = inflate(&strm, Z_BLOCK);\n        switch (ret) {\n        case Z_MEM_ERROR:\n            bail(\"out of memory\", \"\");\n        case Z_DATA_ERROR:\n            bail(\"invalid compressed data in \", in->name);\n        }\n\n        /* update length of uncompressed data */\n        len += CHUNK - strm.avail_out;\n\n        /* check for block boundary (only get this when block copied out) */\n        if (strm.data_type & 128) {\n            /* if that was the last block, then done */\n            if (last)\n                break;\n\n            /* number of unused bits in last byte */\n            pos = strm.data_type & 7;\n\n            /* find the next last-block bit */\n            if (pos != 0) {\n                /* next last-block bit is in last used byte */\n                pos = 0x100 >> pos;\n                last = strm.next_in[-1] & pos;\n                if (last && clr)\n                    strm.next_in[-1] &= ~pos;\n            }\n            else {\n                /* next last-block bit is in next unused byte */\n                if (strm.avail_in == 0) {\n                    /* don't have that byte yet -- get it */\n                    fwrite(start, 1, strm.next_in - start, out);\n                    start = in->buf;\n                    in->left = 0;\n                    zpull(&strm, in);\n                }\n                last = strm.next_in[0] & 1;\n                if (last && clr)\n                    strm.next_in[0] &= ~1;\n            }\n        }\n    }\n\n    /* update buffer with unused input */\n    in->left = strm.avail_in;\n    in->next = strm.next_in;\n\n    /* copy used input, write empty blocks to get to byte boundary */\n    pos = strm.data_type & 7;\n    fwrite(start, 1, in->next - start - 1, out);\n    last = in->next[-1];\n    if (pos == 0 || !clr)\n        /* already at byte boundary, or last file: write last byte */\n        putc(last, out);\n    else {\n        /* append empty blocks to last byte */\n        last &= ((0x100 >> pos) - 1);       /* assure unused bits are zero */\n        if (pos & 1) {\n            /* odd -- append an empty stored block */\n            putc(last, out);\n            if (pos == 1)\n                putc(0, out);               /* two more bits in block header */\n            fwrite(\"\\0\\0\\xff\\xff\", 1, 4, out);\n        }\n        else {\n            /* even -- append 1, 2, or 3 empty fixed blocks */\n            switch (pos) {\n            case 6:\n                putc(last | 8, out);\n                last = 0;\n            case 4:\n                putc(last | 0x20, out);\n                last = 0;\n            case 2:\n                putc(last | 0x80, out);\n                putc(0, out);\n            }\n        }\n    }\n\n    /* update crc and tot */\n    *crc = crc32_combine(*crc, bget4(in), len);\n    *tot += (unsigned long)len;\n\n    /* clean up */\n    inflateEnd(&strm);\n    free(junk);\n    bclose(in);\n\n    /* write trailer if this is the last gzip file */\n    if (!clr) {\n        put4(*crc, out);\n        put4(*tot, out);\n    }\n}\n\n/* join the gzip files on the command line, write result to stdout */\nint main(int argc, char **argv)\n{\n    unsigned long crc, tot;     /* running crc and total uncompressed length */\n\n    /* skip command name */\n    argc--;\n    argv++;\n\n    /* show usage if no arguments */\n    if (argc == 0) {\n        fputs(\"gzjoin usage: gzjoin f1.gz [f2.gz [f3.gz ...]] > fjoin.gz\\n\",\n              stderr);\n        return 0;\n    }\n\n    /* join gzip files on command line and write to stdout */\n    gzinit(&crc, &tot, stdout);\n    while (argc--)\n        gzcopy(*argv++, argc, &crc, &tot, stdout);\n\n    /* done */\n    return 0;\n}\n"
  },
  {
    "path": "external/zlib/examples/gzlog.c",
    "content": "/*\n * gzlog.c\n * Copyright (C) 2004, 2008 Mark Adler, all rights reserved\n * For conditions of distribution and use, see copyright notice in gzlog.h\n * version 2.0, 25 Apr 2008\n */\n\n/*\n   gzlog provides a mechanism for frequently appending short strings to a gzip\n   file that is efficient both in execution time and compression ratio.  The\n   strategy is to write the short strings in an uncompressed form to the end of\n   the gzip file, only compressing when the amount of uncompressed data has\n   reached a given threshold.\n\n   gzlog also provides protection against interruptions in the process due to\n   system crashes.  The status of the operation is recorded in an extra field\n   in the gzip file, and is only updated once the gzip file is brought to a\n   valid state.  The last data to be appended or compressed is saved in an\n   auxiliary file, so that if the operation is interrupted, it can be completed\n   the next time an append operation is attempted.\n\n   gzlog maintains another auxiliary file with the last 32K of data from the\n   compressed portion, which is preloaded for the compression of the subsequent\n   data.  This minimizes the impact to the compression ratio of appending.\n */\n\n/*\n   Operations Concept:\n\n   Files (log name \"foo\"):\n   foo.gz -- gzip file with the complete log\n   foo.add -- last message to append or last data to compress\n   foo.dict -- dictionary of the last 32K of data for next compression\n   foo.temp -- temporary dictionary file for compression after this one\n   foo.lock -- lock file for reading and writing the other files\n   foo.repairs -- log file for log file recovery operations (not compressed)\n\n   gzip file structure:\n   - fixed-length (no file name) header with extra field (see below)\n   - compressed data ending initially with empty stored block\n   - uncompressed data filling out originally empty stored block and\n     subsequent stored blocks as needed (16K max each)\n   - gzip trailer\n   - no junk at end (no other gzip streams)\n\n   When appending data, the information in the first three items above plus the\n   foo.add file are sufficient to recover an interrupted append operation.  The\n   extra field has the necessary information to restore the start of the last\n   stored block and determine where to append the data in the foo.add file, as\n   well as the crc and length of the gzip data before the append operation.\n\n   The foo.add file is created before the gzip file is marked for append, and\n   deleted after the gzip file is marked as complete.  So if the append\n   operation is interrupted, the data to add will still be there.  If due to\n   some external force, the foo.add file gets deleted between when the append\n   operation was interrupted and when recovery is attempted, the gzip file will\n   still be restored, but without the appended data.\n\n   When compressing data, the information in the first two items above plus the\n   foo.add file are sufficient to recover an interrupted compress operation.\n   The extra field has the necessary information to find the end of the\n   compressed data, and contains both the crc and length of just the compressed\n   data and of the complete set of data including the contents of the foo.add\n   file.\n\n   Again, the foo.add file is maintained during the compress operation in case\n   of an interruption.  If in the unlikely event the foo.add file with the data\n   to be compressed is missing due to some external force, a gzip file with\n   just the previous compressed data will be reconstructed.  In this case, all\n   of the data that was to be compressed is lost (approximately one megabyte).\n   This will not occur if all that happened was an interruption of the compress\n   operation.\n\n   The third state that is marked is the replacement of the old dictionary with\n   the new dictionary after a compress operation.  Once compression is\n   complete, the gzip file is marked as being in the replace state.  This\n   completes the gzip file, so an interrupt after being so marked does not\n   result in recompression.  Then the dictionary file is replaced, and the gzip\n   file is marked as completed.  This state prevents the possibility of\n   restarting compression with the wrong dictionary file.\n\n   All three operations are wrapped by a lock/unlock procedure.  In order to\n   gain exclusive access to the log files, first a foo.lock file must be\n   exclusively created.  When all operations are complete, the lock is\n   released by deleting the foo.lock file.  If when attempting to create the\n   lock file, it already exists and the modify time of the lock file is more\n   than five minutes old (set by the PATIENCE define below), then the old\n   lock file is considered stale and deleted, and the exclusive creation of\n   the lock file is retried.  To assure that there are no false assessments\n   of the staleness of the lock file, the operations periodically touch the\n   lock file to update the modified date.\n\n   Following is the definition of the extra field with all of the information\n   required to enable the above append and compress operations and their\n   recovery if interrupted.  Multi-byte values are stored little endian\n   (consistent with the gzip format).  File pointers are eight bytes long.\n   The crc's and lengths for the gzip trailer are four bytes long.  (Note that\n   the length at the end of a gzip file is used for error checking only, and\n   for large files is actually the length modulo 2^32.)  The stored block\n   length is two bytes long.  The gzip extra field two-byte identification is\n   \"ap\" for append.  It is assumed that writing the extra field to the file is\n   an \"atomic\" operation.  That is, either all of the extra field is written\n   to the file, or none of it is, if the operation is interrupted right at the\n   point of updating the extra field.  This is a reasonable assumption, since\n   the extra field is within the first 52 bytes of the file, which is smaller\n   than any expected block size for a mass storage device (usually 512 bytes or\n   larger).\n\n   Extra field (35 bytes):\n   - Pointer to first stored block length -- this points to the two-byte length\n     of the first stored block, which is followed by the two-byte, one's\n     complement of that length.  The stored block length is preceded by the\n     three-bit header of the stored block, which is the actual start of the\n     stored block in the deflate format.  See the bit offset field below.\n   - Pointer to the last stored block length.  This is the same as above, but\n     for the last stored block of the uncompressed data in the gzip file.\n     Initially this is the same as the first stored block length pointer.\n     When the stored block gets to 16K (see the MAX_STORE define), then a new\n     stored block as added, at which point the last stored block length pointer\n     is different from the first stored block length pointer.  When they are\n     different, the first bit of the last stored block header is eight bits, or\n     one byte back from the block length.\n   - Compressed data crc and length.  This is the crc and length of the data\n     that is in the compressed portion of the deflate stream.  These are used\n     only in the event that the foo.add file containing the data to compress is\n     lost after a compress operation is interrupted.\n   - Total data crc and length.  This is the crc and length of all of the data\n     stored in the gzip file, compressed and uncompressed.  It is used to\n     reconstruct the gzip trailer when compressing, as well as when recovering\n     interrupted operations.\n   - Final stored block length.  This is used to quickly find where to append,\n     and allows the restoration of the original final stored block state when\n     an append operation is interrupted.\n   - First stored block start as the number of bits back from the final stored\n     block first length byte.  This value is in the range of 3..10, and is\n     stored as the low three bits of the final byte of the extra field after\n     subtracting three (0..7).  This allows the last-block bit of the stored\n     block header to be updated when a new stored block is added, for the case\n     when the first stored block and the last stored block are the same.  (When\n     they are different, the numbers of bits back is known to be eight.)  This\n     also allows for new compressed data to be appended to the old compressed\n     data in the compress operation, overwriting the previous first stored\n     block, or for the compressed data to be terminated and a valid gzip file\n     reconstructed on the off chance that a compression operation was\n     interrupted and the data to compress in the foo.add file was deleted.\n   - The operation in process.  This is the next two bits in the last byte (the\n     bits under the mask 0x18).  The are interpreted as 0: nothing in process,\n     1: append in process, 2: compress in process, 3: replace in process.\n   - The top three bits of the last byte in the extra field are reserved and\n     are currently set to zero.\n\n   Main procedure:\n   - Exclusively create the foo.lock file using the O_CREAT and O_EXCL modes of\n     the system open() call.  If the modify time of an existing lock file is\n     more than PATIENCE seconds old, then the lock file is deleted and the\n     exclusive create is retried.\n   - Load the extra field from the foo.gz file, and see if an operation was in\n     progress but not completed.  If so, apply the recovery procedure below.\n   - Perform the append procedure with the provided data.\n   - If the uncompressed data in the foo.gz file is 1MB or more, apply the\n     compress procedure.\n   - Delete the foo.lock file.\n\n   Append procedure:\n   - Put what to append in the foo.add file so that the operation can be\n     restarted if this procedure is interrupted.\n   - Mark the foo.gz extra field with the append operation in progress.\n   + Restore the original last-block bit and stored block length of the last\n     stored block from the information in the extra field, in case a previous\n     append operation was interrupted.\n   - Append the provided data to the last stored block, creating new stored\n     blocks as needed and updating the stored blocks last-block bits and\n     lengths.\n   - Update the crc and length with the new data, and write the gzip trailer.\n   - Write over the extra field (with a single write operation) with the new\n     pointers, lengths, and crc's, and mark the gzip file as not in process.\n     Though there is still a foo.add file, it will be ignored since nothing\n     is in process.  If a foo.add file is leftover from a previously\n     completed operation, it is truncated when writing new data to it.\n   - Delete the foo.add file.\n\n   Compress and replace procedures:\n   - Read all of the uncompressed data in the stored blocks in foo.gz and write\n     it to foo.add.  Also write foo.temp with the last 32K of that data to\n     provide a dictionary for the next invocation of this procedure.\n   - Rewrite the extra field marking foo.gz with a compression in process.\n   * If there is no data provided to compress (due to a missing foo.add file\n     when recovering), reconstruct and truncate the foo.gz file to contain\n     only the previous compressed data and proceed to the step after the next\n     one.  Otherwise ...\n   - Compress the data with the dictionary in foo.dict, and write to the\n     foo.gz file starting at the bit immediately following the last previously\n     compressed block.  If there is no foo.dict, proceed anyway with the\n     compression at slightly reduced efficiency.  (For the foo.dict file to be\n     missing requires some external failure beyond simply the interruption of\n     a compress operation.)  During this process, the foo.lock file is\n     periodically touched to assure that that file is not considered stale by\n     another process before we're done.  The deflation is terminated with a\n     non-last empty static block (10 bits long), that is then located and\n     written over by a last-bit-set empty stored block.\n   - Append the crc and length of the data in the gzip file (previously\n     calculated during the append operations).\n   - Write over the extra field with the updated stored block offsets, bits\n     back, crc's, and lengths, and mark foo.gz as in process for a replacement\n     of the dictionary.\n   @ Delete the foo.add file.\n   - Replace foo.dict with foo.temp.\n   - Write over the extra field, marking foo.gz as complete.\n\n   Recovery procedure:\n   - If not a replace recovery, read in the foo.add file, and provide that data\n     to the appropriate recovery below.  If there is no foo.add file, provide\n     a zero data length to the recovery.  In that case, the append recovery\n     restores the foo.gz to the previous compressed + uncompressed data state.\n     For the the compress recovery, a missing foo.add file results in foo.gz\n     being restored to the previous compressed-only data state.\n   - Append recovery:\n     - Pick up append at + step above\n   - Compress recovery:\n     - Pick up compress at * step above\n   - Replace recovery:\n     - Pick up compress at @ step above\n   - Log the repair with a date stamp in foo.repairs\n */\n\n#include <sys/types.h>\n#include <stdio.h>      /* rename, fopen, fprintf, fclose */\n#include <stdlib.h>     /* malloc, free */\n#include <string.h>     /* strlen, strrchr, strcpy, strncpy, strcmp */\n#include <fcntl.h>      /* open */\n#include <unistd.h>     /* lseek, read, write, close, unlink, sleep, */\n                        /* ftruncate, fsync */\n#include <errno.h>      /* errno */\n#include <time.h>       /* time, ctime */\n#include <sys/stat.h>   /* stat */\n#include <sys/time.h>   /* utimes */\n#include \"zlib.h\"       /* crc32 */\n\n#include \"gzlog.h\"      /* header for external access */\n\n#define local static\ntypedef unsigned int uint;\ntypedef unsigned long ulong;\n\n/* Macro for debugging to deterministically force recovery operations */\n#ifdef DEBUG\n    #include <setjmp.h>         /* longjmp */\n    jmp_buf gzlog_jump;         /* where to go back to */\n    int gzlog_bail = 0;         /* which point to bail at (1..8) */\n    int gzlog_count = -1;       /* number of times through to wait */\n#   define BAIL(n) do { if (n == gzlog_bail && gzlog_count-- == 0) \\\n                            longjmp(gzlog_jump, gzlog_bail); } while (0)\n#else\n#   define BAIL(n)\n#endif\n\n/* how old the lock file can be in seconds before considering it stale */\n#define PATIENCE 300\n\n/* maximum stored block size in Kbytes -- must be in 1..63 */\n#define MAX_STORE 16\n\n/* number of stored Kbytes to trigger compression (must be >= 32 to allow\n   dictionary construction, and <= 204 * MAX_STORE, in order for >> 10 to\n   discard the stored block headers contribution of five bytes each) */\n#define TRIGGER 1024\n\n/* size of a deflate dictionary (this cannot be changed) */\n#define DICT 32768U\n\n/* values for the operation (2 bits) */\n#define NO_OP 0\n#define APPEND_OP 1\n#define COMPRESS_OP 2\n#define REPLACE_OP 3\n\n/* macros to extract little-endian integers from an unsigned byte buffer */\n#define PULL2(p) ((p)[0]+((uint)((p)[1])<<8))\n#define PULL4(p) (PULL2(p)+((ulong)PULL2(p+2)<<16))\n#define PULL8(p) (PULL4(p)+((off_t)PULL4(p+4)<<32))\n\n/* macros to store integers into a byte buffer in little-endian order */\n#define PUT2(p,a) do {(p)[0]=a;(p)[1]=(a)>>8;} while(0)\n#define PUT4(p,a) do {PUT2(p,a);PUT2(p+2,a>>16);} while(0)\n#define PUT8(p,a) do {PUT4(p,a);PUT4(p+4,a>>32);} while(0)\n\n/* internal structure for log information */\n#define LOGID \"\\106\\035\\172\"    /* should be three non-zero characters */\nstruct log {\n    char id[4];     /* contains LOGID to detect inadvertent overwrites */\n    int fd;         /* file descriptor for .gz file, opened read/write */\n    char *path;     /* allocated path, e.g. \"/var/log/foo\" or \"foo\" */\n    char *end;      /* end of path, for appending suffices such as \".gz\" */\n    off_t first;    /* offset of first stored block first length byte */\n    int back;       /* location of first block id in bits back from first */\n    uint stored;    /* bytes currently in last stored block */\n    off_t last;     /* offset of last stored block first length byte */\n    ulong ccrc;     /* crc of compressed data */\n    ulong clen;     /* length (modulo 2^32) of compressed data */\n    ulong tcrc;     /* crc of total data */\n    ulong tlen;     /* length (modulo 2^32) of total data */\n    time_t lock;    /* last modify time of our lock file */\n};\n\n/* gzip header for gzlog */\nlocal unsigned char log_gzhead[] = {\n    0x1f, 0x8b,                 /* magic gzip id */\n    8,                          /* compression method is deflate */\n    4,                          /* there is an extra field (no file name) */\n    0, 0, 0, 0,                 /* no modification time provided */\n    0, 0xff,                    /* no extra flags, no OS specified */\n    39, 0, 'a', 'p', 35, 0      /* extra field with \"ap\" subfield */\n                                /* 35 is EXTRA, 39 is EXTRA + 4 */\n};\n\n#define HEAD sizeof(log_gzhead)     /* should be 16 */\n\n/* initial gzip extra field content (52 == HEAD + EXTRA + 1) */\nlocal unsigned char log_gzext[] = {\n    52, 0, 0, 0, 0, 0, 0, 0,    /* offset of first stored block length */\n    52, 0, 0, 0, 0, 0, 0, 0,    /* offset of last stored block length */\n    0, 0, 0, 0, 0, 0, 0, 0,     /* compressed data crc and length */\n    0, 0, 0, 0, 0, 0, 0, 0,     /* total data crc and length */\n    0, 0,                       /* final stored block data length */\n    5                           /* op is NO_OP, last bit 8 bits back */\n};\n\n#define EXTRA sizeof(log_gzext)     /* should be 35 */\n\n/* initial gzip data and trailer */\nlocal unsigned char log_gzbody[] = {\n    1, 0, 0, 0xff, 0xff,        /* empty stored block (last) */\n    0, 0, 0, 0,                 /* crc */\n    0, 0, 0, 0                  /* uncompressed length */\n};\n\n#define BODY sizeof(log_gzbody)\n\n/* Exclusively create foo.lock in order to negotiate exclusive access to the\n   foo.* files.  If the modify time of an existing lock file is greater than\n   PATIENCE seconds in the past, then consider the lock file to have been\n   abandoned, delete it, and try the exclusive create again.  Save the lock\n   file modify time for verification of ownership.  Return 0 on success, or -1\n   on failure, usually due to an access restriction or invalid path.  Note that\n   if stat() or unlink() fails, it may be due to another process noticing the\n   abandoned lock file a smidge sooner and deleting it, so those are not\n   flagged as an error. */\nlocal int log_lock(struct log *log)\n{\n    int fd;\n    struct stat st;\n\n    strcpy(log->end, \".lock\");\n    while ((fd = open(log->path, O_CREAT | O_EXCL, 0644)) < 0) {\n        if (errno != EEXIST)\n            return -1;\n        if (stat(log->path, &st) == 0 && time(NULL) - st.st_mtime > PATIENCE) {\n            unlink(log->path);\n            continue;\n        }\n        sleep(2);       /* relinquish the CPU for two seconds while waiting */\n    }\n    close(fd);\n    if (stat(log->path, &st) == 0)\n        log->lock = st.st_mtime;\n    return 0;\n}\n\n/* Update the modify time of the lock file to now, in order to prevent another\n   task from thinking that the lock is stale.  Save the lock file modify time\n   for verification of ownership. */\nlocal void log_touch(struct log *log)\n{\n    struct stat st;\n\n    strcpy(log->end, \".lock\");\n    utimes(log->path, NULL);\n    if (stat(log->path, &st) == 0)\n        log->lock = st.st_mtime;\n}\n\n/* Check the log file modify time against what is expected.  Return true if\n   this is not our lock.  If it is our lock, touch it to keep it. */\nlocal int log_check(struct log *log)\n{\n    struct stat st;\n\n    strcpy(log->end, \".lock\");\n    if (stat(log->path, &st) || st.st_mtime != log->lock)\n        return 1;\n    log_touch(log);\n    return 0;\n}\n\n/* Unlock a previously acquired lock, but only if it's ours. */\nlocal void log_unlock(struct log *log)\n{\n    if (log_check(log))\n        return;\n    strcpy(log->end, \".lock\");\n    unlink(log->path);\n    log->lock = 0;\n}\n\n/* Check the gzip header and read in the extra field, filling in the values in\n   the log structure.  Return op on success or -1 if the gzip header was not as\n   expected.  op is the current operation in progress last written to the extra\n   field.  This assumes that the gzip file has already been opened, with the\n   file descriptor log->fd. */\nlocal int log_head(struct log *log)\n{\n    int op;\n    unsigned char buf[HEAD + EXTRA];\n\n    if (lseek(log->fd, 0, SEEK_SET) < 0 ||\n        read(log->fd, buf, HEAD + EXTRA) != HEAD + EXTRA ||\n        memcmp(buf, log_gzhead, HEAD)) {\n        return -1;\n    }\n    log->first = PULL8(buf + HEAD);\n    log->last = PULL8(buf + HEAD + 8);\n    log->ccrc = PULL4(buf + HEAD + 16);\n    log->clen = PULL4(buf + HEAD + 20);\n    log->tcrc = PULL4(buf + HEAD + 24);\n    log->tlen = PULL4(buf + HEAD + 28);\n    log->stored = PULL2(buf + HEAD + 32);\n    log->back = 3 + (buf[HEAD + 34] & 7);\n    op = (buf[HEAD + 34] >> 3) & 3;\n    return op;\n}\n\n/* Write over the extra field contents, marking the operation as op.  Use fsync\n   to assure that the device is written to, and in the requested order.  This\n   operation, and only this operation, is assumed to be atomic in order to\n   assure that the log is recoverable in the event of an interruption at any\n   point in the process.  Return -1 if the write to foo.gz failed. */\nlocal int log_mark(struct log *log, int op)\n{\n    int ret;\n    unsigned char ext[EXTRA];\n\n    PUT8(ext, log->first);\n    PUT8(ext + 8, log->last);\n    PUT4(ext + 16, log->ccrc);\n    PUT4(ext + 20, log->clen);\n    PUT4(ext + 24, log->tcrc);\n    PUT4(ext + 28, log->tlen);\n    PUT2(ext + 32, log->stored);\n    ext[34] = log->back - 3 + (op << 3);\n    fsync(log->fd);\n    ret = lseek(log->fd, HEAD, SEEK_SET) < 0 ||\n          write(log->fd, ext, EXTRA) != EXTRA ? -1 : 0;\n    fsync(log->fd);\n    return ret;\n}\n\n/* Rewrite the last block header bits and subsequent zero bits to get to a byte\n   boundary, setting the last block bit if last is true, and then write the\n   remainder of the stored block header (length and one's complement).  Leave\n   the file pointer after the end of the last stored block data.  Return -1 if\n   there is a read or write failure on the foo.gz file */\nlocal int log_last(struct log *log, int last)\n{\n    int back, len, mask;\n    unsigned char buf[6];\n\n    /* determine the locations of the bytes and bits to modify */\n    back = log->last == log->first ? log->back : 8;\n    len = back > 8 ? 2 : 1;                 /* bytes back from log->last */\n    mask = 0x80 >> ((back - 1) & 7);        /* mask for block last-bit */\n\n    /* get the byte to modify (one or two back) into buf[0] -- don't need to\n       read the byte if the last-bit is eight bits back, since in that case\n       the entire byte will be modified */\n    buf[0] = 0;\n    if (back != 8 && (lseek(log->fd, log->last - len, SEEK_SET) < 0 ||\n                      read(log->fd, buf, 1) != 1))\n        return -1;\n\n    /* change the last-bit of the last stored block as requested -- note\n       that all bits above the last-bit are set to zero, per the type bits\n       of a stored block being 00 and per the convention that the bits to\n       bring the stream to a byte boundary are also zeros */\n    buf[1] = 0;\n    buf[2 - len] = (*buf & (mask - 1)) + (last ? mask : 0);\n\n    /* write the modified stored block header and lengths, move the file\n       pointer to after the last stored block data */\n    PUT2(buf + 2, log->stored);\n    PUT2(buf + 4, log->stored ^ 0xffff);\n    return lseek(log->fd, log->last - len, SEEK_SET) < 0 ||\n           write(log->fd, buf + 2 - len, len + 4) != len + 4 ||\n           lseek(log->fd, log->stored, SEEK_CUR) < 0 ? -1 : 0;\n}\n\n/* Append len bytes from data to the locked and open log file.  len may be zero\n   if recovering and no .add file was found.  In that case, the previous state\n   of the foo.gz file is restored.  The data is appended uncompressed in\n   deflate stored blocks.  Return -1 if there was an error reading or writing\n   the foo.gz file. */\nlocal int log_append(struct log *log, unsigned char *data, size_t len)\n{\n    uint put;\n    off_t end;\n    unsigned char buf[8];\n\n    /* set the last block last-bit and length, in case recovering an\n       interrupted append, then position the file pointer to append to the\n       block */\n    if (log_last(log, 1))\n        return -1;\n\n    /* append, adding stored blocks and updating the offset of the last stored\n       block as needed, and update the total crc and length */\n    while (len) {\n        /* append as much as we can to the last block */\n        put = (MAX_STORE << 10) - log->stored;\n        if (put > len)\n            put = (uint)len;\n        if (put) {\n            if (write(log->fd, data, put) != put)\n                return -1;\n            BAIL(1);\n            log->tcrc = crc32(log->tcrc, data, put);\n            log->tlen += put;\n            log->stored += put;\n            data += put;\n            len -= put;\n        }\n\n        /* if we need to, add a new empty stored block */\n        if (len) {\n            /* mark current block as not last */\n            if (log_last(log, 0))\n                return -1;\n\n            /* point to new, empty stored block */\n            log->last += 4 + log->stored + 1;\n            log->stored = 0;\n        }\n\n        /* mark last block as last, update its length */\n        if (log_last(log, 1))\n            return -1;\n        BAIL(2);\n    }\n\n    /* write the new crc and length trailer, and truncate just in case (could\n       be recovering from partial append with a missing foo.add file) */\n    PUT4(buf, log->tcrc);\n    PUT4(buf + 4, log->tlen);\n    if (write(log->fd, buf, 8) != 8 ||\n        (end = lseek(log->fd, 0, SEEK_CUR)) < 0 || ftruncate(log->fd, end))\n        return -1;\n\n    /* write the extra field, marking the log file as done, delete .add file */\n    if (log_mark(log, NO_OP))\n        return -1;\n    strcpy(log->end, \".add\");\n    unlink(log->path);          /* ignore error, since may not exist */\n    return 0;\n}\n\n/* Replace the foo.dict file with the foo.temp file.  Also delete the foo.add\n   file, since the compress operation may have been interrupted before that was\n   done.  Returns 1 if memory could not be allocated, or -1 if reading or\n   writing foo.gz fails, or if the rename fails for some reason other than\n   foo.temp not existing.  foo.temp not existing is a permitted error, since\n   the replace operation may have been interrupted after the rename is done,\n   but before foo.gz is marked as complete. */\nlocal int log_replace(struct log *log)\n{\n    int ret;\n    char *dest;\n\n    /* delete foo.add file */\n    strcpy(log->end, \".add\");\n    unlink(log->path);         /* ignore error, since may not exist */\n    BAIL(3);\n\n    /* rename foo.name to foo.dict, replacing foo.dict if it exists */\n    strcpy(log->end, \".dict\");\n    dest = malloc(strlen(log->path) + 1);\n    if (dest == NULL)\n        return -2;\n    strcpy(dest, log->path);\n    strcpy(log->end, \".temp\");\n    ret = rename(log->path, dest);\n    free(dest);\n    if (ret && errno != ENOENT)\n        return -1;\n    BAIL(4);\n\n    /* mark the foo.gz file as done */\n    return log_mark(log, NO_OP);\n}\n\n/* Compress the len bytes at data and append the compressed data to the\n   foo.gz deflate data immediately after the previous compressed data.  This\n   overwrites the previous uncompressed data, which was stored in foo.add\n   and is the data provided in data[0..len-1].  If this operation is\n   interrupted, it picks up at the start of this routine, with the foo.add\n   file read in again.  If there is no data to compress (len == 0), then we\n   simply terminate the foo.gz file after the previously compressed data,\n   appending a final empty stored block and the gzip trailer.  Return -1 if\n   reading or writing the log.gz file failed, or -2 if there was a memory\n   allocation failure. */\nlocal int log_compress(struct log *log, unsigned char *data, size_t len)\n{\n    int fd;\n    uint got, max;\n    ssize_t dict;\n    off_t end;\n    z_stream strm;\n    unsigned char buf[DICT];\n\n    /* compress and append compressed data */\n    if (len) {\n        /* set up for deflate, allocating memory */\n        strm.zalloc = Z_NULL;\n        strm.zfree = Z_NULL;\n        strm.opaque = Z_NULL;\n        if (deflateInit2(&strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, -15, 8,\n                         Z_DEFAULT_STRATEGY) != Z_OK)\n            return -2;\n\n        /* read in dictionary (last 32K of data that was compressed) */\n        strcpy(log->end, \".dict\");\n        fd = open(log->path, O_RDONLY, 0);\n        if (fd >= 0) {\n            dict = read(fd, buf, DICT);\n            close(fd);\n            if (dict < 0) {\n                deflateEnd(&strm);\n                return -1;\n            }\n            if (dict)\n                deflateSetDictionary(&strm, buf, (uint)dict);\n        }\n        log_touch(log);\n\n        /* prime deflate with last bits of previous block, position write\n           pointer to write those bits and overwrite what follows */\n        if (lseek(log->fd, log->first - (log->back > 8 ? 2 : 1),\n                SEEK_SET) < 0 ||\n            read(log->fd, buf, 1) != 1 || lseek(log->fd, -1, SEEK_CUR) < 0) {\n            deflateEnd(&strm);\n            return -1;\n        }\n        deflatePrime(&strm, (8 - log->back) & 7, *buf);\n\n        /* compress, finishing with a partial non-last empty static block */\n        strm.next_in = data;\n        max = (((uint)0 - 1) >> 1) + 1; /* in case int smaller than size_t */\n        do {\n            strm.avail_in = len > max ? max : (uint)len;\n            len -= strm.avail_in;\n            do {\n                strm.avail_out = DICT;\n                strm.next_out = buf;\n                deflate(&strm, len ? Z_NO_FLUSH : Z_PARTIAL_FLUSH);\n                got = DICT - strm.avail_out;\n                if (got && write(log->fd, buf, got) != got) {\n                    deflateEnd(&strm);\n                    return -1;\n                }\n                log_touch(log);\n            } while (strm.avail_out == 0);\n        } while (len);\n        deflateEnd(&strm);\n        BAIL(5);\n\n        /* find start of empty static block -- scanning backwards the first one\n           bit is the second bit of the block, if the last byte is zero, then\n           we know the byte before that has a one in the top bit, since an\n           empty static block is ten bits long */\n        if ((log->first = lseek(log->fd, -1, SEEK_CUR)) < 0 ||\n            read(log->fd, buf, 1) != 1)\n            return -1;\n        log->first++;\n        if (*buf) {\n            log->back = 1;\n            while ((*buf & ((uint)1 << (8 - log->back++))) == 0)\n                ;       /* guaranteed to terminate, since *buf != 0 */\n        }\n        else\n            log->back = 10;\n\n        /* update compressed crc and length */\n        log->ccrc = log->tcrc;\n        log->clen = log->tlen;\n    }\n    else {\n        /* no data to compress -- fix up existing gzip stream */\n        log->tcrc = log->ccrc;\n        log->tlen = log->clen;\n    }\n\n    /* complete and truncate gzip stream */\n    log->last = log->first;\n    log->stored = 0;\n    PUT4(buf, log->tcrc);\n    PUT4(buf + 4, log->tlen);\n    if (log_last(log, 1) || write(log->fd, buf, 8) != 8 ||\n        (end = lseek(log->fd, 0, SEEK_CUR)) < 0 || ftruncate(log->fd, end))\n        return -1;\n    BAIL(6);\n\n    /* mark as being in the replace operation */\n    if (log_mark(log, REPLACE_OP))\n        return -1;\n\n    /* execute the replace operation and mark the file as done */\n    return log_replace(log);\n}\n\n/* log a repair record to the .repairs file */\nlocal void log_log(struct log *log, int op, char *record)\n{\n    time_t now;\n    FILE *rec;\n\n    now = time(NULL);\n    strcpy(log->end, \".repairs\");\n    rec = fopen(log->path, \"a\");\n    if (rec == NULL)\n        return;\n    fprintf(rec, \"%.24s %s recovery: %s\\n\", ctime(&now), op == APPEND_OP ?\n            \"append\" : (op == COMPRESS_OP ? \"compress\" : \"replace\"), record);\n    fclose(rec);\n    return;\n}\n\n/* Recover the interrupted operation op.  First read foo.add for recovering an\n   append or compress operation.  Return -1 if there was an error reading or\n   writing foo.gz or reading an existing foo.add, or -2 if there was a memory\n   allocation failure. */\nlocal int log_recover(struct log *log, int op)\n{\n    int fd, ret = 0;\n    unsigned char *data = NULL;\n    size_t len = 0;\n    struct stat st;\n\n    /* log recovery */\n    log_log(log, op, \"start\");\n\n    /* load foo.add file if expected and present */\n    if (op == APPEND_OP || op == COMPRESS_OP) {\n        strcpy(log->end, \".add\");\n        if (stat(log->path, &st) == 0 && st.st_size) {\n            len = (size_t)(st.st_size);\n            if (len != st.st_size || (data = malloc(st.st_size)) == NULL) {\n                log_log(log, op, \"allocation failure\");\n                return -2;\n            }\n            if ((fd = open(log->path, O_RDONLY, 0)) < 0) {\n                log_log(log, op, \".add file read failure\");\n                return -1;\n            }\n            ret = read(fd, data, len) != len;\n            close(fd);\n            if (ret) {\n                log_log(log, op, \".add file read failure\");\n                return -1;\n            }\n            log_log(log, op, \"loaded .add file\");\n        }\n        else\n            log_log(log, op, \"missing .add file!\");\n    }\n\n    /* recover the interrupted operation */\n    switch (op) {\n    case APPEND_OP:\n        ret = log_append(log, data, len);\n        break;\n    case COMPRESS_OP:\n        ret = log_compress(log, data, len);\n        break;\n    case REPLACE_OP:\n        ret = log_replace(log);\n    }\n\n    /* log status */\n    log_log(log, op, ret ? \"failure\" : \"complete\");\n\n    /* clean up */\n    if (data != NULL)\n        free(data);\n    return ret;\n}\n\n/* Close the foo.gz file (if open) and release the lock. */\nlocal void log_close(struct log *log)\n{\n    if (log->fd >= 0)\n        close(log->fd);\n    log->fd = -1;\n    log_unlock(log);\n}\n\n/* Open foo.gz, verify the header, and load the extra field contents, after\n   first creating the foo.lock file to gain exclusive access to the foo.*\n   files.  If foo.gz does not exist or is empty, then write the initial header,\n   extra, and body content of an empty foo.gz log file.  If there is an error\n   creating the lock file due to access restrictions, or an error reading or\n   writing the foo.gz file, or if the foo.gz file is not a proper log file for\n   this object (e.g. not a gzip file or does not contain the expected extra\n   field), then return true.  If there is an error, the lock is released.\n   Otherwise, the lock is left in place. */\nlocal int log_open(struct log *log)\n{\n    int op;\n\n    /* release open file resource if left over -- can occur if lock lost\n       between gzlog_open() and gzlog_write() */\n    if (log->fd >= 0)\n        close(log->fd);\n    log->fd = -1;\n\n    /* negotiate exclusive access */\n    if (log_lock(log) < 0)\n        return -1;\n\n    /* open the log file, foo.gz */\n    strcpy(log->end, \".gz\");\n    log->fd = open(log->path, O_RDWR | O_CREAT, 0644);\n    if (log->fd < 0) {\n        log_close(log);\n        return -1;\n    }\n\n    /* if new, initialize foo.gz with an empty log, delete old dictionary */\n    if (lseek(log->fd, 0, SEEK_END) == 0) {\n        if (write(log->fd, log_gzhead, HEAD) != HEAD ||\n            write(log->fd, log_gzext, EXTRA) != EXTRA ||\n            write(log->fd, log_gzbody, BODY) != BODY) {\n            log_close(log);\n            return -1;\n        }\n        strcpy(log->end, \".dict\");\n        unlink(log->path);\n    }\n\n    /* verify log file and load extra field information */\n    if ((op = log_head(log)) < 0) {\n        log_close(log);\n        return -1;\n    }\n\n    /* check for interrupted process and if so, recover */\n    if (op != NO_OP && log_recover(log, op)) {\n        log_close(log);\n        return -1;\n    }\n\n    /* touch the lock file to prevent another process from grabbing it */\n    log_touch(log);\n    return 0;\n}\n\n/* See gzlog.h for the description of the external methods below */\ngzlog *gzlog_open(char *path)\n{\n    size_t n;\n    struct log *log;\n\n    /* check arguments */\n    if (path == NULL || *path == 0)\n        return NULL;\n\n    /* allocate and initialize log structure */\n    log = malloc(sizeof(struct log));\n    if (log == NULL)\n        return NULL;\n    strcpy(log->id, LOGID);\n    log->fd = -1;\n\n    /* save path and end of path for name construction */\n    n = strlen(path);\n    log->path = malloc(n + 9);              /* allow for \".repairs\" */\n    if (log->path == NULL) {\n        free(log);\n        return NULL;\n    }\n    strcpy(log->path, path);\n    log->end = log->path + n;\n\n    /* gain exclusive access and verify log file -- may perform a\n       recovery operation if needed */\n    if (log_open(log)) {\n        free(log->path);\n        free(log);\n        return NULL;\n    }\n\n    /* return pointer to log structure */\n    return log;\n}\n\n/* gzlog_compress() return values:\n    0: all good\n   -1: file i/o error (usually access issue)\n   -2: memory allocation failure\n   -3: invalid log pointer argument */\nint gzlog_compress(gzlog *logd)\n{\n    int fd, ret;\n    uint block;\n    size_t len, next;\n    unsigned char *data, buf[5];\n    struct log *log = logd;\n\n    /* check arguments */\n    if (log == NULL || strcmp(log->id, LOGID) || len < 0)\n        return -3;\n\n    /* see if we lost the lock -- if so get it again and reload the extra\n       field information (it probably changed), recover last operation if\n       necessary */\n    if (log_check(log) && log_open(log))\n        return -1;\n\n    /* create space for uncompressed data */\n    len = ((size_t)(log->last - log->first) & ~(((size_t)1 << 10) - 1)) +\n          log->stored;\n    if ((data = malloc(len)) == NULL)\n        return -2;\n\n    /* do statement here is just a cheap trick for error handling */\n    do {\n        /* read in the uncompressed data */\n        if (lseek(log->fd, log->first - 1, SEEK_SET) < 0)\n            break;\n        next = 0;\n        while (next < len) {\n            if (read(log->fd, buf, 5) != 5)\n                break;\n            block = PULL2(buf + 1);\n            if (next + block > len ||\n                read(log->fd, (char *)data + next, block) != block)\n                break;\n            next += block;\n        }\n        if (lseek(log->fd, 0, SEEK_CUR) != log->last + 4 + log->stored)\n            break;\n        log_touch(log);\n\n        /* write the uncompressed data to the .add file */\n        strcpy(log->end, \".add\");\n        fd = open(log->path, O_WRONLY | O_CREAT | O_TRUNC, 0644);\n        if (fd < 0)\n            break;\n        ret = write(fd, data, len) != len;\n        if (ret | close(fd))\n            break;\n        log_touch(log);\n\n        /* write the dictionary for the next compress to the .temp file */\n        strcpy(log->end, \".temp\");\n        fd = open(log->path, O_WRONLY | O_CREAT | O_TRUNC, 0644);\n        if (fd < 0)\n            break;\n        next = DICT > len ? len : DICT;\n        ret = write(fd, (char *)data + len - next, next) != next;\n        if (ret | close(fd))\n            break;\n        log_touch(log);\n\n        /* roll back to compressed data, mark the compress in progress */\n        log->last = log->first;\n        log->stored = 0;\n        if (log_mark(log, COMPRESS_OP))\n            break;\n        BAIL(7);\n\n        /* compress and append the data (clears mark) */\n        ret = log_compress(log, data, len);\n        free(data);\n        return ret;\n    } while (0);\n\n    /* broke out of do above on i/o error */\n    free(data);\n    return -1;\n}\n\n/* gzlog_write() return values:\n    0: all good\n   -1: file i/o error (usually access issue)\n   -2: memory allocation failure\n   -3: invalid log pointer argument */\nint gzlog_write(gzlog *logd, void *data, size_t len)\n{\n    int fd, ret;\n    struct log *log = logd;\n\n    /* check arguments */\n    if (log == NULL || strcmp(log->id, LOGID) || len < 0)\n        return -3;\n    if (data == NULL || len == 0)\n        return 0;\n\n    /* see if we lost the lock -- if so get it again and reload the extra\n       field information (it probably changed), recover last operation if\n       necessary */\n    if (log_check(log) && log_open(log))\n        return -1;\n\n    /* create and write .add file */\n    strcpy(log->end, \".add\");\n    fd = open(log->path, O_WRONLY | O_CREAT | O_TRUNC, 0644);\n    if (fd < 0)\n        return -1;\n    ret = write(fd, data, len) != len;\n    if (ret | close(fd))\n        return -1;\n    log_touch(log);\n\n    /* mark log file with append in progress */\n    if (log_mark(log, APPEND_OP))\n        return -1;\n    BAIL(8);\n\n    /* append data (clears mark) */\n    if (log_append(log, data, len))\n        return -1;\n\n    /* check to see if it's time to compress -- if not, then done */\n    if (((log->last - log->first) >> 10) + (log->stored >> 10) < TRIGGER)\n        return 0;\n\n    /* time to compress */\n    return gzlog_compress(log);\n}\n\n/* gzlog_close() return values:\n    0: ok\n   -3: invalid log pointer argument */\nint gzlog_close(gzlog *logd)\n{\n    struct log *log = logd;\n\n    /* check arguments */\n    if (log == NULL || strcmp(log->id, LOGID))\n        return -3;\n\n    /* close the log file and release the lock */\n    log_close(log);\n\n    /* free structure and return */\n    if (log->path != NULL)\n        free(log->path);\n    strcpy(log->id, \"bad\");\n    free(log);\n    return 0;\n}\n"
  },
  {
    "path": "external/zlib/examples/gzlog.h",
    "content": "/* gzlog.h\n  Copyright (C) 2004, 2008 Mark Adler, all rights reserved\n  version 2.0, 25 Apr 2008\n\n  This software is provided 'as-is', without any express or implied\n  warranty.  In no event will the author be held liable for any damages\n  arising from the use of this software.\n\n  Permission is granted to anyone to use this software for any purpose,\n  including commercial applications, and to alter it and redistribute it\n  freely, subject to the following restrictions:\n\n  1. The origin of this software must not be misrepresented; you must not\n     claim that you wrote the original software. If you use this software\n     in a product, an acknowledgment in the product documentation would be\n     appreciated but is not required.\n  2. Altered source versions must be plainly marked as such, and must not be\n     misrepresented as being the original software.\n  3. This notice may not be removed or altered from any source distribution.\n\n  Mark Adler    madler@alumni.caltech.edu\n */\n\n/* Version History:\n   1.0  26 Nov 2004  First version\n   2.0  25 Apr 2008  Complete redesign for recovery of interrupted operations\n                     Interface changed slightly in that now path is a prefix\n                     Compression now occurs as needed during gzlog_write()\n                     gzlog_write() now always leaves the log file as valid gzip\n */\n\n/*\n   The gzlog object allows writing short messages to a gzipped log file,\n   opening the log file locked for small bursts, and then closing it.  The log\n   object works by appending stored (uncompressed) data to the gzip file until\n   1 MB has been accumulated.  At that time, the stored data is compressed, and\n   replaces the uncompressed data in the file.  The log file is truncated to\n   its new size at that time.  After each write operation, the log file is a\n   valid gzip file that can decompressed to recover what was written.\n\n   The gzlog operations can be interupted at any point due to an application or\n   system crash, and the log file will be recovered the next time the log is\n   opened with gzlog_open().\n */\n\n#ifndef GZLOG_H\n#define GZLOG_H\n\n/* gzlog object type */\ntypedef void gzlog;\n\n/* Open a gzlog object, creating the log file if it does not exist.  Return\n   NULL on error.  Note that gzlog_open() could take a while to complete if it\n   has to wait to verify that a lock is stale (possibly for five minutes), or\n   if there is significant contention with other instantiations of this object\n   when locking the resource.  path is the prefix of the file names created by\n   this object.  If path is \"foo\", then the log file will be \"foo.gz\", and\n   other auxiliary files will be created and destroyed during the process:\n   \"foo.dict\" for a compression dictionary, \"foo.temp\" for a temporary (next)\n   dictionary, \"foo.add\" for data being added or compressed, \"foo.lock\" for the\n   lock file, and \"foo.repairs\" to log recovery operations performed due to\n   interrupted gzlog operations.  A gzlog_open() followed by a gzlog_close()\n   will recover a previously interrupted operation, if any. */\ngzlog *gzlog_open(char *path);\n\n/* Write to a gzlog object.  Return zero on success, -1 if there is a file i/o\n   error on any of the gzlog files (this should not happen if gzlog_open()\n   succeeded, unless the device has run out of space or leftover auxiliary\n   files have permissions or ownership that prevent their use), -2 if there is\n   a memory allocation failure, or -3 if the log argument is invalid (e.g. if\n   it was not created by gzlog_open()).  This function will write data to the\n   file uncompressed, until 1 MB has been accumulated, at which time that data\n   will be compressed.  The log file will be a valid gzip file upon successful\n   return. */\nint gzlog_write(gzlog *log, void *data, size_t len);\n\n/* Force compression of any uncompressed data in the log.  This should be used\n   sparingly, if at all.  The main application would be when a log file will\n   not be appended to again.  If this is used to compress frequently while\n   appending, it will both significantly increase the execution time and\n   reduce the compression ratio.  The return codes are the same as for\n   gzlog_write(). */\nint gzlog_compress(gzlog *log);\n\n/* Close a gzlog object.  Return zero on success, -3 if the log argument is\n   invalid.  The log object is freed, and so cannot be referenced again. */\nint gzlog_close(gzlog *log);\n\n#endif\n"
  },
  {
    "path": "external/zlib/examples/zlib_how.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"\n  \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">\n<title>zlib Usage Example</title>\n<!--  Copyright (c) 2004, 2005 Mark Adler.  -->\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#000000\" link=\"#0000FF\" vlink=\"#00A000\">\n<h2 align=\"center\"> zlib Usage Example </h2>\nWe often get questions about how the <tt>deflate()</tt> and <tt>inflate()</tt> functions should be used.\nUsers wonder when they should provide more input, when they should use more output,\nwhat to do with a <tt>Z_BUF_ERROR</tt>, how to make sure the process terminates properly, and\nso on.  So for those who have read <tt>zlib.h</tt> (a few times), and\nwould like further edification, below is an annotated example in C of simple routines to compress and decompress\nfrom an input file to an output file using <tt>deflate()</tt> and <tt>inflate()</tt> respectively.  The\nannotations are interspersed between lines of the code.  So please read between the lines.\nWe hope this helps explain some of the intricacies of <em>zlib</em>.\n<p>\nWithout further adieu, here is the program <a href=\"zpipe.c\"><tt>zpipe.c</tt></a>:\n<pre><b>\n/* zpipe.c: example of proper use of zlib's inflate() and deflate()\n   Not copyrighted -- provided to the public domain\n   Version 1.4  11 December 2005  Mark Adler */\n\n/* Version history:\n   1.0  30 Oct 2004  First version\n   1.1   8 Nov 2004  Add void casting for unused return values\n                     Use switch statement for inflate() return values\n   1.2   9 Nov 2004  Add assertions to document zlib guarantees\n   1.3   6 Apr 2005  Remove incorrect assertion in inf()\n   1.4  11 Dec 2005  Add hack to avoid MSDOS end-of-line conversions\n                     Avoid some compiler warnings for input and output buffers\n */\n</b></pre><!-- -->\nWe now include the header files for the required definitions.  From\n<tt>stdio.h</tt> we use <tt>fopen()</tt>, <tt>fread()</tt>, <tt>fwrite()</tt>,\n<tt>feof()</tt>, <tt>ferror()</tt>, and <tt>fclose()</tt> for file i/o, and\n<tt>fputs()</tt> for error messages.  From <tt>string.h</tt> we use\n<tt>strcmp()</tt> for command line argument processing.\nFrom <tt>assert.h</tt> we use the <tt>assert()</tt> macro.\nFrom <tt>zlib.h</tt>\nwe use the basic compression functions <tt>deflateInit()</tt>,\n<tt>deflate()</tt>, and <tt>deflateEnd()</tt>, and the basic decompression\nfunctions <tt>inflateInit()</tt>, <tt>inflate()</tt>, and\n<tt>inflateEnd()</tt>.\n<pre><b>\n#include &lt;stdio.h&gt;\n#include &lt;string.h&gt;\n#include &lt;assert.h&gt;\n#include \"zlib.h\"\n</b></pre><!-- -->\nThis is an ugly hack required to avoid corruption of the input and output data on\nWindows/MS-DOS systems.  Without this, those systems would assume that the input and output\nfiles are text, and try to convert the end-of-line characters from one standard to\nanother.  That would corrupt binary data, and in particular would render the compressed data unusable.\nThis sets the input and output to binary which suppresses the end-of-line conversions.\n<tt>SET_BINARY_MODE()</tt> will be used later on <tt>stdin</tt> and <tt>stdout</tt>, at the beginning of <tt>main()</tt>.\n<pre><b>\n#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)\n#  include &lt;fcntl.h&gt;\n#  include &lt;io.h&gt;\n#  define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)\n#else\n#  define SET_BINARY_MODE(file)\n#endif\n</b></pre><!-- -->\n<tt>CHUNK</tt> is simply the buffer size for feeding data to and pulling data\nfrom the <em>zlib</em> routines.  Larger buffer sizes would be more efficient,\nespecially for <tt>inflate()</tt>.  If the memory is available, buffers sizes\non the order of 128K or 256K bytes should be used.\n<pre><b>\n#define CHUNK 16384\n</b></pre><!-- -->\nThe <tt>def()</tt> routine compresses data from an input file to an output file.  The output data\nwill be in the <em>zlib</em> format, which is different from the <em>gzip</em> or <em>zip</em>\nformats.  The <em>zlib</em> format has a very small header of only two bytes to identify it as\na <em>zlib</em> stream and to provide decoding information, and a four-byte trailer with a fast\ncheck value to verify the integrity of the uncompressed data after decoding.\n<pre><b>\n/* Compress from file source to file dest until EOF on source.\n   def() returns Z_OK on success, Z_MEM_ERROR if memory could not be\n   allocated for processing, Z_STREAM_ERROR if an invalid compression\n   level is supplied, Z_VERSION_ERROR if the version of zlib.h and the\n   version of the library linked do not match, or Z_ERRNO if there is\n   an error reading or writing the files. */\nint def(FILE *source, FILE *dest, int level)\n{\n</b></pre>\nHere are the local variables for <tt>def()</tt>.  <tt>ret</tt> will be used for <em>zlib</em>\nreturn codes.  <tt>flush</tt> will keep track of the current flushing state for <tt>deflate()</tt>,\nwhich is either no flushing, or flush to completion after the end of the input file is reached.\n<tt>have</tt> is the amount of data returned from <tt>deflate()</tt>.  The <tt>strm</tt> structure\nis used to pass information to and from the <em>zlib</em> routines, and to maintain the\n<tt>deflate()</tt> state.  <tt>in</tt> and <tt>out</tt> are the input and output buffers for\n<tt>deflate()</tt>.\n<pre><b>\n    int ret, flush;\n    unsigned have;\n    z_stream strm;\n    unsigned char in[CHUNK];\n    unsigned char out[CHUNK];\n</b></pre><!-- -->\nThe first thing we do is to initialize the <em>zlib</em> state for compression using\n<tt>deflateInit()</tt>.  This must be done before the first use of <tt>deflate()</tt>.\nThe <tt>zalloc</tt>, <tt>zfree</tt>, and <tt>opaque</tt> fields in the <tt>strm</tt>\nstructure must be initialized before calling <tt>deflateInit()</tt>.  Here they are\nset to the <em>zlib</em> constant <tt>Z_NULL</tt> to request that <em>zlib</em> use\nthe default memory allocation routines.  An application may also choose to provide\ncustom memory allocation routines here.  <tt>deflateInit()</tt> will allocate on the\norder of 256K bytes for the internal state.\n(See <a href=\"zlib_tech.html\"><em>zlib Technical Details</em></a>.)\n<p>\n<tt>deflateInit()</tt> is called with a pointer to the structure to be initialized and\nthe compression level, which is an integer in the range of -1 to 9.  Lower compression\nlevels result in faster execution, but less compression.  Higher levels result in\ngreater compression, but slower execution.  The <em>zlib</em> constant Z_DEFAULT_COMPRESSION,\nequal to -1,\nprovides a good compromise between compression and speed and is equivalent to level 6.\nLevel 0 actually does no compression at all, and in fact expands the data slightly to produce\nthe <em>zlib</em> format (it is not a byte-for-byte copy of the input).\nMore advanced applications of <em>zlib</em>\nmay use <tt>deflateInit2()</tt> here instead.  Such an application may want to reduce how\nmuch memory will be used, at some price in compression.  Or it may need to request a\n<em>gzip</em> header and trailer instead of a <em>zlib</em> header and trailer, or raw\nencoding with no header or trailer at all.\n<p>\nWe must check the return value of <tt>deflateInit()</tt> against the <em>zlib</em> constant\n<tt>Z_OK</tt> to make sure that it was able to\nallocate memory for the internal state, and that the provided arguments were valid.\n<tt>deflateInit()</tt> will also check that the version of <em>zlib</em> that the <tt>zlib.h</tt>\nfile came from matches the version of <em>zlib</em> actually linked with the program.  This\nis especially important for environments in which <em>zlib</em> is a shared library.\n<p>\nNote that an application can initialize multiple, independent <em>zlib</em> streams, which can\noperate in parallel.  The state information maintained in the structure allows the <em>zlib</em>\nroutines to be reentrant.\n<pre><b>\n    /* allocate deflate state */\n    strm.zalloc = Z_NULL;\n    strm.zfree = Z_NULL;\n    strm.opaque = Z_NULL;\n    ret = deflateInit(&amp;strm, level);\n    if (ret != Z_OK)\n        return ret;\n</b></pre><!-- -->\nWith the pleasantries out of the way, now we can get down to business.  The outer <tt>do</tt>-loop\nreads all of the input file and exits at the bottom of the loop once end-of-file is reached.\nThis loop contains the only call of <tt>deflate()</tt>.  So we must make sure that all of the\ninput data has been processed and that all of the output data has been generated and consumed\nbefore we fall out of the loop at the bottom.\n<pre><b>\n    /* compress until end of file */\n    do {\n</b></pre>\nWe start off by reading data from the input file.  The number of bytes read is put directly\ninto <tt>avail_in</tt>, and a pointer to those bytes is put into <tt>next_in</tt>.  We also\ncheck to see if end-of-file on the input has been reached.  If we are at the end of file, then <tt>flush</tt> is set to the\n<em>zlib</em> constant <tt>Z_FINISH</tt>, which is later passed to <tt>deflate()</tt> to\nindicate that this is the last chunk of input data to compress.  We need to use <tt>feof()</tt>\nto check for end-of-file as opposed to seeing if fewer than <tt>CHUNK</tt> bytes have been read.  The\nreason is that if the input file length is an exact multiple of <tt>CHUNK</tt>, we will miss\nthe fact that we got to the end-of-file, and not know to tell <tt>deflate()</tt> to finish\nup the compressed stream.  If we are not yet at the end of the input, then the <em>zlib</em>\nconstant <tt>Z_NO_FLUSH</tt> will be passed to <tt>deflate</tt> to indicate that we are still\nin the middle of the uncompressed data.\n<p>\nIf there is an error in reading from the input file, the process is aborted with\n<tt>deflateEnd()</tt> being called to free the allocated <em>zlib</em> state before returning\nthe error.  We wouldn't want a memory leak, now would we?  <tt>deflateEnd()</tt> can be called\nat any time after the state has been initialized.  Once that's done, <tt>deflateInit()</tt> (or\n<tt>deflateInit2()</tt>) would have to be called to start a new compression process.  There is\nno point here in checking the <tt>deflateEnd()</tt> return code.  The deallocation can't fail.\n<pre><b>\n        strm.avail_in = fread(in, 1, CHUNK, source);\n        if (ferror(source)) {\n            (void)deflateEnd(&amp;strm);\n            return Z_ERRNO;\n        }\n        flush = feof(source) ? Z_FINISH : Z_NO_FLUSH;\n        strm.next_in = in;\n</b></pre><!-- -->\nThe inner <tt>do</tt>-loop passes our chunk of input data to <tt>deflate()</tt>, and then\nkeeps calling <tt>deflate()</tt> until it is done producing output.  Once there is no more\nnew output, <tt>deflate()</tt> is guaranteed to have consumed all of the input, i.e.,\n<tt>avail_in</tt> will be zero.\n<pre><b>\n        /* run deflate() on input until output buffer not full, finish\n           compression if all of source has been read in */\n        do {\n</b></pre>\nOutput space is provided to <tt>deflate()</tt> by setting <tt>avail_out</tt> to the number\nof available output bytes and <tt>next_out</tt> to a pointer to that space.\n<pre><b>\n            strm.avail_out = CHUNK;\n            strm.next_out = out;\n</b></pre>\nNow we call the compression engine itself, <tt>deflate()</tt>.  It takes as many of the\n<tt>avail_in</tt> bytes at <tt>next_in</tt> as it can process, and writes as many as\n<tt>avail_out</tt> bytes to <tt>next_out</tt>.  Those counters and pointers are then\nupdated past the input data consumed and the output data written.  It is the amount of\noutput space available that may limit how much input is consumed.\nHence the inner loop to make sure that\nall of the input is consumed by providing more output space each time.  Since <tt>avail_in</tt>\nand <tt>next_in</tt> are updated by <tt>deflate()</tt>, we don't have to mess with those\nbetween <tt>deflate()</tt> calls until it's all used up.\n<p>\nThe parameters to <tt>deflate()</tt> are a pointer to the <tt>strm</tt> structure containing\nthe input and output information and the internal compression engine state, and a parameter\nindicating whether and how to flush data to the output.  Normally <tt>deflate</tt> will consume\nseveral K bytes of input data before producing any output (except for the header), in order\nto accumulate statistics on the data for optimum compression.  It will then put out a burst of\ncompressed data, and proceed to consume more input before the next burst.  Eventually,\n<tt>deflate()</tt>\nmust be told to terminate the stream, complete the compression with provided input data, and\nwrite out the trailer check value.  <tt>deflate()</tt> will continue to compress normally as long\nas the flush parameter is <tt>Z_NO_FLUSH</tt>.  Once the <tt>Z_FINISH</tt> parameter is provided,\n<tt>deflate()</tt> will begin to complete the compressed output stream.  However depending on how\nmuch output space is provided, <tt>deflate()</tt> may have to be called several times until it\nhas provided the complete compressed stream, even after it has consumed all of the input.  The flush\nparameter must continue to be <tt>Z_FINISH</tt> for those subsequent calls.\n<p>\nThere are other values of the flush parameter that are used in more advanced applications.  You can\nforce <tt>deflate()</tt> to produce a burst of output that encodes all of the input data provided\nso far, even if it wouldn't have otherwise, for example to control data latency on a link with\ncompressed data.  You can also ask that <tt>deflate()</tt> do that as well as erase any history up to\nthat point so that what follows can be decompressed independently, for example for random access\napplications.  Both requests will degrade compression by an amount depending on how often such\nrequests are made.\n<p>\n<tt>deflate()</tt> has a return value that can indicate errors, yet we do not check it here.  Why\nnot?  Well, it turns out that <tt>deflate()</tt> can do no wrong here.  Let's go through\n<tt>deflate()</tt>'s return values and dispense with them one by one.  The possible values are\n<tt>Z_OK</tt>, <tt>Z_STREAM_END</tt>, <tt>Z_STREAM_ERROR</tt>, or <tt>Z_BUF_ERROR</tt>.  <tt>Z_OK</tt>\nis, well, ok.  <tt>Z_STREAM_END</tt> is also ok and will be returned for the last call of\n<tt>deflate()</tt>.  This is already guaranteed by calling <tt>deflate()</tt> with <tt>Z_FINISH</tt>\nuntil it has no more output.  <tt>Z_STREAM_ERROR</tt> is only possible if the stream is not\ninitialized properly, but we did initialize it properly.  There is no harm in checking for\n<tt>Z_STREAM_ERROR</tt> here, for example to check for the possibility that some\nother part of the application inadvertently clobbered the memory containing the <em>zlib</em> state.\n<tt>Z_BUF_ERROR</tt> will be explained further below, but\nsuffice it to say that this is simply an indication that <tt>deflate()</tt> could not consume\nmore input or produce more output.  <tt>deflate()</tt> can be called again with more output space\nor more available input, which it will be in this code.\n<pre><b>\n            ret = deflate(&amp;strm, flush);    /* no bad return value */\n            assert(ret != Z_STREAM_ERROR);  /* state not clobbered */\n</b></pre>\nNow we compute how much output <tt>deflate()</tt> provided on the last call, which is the\ndifference between how much space was provided before the call, and how much output space\nis still available after the call.  Then that data, if any, is written to the output file.\nWe can then reuse the output buffer for the next call of <tt>deflate()</tt>.  Again if there\nis a file i/o error, we call <tt>deflateEnd()</tt> before returning to avoid a memory leak.\n<pre><b>\n            have = CHUNK - strm.avail_out;\n            if (fwrite(out, 1, have, dest) != have || ferror(dest)) {\n                (void)deflateEnd(&amp;strm);\n                return Z_ERRNO;\n            }\n</b></pre>\nThe inner <tt>do</tt>-loop is repeated until the last <tt>deflate()</tt> call fails to fill the\nprovided output buffer.  Then we know that <tt>deflate()</tt> has done as much as it can with\nthe provided input, and that all of that input has been consumed.  We can then fall out of this\nloop and reuse the input buffer.\n<p>\nThe way we tell that <tt>deflate()</tt> has no more output is by seeing that it did not fill\nthe output buffer, leaving <tt>avail_out</tt> greater than zero.  However suppose that\n<tt>deflate()</tt> has no more output, but just so happened to exactly fill the output buffer!\n<tt>avail_out</tt> is zero, and we can't tell that <tt>deflate()</tt> has done all it can.\nAs far as we know, <tt>deflate()</tt>\nhas more output for us.  So we call it again.  But now <tt>deflate()</tt> produces no output\nat all, and <tt>avail_out</tt> remains unchanged as <tt>CHUNK</tt>.  That <tt>deflate()</tt> call\nwasn't able to do anything, either consume input or produce output, and so it returns\n<tt>Z_BUF_ERROR</tt>.  (See, I told you I'd cover this later.)  However this is not a problem at\nall.  Now we finally have the desired indication that <tt>deflate()</tt> is really done,\nand so we drop out of the inner loop to provide more input to <tt>deflate()</tt>.\n<p>\nWith <tt>flush</tt> set to <tt>Z_FINISH</tt>, this final set of <tt>deflate()</tt> calls will\ncomplete the output stream.  Once that is done, subsequent calls of <tt>deflate()</tt> would return\n<tt>Z_STREAM_ERROR</tt> if the flush parameter is not <tt>Z_FINISH</tt>, and do no more processing\nuntil the state is reinitialized.\n<p>\nSome applications of <em>zlib</em> have two loops that call <tt>deflate()</tt>\ninstead of the single inner loop we have here.  The first loop would call\nwithout flushing and feed all of the data to <tt>deflate()</tt>.  The second loop would call\n<tt>deflate()</tt> with no more\ndata and the <tt>Z_FINISH</tt> parameter to complete the process.  As you can see from this\nexample, that can be avoided by simply keeping track of the current flush state.\n<pre><b>\n        } while (strm.avail_out == 0);\n        assert(strm.avail_in == 0);     /* all input will be used */\n</b></pre><!-- -->\nNow we check to see if we have already processed all of the input file.  That information was\nsaved in the <tt>flush</tt> variable, so we see if that was set to <tt>Z_FINISH</tt>.  If so,\nthen we're done and we fall out of the outer loop.  We're guaranteed to get <tt>Z_STREAM_END</tt>\nfrom the last <tt>deflate()</tt> call, since we ran it until the last chunk of input was\nconsumed and all of the output was generated.\n<pre><b>\n        /* done when last data in file processed */\n    } while (flush != Z_FINISH);\n    assert(ret == Z_STREAM_END);        /* stream will be complete */\n</b></pre><!-- -->\nThe process is complete, but we still need to deallocate the state to avoid a memory leak\n(or rather more like a memory hemorrhage if you didn't do this).  Then\nfinally we can return with a happy return value.\n<pre><b>\n    /* clean up and return */\n    (void)deflateEnd(&amp;strm);\n    return Z_OK;\n}\n</b></pre><!-- -->\nNow we do the same thing for decompression in the <tt>inf()</tt> routine. <tt>inf()</tt>\ndecompresses what is hopefully a valid <em>zlib</em> stream from the input file and writes the\nuncompressed data to the output file.  Much of the discussion above for <tt>def()</tt>\napplies to <tt>inf()</tt> as well, so the discussion here will focus on the differences between\nthe two.\n<pre><b>\n/* Decompress from file source to file dest until stream ends or EOF.\n   inf() returns Z_OK on success, Z_MEM_ERROR if memory could not be\n   allocated for processing, Z_DATA_ERROR if the deflate data is\n   invalid or incomplete, Z_VERSION_ERROR if the version of zlib.h and\n   the version of the library linked do not match, or Z_ERRNO if there\n   is an error reading or writing the files. */\nint inf(FILE *source, FILE *dest)\n{\n</b></pre>\nThe local variables have the same functionality as they do for <tt>def()</tt>.  The\nonly difference is that there is no <tt>flush</tt> variable, since <tt>inflate()</tt>\ncan tell from the <em>zlib</em> stream itself when the stream is complete.\n<pre><b>\n    int ret;\n    unsigned have;\n    z_stream strm;\n    unsigned char in[CHUNK];\n    unsigned char out[CHUNK];\n</b></pre><!-- -->\nThe initialization of the state is the same, except that there is no compression level,\nof course, and two more elements of the structure are initialized.  <tt>avail_in</tt>\nand <tt>next_in</tt> must be initialized before calling <tt>inflateInit()</tt>.  This\nis because the application has the option to provide the start of the zlib stream in\norder for <tt>inflateInit()</tt> to have access to information about the compression\nmethod to aid in memory allocation.  In the current implementation of <em>zlib</em>\n(up through versions 1.2.x), the method-dependent memory allocations are deferred to the first call of\n<tt>inflate()</tt> anyway.  However those fields must be initialized since later versions\nof <em>zlib</em> that provide more compression methods may take advantage of this interface.\nIn any case, no decompression is performed by <tt>inflateInit()</tt>, so the\n<tt>avail_out</tt> and <tt>next_out</tt> fields do not need to be initialized before calling.\n<p>\nHere <tt>avail_in</tt> is set to zero and <tt>next_in</tt> is set to <tt>Z_NULL</tt> to\nindicate that no input data is being provided.\n<pre><b>\n    /* allocate inflate state */\n    strm.zalloc = Z_NULL;\n    strm.zfree = Z_NULL;\n    strm.opaque = Z_NULL;\n    strm.avail_in = 0;\n    strm.next_in = Z_NULL;\n    ret = inflateInit(&amp;strm);\n    if (ret != Z_OK)\n        return ret;\n</b></pre><!-- -->\nThe outer <tt>do</tt>-loop decompresses input until <tt>inflate()</tt> indicates\nthat it has reached the end of the compressed data and has produced all of the uncompressed\noutput.  This is in contrast to <tt>def()</tt> which processes all of the input file.\nIf end-of-file is reached before the compressed data self-terminates, then the compressed\ndata is incomplete and an error is returned.\n<pre><b>\n    /* decompress until deflate stream ends or end of file */\n    do {\n</b></pre>\nWe read input data and set the <tt>strm</tt> structure accordingly.  If we've reached the\nend of the input file, then we leave the outer loop and report an error, since the\ncompressed data is incomplete.  Note that we may read more data than is eventually consumed\nby <tt>inflate()</tt>, if the input file continues past the <em>zlib</em> stream.\nFor applications where <em>zlib</em> streams are embedded in other data, this routine would\nneed to be modified to return the unused data, or at least indicate how much of the input\ndata was not used, so the application would know where to pick up after the <em>zlib</em> stream.\n<pre><b>\n        strm.avail_in = fread(in, 1, CHUNK, source);\n        if (ferror(source)) {\n            (void)inflateEnd(&amp;strm);\n            return Z_ERRNO;\n        }\n        if (strm.avail_in == 0)\n            break;\n        strm.next_in = in;\n</b></pre><!-- -->\nThe inner <tt>do</tt>-loop has the same function it did in <tt>def()</tt>, which is to\nkeep calling <tt>inflate()</tt> until has generated all of the output it can with the\nprovided input.\n<pre><b>\n        /* run inflate() on input until output buffer not full */\n        do {\n</b></pre>\nJust like in <tt>def()</tt>, the same output space is provided for each call of <tt>inflate()</tt>.\n<pre><b>\n            strm.avail_out = CHUNK;\n            strm.next_out = out;\n</b></pre>\nNow we run the decompression engine itself.  There is no need to adjust the flush parameter, since\nthe <em>zlib</em> format is self-terminating. The main difference here is that there are\nreturn values that we need to pay attention to.  <tt>Z_DATA_ERROR</tt>\nindicates that <tt>inflate()</tt> detected an error in the <em>zlib</em> compressed data format,\nwhich means that either the data is not a <em>zlib</em> stream to begin with, or that the data was\ncorrupted somewhere along the way since it was compressed.  The other error to be processed is\n<tt>Z_MEM_ERROR</tt>, which can occur since memory allocation is deferred until <tt>inflate()</tt>\nneeds it, unlike <tt>deflate()</tt>, whose memory is allocated at the start by <tt>deflateInit()</tt>.\n<p>\nAdvanced applications may use\n<tt>deflateSetDictionary()</tt> to prime <tt>deflate()</tt> with a set of likely data to improve the\nfirst 32K or so of compression.  This is noted in the <em>zlib</em> header, so <tt>inflate()</tt>\nrequests that that dictionary be provided before it can start to decompress.  Without the dictionary,\ncorrect decompression is not possible.  For this routine, we have no idea what the dictionary is,\nso the <tt>Z_NEED_DICT</tt> indication is converted to a <tt>Z_DATA_ERROR</tt>.\n<p>\n<tt>inflate()</tt> can also return <tt>Z_STREAM_ERROR</tt>, which should not be possible here,\nbut could be checked for as noted above for <tt>def()</tt>.  <tt>Z_BUF_ERROR</tt> does not need to be\nchecked for here, for the same reasons noted for <tt>def()</tt>.  <tt>Z_STREAM_END</tt> will be\nchecked for later.\n<pre><b>\n            ret = inflate(&amp;strm, Z_NO_FLUSH);\n            assert(ret != Z_STREAM_ERROR);  /* state not clobbered */\n            switch (ret) {\n            case Z_NEED_DICT:\n                ret = Z_DATA_ERROR;     /* and fall through */\n            case Z_DATA_ERROR:\n            case Z_MEM_ERROR:\n                (void)inflateEnd(&amp;strm);\n                return ret;\n            }\n</b></pre>\nThe output of <tt>inflate()</tt> is handled identically to that of <tt>deflate()</tt>.\n<pre><b>\n            have = CHUNK - strm.avail_out;\n            if (fwrite(out, 1, have, dest) != have || ferror(dest)) {\n                (void)inflateEnd(&amp;strm);\n                return Z_ERRNO;\n            }\n</b></pre>\nThe inner <tt>do</tt>-loop ends when <tt>inflate()</tt> has no more output as indicated\nby not filling the output buffer, just as for <tt>deflate()</tt>.  In this case, we cannot\nassert that <tt>strm.avail_in</tt> will be zero, since the deflate stream may end before the file\ndoes.\n<pre><b>\n        } while (strm.avail_out == 0);\n</b></pre><!-- -->\nThe outer <tt>do</tt>-loop ends when <tt>inflate()</tt> reports that it has reached the\nend of the input <em>zlib</em> stream, has completed the decompression and integrity\ncheck, and has provided all of the output.  This is indicated by the <tt>inflate()</tt>\nreturn value <tt>Z_STREAM_END</tt>.  The inner loop is guaranteed to leave <tt>ret</tt>\nequal to <tt>Z_STREAM_END</tt> if the last chunk of the input file read contained the end\nof the <em>zlib</em> stream.  So if the return value is not <tt>Z_STREAM_END</tt>, the\nloop continues to read more input.\n<pre><b>\n        /* done when inflate() says it's done */\n    } while (ret != Z_STREAM_END);\n</b></pre><!-- -->\nAt this point, decompression successfully completed, or we broke out of the loop due to no\nmore data being available from the input file.  If the last <tt>inflate()</tt> return value\nis not <tt>Z_STREAM_END</tt>, then the <em>zlib</em> stream was incomplete and a data error\nis returned.  Otherwise, we return with a happy return value.  Of course, <tt>inflateEnd()</tt>\nis called first to avoid a memory leak.\n<pre><b>\n    /* clean up and return */\n    (void)inflateEnd(&amp;strm);\n    return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR;\n}\n</b></pre><!-- -->\nThat ends the routines that directly use <em>zlib</em>.  The following routines make this\na command-line program by running data through the above routines from <tt>stdin</tt> to\n<tt>stdout</tt>, and handling any errors reported by <tt>def()</tt> or <tt>inf()</tt>.\n<p>\n<tt>zerr()</tt> is used to interpret the possible error codes from <tt>def()</tt>\nand <tt>inf()</tt>, as detailed in their comments above, and print out an error message.\nNote that these are only a subset of the possible return values from <tt>deflate()</tt>\nand <tt>inflate()</tt>.\n<pre><b>\n/* report a zlib or i/o error */\nvoid zerr(int ret)\n{\n    fputs(\"zpipe: \", stderr);\n    switch (ret) {\n    case Z_ERRNO:\n        if (ferror(stdin))\n            fputs(\"error reading stdin\\n\", stderr);\n        if (ferror(stdout))\n            fputs(\"error writing stdout\\n\", stderr);\n        break;\n    case Z_STREAM_ERROR:\n        fputs(\"invalid compression level\\n\", stderr);\n        break;\n    case Z_DATA_ERROR:\n        fputs(\"invalid or incomplete deflate data\\n\", stderr);\n        break;\n    case Z_MEM_ERROR:\n        fputs(\"out of memory\\n\", stderr);\n        break;\n    case Z_VERSION_ERROR:\n        fputs(\"zlib version mismatch!\\n\", stderr);\n    }\n}\n</b></pre><!-- -->\nHere is the <tt>main()</tt> routine used to test <tt>def()</tt> and <tt>inf()</tt>.  The\n<tt>zpipe</tt> command is simply a compression pipe from <tt>stdin</tt> to <tt>stdout</tt>, if\nno arguments are given, or it is a decompression pipe if <tt>zpipe -d</tt> is used.  If any other\narguments are provided, no compression or decompression is performed.  Instead a usage\nmessage is displayed.  Examples are <tt>zpipe < foo.txt > foo.txt.z</tt> to compress, and\n<tt>zpipe -d < foo.txt.z > foo.txt</tt> to decompress.\n<pre><b>\n/* compress or decompress from stdin to stdout */\nint main(int argc, char **argv)\n{\n    int ret;\n\n    /* avoid end-of-line conversions */\n    SET_BINARY_MODE(stdin);\n    SET_BINARY_MODE(stdout);\n\n    /* do compression if no arguments */\n    if (argc == 1) {\n        ret = def(stdin, stdout, Z_DEFAULT_COMPRESSION);\n        if (ret != Z_OK)\n            zerr(ret);\n        return ret;\n    }\n\n    /* do decompression if -d specified */\n    else if (argc == 2 &amp;&amp; strcmp(argv[1], \"-d\") == 0) {\n        ret = inf(stdin, stdout);\n        if (ret != Z_OK)\n            zerr(ret);\n        return ret;\n    }\n\n    /* otherwise, report usage */\n    else {\n        fputs(\"zpipe usage: zpipe [-d] &lt; source &gt; dest\\n\", stderr);\n        return 1;\n    }\n}\n</b></pre>\n<hr>\n<i>Copyright (c) 2004, 2005 by Mark Adler<br>Last modified 11 December 2005</i>\n</body>\n</html>\n"
  },
  {
    "path": "external/zlib/examples/zpipe.c",
    "content": "/* zpipe.c: example of proper use of zlib's inflate() and deflate()\n   Not copyrighted -- provided to the public domain\n   Version 1.4  11 December 2005  Mark Adler */\n\n/* Version history:\n   1.0  30 Oct 2004  First version\n   1.1   8 Nov 2004  Add void casting for unused return values\n                     Use switch statement for inflate() return values\n   1.2   9 Nov 2004  Add assertions to document zlib guarantees\n   1.3   6 Apr 2005  Remove incorrect assertion in inf()\n   1.4  11 Dec 2005  Add hack to avoid MSDOS end-of-line conversions\n                     Avoid some compiler warnings for input and output buffers\n */\n\n#include <stdio.h>\n#include <string.h>\n#include <assert.h>\n#include \"zlib.h\"\n\n#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)\n#  include <fcntl.h>\n#  include <io.h>\n#  define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)\n#else\n#  define SET_BINARY_MODE(file)\n#endif\n\n#define CHUNK 16384\n\n/* Compress from file source to file dest until EOF on source.\n   def() returns Z_OK on success, Z_MEM_ERROR if memory could not be\n   allocated for processing, Z_STREAM_ERROR if an invalid compression\n   level is supplied, Z_VERSION_ERROR if the version of zlib.h and the\n   version of the library linked do not match, or Z_ERRNO if there is\n   an error reading or writing the files. */\nint def(FILE *source, FILE *dest, int level)\n{\n    int ret, flush;\n    unsigned have;\n    z_stream strm;\n    unsigned char in[CHUNK];\n    unsigned char out[CHUNK];\n\n    /* allocate deflate state */\n    strm.zalloc = Z_NULL;\n    strm.zfree = Z_NULL;\n    strm.opaque = Z_NULL;\n    ret = deflateInit(&strm, level);\n    if (ret != Z_OK)\n        return ret;\n\n    /* compress until end of file */\n    do {\n        strm.avail_in = fread(in, 1, CHUNK, source);\n        if (ferror(source)) {\n            (void)deflateEnd(&strm);\n            return Z_ERRNO;\n        }\n        flush = feof(source) ? Z_FINISH : Z_NO_FLUSH;\n        strm.next_in = in;\n\n        /* run deflate() on input until output buffer not full, finish\n           compression if all of source has been read in */\n        do {\n            strm.avail_out = CHUNK;\n            strm.next_out = out;\n            ret = deflate(&strm, flush);    /* no bad return value */\n            assert(ret != Z_STREAM_ERROR);  /* state not clobbered */\n            have = CHUNK - strm.avail_out;\n            if (fwrite(out, 1, have, dest) != have || ferror(dest)) {\n                (void)deflateEnd(&strm);\n                return Z_ERRNO;\n            }\n        } while (strm.avail_out == 0);\n        assert(strm.avail_in == 0);     /* all input will be used */\n\n        /* done when last data in file processed */\n    } while (flush != Z_FINISH);\n    assert(ret == Z_STREAM_END);        /* stream will be complete */\n\n    /* clean up and return */\n    (void)deflateEnd(&strm);\n    return Z_OK;\n}\n\n/* Decompress from file source to file dest until stream ends or EOF.\n   inf() returns Z_OK on success, Z_MEM_ERROR if memory could not be\n   allocated for processing, Z_DATA_ERROR if the deflate data is\n   invalid or incomplete, Z_VERSION_ERROR if the version of zlib.h and\n   the version of the library linked do not match, or Z_ERRNO if there\n   is an error reading or writing the files. */\nint inf(FILE *source, FILE *dest)\n{\n    int ret;\n    unsigned have;\n    z_stream strm;\n    unsigned char in[CHUNK];\n    unsigned char out[CHUNK];\n\n    /* allocate inflate state */\n    strm.zalloc = Z_NULL;\n    strm.zfree = Z_NULL;\n    strm.opaque = Z_NULL;\n    strm.avail_in = 0;\n    strm.next_in = Z_NULL;\n    ret = inflateInit(&strm);\n    if (ret != Z_OK)\n        return ret;\n\n    /* decompress until deflate stream ends or end of file */\n    do {\n        strm.avail_in = fread(in, 1, CHUNK, source);\n        if (ferror(source)) {\n            (void)inflateEnd(&strm);\n            return Z_ERRNO;\n        }\n        if (strm.avail_in == 0)\n            break;\n        strm.next_in = in;\n\n        /* run inflate() on input until output buffer not full */\n        do {\n            strm.avail_out = CHUNK;\n            strm.next_out = out;\n            ret = inflate(&strm, Z_NO_FLUSH);\n            assert(ret != Z_STREAM_ERROR);  /* state not clobbered */\n            switch (ret) {\n            case Z_NEED_DICT:\n                ret = Z_DATA_ERROR;     /* and fall through */\n            case Z_DATA_ERROR:\n            case Z_MEM_ERROR:\n                (void)inflateEnd(&strm);\n                return ret;\n            }\n            have = CHUNK - strm.avail_out;\n            if (fwrite(out, 1, have, dest) != have || ferror(dest)) {\n                (void)inflateEnd(&strm);\n                return Z_ERRNO;\n            }\n        } while (strm.avail_out == 0);\n\n        /* done when inflate() says it's done */\n    } while (ret != Z_STREAM_END);\n\n    /* clean up and return */\n    (void)inflateEnd(&strm);\n    return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR;\n}\n\n/* report a zlib or i/o error */\nvoid zerr(int ret)\n{\n    fputs(\"zpipe: \", stderr);\n    switch (ret) {\n    case Z_ERRNO:\n        if (ferror(stdin))\n            fputs(\"error reading stdin\\n\", stderr);\n        if (ferror(stdout))\n            fputs(\"error writing stdout\\n\", stderr);\n        break;\n    case Z_STREAM_ERROR:\n        fputs(\"invalid compression level\\n\", stderr);\n        break;\n    case Z_DATA_ERROR:\n        fputs(\"invalid or incomplete deflate data\\n\", stderr);\n        break;\n    case Z_MEM_ERROR:\n        fputs(\"out of memory\\n\", stderr);\n        break;\n    case Z_VERSION_ERROR:\n        fputs(\"zlib version mismatch!\\n\", stderr);\n    }\n}\n\n/* compress or decompress from stdin to stdout */\nint main(int argc, char **argv)\n{\n    int ret;\n\n    /* avoid end-of-line conversions */\n    SET_BINARY_MODE(stdin);\n    SET_BINARY_MODE(stdout);\n\n    /* do compression if no arguments */\n    if (argc == 1) {\n        ret = def(stdin, stdout, Z_DEFAULT_COMPRESSION);\n        if (ret != Z_OK)\n            zerr(ret);\n        return ret;\n    }\n\n    /* do decompression if -d specified */\n    else if (argc == 2 && strcmp(argv[1], \"-d\") == 0) {\n        ret = inf(stdin, stdout);\n        if (ret != Z_OK)\n            zerr(ret);\n        return ret;\n    }\n\n    /* otherwise, report usage */\n    else {\n        fputs(\"zpipe usage: zpipe [-d] < source > dest\\n\", stderr);\n        return 1;\n    }\n}\n"
  },
  {
    "path": "external/zlib/examples/zran.c",
    "content": "/* zran.c -- example of zlib/gzip stream indexing and random access\n * Copyright (C) 2005 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n   Version 1.0  29 May 2005  Mark Adler */\n\n/* Illustrate the use of Z_BLOCK, inflatePrime(), and inflateSetDictionary()\n   for random access of a compressed file.  A file containing a zlib or gzip\n   stream is provided on the command line.  The compressed stream is decoded in\n   its entirety, and an index built with access points about every SPAN bytes\n   in the uncompressed output.  The compressed file is left open, and can then\n   be read randomly, having to decompress on the average SPAN/2 uncompressed\n   bytes before getting to the desired block of data.\n\n   An access point can be created at the start of any deflate block, by saving\n   the starting file offset and bit of that block, and the 32K bytes of\n   uncompressed data that precede that block.  Also the uncompressed offset of\n   that block is saved to provide a referece for locating a desired starting\n   point in the uncompressed stream.  build_index() works by decompressing the\n   input zlib or gzip stream a block at a time, and at the end of each block\n   deciding if enough uncompressed data has gone by to justify the creation of\n   a new access point.  If so, that point is saved in a data structure that\n   grows as needed to accommodate the points.\n\n   To use the index, an offset in the uncompressed data is provided, for which\n   the latest accees point at or preceding that offset is located in the index.\n   The input file is positioned to the specified location in the index, and if\n   necessary the first few bits of the compressed data is read from the file.\n   inflate is initialized with those bits and the 32K of uncompressed data, and\n   the decompression then proceeds until the desired offset in the file is\n   reached.  Then the decompression continues to read the desired uncompressed\n   data from the file.\n\n   Another approach would be to generate the index on demand.  In that case,\n   requests for random access reads from the compressed data would try to use\n   the index, but if a read far enough past the end of the index is required,\n   then further index entries would be generated and added.\n\n   There is some fair bit of overhead to starting inflation for the random\n   access, mainly copying the 32K byte dictionary.  So if small pieces of the\n   file are being accessed, it would make sense to implement a cache to hold\n   some lookahead and avoid many calls to extract() for small lengths.\n\n   Another way to build an index would be to use inflateCopy().  That would\n   not be constrained to have access points at block boundaries, but requires\n   more memory per access point, and also cannot be saved to file due to the\n   use of pointers in the state.  The approach here allows for storage of the\n   index in a file.\n */\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include \"zlib.h\"\n\n#define local static\n\n#define SPAN 1048576L       /* desired distance between access points */\n#define WINSIZE 32768U      /* sliding window size */\n#define CHUNK 16384         /* file input buffer size */\n\n/* access point entry */\nstruct point {\n    off_t out;          /* corresponding offset in uncompressed data */\n    off_t in;           /* offset in input file of first full byte */\n    int bits;           /* number of bits (1-7) from byte at in - 1, or 0 */\n    unsigned char window[WINSIZE];  /* preceding 32K of uncompressed data */\n};\n\n/* access point list */\nstruct access {\n    int have;           /* number of list entries filled in */\n    int size;           /* number of list entries allocated */\n    struct point *list; /* allocated list */\n};\n\n/* Deallocate an index built by build_index() */\nlocal void free_index(struct access *index)\n{\n    if (index != NULL) {\n        free(index->list);\n        free(index);\n    }\n}\n\n/* Add an entry to the access point list.  If out of memory, deallocate the\n   existing list and return NULL. */\nlocal struct access *addpoint(struct access *index, int bits,\n    off_t in, off_t out, unsigned left, unsigned char *window)\n{\n    struct point *next;\n\n    /* if list is empty, create it (start with eight points) */\n    if (index == NULL) {\n        index = malloc(sizeof(struct access));\n        if (index == NULL) return NULL;\n        index->list = malloc(sizeof(struct point) << 3);\n        if (index->list == NULL) {\n            free(index);\n            return NULL;\n        }\n        index->size = 8;\n        index->have = 0;\n    }\n\n    /* if list is full, make it bigger */\n    else if (index->have == index->size) {\n        index->size <<= 1;\n        next = realloc(index->list, sizeof(struct point) * index->size);\n        if (next == NULL) {\n            free_index(index);\n            return NULL;\n        }\n        index->list = next;\n    }\n\n    /* fill in entry and increment how many we have */\n    next = index->list + index->have;\n    next->bits = bits;\n    next->in = in;\n    next->out = out;\n    if (left)\n        memcpy(next->window, window + WINSIZE - left, left);\n    if (left < WINSIZE)\n        memcpy(next->window + left, window, WINSIZE - left);\n    index->have++;\n\n    /* return list, possibly reallocated */\n    return index;\n}\n\n/* Make one entire pass through the compressed stream and build an index, with\n   access points about every span bytes of uncompressed output -- span is\n   chosen to balance the speed of random access against the memory requirements\n   of the list, about 32K bytes per access point.  Note that data after the end\n   of the first zlib or gzip stream in the file is ignored.  build_index()\n   returns the number of access points on success (>= 1), Z_MEM_ERROR for out\n   of memory, Z_DATA_ERROR for an error in the input file, or Z_ERRNO for a\n   file read error.  On success, *built points to the resulting index. */\nlocal int build_index(FILE *in, off_t span, struct access **built)\n{\n    int ret;\n    off_t totin, totout;        /* our own total counters to avoid 4GB limit */\n    off_t last;                 /* totout value of last access point */\n    struct access *index;       /* access points being generated */\n    z_stream strm;\n    unsigned char input[CHUNK];\n    unsigned char window[WINSIZE];\n\n    /* initialize inflate */\n    strm.zalloc = Z_NULL;\n    strm.zfree = Z_NULL;\n    strm.opaque = Z_NULL;\n    strm.avail_in = 0;\n    strm.next_in = Z_NULL;\n    ret = inflateInit2(&strm, 47);      /* automatic zlib or gzip decoding */\n    if (ret != Z_OK)\n        return ret;\n\n    /* inflate the input, maintain a sliding window, and build an index -- this\n       also validates the integrity of the compressed data using the check\n       information at the end of the gzip or zlib stream */\n    totin = totout = last = 0;\n    index = NULL;               /* will be allocated by first addpoint() */\n    strm.avail_out = 0;\n    do {\n        /* get some compressed data from input file */\n        strm.avail_in = fread(input, 1, CHUNK, in);\n        if (ferror(in)) {\n            ret = Z_ERRNO;\n            goto build_index_error;\n        }\n        if (strm.avail_in == 0) {\n            ret = Z_DATA_ERROR;\n            goto build_index_error;\n        }\n        strm.next_in = input;\n\n        /* process all of that, or until end of stream */\n        do {\n            /* reset sliding window if necessary */\n            if (strm.avail_out == 0) {\n                strm.avail_out = WINSIZE;\n                strm.next_out = window;\n            }\n\n            /* inflate until out of input, output, or at end of block --\n               update the total input and output counters */\n            totin += strm.avail_in;\n            totout += strm.avail_out;\n            ret = inflate(&strm, Z_BLOCK);      /* return at end of block */\n            totin -= strm.avail_in;\n            totout -= strm.avail_out;\n            if (ret == Z_NEED_DICT)\n                ret = Z_DATA_ERROR;\n            if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR)\n                goto build_index_error;\n            if (ret == Z_STREAM_END)\n                break;\n\n            /* if at end of block, consider adding an index entry (note that if\n               data_type indicates an end-of-block, then all of the\n               uncompressed data from that block has been delivered, and none\n               of the compressed data after that block has been consumed,\n               except for up to seven bits) -- the totout == 0 provides an\n               entry point after the zlib or gzip header, and assures that the\n               index always has at least one access point; we avoid creating an\n               access point after the last block by checking bit 6 of data_type\n             */\n            if ((strm.data_type & 128) && !(strm.data_type & 64) &&\n                (totout == 0 || totout - last > span)) {\n                index = addpoint(index, strm.data_type & 7, totin,\n                                 totout, strm.avail_out, window);\n                if (index == NULL) {\n                    ret = Z_MEM_ERROR;\n                    goto build_index_error;\n                }\n                last = totout;\n            }\n        } while (strm.avail_in != 0);\n    } while (ret != Z_STREAM_END);\n\n    /* clean up and return index (release unused entries in list) */\n    (void)inflateEnd(&strm);\n    index = realloc(index, sizeof(struct point) * index->have);\n    index->size = index->have;\n    *built = index;\n    return index->size;\n\n    /* return error */\n  build_index_error:\n    (void)inflateEnd(&strm);\n    if (index != NULL)\n        free_index(index);\n    return ret;\n}\n\n/* Use the index to read len bytes from offset into buf, return bytes read or\n   negative for error (Z_DATA_ERROR or Z_MEM_ERROR).  If data is requested past\n   the end of the uncompressed data, then extract() will return a value less\n   than len, indicating how much as actually read into buf.  This function\n   should not return a data error unless the file was modified since the index\n   was generated.  extract() may also return Z_ERRNO if there is an error on\n   reading or seeking the input file. */\nlocal int extract(FILE *in, struct access *index, off_t offset,\n                  unsigned char *buf, int len)\n{\n    int ret, skip;\n    z_stream strm;\n    struct point *here;\n    unsigned char input[CHUNK];\n    unsigned char discard[WINSIZE];\n\n    /* proceed only if something reasonable to do */\n    if (len < 0)\n        return 0;\n\n    /* find where in stream to start */\n    here = index->list;\n    ret = index->have;\n    while (--ret && here[1].out <= offset)\n        here++;\n\n    /* initialize file and inflate state to start there */\n    strm.zalloc = Z_NULL;\n    strm.zfree = Z_NULL;\n    strm.opaque = Z_NULL;\n    strm.avail_in = 0;\n    strm.next_in = Z_NULL;\n    ret = inflateInit2(&strm, -15);         /* raw inflate */\n    if (ret != Z_OK)\n        return ret;\n    ret = fseeko(in, here->in - (here->bits ? 1 : 0), SEEK_SET);\n    if (ret == -1)\n        goto extract_ret;\n    if (here->bits) {\n        ret = getc(in);\n        if (ret == -1) {\n            ret = ferror(in) ? Z_ERRNO : Z_DATA_ERROR;\n            goto extract_ret;\n        }\n        (void)inflatePrime(&strm, here->bits, ret >> (8 - here->bits));\n    }\n    (void)inflateSetDictionary(&strm, here->window, WINSIZE);\n\n    /* skip uncompressed bytes until offset reached, then satisfy request */\n    offset -= here->out;\n    strm.avail_in = 0;\n    skip = 1;                               /* while skipping to offset */\n    do {\n        /* define where to put uncompressed data, and how much */\n        if (offset == 0 && skip) {          /* at offset now */\n            strm.avail_out = len;\n            strm.next_out = buf;\n            skip = 0;                       /* only do this once */\n        }\n        if (offset > WINSIZE) {             /* skip WINSIZE bytes */\n            strm.avail_out = WINSIZE;\n            strm.next_out = discard;\n            offset -= WINSIZE;\n        }\n        else if (offset != 0) {             /* last skip */\n            strm.avail_out = (unsigned)offset;\n            strm.next_out = discard;\n            offset = 0;\n        }\n\n        /* uncompress until avail_out filled, or end of stream */\n        do {\n            if (strm.avail_in == 0) {\n                strm.avail_in = fread(input, 1, CHUNK, in);\n                if (ferror(in)) {\n                    ret = Z_ERRNO;\n                    goto extract_ret;\n                }\n                if (strm.avail_in == 0) {\n                    ret = Z_DATA_ERROR;\n                    goto extract_ret;\n                }\n                strm.next_in = input;\n            }\n            ret = inflate(&strm, Z_NO_FLUSH);       /* normal inflate */\n            if (ret == Z_NEED_DICT)\n                ret = Z_DATA_ERROR;\n            if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR)\n                goto extract_ret;\n            if (ret == Z_STREAM_END)\n                break;\n        } while (strm.avail_out != 0);\n\n        /* if reach end of stream, then don't keep trying to get more */\n        if (ret == Z_STREAM_END)\n            break;\n\n        /* do until offset reached and requested data read, or stream ends */\n    } while (skip);\n\n    /* compute number of uncompressed bytes read after offset */\n    ret = skip ? 0 : len - strm.avail_out;\n\n    /* clean up and return bytes read or error */\n  extract_ret:\n    (void)inflateEnd(&strm);\n    return ret;\n}\n\n/* Demonstrate the use of build_index() and extract() by processing the file\n   provided on the command line, and the extracting 16K from about 2/3rds of\n   the way through the uncompressed output, and writing that to stdout. */\nint main(int argc, char **argv)\n{\n    int len;\n    off_t offset;\n    FILE *in;\n    struct access *index = NULL;\n    unsigned char buf[CHUNK];\n\n    /* open input file */\n    if (argc != 2) {\n        fprintf(stderr, \"usage: zran file.gz\\n\");\n        return 1;\n    }\n    in = fopen(argv[1], \"rb\");\n    if (in == NULL) {\n        fprintf(stderr, \"zran: could not open %s for reading\\n\", argv[1]);\n        return 1;\n    }\n\n    /* build index */\n    len = build_index(in, SPAN, &index);\n    if (len < 0) {\n        fclose(in);\n        switch (len) {\n        case Z_MEM_ERROR:\n            fprintf(stderr, \"zran: out of memory\\n\");\n            break;\n        case Z_DATA_ERROR:\n            fprintf(stderr, \"zran: compressed data error in %s\\n\", argv[1]);\n            break;\n        case Z_ERRNO:\n            fprintf(stderr, \"zran: read error on %s\\n\", argv[1]);\n            break;\n        default:\n            fprintf(stderr, \"zran: error %d while building index\\n\", len);\n        }\n        return 1;\n    }\n    fprintf(stderr, \"zran: built index with %d access points\\n\", len);\n\n    /* use index by reading some bytes from an arbitrary offset */\n    offset = (index->list[index->have - 1].out << 1) / 3;\n    len = extract(in, index, offset, buf, CHUNK);\n    if (len < 0)\n        fprintf(stderr, \"zran: extraction failed: %s error\\n\",\n                len == Z_MEM_ERROR ? \"out of memory\" : \"input corrupted\");\n    else {\n        fwrite(buf, 1, len, stdout);\n        fprintf(stderr, \"zran: extracted %d bytes at %llu\\n\", len, offset);\n    }\n\n    /* clean up and exit */\n    free_index(index);\n    fclose(in);\n    return 0;\n}\n"
  },
  {
    "path": "external/zlib/gzclose.c",
    "content": "/* gzclose.c -- zlib gzclose() function\n * Copyright (C) 2004, 2010 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n#include \"gzguts.h\"\n\n/* gzclose() is in a separate file so that it is linked in only if it is used.\n   That way the other gzclose functions can be used instead to avoid linking in\n   unneeded compression or decompression routines. */\nint ZEXPORT gzclose(file)\n    gzFile file;\n{\n#ifndef NO_GZCOMPRESS\n    gz_statep state;\n\n    if (file == NULL)\n        return Z_STREAM_ERROR;\n    state = (gz_statep)file;\n\n    return state->mode == GZ_READ ? gzclose_r(file) : gzclose_w(file);\n#else\n    return gzclose_r(file);\n#endif\n}\n"
  },
  {
    "path": "external/zlib/gzguts.h",
    "content": "/* gzguts.h -- zlib internal header definitions for gz* operations\n * Copyright (C) 2004, 2005, 2010 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n#ifdef _LARGEFILE64_SOURCE\n#  ifndef _LARGEFILE_SOURCE\n#    define _LARGEFILE_SOURCE 1\n#  endif\n#  ifdef _FILE_OFFSET_BITS\n#    undef _FILE_OFFSET_BITS\n#  endif\n#endif\n\n#if ((__GNUC__-0) * 10 + __GNUC_MINOR__-0 >= 33) && !defined(NO_VIZ)\n#  define ZLIB_INTERNAL __attribute__((visibility (\"hidden\")))\n#else\n#  define ZLIB_INTERNAL\n#endif\n\n#include <stdio.h>\n#include \"zlib.h\"\n#ifdef STDC\n#  include <string.h>\n#  include <stdlib.h>\n#  include <limits.h>\n#endif\n#include <fcntl.h>\n\n#ifdef NO_DEFLATE       /* for compatibility with old definition */\n#  define NO_GZCOMPRESS\n#endif\n\n#ifdef _MSC_VER\n#  include <io.h>\n#  define vsnprintf _vsnprintf\n#endif\n\n#ifndef local\n#  define local static\n#endif\n/* compile with -Dlocal if your debugger can't find static symbols */\n\n/* gz* functions always use library allocation functions */\n#ifndef STDC\n  extern voidp  malloc OF((uInt size));\n  extern void   free   OF((voidpf ptr));\n#endif\n\n/* get errno and strerror definition */\n#if defined UNDER_CE\n#  include <windows.h>\n#  define zstrerror() gz_strwinerror((DWORD)GetLastError())\n#else\n#  ifdef STDC\n#    include <errno.h>\n#    define zstrerror() strerror(errno)\n#  else\n#    define zstrerror() \"stdio error (consult errno)\"\n#  endif\n#endif\n\n/* provide prototypes for these when building zlib without LFS */\n#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0\n    ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));\n    ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));\n    ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));\n    ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));\n#endif\n\n/* default i/o buffer size -- double this for output when reading */\n#define GZBUFSIZE 8192\n\n/* gzip modes, also provide a little integrity check on the passed structure */\n#define GZ_NONE 0\n#define GZ_READ 7247\n#define GZ_WRITE 31153\n#define GZ_APPEND 1     /* mode set to GZ_WRITE after the file is opened */\n\n/* values for gz_state how */\n#define LOOK 0      /* look for a gzip header */\n#define COPY 1      /* copy input directly */\n#define GZIP 2      /* decompress a gzip stream */\n\n/* internal gzip file state data structure */\ntypedef struct {\n        /* used for both reading and writing */\n    int mode;               /* see gzip modes above */\n    int fd;                 /* file descriptor */\n    char *path;             /* path or fd for error messages */\n    z_off64_t pos;          /* current position in uncompressed data */\n    unsigned size;          /* buffer size, zero if not allocated yet */\n    unsigned want;          /* requested buffer size, default is GZBUFSIZE */\n    unsigned char *in;      /* input buffer */\n    unsigned char *out;     /* output buffer (double-sized when reading) */\n    unsigned char *next;    /* next output data to deliver or write */\n        /* just for reading */\n    unsigned have;          /* amount of output data unused at next */\n    int eof;                /* true if end of input file reached */\n    z_off64_t start;        /* where the gzip data started, for rewinding */\n    z_off64_t raw;          /* where the raw data started, for seeking */\n    int how;                /* 0: get header, 1: copy, 2: decompress */\n    int direct;             /* true if last read direct, false if gzip */\n        /* just for writing */\n    int level;              /* compression level */\n    int strategy;           /* compression strategy */\n        /* seek request */\n    z_off64_t skip;         /* amount to skip (already rewound if backwards) */\n    int seek;               /* true if seek request pending */\n        /* error information */\n    int err;                /* error code */\n    char *msg;              /* error message */\n        /* zlib inflate or deflate stream */\n    z_stream strm;          /* stream structure in-place (not a pointer) */\n} gz_state;\ntypedef gz_state FAR *gz_statep;\n\n/* shared functions */\nvoid ZLIB_INTERNAL gz_error OF((gz_statep, int, const char *));\n#if defined UNDER_CE\nchar ZLIB_INTERNAL *gz_strwinerror OF((DWORD error));\n#endif\n\n/* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t\n   value -- needed when comparing unsigned to z_off64_t, which is signed\n   (possible z_off64_t types off_t, off64_t, and long are all signed) */\n#ifdef INT_MAX\n#  define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX)\n#else\nunsigned ZLIB_INTERNAL gz_intmax OF((void));\n#  define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax())\n#endif\n"
  },
  {
    "path": "external/zlib/gzlib.c",
    "content": "/* gzlib.c -- zlib functions common to reading and writing gzip files\n * Copyright (C) 2004, 2010 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n#include \"gzguts.h\"\n\n#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0\n#  define LSEEK lseek64\n#else\n#  define LSEEK lseek\n#endif\n\n/* Local functions */\nlocal void gz_reset OF((gz_statep));\nlocal gzFile gz_open OF((const char *, int, const char *));\n\n#if defined UNDER_CE\n\n/* Map the Windows error number in ERROR to a locale-dependent error message\n   string and return a pointer to it.  Typically, the values for ERROR come\n   from GetLastError.\n\n   The string pointed to shall not be modified by the application, but may be\n   overwritten by a subsequent call to gz_strwinerror\n\n   The gz_strwinerror function does not change the current setting of\n   GetLastError. */\nchar ZLIB_INTERNAL *gz_strwinerror (error)\n     DWORD error;\n{\n    static char buf[1024];\n\n    wchar_t *msgbuf;\n    DWORD lasterr = GetLastError();\n    DWORD chars = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM\n        | FORMAT_MESSAGE_ALLOCATE_BUFFER,\n        NULL,\n        error,\n        0, /* Default language */\n        (LPVOID)&msgbuf,\n        0,\n        NULL);\n    if (chars != 0) {\n        /* If there is an \\r\\n appended, zap it.  */\n        if (chars >= 2\n            && msgbuf[chars - 2] == '\\r' && msgbuf[chars - 1] == '\\n') {\n            chars -= 2;\n            msgbuf[chars] = 0;\n        }\n\n        if (chars > sizeof (buf) - 1) {\n            chars = sizeof (buf) - 1;\n            msgbuf[chars] = 0;\n        }\n\n        wcstombs(buf, msgbuf, chars + 1);\n        LocalFree(msgbuf);\n    }\n    else {\n        sprintf(buf, \"unknown win32 error (%ld)\", error);\n    }\n\n    SetLastError(lasterr);\n    return buf;\n}\n\n#endif /* UNDER_CE */\n\n/* Reset gzip file state */\nlocal void gz_reset(state)\n    gz_statep state;\n{\n    if (state->mode == GZ_READ) {   /* for reading ... */\n        state->have = 0;            /* no output data available */\n        state->eof = 0;             /* not at end of file */\n        state->how = LOOK;          /* look for gzip header */\n        state->direct = 1;          /* default for empty file */\n    }\n    state->seek = 0;                /* no seek request pending */\n    gz_error(state, Z_OK, NULL);    /* clear error */\n    state->pos = 0;                 /* no uncompressed data yet */\n    state->strm.avail_in = 0;       /* no input data yet */\n}\n\n/* Open a gzip file either by name or file descriptor. */\nlocal gzFile gz_open(path, fd, mode)\n    const char *path;\n    int fd;\n    const char *mode;\n{\n    gz_statep state;\n\n    /* allocate gzFile structure to return */\n    state = malloc(sizeof(gz_state));\n    if (state == NULL)\n        return NULL;\n    state->size = 0;            /* no buffers allocated yet */\n    state->want = GZBUFSIZE;    /* requested buffer size */\n    state->msg = NULL;          /* no error message yet */\n\n    /* interpret mode */\n    state->mode = GZ_NONE;\n    state->level = Z_DEFAULT_COMPRESSION;\n    state->strategy = Z_DEFAULT_STRATEGY;\n    while (*mode) {\n        if (*mode >= '0' && *mode <= '9')\n            state->level = *mode - '0';\n        else\n            switch (*mode) {\n            case 'r':\n                state->mode = GZ_READ;\n                break;\n#ifndef NO_GZCOMPRESS\n            case 'w':\n                state->mode = GZ_WRITE;\n                break;\n            case 'a':\n                state->mode = GZ_APPEND;\n                break;\n#endif\n            case '+':       /* can't read and write at the same time */\n                free(state);\n                return NULL;\n            case 'b':       /* ignore -- will request binary anyway */\n                break;\n            case 'f':\n                state->strategy = Z_FILTERED;\n                break;\n            case 'h':\n                state->strategy = Z_HUFFMAN_ONLY;\n                break;\n            case 'R':\n                state->strategy = Z_RLE;\n                break;\n            case 'F':\n                state->strategy = Z_FIXED;\n            default:        /* could consider as an error, but just ignore */\n                ;\n            }\n        mode++;\n    }\n\n    /* must provide an \"r\", \"w\", or \"a\" */\n    if (state->mode == GZ_NONE) {\n        free(state);\n        return NULL;\n    }\n\n    /* save the path name for error messages */\n    state->path = malloc(strlen(path) + 1);\n    if (state->path == NULL) {\n        free(state);\n        return NULL;\n    }\n    strcpy(state->path, path);\n\n    /* open the file with the appropriate mode (or just use fd) */\n    state->fd = fd != -1 ? fd :\n        open(path,\n#ifdef O_LARGEFILE\n            O_LARGEFILE |\n#endif\n#ifdef O_BINARY\n            O_BINARY |\n#endif\n            (state->mode == GZ_READ ?\n                O_RDONLY :\n                (O_WRONLY | O_CREAT | (\n                    state->mode == GZ_WRITE ?\n                        O_TRUNC :\n                        O_APPEND))),\n            0666);\n    if (state->fd == -1) {\n        free(state->path);\n        free(state);\n        return NULL;\n    }\n    if (state->mode == GZ_APPEND)\n        state->mode = GZ_WRITE;         /* simplify later checks */\n\n    /* save the current position for rewinding (only if reading) */\n    if (state->mode == GZ_READ) {\n        state->start = LSEEK(state->fd, 0, SEEK_CUR);\n        if (state->start == -1) state->start = 0;\n    }\n\n    /* initialize stream */\n    gz_reset(state);\n\n    /* return stream */\n    return (gzFile)state;\n}\n\n/* -- see zlib.h -- */\ngzFile ZEXPORT gzopen(path, mode)\n    const char *path;\n    const char *mode;\n{\n    return gz_open(path, -1, mode);\n}\n\n/* -- see zlib.h -- */\ngzFile ZEXPORT gzopen64(path, mode)\n    const char *path;\n    const char *mode;\n{\n    return gz_open(path, -1, mode);\n}\n\n/* -- see zlib.h -- */\ngzFile ZEXPORT gzdopen(fd, mode)\n    int fd;\n    const char *mode;\n{\n    char *path;         /* identifier for error messages */\n    gzFile gz;\n\n    if (fd == -1 || (path = malloc(7 + 3 * sizeof(int))) == NULL)\n        return NULL;\n    sprintf(path, \"<fd:%d>\", fd);   /* for debugging */\n    gz = gz_open(path, fd, mode);\n    free(path);\n    return gz;\n}\n\n/* -- see zlib.h -- */\nint ZEXPORT gzbuffer(file, size)\n    gzFile file;\n    unsigned size;\n{\n    gz_statep state;\n\n    /* get internal structure and check integrity */\n    if (file == NULL)\n        return -1;\n    state = (gz_statep)file;\n    if (state->mode != GZ_READ && state->mode != GZ_WRITE)\n        return -1;\n\n    /* make sure we haven't already allocated memory */\n    if (state->size != 0)\n        return -1;\n\n    /* check and set requested size */\n    if (size == 0)\n        return -1;\n    state->want = size;\n    return 0;\n}\n\n/* -- see zlib.h -- */\nint ZEXPORT gzrewind(file)\n    gzFile file;\n{\n    gz_statep state;\n\n    /* get internal structure */\n    if (file == NULL)\n        return -1;\n    state = (gz_statep)file;\n\n    /* check that we're reading and that there's no error */\n    if (state->mode != GZ_READ || state->err != Z_OK)\n        return -1;\n\n    /* back up and start over */\n    if (LSEEK(state->fd, state->start, SEEK_SET) == -1)\n        return -1;\n    gz_reset(state);\n    return 0;\n}\n\n/* -- see zlib.h -- */\nz_off64_t ZEXPORT gzseek64(file, offset, whence)\n    gzFile file;\n    z_off64_t offset;\n    int whence;\n{\n    unsigned n;\n    z_off64_t ret;\n    gz_statep state;\n\n    /* get internal structure and check integrity */\n    if (file == NULL)\n        return -1;\n    state = (gz_statep)file;\n    if (state->mode != GZ_READ && state->mode != GZ_WRITE)\n        return -1;\n\n    /* check that there's no error */\n    if (state->err != Z_OK)\n        return -1;\n\n    /* can only seek from start or relative to current position */\n    if (whence != SEEK_SET && whence != SEEK_CUR)\n        return -1;\n\n    /* normalize offset to a SEEK_CUR specification */\n    if (whence == SEEK_SET)\n        offset -= state->pos;\n    else if (state->seek)\n        offset += state->skip;\n    state->seek = 0;\n\n    /* if within raw area while reading, just go there */\n    if (state->mode == GZ_READ && state->how == COPY &&\n        state->pos + offset >= state->raw) {\n        ret = LSEEK(state->fd, offset - state->have, SEEK_CUR);\n        if (ret == -1)\n            return -1;\n        state->have = 0;\n        state->eof = 0;\n        state->seek = 0;\n        gz_error(state, Z_OK, NULL);\n        state->strm.avail_in = 0;\n        state->pos += offset;\n        return state->pos;\n    }\n\n    /* calculate skip amount, rewinding if needed for back seek when reading */\n    if (offset < 0) {\n        if (state->mode != GZ_READ)         /* writing -- can't go backwards */\n            return -1;\n        offset += state->pos;\n        if (offset < 0)                     /* before start of file! */\n            return -1;\n        if (gzrewind(file) == -1)           /* rewind, then skip to offset */\n            return -1;\n    }\n\n    /* if reading, skip what's in output buffer (one less gzgetc() check) */\n    if (state->mode == GZ_READ) {\n        n = GT_OFF(state->have) || (z_off64_t)state->have > offset ?\n            (unsigned)offset : state->have;\n        state->have -= n;\n        state->next += n;\n        state->pos += n;\n        offset -= n;\n    }\n\n    /* request skip (if not zero) */\n    if (offset) {\n        state->seek = 1;\n        state->skip = offset;\n    }\n    return state->pos + offset;\n}\n\n/* -- see zlib.h -- */\nz_off_t ZEXPORT gzseek(file, offset, whence)\n    gzFile file;\n    z_off_t offset;\n    int whence;\n{\n    z_off64_t ret;\n\n    ret = gzseek64(file, (z_off64_t)offset, whence);\n    return ret == (z_off_t)ret ? (z_off_t)ret : -1;\n}\n\n/* -- see zlib.h -- */\nz_off64_t ZEXPORT gztell64(file)\n    gzFile file;\n{\n    gz_statep state;\n\n    /* get internal structure and check integrity */\n    if (file == NULL)\n        return -1;\n    state = (gz_statep)file;\n    if (state->mode != GZ_READ && state->mode != GZ_WRITE)\n        return -1;\n\n    /* return position */\n    return state->pos + (state->seek ? state->skip : 0);\n}\n\n/* -- see zlib.h -- */\nz_off_t ZEXPORT gztell(file)\n    gzFile file;\n{\n    z_off64_t ret;\n\n    ret = gztell64(file);\n    return ret == (z_off_t)ret ? (z_off_t)ret : -1;\n}\n\n/* -- see zlib.h -- */\nz_off64_t ZEXPORT gzoffset64(file)\n    gzFile file;\n{\n    z_off64_t offset;\n    gz_statep state;\n\n    /* get internal structure and check integrity */\n    if (file == NULL)\n        return -1;\n    state = (gz_statep)file;\n    if (state->mode != GZ_READ && state->mode != GZ_WRITE)\n        return -1;\n\n    /* compute and return effective offset in file */\n    offset = LSEEK(state->fd, 0, SEEK_CUR);\n    if (offset == -1)\n        return -1;\n    if (state->mode == GZ_READ)             /* reading */\n        offset -= state->strm.avail_in;     /* don't count buffered input */\n    return offset;\n}\n\n/* -- see zlib.h -- */\nz_off_t ZEXPORT gzoffset(file)\n    gzFile file;\n{\n    z_off64_t ret;\n\n    ret = gzoffset64(file);\n    return ret == (z_off_t)ret ? (z_off_t)ret : -1;\n}\n\n/* -- see zlib.h -- */\nint ZEXPORT gzeof(file)\n    gzFile file;\n{\n    gz_statep state;\n\n    /* get internal structure and check integrity */\n    if (file == NULL)\n        return 0;\n    state = (gz_statep)file;\n    if (state->mode != GZ_READ && state->mode != GZ_WRITE)\n        return 0;\n\n    /* return end-of-file state */\n    return state->mode == GZ_READ ?\n        (state->eof && state->strm.avail_in == 0 && state->have == 0) : 0;\n}\n\n/* -- see zlib.h -- */\nconst char * ZEXPORT gzerror(file, errnum)\n    gzFile file;\n    int *errnum;\n{\n    gz_statep state;\n\n    /* get internal structure and check integrity */\n    if (file == NULL)\n        return NULL;\n    state = (gz_statep)file;\n    if (state->mode != GZ_READ && state->mode != GZ_WRITE)\n        return NULL;\n\n    /* return error information */\n    if (errnum != NULL)\n        *errnum = state->err;\n    return state->msg == NULL ? \"\" : state->msg;\n}\n\n/* -- see zlib.h -- */\nvoid ZEXPORT gzclearerr(file)\n    gzFile file;\n{\n    gz_statep state;\n\n    /* get internal structure and check integrity */\n    if (file == NULL)\n        return;\n    state = (gz_statep)file;\n    if (state->mode != GZ_READ && state->mode != GZ_WRITE)\n        return;\n\n    /* clear error and end-of-file */\n    if (state->mode == GZ_READ)\n        state->eof = 0;\n    gz_error(state, Z_OK, NULL);\n}\n\n/* Create an error message in allocated memory and set state->err and\n   state->msg accordingly.  Free any previous error message already there.  Do\n   not try to free or allocate space if the error is Z_MEM_ERROR (out of\n   memory).  Simply save the error message as a static string.  If there is an\n   allocation failure constructing the error message, then convert the error to\n   out of memory. */\nvoid ZLIB_INTERNAL gz_error(state, err, msg)\n    gz_statep state;\n    int err;\n    const char *msg;\n{\n    /* free previously allocated message and clear */\n    if (state->msg != NULL) {\n        if (state->err != Z_MEM_ERROR)\n            free(state->msg);\n        state->msg = NULL;\n    }\n\n    /* set error code, and if no message, then done */\n    state->err = err;\n    if (msg == NULL)\n        return;\n\n    /* for an out of memory error, save as static string */\n    if (err == Z_MEM_ERROR) {\n        state->msg = (char *)msg;\n        return;\n    }\n\n    /* construct error message with path */\n    if ((state->msg = malloc(strlen(state->path) + strlen(msg) + 3)) == NULL) {\n        state->err = Z_MEM_ERROR;\n        state->msg = (char *)\"out of memory\";\n        return;\n    }\n    strcpy(state->msg, state->path);\n    strcat(state->msg, \": \");\n    strcat(state->msg, msg);\n    return;\n}\n\n#ifndef INT_MAX\n/* portably return maximum value for an int (when limits.h presumed not\n   available) -- we need to do this to cover cases where 2's complement not\n   used, since C standard permits 1's complement and sign-bit representations,\n   otherwise we could just use ((unsigned)-1) >> 1 */\nunsigned ZLIB_INTERNAL gz_intmax()\n{\n    unsigned p, q;\n\n    p = 1;\n    do {\n        q = p;\n        p <<= 1;\n        p++;\n    } while (p > q);\n    return q >> 1;\n}\n#endif\n"
  },
  {
    "path": "external/zlib/gzread.c",
    "content": "/* gzread.c -- zlib functions for reading gzip files\n * Copyright (C) 2004, 2005, 2010 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n#include \"gzguts.h\"\n\n/* Local functions */\nlocal int gz_load OF((gz_statep, unsigned char *, unsigned, unsigned *));\nlocal int gz_avail OF((gz_statep));\nlocal int gz_next4 OF((gz_statep, unsigned long *));\nlocal int gz_head OF((gz_statep));\nlocal int gz_decomp OF((gz_statep));\nlocal int gz_make OF((gz_statep));\nlocal int gz_skip OF((gz_statep, z_off64_t));\n\n/* Use read() to load a buffer -- return -1 on error, otherwise 0.  Read from\n   state->fd, and update state->eof, state->err, and state->msg as appropriate.\n   This function needs to loop on read(), since read() is not guaranteed to\n   read the number of bytes requested, depending on the type of descriptor. */\nlocal int gz_load(state, buf, len, have)\n    gz_statep state;\n    unsigned char *buf;\n    unsigned len;\n    unsigned *have;\n{\n    int ret;\n\n    *have = 0;\n    do {\n        ret = read(state->fd, buf + *have, len - *have);\n        if (ret <= 0)\n            break;\n        *have += ret;\n    } while (*have < len);\n    if (ret < 0) {\n        gz_error(state, Z_ERRNO, zstrerror());\n        return -1;\n    }\n    if (ret == 0)\n        state->eof = 1;\n    return 0;\n}\n\n/* Load up input buffer and set eof flag if last data loaded -- return -1 on\n   error, 0 otherwise.  Note that the eof flag is set when the end of the input\n   file is reached, even though there may be unused data in the buffer.  Once\n   that data has been used, no more attempts will be made to read the file.\n   gz_avail() assumes that strm->avail_in == 0. */\nlocal int gz_avail(state)\n    gz_statep state;\n{\n    z_streamp strm = &(state->strm);\n\n    if (state->err != Z_OK)\n        return -1;\n    if (state->eof == 0) {\n        if (gz_load(state, state->in, state->size,\n                (unsigned *)&(strm->avail_in)) == -1)\n            return -1;\n        strm->next_in = state->in;\n    }\n    return 0;\n}\n\n/* Get next byte from input, or -1 if end or error. */\n#define NEXT() ((strm->avail_in == 0 && gz_avail(state) == -1) ? -1 : \\\n                (strm->avail_in == 0 ? -1 : \\\n                 (strm->avail_in--, *(strm->next_in)++)))\n\n/* Get a four-byte little-endian integer and return 0 on success and the value\n   in *ret.  Otherwise -1 is returned and *ret is not modified. */\nlocal int gz_next4(state, ret)\n    gz_statep state;\n    unsigned long *ret;\n{\n    int ch;\n    unsigned long val;\n    z_streamp strm = &(state->strm);\n\n    val = NEXT();\n    val += (unsigned)NEXT() << 8;\n    val += (unsigned long)NEXT() << 16;\n    ch = NEXT();\n    if (ch == -1)\n        return -1;\n    val += (unsigned long)ch << 24;\n    *ret = val;\n    return 0;\n}\n\n/* Look for gzip header, set up for inflate or copy.  state->have must be zero.\n   If this is the first time in, allocate required memory.  state->how will be\n   left unchanged if there is no more input data available, will be set to COPY\n   if there is no gzip header and direct copying will be performed, or it will\n   be set to GZIP for decompression, and the gzip header will be skipped so\n   that the next available input data is the raw deflate stream.  If direct\n   copying, then leftover input data from the input buffer will be copied to\n   the output buffer.  In that case, all further file reads will be directly to\n   either the output buffer or a user buffer.  If decompressing, the inflate\n   state and the check value will be initialized.  gz_head() will return 0 on\n   success or -1 on failure.  Failures may include read errors or gzip header\n   errors.  */\nlocal int gz_head(state)\n    gz_statep state;\n{\n    z_streamp strm = &(state->strm);\n    int flags;\n    unsigned len;\n\n    /* allocate read buffers and inflate memory */\n    if (state->size == 0) {\n        /* allocate buffers */\n        state->in = malloc(state->want);\n        state->out = malloc(state->want << 1);\n        if (state->in == NULL || state->out == NULL) {\n            if (state->out != NULL)\n                free(state->out);\n            if (state->in != NULL)\n                free(state->in);\n            gz_error(state, Z_MEM_ERROR, \"out of memory\");\n            return -1;\n        }\n        state->size = state->want;\n\n        /* allocate inflate memory */\n        state->strm.zalloc = Z_NULL;\n        state->strm.zfree = Z_NULL;\n        state->strm.opaque = Z_NULL;\n        state->strm.avail_in = 0;\n        state->strm.next_in = Z_NULL;\n        if (inflateInit2(&(state->strm), -15) != Z_OK) {    /* raw inflate */\n            free(state->out);\n            free(state->in);\n            state->size = 0;\n            gz_error(state, Z_MEM_ERROR, \"out of memory\");\n            return -1;\n        }\n    }\n\n    /* get some data in the input buffer */\n    if (strm->avail_in == 0) {\n        if (gz_avail(state) == -1)\n            return -1;\n        if (strm->avail_in == 0)\n            return 0;\n    }\n\n    /* look for the gzip magic header bytes 31 and 139 */\n    if (strm->next_in[0] == 31) {\n        strm->avail_in--;\n        strm->next_in++;\n        if (strm->avail_in == 0 && gz_avail(state) == -1)\n            return -1;\n        if (strm->avail_in && strm->next_in[0] == 139) {\n            /* we have a gzip header, woo hoo! */\n            strm->avail_in--;\n            strm->next_in++;\n\n            /* skip rest of header */\n            if (NEXT() != 8) {      /* compression method */\n                gz_error(state, Z_DATA_ERROR, \"unknown compression method\");\n                return -1;\n            }\n            flags = NEXT();\n            if (flags & 0xe0) {     /* reserved flag bits */\n                gz_error(state, Z_DATA_ERROR, \"unknown header flags set\");\n                return -1;\n            }\n            NEXT();                 /* modification time */\n            NEXT();\n            NEXT();\n            NEXT();\n            NEXT();                 /* extra flags */\n            NEXT();                 /* operating system */\n            if (flags & 4) {        /* extra field */\n                len = (unsigned)NEXT();\n                len += (unsigned)NEXT() << 8;\n                while (len--)\n                    if (NEXT() < 0)\n                        break;\n            }\n            if (flags & 8)          /* file name */\n                while (NEXT() > 0)\n                    ;\n            if (flags & 16)         /* comment */\n                while (NEXT() > 0)\n                    ;\n            if (flags & 2) {        /* header crc */\n                NEXT();\n                NEXT();\n            }\n            /* an unexpected end of file is not checked for here -- it will be\n               noticed on the first request for uncompressed data */\n\n            /* set up for decompression */\n            inflateReset(strm);\n            strm->adler = crc32(0L, Z_NULL, 0);\n            state->how = GZIP;\n            state->direct = 0;\n            return 0;\n        }\n        else {\n            /* not a gzip file -- save first byte (31) and fall to raw i/o */\n            state->out[0] = 31;\n            state->have = 1;\n        }\n    }\n\n    /* doing raw i/o, save start of raw data for seeking, copy any leftover\n       input to output -- this assumes that the output buffer is larger than\n       the input buffer, which also assures space for gzungetc() */\n    state->raw = state->pos;\n    state->next = state->out;\n    if (strm->avail_in) {\n        memcpy(state->next + state->have, strm->next_in, strm->avail_in);\n        state->have += strm->avail_in;\n        strm->avail_in = 0;\n    }\n    state->how = COPY;\n    state->direct = 1;\n    return 0;\n}\n\n/* Decompress from input to the provided next_out and avail_out in the state.\n   If the end of the compressed data is reached, then verify the gzip trailer\n   check value and length (modulo 2^32).  state->have and state->next are set\n   to point to the just decompressed data, and the crc is updated.  If the\n   trailer is verified, state->how is reset to LOOK to look for the next gzip\n   stream or raw data, once state->have is depleted.  Returns 0 on success, -1\n   on failure.  Failures may include invalid compressed data or a failed gzip\n   trailer verification. */\nlocal int gz_decomp(state)\n    gz_statep state;\n{\n    int ret;\n    unsigned had;\n    unsigned long crc, len;\n    z_streamp strm = &(state->strm);\n\n    /* fill output buffer up to end of deflate stream */\n    had = strm->avail_out;\n    do {\n        /* get more input for inflate() */\n        if (strm->avail_in == 0 && gz_avail(state) == -1)\n            return -1;\n        if (strm->avail_in == 0) {\n            gz_error(state, Z_DATA_ERROR, \"unexpected end of file\");\n            return -1;\n        }\n\n        /* decompress and handle errors */\n        ret = inflate(strm, Z_NO_FLUSH);\n        if (ret == Z_STREAM_ERROR || ret == Z_NEED_DICT) {\n            gz_error(state, Z_STREAM_ERROR,\n                      \"internal error: inflate stream corrupt\");\n            return -1;\n        }\n        if (ret == Z_MEM_ERROR) {\n            gz_error(state, Z_MEM_ERROR, \"out of memory\");\n            return -1;\n        }\n        if (ret == Z_DATA_ERROR) {              /* deflate stream invalid */\n            gz_error(state, Z_DATA_ERROR,\n                      strm->msg == NULL ? \"compressed data error\" : strm->msg);\n            return -1;\n        }\n    } while (strm->avail_out && ret != Z_STREAM_END);\n\n    /* update available output and crc check value */\n    state->have = had - strm->avail_out;\n    state->next = strm->next_out - state->have;\n    strm->adler = crc32(strm->adler, state->next, state->have);\n\n    /* check gzip trailer if at end of deflate stream */\n    if (ret == Z_STREAM_END) {\n        if (gz_next4(state, &crc) == -1 || gz_next4(state, &len) == -1) {\n            gz_error(state, Z_DATA_ERROR, \"unexpected end of file\");\n            return -1;\n        }\n        if (crc != strm->adler) {\n            gz_error(state, Z_DATA_ERROR, \"incorrect data check\");\n            return -1;\n        }\n        if (len != (strm->total_out & 0xffffffffL)) {\n            gz_error(state, Z_DATA_ERROR, \"incorrect length check\");\n            return -1;\n        }\n        state->how = LOOK;      /* ready for next stream, once have is 0 (leave\n                                   state->direct unchanged to remember how) */\n    }\n\n    /* good decompression */\n    return 0;\n}\n\n/* Make data and put in the output buffer.  Assumes that state->have == 0.\n   Data is either copied from the input file or decompressed from the input\n   file depending on state->how.  If state->how is LOOK, then a gzip header is\n   looked for (and skipped if found) to determine wither to copy or decompress.\n   Returns -1 on error, otherwise 0.  gz_make() will leave state->have as COPY\n   or GZIP unless the end of the input file has been reached and all data has\n   been processed.  */\nlocal int gz_make(state)\n    gz_statep state;\n{\n    z_streamp strm = &(state->strm);\n\n    if (state->how == LOOK) {           /* look for gzip header */\n        if (gz_head(state) == -1)\n            return -1;\n        if (state->have)                /* got some data from gz_head() */\n            return 0;\n    }\n    if (state->how == COPY) {           /* straight copy */\n        if (gz_load(state, state->out, state->size << 1, &(state->have)) == -1)\n            return -1;\n        state->next = state->out;\n    }\n    else if (state->how == GZIP) {      /* decompress */\n        strm->avail_out = state->size << 1;\n        strm->next_out = state->out;\n        if (gz_decomp(state) == -1)\n            return -1;\n    }\n    return 0;\n}\n\n/* Skip len uncompressed bytes of output.  Return -1 on error, 0 on success. */\nlocal int gz_skip(state, len)\n    gz_statep state;\n    z_off64_t len;\n{\n    unsigned n;\n\n    /* skip over len bytes or reach end-of-file, whichever comes first */\n    while (len)\n        /* skip over whatever is in output buffer */\n        if (state->have) {\n            n = GT_OFF(state->have) || (z_off64_t)state->have > len ?\n                (unsigned)len : state->have;\n            state->have -= n;\n            state->next += n;\n            state->pos += n;\n            len -= n;\n        }\n\n        /* output buffer empty -- return if we're at the end of the input */\n        else if (state->eof && state->strm.avail_in == 0)\n            break;\n\n        /* need more data to skip -- load up output buffer */\n        else {\n            /* get more output, looking for header if required */\n            if (gz_make(state) == -1)\n                return -1;\n        }\n    return 0;\n}\n\n/* -- see zlib.h -- */\nint ZEXPORT gzread(file, buf, len)\n    gzFile file;\n    voidp buf;\n    unsigned len;\n{\n    unsigned got, n;\n    gz_statep state;\n    z_streamp strm;\n\n    /* get internal structure */\n    if (file == NULL)\n        return -1;\n    state = (gz_statep)file;\n    strm = &(state->strm);\n\n    /* check that we're reading and that there's no error */\n    if (state->mode != GZ_READ || state->err != Z_OK)\n        return -1;\n\n    /* since an int is returned, make sure len fits in one, otherwise return\n       with an error (this avoids the flaw in the interface) */\n    if ((int)len < 0) {\n        gz_error(state, Z_BUF_ERROR, \"requested length does not fit in int\");\n        return -1;\n    }\n\n    /* if len is zero, avoid unnecessary operations */\n    if (len == 0)\n        return 0;\n\n    /* process a skip request */\n    if (state->seek) {\n        state->seek = 0;\n        if (gz_skip(state, state->skip) == -1)\n            return -1;\n    }\n\n    /* get len bytes to buf, or less than len if at the end */\n    got = 0;\n    do {\n        /* first just try copying data from the output buffer */\n        if (state->have) {\n            n = state->have > len ? len : state->have;\n            memcpy(buf, state->next, n);\n            state->next += n;\n            state->have -= n;\n        }\n\n        /* output buffer empty -- return if we're at the end of the input */\n        else if (state->eof && strm->avail_in == 0)\n            break;\n\n        /* need output data -- for small len or new stream load up our output\n           buffer */\n        else if (state->how == LOOK || len < (state->size << 1)) {\n            /* get more output, looking for header if required */\n            if (gz_make(state) == -1)\n                return -1;\n            continue;       /* no progress yet -- go back to memcpy() above */\n            /* the copy above assures that we will leave with space in the\n               output buffer, allowing at least one gzungetc() to succeed */\n        }\n\n        /* large len -- read directly into user buffer */\n        else if (state->how == COPY) {      /* read directly */\n            if (gz_load(state, buf, len, &n) == -1)\n                return -1;\n        }\n\n        /* large len -- decompress directly into user buffer */\n        else {  /* state->how == GZIP */\n            strm->avail_out = len;\n            strm->next_out = buf;\n            if (gz_decomp(state) == -1)\n                return -1;\n            n = state->have;\n            state->have = 0;\n        }\n\n        /* update progress */\n        len -= n;\n        buf = (char *)buf + n;\n        got += n;\n        state->pos += n;\n    } while (len);\n\n    /* return number of bytes read into user buffer (will fit in int) */\n    return (int)got;\n}\n\n/* -- see zlib.h -- */\nint ZEXPORT gzgetc(file)\n    gzFile file;\n{\n    int ret;\n    unsigned char buf[1];\n    gz_statep state;\n\n    /* get internal structure */\n    if (file == NULL)\n        return -1;\n    state = (gz_statep)file;\n\n    /* check that we're reading and that there's no error */\n    if (state->mode != GZ_READ || state->err != Z_OK)\n        return -1;\n\n    /* try output buffer (no need to check for skip request) */\n    if (state->have) {\n        state->have--;\n        state->pos++;\n        return *(state->next)++;\n    }\n\n    /* nothing there -- try gzread() */\n    ret = gzread(file, buf, 1);\n    return ret < 1 ? -1 : buf[0];\n}\n\n/* -- see zlib.h -- */\nint ZEXPORT gzungetc(c, file)\n    int c;\n    gzFile file;\n{\n    gz_statep state;\n\n    /* get internal structure */\n    if (file == NULL)\n        return -1;\n    state = (gz_statep)file;\n\n    /* check that we're reading and that there's no error */\n    if (state->mode != GZ_READ || state->err != Z_OK)\n        return -1;\n\n    /* process a skip request */\n    if (state->seek) {\n        state->seek = 0;\n        if (gz_skip(state, state->skip) == -1)\n            return -1;\n    }\n\n    /* can't push EOF */\n    if (c < 0)\n        return -1;\n\n    /* if output buffer empty, put byte at end (allows more pushing) */\n    if (state->have == 0) {\n        state->have = 1;\n        state->next = state->out + (state->size << 1) - 1;\n        state->next[0] = c;\n        state->pos--;\n        return c;\n    }\n\n    /* if no room, give up (must have already done a gzungetc()) */\n    if (state->have == (state->size << 1)) {\n        gz_error(state, Z_BUF_ERROR, \"out of room to push characters\");\n        return -1;\n    }\n\n    /* slide output data if needed and insert byte before existing data */\n    if (state->next == state->out) {\n        unsigned char *src = state->out + state->have;\n        unsigned char *dest = state->out + (state->size << 1);\n        while (src > state->out)\n            *--dest = *--src;\n        state->next = dest;\n    }\n    state->have++;\n    state->next--;\n    state->next[0] = c;\n    state->pos--;\n    return c;\n}\n\n/* -- see zlib.h -- */\nchar * ZEXPORT gzgets(file, buf, len)\n    gzFile file;\n    char *buf;\n    int len;\n{\n    unsigned left, n;\n    char *str;\n    unsigned char *eol;\n    gz_statep state;\n\n    /* check parameters and get internal structure */\n    if (file == NULL || buf == NULL || len < 1)\n        return NULL;\n    state = (gz_statep)file;\n\n    /* check that we're reading and that there's no error */\n    if (state->mode != GZ_READ || state->err != Z_OK)\n        return NULL;\n\n    /* process a skip request */\n    if (state->seek) {\n        state->seek = 0;\n        if (gz_skip(state, state->skip) == -1)\n            return NULL;\n    }\n\n    /* copy output bytes up to new line or len - 1, whichever comes first --\n       append a terminating zero to the string (we don't check for a zero in\n       the contents, let the user worry about that) */\n    str = buf;\n    left = (unsigned)len - 1;\n    if (left) do {\n        /* assure that something is in the output buffer */\n        if (state->have == 0) {\n            if (gz_make(state) == -1)\n                return NULL;            /* error */\n            if (state->have == 0) {     /* end of file */\n                if (buf == str)         /* got bupkus */\n                    return NULL;\n                break;                  /* got something -- return it */\n            }\n        }\n\n        /* look for end-of-line in current output buffer */\n        n = state->have > left ? left : state->have;\n        eol = memchr(state->next, '\\n', n);\n        if (eol != NULL)\n            n = (unsigned)(eol - state->next) + 1;\n\n        /* copy through end-of-line, or remainder if not found */\n        memcpy(buf, state->next, n);\n        state->have -= n;\n        state->next += n;\n        state->pos += n;\n        left -= n;\n        buf += n;\n    } while (left && eol == NULL);\n\n    /* found end-of-line or out of space -- terminate string and return it */\n    buf[0] = 0;\n    return str;\n}\n\n/* -- see zlib.h -- */\nint ZEXPORT gzdirect(file)\n    gzFile file;\n{\n    gz_statep state;\n\n    /* get internal structure */\n    if (file == NULL)\n        return 0;\n    state = (gz_statep)file;\n\n    /* check that we're reading */\n    if (state->mode != GZ_READ)\n        return 0;\n\n    /* if the state is not known, but we can find out, then do so (this is\n       mainly for right after a gzopen() or gzdopen()) */\n    if (state->how == LOOK && state->have == 0)\n        (void)gz_head(state);\n\n    /* return 1 if reading direct, 0 if decompressing a gzip stream */\n    return state->direct;\n}\n\n/* -- see zlib.h -- */\nint ZEXPORT gzclose_r(file)\n    gzFile file;\n{\n    int ret;\n    gz_statep state;\n\n    /* get internal structure */\n    if (file == NULL)\n        return Z_STREAM_ERROR;\n    state = (gz_statep)file;\n\n    /* check that we're reading */\n    if (state->mode != GZ_READ)\n        return Z_STREAM_ERROR;\n\n    /* free memory and close file */\n    if (state->size) {\n        inflateEnd(&(state->strm));\n        free(state->out);\n        free(state->in);\n    }\n    gz_error(state, Z_OK, NULL);\n    free(state->path);\n    ret = close(state->fd);\n    free(state);\n    return ret ? Z_ERRNO : Z_OK;\n}\n"
  },
  {
    "path": "external/zlib/gzwrite.c",
    "content": "/* gzwrite.c -- zlib functions for writing gzip files\n * Copyright (C) 2004, 2005, 2010 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n#include \"gzguts.h\"\n\n/* Local functions */\nlocal int gz_init OF((gz_statep));\nlocal int gz_comp OF((gz_statep, int));\nlocal int gz_zero OF((gz_statep, z_off64_t));\n\n/* Initialize state for writing a gzip file.  Mark initialization by setting\n   state->size to non-zero.  Return -1 on failure or 0 on success. */\nlocal int gz_init(state)\n    gz_statep state;\n{\n    int ret;\n    z_streamp strm = &(state->strm);\n\n    /* allocate input and output buffers */\n    state->in = malloc(state->want);\n    state->out = malloc(state->want);\n    if (state->in == NULL || state->out == NULL) {\n        if (state->out != NULL)\n            free(state->out);\n        if (state->in != NULL)\n            free(state->in);\n        gz_error(state, Z_MEM_ERROR, \"out of memory\");\n        return -1;\n    }\n\n    /* allocate deflate memory, set up for gzip compression */\n    strm->zalloc = Z_NULL;\n    strm->zfree = Z_NULL;\n    strm->opaque = Z_NULL;\n    ret = deflateInit2(strm, state->level, Z_DEFLATED,\n                       15 + 16, 8, state->strategy);\n    if (ret != Z_OK) {\n        free(state->in);\n        gz_error(state, Z_MEM_ERROR, \"out of memory\");\n        return -1;\n    }\n\n    /* mark state as initialized */\n    state->size = state->want;\n\n    /* initialize write buffer */\n    strm->avail_out = state->size;\n    strm->next_out = state->out;\n    state->next = strm->next_out;\n    return 0;\n}\n\n/* Compress whatever is at avail_in and next_in and write to the output file.\n   Return -1 if there is an error writing to the output file, otherwise 0.\n   flush is assumed to be a valid deflate() flush value.  If flush is Z_FINISH,\n   then the deflate() state is reset to start a new gzip stream. */\nlocal int gz_comp(state, flush)\n    gz_statep state;\n    int flush;\n{\n    int ret, got;\n    unsigned have;\n    z_streamp strm = &(state->strm);\n\n    /* allocate memory if this is the first time through */\n    if (state->size == 0 && gz_init(state) == -1)\n        return -1;\n\n    /* run deflate() on provided input until it produces no more output */\n    ret = Z_OK;\n    do {\n        /* write out current buffer contents if full, or if flushing, but if\n           doing Z_FINISH then don't write until we get to Z_STREAM_END */\n        if (strm->avail_out == 0 || (flush != Z_NO_FLUSH &&\n            (flush != Z_FINISH || ret == Z_STREAM_END))) {\n            have = (unsigned)(strm->next_out - state->next);\n            if (have && ((got = write(state->fd, state->next, have)) < 0 ||\n                         (unsigned)got != have)) {\n                gz_error(state, Z_ERRNO, zstrerror());\n                return -1;\n            }\n            if (strm->avail_out == 0) {\n                strm->avail_out = state->size;\n                strm->next_out = state->out;\n            }\n            state->next = strm->next_out;\n        }\n\n        /* compress */\n        have = strm->avail_out;\n        ret = deflate(strm, flush);\n        if (ret == Z_STREAM_ERROR) {\n            gz_error(state, Z_STREAM_ERROR,\n                      \"internal error: deflate stream corrupt\");\n            return -1;\n        }\n        have -= strm->avail_out;\n    } while (have);\n\n    /* if that completed a deflate stream, allow another to start */\n    if (flush == Z_FINISH)\n        deflateReset(strm);\n\n    /* all done, no errors */\n    return 0;\n}\n\n/* Compress len zeros to output.  Return -1 on error, 0 on success. */\nlocal int gz_zero(state, len)\n    gz_statep state;\n    z_off64_t len;\n{\n    int first;\n    unsigned n;\n    z_streamp strm = &(state->strm);\n\n    /* consume whatever's left in the input buffer */\n    if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)\n        return -1;\n\n    /* compress len zeros (len guaranteed > 0) */\n    first = 1;\n    while (len) {\n        n = GT_OFF(state->size) || (z_off64_t)state->size > len ?\n            (unsigned)len : state->size;\n        if (first) {\n            memset(state->in, 0, n);\n            first = 0;\n        }\n        strm->avail_in = n;\n        strm->next_in = state->in;\n        state->pos += n;\n        if (gz_comp(state, Z_NO_FLUSH) == -1)\n            return -1;\n        len -= n;\n    }\n    return 0;\n}\n\n/* -- see zlib.h -- */\nint ZEXPORT gzwrite(file, buf, len)\n    gzFile file;\n    voidpc buf;\n    unsigned len;\n{\n    unsigned put = len;\n    unsigned n;\n    gz_statep state;\n    z_streamp strm;\n\n    /* get internal structure */\n    if (file == NULL)\n        return 0;\n    state = (gz_statep)file;\n    strm = &(state->strm);\n\n    /* check that we're writing and that there's no error */\n    if (state->mode != GZ_WRITE || state->err != Z_OK)\n        return 0;\n\n    /* since an int is returned, make sure len fits in one, otherwise return\n       with an error (this avoids the flaw in the interface) */\n    if ((int)len < 0) {\n        gz_error(state, Z_BUF_ERROR, \"requested length does not fit in int\");\n        return 0;\n    }\n\n    /* if len is zero, avoid unnecessary operations */\n    if (len == 0)\n        return 0;\n\n    /* allocate memory if this is the first time through */\n    if (state->size == 0 && gz_init(state) == -1)\n        return 0;\n\n    /* check for seek request */\n    if (state->seek) {\n        state->seek = 0;\n        if (gz_zero(state, state->skip) == -1)\n            return 0;\n    }\n\n    /* for small len, copy to input buffer, otherwise compress directly */\n    if (len < state->size) {\n        /* copy to input buffer, compress when full */\n        do {\n            if (strm->avail_in == 0)\n                strm->next_in = state->in;\n            n = state->size - strm->avail_in;\n            if (n > len)\n                n = len;\n            memcpy(strm->next_in + strm->avail_in, buf, n);\n            strm->avail_in += n;\n            state->pos += n;\n            buf = (char *)buf + n;\n            len -= n;\n            if (len && gz_comp(state, Z_NO_FLUSH) == -1)\n                return 0;\n        } while (len);\n    }\n    else {\n        /* consume whatever's left in the input buffer */\n        if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)\n            return 0;\n\n        /* directly compress user buffer to file */\n        strm->avail_in = len;\n        strm->next_in = (voidp)buf;\n        state->pos += len;\n        if (gz_comp(state, Z_NO_FLUSH) == -1)\n            return 0;\n    }\n\n    /* input was all buffered or compressed (put will fit in int) */\n    return (int)put;\n}\n\n/* -- see zlib.h -- */\nint ZEXPORT gzputc(file, c)\n    gzFile file;\n    int c;\n{\n    unsigned char buf[1];\n    gz_statep state;\n    z_streamp strm;\n\n    /* get internal structure */\n    if (file == NULL)\n        return -1;\n    state = (gz_statep)file;\n    strm = &(state->strm);\n\n    /* check that we're writing and that there's no error */\n    if (state->mode != GZ_WRITE || state->err != Z_OK)\n        return -1;\n\n    /* check for seek request */\n    if (state->seek) {\n        state->seek = 0;\n        if (gz_zero(state, state->skip) == -1)\n            return -1;\n    }\n\n    /* try writing to input buffer for speed (state->size == 0 if buffer not\n       initialized) */\n    if (strm->avail_in < state->size) {\n        if (strm->avail_in == 0)\n            strm->next_in = state->in;\n        strm->next_in[strm->avail_in++] = c;\n        state->pos++;\n        return c;\n    }\n\n    /* no room in buffer or not initialized, use gz_write() */\n    buf[0] = c;\n    if (gzwrite(file, buf, 1) != 1)\n        return -1;\n    return c;\n}\n\n/* -- see zlib.h -- */\nint ZEXPORT gzputs(file, str)\n    gzFile file;\n    const char *str;\n{\n    int ret;\n    unsigned len;\n\n    /* write string */\n    len = (unsigned)strlen(str);\n    ret = gzwrite(file, str, len);\n    return ret == 0 && len != 0 ? -1 : ret;\n}\n\n#ifdef STDC\n#include <stdarg.h>\n\n/* -- see zlib.h -- */\nint ZEXPORTVA gzprintf (gzFile file, const char *format, ...)\n{\n    int size, len;\n    gz_statep state;\n    z_streamp strm;\n    va_list va;\n\n    /* get internal structure */\n    if (file == NULL)\n        return -1;\n    state = (gz_statep)file;\n    strm = &(state->strm);\n\n    /* check that we're writing and that there's no error */\n    if (state->mode != GZ_WRITE || state->err != Z_OK)\n        return 0;\n\n    /* make sure we have some buffer space */\n    if (state->size == 0 && gz_init(state) == -1)\n        return 0;\n\n    /* check for seek request */\n    if (state->seek) {\n        state->seek = 0;\n        if (gz_zero(state, state->skip) == -1)\n            return 0;\n    }\n\n    /* consume whatever's left in the input buffer */\n    if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)\n        return 0;\n\n    /* do the printf() into the input buffer, put length in len */\n    size = (int)(state->size);\n    state->in[size - 1] = 0;\n    va_start(va, format);\n#ifdef NO_vsnprintf\n#  ifdef HAS_vsprintf_void\n    (void)vsprintf(state->in, format, va);\n    va_end(va);\n    for (len = 0; len < size; len++)\n        if (state->in[len] == 0) break;\n#  else\n    len = vsprintf(state->in, format, va);\n    va_end(va);\n#  endif\n#else\n#  ifdef HAS_vsnprintf_void\n    (void)vsnprintf(state->in, size, format, va);\n    va_end(va);\n    len = strlen(state->in);\n#  else\n    len = vsnprintf((char *)(state->in), size, format, va);\n    va_end(va);\n#  endif\n#endif\n\n    /* check that printf() results fit in buffer */\n    if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)\n        return 0;\n\n    /* update buffer and position, defer compression until needed */\n    strm->avail_in = (unsigned)len;\n    strm->next_in = state->in;\n    state->pos += len;\n    return len;\n}\n\n#else /* !STDC */\n\n/* -- see zlib.h -- */\nint ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,\n                       a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)\n    gzFile file;\n    const char *format;\n    int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,\n        a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;\n{\n    int size, len;\n    gz_statep state;\n    z_streamp strm;\n\n    /* get internal structure */\n    if (file == NULL)\n        return -1;\n    state = (gz_statep)file;\n    strm = &(state->strm);\n\n    /* check that we're writing and that there's no error */\n    if (state->mode != GZ_WRITE || state->err != Z_OK)\n        return 0;\n\n    /* make sure we have some buffer space */\n    if (state->size == 0 && gz_init(state) == -1)\n        return 0;\n\n    /* check for seek request */\n    if (state->seek) {\n        state->seek = 0;\n        if (gz_zero(state, state->skip) == -1)\n            return 0;\n    }\n\n    /* consume whatever's left in the input buffer */\n    if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)\n        return 0;\n\n    /* do the printf() into the input buffer, put length in len */\n    size = (int)(state->size);\n    state->in[size - 1] = 0;\n#ifdef NO_snprintf\n#  ifdef HAS_sprintf_void\n    sprintf(state->in, format, a1, a2, a3, a4, a5, a6, a7, a8,\n            a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);\n    for (len = 0; len < size; len++)\n        if (state->in[len] == 0) break;\n#  else\n    len = sprintf(state->in, format, a1, a2, a3, a4, a5, a6, a7, a8,\n                a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);\n#  endif\n#else\n#  ifdef HAS_snprintf_void\n    snprintf(state->in, size, format, a1, a2, a3, a4, a5, a6, a7, a8,\n             a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);\n    len = strlen(state->in);\n#  else\n    len = snprintf(state->in, size, format, a1, a2, a3, a4, a5, a6, a7, a8,\n                 a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);\n#  endif\n#endif\n\n    /* check that printf() results fit in buffer */\n    if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)\n        return 0;\n\n    /* update buffer and position, defer compression until needed */\n    strm->avail_in = (unsigned)len;\n    strm->next_in = state->in;\n    state->pos += len;\n    return len;\n}\n\n#endif\n\n/* -- see zlib.h -- */\nint ZEXPORT gzflush(file, flush)\n    gzFile file;\n    int flush;\n{\n    gz_statep state;\n\n    /* get internal structure */\n    if (file == NULL)\n        return -1;\n    state = (gz_statep)file;\n\n    /* check that we're writing and that there's no error */\n    if (state->mode != GZ_WRITE || state->err != Z_OK)\n        return Z_STREAM_ERROR;\n\n    /* check flush parameter */\n    if (flush < 0 || flush > Z_FINISH)\n        return Z_STREAM_ERROR;\n\n    /* check for seek request */\n    if (state->seek) {\n        state->seek = 0;\n        if (gz_zero(state, state->skip) == -1)\n            return -1;\n    }\n\n    /* compress remaining data with requested flush */\n    gz_comp(state, flush);\n    return state->err;\n}\n\n/* -- see zlib.h -- */\nint ZEXPORT gzsetparams(file, level, strategy)\n    gzFile file;\n    int level;\n    int strategy;\n{\n    gz_statep state;\n    z_streamp strm;\n\n    /* get internal structure */\n    if (file == NULL)\n        return Z_STREAM_ERROR;\n    state = (gz_statep)file;\n    strm = &(state->strm);\n\n    /* check that we're writing and that there's no error */\n    if (state->mode != GZ_WRITE || state->err != Z_OK)\n        return Z_STREAM_ERROR;\n\n    /* if no change is requested, then do nothing */\n    if (level == state->level && strategy == state->strategy)\n        return Z_OK;\n\n    /* check for seek request */\n    if (state->seek) {\n        state->seek = 0;\n        if (gz_zero(state, state->skip) == -1)\n            return -1;\n    }\n\n    /* change compression parameters for subsequent input */\n    if (state->size) {\n        /* flush previous input with previous parameters before changing */\n        if (strm->avail_in && gz_comp(state, Z_PARTIAL_FLUSH) == -1)\n            return state->err;\n        deflateParams(strm, level, strategy);\n    }\n    state->level = level;\n    state->strategy = strategy;\n    return Z_OK;\n}\n\n/* -- see zlib.h -- */\nint ZEXPORT gzclose_w(file)\n    gzFile file;\n{\n    int ret = 0;\n    gz_statep state;\n\n    /* get internal structure */\n    if (file == NULL)\n        return Z_STREAM_ERROR;\n    state = (gz_statep)file;\n\n    /* check that we're writing */\n    if (state->mode != GZ_WRITE)\n        return Z_STREAM_ERROR;\n\n    /* check for seek request */\n    if (state->seek) {\n        state->seek = 0;\n        ret += gz_zero(state, state->skip);\n    }\n\n    /* flush, free memory, and close file */\n    ret += gz_comp(state, Z_FINISH);\n    (void)deflateEnd(&(state->strm));\n    free(state->out);\n    free(state->in);\n    gz_error(state, Z_OK, NULL);\n    free(state->path);\n    ret += close(state->fd);\n    free(state);\n    return ret ? Z_ERRNO : Z_OK;\n}\n"
  },
  {
    "path": "external/zlib/infback.c",
    "content": "/* infback.c -- inflate using a call-back interface\n * Copyright (C) 1995-2009 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n/*\n   This code is largely copied from inflate.c.  Normally either infback.o or\n   inflate.o would be linked into an application--not both.  The interface\n   with inffast.c is retained so that optimized assembler-coded versions of\n   inflate_fast() can be used with either inflate.c or infback.c.\n */\n\n#include \"zutil.h\"\n#include \"inftrees.h\"\n#include \"inflate.h\"\n#include \"inffast.h\"\n\n/* function prototypes */\nlocal void fixedtables OF((struct inflate_state FAR *state));\n\n/*\n   strm provides memory allocation functions in zalloc and zfree, or\n   Z_NULL to use the library memory allocation functions.\n\n   windowBits is in the range 8..15, and window is a user-supplied\n   window and output buffer that is 2**windowBits bytes.\n */\nint ZEXPORT inflateBackInit_(strm, windowBits, window, version, stream_size)\nz_streamp strm;\nint windowBits;\nunsigned char FAR *window;\nconst char *version;\nint stream_size;\n{\n    struct inflate_state FAR *state;\n\n    if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||\n        stream_size != (int)(sizeof(z_stream)))\n        return Z_VERSION_ERROR;\n    if (strm == Z_NULL || window == Z_NULL ||\n        windowBits < 8 || windowBits > 15)\n        return Z_STREAM_ERROR;\n    strm->msg = Z_NULL;                 /* in case we return an error */\n    if (strm->zalloc == (alloc_func)0) {\n        strm->zalloc = zcalloc;\n        strm->opaque = (voidpf)0;\n    }\n    if (strm->zfree == (free_func)0) strm->zfree = zcfree;\n    state = (struct inflate_state FAR *)ZALLOC(strm, 1,\n                                               sizeof(struct inflate_state));\n    if (state == Z_NULL) return Z_MEM_ERROR;\n    Tracev((stderr, \"inflate: allocated\\n\"));\n    strm->state = (struct internal_state FAR *)state;\n    state->dmax = 32768U;\n    state->wbits = windowBits;\n    state->wsize = 1U << windowBits;\n    state->window = window;\n    state->wnext = 0;\n    state->whave = 0;\n    return Z_OK;\n}\n\n/*\n   Return state with length and distance decoding tables and index sizes set to\n   fixed code decoding.  Normally this returns fixed tables from inffixed.h.\n   If BUILDFIXED is defined, then instead this routine builds the tables the\n   first time it's called, and returns those tables the first time and\n   thereafter.  This reduces the size of the code by about 2K bytes, in\n   exchange for a little execution time.  However, BUILDFIXED should not be\n   used for threaded applications, since the rewriting of the tables and virgin\n   may not be thread-safe.\n */\nlocal void fixedtables(state)\nstruct inflate_state FAR *state;\n{\n#ifdef BUILDFIXED\n    static int virgin = 1;\n    static code *lenfix, *distfix;\n    static code fixed[544];\n\n    /* build fixed huffman tables if first call (may not be thread safe) */\n    if (virgin) {\n        unsigned sym, bits;\n        static code *next;\n\n        /* literal/length table */\n        sym = 0;\n        while (sym < 144) state->lens[sym++] = 8;\n        while (sym < 256) state->lens[sym++] = 9;\n        while (sym < 280) state->lens[sym++] = 7;\n        while (sym < 288) state->lens[sym++] = 8;\n        next = fixed;\n        lenfix = next;\n        bits = 9;\n        inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);\n\n        /* distance table */\n        sym = 0;\n        while (sym < 32) state->lens[sym++] = 5;\n        distfix = next;\n        bits = 5;\n        inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);\n\n        /* do this just once */\n        virgin = 0;\n    }\n#else /* !BUILDFIXED */\n#   include \"inffixed.h\"\n#endif /* BUILDFIXED */\n    state->lencode = lenfix;\n    state->lenbits = 9;\n    state->distcode = distfix;\n    state->distbits = 5;\n}\n\n/* Macros for inflateBack(): */\n\n/* Load returned state from inflate_fast() */\n#define LOAD() \\\n    do { \\\n        put = strm->next_out; \\\n        left = strm->avail_out; \\\n        next = strm->next_in; \\\n        have = strm->avail_in; \\\n        hold = state->hold; \\\n        bits = state->bits; \\\n    } while (0)\n\n/* Set state from registers for inflate_fast() */\n#define RESTORE() \\\n    do { \\\n        strm->next_out = put; \\\n        strm->avail_out = left; \\\n        strm->next_in = next; \\\n        strm->avail_in = have; \\\n        state->hold = hold; \\\n        state->bits = bits; \\\n    } while (0)\n\n/* Clear the input bit accumulator */\n#define INITBITS() \\\n    do { \\\n        hold = 0; \\\n        bits = 0; \\\n    } while (0)\n\n/* Assure that some input is available.  If input is requested, but denied,\n   then return a Z_BUF_ERROR from inflateBack(). */\n#define PULL() \\\n    do { \\\n        if (have == 0) { \\\n            have = in(in_desc, &next); \\\n            if (have == 0) { \\\n                next = Z_NULL; \\\n                ret = Z_BUF_ERROR; \\\n                goto inf_leave; \\\n            } \\\n        } \\\n    } while (0)\n\n/* Get a byte of input into the bit accumulator, or return from inflateBack()\n   with an error if there is no input available. */\n#define PULLBYTE() \\\n    do { \\\n        PULL(); \\\n        have--; \\\n        hold += (unsigned long)(*next++) << bits; \\\n        bits += 8; \\\n    } while (0)\n\n/* Assure that there are at least n bits in the bit accumulator.  If there is\n   not enough available input to do that, then return from inflateBack() with\n   an error. */\n#define NEEDBITS(n) \\\n    do { \\\n        while (bits < (unsigned)(n)) \\\n            PULLBYTE(); \\\n    } while (0)\n\n/* Return the low n bits of the bit accumulator (n < 16) */\n#define BITS(n) \\\n    ((unsigned)hold & ((1U << (n)) - 1))\n\n/* Remove n bits from the bit accumulator */\n#define DROPBITS(n) \\\n    do { \\\n        hold >>= (n); \\\n        bits -= (unsigned)(n); \\\n    } while (0)\n\n/* Remove zero to seven bits as needed to go to a byte boundary */\n#define BYTEBITS() \\\n    do { \\\n        hold >>= bits & 7; \\\n        bits -= bits & 7; \\\n    } while (0)\n\n/* Assure that some output space is available, by writing out the window\n   if it's full.  If the write fails, return from inflateBack() with a\n   Z_BUF_ERROR. */\n#define ROOM() \\\n    do { \\\n        if (left == 0) { \\\n            put = state->window; \\\n            left = state->wsize; \\\n            state->whave = left; \\\n            if (out(out_desc, put, left)) { \\\n                ret = Z_BUF_ERROR; \\\n                goto inf_leave; \\\n            } \\\n        } \\\n    } while (0)\n\n/*\n   strm provides the memory allocation functions and window buffer on input,\n   and provides information on the unused input on return.  For Z_DATA_ERROR\n   returns, strm will also provide an error message.\n\n   in() and out() are the call-back input and output functions.  When\n   inflateBack() needs more input, it calls in().  When inflateBack() has\n   filled the window with output, or when it completes with data in the\n   window, it calls out() to write out the data.  The application must not\n   change the provided input until in() is called again or inflateBack()\n   returns.  The application must not change the window/output buffer until\n   inflateBack() returns.\n\n   in() and out() are called with a descriptor parameter provided in the\n   inflateBack() call.  This parameter can be a structure that provides the\n   information required to do the read or write, as well as accumulated\n   information on the input and output such as totals and check values.\n\n   in() should return zero on failure.  out() should return non-zero on\n   failure.  If either in() or out() fails, than inflateBack() returns a\n   Z_BUF_ERROR.  strm->next_in can be checked for Z_NULL to see whether it\n   was in() or out() that caused in the error.  Otherwise,  inflateBack()\n   returns Z_STREAM_END on success, Z_DATA_ERROR for an deflate format\n   error, or Z_MEM_ERROR if it could not allocate memory for the state.\n   inflateBack() can also return Z_STREAM_ERROR if the input parameters\n   are not correct, i.e. strm is Z_NULL or the state was not initialized.\n */\nint ZEXPORT inflateBack(strm, in, in_desc, out, out_desc)\nz_streamp strm;\nin_func in;\nvoid FAR *in_desc;\nout_func out;\nvoid FAR *out_desc;\n{\n    struct inflate_state FAR *state;\n    unsigned char FAR *next;    /* next input */\n    unsigned char FAR *put;     /* next output */\n    unsigned have, left;        /* available input and output */\n    unsigned long hold;         /* bit buffer */\n    unsigned bits;              /* bits in bit buffer */\n    unsigned copy;              /* number of stored or match bytes to copy */\n    unsigned char FAR *from;    /* where to copy match bytes from */\n    code here;                  /* current decoding table entry */\n    code last;                  /* parent table entry */\n    unsigned len;               /* length to copy for repeats, bits to drop */\n    int ret;                    /* return code */\n    static const unsigned short order[19] = /* permutation of code lengths */\n        {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};\n\n    /* Check that the strm exists and that the state was initialized */\n    if (strm == Z_NULL || strm->state == Z_NULL)\n        return Z_STREAM_ERROR;\n    state = (struct inflate_state FAR *)strm->state;\n\n    /* Reset the state */\n    strm->msg = Z_NULL;\n    state->mode = TYPE;\n    state->last = 0;\n    state->whave = 0;\n    next = strm->next_in;\n    have = next != Z_NULL ? strm->avail_in : 0;\n    hold = 0;\n    bits = 0;\n    put = state->window;\n    left = state->wsize;\n\n    /* Inflate until end of block marked as last */\n    for (;;)\n        switch (state->mode) {\n        case TYPE:\n            /* determine and dispatch block type */\n            if (state->last) {\n                BYTEBITS();\n                state->mode = DONE;\n                break;\n            }\n            NEEDBITS(3);\n            state->last = BITS(1);\n            DROPBITS(1);\n            switch (BITS(2)) {\n            case 0:                             /* stored block */\n                Tracev((stderr, \"inflate:     stored block%s\\n\",\n                        state->last ? \" (last)\" : \"\"));\n                state->mode = STORED;\n                break;\n            case 1:                             /* fixed block */\n                fixedtables(state);\n                Tracev((stderr, \"inflate:     fixed codes block%s\\n\",\n                        state->last ? \" (last)\" : \"\"));\n                state->mode = LEN;              /* decode codes */\n                break;\n            case 2:                             /* dynamic block */\n                Tracev((stderr, \"inflate:     dynamic codes block%s\\n\",\n                        state->last ? \" (last)\" : \"\"));\n                state->mode = TABLE;\n                break;\n            case 3:\n                strm->msg = (char *)\"invalid block type\";\n                state->mode = BAD;\n            }\n            DROPBITS(2);\n            break;\n\n        case STORED:\n            /* get and verify stored block length */\n            BYTEBITS();                         /* go to byte boundary */\n            NEEDBITS(32);\n            if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {\n                strm->msg = (char *)\"invalid stored block lengths\";\n                state->mode = BAD;\n                break;\n            }\n            state->length = (unsigned)hold & 0xffff;\n            Tracev((stderr, \"inflate:       stored length %u\\n\",\n                    state->length));\n            INITBITS();\n\n            /* copy stored block from input to output */\n            while (state->length != 0) {\n                copy = state->length;\n                PULL();\n                ROOM();\n                if (copy > have) copy = have;\n                if (copy > left) copy = left;\n                zmemcpy(put, next, copy);\n                have -= copy;\n                next += copy;\n                left -= copy;\n                put += copy;\n                state->length -= copy;\n            }\n            Tracev((stderr, \"inflate:       stored end\\n\"));\n            state->mode = TYPE;\n            break;\n\n        case TABLE:\n            /* get dynamic table entries descriptor */\n            NEEDBITS(14);\n            state->nlen = BITS(5) + 257;\n            DROPBITS(5);\n            state->ndist = BITS(5) + 1;\n            DROPBITS(5);\n            state->ncode = BITS(4) + 4;\n            DROPBITS(4);\n#ifndef PKZIP_BUG_WORKAROUND\n            if (state->nlen > 286 || state->ndist > 30) {\n                strm->msg = (char *)\"too many length or distance symbols\";\n                state->mode = BAD;\n                break;\n            }\n#endif\n            Tracev((stderr, \"inflate:       table sizes ok\\n\"));\n\n            /* get code length code lengths (not a typo) */\n            state->have = 0;\n            while (state->have < state->ncode) {\n                NEEDBITS(3);\n                state->lens[order[state->have++]] = (unsigned short)BITS(3);\n                DROPBITS(3);\n            }\n            while (state->have < 19)\n                state->lens[order[state->have++]] = 0;\n            state->next = state->codes;\n            state->lencode = (code const FAR *)(state->next);\n            state->lenbits = 7;\n            ret = inflate_table(CODES, state->lens, 19, &(state->next),\n                                &(state->lenbits), state->work);\n            if (ret) {\n                strm->msg = (char *)\"invalid code lengths set\";\n                state->mode = BAD;\n                break;\n            }\n            Tracev((stderr, \"inflate:       code lengths ok\\n\"));\n\n            /* get length and distance code code lengths */\n            state->have = 0;\n            while (state->have < state->nlen + state->ndist) {\n                for (;;) {\n                    here = state->lencode[BITS(state->lenbits)];\n                    if ((unsigned)(here.bits) <= bits) break;\n                    PULLBYTE();\n                }\n                if (here.val < 16) {\n                    NEEDBITS(here.bits);\n                    DROPBITS(here.bits);\n                    state->lens[state->have++] = here.val;\n                }\n                else {\n                    if (here.val == 16) {\n                        NEEDBITS(here.bits + 2);\n                        DROPBITS(here.bits);\n                        if (state->have == 0) {\n                            strm->msg = (char *)\"invalid bit length repeat\";\n                            state->mode = BAD;\n                            break;\n                        }\n                        len = (unsigned)(state->lens[state->have - 1]);\n                        copy = 3 + BITS(2);\n                        DROPBITS(2);\n                    }\n                    else if (here.val == 17) {\n                        NEEDBITS(here.bits + 3);\n                        DROPBITS(here.bits);\n                        len = 0;\n                        copy = 3 + BITS(3);\n                        DROPBITS(3);\n                    }\n                    else {\n                        NEEDBITS(here.bits + 7);\n                        DROPBITS(here.bits);\n                        len = 0;\n                        copy = 11 + BITS(7);\n                        DROPBITS(7);\n                    }\n                    if (state->have + copy > state->nlen + state->ndist) {\n                        strm->msg = (char *)\"invalid bit length repeat\";\n                        state->mode = BAD;\n                        break;\n                    }\n                    while (copy--)\n                        state->lens[state->have++] = (unsigned short)len;\n                }\n            }\n\n            /* handle error breaks in while */\n            if (state->mode == BAD) break;\n\n            /* check for end-of-block code (better have one) */\n            if (state->lens[256] == 0) {\n                strm->msg = (char *)\"invalid code -- missing end-of-block\";\n                state->mode = BAD;\n                break;\n            }\n\n            /* build code tables -- note: do not change the lenbits or distbits\n               values here (9 and 6) without reading the comments in inftrees.h\n               concerning the ENOUGH constants, which depend on those values */\n            state->next = state->codes;\n            state->lencode = (code const FAR *)(state->next);\n            state->lenbits = 9;\n            ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),\n                                &(state->lenbits), state->work);\n            if (ret) {\n                strm->msg = (char *)\"invalid literal/lengths set\";\n                state->mode = BAD;\n                break;\n            }\n            state->distcode = (code const FAR *)(state->next);\n            state->distbits = 6;\n            ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,\n                            &(state->next), &(state->distbits), state->work);\n            if (ret) {\n                strm->msg = (char *)\"invalid distances set\";\n                state->mode = BAD;\n                break;\n            }\n            Tracev((stderr, \"inflate:       codes ok\\n\"));\n            state->mode = LEN;\n\n        case LEN:\n            /* use inflate_fast() if we have enough input and output */\n            if (have >= 6 && left >= 258) {\n                RESTORE();\n                if (state->whave < state->wsize)\n                    state->whave = state->wsize - left;\n                inflate_fast(strm, state->wsize);\n                LOAD();\n                break;\n            }\n\n            /* get a literal, length, or end-of-block code */\n            for (;;) {\n                here = state->lencode[BITS(state->lenbits)];\n                if ((unsigned)(here.bits) <= bits) break;\n                PULLBYTE();\n            }\n            if (here.op && (here.op & 0xf0) == 0) {\n                last = here;\n                for (;;) {\n                    here = state->lencode[last.val +\n                            (BITS(last.bits + last.op) >> last.bits)];\n                    if ((unsigned)(last.bits + here.bits) <= bits) break;\n                    PULLBYTE();\n                }\n                DROPBITS(last.bits);\n            }\n            DROPBITS(here.bits);\n            state->length = (unsigned)here.val;\n\n            /* process literal */\n            if (here.op == 0) {\n                Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n                        \"inflate:         literal '%c'\\n\" :\n                        \"inflate:         literal 0x%02x\\n\", here.val));\n                ROOM();\n                *put++ = (unsigned char)(state->length);\n                left--;\n                state->mode = LEN;\n                break;\n            }\n\n            /* process end of block */\n            if (here.op & 32) {\n                Tracevv((stderr, \"inflate:         end of block\\n\"));\n                state->mode = TYPE;\n                break;\n            }\n\n            /* invalid code */\n            if (here.op & 64) {\n                strm->msg = (char *)\"invalid literal/length code\";\n                state->mode = BAD;\n                break;\n            }\n\n            /* length code -- get extra bits, if any */\n            state->extra = (unsigned)(here.op) & 15;\n            if (state->extra != 0) {\n                NEEDBITS(state->extra);\n                state->length += BITS(state->extra);\n                DROPBITS(state->extra);\n            }\n            Tracevv((stderr, \"inflate:         length %u\\n\", state->length));\n\n            /* get distance code */\n            for (;;) {\n                here = state->distcode[BITS(state->distbits)];\n                if ((unsigned)(here.bits) <= bits) break;\n                PULLBYTE();\n            }\n            if ((here.op & 0xf0) == 0) {\n                last = here;\n                for (;;) {\n                    here = state->distcode[last.val +\n                            (BITS(last.bits + last.op) >> last.bits)];\n                    if ((unsigned)(last.bits + here.bits) <= bits) break;\n                    PULLBYTE();\n                }\n                DROPBITS(last.bits);\n            }\n            DROPBITS(here.bits);\n            if (here.op & 64) {\n                strm->msg = (char *)\"invalid distance code\";\n                state->mode = BAD;\n                break;\n            }\n            state->offset = (unsigned)here.val;\n\n            /* get distance extra bits, if any */\n            state->extra = (unsigned)(here.op) & 15;\n            if (state->extra != 0) {\n                NEEDBITS(state->extra);\n                state->offset += BITS(state->extra);\n                DROPBITS(state->extra);\n            }\n            if (state->offset > state->wsize - (state->whave < state->wsize ?\n                                                left : 0)) {\n                strm->msg = (char *)\"invalid distance too far back\";\n                state->mode = BAD;\n                break;\n            }\n            Tracevv((stderr, \"inflate:         distance %u\\n\", state->offset));\n\n            /* copy match from window to output */\n            do {\n                ROOM();\n                copy = state->wsize - state->offset;\n                if (copy < left) {\n                    from = put + copy;\n                    copy = left - copy;\n                }\n                else {\n                    from = put - state->offset;\n                    copy = left;\n                }\n                if (copy > state->length) copy = state->length;\n                state->length -= copy;\n                left -= copy;\n                do {\n                    *put++ = *from++;\n                } while (--copy);\n            } while (state->length != 0);\n            break;\n\n        case DONE:\n            /* inflate stream terminated properly -- write leftover output */\n            ret = Z_STREAM_END;\n            if (left < state->wsize) {\n                if (out(out_desc, state->window, state->wsize - left))\n                    ret = Z_BUF_ERROR;\n            }\n            goto inf_leave;\n\n        case BAD:\n            ret = Z_DATA_ERROR;\n            goto inf_leave;\n\n        default:                /* can't happen, but makes compilers happy */\n            ret = Z_STREAM_ERROR;\n            goto inf_leave;\n        }\n\n    /* Return unused input */\n  inf_leave:\n    strm->next_in = next;\n    strm->avail_in = have;\n    return ret;\n}\n\nint ZEXPORT inflateBackEnd(strm)\nz_streamp strm;\n{\n    if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)\n        return Z_STREAM_ERROR;\n    ZFREE(strm, strm->state);\n    strm->state = Z_NULL;\n    Tracev((stderr, \"inflate: end\\n\"));\n    return Z_OK;\n}\n"
  },
  {
    "path": "external/zlib/inffast.c",
    "content": "/* inffast.c -- fast decoding\n * Copyright (C) 1995-2008, 2010 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n#include \"zutil.h\"\n#include \"inftrees.h\"\n#include \"inflate.h\"\n#include \"inffast.h\"\n\n#ifndef ASMINF\n\n/* Allow machine dependent optimization for post-increment or pre-increment.\n   Based on testing to date,\n   Pre-increment preferred for:\n   - PowerPC G3 (Adler)\n   - MIPS R5000 (Randers-Pehrson)\n   Post-increment preferred for:\n   - none\n   No measurable difference:\n   - Pentium III (Anderson)\n   - M68060 (Nikl)\n */\n#ifdef POSTINC\n#  define OFF 0\n#  define PUP(a) *(a)++\n#else\n#  define OFF 1\n#  define PUP(a) *++(a)\n#endif\n\n/*\n   Decode literal, length, and distance codes and write out the resulting\n   literal and match bytes until either not enough input or output is\n   available, an end-of-block is encountered, or a data error is encountered.\n   When large enough input and output buffers are supplied to inflate(), for\n   example, a 16K input buffer and a 64K output buffer, more than 95% of the\n   inflate execution time is spent in this routine.\n\n   Entry assumptions:\n\n        state->mode == LEN\n        strm->avail_in >= 6\n        strm->avail_out >= 258\n        start >= strm->avail_out\n        state->bits < 8\n\n   On return, state->mode is one of:\n\n        LEN -- ran out of enough output space or enough available input\n        TYPE -- reached end of block code, inflate() to interpret next block\n        BAD -- error in block data\n\n   Notes:\n\n    - The maximum input bits used by a length/distance pair is 15 bits for the\n      length code, 5 bits for the length extra, 15 bits for the distance code,\n      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.\n      Therefore if strm->avail_in >= 6, then there is enough input to avoid\n      checking for available input while decoding.\n\n    - The maximum bytes that a single length/distance pair can output is 258\n      bytes, which is the maximum length that can be coded.  inflate_fast()\n      requires strm->avail_out >= 258 for each loop to avoid checking for\n      output space.\n */\nvoid ZLIB_INTERNAL inflate_fast(strm, start)\nz_streamp strm;\nunsigned start;         /* inflate()'s starting value for strm->avail_out */\n{\n    struct inflate_state FAR *state;\n    unsigned char FAR *in;      /* local strm->next_in */\n    unsigned char FAR *last;    /* while in < last, enough input available */\n    unsigned char FAR *out;     /* local strm->next_out */\n    unsigned char FAR *beg;     /* inflate()'s initial strm->next_out */\n    unsigned char FAR *end;     /* while out < end, enough space available */\n#ifdef INFLATE_STRICT\n    unsigned dmax;              /* maximum distance from zlib header */\n#endif\n    unsigned wsize;             /* window size or zero if not using window */\n    unsigned whave;             /* valid bytes in the window */\n    unsigned wnext;             /* window write index */\n    unsigned char FAR *window;  /* allocated sliding window, if wsize != 0 */\n    unsigned long hold;         /* local strm->hold */\n    unsigned bits;              /* local strm->bits */\n    code const FAR *lcode;      /* local strm->lencode */\n    code const FAR *dcode;      /* local strm->distcode */\n    unsigned lmask;             /* mask for first level of length codes */\n    unsigned dmask;             /* mask for first level of distance codes */\n    code here;                  /* retrieved table entry */\n    unsigned op;                /* code bits, operation, extra bits, or */\n                                /*  window position, window bytes to copy */\n    unsigned len;               /* match length, unused bytes */\n    unsigned dist;              /* match distance */\n    unsigned char FAR *from;    /* where to copy match from */\n\n    /* copy state to local variables */\n    state = (struct inflate_state FAR *)strm->state;\n    in = strm->next_in - OFF;\n    last = in + (strm->avail_in - 5);\n    out = strm->next_out - OFF;\n    beg = out - (start - strm->avail_out);\n    end = out + (strm->avail_out - 257);\n#ifdef INFLATE_STRICT\n    dmax = state->dmax;\n#endif\n    wsize = state->wsize;\n    whave = state->whave;\n    wnext = state->wnext;\n    window = state->window;\n    hold = state->hold;\n    bits = state->bits;\n    lcode = state->lencode;\n    dcode = state->distcode;\n    lmask = (1U << state->lenbits) - 1;\n    dmask = (1U << state->distbits) - 1;\n\n    /* decode literals and length/distances until end-of-block or not enough\n       input data or output space */\n    do {\n        if (bits < 15) {\n            hold += (unsigned long)(PUP(in)) << bits;\n            bits += 8;\n            hold += (unsigned long)(PUP(in)) << bits;\n            bits += 8;\n        }\n        here = lcode[hold & lmask];\n      dolen:\n        op = (unsigned)(here.bits);\n        hold >>= op;\n        bits -= op;\n        op = (unsigned)(here.op);\n        if (op == 0) {                          /* literal */\n            Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n                    \"inflate:         literal '%c'\\n\" :\n                    \"inflate:         literal 0x%02x\\n\", here.val));\n            PUP(out) = (unsigned char)(here.val);\n        }\n        else if (op & 16) {                     /* length base */\n            len = (unsigned)(here.val);\n            op &= 15;                           /* number of extra bits */\n            if (op) {\n                if (bits < op) {\n                    hold += (unsigned long)(PUP(in)) << bits;\n                    bits += 8;\n                }\n                len += (unsigned)hold & ((1U << op) - 1);\n                hold >>= op;\n                bits -= op;\n            }\n            Tracevv((stderr, \"inflate:         length %u\\n\", len));\n            if (bits < 15) {\n                hold += (unsigned long)(PUP(in)) << bits;\n                bits += 8;\n                hold += (unsigned long)(PUP(in)) << bits;\n                bits += 8;\n            }\n            here = dcode[hold & dmask];\n          dodist:\n            op = (unsigned)(here.bits);\n            hold >>= op;\n            bits -= op;\n            op = (unsigned)(here.op);\n            if (op & 16) {                      /* distance base */\n                dist = (unsigned)(here.val);\n                op &= 15;                       /* number of extra bits */\n                if (bits < op) {\n                    hold += (unsigned long)(PUP(in)) << bits;\n                    bits += 8;\n                    if (bits < op) {\n                        hold += (unsigned long)(PUP(in)) << bits;\n                        bits += 8;\n                    }\n                }\n                dist += (unsigned)hold & ((1U << op) - 1);\n#ifdef INFLATE_STRICT\n                if (dist > dmax) {\n                    strm->msg = (char *)\"invalid distance too far back\";\n                    state->mode = BAD;\n                    break;\n                }\n#endif\n                hold >>= op;\n                bits -= op;\n                Tracevv((stderr, \"inflate:         distance %u\\n\", dist));\n                op = (unsigned)(out - beg);     /* max distance in output */\n                if (dist > op) {                /* see if copy from window */\n                    op = dist - op;             /* distance back in window */\n                    if (op > whave) {\n                        if (state->sane) {\n                            strm->msg =\n                                (char *)\"invalid distance too far back\";\n                            state->mode = BAD;\n                            break;\n                        }\n#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n                        if (len <= op - whave) {\n                            do {\n                                PUP(out) = 0;\n                            } while (--len);\n                            continue;\n                        }\n                        len -= op - whave;\n                        do {\n                            PUP(out) = 0;\n                        } while (--op > whave);\n                        if (op == 0) {\n                            from = out - dist;\n                            do {\n                                PUP(out) = PUP(from);\n                            } while (--len);\n                            continue;\n                        }\n#endif\n                    }\n                    from = window - OFF;\n                    if (wnext == 0) {           /* very common case */\n                        from += wsize - op;\n                        if (op < len) {         /* some from window */\n                            len -= op;\n                            do {\n                                PUP(out) = PUP(from);\n                            } while (--op);\n                            from = out - dist;  /* rest from output */\n                        }\n                    }\n                    else if (wnext < op) {      /* wrap around window */\n                        from += wsize + wnext - op;\n                        op -= wnext;\n                        if (op < len) {         /* some from end of window */\n                            len -= op;\n                            do {\n                                PUP(out) = PUP(from);\n                            } while (--op);\n                            from = window - OFF;\n                            if (wnext < len) {  /* some from start of window */\n                                op = wnext;\n                                len -= op;\n                                do {\n                                    PUP(out) = PUP(from);\n                                } while (--op);\n                                from = out - dist;      /* rest from output */\n                            }\n                        }\n                    }\n                    else {                      /* contiguous in window */\n                        from += wnext - op;\n                        if (op < len) {         /* some from window */\n                            len -= op;\n                            do {\n                                PUP(out) = PUP(from);\n                            } while (--op);\n                            from = out - dist;  /* rest from output */\n                        }\n                    }\n                    while (len > 2) {\n                        PUP(out) = PUP(from);\n                        PUP(out) = PUP(from);\n                        PUP(out) = PUP(from);\n                        len -= 3;\n                    }\n                    if (len) {\n                        PUP(out) = PUP(from);\n                        if (len > 1)\n                            PUP(out) = PUP(from);\n                    }\n                }\n                else {\n                    from = out - dist;          /* copy direct from output */\n                    do {                        /* minimum length is three */\n                        PUP(out) = PUP(from);\n                        PUP(out) = PUP(from);\n                        PUP(out) = PUP(from);\n                        len -= 3;\n                    } while (len > 2);\n                    if (len) {\n                        PUP(out) = PUP(from);\n                        if (len > 1)\n                            PUP(out) = PUP(from);\n                    }\n                }\n            }\n            else if ((op & 64) == 0) {          /* 2nd level distance code */\n                here = dcode[here.val + (hold & ((1U << op) - 1))];\n                goto dodist;\n            }\n            else {\n                strm->msg = (char *)\"invalid distance code\";\n                state->mode = BAD;\n                break;\n            }\n        }\n        else if ((op & 64) == 0) {              /* 2nd level length code */\n            here = lcode[here.val + (hold & ((1U << op) - 1))];\n            goto dolen;\n        }\n        else if (op & 32) {                     /* end-of-block */\n            Tracevv((stderr, \"inflate:         end of block\\n\"));\n            state->mode = TYPE;\n            break;\n        }\n        else {\n            strm->msg = (char *)\"invalid literal/length code\";\n            state->mode = BAD;\n            break;\n        }\n    } while (in < last && out < end);\n\n    /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n    len = bits >> 3;\n    in -= len;\n    bits -= len << 3;\n    hold &= (1U << bits) - 1;\n\n    /* update state and return */\n    strm->next_in = in + OFF;\n    strm->next_out = out + OFF;\n    strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last));\n    strm->avail_out = (unsigned)(out < end ?\n                                 257 + (end - out) : 257 - (out - end));\n    state->hold = hold;\n    state->bits = bits;\n    return;\n}\n\n/*\n   inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe):\n   - Using bit fields for code structure\n   - Different op definition to avoid & for extra bits (do & for table bits)\n   - Three separate decoding do-loops for direct, window, and wnext == 0\n   - Special case for distance > 1 copies to do overlapped load and store copy\n   - Explicit branch predictions (based on measured branch probabilities)\n   - Deferring match copy and interspersed it with decoding subsequent codes\n   - Swapping literal/length else\n   - Swapping window/direct else\n   - Larger unrolled copy loops (three is about right)\n   - Moving len -= 3 statement into middle of loop\n */\n\n#endif /* !ASMINF */\n"
  },
  {
    "path": "external/zlib/inffast.h",
    "content": "/* inffast.h -- header to use inffast.c\n * Copyright (C) 1995-2003, 2010 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n/* WARNING: this file should *not* be used by applications. It is\n   part of the implementation of the compression library and is\n   subject to change. Applications should only use zlib.h.\n */\n\nvoid ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start));\n"
  },
  {
    "path": "external/zlib/inffixed.h",
    "content": "    /* inffixed.h -- table for decoding fixed codes\n     * Generated automatically by makefixed().\n     */\n\n    /* WARNING: this file should *not* be used by applications. It\n       is part of the implementation of the compression library and\n       is subject to change. Applications should only use zlib.h.\n     */\n\n    static const code lenfix[512] = {\n        {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48},\n        {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128},\n        {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59},\n        {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176},\n        {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20},\n        {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100},\n        {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8},\n        {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216},\n        {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76},\n        {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114},\n        {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2},\n        {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148},\n        {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42},\n        {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86},\n        {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15},\n        {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236},\n        {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62},\n        {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142},\n        {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31},\n        {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162},\n        {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25},\n        {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105},\n        {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4},\n        {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202},\n        {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69},\n        {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125},\n        {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13},\n        {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195},\n        {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35},\n        {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91},\n        {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19},\n        {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246},\n        {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55},\n        {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135},\n        {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99},\n        {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190},\n        {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16},\n        {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96},\n        {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6},\n        {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209},\n        {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72},\n        {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116},\n        {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4},\n        {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153},\n        {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44},\n        {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82},\n        {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11},\n        {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229},\n        {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58},\n        {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138},\n        {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51},\n        {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173},\n        {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30},\n        {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110},\n        {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0},\n        {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195},\n        {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65},\n        {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121},\n        {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9},\n        {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258},\n        {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37},\n        {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93},\n        {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23},\n        {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251},\n        {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51},\n        {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131},\n        {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67},\n        {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183},\n        {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23},\n        {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103},\n        {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9},\n        {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223},\n        {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79},\n        {0,9,255}\n    };\n\n    static const code distfix[32] = {\n        {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025},\n        {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193},\n        {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385},\n        {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577},\n        {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073},\n        {22,5,193},{64,5,0}\n    };\n"
  },
  {
    "path": "external/zlib/inflate.c",
    "content": "/* inflate.c -- zlib decompression\n * Copyright (C) 1995-2010 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n/*\n * Change history:\n *\n * 1.2.beta0    24 Nov 2002\n * - First version -- complete rewrite of inflate to simplify code, avoid\n *   creation of window when not needed, minimize use of window when it is\n *   needed, make inffast.c even faster, implement gzip decoding, and to\n *   improve code readability and style over the previous zlib inflate code\n *\n * 1.2.beta1    25 Nov 2002\n * - Use pointers for available input and output checking in inffast.c\n * - Remove input and output counters in inffast.c\n * - Change inffast.c entry and loop from avail_in >= 7 to >= 6\n * - Remove unnecessary second byte pull from length extra in inffast.c\n * - Unroll direct copy to three copies per loop in inffast.c\n *\n * 1.2.beta2    4 Dec 2002\n * - Change external routine names to reduce potential conflicts\n * - Correct filename to inffixed.h for fixed tables in inflate.c\n * - Make hbuf[] unsigned char to match parameter type in inflate.c\n * - Change strm->next_out[-state->offset] to *(strm->next_out - state->offset)\n *   to avoid negation problem on Alphas (64 bit) in inflate.c\n *\n * 1.2.beta3    22 Dec 2002\n * - Add comments on state->bits assertion in inffast.c\n * - Add comments on op field in inftrees.h\n * - Fix bug in reuse of allocated window after inflateReset()\n * - Remove bit fields--back to byte structure for speed\n * - Remove distance extra == 0 check in inflate_fast()--only helps for lengths\n * - Change post-increments to pre-increments in inflate_fast(), PPC biased?\n * - Add compile time option, POSTINC, to use post-increments instead (Intel?)\n * - Make MATCH copy in inflate() much faster for when inflate_fast() not used\n * - Use local copies of stream next and avail values, as well as local bit\n *   buffer and bit count in inflate()--for speed when inflate_fast() not used\n *\n * 1.2.beta4    1 Jan 2003\n * - Split ptr - 257 statements in inflate_table() to avoid compiler warnings\n * - Move a comment on output buffer sizes from inffast.c to inflate.c\n * - Add comments in inffast.c to introduce the inflate_fast() routine\n * - Rearrange window copies in inflate_fast() for speed and simplification\n * - Unroll last copy for window match in inflate_fast()\n * - Use local copies of window variables in inflate_fast() for speed\n * - Pull out common wnext == 0 case for speed in inflate_fast()\n * - Make op and len in inflate_fast() unsigned for consistency\n * - Add FAR to lcode and dcode declarations in inflate_fast()\n * - Simplified bad distance check in inflate_fast()\n * - Added inflateBackInit(), inflateBack(), and inflateBackEnd() in new\n *   source file infback.c to provide a call-back interface to inflate for\n *   programs like gzip and unzip -- uses window as output buffer to avoid\n *   window copying\n *\n * 1.2.beta5    1 Jan 2003\n * - Improved inflateBack() interface to allow the caller to provide initial\n *   input in strm.\n * - Fixed stored blocks bug in inflateBack()\n *\n * 1.2.beta6    4 Jan 2003\n * - Added comments in inffast.c on effectiveness of POSTINC\n * - Typecasting all around to reduce compiler warnings\n * - Changed loops from while (1) or do {} while (1) to for (;;), again to\n *   make compilers happy\n * - Changed type of window in inflateBackInit() to unsigned char *\n *\n * 1.2.beta7    27 Jan 2003\n * - Changed many types to unsigned or unsigned short to avoid warnings\n * - Added inflateCopy() function\n *\n * 1.2.0        9 Mar 2003\n * - Changed inflateBack() interface to provide separate opaque descriptors\n *   for the in() and out() functions\n * - Changed inflateBack() argument and in_func typedef to swap the length\n *   and buffer address return values for the input function\n * - Check next_in and next_out for Z_NULL on entry to inflate()\n *\n * The history for versions after 1.2.0 are in ChangeLog in zlib distribution.\n */\n\n#include \"zutil.h\"\n#include \"inftrees.h\"\n#include \"inflate.h\"\n#include \"inffast.h\"\n\n#ifdef MAKEFIXED\n#  ifndef BUILDFIXED\n#    define BUILDFIXED\n#  endif\n#endif\n\n/* function prototypes */\nlocal void fixedtables OF((struct inflate_state FAR *state));\nlocal int updatewindow OF((z_streamp strm, unsigned out));\n#ifdef BUILDFIXED\n   void makefixed OF((void));\n#endif\nlocal unsigned syncsearch OF((unsigned FAR *have, unsigned char FAR *buf,\n                              unsigned len));\n\nint ZEXPORT inflateReset(strm)\nz_streamp strm;\n{\n    struct inflate_state FAR *state;\n\n    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;\n    state = (struct inflate_state FAR *)strm->state;\n    strm->total_in = strm->total_out = state->total = 0;\n    strm->msg = Z_NULL;\n    strm->adler = 1;        /* to support ill-conceived Java test suite */\n    state->mode = HEAD;\n    state->last = 0;\n    state->havedict = 0;\n    state->dmax = 32768U;\n    state->head = Z_NULL;\n    state->wsize = 0;\n    state->whave = 0;\n    state->wnext = 0;\n    state->hold = 0;\n    state->bits = 0;\n    state->lencode = state->distcode = state->next = state->codes;\n    state->sane = 1;\n    state->back = -1;\n    Tracev((stderr, \"inflate: reset\\n\"));\n    return Z_OK;\n}\n\nint ZEXPORT inflateReset2(strm, windowBits)\nz_streamp strm;\nint windowBits;\n{\n    int wrap;\n    struct inflate_state FAR *state;\n\n    /* get the state */\n    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;\n    state = (struct inflate_state FAR *)strm->state;\n\n    /* extract wrap request from windowBits parameter */\n    if (windowBits < 0) {\n        wrap = 0;\n        windowBits = -windowBits;\n    }\n    else {\n        wrap = (windowBits >> 4) + 1;\n#ifdef GUNZIP\n        if (windowBits < 48)\n            windowBits &= 15;\n#endif\n    }\n\n    /* set number of window bits, free window if different */\n    if (windowBits && (windowBits < 8 || windowBits > 15))\n        return Z_STREAM_ERROR;\n    if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) {\n        ZFREE(strm, state->window);\n        state->window = Z_NULL;\n    }\n\n    /* update state and reset the rest of it */\n    state->wrap = wrap;\n    state->wbits = (unsigned)windowBits;\n    return inflateReset(strm);\n}\n\nint ZEXPORT inflateInit2_(strm, windowBits, version, stream_size)\nz_streamp strm;\nint windowBits;\nconst char *version;\nint stream_size;\n{\n    int ret;\n    struct inflate_state FAR *state;\n\n    if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||\n        stream_size != (int)(sizeof(z_stream)))\n        return Z_VERSION_ERROR;\n    if (strm == Z_NULL) return Z_STREAM_ERROR;\n    strm->msg = Z_NULL;                 /* in case we return an error */\n    if (strm->zalloc == (alloc_func)0) {\n        strm->zalloc = zcalloc;\n        strm->opaque = (voidpf)0;\n    }\n    if (strm->zfree == (free_func)0) strm->zfree = zcfree;\n    state = (struct inflate_state FAR *)\n            ZALLOC(strm, 1, sizeof(struct inflate_state));\n    if (state == Z_NULL) return Z_MEM_ERROR;\n    Tracev((stderr, \"inflate: allocated\\n\"));\n    strm->state = (struct internal_state FAR *)state;\n    state->window = Z_NULL;\n    ret = inflateReset2(strm, windowBits);\n    if (ret != Z_OK) {\n        ZFREE(strm, state);\n        strm->state = Z_NULL;\n    }\n    return ret;\n}\n\nint ZEXPORT inflateInit_(strm, version, stream_size)\nz_streamp strm;\nconst char *version;\nint stream_size;\n{\n    return inflateInit2_(strm, DEF_WBITS, version, stream_size);\n}\n\nint ZEXPORT inflatePrime(strm, bits, value)\nz_streamp strm;\nint bits;\nint value;\n{\n    struct inflate_state FAR *state;\n\n    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;\n    state = (struct inflate_state FAR *)strm->state;\n    if (bits < 0) {\n        state->hold = 0;\n        state->bits = 0;\n        return Z_OK;\n    }\n    if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR;\n    value &= (1L << bits) - 1;\n    state->hold += value << state->bits;\n    state->bits += bits;\n    return Z_OK;\n}\n\n/*\n   Return state with length and distance decoding tables and index sizes set to\n   fixed code decoding.  Normally this returns fixed tables from inffixed.h.\n   If BUILDFIXED is defined, then instead this routine builds the tables the\n   first time it's called, and returns those tables the first time and\n   thereafter.  This reduces the size of the code by about 2K bytes, in\n   exchange for a little execution time.  However, BUILDFIXED should not be\n   used for threaded applications, since the rewriting of the tables and virgin\n   may not be thread-safe.\n */\nlocal void fixedtables(state)\nstruct inflate_state FAR *state;\n{\n#ifdef BUILDFIXED\n    static int virgin = 1;\n    static code *lenfix, *distfix;\n    static code fixed[544];\n\n    /* build fixed huffman tables if first call (may not be thread safe) */\n    if (virgin) {\n        unsigned sym, bits;\n        static code *next;\n\n        /* literal/length table */\n        sym = 0;\n        while (sym < 144) state->lens[sym++] = 8;\n        while (sym < 256) state->lens[sym++] = 9;\n        while (sym < 280) state->lens[sym++] = 7;\n        while (sym < 288) state->lens[sym++] = 8;\n        next = fixed;\n        lenfix = next;\n        bits = 9;\n        inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);\n\n        /* distance table */\n        sym = 0;\n        while (sym < 32) state->lens[sym++] = 5;\n        distfix = next;\n        bits = 5;\n        inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);\n\n        /* do this just once */\n        virgin = 0;\n    }\n#else /* !BUILDFIXED */\n#   include \"inffixed.h\"\n#endif /* BUILDFIXED */\n    state->lencode = lenfix;\n    state->lenbits = 9;\n    state->distcode = distfix;\n    state->distbits = 5;\n}\n\n#ifdef MAKEFIXED\n#include <stdio.h>\n\n/*\n   Write out the inffixed.h that is #include'd above.  Defining MAKEFIXED also\n   defines BUILDFIXED, so the tables are built on the fly.  makefixed() writes\n   those tables to stdout, which would be piped to inffixed.h.  A small program\n   can simply call makefixed to do this:\n\n    void makefixed(void);\n\n    int main(void)\n    {\n        makefixed();\n        return 0;\n    }\n\n   Then that can be linked with zlib built with MAKEFIXED defined and run:\n\n    a.out > inffixed.h\n */\nvoid makefixed()\n{\n    unsigned low, size;\n    struct inflate_state state;\n\n    fixedtables(&state);\n    puts(\"    /* inffixed.h -- table for decoding fixed codes\");\n    puts(\"     * Generated automatically by makefixed().\");\n    puts(\"     */\");\n    puts(\"\");\n    puts(\"    /* WARNING: this file should *not* be used by applications.\");\n    puts(\"       It is part of the implementation of this library and is\");\n    puts(\"       subject to change. Applications should only use zlib.h.\");\n    puts(\"     */\");\n    puts(\"\");\n    size = 1U << 9;\n    printf(\"    static const code lenfix[%u] = {\", size);\n    low = 0;\n    for (;;) {\n        if ((low % 7) == 0) printf(\"\\n        \");\n        printf(\"{%u,%u,%d}\", state.lencode[low].op, state.lencode[low].bits,\n               state.lencode[low].val);\n        if (++low == size) break;\n        putchar(',');\n    }\n    puts(\"\\n    };\");\n    size = 1U << 5;\n    printf(\"\\n    static const code distfix[%u] = {\", size);\n    low = 0;\n    for (;;) {\n        if ((low % 6) == 0) printf(\"\\n        \");\n        printf(\"{%u,%u,%d}\", state.distcode[low].op, state.distcode[low].bits,\n               state.distcode[low].val);\n        if (++low == size) break;\n        putchar(',');\n    }\n    puts(\"\\n    };\");\n}\n#endif /* MAKEFIXED */\n\n/*\n   Update the window with the last wsize (normally 32K) bytes written before\n   returning.  If window does not exist yet, create it.  This is only called\n   when a window is already in use, or when output has been written during this\n   inflate call, but the end of the deflate stream has not been reached yet.\n   It is also called to create a window for dictionary data when a dictionary\n   is loaded.\n\n   Providing output buffers larger than 32K to inflate() should provide a speed\n   advantage, since only the last 32K of output is copied to the sliding window\n   upon return from inflate(), and since all distances after the first 32K of\n   output will fall in the output data, making match copies simpler and faster.\n   The advantage may be dependent on the size of the processor's data caches.\n */\nlocal int updatewindow(strm, out)\nz_streamp strm;\nunsigned out;\n{\n    struct inflate_state FAR *state;\n    unsigned copy, dist;\n\n    state = (struct inflate_state FAR *)strm->state;\n\n    /* if it hasn't been done already, allocate space for the window */\n    if (state->window == Z_NULL) {\n        state->window = (unsigned char FAR *)\n                        ZALLOC(strm, 1U << state->wbits,\n                               sizeof(unsigned char));\n        if (state->window == Z_NULL) return 1;\n    }\n\n    /* if window not in use yet, initialize */\n    if (state->wsize == 0) {\n        state->wsize = 1U << state->wbits;\n        state->wnext = 0;\n        state->whave = 0;\n    }\n\n    /* copy state->wsize or less output bytes into the circular window */\n    copy = out - strm->avail_out;\n    if (copy >= state->wsize) {\n        zmemcpy(state->window, strm->next_out - state->wsize, state->wsize);\n        state->wnext = 0;\n        state->whave = state->wsize;\n    }\n    else {\n        dist = state->wsize - state->wnext;\n        if (dist > copy) dist = copy;\n        zmemcpy(state->window + state->wnext, strm->next_out - copy, dist);\n        copy -= dist;\n        if (copy) {\n            zmemcpy(state->window, strm->next_out - copy, copy);\n            state->wnext = copy;\n            state->whave = state->wsize;\n        }\n        else {\n            state->wnext += dist;\n            if (state->wnext == state->wsize) state->wnext = 0;\n            if (state->whave < state->wsize) state->whave += dist;\n        }\n    }\n    return 0;\n}\n\n/* Macros for inflate(): */\n\n/* check function to use adler32() for zlib or crc32() for gzip */\n#ifdef GUNZIP\n#  define UPDATE(check, buf, len) \\\n    (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))\n#else\n#  define UPDATE(check, buf, len) adler32(check, buf, len)\n#endif\n\n/* check macros for header crc */\n#ifdef GUNZIP\n#  define CRC2(check, word) \\\n    do { \\\n        hbuf[0] = (unsigned char)(word); \\\n        hbuf[1] = (unsigned char)((word) >> 8); \\\n        check = crc32(check, hbuf, 2); \\\n    } while (0)\n\n#  define CRC4(check, word) \\\n    do { \\\n        hbuf[0] = (unsigned char)(word); \\\n        hbuf[1] = (unsigned char)((word) >> 8); \\\n        hbuf[2] = (unsigned char)((word) >> 16); \\\n        hbuf[3] = (unsigned char)((word) >> 24); \\\n        check = crc32(check, hbuf, 4); \\\n    } while (0)\n#endif\n\n/* Load registers with state in inflate() for speed */\n#define LOAD() \\\n    do { \\\n        put = strm->next_out; \\\n        left = strm->avail_out; \\\n        next = strm->next_in; \\\n        have = strm->avail_in; \\\n        hold = state->hold; \\\n        bits = state->bits; \\\n    } while (0)\n\n/* Restore state from registers in inflate() */\n#define RESTORE() \\\n    do { \\\n        strm->next_out = put; \\\n        strm->avail_out = left; \\\n        strm->next_in = next; \\\n        strm->avail_in = have; \\\n        state->hold = hold; \\\n        state->bits = bits; \\\n    } while (0)\n\n/* Clear the input bit accumulator */\n#define INITBITS() \\\n    do { \\\n        hold = 0; \\\n        bits = 0; \\\n    } while (0)\n\n/* Get a byte of input into the bit accumulator, or return from inflate()\n   if there is no input available. */\n#define PULLBYTE() \\\n    do { \\\n        if (have == 0) goto inf_leave; \\\n        have--; \\\n        hold += (unsigned long)(*next++) << bits; \\\n        bits += 8; \\\n    } while (0)\n\n/* Assure that there are at least n bits in the bit accumulator.  If there is\n   not enough available input to do that, then return from inflate(). */\n#define NEEDBITS(n) \\\n    do { \\\n        while (bits < (unsigned)(n)) \\\n            PULLBYTE(); \\\n    } while (0)\n\n/* Return the low n bits of the bit accumulator (n < 16) */\n#define BITS(n) \\\n    ((unsigned)hold & ((1U << (n)) - 1))\n\n/* Remove n bits from the bit accumulator */\n#define DROPBITS(n) \\\n    do { \\\n        hold >>= (n); \\\n        bits -= (unsigned)(n); \\\n    } while (0)\n\n/* Remove zero to seven bits as needed to go to a byte boundary */\n#define BYTEBITS() \\\n    do { \\\n        hold >>= bits & 7; \\\n        bits -= bits & 7; \\\n    } while (0)\n\n/* Reverse the bytes in a 32-bit value */\n#define REVERSE(q) \\\n    ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \\\n     (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))\n\n/*\n   inflate() uses a state machine to process as much input data and generate as\n   much output data as possible before returning.  The state machine is\n   structured roughly as follows:\n\n    for (;;) switch (state) {\n    ...\n    case STATEn:\n        if (not enough input data or output space to make progress)\n            return;\n        ... make progress ...\n        state = STATEm;\n        break;\n    ...\n    }\n\n   so when inflate() is called again, the same case is attempted again, and\n   if the appropriate resources are provided, the machine proceeds to the\n   next state.  The NEEDBITS() macro is usually the way the state evaluates\n   whether it can proceed or should return.  NEEDBITS() does the return if\n   the requested bits are not available.  The typical use of the BITS macros\n   is:\n\n        NEEDBITS(n);\n        ... do something with BITS(n) ...\n        DROPBITS(n);\n\n   where NEEDBITS(n) either returns from inflate() if there isn't enough\n   input left to load n bits into the accumulator, or it continues.  BITS(n)\n   gives the low n bits in the accumulator.  When done, DROPBITS(n) drops\n   the low n bits off the accumulator.  INITBITS() clears the accumulator\n   and sets the number of available bits to zero.  BYTEBITS() discards just\n   enough bits to put the accumulator on a byte boundary.  After BYTEBITS()\n   and a NEEDBITS(8), then BITS(8) would return the next byte in the stream.\n\n   NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return\n   if there is no input available.  The decoding of variable length codes uses\n   PULLBYTE() directly in order to pull just enough bytes to decode the next\n   code, and no more.\n\n   Some states loop until they get enough input, making sure that enough\n   state information is maintained to continue the loop where it left off\n   if NEEDBITS() returns in the loop.  For example, want, need, and keep\n   would all have to actually be part of the saved state in case NEEDBITS()\n   returns:\n\n    case STATEw:\n        while (want < need) {\n            NEEDBITS(n);\n            keep[want++] = BITS(n);\n            DROPBITS(n);\n        }\n        state = STATEx;\n    case STATEx:\n\n   As shown above, if the next state is also the next case, then the break\n   is omitted.\n\n   A state may also return if there is not enough output space available to\n   complete that state.  Those states are copying stored data, writing a\n   literal byte, and copying a matching string.\n\n   When returning, a \"goto inf_leave\" is used to update the total counters,\n   update the check value, and determine whether any progress has been made\n   during that inflate() call in order to return the proper return code.\n   Progress is defined as a change in either strm->avail_in or strm->avail_out.\n   When there is a window, goto inf_leave will update the window with the last\n   output written.  If a goto inf_leave occurs in the middle of decompression\n   and there is no window currently, goto inf_leave will create one and copy\n   output to the window for the next call of inflate().\n\n   In this implementation, the flush parameter of inflate() only affects the\n   return code (per zlib.h).  inflate() always writes as much as possible to\n   strm->next_out, given the space available and the provided input--the effect\n   documented in zlib.h of Z_SYNC_FLUSH.  Furthermore, inflate() always defers\n   the allocation of and copying into a sliding window until necessary, which\n   provides the effect documented in zlib.h for Z_FINISH when the entire input\n   stream available.  So the only thing the flush parameter actually does is:\n   when flush is set to Z_FINISH, inflate() cannot return Z_OK.  Instead it\n   will return Z_BUF_ERROR if it has not reached the end of the stream.\n */\n\nint ZEXPORT inflate(strm, flush)\nz_streamp strm;\nint flush;\n{\n    struct inflate_state FAR *state;\n    unsigned char FAR *next;    /* next input */\n    unsigned char FAR *put;     /* next output */\n    unsigned have, left;        /* available input and output */\n    unsigned long hold;         /* bit buffer */\n    unsigned bits;              /* bits in bit buffer */\n    unsigned in, out;           /* save starting available input and output */\n    unsigned copy;              /* number of stored or match bytes to copy */\n    unsigned char FAR *from;    /* where to copy match bytes from */\n    code here;                  /* current decoding table entry */\n    code last;                  /* parent table entry */\n    unsigned len;               /* length to copy for repeats, bits to drop */\n    int ret;                    /* return code */\n#ifdef GUNZIP\n    unsigned char hbuf[4];      /* buffer for gzip header crc calculation */\n#endif\n    static const unsigned short order[19] = /* permutation of code lengths */\n        {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};\n\n    if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL ||\n        (strm->next_in == Z_NULL && strm->avail_in != 0))\n        return Z_STREAM_ERROR;\n\n    state = (struct inflate_state FAR *)strm->state;\n    if (state->mode == TYPE) state->mode = TYPEDO;      /* skip check */\n    LOAD();\n    in = have;\n    out = left;\n    ret = Z_OK;\n    for (;;)\n        switch (state->mode) {\n        case HEAD:\n            if (state->wrap == 0) {\n                state->mode = TYPEDO;\n                break;\n            }\n            NEEDBITS(16);\n#ifdef GUNZIP\n            if ((state->wrap & 2) && hold == 0x8b1f) {  /* gzip header */\n                state->check = crc32(0L, Z_NULL, 0);\n                CRC2(state->check, hold);\n                INITBITS();\n                state->mode = FLAGS;\n                break;\n            }\n            state->flags = 0;           /* expect zlib header */\n            if (state->head != Z_NULL)\n                state->head->done = -1;\n            if (!(state->wrap & 1) ||   /* check if zlib header allowed */\n#else\n            if (\n#endif\n                ((BITS(8) << 8) + (hold >> 8)) % 31) {\n                strm->msg = (char *)\"incorrect header check\";\n                state->mode = BAD;\n                break;\n            }\n            if (BITS(4) != Z_DEFLATED) {\n                strm->msg = (char *)\"unknown compression method\";\n                state->mode = BAD;\n                break;\n            }\n            DROPBITS(4);\n            len = BITS(4) + 8;\n            if (state->wbits == 0)\n                state->wbits = len;\n            else if (len > state->wbits) {\n                strm->msg = (char *)\"invalid window size\";\n                state->mode = BAD;\n                break;\n            }\n            state->dmax = 1U << len;\n            Tracev((stderr, \"inflate:   zlib header ok\\n\"));\n            strm->adler = state->check = adler32(0L, Z_NULL, 0);\n            state->mode = hold & 0x200 ? DICTID : TYPE;\n            INITBITS();\n            break;\n#ifdef GUNZIP\n        case FLAGS:\n            NEEDBITS(16);\n            state->flags = (int)(hold);\n            if ((state->flags & 0xff) != Z_DEFLATED) {\n                strm->msg = (char *)\"unknown compression method\";\n                state->mode = BAD;\n                break;\n            }\n            if (state->flags & 0xe000) {\n                strm->msg = (char *)\"unknown header flags set\";\n                state->mode = BAD;\n                break;\n            }\n            if (state->head != Z_NULL)\n                state->head->text = (int)((hold >> 8) & 1);\n            if (state->flags & 0x0200) CRC2(state->check, hold);\n            INITBITS();\n            state->mode = TIME;\n        case TIME:\n            NEEDBITS(32);\n            if (state->head != Z_NULL)\n                state->head->time = hold;\n            if (state->flags & 0x0200) CRC4(state->check, hold);\n            INITBITS();\n            state->mode = OS;\n        case OS:\n            NEEDBITS(16);\n            if (state->head != Z_NULL) {\n                state->head->xflags = (int)(hold & 0xff);\n                state->head->os = (int)(hold >> 8);\n            }\n            if (state->flags & 0x0200) CRC2(state->check, hold);\n            INITBITS();\n            state->mode = EXLEN;\n        case EXLEN:\n            if (state->flags & 0x0400) {\n                NEEDBITS(16);\n                state->length = (unsigned)(hold);\n                if (state->head != Z_NULL)\n                    state->head->extra_len = (unsigned)hold;\n                if (state->flags & 0x0200) CRC2(state->check, hold);\n                INITBITS();\n            }\n            else if (state->head != Z_NULL)\n                state->head->extra = Z_NULL;\n            state->mode = EXTRA;\n        case EXTRA:\n            if (state->flags & 0x0400) {\n                copy = state->length;\n                if (copy > have) copy = have;\n                if (copy) {\n                    if (state->head != Z_NULL &&\n                        state->head->extra != Z_NULL) {\n                        len = state->head->extra_len - state->length;\n                        zmemcpy(state->head->extra + len, next,\n                                len + copy > state->head->extra_max ?\n                                state->head->extra_max - len : copy);\n                    }\n                    if (state->flags & 0x0200)\n                        state->check = crc32(state->check, next, copy);\n                    have -= copy;\n                    next += copy;\n                    state->length -= copy;\n                }\n                if (state->length) goto inf_leave;\n            }\n            state->length = 0;\n            state->mode = NAME;\n        case NAME:\n            if (state->flags & 0x0800) {\n                if (have == 0) goto inf_leave;\n                copy = 0;\n                do {\n                    len = (unsigned)(next[copy++]);\n                    if (state->head != Z_NULL &&\n                            state->head->name != Z_NULL &&\n                            state->length < state->head->name_max)\n                        state->head->name[state->length++] = len;\n                } while (len && copy < have);\n                if (state->flags & 0x0200)\n                    state->check = crc32(state->check, next, copy);\n                have -= copy;\n                next += copy;\n                if (len) goto inf_leave;\n            }\n            else if (state->head != Z_NULL)\n                state->head->name = Z_NULL;\n            state->length = 0;\n            state->mode = COMMENT;\n        case COMMENT:\n            if (state->flags & 0x1000) {\n                if (have == 0) goto inf_leave;\n                copy = 0;\n                do {\n                    len = (unsigned)(next[copy++]);\n                    if (state->head != Z_NULL &&\n                            state->head->comment != Z_NULL &&\n                            state->length < state->head->comm_max)\n                        state->head->comment[state->length++] = len;\n                } while (len && copy < have);\n                if (state->flags & 0x0200)\n                    state->check = crc32(state->check, next, copy);\n                have -= copy;\n                next += copy;\n                if (len) goto inf_leave;\n            }\n            else if (state->head != Z_NULL)\n                state->head->comment = Z_NULL;\n            state->mode = HCRC;\n        case HCRC:\n            if (state->flags & 0x0200) {\n                NEEDBITS(16);\n                if (hold != (state->check & 0xffff)) {\n                    strm->msg = (char *)\"header crc mismatch\";\n                    state->mode = BAD;\n                    break;\n                }\n                INITBITS();\n            }\n            if (state->head != Z_NULL) {\n                state->head->hcrc = (int)((state->flags >> 9) & 1);\n                state->head->done = 1;\n            }\n            strm->adler = state->check = crc32(0L, Z_NULL, 0);\n            state->mode = TYPE;\n            break;\n#endif\n        case DICTID:\n            NEEDBITS(32);\n            strm->adler = state->check = REVERSE(hold);\n            INITBITS();\n            state->mode = DICT;\n        case DICT:\n            if (state->havedict == 0) {\n                RESTORE();\n                return Z_NEED_DICT;\n            }\n            strm->adler = state->check = adler32(0L, Z_NULL, 0);\n            state->mode = TYPE;\n        case TYPE:\n            if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave;\n        case TYPEDO:\n            if (state->last) {\n                BYTEBITS();\n                state->mode = CHECK;\n                break;\n            }\n            NEEDBITS(3);\n            state->last = BITS(1);\n            DROPBITS(1);\n            switch (BITS(2)) {\n            case 0:                             /* stored block */\n                Tracev((stderr, \"inflate:     stored block%s\\n\",\n                        state->last ? \" (last)\" : \"\"));\n                state->mode = STORED;\n                break;\n            case 1:                             /* fixed block */\n                fixedtables(state);\n                Tracev((stderr, \"inflate:     fixed codes block%s\\n\",\n                        state->last ? \" (last)\" : \"\"));\n                state->mode = LEN_;             /* decode codes */\n                if (flush == Z_TREES) {\n                    DROPBITS(2);\n                    goto inf_leave;\n                }\n                break;\n            case 2:                             /* dynamic block */\n                Tracev((stderr, \"inflate:     dynamic codes block%s\\n\",\n                        state->last ? \" (last)\" : \"\"));\n                state->mode = TABLE;\n                break;\n            case 3:\n                strm->msg = (char *)\"invalid block type\";\n                state->mode = BAD;\n            }\n            DROPBITS(2);\n            break;\n        case STORED:\n            BYTEBITS();                         /* go to byte boundary */\n            NEEDBITS(32);\n            if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {\n                strm->msg = (char *)\"invalid stored block lengths\";\n                state->mode = BAD;\n                break;\n            }\n            state->length = (unsigned)hold & 0xffff;\n            Tracev((stderr, \"inflate:       stored length %u\\n\",\n                    state->length));\n            INITBITS();\n            state->mode = COPY_;\n            if (flush == Z_TREES) goto inf_leave;\n        case COPY_:\n            state->mode = COPY;\n        case COPY:\n            copy = state->length;\n            if (copy) {\n                if (copy > have) copy = have;\n                if (copy > left) copy = left;\n                if (copy == 0) goto inf_leave;\n                zmemcpy(put, next, copy);\n                have -= copy;\n                next += copy;\n                left -= copy;\n                put += copy;\n                state->length -= copy;\n                break;\n            }\n            Tracev((stderr, \"inflate:       stored end\\n\"));\n            state->mode = TYPE;\n            break;\n        case TABLE:\n            NEEDBITS(14);\n            state->nlen = BITS(5) + 257;\n            DROPBITS(5);\n            state->ndist = BITS(5) + 1;\n            DROPBITS(5);\n            state->ncode = BITS(4) + 4;\n            DROPBITS(4);\n#ifndef PKZIP_BUG_WORKAROUND\n            if (state->nlen > 286 || state->ndist > 30) {\n                strm->msg = (char *)\"too many length or distance symbols\";\n                state->mode = BAD;\n                break;\n            }\n#endif\n            Tracev((stderr, \"inflate:       table sizes ok\\n\"));\n            state->have = 0;\n            state->mode = LENLENS;\n        case LENLENS:\n            while (state->have < state->ncode) {\n                NEEDBITS(3);\n                state->lens[order[state->have++]] = (unsigned short)BITS(3);\n                DROPBITS(3);\n            }\n            while (state->have < 19)\n                state->lens[order[state->have++]] = 0;\n            state->next = state->codes;\n            state->lencode = (code const FAR *)(state->next);\n            state->lenbits = 7;\n            ret = inflate_table(CODES, state->lens, 19, &(state->next),\n                                &(state->lenbits), state->work);\n            if (ret) {\n                strm->msg = (char *)\"invalid code lengths set\";\n                state->mode = BAD;\n                break;\n            }\n            Tracev((stderr, \"inflate:       code lengths ok\\n\"));\n            state->have = 0;\n            state->mode = CODELENS;\n        case CODELENS:\n            while (state->have < state->nlen + state->ndist) {\n                for (;;) {\n                    here = state->lencode[BITS(state->lenbits)];\n                    if ((unsigned)(here.bits) <= bits) break;\n                    PULLBYTE();\n                }\n                if (here.val < 16) {\n                    NEEDBITS(here.bits);\n                    DROPBITS(here.bits);\n                    state->lens[state->have++] = here.val;\n                }\n                else {\n                    if (here.val == 16) {\n                        NEEDBITS(here.bits + 2);\n                        DROPBITS(here.bits);\n                        if (state->have == 0) {\n                            strm->msg = (char *)\"invalid bit length repeat\";\n                            state->mode = BAD;\n                            break;\n                        }\n                        len = state->lens[state->have - 1];\n                        copy = 3 + BITS(2);\n                        DROPBITS(2);\n                    }\n                    else if (here.val == 17) {\n                        NEEDBITS(here.bits + 3);\n                        DROPBITS(here.bits);\n                        len = 0;\n                        copy = 3 + BITS(3);\n                        DROPBITS(3);\n                    }\n                    else {\n                        NEEDBITS(here.bits + 7);\n                        DROPBITS(here.bits);\n                        len = 0;\n                        copy = 11 + BITS(7);\n                        DROPBITS(7);\n                    }\n                    if (state->have + copy > state->nlen + state->ndist) {\n                        strm->msg = (char *)\"invalid bit length repeat\";\n                        state->mode = BAD;\n                        break;\n                    }\n                    while (copy--)\n                        state->lens[state->have++] = (unsigned short)len;\n                }\n            }\n\n            /* handle error breaks in while */\n            if (state->mode == BAD) break;\n\n            /* check for end-of-block code (better have one) */\n            if (state->lens[256] == 0) {\n                strm->msg = (char *)\"invalid code -- missing end-of-block\";\n                state->mode = BAD;\n                break;\n            }\n\n            /* build code tables -- note: do not change the lenbits or distbits\n               values here (9 and 6) without reading the comments in inftrees.h\n               concerning the ENOUGH constants, which depend on those values */\n            state->next = state->codes;\n            state->lencode = (code const FAR *)(state->next);\n            state->lenbits = 9;\n            ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),\n                                &(state->lenbits), state->work);\n            if (ret) {\n                strm->msg = (char *)\"invalid literal/lengths set\";\n                state->mode = BAD;\n                break;\n            }\n            state->distcode = (code const FAR *)(state->next);\n            state->distbits = 6;\n            ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,\n                            &(state->next), &(state->distbits), state->work);\n            if (ret) {\n                strm->msg = (char *)\"invalid distances set\";\n                state->mode = BAD;\n                break;\n            }\n            Tracev((stderr, \"inflate:       codes ok\\n\"));\n            state->mode = LEN_;\n            if (flush == Z_TREES) goto inf_leave;\n        case LEN_:\n            state->mode = LEN;\n        case LEN:\n            if (have >= 6 && left >= 258) {\n                RESTORE();\n                inflate_fast(strm, out);\n                LOAD();\n                if (state->mode == TYPE)\n                    state->back = -1;\n                break;\n            }\n            state->back = 0;\n            for (;;) {\n                here = state->lencode[BITS(state->lenbits)];\n                if ((unsigned)(here.bits) <= bits) break;\n                PULLBYTE();\n            }\n            if (here.op && (here.op & 0xf0) == 0) {\n                last = here;\n                for (;;) {\n                    here = state->lencode[last.val +\n                            (BITS(last.bits + last.op) >> last.bits)];\n                    if ((unsigned)(last.bits + here.bits) <= bits) break;\n                    PULLBYTE();\n                }\n                DROPBITS(last.bits);\n                state->back += last.bits;\n            }\n            DROPBITS(here.bits);\n            state->back += here.bits;\n            state->length = (unsigned)here.val;\n            if ((int)(here.op) == 0) {\n                Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n                        \"inflate:         literal '%c'\\n\" :\n                        \"inflate:         literal 0x%02x\\n\", here.val));\n                state->mode = LIT;\n                break;\n            }\n            if (here.op & 32) {\n                Tracevv((stderr, \"inflate:         end of block\\n\"));\n                state->back = -1;\n                state->mode = TYPE;\n                break;\n            }\n            if (here.op & 64) {\n                strm->msg = (char *)\"invalid literal/length code\";\n                state->mode = BAD;\n                break;\n            }\n            state->extra = (unsigned)(here.op) & 15;\n            state->mode = LENEXT;\n        case LENEXT:\n            if (state->extra) {\n                NEEDBITS(state->extra);\n                state->length += BITS(state->extra);\n                DROPBITS(state->extra);\n                state->back += state->extra;\n            }\n            Tracevv((stderr, \"inflate:         length %u\\n\", state->length));\n            state->was = state->length;\n            state->mode = DIST;\n        case DIST:\n            for (;;) {\n                here = state->distcode[BITS(state->distbits)];\n                if ((unsigned)(here.bits) <= bits) break;\n                PULLBYTE();\n            }\n            if ((here.op & 0xf0) == 0) {\n                last = here;\n                for (;;) {\n                    here = state->distcode[last.val +\n                            (BITS(last.bits + last.op) >> last.bits)];\n                    if ((unsigned)(last.bits + here.bits) <= bits) break;\n                    PULLBYTE();\n                }\n                DROPBITS(last.bits);\n                state->back += last.bits;\n            }\n            DROPBITS(here.bits);\n            state->back += here.bits;\n            if (here.op & 64) {\n                strm->msg = (char *)\"invalid distance code\";\n                state->mode = BAD;\n                break;\n            }\n            state->offset = (unsigned)here.val;\n            state->extra = (unsigned)(here.op) & 15;\n            state->mode = DISTEXT;\n        case DISTEXT:\n            if (state->extra) {\n                NEEDBITS(state->extra);\n                state->offset += BITS(state->extra);\n                DROPBITS(state->extra);\n                state->back += state->extra;\n            }\n#ifdef INFLATE_STRICT\n            if (state->offset > state->dmax) {\n                strm->msg = (char *)\"invalid distance too far back\";\n                state->mode = BAD;\n                break;\n            }\n#endif\n            Tracevv((stderr, \"inflate:         distance %u\\n\", state->offset));\n            state->mode = MATCH;\n        case MATCH:\n            if (left == 0) goto inf_leave;\n            copy = out - left;\n            if (state->offset > copy) {         /* copy from window */\n                copy = state->offset - copy;\n                if (copy > state->whave) {\n                    if (state->sane) {\n                        strm->msg = (char *)\"invalid distance too far back\";\n                        state->mode = BAD;\n                        break;\n                    }\n#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n                    Trace((stderr, \"inflate.c too far\\n\"));\n                    copy -= state->whave;\n                    if (copy > state->length) copy = state->length;\n                    if (copy > left) copy = left;\n                    left -= copy;\n                    state->length -= copy;\n                    do {\n                        *put++ = 0;\n                    } while (--copy);\n                    if (state->length == 0) state->mode = LEN;\n                    break;\n#endif\n                }\n                if (copy > state->wnext) {\n                    copy -= state->wnext;\n                    from = state->window + (state->wsize - copy);\n                }\n                else\n                    from = state->window + (state->wnext - copy);\n                if (copy > state->length) copy = state->length;\n            }\n            else {                              /* copy from output */\n                from = put - state->offset;\n                copy = state->length;\n            }\n            if (copy > left) copy = left;\n            left -= copy;\n            state->length -= copy;\n            do {\n                *put++ = *from++;\n            } while (--copy);\n            if (state->length == 0) state->mode = LEN;\n            break;\n        case LIT:\n            if (left == 0) goto inf_leave;\n            *put++ = (unsigned char)(state->length);\n            left--;\n            state->mode = LEN;\n            break;\n        case CHECK:\n            if (state->wrap) {\n                NEEDBITS(32);\n                out -= left;\n                strm->total_out += out;\n                state->total += out;\n                if (out)\n                    strm->adler = state->check =\n                        UPDATE(state->check, put - out, out);\n                out = left;\n                if ((\n#ifdef GUNZIP\n                     state->flags ? hold :\n#endif\n                     REVERSE(hold)) != state->check) {\n                    strm->msg = (char *)\"incorrect data check\";\n                    state->mode = BAD;\n                    break;\n                }\n                INITBITS();\n                Tracev((stderr, \"inflate:   check matches trailer\\n\"));\n            }\n#ifdef GUNZIP\n            state->mode = LENGTH;\n        case LENGTH:\n            if (state->wrap && state->flags) {\n                NEEDBITS(32);\n                if (hold != (state->total & 0xffffffffUL)) {\n                    strm->msg = (char *)\"incorrect length check\";\n                    state->mode = BAD;\n                    break;\n                }\n                INITBITS();\n                Tracev((stderr, \"inflate:   length matches trailer\\n\"));\n            }\n#endif\n            state->mode = DONE;\n        case DONE:\n            ret = Z_STREAM_END;\n            goto inf_leave;\n        case BAD:\n            ret = Z_DATA_ERROR;\n            goto inf_leave;\n        case MEM:\n            return Z_MEM_ERROR;\n        case SYNC:\n        default:\n            return Z_STREAM_ERROR;\n        }\n\n    /*\n       Return from inflate(), updating the total counts and the check value.\n       If there was no progress during the inflate() call, return a buffer\n       error.  Call updatewindow() to create and/or update the window state.\n       Note: a memory error from inflate() is non-recoverable.\n     */\n  inf_leave:\n    RESTORE();\n    if (state->wsize || (state->mode < CHECK && out != strm->avail_out))\n        if (updatewindow(strm, out)) {\n            state->mode = MEM;\n            return Z_MEM_ERROR;\n        }\n    in -= strm->avail_in;\n    out -= strm->avail_out;\n    strm->total_in += in;\n    strm->total_out += out;\n    state->total += out;\n    if (state->wrap && out)\n        strm->adler = state->check =\n            UPDATE(state->check, strm->next_out - out, out);\n    strm->data_type = state->bits + (state->last ? 64 : 0) +\n                      (state->mode == TYPE ? 128 : 0) +\n                      (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);\n    if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)\n        ret = Z_BUF_ERROR;\n    return ret;\n}\n\nint ZEXPORT inflateEnd(strm)\nz_streamp strm;\n{\n    struct inflate_state FAR *state;\n    if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)\n        return Z_STREAM_ERROR;\n    state = (struct inflate_state FAR *)strm->state;\n    if (state->window != Z_NULL) ZFREE(strm, state->window);\n    ZFREE(strm, strm->state);\n    strm->state = Z_NULL;\n    Tracev((stderr, \"inflate: end\\n\"));\n    return Z_OK;\n}\n\nint ZEXPORT inflateSetDictionary(strm, dictionary, dictLength)\nz_streamp strm;\nconst Bytef *dictionary;\nuInt dictLength;\n{\n    struct inflate_state FAR *state;\n    unsigned long id;\n\n    /* check state */\n    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;\n    state = (struct inflate_state FAR *)strm->state;\n    if (state->wrap != 0 && state->mode != DICT)\n        return Z_STREAM_ERROR;\n\n    /* check for correct dictionary id */\n    if (state->mode == DICT) {\n        id = adler32(0L, Z_NULL, 0);\n        id = adler32(id, dictionary, dictLength);\n        if (id != state->check)\n            return Z_DATA_ERROR;\n    }\n\n    /* copy dictionary to window */\n    if (updatewindow(strm, strm->avail_out)) {\n        state->mode = MEM;\n        return Z_MEM_ERROR;\n    }\n    if (dictLength > state->wsize) {\n        zmemcpy(state->window, dictionary + dictLength - state->wsize,\n                state->wsize);\n        state->whave = state->wsize;\n    }\n    else {\n        zmemcpy(state->window + state->wsize - dictLength, dictionary,\n                dictLength);\n        state->whave = dictLength;\n    }\n    state->havedict = 1;\n    Tracev((stderr, \"inflate:   dictionary set\\n\"));\n    return Z_OK;\n}\n\nint ZEXPORT inflateGetHeader(strm, head)\nz_streamp strm;\ngz_headerp head;\n{\n    struct inflate_state FAR *state;\n\n    /* check state */\n    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;\n    state = (struct inflate_state FAR *)strm->state;\n    if ((state->wrap & 2) == 0) return Z_STREAM_ERROR;\n\n    /* save header structure */\n    state->head = head;\n    head->done = 0;\n    return Z_OK;\n}\n\n/*\n   Search buf[0..len-1] for the pattern: 0, 0, 0xff, 0xff.  Return when found\n   or when out of input.  When called, *have is the number of pattern bytes\n   found in order so far, in 0..3.  On return *have is updated to the new\n   state.  If on return *have equals four, then the pattern was found and the\n   return value is how many bytes were read including the last byte of the\n   pattern.  If *have is less than four, then the pattern has not been found\n   yet and the return value is len.  In the latter case, syncsearch() can be\n   called again with more data and the *have state.  *have is initialized to\n   zero for the first call.\n */\nlocal unsigned syncsearch(have, buf, len)\nunsigned FAR *have;\nunsigned char FAR *buf;\nunsigned len;\n{\n    unsigned got;\n    unsigned next;\n\n    got = *have;\n    next = 0;\n    while (next < len && got < 4) {\n        if ((int)(buf[next]) == (got < 2 ? 0 : 0xff))\n            got++;\n        else if (buf[next])\n            got = 0;\n        else\n            got = 4 - got;\n        next++;\n    }\n    *have = got;\n    return next;\n}\n\nint ZEXPORT inflateSync(strm)\nz_streamp strm;\n{\n    unsigned len;               /* number of bytes to look at or looked at */\n    unsigned long in, out;      /* temporary to save total_in and total_out */\n    unsigned char buf[4];       /* to restore bit buffer to byte string */\n    struct inflate_state FAR *state;\n\n    /* check parameters */\n    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;\n    state = (struct inflate_state FAR *)strm->state;\n    if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR;\n\n    /* if first time, start search in bit buffer */\n    if (state->mode != SYNC) {\n        state->mode = SYNC;\n        state->hold <<= state->bits & 7;\n        state->bits -= state->bits & 7;\n        len = 0;\n        while (state->bits >= 8) {\n            buf[len++] = (unsigned char)(state->hold);\n            state->hold >>= 8;\n            state->bits -= 8;\n        }\n        state->have = 0;\n        syncsearch(&(state->have), buf, len);\n    }\n\n    /* search available input */\n    len = syncsearch(&(state->have), strm->next_in, strm->avail_in);\n    strm->avail_in -= len;\n    strm->next_in += len;\n    strm->total_in += len;\n\n    /* return no joy or set up to restart inflate() on a new block */\n    if (state->have != 4) return Z_DATA_ERROR;\n    in = strm->total_in;  out = strm->total_out;\n    inflateReset(strm);\n    strm->total_in = in;  strm->total_out = out;\n    state->mode = TYPE;\n    return Z_OK;\n}\n\n/*\n   Returns true if inflate is currently at the end of a block generated by\n   Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP\n   implementation to provide an additional safety check. PPP uses\n   Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored\n   block. When decompressing, PPP checks that at the end of input packet,\n   inflate is waiting for these length bytes.\n */\nint ZEXPORT inflateSyncPoint(strm)\nz_streamp strm;\n{\n    struct inflate_state FAR *state;\n\n    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;\n    state = (struct inflate_state FAR *)strm->state;\n    return state->mode == STORED && state->bits == 0;\n}\n\nint ZEXPORT inflateCopy(dest, source)\nz_streamp dest;\nz_streamp source;\n{\n    struct inflate_state FAR *state;\n    struct inflate_state FAR *copy;\n    unsigned char FAR *window;\n    unsigned wsize;\n\n    /* check input */\n    if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL ||\n        source->zalloc == (alloc_func)0 || source->zfree == (free_func)0)\n        return Z_STREAM_ERROR;\n    state = (struct inflate_state FAR *)source->state;\n\n    /* allocate space */\n    copy = (struct inflate_state FAR *)\n           ZALLOC(source, 1, sizeof(struct inflate_state));\n    if (copy == Z_NULL) return Z_MEM_ERROR;\n    window = Z_NULL;\n    if (state->window != Z_NULL) {\n        window = (unsigned char FAR *)\n                 ZALLOC(source, 1U << state->wbits, sizeof(unsigned char));\n        if (window == Z_NULL) {\n            ZFREE(source, copy);\n            return Z_MEM_ERROR;\n        }\n    }\n\n    /* copy state */\n    zmemcpy(dest, source, sizeof(z_stream));\n    zmemcpy(copy, state, sizeof(struct inflate_state));\n    if (state->lencode >= state->codes &&\n        state->lencode <= state->codes + ENOUGH - 1) {\n        copy->lencode = copy->codes + (state->lencode - state->codes);\n        copy->distcode = copy->codes + (state->distcode - state->codes);\n    }\n    copy->next = copy->codes + (state->next - state->codes);\n    if (window != Z_NULL) {\n        wsize = 1U << state->wbits;\n        zmemcpy(window, state->window, wsize);\n    }\n    copy->window = window;\n    dest->state = (struct internal_state FAR *)copy;\n    return Z_OK;\n}\n\nint ZEXPORT inflateUndermine(strm, subvert)\nz_streamp strm;\nint subvert;\n{\n    struct inflate_state FAR *state;\n\n    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;\n    state = (struct inflate_state FAR *)strm->state;\n    state->sane = !subvert;\n#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n    return Z_OK;\n#else\n    state->sane = 1;\n    return Z_DATA_ERROR;\n#endif\n}\n\nlong ZEXPORT inflateMark(strm)\nz_streamp strm;\n{\n    struct inflate_state FAR *state;\n\n    if (strm == Z_NULL || strm->state == Z_NULL) return -1L << 16;\n    state = (struct inflate_state FAR *)strm->state;\n    return ((long)(state->back) << 16) +\n        (state->mode == COPY ? state->length :\n            (state->mode == MATCH ? state->was - state->length : 0));\n}\n"
  },
  {
    "path": "external/zlib/inflate.h",
    "content": "/* inflate.h -- internal inflate state definition\n * Copyright (C) 1995-2009 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n/* WARNING: this file should *not* be used by applications. It is\n   part of the implementation of the compression library and is\n   subject to change. Applications should only use zlib.h.\n */\n\n/* define NO_GZIP when compiling if you want to disable gzip header and\n   trailer decoding by inflate().  NO_GZIP would be used to avoid linking in\n   the crc code when it is not needed.  For shared libraries, gzip decoding\n   should be left enabled. */\n#ifndef NO_GZIP\n#  define GUNZIP\n#endif\n\n/* Possible inflate modes between inflate() calls */\ntypedef enum {\n    HEAD,       /* i: waiting for magic header */\n    FLAGS,      /* i: waiting for method and flags (gzip) */\n    TIME,       /* i: waiting for modification time (gzip) */\n    OS,         /* i: waiting for extra flags and operating system (gzip) */\n    EXLEN,      /* i: waiting for extra length (gzip) */\n    EXTRA,      /* i: waiting for extra bytes (gzip) */\n    NAME,       /* i: waiting for end of file name (gzip) */\n    COMMENT,    /* i: waiting for end of comment (gzip) */\n    HCRC,       /* i: waiting for header crc (gzip) */\n    DICTID,     /* i: waiting for dictionary check value */\n    DICT,       /* waiting for inflateSetDictionary() call */\n        TYPE,       /* i: waiting for type bits, including last-flag bit */\n        TYPEDO,     /* i: same, but skip check to exit inflate on new block */\n        STORED,     /* i: waiting for stored size (length and complement) */\n        COPY_,      /* i/o: same as COPY below, but only first time in */\n        COPY,       /* i/o: waiting for input or output to copy stored block */\n        TABLE,      /* i: waiting for dynamic block table lengths */\n        LENLENS,    /* i: waiting for code length code lengths */\n        CODELENS,   /* i: waiting for length/lit and distance code lengths */\n            LEN_,       /* i: same as LEN below, but only first time in */\n            LEN,        /* i: waiting for length/lit/eob code */\n            LENEXT,     /* i: waiting for length extra bits */\n            DIST,       /* i: waiting for distance code */\n            DISTEXT,    /* i: waiting for distance extra bits */\n            MATCH,      /* o: waiting for output space to copy string */\n            LIT,        /* o: waiting for output space to write literal */\n    CHECK,      /* i: waiting for 32-bit check value */\n    LENGTH,     /* i: waiting for 32-bit length (gzip) */\n    DONE,       /* finished check, done -- remain here until reset */\n    BAD,        /* got a data error -- remain here until reset */\n    MEM,        /* got an inflate() memory error -- remain here until reset */\n    SYNC        /* looking for synchronization bytes to restart inflate() */\n} inflate_mode;\n\n/*\n    State transitions between above modes -\n\n    (most modes can go to BAD or MEM on error -- not shown for clarity)\n\n    Process header:\n        HEAD -> (gzip) or (zlib) or (raw)\n        (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME -> COMMENT ->\n                  HCRC -> TYPE\n        (zlib) -> DICTID or TYPE\n        DICTID -> DICT -> TYPE\n        (raw) -> TYPEDO\n    Read deflate blocks:\n            TYPE -> TYPEDO -> STORED or TABLE or LEN_ or CHECK\n            STORED -> COPY_ -> COPY -> TYPE\n            TABLE -> LENLENS -> CODELENS -> LEN_\n            LEN_ -> LEN\n    Read deflate codes in fixed or dynamic block:\n                LEN -> LENEXT or LIT or TYPE\n                LENEXT -> DIST -> DISTEXT -> MATCH -> LEN\n                LIT -> LEN\n    Process trailer:\n        CHECK -> LENGTH -> DONE\n */\n\n/* state maintained between inflate() calls.  Approximately 10K bytes. */\nstruct inflate_state {\n    inflate_mode mode;          /* current inflate mode */\n    int last;                   /* true if processing last block */\n    int wrap;                   /* bit 0 true for zlib, bit 1 true for gzip */\n    int havedict;               /* true if dictionary provided */\n    int flags;                  /* gzip header method and flags (0 if zlib) */\n    unsigned dmax;              /* zlib header max distance (INFLATE_STRICT) */\n    unsigned long check;        /* protected copy of check value */\n    unsigned long total;        /* protected copy of output count */\n    gz_headerp head;            /* where to save gzip header information */\n        /* sliding window */\n    unsigned wbits;             /* log base 2 of requested window size */\n    unsigned wsize;             /* window size or zero if not using window */\n    unsigned whave;             /* valid bytes in the window */\n    unsigned wnext;             /* window write index */\n    unsigned char FAR *window;  /* allocated sliding window, if needed */\n        /* bit accumulator */\n    unsigned long hold;         /* input bit accumulator */\n    unsigned bits;              /* number of bits in \"in\" */\n        /* for string and stored block copying */\n    unsigned length;            /* literal or length of data to copy */\n    unsigned offset;            /* distance back to copy string from */\n        /* for table and code decoding */\n    unsigned extra;             /* extra bits needed */\n        /* fixed and dynamic code tables */\n    code const FAR *lencode;    /* starting table for length/literal codes */\n    code const FAR *distcode;   /* starting table for distance codes */\n    unsigned lenbits;           /* index bits for lencode */\n    unsigned distbits;          /* index bits for distcode */\n        /* dynamic table building */\n    unsigned ncode;             /* number of code length code lengths */\n    unsigned nlen;              /* number of length code lengths */\n    unsigned ndist;             /* number of distance code lengths */\n    unsigned have;              /* number of code lengths in lens[] */\n    code FAR *next;             /* next available space in codes[] */\n    unsigned short lens[320];   /* temporary storage for code lengths */\n    unsigned short work[288];   /* work area for code table building */\n    code codes[ENOUGH];         /* space for code tables */\n    int sane;                   /* if false, allow invalid distance too far */\n    int back;                   /* bits back of last unprocessed length/lit */\n    unsigned was;               /* initial length of match */\n};\n"
  },
  {
    "path": "external/zlib/inftrees.c",
    "content": "/* inftrees.c -- generate Huffman trees for efficient decoding\n * Copyright (C) 1995-2010 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n#include \"zutil.h\"\n#include \"inftrees.h\"\n\n#define MAXBITS 15\n\nconst char inflate_copyright[] =\n   \" inflate 1.2.5 Copyright 1995-2010 Mark Adler \";\n/*\n  If you use the zlib library in a product, an acknowledgment is welcome\n  in the documentation of your product. If for some reason you cannot\n  include such an acknowledgment, I would appreciate that you keep this\n  copyright string in the executable of your product.\n */\n\n/*\n   Build a set of tables to decode the provided canonical Huffman code.\n   The code lengths are lens[0..codes-1].  The result starts at *table,\n   whose indices are 0..2^bits-1.  work is a writable array of at least\n   lens shorts, which is used as a work area.  type is the type of code\n   to be generated, CODES, LENS, or DISTS.  On return, zero is success,\n   -1 is an invalid code, and +1 means that ENOUGH isn't enough.  table\n   on return points to the next available entry's address.  bits is the\n   requested root table index bits, and on return it is the actual root\n   table index bits.  It will differ if the request is greater than the\n   longest code or if it is less than the shortest code.\n */\nint ZLIB_INTERNAL inflate_table(type, lens, codes, table, bits, work)\ncodetype type;\nunsigned short FAR *lens;\nunsigned codes;\ncode FAR * FAR *table;\nunsigned FAR *bits;\nunsigned short FAR *work;\n{\n    unsigned len;               /* a code's length in bits */\n    unsigned sym;               /* index of code symbols */\n    unsigned min, max;          /* minimum and maximum code lengths */\n    unsigned root;              /* number of index bits for root table */\n    unsigned curr;              /* number of index bits for current table */\n    unsigned drop;              /* code bits to drop for sub-table */\n    int left;                   /* number of prefix codes available */\n    unsigned used;              /* code entries in table used */\n    unsigned huff;              /* Huffman code */\n    unsigned incr;              /* for incrementing code, index */\n    unsigned fill;              /* index for replicating entries */\n    unsigned low;               /* low bits for current root entry */\n    unsigned mask;              /* mask for low root bits */\n    code here;                  /* table entry for duplication */\n    code FAR *next;             /* next available space in table */\n    const unsigned short FAR *base;     /* base value table to use */\n    const unsigned short FAR *extra;    /* extra bits table to use */\n    int end;                    /* use base and extra for symbol > end */\n    unsigned short count[MAXBITS+1];    /* number of codes of each length */\n    unsigned short offs[MAXBITS+1];     /* offsets in table for each length */\n    static const unsigned short lbase[31] = { /* Length codes 257..285 base */\n        3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n        35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};\n    static const unsigned short lext[31] = { /* Length codes 257..285 extra */\n        16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n        19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 73, 195};\n    static const unsigned short dbase[32] = { /* Distance codes 0..29 base */\n        1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n        257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n        8193, 12289, 16385, 24577, 0, 0};\n    static const unsigned short dext[32] = { /* Distance codes 0..29 extra */\n        16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n        23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n        28, 28, 29, 29, 64, 64};\n\n    /*\n       Process a set of code lengths to create a canonical Huffman code.  The\n       code lengths are lens[0..codes-1].  Each length corresponds to the\n       symbols 0..codes-1.  The Huffman code is generated by first sorting the\n       symbols by length from short to long, and retaining the symbol order\n       for codes with equal lengths.  Then the code starts with all zero bits\n       for the first code of the shortest length, and the codes are integer\n       increments for the same length, and zeros are appended as the length\n       increases.  For the deflate format, these bits are stored backwards\n       from their more natural integer increment ordering, and so when the\n       decoding tables are built in the large loop below, the integer codes\n       are incremented backwards.\n\n       This routine assumes, but does not check, that all of the entries in\n       lens[] are in the range 0..MAXBITS.  The caller must assure this.\n       1..MAXBITS is interpreted as that code length.  zero means that that\n       symbol does not occur in this code.\n\n       The codes are sorted by computing a count of codes for each length,\n       creating from that a table of starting indices for each length in the\n       sorted table, and then entering the symbols in order in the sorted\n       table.  The sorted table is work[], with that space being provided by\n       the caller.\n\n       The length counts are used for other purposes as well, i.e. finding\n       the minimum and maximum length codes, determining if there are any\n       codes at all, checking for a valid set of lengths, and looking ahead\n       at length counts to determine sub-table sizes when building the\n       decoding tables.\n     */\n\n    /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n    for (len = 0; len <= MAXBITS; len++)\n        count[len] = 0;\n    for (sym = 0; sym < codes; sym++)\n        count[lens[sym]]++;\n\n    /* bound code lengths, force root to be within code lengths */\n    root = *bits;\n    for (max = MAXBITS; max >= 1; max--)\n        if (count[max] != 0) break;\n    if (root > max) root = max;\n    if (max == 0) {                     /* no symbols to code at all */\n        here.op = (unsigned char)64;    /* invalid code marker */\n        here.bits = (unsigned char)1;\n        here.val = (unsigned short)0;\n        *(*table)++ = here;             /* make a table to force an error */\n        *(*table)++ = here;\n        *bits = 1;\n        return 0;     /* no symbols, but wait for decoding to report error */\n    }\n    for (min = 1; min < max; min++)\n        if (count[min] != 0) break;\n    if (root < min) root = min;\n\n    /* check for an over-subscribed or incomplete set of lengths */\n    left = 1;\n    for (len = 1; len <= MAXBITS; len++) {\n        left <<= 1;\n        left -= count[len];\n        if (left < 0) return -1;        /* over-subscribed */\n    }\n    if (left > 0 && (type == CODES || max != 1))\n        return -1;                      /* incomplete set */\n\n    /* generate offsets into symbol table for each length for sorting */\n    offs[1] = 0;\n    for (len = 1; len < MAXBITS; len++)\n        offs[len + 1] = offs[len] + count[len];\n\n    /* sort symbols by length, by symbol order within each length */\n    for (sym = 0; sym < codes; sym++)\n        if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym;\n\n    /*\n       Create and fill in decoding tables.  In this loop, the table being\n       filled is at next and has curr index bits.  The code being used is huff\n       with length len.  That code is converted to an index by dropping drop\n       bits off of the bottom.  For codes where len is less than drop + curr,\n       those top drop + curr - len bits are incremented through all values to\n       fill the table with replicated entries.\n\n       root is the number of index bits for the root table.  When len exceeds\n       root, sub-tables are created pointed to by the root entry with an index\n       of the low root bits of huff.  This is saved in low to check for when a\n       new sub-table should be started.  drop is zero when the root table is\n       being filled, and drop is root when sub-tables are being filled.\n\n       When a new sub-table is needed, it is necessary to look ahead in the\n       code lengths to determine what size sub-table is needed.  The length\n       counts are used for this, and so count[] is decremented as codes are\n       entered in the tables.\n\n       used keeps track of how many table entries have been allocated from the\n       provided *table space.  It is checked for LENS and DIST tables against\n       the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n       the initial root table size constants.  See the comments in inftrees.h\n       for more information.\n\n       sym increments through all symbols, and the loop terminates when\n       all codes of length max, i.e. all codes, have been processed.  This\n       routine permits incomplete codes, so another loop after this one fills\n       in the rest of the decoding tables with invalid code markers.\n     */\n\n    /* set up for code type */\n    switch (type) {\n    case CODES:\n        base = extra = work;    /* dummy value--not used */\n        end = 19;\n        break;\n    case LENS:\n        base = lbase;\n        base -= 257;\n        extra = lext;\n        extra -= 257;\n        end = 256;\n        break;\n    default:            /* DISTS */\n        base = dbase;\n        extra = dext;\n        end = -1;\n    }\n\n    /* initialize state for loop */\n    huff = 0;                   /* starting code */\n    sym = 0;                    /* starting code symbol */\n    len = min;                  /* starting code length */\n    next = *table;              /* current table to fill in */\n    curr = root;                /* current table index bits */\n    drop = 0;                   /* current bits to drop from code for index */\n    low = (unsigned)(-1);       /* trigger new sub-table when len > root */\n    used = 1U << root;          /* use root table entries */\n    mask = used - 1;            /* mask for comparing low */\n\n    /* check available table space */\n    if ((type == LENS && used >= ENOUGH_LENS) ||\n        (type == DISTS && used >= ENOUGH_DISTS))\n        return 1;\n\n    /* process all codes and make table entries */\n    for (;;) {\n        /* create table entry */\n        here.bits = (unsigned char)(len - drop);\n        if ((int)(work[sym]) < end) {\n            here.op = (unsigned char)0;\n            here.val = work[sym];\n        }\n        else if ((int)(work[sym]) > end) {\n            here.op = (unsigned char)(extra[work[sym]]);\n            here.val = base[work[sym]];\n        }\n        else {\n            here.op = (unsigned char)(32 + 64);         /* end of block */\n            here.val = 0;\n        }\n\n        /* replicate for those indices with low len bits equal to huff */\n        incr = 1U << (len - drop);\n        fill = 1U << curr;\n        min = fill;                 /* save offset to next table */\n        do {\n            fill -= incr;\n            next[(huff >> drop) + fill] = here;\n        } while (fill != 0);\n\n        /* backwards increment the len-bit code huff */\n        incr = 1U << (len - 1);\n        while (huff & incr)\n            incr >>= 1;\n        if (incr != 0) {\n            huff &= incr - 1;\n            huff += incr;\n        }\n        else\n            huff = 0;\n\n        /* go to next symbol, update count, len */\n        sym++;\n        if (--(count[len]) == 0) {\n            if (len == max) break;\n            len = lens[work[sym]];\n        }\n\n        /* create new sub-table if needed */\n        if (len > root && (huff & mask) != low) {\n            /* if first time, transition to sub-tables */\n            if (drop == 0)\n                drop = root;\n\n            /* increment past last table */\n            next += min;            /* here min is 1 << curr */\n\n            /* determine length of next table */\n            curr = len - drop;\n            left = (int)(1 << curr);\n            while (curr + drop < max) {\n                left -= count[curr + drop];\n                if (left <= 0) break;\n                curr++;\n                left <<= 1;\n            }\n\n            /* check for enough space */\n            used += 1U << curr;\n            if ((type == LENS && used >= ENOUGH_LENS) ||\n                (type == DISTS && used >= ENOUGH_DISTS))\n                return 1;\n\n            /* point entry in root table to sub-table */\n            low = huff & mask;\n            (*table)[low].op = (unsigned char)curr;\n            (*table)[low].bits = (unsigned char)root;\n            (*table)[low].val = (unsigned short)(next - *table);\n        }\n    }\n\n    /*\n       Fill in rest of table for incomplete codes.  This loop is similar to the\n       loop above in incrementing huff for table indices.  It is assumed that\n       len is equal to curr + drop, so there is no loop needed to increment\n       through high index bits.  When the current sub-table is filled, the loop\n       drops back to the root table to fill in any remaining entries there.\n     */\n    here.op = (unsigned char)64;                /* invalid code marker */\n    here.bits = (unsigned char)(len - drop);\n    here.val = (unsigned short)0;\n    while (huff != 0) {\n        /* when done with sub-table, drop back to root table */\n        if (drop != 0 && (huff & mask) != low) {\n            drop = 0;\n            len = root;\n            next = *table;\n            here.bits = (unsigned char)len;\n        }\n\n        /* put invalid code marker in table */\n        next[huff >> drop] = here;\n\n        /* backwards increment the len-bit code huff */\n        incr = 1U << (len - 1);\n        while (huff & incr)\n            incr >>= 1;\n        if (incr != 0) {\n            huff &= incr - 1;\n            huff += incr;\n        }\n        else\n            huff = 0;\n    }\n\n    /* set return parameters */\n    *table += used;\n    *bits = root;\n    return 0;\n}\n"
  },
  {
    "path": "external/zlib/inftrees.h",
    "content": "/* inftrees.h -- header to use inftrees.c\n * Copyright (C) 1995-2005, 2010 Mark Adler\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n/* WARNING: this file should *not* be used by applications. It is\n   part of the implementation of the compression library and is\n   subject to change. Applications should only use zlib.h.\n */\n\n/* Structure for decoding tables.  Each entry provides either the\n   information needed to do the operation requested by the code that\n   indexed that table entry, or it provides a pointer to another\n   table that indexes more bits of the code.  op indicates whether\n   the entry is a pointer to another table, a literal, a length or\n   distance, an end-of-block, or an invalid code.  For a table\n   pointer, the low four bits of op is the number of index bits of\n   that table.  For a length or distance, the low four bits of op\n   is the number of extra bits to get after the code.  bits is\n   the number of bits in this code or part of the code to drop off\n   of the bit buffer.  val is the actual byte to output in the case\n   of a literal, the base length or distance, or the offset from\n   the current table to the next table.  Each entry is four bytes. */\ntypedef struct {\n    unsigned char op;           /* operation, extra bits, table bits */\n    unsigned char bits;         /* bits in this part of the code */\n    unsigned short val;         /* offset in table or code value */\n} code;\n\n/* op values as set by inflate_table():\n    00000000 - literal\n    0000tttt - table link, tttt != 0 is the number of table index bits\n    0001eeee - length or distance, eeee is the number of extra bits\n    01100000 - end of block\n    01000000 - invalid code\n */\n\n/* Maximum size of the dynamic table.  The maximum number of code structures is\n   1444, which is the sum of 852 for literal/length codes and 592 for distance\n   codes.  These values were found by exhaustive searches using the program\n   examples/enough.c found in the zlib distribtution.  The arguments to that\n   program are the number of symbols, the initial root table size, and the\n   maximum bit length of a code.  \"enough 286 9 15\" for literal/length codes\n   returns returns 852, and \"enough 30 6 15\" for distance codes returns 592.\n   The initial root table size (9 or 6) is found in the fifth argument of the\n   inflate_table() calls in inflate.c and infback.c.  If the root table size is\n   changed, then these maximum sizes would be need to be recalculated and\n   updated. */\n#define ENOUGH_LENS 852\n#define ENOUGH_DISTS 592\n#define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS)\n\n/* Type of code to build for inflate_table() */\ntypedef enum {\n    CODES,\n    LENS,\n    DISTS\n} codetype;\n\nint ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens,\n                             unsigned codes, code FAR * FAR *table,\n                             unsigned FAR *bits, unsigned short FAR *work));\n"
  },
  {
    "path": "external/zlib/make_vms.com",
    "content": "$! make libz under VMS written by\n$! Martin P.J. Zinser\n$!\n$! In case of problems with the install you might contact me at\n$! zinser@zinser.no-ip.info(preferred) or\n$! zinser@sysdev.deutsche-boerse.com (work)\n$!\n$! Make procedure history for Zlib\n$!\n$!------------------------------------------------------------------------------\n$! Version history\n$! 0.01 20060120 First version to receive a number\n$! 0.02 20061008 Adapt to new Makefile.in\n$! 0.03 20091224 Add support for large file check\n$! 0.04 20100110 Add new gzclose, gzlib, gzread, gzwrite\n$! 0.05 20100221 Exchange zlibdefs.h by zconf.h.in\n$!\n$ on error then goto err_exit\n$ set proc/parse=ext\n$!\n$ true  = 1\n$ false = 0\n$ tmpnam = \"temp_\" + f$getjpi(\"\",\"pid\")\n$ tt = tmpnam + \".txt\"\n$ tc = tmpnam + \".c\"\n$ th = tmpnam + \".h\"\n$ define/nolog tconfig 'th'\n$ its_decc = false\n$ its_vaxc = false\n$ its_gnuc = false\n$ s_case   = False\n$!\n$! Setup variables holding \"config\" information\n$!\n$ Make    = \"\"\n$ name     = \"Zlib\"\n$ version  = \"?.?.?\"\n$ v_string = \"ZLIB_VERSION\"\n$ v_file   = \"zlib.h\"\n$ ccopt   = \"\"\n$ lopts   = \"\"\n$ dnsrl   = \"\"\n$ aconf_in_file = \"zconf.h.in#zconf.h_in\"\n$ conf_check_string = \"\"\n$ linkonly = false\n$ optfile  = name + \".opt\"\n$ libdefs  = \"\"\n$ axp      = f$getsyi(\"HW_MODEL\").ge.1024 .and. f$getsyi(\"HW_MODEL\").lt.4096\n$!\n$ whoami = f$parse(f$enviornment(\"Procedure\"),,,,\"NO_CONCEAL\")\n$ mydef  = F$parse(whoami,,,\"DEVICE\")\n$ mydir  = f$parse(whoami,,,\"DIRECTORY\") - \"][\"\n$ myproc = f$parse(whoami,,,\"Name\") + f$parse(whoami,,,\"type\")\n$!\n$! Check for MMK/MMS\n$!\n$ If F$Search (\"Sys$System:MMS.EXE\") .nes. \"\" Then Make = \"MMS\"\n$ If F$Type (MMK) .eqs. \"STRING\" Then Make = \"MMK\"\n$!\n$!\n$ gosub find_version\n$!\n$  open/write topt tmp.opt\n$  open/write optf 'optfile'\n$!\n$ gosub check_opts\n$!\n$! Look for the compiler used\n$!\n$ gosub check_compiler\n$ close topt\n$!\n$ if its_decc\n$ then\n$   ccopt = \"/prefix=all\" + ccopt\n$   if f$trnlnm(\"SYS\") .eqs. \"\"\n$   then\n$     if axp\n$     then\n$       define sys sys$library:\n$     else\n$       ccopt = \"/decc\" + ccopt\n$       define sys decc$library_include:\n$     endif\n$   endif\n$ endif\n$ if its_vaxc .or. its_gnuc\n$ then\n$    if f$trnlnm(\"SYS\").eqs.\"\" then define sys sys$library:\n$ endif\n$!\n$! Build a fake configure input header\n$!\n$ open/write conf_hin config.hin\n$ write conf_hin \"#undef _LARGEFILE64_SOURCE\"\n$ close conf_hin\n$!\n$!\n$ i = 0\n$FIND_ACONF:\n$ fname = f$element(i,\"#\",aconf_in_file)\n$ if fname .eqs. \"#\" then goto AMISS_ERR\n$ if f$search(fname) .eqs. \"\"\n$ then\n$   i = i + 1\n$   goto find_aconf\n$ endif\n$ open/read/err=aconf_err aconf_in 'fname'\n$ open/write aconf zconf.h\n$ACONF_LOOP:\n$ read/end_of_file=aconf_exit aconf_in line\n$ work = f$edit(line, \"compress,trim\")\n$ if f$extract(0,6,work) .nes. \"#undef\"\n$ then\n$   if f$extract(0,12,work) .nes. \"#cmakedefine\"\n$   then\n$       write aconf line\n$   endif\n$ else\n$   cdef = f$element(1,\" \",work)\n$   gosub check_config\n$ endif\n$ goto aconf_loop\n$ACONF_EXIT:\n$ write aconf \"#define VMS 1\"\n$ write aconf \"#include <unistd.h>\"\n$ write aconf \"#include <unixio.h>\"\n$ write aconf \"#ifdef _LARGEFILE\"\n$ write aconf \"#define off64_t __off64_t\"\n$ write aconf \"#define fopen64 fopen\"\n$ write aconf \"#define fseeko64 fseeko\"\n$ write aconf \"#define lseek64 lseek\"\n$ write aconf \"#define ftello64 ftell\"\n$ write aconf \"#endif\"\n$ close aconf_in\n$ close aconf\n$ if f$search(\"''th'\") .nes. \"\" then delete 'th';*\n$! Build the thing plain or with mms\n$!\n$ write sys$output \"Compiling Zlib sources ...\"\n$ if make.eqs.\"\"\n$  then\n$   dele example.obj;*,minigzip.obj;*\n$   CALL MAKE adler32.OBJ \"CC ''CCOPT' adler32\" -\n                adler32.c zlib.h zconf.h\n$   CALL MAKE compress.OBJ \"CC ''CCOPT' compress\" -\n                compress.c zlib.h zconf.h\n$   CALL MAKE crc32.OBJ \"CC ''CCOPT' crc32\" -\n                crc32.c zlib.h zconf.h\n$   CALL MAKE deflate.OBJ \"CC ''CCOPT' deflate\" -\n                deflate.c deflate.h zutil.h zlib.h zconf.h\n$   CALL MAKE gzclose.OBJ \"CC ''CCOPT' gzclose\" -\n                gzclose.c zutil.h zlib.h zconf.h\n$   CALL MAKE gzlib.OBJ \"CC ''CCOPT' gzlib\" -\n                gzlib.c zutil.h zlib.h zconf.h\n$   CALL MAKE gzread.OBJ \"CC ''CCOPT' gzread\" -\n                gzread.c zutil.h zlib.h zconf.h\n$   CALL MAKE gzwrite.OBJ \"CC ''CCOPT' gzwrite\" -\n                gzwrite.c zutil.h zlib.h zconf.h\n$   CALL MAKE infback.OBJ \"CC ''CCOPT' infback\" -\n                infback.c zutil.h inftrees.h inflate.h inffast.h inffixed.h\n$   CALL MAKE inffast.OBJ \"CC ''CCOPT' inffast\" -\n                inffast.c zutil.h zlib.h zconf.h inffast.h\n$   CALL MAKE inflate.OBJ \"CC ''CCOPT' inflate\" -\n                inflate.c zutil.h zlib.h zconf.h infblock.h\n$   CALL MAKE inftrees.OBJ \"CC ''CCOPT' inftrees\" -\n                inftrees.c zutil.h zlib.h zconf.h inftrees.h\n$   CALL MAKE trees.OBJ \"CC ''CCOPT' trees\" -\n                trees.c deflate.h zutil.h zlib.h zconf.h\n$   CALL MAKE uncompr.OBJ \"CC ''CCOPT' uncompr\" -\n                uncompr.c zlib.h zconf.h\n$   CALL MAKE zutil.OBJ \"CC ''CCOPT' zutil\" -\n                zutil.c zutil.h zlib.h zconf.h\n$   write sys$output \"Building Zlib ...\"\n$   CALL MAKE libz.OLB \"lib/crea libz.olb *.obj\" *.OBJ\n$   write sys$output \"Building example...\"\n$   CALL MAKE example.OBJ \"CC ''CCOPT' example\" -\n                example.c zlib.h zconf.h\n$   call make example.exe \"LINK example,libz.olb/lib\" example.obj libz.olb\n$   if f$search(\"x11vms:xvmsutils.olb\") .nes. \"\"\n$   then\n$     write sys$output \"Building minigzip...\"\n$     CALL MAKE minigzip.OBJ \"CC ''CCOPT' minigzip\" -\n                minigzip.c zlib.h zconf.h\n$     call make minigzip.exe -\n                \"LINK minigzip,libz.olb/lib,x11vms:xvmsutils.olb/lib\" -\n                minigzip.obj libz.olb\n$   endif\n$  else\n$   gosub crea_mms\n$   write sys$output \"Make ''name' ''version' with ''Make' \"\n$   'make'\n$  endif\n$!\n$! Alpha gets a shareable image\n$!\n$ If axp\n$ Then\n$   gosub crea_olist\n$   write sys$output \"Creating libzshr.exe\"\n$   call anal_obj_axp modules.opt _link.opt\n$   if s_case\n$   then\n$      open/append optf modules.opt\n$      write optf \"case_sensitive=YES\"\n$      close optf\n$   endif\n$   LINK_'lopts'/SHARE=libzshr.exe modules.opt/opt,_link.opt/opt\n$ endif\n$ write sys$output \"Zlib build completed\"\n$ exit\n$CC_ERR:\n$ write sys$output \"C compiler required to build ''name'\"\n$ goto err_exit\n$ERR_EXIT:\n$ set message/facil/ident/sever/text\n$ close/nolog optf\n$ close/nolog topt\n$ close/nolog conf_hin\n$ close/nolog aconf_in\n$ close/nolog aconf\n$ close/nolog out\n$ close/nolog min\n$ close/nolog mod\n$ close/nolog h_in\n$ write sys$output \"Exiting...\"\n$ exit 2\n$!\n$!\n$MAKE: SUBROUTINE   !SUBROUTINE TO CHECK DEPENDENCIES\n$ V = 'F$Verify(0)\n$! P1 = What we are trying to make\n$! P2 = Command to make it\n$! P3 - P8  What it depends on\n$\n$ If F$Search(P1) .Eqs. \"\" Then Goto Makeit\n$ Time = F$CvTime(F$File(P1,\"RDT\"))\n$arg=3\n$Loop:\n$       Argument = P'arg\n$       If Argument .Eqs. \"\" Then Goto Exit\n$       El=0\n$Loop2:\n$       File = F$Element(El,\" \",Argument)\n$       If File .Eqs. \" \" Then Goto Endl\n$       AFile = \"\"\n$Loop3:\n$       OFile = AFile\n$       AFile = F$Search(File)\n$       If AFile .Eqs. \"\" .Or. AFile .Eqs. OFile Then Goto NextEl\n$       If F$CvTime(F$File(AFile,\"RDT\")) .Ges. Time Then Goto Makeit\n$       Goto Loop3\n$NextEL:\n$       El = El + 1\n$       Goto Loop2\n$EndL:\n$ arg=arg+1\n$ If arg .Le. 8 Then Goto Loop\n$ Goto Exit\n$\n$Makeit:\n$ VV=F$VERIFY(0)\n$ write sys$output P2\n$ 'P2\n$ VV='F$Verify(VV)\n$Exit:\n$ If V Then Set Verify\n$ENDSUBROUTINE\n$!------------------------------------------------------------------------------\n$!\n$! Check command line options and set symbols accordingly\n$!\n$!------------------------------------------------------------------------------\n$! Version history\n$! 0.01 20041206 First version to receive a number\n$! 0.02 20060126 Add new \"HELP\" target\n$ CHECK_OPTS:\n$ i = 1\n$ OPT_LOOP:\n$ if i .lt. 9\n$ then\n$   cparm = f$edit(p'i',\"upcase\")\n$!\n$! Check if parameter actually contains something\n$!\n$   if f$edit(cparm,\"trim\") .nes. \"\"\n$   then\n$     if cparm .eqs. \"DEBUG\"\n$     then\n$       ccopt = ccopt + \"/noopt/deb\"\n$       lopts = lopts + \"/deb\"\n$     endif\n$     if f$locate(\"CCOPT=\",cparm) .lt. f$length(cparm)\n$     then\n$       start = f$locate(\"=\",cparm) + 1\n$       len   = f$length(cparm) - start\n$       ccopt = ccopt + f$extract(start,len,cparm)\n$       if f$locate(\"AS_IS\",f$edit(ccopt,\"UPCASE\")) .lt. f$length(ccopt) -\n          then s_case = true\n$     endif\n$     if cparm .eqs. \"LINK\" then linkonly = true\n$     if f$locate(\"LOPTS=\",cparm) .lt. f$length(cparm)\n$     then\n$       start = f$locate(\"=\",cparm) + 1\n$       len   = f$length(cparm) - start\n$       lopts = lopts + f$extract(start,len,cparm)\n$     endif\n$     if f$locate(\"CC=\",cparm) .lt. f$length(cparm)\n$     then\n$       start  = f$locate(\"=\",cparm) + 1\n$       len    = f$length(cparm) - start\n$       cc_com = f$extract(start,len,cparm)\n        if (cc_com .nes. \"DECC\") .and. -\n           (cc_com .nes. \"VAXC\") .and. -\n           (cc_com .nes. \"GNUC\")\n$       then\n$         write sys$output \"Unsupported compiler choice ''cc_com' ignored\"\n$         write sys$output \"Use DECC, VAXC, or GNUC instead\"\n$       else\n$         if cc_com .eqs. \"DECC\" then its_decc = true\n$         if cc_com .eqs. \"VAXC\" then its_vaxc = true\n$         if cc_com .eqs. \"GNUC\" then its_gnuc = true\n$       endif\n$     endif\n$     if f$locate(\"MAKE=\",cparm) .lt. f$length(cparm)\n$     then\n$       start  = f$locate(\"=\",cparm) + 1\n$       len    = f$length(cparm) - start\n$       mmks = f$extract(start,len,cparm)\n$       if (mmks .eqs. \"MMK\") .or. (mmks .eqs. \"MMS\")\n$       then\n$         make = mmks\n$       else\n$         write sys$output \"Unsupported make choice ''mmks' ignored\"\n$         write sys$output \"Use MMK or MMS instead\"\n$       endif\n$     endif\n$     if cparm .eqs. \"HELP\" then gosub bhelp\n$   endif\n$   i = i + 1\n$   goto opt_loop\n$ endif\n$ return\n$!------------------------------------------------------------------------------\n$!\n$! Look for the compiler used\n$!\n$! Version history\n$! 0.01 20040223 First version to receive a number\n$! 0.02 20040229 Save/set value of decc$no_rooted_search_lists\n$! 0.03 20060202 Extend handling of GNU C\n$! 0.04 20090402 Compaq -> hp\n$CHECK_COMPILER:\n$ if (.not. (its_decc .or. its_vaxc .or. its_gnuc))\n$ then\n$   its_decc = (f$search(\"SYS$SYSTEM:DECC$COMPILER.EXE\") .nes. \"\")\n$   its_vaxc = .not. its_decc .and. (F$Search(\"SYS$System:VAXC.Exe\") .nes. \"\")\n$   its_gnuc = .not. (its_decc .or. its_vaxc) .and. (f$trnlnm(\"gnu_cc\") .nes. \"\")\n$ endif\n$!\n$! Exit if no compiler available\n$!\n$ if (.not. (its_decc .or. its_vaxc .or. its_gnuc))\n$ then goto CC_ERR\n$ else\n$   if its_decc\n$   then\n$     write sys$output \"CC compiler check ... hp C\"\n$     if f$trnlnm(\"decc$no_rooted_search_lists\") .nes. \"\"\n$     then\n$       dnrsl = f$trnlnm(\"decc$no_rooted_search_lists\")\n$     endif\n$     define/nolog decc$no_rooted_search_lists 1\n$   else\n$     if its_vaxc then write sys$output \"CC compiler check ... VAX C\"\n$     if its_gnuc\n$     then\n$         write sys$output \"CC compiler check ... GNU C\"\n$         if f$trnlnm(topt) then write topt \"gnu_cc:[000000]gcclib.olb/lib\"\n$         if f$trnlnm(optf) then write optf \"gnu_cc:[000000]gcclib.olb/lib\"\n$         cc = \"gcc\"\n$     endif\n$     if f$trnlnm(topt) then write topt \"sys$share:vaxcrtl.exe/share\"\n$     if f$trnlnm(optf) then write optf \"sys$share:vaxcrtl.exe/share\"\n$   endif\n$ endif\n$ return\n$!------------------------------------------------------------------------------\n$!\n$! If MMS/MMK are available dump out the descrip.mms if required\n$!\n$CREA_MMS:\n$ write sys$output \"Creating descrip.mms...\"\n$ create descrip.mms\n$ open/append out descrip.mms\n$ copy sys$input: out\n$ deck\n# descrip.mms: MMS description file for building zlib on VMS\n# written by Martin P.J. Zinser\n# <zinser@zinser.no-ip.info or zinser@sysdev.deutsche-boerse.com>\n\nOBJS = adler32.obj, compress.obj, crc32.obj, gzclose.obj, gzlib.obj\\\n       gzread.obj, gzwrite.obj, uncompr.obj, infback.obj\\\n       deflate.obj, trees.obj, zutil.obj, inflate.obj, \\\n       inftrees.obj, inffast.obj\n\n$ eod\n$ write out \"CFLAGS=\", ccopt\n$ write out \"LOPTS=\", lopts\n$ copy sys$input: out\n$ deck\n\nall : example.exe minigzip.exe libz.olb\n        @ write sys$output \" Example applications available\"\n\nlibz.olb : libz.olb($(OBJS))\n\t@ write sys$output \" libz available\"\n\nexample.exe : example.obj libz.olb\n              link $(LOPTS) example,libz.olb/lib\n\nminigzip.exe : minigzip.obj libz.olb\n              link $(LOPTS) minigzip,libz.olb/lib,x11vms:xvmsutils.olb/lib\n\nclean :\n\tdelete *.obj;*,libz.olb;*,*.opt;*,*.exe;*\n\n\n# Other dependencies.\nadler32.obj  : adler32.c zutil.h zlib.h zconf.h\ncompress.obj : compress.c zlib.h zconf.h\ncrc32.obj    : crc32.c zutil.h zlib.h zconf.h\ndeflate.obj  : deflate.c deflate.h zutil.h zlib.h zconf.h\nexample.obj  : example.c zlib.h zconf.h\ngzclose.obj  : gzclose.c zutil.h zlib.h zconf.h\ngzlib.obj    : gzlib.c zutil.h zlib.h zconf.h\ngzread.obj   : gzread.c zutil.h zlib.h zconf.h\ngzwrite.obj  : gzwrite.c zutil.h zlib.h zconf.h\ninffast.obj  : inffast.c zutil.h zlib.h zconf.h inftrees.h inffast.h\ninflate.obj  : inflate.c zutil.h zlib.h zconf.h\ninftrees.obj : inftrees.c zutil.h zlib.h zconf.h inftrees.h\nminigzip.obj : minigzip.c zlib.h zconf.h\ntrees.obj    : trees.c deflate.h zutil.h zlib.h zconf.h\nuncompr.obj  : uncompr.c zlib.h zconf.h\nzutil.obj    : zutil.c zutil.h zlib.h zconf.h\ninfback.obj  : infback.c zutil.h inftrees.h inflate.h inffast.h inffixed.h\n$ eod\n$ close out\n$ return\n$!------------------------------------------------------------------------------\n$!\n$! Read list of core library sources from makefile.in and create options\n$! needed to build shareable image\n$!\n$CREA_OLIST:\n$ open/read min makefile.in\n$ open/write mod modules.opt\n$ src_check = \"OBJC =\"\n$MRLOOP:\n$ read/end=mrdone min rec\n$ if (f$extract(0,6,rec) .nes. src_check) then goto mrloop\n$ rec = rec - src_check\n$ gosub extra_filnam\n$ if (f$element(1,\"\\\",rec) .eqs. \"\\\") then goto mrdone\n$MRSLOOP:\n$ read/end=mrdone min rec\n$ gosub extra_filnam\n$ if (f$element(1,\"\\\",rec) .nes. \"\\\") then goto mrsloop\n$MRDONE:\n$ close min\n$ close mod\n$ return\n$!------------------------------------------------------------------------------\n$!\n$! Take record extracted in crea_olist and split it into single filenames\n$!\n$EXTRA_FILNAM:\n$ myrec = f$edit(rec - \"\\\", \"trim,compress\")\n$ i = 0\n$FELOOP:\n$ srcfil = f$element(i,\" \", myrec)\n$ if (srcfil .nes. \" \")\n$ then\n$   write mod f$parse(srcfil,,,\"NAME\"), \".obj\"\n$   i = i + 1\n$   goto feloop\n$ endif\n$ return\n$!------------------------------------------------------------------------------\n$!\n$! Find current Zlib version number\n$!\n$FIND_VERSION:\n$ open/read h_in 'v_file'\n$hloop:\n$ read/end=hdone h_in rec\n$ rec = f$edit(rec,\"TRIM\")\n$ if (f$extract(0,1,rec) .nes. \"#\") then goto hloop\n$ rec = f$edit(rec - \"#\", \"TRIM\")\n$ if f$element(0,\" \",rec) .nes. \"define\" then goto hloop\n$ if f$element(1,\" \",rec) .eqs. v_string\n$ then\n$   version = 'f$element(2,\" \",rec)'\n$   goto hdone\n$ endif\n$ goto hloop\n$hdone:\n$ close h_in\n$ return\n$!------------------------------------------------------------------------------\n$!\n$CHECK_CONFIG:\n$!\n$ in_ldef = f$locate(cdef,libdefs)\n$ if (in_ldef .lt. f$length(libdefs))\n$ then\n$   write aconf \"#define ''cdef' 1\"\n$   libdefs = f$extract(0,in_ldef,libdefs) + -\n              f$extract(in_ldef + f$length(cdef) + 1, -\n                        f$length(libdefs) - in_ldef - f$length(cdef) - 1, -\n                        libdefs)\n$ else\n$   if (f$type('cdef') .eqs. \"INTEGER\")\n$   then\n$     write aconf \"#define ''cdef' \", 'cdef'\n$   else\n$     if (f$type('cdef') .eqs. \"STRING\")\n$     then\n$       write aconf \"#define ''cdef' \", \"\"\"\", '''cdef'', \"\"\"\"\n$     else\n$       gosub check_cc_def\n$     endif\n$   endif\n$ endif\n$ return\n$!------------------------------------------------------------------------------\n$!\n$! Check if this is a define relating to the properties of the C/C++\n$! compiler\n$!\n$ CHECK_CC_DEF:\n$ if (cdef .eqs. \"_LARGEFILE64_SOURCE\")\n$ then\n$   copy sys$input: 'tc'\n$   deck\n#include \"tconfig\"\n#define _LARGEFILE\n#include <stdio.h>\n\nint main(){\nFILE *fp;\n  fp = fopen(\"temp.txt\",\"r\");\n  fseeko(fp,1,SEEK_SET);\n  fclose(fp);\n}\n\n$   eod\n$   test_inv = false\n$   comm_h = false\n$   gosub cc_prop_check\n$   return\n$ endif\n$ write aconf \"/* \", line, \" */\"\n$ return\n$!------------------------------------------------------------------------------\n$!\n$! Check for properties of C/C++ compiler\n$!\n$! Version history\n$! 0.01 20031020 First version to receive a number\n$! 0.02 20031022 Added logic for defines with value\n$! 0.03 20040309 Make sure local config file gets not deleted\n$! 0.04 20041230 Also write include for configure run\n$! 0.05 20050103 Add processing of \"comment defines\"\n$CC_PROP_CHECK:\n$ cc_prop = true\n$ is_need = false\n$ is_need = (f$extract(0,4,cdef) .eqs. \"NEED\") .or. (test_inv .eq. true)\n$ if f$search(th) .eqs. \"\" then create 'th'\n$ set message/nofac/noident/nosever/notext\n$ on error then continue\n$ cc 'tmpnam'\n$ if .not. ($status)  then cc_prop = false\n$ on error then continue\n$! The headers might lie about the capabilities of the RTL\n$ link 'tmpnam',tmp.opt/opt\n$ if .not. ($status)  then cc_prop = false\n$ set message/fac/ident/sever/text\n$ on error then goto err_exit\n$ delete/nolog 'tmpnam'.*;*/exclude='th'\n$ if (cc_prop .and. .not. is_need) .or. -\n     (.not. cc_prop .and. is_need)\n$ then\n$   write sys$output \"Checking for ''cdef'... yes\"\n$   if f$type('cdef_val'_yes) .nes. \"\"\n$   then\n$     if f$type('cdef_val'_yes) .eqs. \"INTEGER\" -\n         then call write_config f$fao(\"#define !AS !UL\",cdef,'cdef_val'_yes)\n$     if f$type('cdef_val'_yes) .eqs. \"STRING\" -\n         then call write_config f$fao(\"#define !AS !AS\",cdef,'cdef_val'_yes)\n$   else\n$     call write_config f$fao(\"#define !AS 1\",cdef)\n$   endif\n$   if (cdef .eqs. \"HAVE_FSEEKO\") .or. (cdef .eqs. \"_LARGE_FILES\") .or. -\n       (cdef .eqs. \"_LARGEFILE64_SOURCE\") then -\n      call write_config f$string(\"#define _LARGEFILE 1\")\n$ else\n$   write sys$output \"Checking for ''cdef'... no\"\n$   if (comm_h)\n$   then\n      call write_config f$fao(\"/* !AS */\",line)\n$   else\n$     if f$type('cdef_val'_no) .nes. \"\"\n$     then\n$       if f$type('cdef_val'_no) .eqs. \"INTEGER\" -\n           then call write_config f$fao(\"#define !AS !UL\",cdef,'cdef_val'_no)\n$       if f$type('cdef_val'_no) .eqs. \"STRING\" -\n           then call write_config f$fao(\"#define !AS !AS\",cdef,'cdef_val'_no)\n$     else\n$       call write_config f$fao(\"#undef !AS\",cdef)\n$     endif\n$   endif\n$ endif\n$ return\n$!------------------------------------------------------------------------------\n$!\n$! Check for properties of C/C++ compiler with multiple result values\n$!\n$! Version history\n$! 0.01 20040127 First version\n$! 0.02 20050103 Reconcile changes from cc_prop up to version 0.05\n$CC_MPROP_CHECK:\n$ cc_prop = true\n$ i    = 1\n$ idel = 1\n$ MT_LOOP:\n$ if f$type(result_'i') .eqs. \"STRING\"\n$ then\n$   set message/nofac/noident/nosever/notext\n$   on error then continue\n$   cc 'tmpnam'_'i'\n$   if .not. ($status)  then cc_prop = false\n$   on error then continue\n$! The headers might lie about the capabilities of the RTL\n$   link 'tmpnam'_'i',tmp.opt/opt\n$   if .not. ($status)  then cc_prop = false\n$   set message/fac/ident/sever/text\n$   on error then goto err_exit\n$   delete/nolog 'tmpnam'_'i'.*;*\n$   if (cc_prop)\n$   then\n$     write sys$output \"Checking for ''cdef'... \", mdef_'i'\n$     if f$type(mdef_'i') .eqs. \"INTEGER\" -\n         then call write_config f$fao(\"#define !AS !UL\",cdef,mdef_'i')\n$     if f$type('cdef_val'_yes) .eqs. \"STRING\" -\n         then call write_config f$fao(\"#define !AS !AS\",cdef,mdef_'i')\n$     goto msym_clean\n$   else\n$     i = i + 1\n$     goto mt_loop\n$   endif\n$ endif\n$ write sys$output \"Checking for ''cdef'... no\"\n$ call write_config f$fao(\"#undef !AS\",cdef)\n$ MSYM_CLEAN:\n$ if (idel .le. msym_max)\n$ then\n$   delete/sym mdef_'idel'\n$   idel = idel + 1\n$   goto msym_clean\n$ endif\n$ return\n$!------------------------------------------------------------------------------\n$!\n$! Analyze Object files for OpenVMS AXP to extract Procedure and Data\n$! information to build a symbol vector for a shareable image\n$! All the \"brains\" of this logic was suggested by Hartmut Becker\n$! (Hartmut.Becker@compaq.com). All the bugs were introduced by me\n$! (zinser@zinser.no-ip.info), so if you do have problem reports please do not\n$! bother Hartmut/HP, but get in touch with me\n$!\n$! Version history\n$! 0.01 20040406 Skip over shareable images in option file\n$! 0.02 20041109 Fix option file for shareable images with case_sensitive=YES\n$! 0.03 20050107 Skip over Identification labels in option file\n$! 0.04 20060117 Add uppercase alias to code compiled with /name=as_is\n$!\n$ ANAL_OBJ_AXP: Subroutine\n$ V = 'F$Verify(0)\n$ SAY := \"WRITE_ SYS$OUTPUT\"\n$\n$ IF F$SEARCH(\"''P1'\") .EQS. \"\"\n$ THEN\n$    SAY \"ANAL_OBJ_AXP-E-NOSUCHFILE:  Error, inputfile ''p1' not available\"\n$    goto exit_aa\n$ ENDIF\n$ IF \"''P2'\" .EQS. \"\"\n$ THEN\n$    SAY \"ANAL_OBJ_AXP:  Error, no output file provided\"\n$    goto exit_aa\n$ ENDIF\n$\n$ open/read in 'p1\n$ create a.tmp\n$ open/append atmp a.tmp\n$ loop:\n$ read/end=end_loop in line\n$ if f$locate(\"/SHARE\",f$edit(line,\"upcase\")) .lt. f$length(line)\n$ then\n$   write sys$output \"ANAL_SKP_SHR-i-skipshare, ''line'\"\n$   goto loop\n$ endif\n$ if f$locate(\"IDENTIFICATION=\",f$edit(line,\"upcase\")) .lt. f$length(line)\n$ then\n$   write sys$output \"ANAL_OBJ_AXP-i-ident: Identification \", -\n                     f$element(1,\"=\",line)\n$   goto loop\n$ endif\n$ f= f$search(line)\n$ if f .eqs. \"\"\n$ then\n$\twrite sys$output \"ANAL_OBJ_AXP-w-nosuchfile, ''line'\"\n$\tgoto loop\n$ endif\n$ define/user sys$output nl:\n$ define/user sys$error nl:\n$ anal/obj/gsd 'f /out=x.tmp\n$ open/read xtmp x.tmp\n$ XLOOP:\n$ read/end=end_xloop xtmp xline\n$ xline = f$edit(xline,\"compress\")\n$ write atmp xline\n$ goto xloop\n$ END_XLOOP:\n$ close xtmp\n$ goto loop\n$ end_loop:\n$ close in\n$ close atmp\n$ if f$search(\"a.tmp\") .eqs. \"\" -\n\tthen $ exit\n$ ! all global definitions\n$ search a.tmp \"symbol:\",\"EGSY$V_DEF 1\",\"EGSY$V_NORM 1\"/out=b.tmp\n$ ! all procedures\n$ search b.tmp \"EGSY$V_NORM 1\"/wind=(0,1) /out=c.tmp\n$ search c.tmp \"symbol:\"/out=d.tmp\n$ define/user sys$output nl:\n$ edito/edt/command=sys$input d.tmp\nsub/symbol: \"/symbol_vector=(/whole\nsub/\"/=PROCEDURE)/whole\nexit\n$ ! all data\n$ search b.tmp \"EGSY$V_DEF 1\"/wind=(0,1) /out=e.tmp\n$ search e.tmp \"symbol:\"/out=f.tmp\n$ define/user sys$output nl:\n$ edito/edt/command=sys$input f.tmp\nsub/symbol: \"/symbol_vector=(/whole\nsub/\"/=DATA)/whole\nexit\n$ sort/nodupl d.tmp,f.tmp g.tmp\n$ open/read raw_vector g.tmp\n$ open/write case_vector 'p2'\n$ RAWLOOP:\n$ read/end=end_rawloop raw_vector raw_element\n$ write case_vector raw_element\n$ if f$locate(\"=PROCEDURE)\",raw_element) .lt. f$length(raw_element)\n$ then\n$     name = f$element(1,\"=\",raw_element) - \"(\"\n$     if f$edit(name,\"UPCASE\") .nes. name then -\n          write case_vector f$fao(\" symbol_vector=(!AS/!AS=PROCEDURE)\", -\n\t                          f$edit(name,\"UPCASE\"), name)\n$ endif\n$ if f$locate(\"=DATA)\",raw_element) .lt. f$length(raw_element)\n$ then\n$     name = f$element(1,\"=\",raw_element) - \"(\"\n$     if f$edit(name,\"UPCASE\") .nes. name then -\n          write case_vector f$fao(\" symbol_vector=(!AS/!AS=DATA)\", -\n\t                          f$edit(name,\"UPCASE\"), name)\n$ endif\n$ goto rawloop\n$ END_RAWLOOP:\n$ close raw_vector\n$ close case_vector\n$ delete a.tmp;*,b.tmp;*,c.tmp;*,d.tmp;*,e.tmp;*,f.tmp;*,g.tmp;*\n$ if f$search(\"x.tmp\") .nes. \"\" -\n\tthen $ delete x.tmp;*\n$!\n$ EXIT_AA:\n$ if V then set verify\n$ endsubroutine\n$!------------------------------------------------------------------------------\n$!\n$! Write configuration to both permanent and temporary config file\n$!\n$! Version history\n$! 0.01 20031029 First version to receive a number\n$!\n$WRITE_CONFIG: SUBROUTINE\n$  write aconf 'p1'\n$  open/append confh 'th'\n$  write confh 'p1'\n$  close confh\n$ENDSUBROUTINE\n$!------------------------------------------------------------------------------\n"
  },
  {
    "path": "external/zlib/minigzip.c",
    "content": "/* minigzip.c -- simulate gzip using the zlib compression library\n * Copyright (C) 1995-2006, 2010 Jean-loup Gailly.\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n/*\n * minigzip is a minimal implementation of the gzip utility. This is\n * only an example of using zlib and isn't meant to replace the\n * full-featured gzip. No attempt is made to deal with file systems\n * limiting names to 14 or 8+3 characters, etc... Error checking is\n * very limited. So use minigzip only for testing; use gzip for the\n * real thing. On MSDOS, use only on file names without extension\n * or in pipe mode.\n */\n\n/* @(#) $Id$ */\n\n#include \"zlib.h\"\n#include <stdio.h>\n\n#ifdef STDC\n#  include <string.h>\n#  include <stdlib.h>\n#endif\n\n#ifdef USE_MMAP\n#  include <sys/types.h>\n#  include <sys/mman.h>\n#  include <sys/stat.h>\n#endif\n\n#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)\n#  include <fcntl.h>\n#  include <io.h>\n#  ifdef UNDER_CE\n#    include <stdlib.h>\n#  endif\n#  define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)\n#else\n#  define SET_BINARY_MODE(file)\n#endif\n\n#ifdef VMS\n#  define unlink delete\n#  define GZ_SUFFIX \"-gz\"\n#endif\n#ifdef RISCOS\n#  define unlink remove\n#  define GZ_SUFFIX \"-gz\"\n#  define fileno(file) file->__file\n#endif\n#if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os\n#  include <unix.h> /* for fileno */\n#endif\n\n#if !defined(Z_HAVE_UNISTD_H) && !defined(_LARGEFILE64_SOURCE)\n#ifndef WIN32 /* unlink already in stdio.h for WIN32 */\n  extern int unlink OF((const char *));\n#endif\n#endif\n\n#if defined(UNDER_CE)\n#  include <windows.h>\n#  define perror(s) pwinerror(s)\n\n/* Map the Windows error number in ERROR to a locale-dependent error\n   message string and return a pointer to it.  Typically, the values\n   for ERROR come from GetLastError.\n\n   The string pointed to shall not be modified by the application,\n   but may be overwritten by a subsequent call to strwinerror\n\n   The strwinerror function does not change the current setting\n   of GetLastError.  */\n\nstatic char *strwinerror (error)\n     DWORD error;\n{\n    static char buf[1024];\n\n    wchar_t *msgbuf;\n    DWORD lasterr = GetLastError();\n    DWORD chars = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM\n        | FORMAT_MESSAGE_ALLOCATE_BUFFER,\n        NULL,\n        error,\n        0, /* Default language */\n        (LPVOID)&msgbuf,\n        0,\n        NULL);\n    if (chars != 0) {\n        /* If there is an \\r\\n appended, zap it.  */\n        if (chars >= 2\n            && msgbuf[chars - 2] == '\\r' && msgbuf[chars - 1] == '\\n') {\n            chars -= 2;\n            msgbuf[chars] = 0;\n        }\n\n        if (chars > sizeof (buf) - 1) {\n            chars = sizeof (buf) - 1;\n            msgbuf[chars] = 0;\n        }\n\n        wcstombs(buf, msgbuf, chars + 1);\n        LocalFree(msgbuf);\n    }\n    else {\n        sprintf(buf, \"unknown win32 error (%ld)\", error);\n    }\n\n    SetLastError(lasterr);\n    return buf;\n}\n\nstatic void pwinerror (s)\n    const char *s;\n{\n    if (s && *s)\n        fprintf(stderr, \"%s: %s\\n\", s, strwinerror(GetLastError ()));\n    else\n        fprintf(stderr, \"%s\\n\", strwinerror(GetLastError ()));\n}\n\n#endif /* UNDER_CE */\n\n#ifndef GZ_SUFFIX\n#  define GZ_SUFFIX \".gz\"\n#endif\n#define SUFFIX_LEN (sizeof(GZ_SUFFIX)-1)\n\n#define BUFLEN      16384\n#define MAX_NAME_LEN 1024\n\n#ifdef MAXSEG_64K\n#  define local static\n   /* Needed for systems with limitation on stack size. */\n#else\n#  define local\n#endif\n\nchar *prog;\n\nvoid error            OF((const char *msg));\nvoid gz_compress      OF((FILE   *in, gzFile out));\n#ifdef USE_MMAP\nint  gz_compress_mmap OF((FILE   *in, gzFile out));\n#endif\nvoid gz_uncompress    OF((gzFile in, FILE   *out));\nvoid file_compress    OF((char  *file, char *mode));\nvoid file_uncompress  OF((char  *file));\nint  main             OF((int argc, char *argv[]));\n\n/* ===========================================================================\n * Display error message and exit\n */\nvoid error(msg)\n    const char *msg;\n{\n    fprintf(stderr, \"%s: %s\\n\", prog, msg);\n    exit(1);\n}\n\n/* ===========================================================================\n * Compress input to output then close both files.\n */\n\nvoid gz_compress(in, out)\n    FILE   *in;\n    gzFile out;\n{\n    local char buf[BUFLEN];\n    int len;\n    int err;\n\n#ifdef USE_MMAP\n    /* Try first compressing with mmap. If mmap fails (minigzip used in a\n     * pipe), use the normal fread loop.\n     */\n    if (gz_compress_mmap(in, out) == Z_OK) return;\n#endif\n    for (;;) {\n        len = (int)fread(buf, 1, sizeof(buf), in);\n        if (ferror(in)) {\n            perror(\"fread\");\n            exit(1);\n        }\n        if (len == 0) break;\n\n        if (gzwrite(out, buf, (unsigned)len) != len) error(gzerror(out, &err));\n    }\n    fclose(in);\n    if (gzclose(out) != Z_OK) error(\"failed gzclose\");\n}\n\n#ifdef USE_MMAP /* MMAP version, Miguel Albrecht <malbrech@eso.org> */\n\n/* Try compressing the input file at once using mmap. Return Z_OK if\n * if success, Z_ERRNO otherwise.\n */\nint gz_compress_mmap(in, out)\n    FILE   *in;\n    gzFile out;\n{\n    int len;\n    int err;\n    int ifd = fileno(in);\n    caddr_t buf;    /* mmap'ed buffer for the entire input file */\n    off_t buf_len;  /* length of the input file */\n    struct stat sb;\n\n    /* Determine the size of the file, needed for mmap: */\n    if (fstat(ifd, &sb) < 0) return Z_ERRNO;\n    buf_len = sb.st_size;\n    if (buf_len <= 0) return Z_ERRNO;\n\n    /* Now do the actual mmap: */\n    buf = mmap((caddr_t) 0, buf_len, PROT_READ, MAP_SHARED, ifd, (off_t)0);\n    if (buf == (caddr_t)(-1)) return Z_ERRNO;\n\n    /* Compress the whole file at once: */\n    len = gzwrite(out, (char *)buf, (unsigned)buf_len);\n\n    if (len != (int)buf_len) error(gzerror(out, &err));\n\n    munmap(buf, buf_len);\n    fclose(in);\n    if (gzclose(out) != Z_OK) error(\"failed gzclose\");\n    return Z_OK;\n}\n#endif /* USE_MMAP */\n\n/* ===========================================================================\n * Uncompress input to output then close both files.\n */\nvoid gz_uncompress(in, out)\n    gzFile in;\n    FILE   *out;\n{\n    local char buf[BUFLEN];\n    int len;\n    int err;\n\n    for (;;) {\n        len = gzread(in, buf, sizeof(buf));\n        if (len < 0) error (gzerror(in, &err));\n        if (len == 0) break;\n\n        if ((int)fwrite(buf, 1, (unsigned)len, out) != len) {\n            error(\"failed fwrite\");\n        }\n    }\n    if (fclose(out)) error(\"failed fclose\");\n\n    if (gzclose(in) != Z_OK) error(\"failed gzclose\");\n}\n\n\n/* ===========================================================================\n * Compress the given file: create a corresponding .gz file and remove the\n * original.\n */\nvoid file_compress(file, mode)\n    char  *file;\n    char  *mode;\n{\n    local char outfile[MAX_NAME_LEN];\n    FILE  *in;\n    gzFile out;\n\n    if (strlen(file) + strlen(GZ_SUFFIX) >= sizeof(outfile)) {\n        fprintf(stderr, \"%s: filename too long\\n\", prog);\n        exit(1);\n    }\n\n    strcpy(outfile, file);\n    strcat(outfile, GZ_SUFFIX);\n\n    in = fopen(file, \"rb\");\n    if (in == NULL) {\n        perror(file);\n        exit(1);\n    }\n    out = gzopen(outfile, mode);\n    if (out == NULL) {\n        fprintf(stderr, \"%s: can't gzopen %s\\n\", prog, outfile);\n        exit(1);\n    }\n    gz_compress(in, out);\n\n    unlink(file);\n}\n\n\n/* ===========================================================================\n * Uncompress the given file and remove the original.\n */\nvoid file_uncompress(file)\n    char  *file;\n{\n    local char buf[MAX_NAME_LEN];\n    char *infile, *outfile;\n    FILE  *out;\n    gzFile in;\n    size_t len = strlen(file);\n\n    if (len + strlen(GZ_SUFFIX) >= sizeof(buf)) {\n        fprintf(stderr, \"%s: filename too long\\n\", prog);\n        exit(1);\n    }\n\n    strcpy(buf, file);\n\n    if (len > SUFFIX_LEN && strcmp(file+len-SUFFIX_LEN, GZ_SUFFIX) == 0) {\n        infile = file;\n        outfile = buf;\n        outfile[len-3] = '\\0';\n    } else {\n        outfile = file;\n        infile = buf;\n        strcat(infile, GZ_SUFFIX);\n    }\n    in = gzopen(infile, \"rb\");\n    if (in == NULL) {\n        fprintf(stderr, \"%s: can't gzopen %s\\n\", prog, infile);\n        exit(1);\n    }\n    out = fopen(outfile, \"wb\");\n    if (out == NULL) {\n        perror(file);\n        exit(1);\n    }\n\n    gz_uncompress(in, out);\n\n    unlink(infile);\n}\n\n\n/* ===========================================================================\n * Usage:  minigzip [-c] [-d] [-f] [-h] [-r] [-1 to -9] [files...]\n *   -c : write to standard output\n *   -d : decompress\n *   -f : compress with Z_FILTERED\n *   -h : compress with Z_HUFFMAN_ONLY\n *   -r : compress with Z_RLE\n *   -1 to -9 : compression level\n */\n\nint main(argc, argv)\n    int argc;\n    char *argv[];\n{\n    int copyout = 0;\n    int uncompr = 0;\n    gzFile file;\n    char *bname, outmode[20];\n\n    strcpy(outmode, \"wb6 \");\n\n    prog = argv[0];\n    bname = strrchr(argv[0], '/');\n    if (bname)\n      bname++;\n    else\n      bname = argv[0];\n    argc--, argv++;\n\n    if (!strcmp(bname, \"gunzip\"))\n      uncompr = 1;\n    else if (!strcmp(bname, \"zcat\"))\n      copyout = uncompr = 1;\n\n    while (argc > 0) {\n      if (strcmp(*argv, \"-c\") == 0)\n        copyout = 1;\n      else if (strcmp(*argv, \"-d\") == 0)\n        uncompr = 1;\n      else if (strcmp(*argv, \"-f\") == 0)\n        outmode[3] = 'f';\n      else if (strcmp(*argv, \"-h\") == 0)\n        outmode[3] = 'h';\n      else if (strcmp(*argv, \"-r\") == 0)\n        outmode[3] = 'R';\n      else if ((*argv)[0] == '-' && (*argv)[1] >= '1' && (*argv)[1] <= '9' &&\n               (*argv)[2] == 0)\n        outmode[2] = (*argv)[1];\n      else\n        break;\n      argc--, argv++;\n    }\n    if (outmode[3] == ' ')\n        outmode[3] = 0;\n    if (argc == 0) {\n        SET_BINARY_MODE(stdin);\n        SET_BINARY_MODE(stdout);\n        if (uncompr) {\n            file = gzdopen(fileno(stdin), \"rb\");\n            if (file == NULL) error(\"can't gzdopen stdin\");\n            gz_uncompress(file, stdout);\n        } else {\n            file = gzdopen(fileno(stdout), outmode);\n            if (file == NULL) error(\"can't gzdopen stdout\");\n            gz_compress(stdin, file);\n        }\n    } else {\n        if (copyout) {\n            SET_BINARY_MODE(stdout);\n        }\n        do {\n            if (uncompr) {\n                if (copyout) {\n                    file = gzopen(*argv, \"rb\");\n                    if (file == NULL)\n                        fprintf(stderr, \"%s: can't gzopen %s\\n\", prog, *argv);\n                    else\n                        gz_uncompress(file, stdout);\n                } else {\n                    file_uncompress(*argv);\n                }\n            } else {\n                if (copyout) {\n                    FILE * in = fopen(*argv, \"rb\");\n\n                    if (in == NULL) {\n                        perror(*argv);\n                    } else {\n                        file = gzdopen(fileno(stdout), outmode);\n                        if (file == NULL) error(\"can't gzdopen stdout\");\n\n                        gz_compress(in, file);\n                    }\n\n                } else {\n                    file_compress(*argv, outmode);\n                }\n            }\n        } while (argv++, --argc);\n    }\n    return 0;\n}\n"
  },
  {
    "path": "external/zlib/msdos/Makefile.bor",
    "content": "# Makefile for zlib\n# Borland C++\n# Last updated: 15-Mar-2003\n\n# To use, do \"make -fmakefile.bor\"\n# To compile in small model, set below: MODEL=s\n\n# WARNING: the small model is supported but only for small values of\n# MAX_WBITS and MAX_MEM_LEVEL. For example:\n#    -DMAX_WBITS=11 -DDEF_WBITS=11 -DMAX_MEM_LEVEL=3\n# If you wish to reduce the memory requirements (default 256K for big\n# objects plus a few K), you can add to the LOC macro below:\n#   -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14\n# See zconf.h for details about the memory requirements.\n\n# ------------ Turbo C++, Borland C++ ------------\n\n#    Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7)\n#    should be added to the environment via \"set LOCAL_ZLIB=-DFOO\" or added\n#    to the declaration of LOC here:\nLOC = $(LOCAL_ZLIB)\n\n# type for CPU required: 0: 8086, 1: 80186, 2: 80286, 3: 80386, etc.\nCPU_TYP = 0\n\n# memory model: one of s, m, c, l (small, medium, compact, large)\nMODEL=l\n\n# replace bcc with tcc for Turbo C++ 1.0, with bcc32 for the 32 bit version\nCC=bcc\nLD=bcc\nAR=tlib\n\n# compiler flags\n# replace \"-O2\" by \"-O -G -a -d\" for Turbo C++ 1.0\nCFLAGS=-O2 -Z -m$(MODEL) $(LOC)\n\nLDFLAGS=-m$(MODEL) -f-\n\n\n# variables\nZLIB_LIB = zlib_$(MODEL).lib\n\nOBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj\nOBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj\nOBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj\nOBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj\n\n\n# targets\nall: $(ZLIB_LIB) example.exe minigzip.exe\n\n.c.obj:\n\t$(CC) -c $(CFLAGS) $*.c\n\nadler32.obj: adler32.c zlib.h zconf.h\n\ncompress.obj: compress.c zlib.h zconf.h\n\ncrc32.obj: crc32.c zlib.h zconf.h crc32.h\n\ndeflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h\n\ngzclose.obj: gzclose.c zlib.h zconf.h gzguts.h\n\ngzlib.obj: gzlib.c zlib.h zconf.h gzguts.h\n\ngzread.obj: gzread.c zlib.h zconf.h gzguts.h\n\ngzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h\n\ninfback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \\\n inffast.h inffixed.h\n\ninffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \\\n inffast.h\n\ninflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \\\n inffast.h inffixed.h\n\ninftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h\n\ntrees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h\n\nuncompr.obj: uncompr.c zlib.h zconf.h\n\nzutil.obj: zutil.c zutil.h zlib.h zconf.h\n\nexample.obj: example.c zlib.h zconf.h\n\nminigzip.obj: minigzip.c zlib.h zconf.h\n\n\n# the command line is cut to fit in the MS-DOS 128 byte limit:\n$(ZLIB_LIB): $(OBJ1) $(OBJ2)\n\t-del $(ZLIB_LIB)\n\t$(AR) $(ZLIB_LIB) $(OBJP1)\n\t$(AR) $(ZLIB_LIB) $(OBJP2)\n\nexample.exe: example.obj $(ZLIB_LIB)\n\t$(LD) $(LDFLAGS) example.obj $(ZLIB_LIB)\n\nminigzip.exe: minigzip.obj $(ZLIB_LIB)\n\t$(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB)\n\ntest: example.exe minigzip.exe\n\texample\n\techo hello world | minigzip | minigzip -d\n\nclean:\n\t-del *.obj\n\t-del *.lib\n\t-del *.exe\n\t-del zlib_*.bak\n\t-del foo.gz\n"
  },
  {
    "path": "external/zlib/msdos/Makefile.dj2",
    "content": "# Makefile for zlib.  Modified for djgpp v2.0 by F. J. Donahoe, 3/15/96.\n# Copyright (C) 1995-1998 Jean-loup Gailly.\n# For conditions of distribution and use, see copyright notice in zlib.h\n\n# To compile, or to compile and test, type:\n#\n#   make -fmakefile.dj2;  make test -fmakefile.dj2\n#\n# To install libz.a, zconf.h and zlib.h in the djgpp directories, type:\n#\n#    make install -fmakefile.dj2\n#\n# after first defining LIBRARY_PATH and INCLUDE_PATH in djgpp.env as\n# in the sample below if the pattern of the DJGPP distribution is to\n# be followed.  Remember that, while <sp>'es around <=> are ignored in\n# makefiles, they are *not* in batch files or in djgpp.env.\n# - - - - -\n# [make]\n# INCLUDE_PATH=%\\>;INCLUDE_PATH%%\\DJDIR%\\include\n# LIBRARY_PATH=%\\>;LIBRARY_PATH%%\\DJDIR%\\lib\n# BUTT=-m486\n# - - - - -\n# Alternately, these variables may be defined below, overriding the values\n# in djgpp.env, as\n# INCLUDE_PATH=c:\\usr\\include\n# LIBRARY_PATH=c:\\usr\\lib\n\nCC=gcc\n\n#CFLAGS=-MMD -O\n#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7\n#CFLAGS=-MMD -g -DDEBUG\nCFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \\\n             -Wstrict-prototypes -Wmissing-prototypes\n\n# If cp.exe is available, replace \"copy /Y\" with \"cp -fp\" .\nCP=copy /Y\n# If gnu install.exe is available, replace $(CP) with ginstall.\nINSTALL=$(CP)\n# The default value of RM is \"rm -f.\"  If \"rm.exe\" is found, comment out:\nRM=del\nLDLIBS=-L. -lz\nLD=$(CC) -s -o\nLDSHARED=$(CC)\n\nINCL=zlib.h zconf.h\nLIBS=libz.a\n\nAR=ar rcs\n\nprefix=/usr/local\nexec_prefix = $(prefix)\n\nOBJS = adler32.o compress.o crc32.o gzclose.o gzlib.o gzread.o gzwrite.o \\\n       uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o\n\nOBJA =\n# to use the asm code: make OBJA=match.o\n\nTEST_OBJS = example.o minigzip.o\n\nall: example.exe minigzip.exe\n\ncheck: test\ntest: all\n\t./example\n\techo hello world | .\\minigzip | .\\minigzip -d\n\n%.o : %.c\n\t$(CC) $(CFLAGS) -c $< -o $@\n\nlibz.a: $(OBJS) $(OBJA)\n\t$(AR) $@ $(OBJS) $(OBJA)\n\n%.exe : %.o $(LIBS)\n\t$(LD) $@ $< $(LDLIBS)\n\n# INCLUDE_PATH and LIBRARY_PATH were set for [make] in djgpp.env .\n\n.PHONY : uninstall clean\n\ninstall: $(INCL) $(LIBS)\n\t-@if not exist $(INCLUDE_PATH)\\nul mkdir $(INCLUDE_PATH)\n\t-@if not exist $(LIBRARY_PATH)\\nul mkdir $(LIBRARY_PATH)\n\t$(INSTALL) zlib.h $(INCLUDE_PATH)\n\t$(INSTALL) zconf.h $(INCLUDE_PATH)\n\t$(INSTALL) libz.a $(LIBRARY_PATH)\n\nuninstall:\n\t$(RM) $(INCLUDE_PATH)\\zlib.h\n\t$(RM) $(INCLUDE_PATH)\\zconf.h\n\t$(RM) $(LIBRARY_PATH)\\libz.a\n\nclean:\n\t$(RM) *.d\n\t$(RM) *.o\n\t$(RM) *.exe\n\t$(RM) libz.a\n\t$(RM) foo.gz\n\nDEPS := $(wildcard *.d)\nifneq ($(DEPS),)\ninclude $(DEPS)\nendif\n"
  },
  {
    "path": "external/zlib/msdos/Makefile.emx",
    "content": "# Makefile for zlib.  Modified for emx 0.9c by Chr. Spieler, 6/17/98.\n# Copyright (C) 1995-1998 Jean-loup Gailly.\n# For conditions of distribution and use, see copyright notice in zlib.h\n\n# To compile, or to compile and test, type:\n#\n#   make -fmakefile.emx;  make test -fmakefile.emx\n#\n\nCC=gcc\n\n#CFLAGS=-MMD -O\n#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7\n#CFLAGS=-MMD -g -DDEBUG\nCFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \\\n             -Wstrict-prototypes -Wmissing-prototypes\n\n# If cp.exe is available, replace \"copy /Y\" with \"cp -fp\" .\nCP=copy /Y\n# If gnu install.exe is available, replace $(CP) with ginstall.\nINSTALL=$(CP)\n# The default value of RM is \"rm -f.\"  If \"rm.exe\" is found, comment out:\nRM=del\nLDLIBS=-L. -lzlib\nLD=$(CC) -s -o\nLDSHARED=$(CC)\n\nINCL=zlib.h zconf.h\nLIBS=zlib.a\n\nAR=ar rcs\n\nprefix=/usr/local\nexec_prefix = $(prefix)\n\nOBJS = adler32.o compress.o crc32.o gzclose.o gzlib.o gzread.o gzwrite.o \\\n       uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o\n\nTEST_OBJS = example.o minigzip.o\n\nall: example.exe minigzip.exe\n\ntest: all\n\t./example\n\techo hello world | .\\minigzip | .\\minigzip -d\n\n%.o : %.c\n\t$(CC) $(CFLAGS) -c $< -o $@\n\nzlib.a: $(OBJS)\n\t$(AR) $@ $(OBJS)\n\n%.exe : %.o $(LIBS)\n\t$(LD) $@ $< $(LDLIBS)\n\n\n.PHONY : clean\n\nclean:\n\t$(RM) *.d\n\t$(RM) *.o\n\t$(RM) *.exe\n\t$(RM) zlib.a\n\t$(RM) foo.gz\n\nDEPS := $(wildcard *.d)\nifneq ($(DEPS),)\ninclude $(DEPS)\nendif\n"
  },
  {
    "path": "external/zlib/msdos/Makefile.msc",
    "content": "# Makefile for zlib\n# Microsoft C 5.1 or later\n# Last updated: 19-Mar-2003\n\n# To use, do \"make makefile.msc\"\n# To compile in small model, set below: MODEL=S\n\n# If you wish to reduce the memory requirements (default 256K for big\n# objects plus a few K), you can add to the LOC macro below:\n#   -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14\n# See zconf.h for details about the memory requirements.\n\n# ------------- Microsoft C 5.1 and later -------------\n\n#    Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7)\n#    should be added to the environment via \"set LOCAL_ZLIB=-DFOO\" or added\n#    to the declaration of LOC here:\nLOC = $(LOCAL_ZLIB)\n\n# Type for CPU required: 0: 8086, 1: 80186, 2: 80286, 3: 80386, etc.\nCPU_TYP = 0\n\n# Memory model: one of S, M, C, L (small, medium, compact, large)\nMODEL=L\n\nCC=cl\nCFLAGS=-nologo -A$(MODEL) -G$(CPU_TYP) -W3 -Oait -Gs $(LOC)\n#-Ox generates bad code with MSC 5.1\nLIB_CFLAGS=-Zl $(CFLAGS)\n\nLD=link\nLDFLAGS=/noi/e/st:0x1500/noe/farcall/packcode\n# \"/farcall/packcode\" are only useful for `large code' memory models\n# but should be a \"no-op\" for small code models.\n\n\n# variables\nZLIB_LIB = zlib_$(MODEL).lib\n\nOBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj\nOBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj\n\n\n# targets\nall:  $(ZLIB_LIB) example.exe minigzip.exe\n\n.c.obj:\n\t$(CC) -c $(LIB_CFLAGS) $*.c\n\nadler32.obj: adler32.c zlib.h zconf.h\n\ncompress.obj: compress.c zlib.h zconf.h\n\ncrc32.obj: crc32.c zlib.h zconf.h crc32.h\n\ndeflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h\n\ngzclose.obj: gzclose.c zlib.h zconf.h gzguts.h\n\ngzlib.obj: gzlib.c zlib.h zconf.h gzguts.h\n\ngzread.obj: gzread.c zlib.h zconf.h gzguts.h\n\ngzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h\n\ninfback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \\\n inffast.h inffixed.h\n\ninffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \\\n inffast.h\n\ninflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \\\n inffast.h inffixed.h\n\ninftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h\n\ntrees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h\n\nuncompr.obj: uncompr.c zlib.h zconf.h\n\nzutil.obj: zutil.c zutil.h zlib.h zconf.h\n\nexample.obj: example.c zlib.h zconf.h\n\t$(CC) -c $(CFLAGS) $*.c\n\nminigzip.obj: minigzip.c zlib.h zconf.h\n\t$(CC) -c $(CFLAGS) $*.c\n\n\n# the command line is cut to fit in the MS-DOS 128 byte limit:\n$(ZLIB_LIB): $(OBJ1) $(OBJ2)\n\tif exist $(ZLIB_LIB) del $(ZLIB_LIB)\n\tlib $(ZLIB_LIB) $(OBJ1);\n\tlib $(ZLIB_LIB) $(OBJ2);\n\nexample.exe: example.obj $(ZLIB_LIB)\n\t$(LD) $(LDFLAGS) example.obj,,,$(ZLIB_LIB);\n\nminigzip.exe: minigzip.obj $(ZLIB_LIB)\n\t$(LD) $(LDFLAGS) minigzip.obj,,,$(ZLIB_LIB);\n\ntest: example.exe minigzip.exe\n\texample\n\techo hello world | minigzip | minigzip -d\n\nclean:\n\t-del *.obj\n\t-del *.lib\n\t-del *.exe\n\t-del *.map\n\t-del zlib_*.bak\n\t-del foo.gz\n"
  },
  {
    "path": "external/zlib/msdos/Makefile.tc",
    "content": "# Makefile for zlib\n# Turbo C 2.01, Turbo C++ 1.01\n# Last updated: 15-Mar-2003\n\n# To use, do \"make -fmakefile.tc\"\n# To compile in small model, set below: MODEL=s\n\n# WARNING: the small model is supported but only for small values of\n# MAX_WBITS and MAX_MEM_LEVEL. For example:\n#    -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3\n# If you wish to reduce the memory requirements (default 256K for big\n# objects plus a few K), you can add to CFLAGS below:\n#   -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14\n# See zconf.h for details about the memory requirements.\n\n# ------------ Turbo C 2.01, Turbo C++ 1.01 ------------\nMODEL=l\nCC=tcc\nLD=tcc\nAR=tlib\n# CFLAGS=-O2 -G -Z -m$(MODEL) -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3\nCFLAGS=-O2 -G -Z -m$(MODEL)\nLDFLAGS=-m$(MODEL) -f-\n\n\n# variables\nZLIB_LIB = zlib_$(MODEL).lib\n\nOBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj\nOBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj\nOBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj\nOBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj\n\n\n# targets\nall: $(ZLIB_LIB) example.exe minigzip.exe\n\n.c.obj:\n\t$(CC) -c $(CFLAGS) $*.c\n\nadler32.obj: adler32.c zlib.h zconf.h\n\ncompress.obj: compress.c zlib.h zconf.h\n\ncrc32.obj: crc32.c zlib.h zconf.h crc32.h\n\ndeflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h\n\ngzclose.obj: gzclose.c zlib.h zconf.h gzguts.h\n\ngzlib.obj: gzlib.c zlib.h zconf.h gzguts.h\n\ngzread.obj: gzread.c zlib.h zconf.h gzguts.h\n\ngzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h\n\ninfback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \\\n inffast.h inffixed.h\n\ninffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \\\n inffast.h\n\ninflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \\\n inffast.h inffixed.h\n\ninftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h\n\ntrees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h\n\nuncompr.obj: uncompr.c zlib.h zconf.h\n\nzutil.obj: zutil.c zutil.h zlib.h zconf.h\n\nexample.obj: example.c zlib.h zconf.h\n\nminigzip.obj: minigzip.c zlib.h zconf.h\n\n\n# the command line is cut to fit in the MS-DOS 128 byte limit:\n$(ZLIB_LIB): $(OBJ1) $(OBJ2)\n\t-del $(ZLIB_LIB)\n\t$(AR) $(ZLIB_LIB) $(OBJP1)\n\t$(AR) $(ZLIB_LIB) $(OBJP2)\n\nexample.exe: example.obj $(ZLIB_LIB)\n\t$(LD) $(LDFLAGS) example.obj $(ZLIB_LIB)\n\nminigzip.exe: minigzip.obj $(ZLIB_LIB)\n\t$(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB)\n\ntest: example.exe minigzip.exe\n\texample\n\techo hello world | minigzip | minigzip -d\n\nclean:\n\t-del *.obj\n\t-del *.lib\n\t-del *.exe\n\t-del zlib_*.bak\n\t-del foo.gz\n"
  },
  {
    "path": "external/zlib/nintendods/Makefile",
    "content": "#---------------------------------------------------------------------------------\n.SUFFIXES:\n#---------------------------------------------------------------------------------\n\nifeq ($(strip $(DEVKITARM)),)\n$(error \"Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM\")\nendif\n\ninclude $(DEVKITARM)/ds_rules\n\n#---------------------------------------------------------------------------------\n# TARGET is the name of the output\n# BUILD is the directory where object files & intermediate files will be placed\n# SOURCES is a list of directories containing source code\n# DATA is a list of directories containing data files\n# INCLUDES is a list of directories containing header files\n#---------------------------------------------------------------------------------\nTARGET\t\t:=\t$(shell basename $(CURDIR))\nBUILD\t\t:=\tbuild\nSOURCES\t\t:=\t../../\nDATA\t\t:=\tdata\nINCLUDES\t:=\tinclude\n\n#---------------------------------------------------------------------------------\n# options for code generation\n#---------------------------------------------------------------------------------\nARCH\t:=\t-mthumb -mthumb-interwork\n\nCFLAGS\t:=\t-Wall -O2\\\n\t\t-march=armv5te -mtune=arm946e-s \\\n\t\t-fomit-frame-pointer -ffast-math \\\n\t\t$(ARCH)\n\nCFLAGS\t+=\t$(INCLUDE) -DARM9\nCXXFLAGS\t:= $(CFLAGS) -fno-rtti -fno-exceptions\n\nASFLAGS\t:=\t$(ARCH) -march=armv5te -mtune=arm946e-s\nLDFLAGS\t=\t-specs=ds_arm9.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)\n\n#---------------------------------------------------------------------------------\n# list of directories containing libraries, this must be the top level containing\n# include and lib\n#---------------------------------------------------------------------------------\nLIBDIRS\t:=\t$(LIBNDS)\n\n#---------------------------------------------------------------------------------\n# no real need to edit anything past this point unless you need to add additional\n# rules for different file extensions\n#---------------------------------------------------------------------------------\nifneq ($(BUILD),$(notdir $(CURDIR)))\n#---------------------------------------------------------------------------------\n\nexport OUTPUT\t:=\t$(CURDIR)/lib/libz.a\n\nexport VPATH\t:=\t$(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \\\n\t\t\t$(foreach dir,$(DATA),$(CURDIR)/$(dir))\n\nexport DEPSDIR\t:=\t$(CURDIR)/$(BUILD)\n\nCFILES\t\t:=\t$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))\nCPPFILES\t:=\t$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))\nSFILES\t\t:=\t$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))\nBINFILES\t:=\t$(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))\n\n#---------------------------------------------------------------------------------\n# use CXX for linking C++ projects, CC for standard C\n#---------------------------------------------------------------------------------\nifeq ($(strip $(CPPFILES)),)\n#---------------------------------------------------------------------------------\n\texport LD\t:=\t$(CC)\n#---------------------------------------------------------------------------------\nelse\n#---------------------------------------------------------------------------------\n\texport LD\t:=\t$(CXX)\n#---------------------------------------------------------------------------------\nendif\n#---------------------------------------------------------------------------------\n\nexport OFILES\t:=\t$(addsuffix .o,$(BINFILES)) \\\n\t\t\t$(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)\n\nexport INCLUDE\t:=\t$(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \\\n\t\t\t$(foreach dir,$(LIBDIRS),-I$(dir)/include) \\\n\t\t\t-I$(CURDIR)/$(BUILD)\n\n.PHONY: $(BUILD) clean all\n\n#---------------------------------------------------------------------------------\nall: $(BUILD)\n\t@[ -d $@ ] || mkdir -p include\n\t@cp ../../*.h include\n\nlib:\n\t@[ -d $@ ] || mkdir -p $@\n\t\n$(BUILD): lib\n\t@[ -d $@ ] || mkdir -p $@\n\t@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile\n\n#---------------------------------------------------------------------------------\nclean:\n\t@echo clean ...\n\t@rm -fr $(BUILD) lib\n\n#---------------------------------------------------------------------------------\nelse\n\nDEPENDS\t:=\t$(OFILES:.o=.d)\n\n#---------------------------------------------------------------------------------\n# main targets\n#---------------------------------------------------------------------------------\n$(OUTPUT)\t:\t$(OFILES)\n\n#---------------------------------------------------------------------------------\n%.bin.o\t:\t%.bin\n#---------------------------------------------------------------------------------\n\t@echo $(notdir $<)\n\t@$(bin2o)\n\n\n-include $(DEPENDS)\n\n#---------------------------------------------------------------------------------------\nendif\n#---------------------------------------------------------------------------------------\n"
  },
  {
    "path": "external/zlib/nintendods/README",
    "content": "This Makefile requires devkitARM (http://www.devkitpro.org/category/devkitarm/) and works inside \"contrib/nds\". It is based on a devkitARM template.\n\nEduardo Costa <eduardo.m.costa@gmail.com>\nJanuary 3, 2009\n\n"
  },
  {
    "path": "external/zlib/old/Makefile.riscos",
    "content": "# Project:   zlib_1_03\n# Patched for zlib 1.1.2 rw@shadow.org.uk 19980430\n# test works out-of-the-box, installs `somewhere' on demand\n\n# Toolflags:\nCCflags = -c -depend !Depend -IC: -g -throwback  -DRISCOS  -fah\nC++flags = -c -depend !Depend -IC: -throwback\nLinkflags = -aif -c++ -o $@\nObjAsmflags = -throwback -NoCache -depend !Depend\nCMHGflags =\nLibFileflags = -c -l -o $@\nSqueezeflags = -o $@\n\n# change the line below to where _you_ want the library installed.\nlibdest = lib:zlib\n\n# Final targets:\n@.lib:   @.o.adler32 @.o.compress @.o.crc32 @.o.deflate @.o.gzio \\\n        @.o.infblock @.o.infcodes @.o.inffast @.o.inflate @.o.inftrees @.o.infutil @.o.trees \\\n        @.o.uncompr @.o.zutil\n        LibFile $(LibFileflags) @.o.adler32 @.o.compress @.o.crc32 @.o.deflate \\\n        @.o.gzio @.o.infblock @.o.infcodes @.o.inffast @.o.inflate @.o.inftrees @.o.infutil \\\n        @.o.trees @.o.uncompr @.o.zutil\ntest:   @.minigzip @.example @.lib\n\t@copy @.lib @.libc  A~C~DF~L~N~P~Q~RS~TV\n\t@echo running tests: hang on.\n\t@/@.minigzip -f -9 libc\n\t@/@.minigzip -d libc-gz\n\t@/@.minigzip -f -1 libc\n\t@/@.minigzip -d libc-gz\n\t@/@.minigzip -h -9 libc\n\t@/@.minigzip -d libc-gz\n\t@/@.minigzip -h -1 libc\n\t@/@.minigzip -d libc-gz\n\t@/@.minigzip -9 libc\n\t@/@.minigzip -d libc-gz\n\t@/@.minigzip -1 libc\n\t@/@.minigzip -d libc-gz\n\t@diff @.lib @.libc\n\t@echo that should have reported '@.lib and @.libc identical' if you have diff.\n\t@/@.example @.fred @.fred\n\t@echo that will have given lots of hello!'s.\n\n@.minigzip:   @.o.minigzip @.lib C:o.Stubs\n        Link $(Linkflags) @.o.minigzip @.lib C:o.Stubs\n@.example:   @.o.example @.lib C:o.Stubs\n        Link $(Linkflags) @.o.example @.lib C:o.Stubs\n\ninstall: @.lib\n\tcdir $(libdest)\n\tcdir $(libdest).h\n\t@copy @.h.zlib $(libdest).h.zlib A~C~DF~L~N~P~Q~RS~TV\n\t@copy @.h.zconf $(libdest).h.zconf A~C~DF~L~N~P~Q~RS~TV\n\t@copy @.lib $(libdest).lib  A~C~DF~L~N~P~Q~RS~TV\n\t@echo okay, installed zlib in $(libdest)\n\nclean:; remove @.minigzip\n\tremove @.example\n\tremove @.libc\n\t-wipe @.o.* F~r~cV\n\tremove @.fred\n\n# User-editable dependencies:\n.c.o:\n        cc $(ccflags) -o $@ $<\n\n# Static dependencies:\n\n# Dynamic dependencies:\no.example:\tc.example\no.example:\th.zlib\no.example:\th.zconf\no.minigzip:\tc.minigzip\no.minigzip:\th.zlib\no.minigzip:\th.zconf\no.adler32:\tc.adler32\no.adler32:\th.zlib\no.adler32:\th.zconf\no.compress:\tc.compress\no.compress:\th.zlib\no.compress:\th.zconf\no.crc32:\tc.crc32\no.crc32:\th.zlib\no.crc32:\th.zconf\no.deflate:\tc.deflate\no.deflate:\th.deflate\no.deflate:\th.zutil\no.deflate:\th.zlib\no.deflate:\th.zconf\no.gzio:\tc.gzio\no.gzio:\th.zutil\no.gzio:\th.zlib\no.gzio:\th.zconf\no.infblock:\tc.infblock\no.infblock:\th.zutil\no.infblock:\th.zlib\no.infblock:\th.zconf\no.infblock:\th.infblock\no.infblock:\th.inftrees\no.infblock:\th.infcodes\no.infblock:\th.infutil\no.infcodes:\tc.infcodes\no.infcodes:\th.zutil\no.infcodes:\th.zlib\no.infcodes:\th.zconf\no.infcodes:\th.inftrees\no.infcodes:\th.infblock\no.infcodes:\th.infcodes\no.infcodes:\th.infutil\no.infcodes:\th.inffast\no.inffast:\tc.inffast\no.inffast:\th.zutil\no.inffast:\th.zlib\no.inffast:\th.zconf\no.inffast:\th.inftrees\no.inffast:\th.infblock\no.inffast:\th.infcodes\no.inffast:\th.infutil\no.inffast:\th.inffast\no.inflate:\tc.inflate\no.inflate:\th.zutil\no.inflate:\th.zlib\no.inflate:\th.zconf\no.inflate:\th.infblock\no.inftrees:\tc.inftrees\no.inftrees:\th.zutil\no.inftrees:\th.zlib\no.inftrees:\th.zconf\no.inftrees:\th.inftrees\no.inftrees:\th.inffixed\no.infutil:\tc.infutil\no.infutil:\th.zutil\no.infutil:\th.zlib\no.infutil:\th.zconf\no.infutil:\th.infblock\no.infutil:\th.inftrees\no.infutil:\th.infcodes\no.infutil:\th.infutil\no.trees:\tc.trees\no.trees:\th.deflate\no.trees:\th.zutil\no.trees:\th.zlib\no.trees:\th.zconf\no.trees:\th.trees\no.uncompr:\tc.uncompr\no.uncompr:\th.zlib\no.uncompr:\th.zconf\no.zutil:\tc.zutil\no.zutil:\th.zutil\no.zutil:\th.zlib\no.zutil:\th.zconf\n"
  },
  {
    "path": "external/zlib/old/README",
    "content": "This directory contains files that have not been updated for zlib 1.2.x\n\n(Volunteers are encouraged to help clean this up.  Thanks.)\n"
  },
  {
    "path": "external/zlib/old/as400/bndsrc",
    "content": "STRPGMEXP PGMLVL(*CURRENT) SIGNATURE('ZLIB')\n\n/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/\n/*   Version 1.1.3 entry points.                                    */\n/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/\n\n/********************************************************************/\n/*   *MODULE      ADLER32      ZLIB         01/02/01  00:15:09      */\n/********************************************************************/\n\n  EXPORT SYMBOL(\"adler32\")\n\n/********************************************************************/\n/*   *MODULE      COMPRESS     ZLIB         01/02/01  00:15:09      */\n/********************************************************************/\n\n  EXPORT SYMBOL(\"compress\")\n  EXPORT SYMBOL(\"compress2\")\n\n/********************************************************************/\n/*   *MODULE      CRC32        ZLIB         01/02/01  00:15:09      */\n/********************************************************************/\n\n  EXPORT SYMBOL(\"crc32\")\n  EXPORT SYMBOL(\"get_crc_table\")\n\n/********************************************************************/\n/*   *MODULE      DEFLATE      ZLIB         01/02/01  00:15:09      */\n/********************************************************************/\n\n  EXPORT SYMBOL(\"deflate\")\n  EXPORT SYMBOL(\"deflateEnd\")\n  EXPORT SYMBOL(\"deflateSetDictionary\")\n  EXPORT SYMBOL(\"deflateCopy\")\n  EXPORT SYMBOL(\"deflateReset\")\n  EXPORT SYMBOL(\"deflateParams\")\n  EXPORT SYMBOL(\"deflatePrime\")\n  EXPORT SYMBOL(\"deflateInit_\")\n  EXPORT SYMBOL(\"deflateInit2_\")\n\n/********************************************************************/\n/*   *MODULE      GZIO         ZLIB         01/02/01  00:15:09      */\n/********************************************************************/\n\n  EXPORT SYMBOL(\"gzopen\")\n  EXPORT SYMBOL(\"gzdopen\")\n  EXPORT SYMBOL(\"gzsetparams\")\n  EXPORT SYMBOL(\"gzread\")\n  EXPORT SYMBOL(\"gzwrite\")\n  EXPORT SYMBOL(\"gzprintf\")\n  EXPORT SYMBOL(\"gzputs\")\n  EXPORT SYMBOL(\"gzgets\")\n  EXPORT SYMBOL(\"gzputc\")\n  EXPORT SYMBOL(\"gzgetc\")\n  EXPORT SYMBOL(\"gzflush\")\n  EXPORT SYMBOL(\"gzseek\")\n  EXPORT SYMBOL(\"gzrewind\")\n  EXPORT SYMBOL(\"gztell\")\n  EXPORT SYMBOL(\"gzeof\")\n  EXPORT SYMBOL(\"gzclose\")\n  EXPORT SYMBOL(\"gzerror\")\n\n/********************************************************************/\n/*   *MODULE      INFLATE      ZLIB         01/02/01  00:15:09      */\n/********************************************************************/\n\n  EXPORT SYMBOL(\"inflate\")\n  EXPORT SYMBOL(\"inflateEnd\")\n  EXPORT SYMBOL(\"inflateSetDictionary\")\n  EXPORT SYMBOL(\"inflateSync\")\n  EXPORT SYMBOL(\"inflateReset\")\n  EXPORT SYMBOL(\"inflateInit_\")\n  EXPORT SYMBOL(\"inflateInit2_\")\n  EXPORT SYMBOL(\"inflateSyncPoint\")\n\n/********************************************************************/\n/*   *MODULE      UNCOMPR      ZLIB         01/02/01  00:15:09      */\n/********************************************************************/\n\n  EXPORT SYMBOL(\"uncompress\")\n\n/********************************************************************/\n/*   *MODULE      ZUTIL        ZLIB         01/02/01  00:15:09      */\n/********************************************************************/\n\n  EXPORT SYMBOL(\"zlibVersion\")\n  EXPORT SYMBOL(\"zError\")\n\n/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/\n/*   Version 1.2.1 additional entry points.                         */\n/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/\n\n/********************************************************************/\n/*   *MODULE      COMPRESS     ZLIB         01/02/01  00:15:09      */\n/********************************************************************/\n\n  EXPORT SYMBOL(\"compressBound\")\n\n/********************************************************************/\n/*   *MODULE      DEFLATE      ZLIB         01/02/01  00:15:09      */\n/********************************************************************/\n\n  EXPORT SYMBOL(\"deflateBound\")\n\n/********************************************************************/\n/*   *MODULE      GZIO         ZLIB         01/02/01  00:15:09      */\n/********************************************************************/\n\n  EXPORT SYMBOL(\"gzungetc\")\n  EXPORT SYMBOL(\"gzclearerr\")\n\n/********************************************************************/\n/*   *MODULE      INFBACK      ZLIB         01/02/01  00:15:09      */\n/********************************************************************/\n\n  EXPORT SYMBOL(\"inflateBack\")\n  EXPORT SYMBOL(\"inflateBackEnd\")\n  EXPORT SYMBOL(\"inflateBackInit_\")\n\n/********************************************************************/\n/*   *MODULE      INFLATE      ZLIB         01/02/01  00:15:09      */\n/********************************************************************/\n\n  EXPORT SYMBOL(\"inflateCopy\")\n\n/********************************************************************/\n/*   *MODULE      ZUTIL        ZLIB         01/02/01  00:15:09      */\n/********************************************************************/\n\n  EXPORT SYMBOL(\"zlibCompileFlags\")\n\nENDPGMEXP\n"
  },
  {
    "path": "external/zlib/old/as400/compile.clp",
    "content": "/******************************************************************************/\n/*                                                                            */\n/*  ZLIB                                                                      */\n/*                                                                            */\n/*    Compile sources into modules and link them into a service program.      */\n/*                                                                            */\n/******************************************************************************/\n\n             PGM\n\n/*      Configuration adjustable parameters.                                  */\n\n             DCL        VAR(&SRCLIB) TYPE(*CHAR) LEN(10) +\n                          VALUE('ZLIB')                         /* Source library. */\n             DCL        VAR(&SRCFILE) TYPE(*CHAR) LEN(10) +\n                          VALUE('SOURCES')                      /* Source member file. */\n             DCL        VAR(&CTLFILE) TYPE(*CHAR) LEN(10) +\n                          VALUE('TOOLS')                        /* Control member file. */\n\n             DCL        VAR(&MODLIB) TYPE(*CHAR) LEN(10) +\n                          VALUE('ZLIB')                         /* Module library. */\n\n             DCL        VAR(&SRVLIB) TYPE(*CHAR) LEN(10) +\n                          VALUE('LGPL')                         /* Service program library. */\n\n             DCL        VAR(&CFLAGS) TYPE(*CHAR) +\n                          VALUE('OPTIMIZE(40)')                 /* Compile options. */\n\n\n/*      Working storage.                                                      */\n\n             DCL        VAR(&CMDLEN) TYPE(*DEC) LEN(15 5) VALUE(300)    /* Command length. */\n             DCL        VAR(&CMD) TYPE(*CHAR) LEN(512)\n\n\n/*      Compile sources into modules.                                         */\n\n             CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +\n                        '/ADLER32)               SRCFILE(' *TCAT               +\n                        &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +\n                        ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)\n             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)\n\n             CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +\n                        '/COMPRESS)              SRCFILE(' *TCAT               +\n                        &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +\n                        ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)\n             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)\n\n             CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +\n                        '/CRC32)                 SRCFILE(' *TCAT               +\n                        &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +\n                        ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)\n             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)\n\n             CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +\n                        '/DEFLATE)               SRCFILE(' *TCAT               +\n                        &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +\n                        ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)\n             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)\n\n             CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +\n                        '/GZIO)                  SRCFILE(' *TCAT               +\n                        &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +\n                        ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)\n             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)\n\n             CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +\n                        '/INFBACK)               SRCFILE(' *TCAT               +\n                        &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +\n                        ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)\n             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)\n\n             CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +\n                        '/INFFAST)               SRCFILE(' *TCAT               +\n                        &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +\n                        ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)\n             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)\n\n             CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +\n                        '/INFLATE)               SRCFILE(' *TCAT               +\n                        &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +\n                        ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)\n             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)\n\n             CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +\n                        '/INFTREES)              SRCFILE(' *TCAT               +\n                        &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +\n                        ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)\n             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)\n\n             CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +\n                        '/TREES)                 SRCFILE(' *TCAT               +\n                        &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +\n                        ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)\n             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)\n\n             CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +\n                        '/UNCOMPR)               SRCFILE(' *TCAT               +\n                        &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +\n                        ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)\n             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)\n\n             CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +\n                        '/ZUTIL)                 SRCFILE(' *TCAT               +\n                        &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +\n                        ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)\n             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)\n\n\n/*      Link modules into a service program.                                  */\n\n             CRTSRVPGM  SRVPGM(&SRVLIB/ZLIB) +\n                          MODULE(&MODLIB/ADLER32     &MODLIB/COMPRESS    +\n                                 &MODLIB/CRC32       &MODLIB/DEFLATE     +\n                                 &MODLIB/GZIO        &MODLIB/INFBACK     +\n                                 &MODLIB/INFFAST     &MODLIB/INFLATE     +\n                                 &MODLIB/INFTREES    &MODLIB/TREES       +\n                                 &MODLIB/UNCOMPR     &MODLIB/ZUTIL)      +\n                          SRCFILE(&SRCLIB/&CTLFILE) SRCMBR(BNDSRC) +\n                          TEXT('ZLIB 1.2.3') TGTRLS(V4R4M0)\n\n             ENDPGM\n"
  },
  {
    "path": "external/zlib/old/as400/readme.txt",
    "content": "        ZLIB version 1.2.3 for AS400 installation instructions\n\nI) From an AS400 *SAVF file:\n\n1)      Unpacking archive to an AS400 save file\n\nOn the AS400:\n\n_       Create the ZLIB AS400 library:\n\n        CRTLIB LIB(ZLIB) TYPE(PROD) TEXT('ZLIB compression API library')\n\n_       Create a work save file, for example:\n\n                CRTSAVF FILE(ZLIB/ZLIBSAVF)\n\nOn a PC connected to the target AS400:\n\n_       Unpack the save file image to a PC file \"ZLIBSAVF\"\n_       Upload this file into the save file on the AS400, for example\n                using ftp in BINARY mode.\n\n\n2)      Populating the ZLIB AS400 source library\n\nOn the AS400:\n\n_       Extract the saved objects into the ZLIB AS400 library using:\n\nRSTOBJ OBJ(*ALL) SAVLIB(ZLIB) DEV(*SAVF) SAVF(ZLIB/ZLIBSAVF) RSTLIB(ZLIB)\n\n\n3)      Customize installation:\n\n_       Edit CL member ZLIB/TOOLS(COMPILE) and change parameters if needed,\n                according to the comments.\n\n_       Compile this member with:\n\n        CRTCLPGM PGM(ZLIB/COMPILE) SRCFILE(ZLIB/TOOLS) SRCMBR(COMPILE)\n\n\n4)      Compile and generate the service program:\n\n_       This can now be done by executing:\n\n        CALL PGM(ZLIB/COMPILE)\n\n\n\nII) From the original source distribution:\n\n1)      On the AS400, create the source library:\n\n        CRTLIB LIB(ZLIB) TYPE(PROD) TEXT('ZLIB compression API library')\n\n2)      Create the source files:\n\n        CRTSRCPF FILE(ZLIB/SOURCES) RCDLEN(112) TEXT('ZLIB library modules')\n        CRTSRCPF FILE(ZLIB/H)       RCDLEN(112) TEXT('ZLIB library includes')\n        CRTSRCPF FILE(ZLIB/TOOLS)   RCDLEN(112) TEXT('ZLIB library control utilities')\n\n3)      From the machine hosting the distribution files, upload them (with\n                FTP in text mode, for example) according to the following table:\n\n    Original    AS400   AS400    AS400 AS400\n    file        file    member   type  description\n                SOURCES                Original ZLIB C subprogram sources\n    adler32.c           ADLER32  C     ZLIB - Compute the Adler-32 checksum of a dta strm\n    compress.c          COMPRESS C     ZLIB - Compress a memory buffer\n    crc32.c             CRC32    C     ZLIB - Compute the CRC-32 of a data stream\n    deflate.c           DEFLATE  C     ZLIB - Compress data using the deflation algorithm\n    gzio.c              GZIO     C     ZLIB - IO on .gz files\n    infback.c           INFBACK  C     ZLIB - Inflate using a callback interface\n    inffast.c           INFFAST  C     ZLIB - Fast proc. literals & length/distance pairs\n    inflate.c           INFLATE  C     ZLIB - Interface to inflate modules\n    inftrees.c          INFTREES C     ZLIB - Generate Huffman trees for efficient decode\n    trees.c             TREES    C     ZLIB - Output deflated data using Huffman coding\n    uncompr.c           UNCOMPR  C     ZLIB - Decompress a memory buffer\n    zutil.c             ZUTIL    C     ZLIB - Target dependent utility functions\n                H                      Original ZLIB C and ILE/RPG include files\n    crc32.h             CRC32    C     ZLIB - CRC32 tables\n    deflate.h           DEFLATE  C     ZLIB - Internal compression state\n    inffast.h           INFFAST  C     ZLIB - Header to use inffast.c\n    inffixed.h          INFFIXED C     ZLIB - Table for decoding fixed codes\n    inflate.h           INFLATE  C     ZLIB - Internal inflate state definitions\n    inftrees.h          INFTREES C     ZLIB - Header to use inftrees.c\n    trees.h             TREES    C     ZLIB - Created automatically with -DGEN_TREES_H\n    zconf.h             ZCONF    C     ZLIB - Compression library configuration\n    zlib.h              ZLIB     C     ZLIB - Compression library C user interface\n    as400/zlib.inc      ZLIB.INC RPGLE ZLIB - Compression library ILE RPG user interface\n    zutil.h             ZUTIL    C     ZLIB - Internal interface and configuration\n                TOOLS                  Building source software & AS/400 README\n    as400/bndsrc        BNDSRC         Entry point exportation list\n    as400/compile.clp   COMPILE  CLP   Compile sources & generate service program\n    as400/readme.txt    README   TXT   Installation instructions\n\n4)      Continue as in I)3).\n\n\n\n\nNotes:  For AS400 ILE RPG programmers, a /copy member defining the ZLIB\n                API prototypes for ILE RPG can be found in ZLIB/H(ZLIB.INC).\n                Please read comments in this member for more information.\n\n        Remember that most foreign textual data are ASCII coded: this\n                implementation does not handle conversion from/to ASCII, so\n                text data code conversions must be done explicitely.\n\n        Always open zipped files in binary mode.\n"
  },
  {
    "path": "external/zlib/old/as400/zlib.inc",
    "content": "      *  ZLIB.INC - Interface to the general purpose compression library\n      *\n      *  ILE RPG400 version by Patrick Monnerat, DATASPHERE.\n      *  Version 1.2.3.9\n      *\n      *\n      *  WARNING:\n      *     Procedures inflateInit(), inflateInit2(), deflateInit(),\n      *         deflateInit2() and inflateBackInit() need to be called with\n      *         two additional arguments:\n      *         the package version string and the stream control structure.\n      *         size. This is needed because RPG lacks some macro feature.\n      *         Call these procedures as:\n      *             inflateInit(...: ZLIB_VERSION: %size(z_stream))\n      *\n      /if not defined(ZLIB_H_)\n      /define ZLIB_H_\n      *\n      **************************************************************************\n      *                               Constants\n      **************************************************************************\n      *\n      *  Versioning information.\n      *\n     D ZLIB_VERSION    C                   '1.2.3.9'\n     D ZLIB_VERNUM     C                   X'1239'\n      *\n      *  Other equates.\n      *\n     D Z_NO_FLUSH      C                   0\n     D Z_SYNC_FLUSH    C                   2\n     D Z_FULL_FLUSH    C                   3\n     D Z_FINISH        C                   4\n     D Z_BLOCK         C                   5\n      *\n     D Z_OK            C                   0\n     D Z_STREAM_END    C                   1\n     D Z_NEED_DICT     C                   2\n     D Z_ERRNO         C                   -1\n     D Z_STREAM_ERROR  C                   -2\n     D Z_DATA_ERROR    C                   -3\n     D Z_MEM_ERROR     C                   -4\n     D Z_BUF_ERROR     C                   -5\n     DZ_VERSION_ERROR  C                   -6\n      *\n     D Z_NO_COMPRESSION...\n     D                 C                   0\n     D Z_BEST_SPEED    C                   1\n     D Z_BEST_COMPRESSION...\n     D                 C                   9\n     D Z_DEFAULT_COMPRESSION...\n     D                 C                   -1\n      *\n     D Z_FILTERED      C                   1\n     D Z_HUFFMAN_ONLY  C                   2\n     D Z_RLE           C                   3\n     D Z_DEFAULT_STRATEGY...\n     D                 C                   0\n      *\n     D Z_BINARY        C                   0\n     D Z_ASCII         C                   1\n     D Z_UNKNOWN       C                   2\n      *\n     D Z_DEFLATED      C                   8\n      *\n     D Z_NULL          C                   0\n      *\n      **************************************************************************\n      *                                 Types\n      **************************************************************************\n      *\n     D z_streamp       S               *                                        Stream struct ptr\n     D gzFile          S               *                                        File pointer\n     D z_off_t         S             10i 0                                      Stream offsets\n      *\n      **************************************************************************\n      *                               Structures\n      **************************************************************************\n      *\n      *  The GZIP encode/decode stream support structure.\n      *\n     D z_stream        DS                  align based(z_streamp)\n     D  zs_next_in                     *                                        Next input byte\n     D  zs_avail_in                  10U 0                                      Byte cnt at next_in\n     D  zs_total_in                  10U 0                                      Total bytes read\n     D  zs_next_out                    *                                        Output buffer ptr\n     D  zs_avail_out                 10U 0                                      Room left @ next_out\n     D  zs_total_out                 10U 0                                      Total bytes written\n     D  zs_msg                         *                                        Last errmsg or null\n     D  zs_state                       *                                        Internal state\n     D  zs_zalloc                      *   procptr                              Int. state allocator\n     D  zs_free                        *   procptr                              Int. state dealloc.\n     D  zs_opaque                      *                                        Private alloc. data\n     D  zs_data_type                 10i 0                                      ASC/BIN best guess\n     D  zs_adler                     10u 0                                      Uncompr. adler32 val\n     D                               10U 0                                      Reserved\n     D                               10U 0                                      Ptr. alignment\n      *\n      **************************************************************************\n      *                     Utility function prototypes\n      **************************************************************************\n      *\n     D compress        PR            10I 0 extproc('compress')\n     D  dest                      32767    options(*varsize)                    Destination buffer\n     D  destLen                      10U 0                                      Destination length\n     D  source                    32767    const options(*varsize)              Source buffer\n     D  sourceLen                    10u 0 value                                Source length\n      *\n     D compress2       PR            10I 0 extproc('compress2')\n     D  dest                      32767    options(*varsize)                    Destination buffer\n     D  destLen                      10U 0                                      Destination length\n     D  source                    32767    const options(*varsize)              Source buffer\n     D  sourceLen                    10U 0 value                                Source length\n     D  level                        10I 0 value                                Compression level\n      *\n     D compressBound   PR            10U 0 extproc('compressBound')\n     D  sourceLen                    10U 0 value\n      *\n     D uncompress      PR            10I 0 extproc('uncompress')\n     D  dest                      32767    options(*varsize)                    Destination buffer\n     D  destLen                      10U 0                                      Destination length\n     D  source                    32767    const options(*varsize)              Source buffer\n     D  sourceLen                    10U 0 value                                Source length\n      *\n     D gzopen          PR                  extproc('gzopen')\n     D                                     like(gzFile)\n     D  path                           *   value options(*string)               File pathname\n     D  mode                           *   value options(*string)               Open mode\n      *\n     D gzdopen         PR                  extproc('gzdopen')\n     D                                     like(gzFile)\n     D  fd                           10i 0 value                                File descriptor\n     D  mode                           *   value options(*string)               Open mode\n      *\n     D gzsetparams     PR            10I 0 extproc('gzsetparams')\n     D  file                               value like(gzFile)                   File pointer\n     D  level                        10I 0 value\n     D  strategy                     10i 0 value\n      *\n     D gzread          PR            10I 0 extproc('gzread')\n     D  file                               value like(gzFile)                   File pointer\n     D  buf                       32767    options(*varsize)                    Buffer\n     D  len                          10u 0 value                                Buffer length\n      *\n     D gzwrite         PR            10I 0 extproc('gzwrite')\n     D  file                               value like(gzFile)                   File pointer\n     D  buf                       32767    const options(*varsize)              Buffer\n     D  len                          10u 0 value                                Buffer length\n      *\n     D gzputs          PR            10I 0 extproc('gzputs')\n     D  file                               value like(gzFile)                   File pointer\n     D  s                              *   value options(*string)               String to output\n      *\n     D gzgets          PR              *   extproc('gzgets')\n     D  file                               value like(gzFile)                   File pointer\n     D  buf                       32767    options(*varsize)                    Read buffer\n     D  len                          10i 0 value                                Buffer length\n      *\n     D gzflush         PR            10i 0 extproc('gzflush')\n     D  file                               value like(gzFile)                   File pointer\n     D  flush                        10I 0 value                                Type of flush\n      *\n     D gzseek          PR                  extproc('gzseek')\n     D                                     like(z_off_t)\n     D  file                               value like(gzFile)                   File pointer\n     D  offset                             value like(z_off_t)                  Offset\n     D  whence                       10i 0 value                                Origin\n      *\n     D gzrewind        PR            10i 0 extproc('gzrewind')\n     D  file                               value like(gzFile)                   File pointer\n      *\n     D gztell          PR                  extproc('gztell')\n     D                                     like(z_off_t)\n     D  file                               value like(gzFile)                   File pointer\n      *\n     D gzeof           PR            10i 0 extproc('gzeof')\n     D  file                               value like(gzFile)                   File pointer\n      *\n     D gzclose         PR            10i 0 extproc('gzclose')\n     D  file                               value like(gzFile)                   File pointer\n      *\n     D gzerror         PR              *   extproc('gzerror')                   Error string\n     D  file                               value like(gzFile)                   File pointer\n     D  errnum                       10I 0                                      Error code\n      *\n     D gzclearerr      PR                  extproc('gzclearerr')\n     D  file                               value like(gzFile)                   File pointer\n      *\n      **************************************************************************\n      *                        Basic function prototypes\n      **************************************************************************\n      *\n     D zlibVersion     PR              *   extproc('zlibVersion')               Version string\n      *\n     D deflateInit     PR            10I 0 extproc('deflateInit_')              Init. compression\n     D  strm                               like(z_stream)                       Compression stream\n     D  level                        10I 0 value                                Compression level\n     D  version                        *   value options(*string)               Version string\n     D  stream_size                  10i 0 value                                Stream struct. size\n      *\n     D deflate         PR            10I 0 extproc('deflate')                   Compress data\n     D  strm                               like(z_stream)                       Compression stream\n     D  flush                        10I 0 value                                Flush type required\n      *\n     D deflateEnd      PR            10I 0 extproc('deflateEnd')                Termin. compression\n     D  strm                               like(z_stream)                       Compression stream\n      *\n     D inflateInit     PR            10I 0 extproc('inflateInit_')              Init. expansion\n     D  strm                               like(z_stream)                       Expansion stream\n     D  version                        *   value options(*string)               Version string\n     D  stream_size                  10i 0 value                                Stream struct. size\n      *\n     D inflate         PR            10I 0 extproc('inflate')                   Expand data\n     D  strm                               like(z_stream)                       Expansion stream\n     D  flush                        10I 0 value                                Flush type required\n      *\n     D inflateEnd      PR            10I 0 extproc('inflateEnd')                Termin. expansion\n     D  strm                               like(z_stream)                       Expansion stream\n      *\n      **************************************************************************\n      *                        Advanced function prototypes\n      **************************************************************************\n      *\n     D deflateInit2    PR            10I 0 extproc('deflateInit2_')             Init. compression\n     D  strm                               like(z_stream)                       Compression stream\n     D  level                        10I 0 value                                Compression level\n     D  method                       10I 0 value                                Compression method\n     D  windowBits                   10I 0 value                                log2(window size)\n     D  memLevel                     10I 0 value                                Mem/cmpress tradeoff\n     D  strategy                     10I 0 value                                Compression stategy\n     D  version                        *   value options(*string)               Version string\n     D  stream_size                  10i 0 value                                Stream struct. size\n      *\n     D deflateSetDictionary...\n     D                 PR            10I 0 extproc('deflateSetDictionary')      Init. dictionary\n     D  strm                               like(z_stream)                       Compression stream\n     D  dictionary                32767    const options(*varsize)              Dictionary bytes\n     D  dictLength                   10U 0 value                                Dictionary length\n      *\n     D deflateCopy     PR            10I 0 extproc('deflateCopy')               Compress strm 2 strm\n     D  dest                               like(z_stream)                       Destination stream\n     D  source                             like(z_stream)                       Source stream\n      *\n     D deflateReset    PR            10I 0 extproc('deflateReset')              End and init. stream\n     D  strm                               like(z_stream)                       Compression stream\n      *\n     D deflateParams   PR            10I 0 extproc('deflateParams')             Change level & strat\n     D  strm                               like(z_stream)                       Compression stream\n     D  level                        10I 0 value                                Compression level\n     D  strategy                     10I 0 value                                Compression stategy\n      *\n     D deflateBound    PR            10U 0 extproc('deflateBound')              Change level & strat\n     D  strm                               like(z_stream)                       Compression stream\n     D  sourcelen                    10U 0 value                                Compression level\n      *\n     D deflatePrime    PR            10I 0 extproc('deflatePrime')              Change level & strat\n     D  strm                               like(z_stream)                       Compression stream\n     D  bits                         10I 0 value                                Number of bits to insert\n     D  value                        10I 0 value                                Bits to insert\n      *\n     D inflateInit2    PR            10I 0 extproc('inflateInit2_')             Init. expansion\n     D  strm                               like(z_stream)                       Expansion stream\n     D  windowBits                   10I 0 value                                log2(window size)\n     D  version                        *   value options(*string)               Version string\n     D  stream_size                  10i 0 value                                Stream struct. size\n      *\n     D inflateSetDictionary...\n     D                 PR            10I 0 extproc('inflateSetDictionary')      Init. dictionary\n     D  strm                               like(z_stream)                       Expansion stream\n     D  dictionary                32767    const options(*varsize)              Dictionary bytes\n     D  dictLength                   10U 0 value                                Dictionary length\n      *\n     D inflateSync     PR            10I 0 extproc('inflateSync')               Sync. expansion\n     D  strm                               like(z_stream)                       Expansion stream\n      *\n     D inflateCopy     PR            10I 0 extproc('inflateCopy')\n     D  dest                               like(z_stream)                       Destination stream\n     D  source                             like(z_stream)                       Source stream\n      *\n     D inflateReset    PR            10I 0 extproc('inflateReset')              End and init. stream\n     D  strm                               like(z_stream)                       Expansion stream\n      *\n     D inflateBackInit...\n     D                 PR            10I 0 extproc('inflateBackInit_')\n     D  strm                               like(z_stream)                       Expansion stream\n     D  windowBits                   10I 0 value                                Log2(buffer size)\n     D  window                    32767    options(*varsize)                    Buffer\n     D  version                        *   value options(*string)               Version string\n     D  stream_size                  10i 0 value                                Stream struct. size\n      *\n     D inflateBack     PR            10I 0 extproc('inflateBack')\n     D  strm                               like(z_stream)                       Expansion stream\n     D  in                             *   value procptr                        Input function\n     D  in_desc                        *   value                                Input descriptor\n     D  out                            *   value procptr                        Output function\n     D  out_desc                       *   value                                Output descriptor\n      *\n     D inflateBackEnd  PR            10I 0 extproc('inflateBackEnd')\n     D  strm                               like(z_stream)                       Expansion stream\n      *\n     D zlibCompileFlags...\n     D                 PR            10U 0 extproc('zlibCompileFlags')\n      *\n      **************************************************************************\n      *                        Checksum function prototypes\n      **************************************************************************\n      *\n     D adler32         PR            10U 0 extproc('adler32')                   New checksum\n     D  adler                        10U 0 value                                Old checksum\n     D  buf                       32767    const options(*varsize)              Bytes to accumulate\n     D  len                          10U 0 value                                Buffer length\n      *\n     D crc32           PR            10U 0 extproc('crc32')                     New checksum\n     D  crc                          10U 0 value                                Old checksum\n     D  buf                       32767    const options(*varsize)              Bytes to accumulate\n     D  len                          10U 0 value                                Buffer length\n      *\n      **************************************************************************\n      *                     Miscellaneous function prototypes\n      **************************************************************************\n      *\n     D zError          PR              *   extproc('zError')                    Error string\n     D  err                          10I 0 value                                Error code\n      *\n     D inflateSyncPoint...\n     D                 PR            10I 0 extproc('inflateSyncPoint')\n     D  strm                               like(z_stream)                       Expansion stream\n      *\n     D get_crc_table   PR              *   extproc('get_crc_table')             Ptr to ulongs\n      *\n      /endif\n"
  },
  {
    "path": "external/zlib/old/descrip.mms",
    "content": "# descrip.mms: MMS description file for building zlib on VMS\n# written by Martin P.J. Zinser <m.zinser@gsi.de>\n\ncc_defs =\nc_deb =\n\n.ifdef __DECC__\npref = /prefix=all\n.endif\n\nOBJS = adler32.obj, compress.obj, crc32.obj, gzio.obj, uncompr.obj,\\\n       deflate.obj, trees.obj, zutil.obj, inflate.obj, infblock.obj,\\\n       inftrees.obj, infcodes.obj, infutil.obj, inffast.obj\n\nCFLAGS= $(C_DEB) $(CC_DEFS) $(PREF)\n\nall : example.exe minigzip.exe\n        @ write sys$output \" Example applications available\"\nlibz.olb : libz.olb($(OBJS))\n\t@ write sys$output \" libz available\"\n\nexample.exe : example.obj libz.olb\n              link example,libz.olb/lib\n\nminigzip.exe : minigzip.obj libz.olb\n              link minigzip,libz.olb/lib,x11vms:xvmsutils.olb/lib\n\nclean :\n\tdelete *.obj;*,libz.olb;*\n\n\n# Other dependencies.\nadler32.obj : zutil.h zlib.h zconf.h\ncompress.obj : zlib.h zconf.h\ncrc32.obj : zutil.h zlib.h zconf.h\ndeflate.obj : deflate.h zutil.h zlib.h zconf.h\nexample.obj : zlib.h zconf.h\ngzio.obj : zutil.h zlib.h zconf.h\ninfblock.obj : zutil.h zlib.h zconf.h infblock.h inftrees.h infcodes.h infutil.h\ninfcodes.obj : zutil.h zlib.h zconf.h inftrees.h infutil.h infcodes.h inffast.h\ninffast.obj : zutil.h zlib.h zconf.h inftrees.h infutil.h inffast.h\ninflate.obj : zutil.h zlib.h zconf.h infblock.h\ninftrees.obj : zutil.h zlib.h zconf.h inftrees.h\ninfutil.obj : zutil.h zlib.h zconf.h inftrees.h infutil.h\nminigzip.obj : zlib.h zconf.h\ntrees.obj : deflate.h zutil.h zlib.h zconf.h\nuncompr.obj : zlib.h zconf.h\nzutil.obj : zutil.h zlib.h zconf.h\n"
  },
  {
    "path": "external/zlib/old/os2/Makefile.os2",
    "content": "# Makefile for zlib under OS/2 using GCC (PGCC)\n# For conditions of distribution and use, see copyright notice in zlib.h\n\n# To compile and test, type:\n#   cp Makefile.os2 ..\n#   cd ..\n#   make -f Makefile.os2 test\n\n# This makefile will build a static library z.lib, a shared library\n# z.dll and a import library zdll.lib. You can use either z.lib or\n# zdll.lib by specifying either -lz or -lzdll on gcc's command line\n\nCC=gcc -Zomf -s\n\nCFLAGS=-O6 -Wall\n#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7\n#CFLAGS=-g -DDEBUG\n#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \\\n#           -Wstrict-prototypes -Wmissing-prototypes\n\n#################### BUG WARNING: #####################\n## infcodes.c hits a bug in pgcc-1.0, so you have to use either\n## -O# where # <= 4 or one of (-fno-ommit-frame-pointer or -fno-force-mem)\n## This bug is reportedly fixed in pgcc >1.0, but this was not tested\nCFLAGS+=-fno-force-mem\n\nLDFLAGS=-s -L. -lzdll -Zcrtdll\nLDSHARED=$(CC) -s -Zomf -Zdll -Zcrtdll\n\nVER=1.1.0\nZLIB=z.lib\nSHAREDLIB=z.dll\nSHAREDLIBIMP=zdll.lib\nLIBS=$(ZLIB) $(SHAREDLIB) $(SHAREDLIBIMP)\n\nAR=emxomfar cr\nIMPLIB=emximp\nRANLIB=echo\nTAR=tar\nSHELL=bash\n\nprefix=/usr/local\nexec_prefix = $(prefix)\n\nOBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \\\n       zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o\n\nTEST_OBJS = example.o minigzip.o\n\nDISTFILES = README INDEX ChangeLog configure Make*[a-z0-9] *.[ch] descrip.mms \\\n  algorithm.txt zlib.3 msdos/Make*[a-z0-9] msdos/zlib.def msdos/zlib.rc \\\n  nt/Makefile.nt nt/zlib.dnt  contrib/README.contrib contrib/*.txt \\\n  contrib/asm386/*.asm contrib/asm386/*.c \\\n  contrib/asm386/*.bat contrib/asm386/zlibvc.d?? contrib/iostream/*.cpp \\\n  contrib/iostream/*.h  contrib/iostream2/*.h contrib/iostream2/*.cpp \\\n  contrib/untgz/Makefile contrib/untgz/*.c contrib/untgz/*.w32\n\nall: example.exe minigzip.exe\n\ntest: all\n\t@LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \\\n\techo hello world | ./minigzip | ./minigzip -d || \\\n\t  echo '\t\t*** minigzip test FAILED ***' ; \\\n\tif ./example; then \\\n\t  echo '\t\t*** zlib test OK ***'; \\\n\telse \\\n\t  echo '\t\t*** zlib test FAILED ***'; \\\n\tfi\n\n$(ZLIB): $(OBJS)\n\t$(AR) $@ $(OBJS)\n\t-@ ($(RANLIB) $@ || true) >/dev/null 2>&1\n\n$(SHAREDLIB): $(OBJS) os2/z.def\n\t$(LDSHARED) -o $@ $^\n\n$(SHAREDLIBIMP): os2/z.def\n\t$(IMPLIB) -o $@ $^\n\nexample.exe: example.o $(LIBS)\n\t$(CC) $(CFLAGS) -o $@ example.o $(LDFLAGS)\n\nminigzip.exe: minigzip.o $(LIBS)\n\t$(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS)\n\nclean:\n\trm -f *.o *~ example minigzip libz.a libz.so* foo.gz\n\ndistclean:\tclean\n\nzip:\n\tmv Makefile Makefile~; cp -p Makefile.in Makefile\n\trm -f test.c ztest*.c\n\tv=`sed -n -e 's/\\.//g' -e '/VERSION \"/s/.*\"\\(.*\\)\".*/\\1/p' < zlib.h`;\\\n\tzip -ul9 zlib$$v $(DISTFILES)\n\tmv Makefile~ Makefile\n\ndist:\n\tmv Makefile Makefile~; cp -p Makefile.in Makefile\n\trm -f test.c ztest*.c\n\td=zlib-`sed -n '/VERSION \"/s/.*\"\\(.*\\)\".*/\\1/p' < zlib.h`;\\\n\trm -f $$d.tar.gz; \\\n\tif test ! -d ../$$d; then rm -f ../$$d; ln -s `pwd` ../$$d; fi; \\\n\tfiles=\"\"; \\\n\tfor f in $(DISTFILES); do files=\"$$files $$d/$$f\"; done; \\\n\tcd ..; \\\n\tGZIP=-9 $(TAR) chofz $$d/$$d.tar.gz $$files; \\\n\tif test ! -d $$d; then rm -f $$d; fi\n\tmv Makefile~ Makefile\n\ntags:\n\tetags *.[ch]\n\ndepend:\n\tmakedepend -- $(CFLAGS) -- *.[ch]\n\n# DO NOT DELETE THIS LINE -- make depend depends on it.\n\nadler32.o: zlib.h zconf.h\ncompress.o: zlib.h zconf.h\ncrc32.o: zlib.h zconf.h\ndeflate.o: deflate.h zutil.h zlib.h zconf.h\nexample.o: zlib.h zconf.h\ngzio.o: zutil.h zlib.h zconf.h\ninfblock.o: infblock.h inftrees.h infcodes.h infutil.h zutil.h zlib.h zconf.h\ninfcodes.o: zutil.h zlib.h zconf.h\ninfcodes.o: inftrees.h infblock.h infcodes.h infutil.h inffast.h\ninffast.o: zutil.h zlib.h zconf.h inftrees.h\ninffast.o: infblock.h infcodes.h infutil.h inffast.h\ninflate.o: zutil.h zlib.h zconf.h infblock.h\ninftrees.o: zutil.h zlib.h zconf.h inftrees.h\ninfutil.o: zutil.h zlib.h zconf.h infblock.h inftrees.h infcodes.h infutil.h\nminigzip.o: zlib.h zconf.h\ntrees.o: deflate.h zutil.h zlib.h zconf.h trees.h\nuncompr.o: zlib.h zconf.h\nzutil.o: zutil.h zlib.h zconf.h\n"
  },
  {
    "path": "external/zlib/old/os2/zlib.def",
    "content": ";\n; Slightly modified version of ../nt/zlib.dnt :-)\n;\n\nLIBRARY\t\tZ\nDESCRIPTION\t\"Zlib compression library for OS/2\"\nCODE\t\tPRELOAD MOVEABLE DISCARDABLE\nDATA\t\tPRELOAD MOVEABLE MULTIPLE\n\nEXPORTS\n    adler32\n    compress\n    crc32\n    deflate\n    deflateCopy\n    deflateEnd\n    deflateInit2_\n    deflateInit_\n    deflateParams\n    deflateReset\n    deflateSetDictionary\n    gzclose\n    gzdopen\n    gzerror\n    gzflush\n    gzopen\n    gzread\n    gzwrite\n    inflate\n    inflateEnd\n    inflateInit2_\n    inflateInit_\n    inflateReset\n    inflateSetDictionary\n    inflateSync\n    uncompress\n    zlibVersion\n    gzprintf\n    gzputc\n    gzgetc\n    gzseek\n    gzrewind\n    gztell\n    gzeof\n    gzsetparams\n    zError\n    inflateSyncPoint\n    get_crc_table\n    compress2\n    gzputs\n    gzgets\n"
  },
  {
    "path": "external/zlib/old/visual-basic.txt",
    "content": "See below some functions declarations for Visual Basic.\n\nFrequently Asked Question:\n\nQ: Each time I use the compress function I get the -5 error (not enough\n   room in the output buffer).\n\nA: Make sure that the length of the compressed buffer is passed by\n   reference (\"as any\"), not by value (\"as long\"). Also check that\n   before the call of compress this length is equal to the total size of\n   the compressed buffer and not zero.\n\n\nFrom: \"Jon Caruana\" <jon-net@usa.net>\nSubject: Re: How to port zlib declares to vb?\nDate: Mon, 28 Oct 1996 18:33:03 -0600\n\nGot the answer! (I haven't had time to check this but it's what I got, and\nlooks correct):\n\nHe has the following routines working:\n        compress\n        uncompress\n        gzopen\n        gzwrite\n        gzread\n        gzclose\n\nDeclares follow: (Quoted from Carlos Rios <c_rios@sonda.cl>, in Vb4 form)\n\n#If Win16 Then   'Use Win16 calls.\nDeclare Function compress Lib \"ZLIB.DLL\" (ByVal compr As\n        String, comprLen As Any, ByVal buf As String, ByVal buflen\n        As Long) As Integer\nDeclare Function uncompress Lib \"ZLIB.DLL\" (ByVal uncompr\n        As String, uncomprLen As Any, ByVal compr As String, ByVal\n        lcompr As Long) As Integer\nDeclare Function gzopen Lib \"ZLIB.DLL\" (ByVal filePath As\n        String, ByVal mode As String) As Long\nDeclare Function gzread Lib \"ZLIB.DLL\" (ByVal file As\n        Long, ByVal uncompr As String, ByVal uncomprLen As Integer)\n        As Integer\nDeclare Function gzwrite Lib \"ZLIB.DLL\" (ByVal file As\n        Long, ByVal uncompr As String, ByVal uncomprLen As Integer)\n        As Integer\nDeclare Function gzclose Lib \"ZLIB.DLL\" (ByVal file As\n        Long) As Integer\n#Else\nDeclare Function compress Lib \"ZLIB32.DLL\"\n        (ByVal compr As String, comprLen As Any, ByVal buf As\n        String, ByVal buflen As Long) As Integer\nDeclare Function uncompress Lib \"ZLIB32.DLL\"\n        (ByVal uncompr As String, uncomprLen As Any, ByVal compr As\n        String, ByVal lcompr As Long) As Long\nDeclare Function gzopen Lib \"ZLIB32.DLL\"\n        (ByVal file As String, ByVal mode As String) As Long\nDeclare Function gzread Lib \"ZLIB32.DLL\"\n        (ByVal file As Long, ByVal uncompr As String, ByVal\n        uncomprLen As Long) As Long\nDeclare Function gzwrite Lib \"ZLIB32.DLL\"\n        (ByVal file As Long, ByVal uncompr As String, ByVal\n        uncomprLen As Long) As Long\nDeclare Function gzclose Lib \"ZLIB32.DLL\"\n        (ByVal file As Long) As Long\n#End If\n\n-Jon Caruana\njon-net@usa.net\nMicrosoft Sitebuilder Network Level 1 Member - HTML Writer's Guild Member\n\n\nHere is another example from Michael <michael_borgsys@hotmail.com> that he\nsays conforms to the VB guidelines, and that solves the problem of not\nknowing the uncompressed size by storing it at the end of the file:\n\n'Calling the functions:\n'bracket meaning: <parameter> [optional] {Range of possible values}\n'Call subCompressFile(<path with filename to compress> [, <path with\nfilename to write to>, [level of compression {1..9}]])\n'Call subUncompressFile(<path with filename to compress>)\n\nOption Explicit\nPrivate lngpvtPcnSml As Long 'Stores value for 'lngPercentSmaller'\nPrivate Const SUCCESS As Long = 0\nPrivate Const strFilExt As String = \".cpr\"\nPrivate Declare Function lngfncCpr Lib \"zlib.dll\" Alias \"compress2\" (ByRef\ndest As Any, ByRef destLen As Any, ByRef src As Any, ByVal srcLen As Long,\nByVal level As Integer) As Long\nPrivate Declare Function lngfncUcp Lib \"zlib.dll\" Alias \"uncompress\" (ByRef\ndest As Any, ByRef destLen As Any, ByRef src As Any, ByVal srcLen As Long)\nAs Long\n\nPublic Sub subCompressFile(ByVal strargOriFilPth As String, Optional ByVal\nstrargCprFilPth As String, Optional ByVal intLvl As Integer = 9)\n    Dim strCprPth As String\n    Dim lngOriSiz As Long\n    Dim lngCprSiz As Long\n    Dim bytaryOri() As Byte\n    Dim bytaryCpr() As Byte\n    lngOriSiz = FileLen(strargOriFilPth)\n    ReDim bytaryOri(lngOriSiz - 1)\n    Open strargOriFilPth For Binary Access Read As #1\n        Get #1, , bytaryOri()\n    Close #1\n    strCprPth = IIf(strargCprFilPth = \"\", strargOriFilPth, strargCprFilPth)\n'Select file path and name\n    strCprPth = strCprPth & IIf(Right(strCprPth, Len(strFilExt)) =\nstrFilExt, \"\", strFilExt) 'Add file extension if not exists\n    lngCprSiz = (lngOriSiz * 1.01) + 12 'Compression needs temporary a bit\nmore space then original file size\n    ReDim bytaryCpr(lngCprSiz - 1)\n    If lngfncCpr(bytaryCpr(0), lngCprSiz, bytaryOri(0), lngOriSiz, intLvl) =\nSUCCESS Then\n        lngpvtPcnSml = (1# - (lngCprSiz / lngOriSiz)) * 100\n        ReDim Preserve bytaryCpr(lngCprSiz - 1)\n        Open strCprPth For Binary Access Write As #1\n            Put #1, , bytaryCpr()\n            Put #1, , lngOriSiz 'Add the the original size value to the end\n(last 4 bytes)\n        Close #1\n    Else\n        MsgBox \"Compression error\"\n    End If\n    Erase bytaryCpr\n    Erase bytaryOri\nEnd Sub\n\nPublic Sub subUncompressFile(ByVal strargFilPth As String)\n    Dim bytaryCpr() As Byte\n    Dim bytaryOri() As Byte\n    Dim lngOriSiz As Long\n    Dim lngCprSiz As Long\n    Dim strOriPth As String\n    lngCprSiz = FileLen(strargFilPth)\n    ReDim bytaryCpr(lngCprSiz - 1)\n    Open strargFilPth For Binary Access Read As #1\n        Get #1, , bytaryCpr()\n    Close #1\n    'Read the original file size value:\n    lngOriSiz = bytaryCpr(lngCprSiz - 1) * (2 ^ 24) _\n              + bytaryCpr(lngCprSiz - 2) * (2 ^ 16) _\n              + bytaryCpr(lngCprSiz - 3) * (2 ^ 8) _\n              + bytaryCpr(lngCprSiz - 4)\n    ReDim Preserve bytaryCpr(lngCprSiz - 5) 'Cut of the original size value\n    ReDim bytaryOri(lngOriSiz - 1)\n    If lngfncUcp(bytaryOri(0), lngOriSiz, bytaryCpr(0), lngCprSiz) = SUCCESS\nThen\n        strOriPth = Left(strargFilPth, Len(strargFilPth) - Len(strFilExt))\n        Open strOriPth For Binary Access Write As #1\n            Put #1, , bytaryOri()\n        Close #1\n    Else\n        MsgBox \"Uncompression error\"\n    End If\n    Erase bytaryCpr\n    Erase bytaryOri\nEnd Sub\nPublic Property Get lngPercentSmaller() As Long\n    lngPercentSmaller = lngpvtPcnSml\nEnd Property\n"
  },
  {
    "path": "external/zlib/old/visualc6/README.txt",
    "content": "Microsoft Developer Studio Project Files, Format Version 6.00 for zlib.\n\nCopyright (C) 2000-2004 Simon-Pierre Cadieux.\nCopyright (C) 2004 Cosmin Truta.\nFor conditions of distribution and use, see copyright notice in zlib.h.\n\n\nThis project builds the zlib binaries as follows:\n\n* Win32_DLL_Release\\zlib1.dll       DLL build\n* Win32_DLL_Debug\\zlib1d.dll        DLL build (debug version)\n* Win32_DLL_ASM_Release\\zlib1.dll   DLL build using ASM code\n* Win32_DLL_ASM_Debug\\zlib1d.dll    DLL build using ASM code (debug version)\n* Win32_LIB_Release\\zlib.lib        static build\n* Win32_LIB_Debug\\zlibd.lib         static build (debug version)\n* Win32_LIB_ASM_Release\\zlib.lib    static build using ASM code\n* Win32_LIB_ASM_Debug\\zlibd.lib     static build using ASM code (debug version)\n\n\nFor more information regarding the DLL builds, please see the DLL FAQ\nin ..\\..\\win32\\DLL_FAQ.txt.\n\n\nTo build and test:\n\n1) On the main menu, select \"File | Open Workspace\".\n   Open \"zlib.dsw\".\n\n2) Select \"Build | Set Active Configuration\".\n   Choose the configuration you wish to build.\n\n3) Select \"Build | Clean\".\n\n4) Select \"Build | Build ... (F7)\".  Ignore warning messages about\n   not being able to find certain include files (e.g. alloc.h).\n\n5) If you built one of the sample programs (example or minigzip),\n   select \"Build | Execute ... (Ctrl+F5)\".\n\n\nTo use:\n\n1) Select \"Project | Settings (Alt+F7)\".\n   Make note of the configuration names used in your project.\n   Usually, these names are \"Win32 Release\" and \"Win32 Debug\".\n\n2) In the Workspace window, select the \"FileView\" tab.\n   Right-click on the root item \"Workspace '...'\".\n   Select \"Insert Project into Workspace\".\n   Switch on the checkbox \"Dependency of:\", and select the name\n   of your project.  Open \"zlib.dsp\".\n\n3) Select \"Build | Configurations\".\n   For each configuration of your project:\n   3.1) Choose the zlib configuration you wish to use.\n   3.2) Click on \"Add\".\n   3.3) Set the new zlib configuration name to the name used by\n        the configuration from the current iteration.\n\n4) Select \"Build | Set Active Configuration\".\n   Choose the configuration you wish to build.\n\n5) Select \"Build | Build ... (F7)\".\n\n6) If you built an executable program, select\n   \"Build | Execute ... (Ctrl+F5)\".\n\n\nNote:\n\nTo build the ASM-enabled code, you need Microsoft Assembler\n(ML.EXE).  You can get it by downloading and installing the\nlatest Processor Pack for Visual C++ 6.0.\n"
  },
  {
    "path": "external/zlib/old/visualc6/example.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"example\" - Package Owner=<4>\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\n# ** DO NOT EDIT **\n\n# TARGTYPE \"Win32 (x86) Console Application\" 0x0103\n\nCFG=example - Win32 LIB Debug\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\n!MESSAGE use the Export Makefile command and run\n!MESSAGE\n!MESSAGE NMAKE /f \"example.mak\".\n!MESSAGE\n!MESSAGE You can specify a configuration when running NMAKE\n!MESSAGE by defining the macro CFG on the command line. For example:\n!MESSAGE\n!MESSAGE NMAKE /f \"example.mak\" CFG=\"example - Win32 LIB Debug\"\n!MESSAGE\n!MESSAGE Possible choices for configuration are:\n!MESSAGE\n!MESSAGE \"example - Win32 DLL ASM Release\" (based on \"Win32 (x86) Console Application\")\n!MESSAGE \"example - Win32 DLL ASM Debug\" (based on \"Win32 (x86) Console Application\")\n!MESSAGE \"example - Win32 DLL Release\" (based on \"Win32 (x86) Console Application\")\n!MESSAGE \"example - Win32 DLL Debug\" (based on \"Win32 (x86) Console Application\")\n!MESSAGE \"example - Win32 LIB ASM Release\" (based on \"Win32 (x86) Console Application\")\n!MESSAGE \"example - Win32 LIB ASM Debug\" (based on \"Win32 (x86) Console Application\")\n!MESSAGE \"example - Win32 LIB Release\" (based on \"Win32 (x86) Console Application\")\n!MESSAGE \"example - Win32 LIB Debug\" (based on \"Win32 (x86) Console Application\")\n!MESSAGE\n\n# Begin Project\n# PROP AllowPerConfigDependencies 0\n# PROP Scc_ProjName \"\"\n# PROP Scc_LocalPath \"\"\nCPP=cl.exe\nRSC=rc.exe\n\n!IF  \"$(CFG)\" == \"example - Win32 DLL ASM Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"example___Win32_DLL_ASM_Release\"\n# PROP BASE Intermediate_Dir \"example___Win32_DLL_ASM_Release\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"Win32_DLL_ASM_Release\"\n# PROP Intermediate_Dir \"Win32_DLL_ASM_Release\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"NDEBUG\" /FD /c\n# SUBTRACT BASE CPP /YX\n# ADD CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"NDEBUG\" /FD /c\n# SUBTRACT CPP /YX\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\n# ADD RSC /l 0x409 /d \"NDEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\n# ADD LINK32 /nologo /subsystem:console /machine:I386\n\n!ELSEIF  \"$(CFG)\" == \"example - Win32 DLL ASM Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"example___Win32_DLL_ASM_Debug\"\n# PROP BASE Intermediate_Dir \"example___Win32_DLL_ASM_Debug\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"Win32_DLL_ASM_Debug\"\n# PROP Intermediate_Dir \"Win32_DLL_ASM_Debug\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /FD /GZ /c\n# SUBTRACT BASE CPP /YX\n# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"_DEBUG\" /FR /FD /GZ /c\n# SUBTRACT CPP /YX\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\n# ADD RSC /l 0x409 /d \"_DEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\n# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\n\n!ELSEIF  \"$(CFG)\" == \"example - Win32 DLL Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"example___Win32_DLL_Release\"\n# PROP BASE Intermediate_Dir \"example___Win32_DLL_Release\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"Win32_DLL_Release\"\n# PROP Intermediate_Dir \"Win32_DLL_Release\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"NDEBUG\" /FD /c\n# SUBTRACT BASE CPP /YX\n# ADD CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"NDEBUG\" /FD /c\n# SUBTRACT CPP /YX\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\n# ADD RSC /l 0x409 /d \"NDEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\n# ADD LINK32 /nologo /subsystem:console /machine:I386\n\n!ELSEIF  \"$(CFG)\" == \"example - Win32 DLL Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"example___Win32_DLL_Debug\"\n# PROP BASE Intermediate_Dir \"example___Win32_DLL_Debug\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"Win32_DLL_Debug\"\n# PROP Intermediate_Dir \"Win32_DLL_Debug\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /FD /GZ /c\n# SUBTRACT BASE CPP /YX\n# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"_DEBUG\" /FR /FD /GZ /c\n# SUBTRACT CPP /YX\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\n# ADD RSC /l 0x409 /d \"_DEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\n# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\n\n!ELSEIF  \"$(CFG)\" == \"example - Win32 LIB ASM Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"example___Win32_LIB_ASM_Release\"\n# PROP BASE Intermediate_Dir \"example___Win32_LIB_ASM_Release\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"Win32_LIB_ASM_Release\"\n# PROP Intermediate_Dir \"Win32_LIB_ASM_Release\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"NDEBUG\" /FD /c\n# SUBTRACT BASE CPP /YX\n# ADD CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"NDEBUG\" /FD /c\n# SUBTRACT CPP /YX\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\n# ADD RSC /l 0x409 /d \"NDEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\n# ADD LINK32 /nologo /subsystem:console /machine:I386\n\n!ELSEIF  \"$(CFG)\" == \"example - Win32 LIB ASM Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"example___Win32_LIB_ASM_Debug\"\n# PROP BASE Intermediate_Dir \"example___Win32_LIB_ASM_Debug\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"Win32_LIB_ASM_Debug\"\n# PROP Intermediate_Dir \"Win32_LIB_ASM_Debug\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /FD /GZ /c\n# SUBTRACT BASE CPP /YX\n# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"_DEBUG\" /FR /FD /GZ /c\n# SUBTRACT CPP /YX\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\n# ADD RSC /l 0x409 /d \"_DEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\n# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\n\n!ELSEIF  \"$(CFG)\" == \"example - Win32 LIB Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"example___Win32_LIB_Release\"\n# PROP BASE Intermediate_Dir \"example___Win32_LIB_Release\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"Win32_LIB_Release\"\n# PROP Intermediate_Dir \"Win32_LIB_Release\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"NDEBUG\" /FD /c\n# SUBTRACT BASE CPP /YX\n# ADD CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"NDEBUG\" /FD /c\n# SUBTRACT CPP /YX\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\n# ADD RSC /l 0x409 /d \"NDEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\n# ADD LINK32 /nologo /subsystem:console /machine:I386\n\n!ELSEIF  \"$(CFG)\" == \"example - Win32 LIB Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"example___Win32_LIB_Debug\"\n# PROP BASE Intermediate_Dir \"example___Win32_LIB_Debug\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"Win32_LIB_Debug\"\n# PROP Intermediate_Dir \"Win32_LIB_Debug\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /FD /GZ /c\n# SUBTRACT BASE CPP /YX\n# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"_DEBUG\" /FR /FD /GZ /c\n# SUBTRACT CPP /YX\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\n# ADD RSC /l 0x409 /d \"_DEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\n# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\n\n!ENDIF\n\n# Begin Target\n\n# Name \"example - Win32 DLL ASM Release\"\n# Name \"example - Win32 DLL ASM Debug\"\n# Name \"example - Win32 DLL Release\"\n# Name \"example - Win32 DLL Debug\"\n# Name \"example - Win32 LIB ASM Release\"\n# Name \"example - Win32 LIB ASM Debug\"\n# Name \"example - Win32 LIB Release\"\n# Name \"example - Win32 LIB Debug\"\n# Begin Group \"Source Files\"\n\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n# Begin Source File\n\nSOURCE=..\\..\\example.c\n# End Source File\n# End Group\n# Begin Group \"Header Files\"\n\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\n# Begin Source File\n\nSOURCE=..\\..\\zconf.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\zlib.h\n# End Source File\n# End Group\n# End Target\n# End Project\n"
  },
  {
    "path": "external/zlib/old/visualc6/minigzip.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"minigzip\" - Package Owner=<4>\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\n# ** DO NOT EDIT **\n\n# TARGTYPE \"Win32 (x86) Console Application\" 0x0103\n\nCFG=minigzip - Win32 LIB Debug\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\n!MESSAGE use the Export Makefile command and run\n!MESSAGE\n!MESSAGE NMAKE /f \"minigzip.mak\".\n!MESSAGE\n!MESSAGE You can specify a configuration when running NMAKE\n!MESSAGE by defining the macro CFG on the command line. For example:\n!MESSAGE\n!MESSAGE NMAKE /f \"minigzip.mak\" CFG=\"minigzip - Win32 LIB Debug\"\n!MESSAGE\n!MESSAGE Possible choices for configuration are:\n!MESSAGE\n!MESSAGE \"minigzip - Win32 DLL ASM Release\" (based on \"Win32 (x86) Console Application\")\n!MESSAGE \"minigzip - Win32 DLL ASM Debug\" (based on \"Win32 (x86) Console Application\")\n!MESSAGE \"minigzip - Win32 DLL Release\" (based on \"Win32 (x86) Console Application\")\n!MESSAGE \"minigzip - Win32 DLL Debug\" (based on \"Win32 (x86) Console Application\")\n!MESSAGE \"minigzip - Win32 LIB ASM Release\" (based on \"Win32 (x86) Console Application\")\n!MESSAGE \"minigzip - Win32 LIB ASM Debug\" (based on \"Win32 (x86) Console Application\")\n!MESSAGE \"minigzip - Win32 LIB Release\" (based on \"Win32 (x86) Console Application\")\n!MESSAGE \"minigzip - Win32 LIB Debug\" (based on \"Win32 (x86) Console Application\")\n!MESSAGE\n\n# Begin Project\n# PROP AllowPerConfigDependencies 0\n# PROP Scc_ProjName \"\"\n# PROP Scc_LocalPath \"\"\nCPP=cl.exe\nRSC=rc.exe\n\n!IF  \"$(CFG)\" == \"minigzip - Win32 DLL ASM Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"minigzip___Win32_DLL_ASM_Release\"\n# PROP BASE Intermediate_Dir \"minigzip___Win32_DLL_ASM_Release\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"Win32_DLL_ASM_Release\"\n# PROP Intermediate_Dir \"Win32_DLL_ASM_Release\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"NDEBUG\" /FD /c\n# SUBTRACT BASE CPP /YX\n# ADD CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"NDEBUG\" /FD /c\n# SUBTRACT CPP /YX\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\n# ADD RSC /l 0x409 /d \"NDEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\n# ADD LINK32 /nologo /subsystem:console /machine:I386\n\n!ELSEIF  \"$(CFG)\" == \"minigzip - Win32 DLL ASM Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"minigzip___Win32_DLL_ASM_Debug\"\n# PROP BASE Intermediate_Dir \"minigzip___Win32_DLL_ASM_Debug\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"Win32_DLL_ASM_Debug\"\n# PROP Intermediate_Dir \"Win32_DLL_ASM_Debug\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /FD /GZ /c\n# SUBTRACT BASE CPP /YX\n# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"_DEBUG\" /FR /FD /GZ /c\n# SUBTRACT CPP /YX\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\n# ADD RSC /l 0x409 /d \"_DEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\n# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\n\n!ELSEIF  \"$(CFG)\" == \"minigzip - Win32 DLL Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"minigzip___Win32_DLL_Release\"\n# PROP BASE Intermediate_Dir \"minigzip___Win32_DLL_Release\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"Win32_DLL_Release\"\n# PROP Intermediate_Dir \"Win32_DLL_Release\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"NDEBUG\" /FD /c\n# SUBTRACT BASE CPP /YX\n# ADD CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"NDEBUG\" /FD /c\n# SUBTRACT CPP /YX\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\n# ADD RSC /l 0x409 /d \"NDEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\n# ADD LINK32 /nologo /subsystem:console /machine:I386\n\n!ELSEIF  \"$(CFG)\" == \"minigzip - Win32 DLL Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"minigzip___Win32_DLL_Debug\"\n# PROP BASE Intermediate_Dir \"minigzip___Win32_DLL_Debug\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"Win32_DLL_Debug\"\n# PROP Intermediate_Dir \"Win32_DLL_Debug\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /FD /GZ /c\n# SUBTRACT BASE CPP /YX\n# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"_DEBUG\" /FR /FD /GZ /c\n# SUBTRACT CPP /YX\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\n# ADD RSC /l 0x409 /d \"_DEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\n# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\n\n!ELSEIF  \"$(CFG)\" == \"minigzip - Win32 LIB ASM Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"minigzip___Win32_LIB_ASM_Release\"\n# PROP BASE Intermediate_Dir \"minigzip___Win32_LIB_ASM_Release\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"Win32_LIB_ASM_Release\"\n# PROP Intermediate_Dir \"Win32_LIB_ASM_Release\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"NDEBUG\" /FD /c\n# SUBTRACT BASE CPP /YX\n# ADD CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"NDEBUG\" /FD /c\n# SUBTRACT CPP /YX\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\n# ADD RSC /l 0x409 /d \"NDEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\n# ADD LINK32 /nologo /subsystem:console /machine:I386\n\n!ELSEIF  \"$(CFG)\" == \"minigzip - Win32 LIB ASM Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"minigzip___Win32_LIB_ASM_Debug\"\n# PROP BASE Intermediate_Dir \"minigzip___Win32_LIB_ASM_Debug\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"Win32_LIB_ASM_Debug\"\n# PROP Intermediate_Dir \"Win32_LIB_ASM_Debug\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /FD /GZ /c\n# SUBTRACT BASE CPP /YX\n# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"_DEBUG\" /FR /FD /GZ /c\n# SUBTRACT CPP /YX\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\n# ADD RSC /l 0x409 /d \"_DEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\n# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\n\n!ELSEIF  \"$(CFG)\" == \"minigzip - Win32 LIB Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"minigzip___Win32_LIB_Release\"\n# PROP BASE Intermediate_Dir \"minigzip___Win32_LIB_Release\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"Win32_LIB_Release\"\n# PROP Intermediate_Dir \"Win32_LIB_Release\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"NDEBUG\" /FD /c\n# SUBTRACT BASE CPP /YX\n# ADD CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"NDEBUG\" /FD /c\n# SUBTRACT CPP /YX\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\n# ADD RSC /l 0x409 /d \"NDEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\n# ADD LINK32 /nologo /subsystem:console /machine:I386\n\n!ELSEIF  \"$(CFG)\" == \"minigzip - Win32 LIB Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"minigzip___Win32_LIB_Debug\"\n# PROP BASE Intermediate_Dir \"minigzip___Win32_LIB_Debug\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"Win32_LIB_Debug\"\n# PROP Intermediate_Dir \"Win32_LIB_Debug\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\n# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /FD /GZ /c\n# SUBTRACT BASE CPP /YX\n# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"_DEBUG\" /FR /FD /GZ /c\n# SUBTRACT CPP /YX\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\n# ADD RSC /l 0x409 /d \"_DEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\n# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\n\n!ENDIF\n\n# Begin Target\n\n# Name \"minigzip - Win32 DLL ASM Release\"\n# Name \"minigzip - Win32 DLL ASM Debug\"\n# Name \"minigzip - Win32 DLL Release\"\n# Name \"minigzip - Win32 DLL Debug\"\n# Name \"minigzip - Win32 LIB ASM Release\"\n# Name \"minigzip - Win32 LIB ASM Debug\"\n# Name \"minigzip - Win32 LIB Release\"\n# Name \"minigzip - Win32 LIB Debug\"\n# Begin Group \"Source Files\"\n\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n# Begin Source File\n\nSOURCE=..\\..\\minigzip.c\n# End Source File\n# End Group\n# Begin Group \"Header Files\"\n\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\n# Begin Source File\n\nSOURCE=..\\..\\zconf.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\zlib.h\n# End Source File\n# End Group\n# End Target\n# End Project\n"
  },
  {
    "path": "external/zlib/old/visualc6/zlib.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"zlib\" - Package Owner=<4>\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\n# ** DO NOT EDIT **\n\n# TARGTYPE \"Win32 (x86) Dynamic-Link Library\" 0x0102\n# TARGTYPE \"Win32 (x86) Static Library\" 0x0104\n\nCFG=zlib - Win32 LIB Debug\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\n!MESSAGE use the Export Makefile command and run\n!MESSAGE\n!MESSAGE NMAKE /f \"zlib.mak\".\n!MESSAGE\n!MESSAGE You can specify a configuration when running NMAKE\n!MESSAGE by defining the macro CFG on the command line. For example:\n!MESSAGE\n!MESSAGE NMAKE /f \"zlib.mak\" CFG=\"zlib - Win32 LIB Debug\"\n!MESSAGE\n!MESSAGE Possible choices for configuration are:\n!MESSAGE\n!MESSAGE \"zlib - Win32 DLL ASM Release\" (based on \"Win32 (x86) Dynamic-Link Library\")\n!MESSAGE \"zlib - Win32 DLL ASM Debug\" (based on \"Win32 (x86) Dynamic-Link Library\")\n!MESSAGE \"zlib - Win32 DLL Release\" (based on \"Win32 (x86) Dynamic-Link Library\")\n!MESSAGE \"zlib - Win32 DLL Debug\" (based on \"Win32 (x86) Dynamic-Link Library\")\n!MESSAGE \"zlib - Win32 LIB ASM Release\" (based on \"Win32 (x86) Static Library\")\n!MESSAGE \"zlib - Win32 LIB ASM Debug\" (based on \"Win32 (x86) Static Library\")\n!MESSAGE \"zlib - Win32 LIB Release\" (based on \"Win32 (x86) Static Library\")\n!MESSAGE \"zlib - Win32 LIB Debug\" (based on \"Win32 (x86) Static Library\")\n!MESSAGE\n\n# Begin Project\n# PROP AllowPerConfigDependencies 0\n# PROP Scc_ProjName \"\"\n# PROP Scc_LocalPath \"\"\n\n!IF  \"$(CFG)\" == \"zlib - Win32 DLL ASM Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"zlib___Win32_DLL_ASM_Release\"\n# PROP BASE Intermediate_Dir \"zlib___Win32_DLL_ASM_Release\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"Win32_DLL_ASM_Release\"\n# PROP Intermediate_Dir \"Win32_DLL_ASM_Release\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\nCPP=cl.exe\n# ADD BASE CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"NDEBUG\" /FD /c\n# SUBTRACT BASE CPP /YX /Yc /Yu\n# ADD CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"NDEBUG\" /D \"ASMV\" /D \"ASMINF\" /FD /c\n# SUBTRACT CPP /YX /Yc /Yu\nMTL=midl.exe\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\nRSC=rc.exe\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\n# ADD RSC /l 0x409 /d \"NDEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386\n# ADD LINK32 /nologo /dll /machine:I386 /out:\"Win32_DLL_ASM_Release\\zlib1.dll\"\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 DLL ASM Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"zlib___Win32_DLL_ASM_Debug\"\n# PROP BASE Intermediate_Dir \"zlib___Win32_DLL_ASM_Debug\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"Win32_DLL_ASM_Debug\"\n# PROP Intermediate_Dir \"Win32_DLL_ASM_Debug\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\nCPP=cl.exe\n# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /FD /GZ /c\n# SUBTRACT BASE CPP /YX /Yc /Yu\n# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"_DEBUG\" /D \"ASMV\" /D \"ASMINF\" /FR /FD /GZ /c\n# SUBTRACT CPP /YX /Yc /Yu\nMTL=midl.exe\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\nRSC=rc.exe\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\n# ADD RSC /l 0x409 /d \"_DEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept\n# ADD LINK32 /nologo /dll /debug /machine:I386 /out:\"Win32_DLL_ASM_Debug\\zlib1d.dll\" /pdbtype:sept\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 DLL Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"zlib___Win32_DLL_Release\"\n# PROP BASE Intermediate_Dir \"zlib___Win32_DLL_Release\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"Win32_DLL_Release\"\n# PROP Intermediate_Dir \"Win32_DLL_Release\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\nCPP=cl.exe\n# ADD BASE CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"NDEBUG\" /FD /c\n# SUBTRACT BASE CPP /YX /Yc /Yu\n# ADD CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"NDEBUG\" /FD /c\n# SUBTRACT CPP /YX /Yc /Yu\nMTL=midl.exe\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\nRSC=rc.exe\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\n# ADD RSC /l 0x409 /d \"NDEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386\n# ADD LINK32 /nologo /dll /machine:I386 /out:\"Win32_DLL_Release\\zlib1.dll\"\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 DLL Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"zlib___Win32_DLL_Debug\"\n# PROP BASE Intermediate_Dir \"zlib___Win32_DLL_Debug\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"Win32_DLL_Debug\"\n# PROP Intermediate_Dir \"Win32_DLL_Debug\"\n# PROP Ignore_Export_Lib 0\n# PROP Target_Dir \"\"\nCPP=cl.exe\n# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /FD /GZ /c\n# SUBTRACT BASE CPP /YX /Yc /Yu\n# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"_DEBUG\" /FR /FD /GZ /c\n# SUBTRACT CPP /YX /Yc /Yu\nMTL=midl.exe\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\nRSC=rc.exe\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\n# ADD RSC /l 0x409 /d \"_DEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLINK32=link.exe\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept\n# ADD LINK32 /nologo /dll /debug /machine:I386 /out:\"Win32_DLL_Debug\\zlib1d.dll\" /pdbtype:sept\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 LIB ASM Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"zlib___Win32_LIB_ASM_Release\"\n# PROP BASE Intermediate_Dir \"zlib___Win32_LIB_ASM_Release\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"Win32_LIB_ASM_Release\"\n# PROP Intermediate_Dir \"Win32_LIB_ASM_Release\"\n# PROP Target_Dir \"\"\nCPP=cl.exe\n# ADD BASE CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"NDEBUG\" /FD /c\n# SUBTRACT BASE CPP /YX /Yc /Yu\n# ADD CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"NDEBUG\" /D \"ASMV\" /D \"ASMINF\" /FD /c\n# SUBTRACT CPP /YX /Yc /Yu\nRSC=rc.exe\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\n# ADD RSC /l 0x409 /d \"NDEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLIB32=link.exe -lib\n# ADD BASE LIB32 /nologo\n# ADD LIB32 /nologo\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 LIB ASM Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"zlib___Win32_LIB_ASM_Debug\"\n# PROP BASE Intermediate_Dir \"zlib___Win32_LIB_ASM_Debug\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"Win32_LIB_ASM_Debug\"\n# PROP Intermediate_Dir \"Win32_LIB_ASM_Debug\"\n# PROP Target_Dir \"\"\nCPP=cl.exe\n# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /FD /GZ /c\n# SUBTRACT BASE CPP /YX /Yc /Yu\n# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"_DEBUG\" /D \"ASMV\" /D \"ASMINF\" /FR /FD /GZ /c\n# SUBTRACT CPP /YX /Yc /Yu\nRSC=rc.exe\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\n# ADD RSC /l 0x409 /d \"_DEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLIB32=link.exe -lib\n# ADD BASE LIB32 /nologo\n# ADD LIB32 /nologo /out:\"Win32_LIB_ASM_Debug\\zlibd.lib\"\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 LIB Release\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 0\n# PROP BASE Output_Dir \"zlib___Win32_LIB_Release\"\n# PROP BASE Intermediate_Dir \"zlib___Win32_LIB_Release\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 0\n# PROP Output_Dir \"Win32_LIB_Release\"\n# PROP Intermediate_Dir \"Win32_LIB_Release\"\n# PROP Target_Dir \"\"\nCPP=cl.exe\n# ADD BASE CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"NDEBUG\" /FD /c\n# SUBTRACT BASE CPP /YX /Yc /Yu\n# ADD CPP /nologo /MD /W3 /O2 /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"NDEBUG\" /FD /c\n# SUBTRACT CPP /YX /Yc /Yu\nRSC=rc.exe\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\n# ADD RSC /l 0x409 /d \"NDEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLIB32=link.exe -lib\n# ADD BASE LIB32 /nologo\n# ADD LIB32 /nologo\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 LIB Debug\"\n\n# PROP BASE Use_MFC 0\n# PROP BASE Use_Debug_Libraries 1\n# PROP BASE Output_Dir \"zlib___Win32_LIB_Debug\"\n# PROP BASE Intermediate_Dir \"zlib___Win32_LIB_Debug\"\n# PROP BASE Target_Dir \"\"\n# PROP Use_MFC 0\n# PROP Use_Debug_Libraries 1\n# PROP Output_Dir \"Win32_LIB_Debug\"\n# PROP Intermediate_Dir \"Win32_LIB_Debug\"\n# PROP Target_Dir \"\"\nCPP=cl.exe\n# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /FD /GZ /c\n# SUBTRACT BASE CPP /YX /Yc /Yu\n# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D \"WIN32\" /D \"_CRT_SECURE_NO_DEPRECATE\" /D \"_CRT_NONSTDC_NO_DEPRECATE\" /D \"_DEBUG\" /FR /FD /GZ /c\n# SUBTRACT CPP /YX /Yc /Yu\nRSC=rc.exe\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\n# ADD RSC /l 0x409 /d \"_DEBUG\"\nBSC32=bscmake.exe\n# ADD BASE BSC32 /nologo\n# ADD BSC32 /nologo\nLIB32=link.exe -lib\n# ADD BASE LIB32 /nologo\n# ADD LIB32 /nologo /out:\"Win32_LIB_Debug\\zlibd.lib\"\n\n!ENDIF\n\n# Begin Target\n\n# Name \"zlib - Win32 DLL ASM Release\"\n# Name \"zlib - Win32 DLL ASM Debug\"\n# Name \"zlib - Win32 DLL Release\"\n# Name \"zlib - Win32 DLL Debug\"\n# Name \"zlib - Win32 LIB ASM Release\"\n# Name \"zlib - Win32 LIB ASM Debug\"\n# Name \"zlib - Win32 LIB Release\"\n# Name \"zlib - Win32 LIB Debug\"\n# Begin Group \"Source Files\"\n\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n# Begin Source File\n\nSOURCE=..\\..\\adler32.c\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\compress.c\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\crc32.c\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\deflate.c\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\gzclose.c\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\gzlib.c\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\gzread.c\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\gzwrite.c\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\infback.c\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\inffast.c\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\inflate.c\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\inftrees.c\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\trees.c\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\uncompr.c\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\win32\\zlib.def\n\n!IF  \"$(CFG)\" == \"zlib - Win32 DLL ASM Release\"\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 DLL ASM Debug\"\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 DLL Release\"\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 DLL Debug\"\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 LIB ASM Release\"\n\n# PROP Exclude_From_Build 1\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 LIB ASM Debug\"\n\n# PROP Exclude_From_Build 1\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 LIB Release\"\n\n# PROP Exclude_From_Build 1\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 LIB Debug\"\n\n# PROP Exclude_From_Build 1\n\n!ENDIF\n\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\zutil.c\n# End Source File\n# End Group\n# Begin Group \"Header Files\"\n\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\n# Begin Source File\n\nSOURCE=..\\..\\crc32.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\deflate.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\inffast.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\inffixed.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\inflate.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\inftrees.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\trees.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\zconf.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\zlib.h\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\zutil.h\n# End Source File\n# End Group\n# Begin Group \"Resource Files\"\n\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n# Begin Source File\n\nSOURCE=..\\..\\win32\\zlib1.rc\n# End Source File\n# End Group\n# Begin Group \"Assembler Files (Unsupported)\"\n\n# PROP Default_Filter \"asm;obj;c;cpp;cxx;h;hpp;hxx\"\n# Begin Source File\n\nSOURCE=..\\..\\contrib\\masmx86\\gvmat32.asm\n\n!IF  \"$(CFG)\" == \"zlib - Win32 DLL ASM Release\"\n\n# Begin Custom Build - Assembling...\nIntDir=.\\Win32_DLL_ASM_Release\nInputPath=..\\..\\contrib\\masmx86\\gvmat32.asm\nInputName=gvmat32\n\n\"$(IntDir)\\$(InputName).obj\" : $(SOURCE) \"$(INTDIR)\" \"$(OUTDIR)\"\n\tml.exe /nologo /c /coff /Cx /Fo\"$(IntDir)\\$(InputName).obj\" \"$(InputPath)\"\n\n# End Custom Build\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 DLL ASM Debug\"\n\n# Begin Custom Build - Assembling...\nIntDir=.\\Win32_DLL_ASM_Debug\nInputPath=..\\..\\contrib\\masmx86\\gvmat32.asm\nInputName=gvmat32\n\n\"$(IntDir)\\$(InputName).obj\" : $(SOURCE) \"$(INTDIR)\" \"$(OUTDIR)\"\n\tml.exe /nologo /c /coff /Cx /Zi /Fo\"$(IntDir)\\$(InputName).obj\" \"$(InputPath)\"\n\n# End Custom Build\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 DLL Release\"\n\n# PROP Exclude_From_Build 1\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 DLL Debug\"\n\n# PROP Exclude_From_Build 1\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 LIB ASM Release\"\n\n# Begin Custom Build - Assembling...\nIntDir=.\\Win32_LIB_ASM_Release\nInputPath=..\\..\\contrib\\masmx86\\gvmat32.asm\nInputName=gvmat32\n\n\"$(IntDir)\\$(InputName).obj\" : $(SOURCE) \"$(INTDIR)\" \"$(OUTDIR)\"\n\tml.exe /nologo /c /coff /Cx /Fo\"$(IntDir)\\$(InputName).obj\" \"$(InputPath)\"\n\n# End Custom Build\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 LIB ASM Debug\"\n\n# Begin Custom Build - Assembling...\nIntDir=.\\Win32_LIB_ASM_Debug\nInputPath=..\\..\\contrib\\masmx86\\gvmat32.asm\nInputName=gvmat32\n\n\"$(IntDir)\\$(InputName).obj\" : $(SOURCE) \"$(INTDIR)\" \"$(OUTDIR)\"\n\tml.exe /nologo /c /coff /Cx /Zi /Fo\"$(IntDir)\\$(InputName).obj\" \"$(InputPath)\"\n\n# End Custom Build\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 LIB Release\"\n\n# PROP Exclude_From_Build 1\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 LIB Debug\"\n\n# PROP Exclude_From_Build 1\n\n!ENDIF\n\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\contrib\\masmx86\\gvmat32c.c\n\n!IF  \"$(CFG)\" == \"zlib - Win32 DLL ASM Release\"\n\n# ADD CPP /I \"..\\..\"\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 DLL ASM Debug\"\n\n# ADD CPP /I \"..\\..\"\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 DLL Release\"\n\n# PROP Exclude_From_Build 1\n# ADD CPP /I \"..\\..\"\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 DLL Debug\"\n\n# PROP Exclude_From_Build 1\n# ADD CPP /I \"..\\..\"\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 LIB ASM Release\"\n\n# ADD CPP /I \"..\\..\"\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 LIB ASM Debug\"\n\n# ADD CPP /I \"..\\..\"\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 LIB Release\"\n\n# PROP Exclude_From_Build 1\n# ADD CPP /I \"..\\..\"\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 LIB Debug\"\n\n# PROP Exclude_From_Build 1\n# ADD CPP /I \"..\\..\"\n\n!ENDIF\n\n# End Source File\n# Begin Source File\n\nSOURCE=..\\..\\contrib\\masmx86\\inffas32.asm\n\n!IF  \"$(CFG)\" == \"zlib - Win32 DLL ASM Release\"\n\n# Begin Custom Build - Assembling...\nIntDir=.\\Win32_DLL_ASM_Release\nInputPath=..\\..\\contrib\\masmx86\\inffas32.asm\nInputName=inffas32\n\n\"$(IntDir)\\$(InputName).obj\" : $(SOURCE) \"$(INTDIR)\" \"$(OUTDIR)\"\n\tml.exe /nologo /c /coff /Cx /Fo\"$(IntDir)\\$(InputName).obj\" \"$(InputPath)\"\n\n# End Custom Build\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 DLL ASM Debug\"\n\n# Begin Custom Build - Assembling...\nIntDir=.\\Win32_DLL_ASM_Debug\nInputPath=..\\..\\contrib\\masmx86\\inffas32.asm\nInputName=inffas32\n\n\"$(IntDir)\\$(InputName).obj\" : $(SOURCE) \"$(INTDIR)\" \"$(OUTDIR)\"\n\tml.exe /nologo /c /coff /Cx /Zi /Fo\"$(IntDir)\\$(InputName).obj\" \"$(InputPath)\"\n\n# End Custom Build\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 DLL Release\"\n\n# PROP Exclude_From_Build 1\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 DLL Debug\"\n\n# PROP Exclude_From_Build 1\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 LIB ASM Release\"\n\n# Begin Custom Build - Assembling...\nIntDir=.\\Win32_LIB_ASM_Release\nInputPath=..\\..\\contrib\\masmx86\\inffas32.asm\nInputName=inffas32\n\n\"$(IntDir)\\$(InputName).obj\" : $(SOURCE) \"$(INTDIR)\" \"$(OUTDIR)\"\n\tml.exe /nologo /c /coff /Cx /Fo\"$(IntDir)\\$(InputName).obj\" \"$(InputPath)\"\n\n# End Custom Build\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 LIB ASM Debug\"\n\n# Begin Custom Build - Assembling...\nIntDir=.\\Win32_LIB_ASM_Debug\nInputPath=..\\..\\contrib\\masmx86\\inffas32.asm\nInputName=inffas32\n\n\"$(IntDir)\\$(InputName).obj\" : $(SOURCE) \"$(INTDIR)\" \"$(OUTDIR)\"\n\tml.exe /nologo /c /coff /Cx /Zi /Fo\"$(IntDir)\\$(InputName).obj\" \"$(InputPath)\"\n\n# End Custom Build\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 LIB Release\"\n\n# PROP Exclude_From_Build 1\n\n!ELSEIF  \"$(CFG)\" == \"zlib - Win32 LIB Debug\"\n\n# PROP Exclude_From_Build 1\n\n!ENDIF\n\n# End Source File\n# End Group\n# Begin Source File\n\nSOURCE=.\\README.txt\n# End Source File\n# End Target\n# End Project\n"
  },
  {
    "path": "external/zlib/old/visualc6/zlib.dsw",
    "content": "Microsoft Developer Studio Workspace File, Format Version 6.00\n# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\n\n###############################################################################\n\nProject: \"example\"=.\\example.dsp - Package Owner=<4>\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<4>\n{{{\n    Begin Project Dependency\n    Project_Dep_Name zlib\n    End Project Dependency\n}}}\n\n###############################################################################\n\nProject: \"minigzip\"=.\\minigzip.dsp - Package Owner=<4>\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<4>\n{{{\n    Begin Project Dependency\n    Project_Dep_Name zlib\n    End Project Dependency\n}}}\n\n###############################################################################\n\nProject: \"zlib\"=.\\zlib.dsp - Package Owner=<4>\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<4>\n{{{\n}}}\n\n###############################################################################\n\nGlobal:\n\nPackage=<5>\n{{{\n}}}\n\nPackage=<3>\n{{{\n}}}\n\n###############################################################################\n\n"
  },
  {
    "path": "external/zlib/qnx/package.qpg",
    "content": "<QPG:Generation>\n   <QPG:Options>\n      <QPG:User unattended=\"no\" verbosity=\"2\" listfiles=\"yes\"/>\n      <QPG:Defaults type=\"qnx_package\"/>\n      <QPG:Source></QPG:Source>\n      <QPG:Release number=\"+\"/>\n      <QPG:Build></QPG:Build>\n      <QPG:FileSorting strip=\"yes\"/>\n      <QPG:Package targets=\"combine\"/>\n      <QPG:Repository generate=\"yes\"/>\n      <QPG:FinalDir></QPG:FinalDir>\n      <QPG:Cleanup></QPG:Cleanup>\n   </QPG:Options>\n\n   <QPG:Responsible>\n      <QPG:Company></QPG:Company>\n      <QPG:Department></QPG:Department>\n      <QPG:Group></QPG:Group>\n      <QPG:Team></QPG:Team>\n      <QPG:Employee></QPG:Employee>\n      <QPG:EmailAddress></QPG:EmailAddress>\n   </QPG:Responsible>\n\n   <QPG:Values>\n      <QPG:Files>\n         <QPG:Add file=\"../zconf.h\" install=\"/opt/include/\" user=\"root:sys\" permission=\"644\"/>\n         <QPG:Add file=\"../zlib.h\" install=\"/opt/include/\" user=\"root:sys\" permission=\"644\"/>\n         <QPG:Add file=\"../libz.so.1.2.5\" install=\"/opt/lib/\" user=\"root:bin\" permission=\"644\"/>\n         <QPG:Add file=\"libz.so\" install=\"/opt/lib/\" component=\"dev\" filetype=\"symlink\" linkto=\"libz.so.1.2.5\"/>\n         <QPG:Add file=\"libz.so.1\" install=\"/opt/lib/\" filetype=\"symlink\" linkto=\"libz.so.1.2.5\"/>\n         <QPG:Add file=\"../libz.so.1.2.5\" install=\"/opt/lib/\" component=\"slib\"/>\n      </QPG:Files>\n\n      <QPG:PackageFilter>\n         <QPM:PackageManifest>\n            <QPM:PackageDescription>\n               <QPM:PackageType>Library</QPM:PackageType>\n               <QPM:PackageReleaseNotes></QPM:PackageReleaseNotes>\n               <QPM:PackageReleaseUrgency>Medium</QPM:PackageReleaseUrgency>\n               <QPM:PackageRepository></QPM:PackageRepository>\n               <QPM:FileVersion>2.0</QPM:FileVersion>\n            </QPM:PackageDescription>\n\n            <QPM:ProductDescription>\n               <QPM:ProductName>zlib</QPM:ProductName>\n               <QPM:ProductIdentifier>zlib</QPM:ProductIdentifier>\n               <QPM:ProductEmail>alain.bonnefoy@icbt.com</QPM:ProductEmail>\n               <QPM:VendorName>Public</QPM:VendorName>\n               <QPM:VendorInstallName>public</QPM:VendorInstallName>\n               <QPM:VendorURL>www.gzip.org/zlib</QPM:VendorURL>\n               <QPM:VendorEmbedURL></QPM:VendorEmbedURL>\n               <QPM:VendorEmail></QPM:VendorEmail>\n               <QPM:AuthorName>Jean-Loup Gailly,Mark Adler</QPM:AuthorName>\n               <QPM:AuthorURL>www.gzip.org/zlib</QPM:AuthorURL>\n               <QPM:AuthorEmbedURL></QPM:AuthorEmbedURL>\n               <QPM:AuthorEmail>zlib@gzip.org</QPM:AuthorEmail>\n               <QPM:ProductIconSmall></QPM:ProductIconSmall>\n               <QPM:ProductIconLarge></QPM:ProductIconLarge>\n               <QPM:ProductDescriptionShort>A massively spiffy yet delicately unobtrusive compression library.</QPM:ProductDescriptionShort>\n               <QPM:ProductDescriptionLong>zlib is designed to be a free, general-purpose, legally unencumbered, lossless data compression library for use on virtually any computer hardware and operating system.</QPM:ProductDescriptionLong>\n               <QPM:ProductDescriptionURL>http://www.gzip.org/zlib</QPM:ProductDescriptionURL>\n               <QPM:ProductDescriptionEmbedURL></QPM:ProductDescriptionEmbedURL>\n            </QPM:ProductDescription>\n\n            <QPM:ReleaseDescription>\n               <QPM:ReleaseVersion>1.2.5</QPM:ReleaseVersion>\n               <QPM:ReleaseUrgency>Medium</QPM:ReleaseUrgency>\n               <QPM:ReleaseStability>Stable</QPM:ReleaseStability>\n               <QPM:ReleaseNoteMinor></QPM:ReleaseNoteMinor>\n               <QPM:ReleaseNoteMajor></QPM:ReleaseNoteMajor>\n               <QPM:ExcludeCountries>\n                  <QPM:Country></QPM:Country>\n               </QPM:ExcludeCountries>\n\n               <QPM:ReleaseCopyright>No License</QPM:ReleaseCopyright>\n            </QPM:ReleaseDescription>\n\n            <QPM:ContentDescription>\n               <QPM:ContentTopic xmlmultiple=\"true\">Software Development/Libraries and Extensions/C Libraries</QPM:ContentTopic>\n               <QPM:ContentKeyword>zlib,compression</QPM:ContentKeyword>\n               <QPM:TargetOS>qnx6</QPM:TargetOS>\n               <QPM:HostOS>qnx6</QPM:HostOS>\n               <QPM:DisplayEnvironment xmlmultiple=\"true\">None</QPM:DisplayEnvironment>\n               <QPM:TargetAudience xmlmultiple=\"true\">Developer</QPM:TargetAudience>\n            </QPM:ContentDescription>\n         </QPM:PackageManifest>\n      </QPG:PackageFilter>\n\n      <QPG:PackageFilter proc=\"none\" target=\"none\">\n         <QPM:PackageManifest>\n            <QPM:ProductInstallationDependencies>\n               <QPM:ProductRequirements></QPM:ProductRequirements>\n            </QPM:ProductInstallationDependencies>\n\n            <QPM:ProductInstallationProcedure>\n               <QPM:Script xmlmultiple=\"true\">\n                  <QPM:ScriptName></QPM:ScriptName>\n                  <QPM:ScriptType>Install</QPM:ScriptType>\n                  <QPM:ScriptTiming>Post</QPM:ScriptTiming>\n                  <QPM:ScriptBlocking>No</QPM:ScriptBlocking>\n                  <QPM:ScriptResult>Ignore</QPM:ScriptResult>\n                  <QPM:ShortDescription></QPM:ShortDescription>\n                  <QPM:UseBinaries>No</QPM:UseBinaries>\n                  <QPM:Priority>Optional</QPM:Priority>\n               </QPM:Script>\n            </QPM:ProductInstallationProcedure>\n         </QPM:PackageManifest>\n\n         <QPM:Launch>\n         </QPM:Launch>\n      </QPG:PackageFilter>\n\n      <QPG:PackageFilter type=\"core\" component=\"none\">\n         <QPM:PackageManifest>\n            <QPM:ProductInstallationProcedure>\n\t       <QPM:OrderDependency xmlmultiple=\"true\">\n\t          <QPM:Order>InstallOver</QPM:Order>\n\t          <QPM:Product>zlib</QPM:Product>\n\t       </QPM:OrderDependency>\n            </QPM:ProductInstallationProcedure>\n         </QPM:PackageManifest>\n\n         <QPM:Launch>\n         </QPM:Launch>\n      </QPG:PackageFilter>\n\n      <QPG:PackageFilter type=\"core\" component=\"dev\">\n         <QPM:PackageManifest>\n            <QPM:ProductInstallationProcedure>\n\t       <QPM:OrderDependency xmlmultiple=\"true\">\n\t          <QPM:Order>InstallOver</QPM:Order>\n\t          <QPM:Product>zlib-dev</QPM:Product>\n\t       </QPM:OrderDependency>\n            </QPM:ProductInstallationProcedure>\n         </QPM:PackageManifest>\n\n         <QPM:Launch>\n         </QPM:Launch>\n      </QPG:PackageFilter>\n   </QPG:Values>\n</QPG:Generation>\n"
  },
  {
    "path": "external/zlib/treebuild.xml",
    "content": "<?xml version=\"1.0\" ?>\n<package name=\"zlib\" version=\"1.2.5\">\n    <library name=\"zlib\" dlversion=\"1.2.5\" dlname=\"z\">\n\t<property name=\"description\"> zip compression library </property>\n\t<property name=\"include-target-dir\" value=\"$(@PACKAGE/install-includedir)\" />\n\n\t<!-- fixme: not implemented yet -->\n\t<property name=\"compiler/c/inline\" value=\"yes\" />\n\n\t<include-file name=\"zlib.h\" scope=\"public\" mode=\"644\" />\n\t<include-file name=\"zconf.h\" scope=\"public\" mode=\"644\" />\n\n\t<source name=\"adler32.c\">\n\t    <depend name=\"zlib.h\" />\n\t    <depend name=\"zconf.h\" />\n\t</source>\n\t<source name=\"compress.c\">\n\t    <depend name=\"zlib.h\" />\n\t    <depend name=\"zconf.h\" />\n\t</source>\n\t<source name=\"crc32.c\">\n\t    <depend name=\"zlib.h\" />\n\t    <depend name=\"zconf.h\" />\n\t    <depend name=\"crc32.h\" />\n\t</source>\n\t<source name=\"gzclose.c\">\n\t    <depend name=\"zlib.h\" />\n\t    <depend name=\"zconf.h\" />\n\t    <depend name=\"gzguts.h\" />\n\t</source>\n\t<source name=\"gzlib.c\">\n\t    <depend name=\"zlib.h\" />\n\t    <depend name=\"zconf.h\" />\n\t    <depend name=\"gzguts.h\" />\n\t</source>\n\t<source name=\"gzread.c\">\n\t    <depend name=\"zlib.h\" />\n\t    <depend name=\"zconf.h\" />\n\t    <depend name=\"gzguts.h\" />\n\t</source>\n\t<source name=\"gzwrite.c\">\n\t    <depend name=\"zlib.h\" />\n\t    <depend name=\"zconf.h\" />\n\t    <depend name=\"gzguts.h\" />\n\t</source>\n\t<source name=\"uncompr.c\">\n\t    <depend name=\"zlib.h\" />\n\t    <depend name=\"zconf.h\" />\n\t</source>\n\t<source name=\"deflate.c\">\n\t    <depend name=\"zlib.h\" />\n\t    <depend name=\"zconf.h\" />\n\t    <depend name=\"zutil.h\" />\n\t    <depend name=\"deflate.h\" />\n\t</source>\n\t<source name=\"trees.c\">\n\t    <depend name=\"zlib.h\" />\n\t    <depend name=\"zconf.h\" />\n\t    <depend name=\"zutil.h\" />\n\t    <depend name=\"deflate.h\" />\n\t    <depend name=\"trees.h\" />\n\t</source>\n\t<source name=\"zutil.c\">\n\t    <depend name=\"zlib.h\" />\n\t    <depend name=\"zconf.h\" />\n\t    <depend name=\"zutil.h\" />\n\t</source>\n\t<source name=\"inflate.c\">\n\t    <depend name=\"zlib.h\" />\n\t    <depend name=\"zconf.h\" />\n\t    <depend name=\"zutil.h\" />\n\t    <depend name=\"inftrees.h\" />\n\t    <depend name=\"inflate.h\" />\n\t    <depend name=\"inffast.h\" />\n\t</source>\n\t<source name=\"infback.c\">\n\t    <depend name=\"zlib.h\" />\n\t    <depend name=\"zconf.h\" />\n\t    <depend name=\"zutil.h\" />\n\t    <depend name=\"inftrees.h\" />\n\t    <depend name=\"inflate.h\" />\n\t    <depend name=\"inffast.h\" />\n\t</source>\n\t<source name=\"inftrees.c\">\n\t    <depend name=\"zlib.h\" />\n\t    <depend name=\"zconf.h\" />\n\t    <depend name=\"zutil.h\" />\n\t    <depend name=\"inftrees.h\" />\n\t</source>\n\t<source name=\"inffast.c\">\n\t    <depend name=\"zlib.h\" />\n\t    <depend name=\"zconf.h\" />\n\t    <depend name=\"zutil.h\" />\n\t    <depend name=\"inftrees.h\" />\n\t    <depend name=\"inflate.h\" />\n\t    <depend name=\"inffast.h\" />\n\t</source>\n    </library>\n</package>\n\n<!--\nCFLAGS=-O\n#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7\n#CFLAGS=-g -DDEBUG\n#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \\\n#           -Wstrict-prototypes -Wmissing-prototypes\n\n# OBJA =\n# to use the asm code: make OBJA=match.o\n#\nmatch.o: match.S\n\t$(CPP) match.S > _match.s\n\t$(CC) -c _match.s\n\tmv _match.o match.o\n\trm -f _match.s\n-->\n"
  },
  {
    "path": "external/zlib/trees.c",
    "content": "/* trees.c -- output deflated data using Huffman coding\n * Copyright (C) 1995-2010 Jean-loup Gailly\n * detect_data_type() function provided freely by Cosmin Truta, 2006\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n/*\n *  ALGORITHM\n *\n *      The \"deflation\" process uses several Huffman trees. The more\n *      common source values are represented by shorter bit sequences.\n *\n *      Each code tree is stored in a compressed form which is itself\n * a Huffman encoding of the lengths of all the code strings (in\n * ascending order by source values).  The actual code strings are\n * reconstructed from the lengths in the inflate process, as described\n * in the deflate specification.\n *\n *  REFERENCES\n *\n *      Deutsch, L.P.,\"'Deflate' Compressed Data Format Specification\".\n *      Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc\n *\n *      Storer, James A.\n *          Data Compression:  Methods and Theory, pp. 49-50.\n *          Computer Science Press, 1988.  ISBN 0-7167-8156-5.\n *\n *      Sedgewick, R.\n *          Algorithms, p290.\n *          Addison-Wesley, 1983. ISBN 0-201-06672-6.\n */\n\n/* @(#) $Id$ */\n\n/* #define GEN_TREES_H */\n\n#include \"deflate.h\"\n\n#ifdef DEBUG\n#  include <ctype.h>\n#endif\n\n/* ===========================================================================\n * Constants\n */\n\n#define MAX_BL_BITS 7\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\n#define END_BLOCK 256\n/* end of block literal code */\n\n#define REP_3_6      16\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\n#define REPZ_3_10    17\n/* repeat a zero length 3-10 times  (3 bits of repeat count) */\n\n#define REPZ_11_138  18\n/* repeat a zero length 11-138 times  (7 bits of repeat count) */\n\nlocal const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */\n   = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0};\n\nlocal const int extra_dbits[D_CODES] /* extra bits for each distance code */\n   = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};\n\nlocal const int extra_blbits[BL_CODES]/* extra bits for each bit length code */\n   = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7};\n\nlocal const uch bl_order[BL_CODES]\n   = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15};\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n#define Buf_size (8 * 2*sizeof(char))\n/* Number of bits used within bi_buf. (bi_buf might be implemented on\n * more than 16 bits on some systems.)\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n#define DIST_CODE_LEN  512 /* see definition of array dist_code below */\n\n#if defined(GEN_TREES_H) || !defined(STDC)\n/* non ANSI compilers may not accept trees.h */\n\nlocal ct_data static_ltree[L_CODES+2];\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nlocal ct_data static_dtree[D_CODES];\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nuch _dist_code[DIST_CODE_LEN];\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nuch _length_code[MAX_MATCH-MIN_MATCH+1];\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nlocal int base_length[LENGTH_CODES];\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nlocal int base_dist[D_CODES];\n/* First normalized distance for each code (0 = distance of 1) */\n\n#else\n#  include \"trees.h\"\n#endif /* GEN_TREES_H */\n\nstruct static_tree_desc_s {\n    const ct_data *static_tree;  /* static tree or NULL */\n    const intf *extra_bits;      /* extra bits for each code or NULL */\n    int     extra_base;          /* base index for extra_bits */\n    int     elems;               /* max number of elements in the tree */\n    int     max_length;          /* max bit length for the codes */\n};\n\nlocal static_tree_desc  static_l_desc =\n{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS};\n\nlocal static_tree_desc  static_d_desc =\n{static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS};\n\nlocal static_tree_desc  static_bl_desc =\n{(const ct_data *)0, extra_blbits, 0,   BL_CODES, MAX_BL_BITS};\n\n/* ===========================================================================\n * Local (static) routines in this file.\n */\n\nlocal void tr_static_init OF((void));\nlocal void init_block     OF((deflate_state *s));\nlocal void pqdownheap     OF((deflate_state *s, ct_data *tree, int k));\nlocal void gen_bitlen     OF((deflate_state *s, tree_desc *desc));\nlocal void gen_codes      OF((ct_data *tree, int max_code, ushf *bl_count));\nlocal void build_tree     OF((deflate_state *s, tree_desc *desc));\nlocal void scan_tree      OF((deflate_state *s, ct_data *tree, int max_code));\nlocal void send_tree      OF((deflate_state *s, ct_data *tree, int max_code));\nlocal int  build_bl_tree  OF((deflate_state *s));\nlocal void send_all_trees OF((deflate_state *s, int lcodes, int dcodes,\n                              int blcodes));\nlocal void compress_block OF((deflate_state *s, ct_data *ltree,\n                              ct_data *dtree));\nlocal int  detect_data_type OF((deflate_state *s));\nlocal unsigned bi_reverse OF((unsigned value, int length));\nlocal void bi_windup      OF((deflate_state *s));\nlocal void bi_flush       OF((deflate_state *s));\nlocal void copy_block     OF((deflate_state *s, charf *buf, unsigned len,\n                              int header));\n\n#ifdef GEN_TREES_H\nlocal void gen_trees_header OF((void));\n#endif\n\n#ifndef DEBUG\n#  define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len)\n   /* Send a code of the given tree. c and tree must not have side effects */\n\n#else /* DEBUG */\n#  define send_code(s, c, tree) \\\n     { if (z_verbose>2) fprintf(stderr,\"\\ncd %3d \",(c)); \\\n       send_bits(s, tree[c].Code, tree[c].Len); }\n#endif\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\n#define put_short(s, w) { \\\n    put_byte(s, (uch)((w) & 0xff)); \\\n    put_byte(s, (uch)((ush)(w) >> 8)); \\\n}\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\n#ifdef DEBUG\nlocal void send_bits      OF((deflate_state *s, int value, int length));\n\nlocal void send_bits(s, value, length)\n    deflate_state *s;\n    int value;  /* value to send */\n    int length; /* number of bits */\n{\n    Tracevv((stderr,\" l %2d v %4x \", length, value));\n    Assert(length > 0 && length <= 15, \"invalid length\");\n    s->bits_sent += (ulg)length;\n\n    /* If not enough room in bi_buf, use (valid) bits from bi_buf and\n     * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid))\n     * unused bits in value.\n     */\n    if (s->bi_valid > (int)Buf_size - length) {\n        s->bi_buf |= (ush)value << s->bi_valid;\n        put_short(s, s->bi_buf);\n        s->bi_buf = (ush)value >> (Buf_size - s->bi_valid);\n        s->bi_valid += length - Buf_size;\n    } else {\n        s->bi_buf |= (ush)value << s->bi_valid;\n        s->bi_valid += length;\n    }\n}\n#else /* !DEBUG */\n\n#define send_bits(s, value, length) \\\n{ int len = length;\\\n  if (s->bi_valid > (int)Buf_size - len) {\\\n    int val = value;\\\n    s->bi_buf |= (ush)val << s->bi_valid;\\\n    put_short(s, s->bi_buf);\\\n    s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\\\n    s->bi_valid += len - Buf_size;\\\n  } else {\\\n    s->bi_buf |= (ush)(value) << s->bi_valid;\\\n    s->bi_valid += len;\\\n  }\\\n}\n#endif /* DEBUG */\n\n\n/* the arguments must not have side effects */\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nlocal void tr_static_init()\n{\n#if defined(GEN_TREES_H) || !defined(STDC)\n    static int static_init_done = 0;\n    int n;        /* iterates over tree elements */\n    int bits;     /* bit counter */\n    int length;   /* length value */\n    int code;     /* code value */\n    int dist;     /* distance index */\n    ush bl_count[MAX_BITS+1];\n    /* number of codes at each bit length for an optimal tree */\n\n    if (static_init_done) return;\n\n    /* For some embedded targets, global variables are not initialized: */\n#ifdef NO_INIT_GLOBAL_POINTERS\n    static_l_desc.static_tree = static_ltree;\n    static_l_desc.extra_bits = extra_lbits;\n    static_d_desc.static_tree = static_dtree;\n    static_d_desc.extra_bits = extra_dbits;\n    static_bl_desc.extra_bits = extra_blbits;\n#endif\n\n    /* Initialize the mapping length (0..255) -> length code (0..28) */\n    length = 0;\n    for (code = 0; code < LENGTH_CODES-1; code++) {\n        base_length[code] = length;\n        for (n = 0; n < (1<<extra_lbits[code]); n++) {\n            _length_code[length++] = (uch)code;\n        }\n    }\n    Assert (length == 256, \"tr_static_init: length != 256\");\n    /* Note that the length 255 (match length 258) can be represented\n     * in two different ways: code 284 + 5 bits or code 285, so we\n     * overwrite length_code[255] to use the best encoding:\n     */\n    _length_code[length-1] = (uch)code;\n\n    /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n    dist = 0;\n    for (code = 0 ; code < 16; code++) {\n        base_dist[code] = dist;\n        for (n = 0; n < (1<<extra_dbits[code]); n++) {\n            _dist_code[dist++] = (uch)code;\n        }\n    }\n    Assert (dist == 256, \"tr_static_init: dist != 256\");\n    dist >>= 7; /* from now on, all distances are divided by 128 */\n    for ( ; code < D_CODES; code++) {\n        base_dist[code] = dist << 7;\n        for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {\n            _dist_code[256 + dist++] = (uch)code;\n        }\n    }\n    Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n    /* Construct the codes of the static literal tree */\n    for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0;\n    n = 0;\n    while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++;\n    while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++;\n    while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++;\n    while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++;\n    /* Codes 286 and 287 do not exist, but we must include them in the\n     * tree construction to get a canonical Huffman tree (longest code\n     * all ones)\n     */\n    gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count);\n\n    /* The static distance tree is trivial: */\n    for (n = 0; n < D_CODES; n++) {\n        static_dtree[n].Len = 5;\n        static_dtree[n].Code = bi_reverse((unsigned)n, 5);\n    }\n    static_init_done = 1;\n\n#  ifdef GEN_TREES_H\n    gen_trees_header();\n#  endif\n#endif /* defined(GEN_TREES_H) || !defined(STDC) */\n}\n\n/* ===========================================================================\n * Genererate the file trees.h describing the static trees.\n */\n#ifdef GEN_TREES_H\n#  ifndef DEBUG\n#    include <stdio.h>\n#  endif\n\n#  define SEPARATOR(i, last, width) \\\n      ((i) == (last)? \"\\n};\\n\\n\" :    \\\n       ((i) % (width) == (width)-1 ? \",\\n\" : \", \"))\n\nvoid gen_trees_header()\n{\n    FILE *header = fopen(\"trees.h\", \"w\");\n    int i;\n\n    Assert (header != NULL, \"Can't open trees.h\");\n    fprintf(header,\n            \"/* header created automatically with -DGEN_TREES_H */\\n\\n\");\n\n    fprintf(header, \"local const ct_data static_ltree[L_CODES+2] = {\\n\");\n    for (i = 0; i < L_CODES+2; i++) {\n        fprintf(header, \"{{%3u},{%3u}}%s\", static_ltree[i].Code,\n                static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5));\n    }\n\n    fprintf(header, \"local const ct_data static_dtree[D_CODES] = {\\n\");\n    for (i = 0; i < D_CODES; i++) {\n        fprintf(header, \"{{%2u},{%2u}}%s\", static_dtree[i].Code,\n                static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5));\n    }\n\n    fprintf(header, \"const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = {\\n\");\n    for (i = 0; i < DIST_CODE_LEN; i++) {\n        fprintf(header, \"%2u%s\", _dist_code[i],\n                SEPARATOR(i, DIST_CODE_LEN-1, 20));\n    }\n\n    fprintf(header,\n        \"const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= {\\n\");\n    for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) {\n        fprintf(header, \"%2u%s\", _length_code[i],\n                SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20));\n    }\n\n    fprintf(header, \"local const int base_length[LENGTH_CODES] = {\\n\");\n    for (i = 0; i < LENGTH_CODES; i++) {\n        fprintf(header, \"%1u%s\", base_length[i],\n                SEPARATOR(i, LENGTH_CODES-1, 20));\n    }\n\n    fprintf(header, \"local const int base_dist[D_CODES] = {\\n\");\n    for (i = 0; i < D_CODES; i++) {\n        fprintf(header, \"%5u%s\", base_dist[i],\n                SEPARATOR(i, D_CODES-1, 10));\n    }\n\n    fclose(header);\n}\n#endif /* GEN_TREES_H */\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nvoid ZLIB_INTERNAL _tr_init(s)\n    deflate_state *s;\n{\n    tr_static_init();\n\n    s->l_desc.dyn_tree = s->dyn_ltree;\n    s->l_desc.stat_desc = &static_l_desc;\n\n    s->d_desc.dyn_tree = s->dyn_dtree;\n    s->d_desc.stat_desc = &static_d_desc;\n\n    s->bl_desc.dyn_tree = s->bl_tree;\n    s->bl_desc.stat_desc = &static_bl_desc;\n\n    s->bi_buf = 0;\n    s->bi_valid = 0;\n    s->last_eob_len = 8; /* enough lookahead for inflate */\n#ifdef DEBUG\n    s->compressed_len = 0L;\n    s->bits_sent = 0L;\n#endif\n\n    /* Initialize the first block of the first file: */\n    init_block(s);\n}\n\n/* ===========================================================================\n * Initialize a new block.\n */\nlocal void init_block(s)\n    deflate_state *s;\n{\n    int n; /* iterates over tree elements */\n\n    /* Initialize the trees. */\n    for (n = 0; n < L_CODES;  n++) s->dyn_ltree[n].Freq = 0;\n    for (n = 0; n < D_CODES;  n++) s->dyn_dtree[n].Freq = 0;\n    for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0;\n\n    s->dyn_ltree[END_BLOCK].Freq = 1;\n    s->opt_len = s->static_len = 0L;\n    s->last_lit = s->matches = 0;\n}\n\n#define SMALLEST 1\n/* Index within the heap array of least frequent node in the Huffman tree */\n\n\n/* ===========================================================================\n * Remove the smallest element from the heap and recreate the heap with\n * one less element. Updates heap and heap_len.\n */\n#define pqremove(s, tree, top) \\\n{\\\n    top = s->heap[SMALLEST]; \\\n    s->heap[SMALLEST] = s->heap[s->heap_len--]; \\\n    pqdownheap(s, tree, SMALLEST); \\\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\n#define smaller(tree, n, m, depth) \\\n   (tree[n].Freq < tree[m].Freq || \\\n   (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m]))\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nlocal void pqdownheap(s, tree, k)\n    deflate_state *s;\n    ct_data *tree;  /* the tree to restore */\n    int k;               /* node to move down */\n{\n    int v = s->heap[k];\n    int j = k << 1;  /* left son of k */\n    while (j <= s->heap_len) {\n        /* Set j to the smallest of the two sons: */\n        if (j < s->heap_len &&\n            smaller(tree, s->heap[j+1], s->heap[j], s->depth)) {\n            j++;\n        }\n        /* Exit if v is smaller than both sons */\n        if (smaller(tree, v, s->heap[j], s->depth)) break;\n\n        /* Exchange v with the smallest son */\n        s->heap[k] = s->heap[j];  k = j;\n\n        /* And continue down the tree, setting j to the left son of k */\n        j <<= 1;\n    }\n    s->heap[k] = v;\n}\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n *    above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n *     array bl_count contains the frequencies for each bit length.\n *     The length opt_len is updated; static_len is also updated if stree is\n *     not null.\n */\nlocal void gen_bitlen(s, desc)\n    deflate_state *s;\n    tree_desc *desc;    /* the tree descriptor */\n{\n    ct_data *tree        = desc->dyn_tree;\n    int max_code         = desc->max_code;\n    const ct_data *stree = desc->stat_desc->static_tree;\n    const intf *extra    = desc->stat_desc->extra_bits;\n    int base             = desc->stat_desc->extra_base;\n    int max_length       = desc->stat_desc->max_length;\n    int h;              /* heap index */\n    int n, m;           /* iterate over the tree elements */\n    int bits;           /* bit length */\n    int xbits;          /* extra bits */\n    ush f;              /* frequency */\n    int overflow = 0;   /* number of elements with bit length too large */\n\n    for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0;\n\n    /* In a first pass, compute the optimal bit lengths (which may\n     * overflow in the case of the bit length tree).\n     */\n    tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */\n\n    for (h = s->heap_max+1; h < HEAP_SIZE; h++) {\n        n = s->heap[h];\n        bits = tree[tree[n].Dad].Len + 1;\n        if (bits > max_length) bits = max_length, overflow++;\n        tree[n].Len = (ush)bits;\n        /* We overwrite tree[n].Dad which is no longer needed */\n\n        if (n > max_code) continue; /* not a leaf node */\n\n        s->bl_count[bits]++;\n        xbits = 0;\n        if (n >= base) xbits = extra[n-base];\n        f = tree[n].Freq;\n        s->opt_len += (ulg)f * (bits + xbits);\n        if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits);\n    }\n    if (overflow == 0) return;\n\n    Trace((stderr,\"\\nbit length overflow\\n\"));\n    /* This happens for example on obj2 and pic of the Calgary corpus */\n\n    /* Find the first bit length which could increase: */\n    do {\n        bits = max_length-1;\n        while (s->bl_count[bits] == 0) bits--;\n        s->bl_count[bits]--;      /* move one leaf down the tree */\n        s->bl_count[bits+1] += 2; /* move one overflow item as its brother */\n        s->bl_count[max_length]--;\n        /* The brother of the overflow item also moves one step up,\n         * but this does not affect bl_count[max_length]\n         */\n        overflow -= 2;\n    } while (overflow > 0);\n\n    /* Now recompute all bit lengths, scanning in increasing frequency.\n     * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n     * lengths instead of fixing only the wrong ones. This idea is taken\n     * from 'ar' written by Haruhiko Okumura.)\n     */\n    for (bits = max_length; bits != 0; bits--) {\n        n = s->bl_count[bits];\n        while (n != 0) {\n            m = s->heap[--h];\n            if (m > max_code) continue;\n            if ((unsigned) tree[m].Len != (unsigned) bits) {\n                Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n                s->opt_len += ((long)bits - (long)tree[m].Len)\n                              *(long)tree[m].Freq;\n                tree[m].Len = (ush)bits;\n            }\n            n--;\n        }\n    }\n}\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n *     zero code length.\n */\nlocal void gen_codes (tree, max_code, bl_count)\n    ct_data *tree;             /* the tree to decorate */\n    int max_code;              /* largest code with non zero frequency */\n    ushf *bl_count;            /* number of codes at each bit length */\n{\n    ush next_code[MAX_BITS+1]; /* next code value for each bit length */\n    ush code = 0;              /* running code value */\n    int bits;                  /* bit index */\n    int n;                     /* code index */\n\n    /* The distribution counts are first used to generate the code values\n     * without bit reversal.\n     */\n    for (bits = 1; bits <= MAX_BITS; bits++) {\n        next_code[bits] = code = (code + bl_count[bits-1]) << 1;\n    }\n    /* Check that the bit counts in bl_count are consistent. The last code\n     * must be all ones.\n     */\n    Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n            \"inconsistent bit counts\");\n    Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n    for (n = 0;  n <= max_code; n++) {\n        int len = tree[n].Len;\n        if (len == 0) continue;\n        /* Now reverse the bits */\n        tree[n].Code = bi_reverse(next_code[len]++, len);\n\n        Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n             n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n    }\n}\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n *     and corresponding code. The length opt_len is updated; static_len is\n *     also updated if stree is not null. The field max_code is set.\n */\nlocal void build_tree(s, desc)\n    deflate_state *s;\n    tree_desc *desc; /* the tree descriptor */\n{\n    ct_data *tree         = desc->dyn_tree;\n    const ct_data *stree  = desc->stat_desc->static_tree;\n    int elems             = desc->stat_desc->elems;\n    int n, m;          /* iterate over heap elements */\n    int max_code = -1; /* largest code with non zero frequency */\n    int node;          /* new node being created */\n\n    /* Construct the initial heap, with least frequent element in\n     * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n     * heap[0] is not used.\n     */\n    s->heap_len = 0, s->heap_max = HEAP_SIZE;\n\n    for (n = 0; n < elems; n++) {\n        if (tree[n].Freq != 0) {\n            s->heap[++(s->heap_len)] = max_code = n;\n            s->depth[n] = 0;\n        } else {\n            tree[n].Len = 0;\n        }\n    }\n\n    /* The pkzip format requires that at least one distance code exists,\n     * and that at least one bit should be sent even if there is only one\n     * possible code. So to avoid special checks later on we force at least\n     * two codes of non zero frequency.\n     */\n    while (s->heap_len < 2) {\n        node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0);\n        tree[node].Freq = 1;\n        s->depth[node] = 0;\n        s->opt_len--; if (stree) s->static_len -= stree[node].Len;\n        /* node is 0 or 1 so it does not have extra bits */\n    }\n    desc->max_code = max_code;\n\n    /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n     * establish sub-heaps of increasing lengths:\n     */\n    for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n);\n\n    /* Construct the Huffman tree by repeatedly combining the least two\n     * frequent nodes.\n     */\n    node = elems;              /* next internal node of the tree */\n    do {\n        pqremove(s, tree, n);  /* n = node of least frequency */\n        m = s->heap[SMALLEST]; /* m = node of next least frequency */\n\n        s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */\n        s->heap[--(s->heap_max)] = m;\n\n        /* Create a new node father of n and m */\n        tree[node].Freq = tree[n].Freq + tree[m].Freq;\n        s->depth[node] = (uch)((s->depth[n] >= s->depth[m] ?\n                                s->depth[n] : s->depth[m]) + 1);\n        tree[n].Dad = tree[m].Dad = (ush)node;\n#ifdef DUMP_BL_TREE\n        if (tree == s->bl_tree) {\n            fprintf(stderr,\"\\nnode %d(%d), sons %d(%d) %d(%d)\",\n                    node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq);\n        }\n#endif\n        /* and insert the new node in the heap */\n        s->heap[SMALLEST] = node++;\n        pqdownheap(s, tree, SMALLEST);\n\n    } while (s->heap_len >= 2);\n\n    s->heap[--(s->heap_max)] = s->heap[SMALLEST];\n\n    /* At this point, the fields freq and dad are set. We can now\n     * generate the bit lengths.\n     */\n    gen_bitlen(s, (tree_desc *)desc);\n\n    /* The field len is now set, we can generate the bit codes */\n    gen_codes ((ct_data *)tree, max_code, s->bl_count);\n}\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nlocal void scan_tree (s, tree, max_code)\n    deflate_state *s;\n    ct_data *tree;   /* the tree to be scanned */\n    int max_code;    /* and its largest code of non zero frequency */\n{\n    int n;                     /* iterates over all tree elements */\n    int prevlen = -1;          /* last emitted length */\n    int curlen;                /* length of current code */\n    int nextlen = tree[0].Len; /* length of next code */\n    int count = 0;             /* repeat count of the current code */\n    int max_count = 7;         /* max repeat count */\n    int min_count = 4;         /* min repeat count */\n\n    if (nextlen == 0) max_count = 138, min_count = 3;\n    tree[max_code+1].Len = (ush)0xffff; /* guard */\n\n    for (n = 0; n <= max_code; n++) {\n        curlen = nextlen; nextlen = tree[n+1].Len;\n        if (++count < max_count && curlen == nextlen) {\n            continue;\n        } else if (count < min_count) {\n            s->bl_tree[curlen].Freq += count;\n        } else if (curlen != 0) {\n            if (curlen != prevlen) s->bl_tree[curlen].Freq++;\n            s->bl_tree[REP_3_6].Freq++;\n        } else if (count <= 10) {\n            s->bl_tree[REPZ_3_10].Freq++;\n        } else {\n            s->bl_tree[REPZ_11_138].Freq++;\n        }\n        count = 0; prevlen = curlen;\n        if (nextlen == 0) {\n            max_count = 138, min_count = 3;\n        } else if (curlen == nextlen) {\n            max_count = 6, min_count = 3;\n        } else {\n            max_count = 7, min_count = 4;\n        }\n    }\n}\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nlocal void send_tree (s, tree, max_code)\n    deflate_state *s;\n    ct_data *tree; /* the tree to be scanned */\n    int max_code;       /* and its largest code of non zero frequency */\n{\n    int n;                     /* iterates over all tree elements */\n    int prevlen = -1;          /* last emitted length */\n    int curlen;                /* length of current code */\n    int nextlen = tree[0].Len; /* length of next code */\n    int count = 0;             /* repeat count of the current code */\n    int max_count = 7;         /* max repeat count */\n    int min_count = 4;         /* min repeat count */\n\n    /* tree[max_code+1].Len = -1; */  /* guard already set */\n    if (nextlen == 0) max_count = 138, min_count = 3;\n\n    for (n = 0; n <= max_code; n++) {\n        curlen = nextlen; nextlen = tree[n+1].Len;\n        if (++count < max_count && curlen == nextlen) {\n            continue;\n        } else if (count < min_count) {\n            do { send_code(s, curlen, s->bl_tree); } while (--count != 0);\n\n        } else if (curlen != 0) {\n            if (curlen != prevlen) {\n                send_code(s, curlen, s->bl_tree); count--;\n            }\n            Assert(count >= 3 && count <= 6, \" 3_6?\");\n            send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2);\n\n        } else if (count <= 10) {\n            send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3);\n\n        } else {\n            send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7);\n        }\n        count = 0; prevlen = curlen;\n        if (nextlen == 0) {\n            max_count = 138, min_count = 3;\n        } else if (curlen == nextlen) {\n            max_count = 6, min_count = 3;\n        } else {\n            max_count = 7, min_count = 4;\n        }\n    }\n}\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nlocal int build_bl_tree(s)\n    deflate_state *s;\n{\n    int max_blindex;  /* index of last bit length code of non zero freq */\n\n    /* Determine the bit length frequencies for literal and distance trees */\n    scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code);\n    scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code);\n\n    /* Build the bit length tree: */\n    build_tree(s, (tree_desc *)(&(s->bl_desc)));\n    /* opt_len now includes the length of the tree representations, except\n     * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n     */\n\n    /* Determine the number of bit length codes to send. The pkzip format\n     * requires that at least 4 bit length codes be sent. (appnote.txt says\n     * 3 but the actual value used is 4.)\n     */\n    for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {\n        if (s->bl_tree[bl_order[max_blindex]].Len != 0) break;\n    }\n    /* Update opt_len to include the bit length tree and counts */\n    s->opt_len += 3*(max_blindex+1) + 5+5+4;\n    Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n            s->opt_len, s->static_len));\n\n    return max_blindex;\n}\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nlocal void send_all_trees(s, lcodes, dcodes, blcodes)\n    deflate_state *s;\n    int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n    int rank;                    /* index in bl_order */\n\n    Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n    Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n            \"too many codes\");\n    Tracev((stderr, \"\\nbl counts: \"));\n    send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */\n    send_bits(s, dcodes-1,   5);\n    send_bits(s, blcodes-4,  4); /* not -3 as stated in appnote.txt */\n    for (rank = 0; rank < blcodes; rank++) {\n        Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n        send_bits(s, s->bl_tree[bl_order[rank]].Len, 3);\n    }\n    Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n    send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */\n    Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n    send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */\n    Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n/* ===========================================================================\n * Send a stored block\n */\nvoid ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last)\n    deflate_state *s;\n    charf *buf;       /* input block */\n    ulg stored_len;   /* length of input block */\n    int last;         /* one if this is the last block for a file */\n{\n    send_bits(s, (STORED_BLOCK<<1)+last, 3);    /* send block type */\n#ifdef DEBUG\n    s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;\n    s->compressed_len += (stored_len + 4) << 3;\n#endif\n    copy_block(s, buf, (unsigned)stored_len, 1); /* with header */\n}\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n * The current inflate code requires 9 bits of lookahead. If the\n * last two codes for the previous block (real code plus EOB) were coded\n * on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode\n * the last real code. In this case we send two empty static blocks instead\n * of one. (There are no problems if the previous block is stored or fixed.)\n * To simplify the code, we assume the worst case of last real code encoded\n * on one bit only.\n */\nvoid ZLIB_INTERNAL _tr_align(s)\n    deflate_state *s;\n{\n    send_bits(s, STATIC_TREES<<1, 3);\n    send_code(s, END_BLOCK, static_ltree);\n#ifdef DEBUG\n    s->compressed_len += 10L; /* 3 for block type, 7 for EOB */\n#endif\n    bi_flush(s);\n    /* Of the 10 bits for the empty block, we have already sent\n     * (10 - bi_valid) bits. The lookahead for the last real code (before\n     * the EOB of the previous block) was thus at least one plus the length\n     * of the EOB plus what we have just sent of the empty static block.\n     */\n    if (1 + s->last_eob_len + 10 - s->bi_valid < 9) {\n        send_bits(s, STATIC_TREES<<1, 3);\n        send_code(s, END_BLOCK, static_ltree);\n#ifdef DEBUG\n        s->compressed_len += 10L;\n#endif\n        bi_flush(s);\n    }\n    s->last_eob_len = 7;\n}\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nvoid ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)\n    deflate_state *s;\n    charf *buf;       /* input block, or NULL if too old */\n    ulg stored_len;   /* length of input block */\n    int last;         /* one if this is the last block for a file */\n{\n    ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n    int max_blindex = 0;  /* index of last bit length code of non zero freq */\n\n    /* Build the Huffman trees unless a stored block is forced */\n    if (s->level > 0) {\n\n        /* Check if the file is binary or text */\n        if (s->strm->data_type == Z_UNKNOWN)\n            s->strm->data_type = detect_data_type(s);\n\n        /* Construct the literal and distance trees */\n        build_tree(s, (tree_desc *)(&(s->l_desc)));\n        Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n                s->static_len));\n\n        build_tree(s, (tree_desc *)(&(s->d_desc)));\n        Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n                s->static_len));\n        /* At this point, opt_len and static_len are the total bit lengths of\n         * the compressed block data, excluding the tree representations.\n         */\n\n        /* Build the bit length tree for the above two trees, and get the index\n         * in bl_order of the last bit length code to send.\n         */\n        max_blindex = build_bl_tree(s);\n\n        /* Determine the best encoding. Compute the block lengths in bytes. */\n        opt_lenb = (s->opt_len+3+7)>>3;\n        static_lenb = (s->static_len+3+7)>>3;\n\n        Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n                opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n                s->last_lit));\n\n        if (static_lenb <= opt_lenb) opt_lenb = static_lenb;\n\n    } else {\n        Assert(buf != (char*)0, \"lost buf\");\n        opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n    }\n\n#ifdef FORCE_STORED\n    if (buf != (char*)0) { /* force stored block */\n#else\n    if (stored_len+4 <= opt_lenb && buf != (char*)0) {\n                       /* 4: two words for the lengths */\n#endif\n        /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n         * Otherwise we can't have processed more than WSIZE input bytes since\n         * the last block flush, because compression would have been\n         * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n         * transform a block into a stored block.\n         */\n        _tr_stored_block(s, buf, stored_len, last);\n\n#ifdef FORCE_STATIC\n    } else if (static_lenb >= 0) { /* force static trees */\n#else\n    } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) {\n#endif\n        send_bits(s, (STATIC_TREES<<1)+last, 3);\n        compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree);\n#ifdef DEBUG\n        s->compressed_len += 3 + s->static_len;\n#endif\n    } else {\n        send_bits(s, (DYN_TREES<<1)+last, 3);\n        send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1,\n                       max_blindex+1);\n        compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree);\n#ifdef DEBUG\n        s->compressed_len += 3 + s->opt_len;\n#endif\n    }\n    Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n    /* The above check is made mod 2^32, for files larger than 512 MB\n     * and uLong implemented on 32 bits.\n     */\n    init_block(s);\n\n    if (last) {\n        bi_windup(s);\n#ifdef DEBUG\n        s->compressed_len += 7;  /* align on byte boundary */\n#endif\n    }\n    Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n           s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nint ZLIB_INTERNAL _tr_tally (s, dist, lc)\n    deflate_state *s;\n    unsigned dist;  /* distance of matched string */\n    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n    s->d_buf[s->last_lit] = (ush)dist;\n    s->l_buf[s->last_lit++] = (uch)lc;\n    if (dist == 0) {\n        /* lc is the unmatched char */\n        s->dyn_ltree[lc].Freq++;\n    } else {\n        s->matches++;\n        /* Here, lc is the match length - MIN_MATCH */\n        dist--;             /* dist = match distance - 1 */\n        Assert((ush)dist < (ush)MAX_DIST(s) &&\n               (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n               (ush)d_code(dist) < (ush)D_CODES,  \"_tr_tally: bad match\");\n\n        s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++;\n        s->dyn_dtree[d_code(dist)].Freq++;\n    }\n\n#ifdef TRUNCATE_BLOCK\n    /* Try to guess if it is profitable to stop the current block here */\n    if ((s->last_lit & 0x1fff) == 0 && s->level > 2) {\n        /* Compute an upper bound for the compressed length */\n        ulg out_length = (ulg)s->last_lit*8L;\n        ulg in_length = (ulg)((long)s->strstart - s->block_start);\n        int dcode;\n        for (dcode = 0; dcode < D_CODES; dcode++) {\n            out_length += (ulg)s->dyn_dtree[dcode].Freq *\n                (5L+extra_dbits[dcode]);\n        }\n        out_length >>= 3;\n        Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n               s->last_lit, in_length, out_length,\n               100L - out_length*100L/in_length));\n        if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1;\n    }\n#endif\n    return (s->last_lit == s->lit_bufsize-1);\n    /* We avoid equality with lit_bufsize because of wraparound at 64K\n     * on 16 bit machines and because stored blocks are restricted to\n     * 64K-1 bytes.\n     */\n}\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nlocal void compress_block(s, ltree, dtree)\n    deflate_state *s;\n    ct_data *ltree; /* literal tree */\n    ct_data *dtree; /* distance tree */\n{\n    unsigned dist;      /* distance of matched string */\n    int lc;             /* match length or unmatched char (if dist == 0) */\n    unsigned lx = 0;    /* running index in l_buf */\n    unsigned code;      /* the code to send */\n    int extra;          /* number of extra bits to send */\n\n    if (s->last_lit != 0) do {\n        dist = s->d_buf[lx];\n        lc = s->l_buf[lx++];\n        if (dist == 0) {\n            send_code(s, lc, ltree); /* send a literal byte */\n            Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n        } else {\n            /* Here, lc is the match length - MIN_MATCH */\n            code = _length_code[lc];\n            send_code(s, code+LITERALS+1, ltree); /* send the length code */\n            extra = extra_lbits[code];\n            if (extra != 0) {\n                lc -= base_length[code];\n                send_bits(s, lc, extra);       /* send the extra length bits */\n            }\n            dist--; /* dist is now the match distance - 1 */\n            code = d_code(dist);\n            Assert (code < D_CODES, \"bad d_code\");\n\n            send_code(s, code, dtree);       /* send the distance code */\n            extra = extra_dbits[code];\n            if (extra != 0) {\n                dist -= base_dist[code];\n                send_bits(s, dist, extra);   /* send the extra distance bits */\n            }\n        } /* literal or match pair ? */\n\n        /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n        Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n               \"pendingBuf overflow\");\n\n    } while (lx < s->last_lit);\n\n    send_code(s, END_BLOCK, ltree);\n    s->last_eob_len = ltree[END_BLOCK].Len;\n}\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n *    a) There are no non-portable control characters belonging to the\n *       \"black list\" (0..6, 14..25, 28..31).\n *    b) There is at least one printable character belonging to the\n *       \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n *   \"gray list\" that is ignored in this detection algorithm:\n *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nlocal int detect_data_type(s)\n    deflate_state *s;\n{\n    /* black_mask is the bit mask of black-listed bytes\n     * set bits 0..6, 14..25, and 28..31\n     * 0xf3ffc07f = binary 11110011111111111100000001111111\n     */\n    unsigned long black_mask = 0xf3ffc07fUL;\n    int n;\n\n    /* Check for non-textual (\"black-listed\") bytes. */\n    for (n = 0; n <= 31; n++, black_mask >>= 1)\n        if ((black_mask & 1) && (s->dyn_ltree[n].Freq != 0))\n            return Z_BINARY;\n\n    /* Check for textual (\"white-listed\") bytes. */\n    if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0\n            || s->dyn_ltree[13].Freq != 0)\n        return Z_TEXT;\n    for (n = 32; n < LITERALS; n++)\n        if (s->dyn_ltree[n].Freq != 0)\n            return Z_TEXT;\n\n    /* There are no \"black-listed\" or \"white-listed\" bytes:\n     * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n     */\n    return Z_BINARY;\n}\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nlocal unsigned bi_reverse(code, len)\n    unsigned code; /* the value to invert */\n    int len;       /* its bit length */\n{\n    register unsigned res = 0;\n    do {\n        res |= code & 1;\n        code >>= 1, res <<= 1;\n    } while (--len > 0);\n    return res >> 1;\n}\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nlocal void bi_flush(s)\n    deflate_state *s;\n{\n    if (s->bi_valid == 16) {\n        put_short(s, s->bi_buf);\n        s->bi_buf = 0;\n        s->bi_valid = 0;\n    } else if (s->bi_valid >= 8) {\n        put_byte(s, (Byte)s->bi_buf);\n        s->bi_buf >>= 8;\n        s->bi_valid -= 8;\n    }\n}\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nlocal void bi_windup(s)\n    deflate_state *s;\n{\n    if (s->bi_valid > 8) {\n        put_short(s, s->bi_buf);\n    } else if (s->bi_valid > 0) {\n        put_byte(s, (Byte)s->bi_buf);\n    }\n    s->bi_buf = 0;\n    s->bi_valid = 0;\n#ifdef DEBUG\n    s->bits_sent = (s->bits_sent+7) & ~7;\n#endif\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nlocal void copy_block(s, buf, len, header)\n    deflate_state *s;\n    charf    *buf;    /* the input data */\n    unsigned len;     /* its length */\n    int      header;  /* true if block header must be written */\n{\n    bi_windup(s);        /* align on byte boundary */\n    s->last_eob_len = 8; /* enough lookahead for inflate */\n\n    if (header) {\n        put_short(s, (ush)len);\n        put_short(s, (ush)~len);\n#ifdef DEBUG\n        s->bits_sent += 2*16;\n#endif\n    }\n#ifdef DEBUG\n    s->bits_sent += (ulg)len<<3;\n#endif\n    while (len--) {\n        put_byte(s, *buf++);\n    }\n}\n"
  },
  {
    "path": "external/zlib/trees.h",
    "content": "/* header created automatically with -DGEN_TREES_H */\n\nlocal const ct_data static_ltree[L_CODES+2] = {\n{{ 12},{  8}}, {{140},{  8}}, {{ 76},{  8}}, {{204},{  8}}, {{ 44},{  8}},\n{{172},{  8}}, {{108},{  8}}, {{236},{  8}}, {{ 28},{  8}}, {{156},{  8}},\n{{ 92},{  8}}, {{220},{  8}}, {{ 60},{  8}}, {{188},{  8}}, {{124},{  8}},\n{{252},{  8}}, {{  2},{  8}}, {{130},{  8}}, {{ 66},{  8}}, {{194},{  8}},\n{{ 34},{  8}}, {{162},{  8}}, {{ 98},{  8}}, {{226},{  8}}, {{ 18},{  8}},\n{{146},{  8}}, {{ 82},{  8}}, {{210},{  8}}, {{ 50},{  8}}, {{178},{  8}},\n{{114},{  8}}, {{242},{  8}}, {{ 10},{  8}}, {{138},{  8}}, {{ 74},{  8}},\n{{202},{  8}}, {{ 42},{  8}}, {{170},{  8}}, {{106},{  8}}, {{234},{  8}},\n{{ 26},{  8}}, {{154},{  8}}, {{ 90},{  8}}, {{218},{  8}}, {{ 58},{  8}},\n{{186},{  8}}, {{122},{  8}}, {{250},{  8}}, {{  6},{  8}}, {{134},{  8}},\n{{ 70},{  8}}, {{198},{  8}}, {{ 38},{  8}}, {{166},{  8}}, {{102},{  8}},\n{{230},{  8}}, {{ 22},{  8}}, {{150},{  8}}, {{ 86},{  8}}, {{214},{  8}},\n{{ 54},{  8}}, {{182},{  8}}, {{118},{  8}}, {{246},{  8}}, {{ 14},{  8}},\n{{142},{  8}}, {{ 78},{  8}}, {{206},{  8}}, {{ 46},{  8}}, {{174},{  8}},\n{{110},{  8}}, {{238},{  8}}, {{ 30},{  8}}, {{158},{  8}}, {{ 94},{  8}},\n{{222},{  8}}, {{ 62},{  8}}, {{190},{  8}}, {{126},{  8}}, {{254},{  8}},\n{{  1},{  8}}, {{129},{  8}}, {{ 65},{  8}}, {{193},{  8}}, {{ 33},{  8}},\n{{161},{  8}}, {{ 97},{  8}}, {{225},{  8}}, {{ 17},{  8}}, {{145},{  8}},\n{{ 81},{  8}}, {{209},{  8}}, {{ 49},{  8}}, {{177},{  8}}, {{113},{  8}},\n{{241},{  8}}, {{  9},{  8}}, {{137},{  8}}, {{ 73},{  8}}, {{201},{  8}},\n{{ 41},{  8}}, {{169},{  8}}, {{105},{  8}}, {{233},{  8}}, {{ 25},{  8}},\n{{153},{  8}}, {{ 89},{  8}}, {{217},{  8}}, {{ 57},{  8}}, {{185},{  8}},\n{{121},{  8}}, {{249},{  8}}, {{  5},{  8}}, {{133},{  8}}, {{ 69},{  8}},\n{{197},{  8}}, {{ 37},{  8}}, {{165},{  8}}, {{101},{  8}}, {{229},{  8}},\n{{ 21},{  8}}, {{149},{  8}}, {{ 85},{  8}}, {{213},{  8}}, {{ 53},{  8}},\n{{181},{  8}}, {{117},{  8}}, {{245},{  8}}, {{ 13},{  8}}, {{141},{  8}},\n{{ 77},{  8}}, {{205},{  8}}, {{ 45},{  8}}, {{173},{  8}}, {{109},{  8}},\n{{237},{  8}}, {{ 29},{  8}}, {{157},{  8}}, {{ 93},{  8}}, {{221},{  8}},\n{{ 61},{  8}}, {{189},{  8}}, {{125},{  8}}, {{253},{  8}}, {{ 19},{  9}},\n{{275},{  9}}, {{147},{  9}}, {{403},{  9}}, {{ 83},{  9}}, {{339},{  9}},\n{{211},{  9}}, {{467},{  9}}, {{ 51},{  9}}, {{307},{  9}}, {{179},{  9}},\n{{435},{  9}}, {{115},{  9}}, {{371},{  9}}, {{243},{  9}}, {{499},{  9}},\n{{ 11},{  9}}, {{267},{  9}}, {{139},{  9}}, {{395},{  9}}, {{ 75},{  9}},\n{{331},{  9}}, {{203},{  9}}, {{459},{  9}}, {{ 43},{  9}}, {{299},{  9}},\n{{171},{  9}}, {{427},{  9}}, {{107},{  9}}, {{363},{  9}}, {{235},{  9}},\n{{491},{  9}}, {{ 27},{  9}}, {{283},{  9}}, {{155},{  9}}, {{411},{  9}},\n{{ 91},{  9}}, {{347},{  9}}, {{219},{  9}}, {{475},{  9}}, {{ 59},{  9}},\n{{315},{  9}}, {{187},{  9}}, {{443},{  9}}, {{123},{  9}}, {{379},{  9}},\n{{251},{  9}}, {{507},{  9}}, {{  7},{  9}}, {{263},{  9}}, {{135},{  9}},\n{{391},{  9}}, {{ 71},{  9}}, {{327},{  9}}, {{199},{  9}}, {{455},{  9}},\n{{ 39},{  9}}, {{295},{  9}}, {{167},{  9}}, {{423},{  9}}, {{103},{  9}},\n{{359},{  9}}, {{231},{  9}}, {{487},{  9}}, {{ 23},{  9}}, {{279},{  9}},\n{{151},{  9}}, {{407},{  9}}, {{ 87},{  9}}, {{343},{  9}}, {{215},{  9}},\n{{471},{  9}}, {{ 55},{  9}}, {{311},{  9}}, {{183},{  9}}, {{439},{  9}},\n{{119},{  9}}, {{375},{  9}}, {{247},{  9}}, {{503},{  9}}, {{ 15},{  9}},\n{{271},{  9}}, {{143},{  9}}, {{399},{  9}}, {{ 79},{  9}}, {{335},{  9}},\n{{207},{  9}}, {{463},{  9}}, {{ 47},{  9}}, {{303},{  9}}, {{175},{  9}},\n{{431},{  9}}, {{111},{  9}}, {{367},{  9}}, {{239},{  9}}, {{495},{  9}},\n{{ 31},{  9}}, {{287},{  9}}, {{159},{  9}}, {{415},{  9}}, {{ 95},{  9}},\n{{351},{  9}}, {{223},{  9}}, {{479},{  9}}, {{ 63},{  9}}, {{319},{  9}},\n{{191},{  9}}, {{447},{  9}}, {{127},{  9}}, {{383},{  9}}, {{255},{  9}},\n{{511},{  9}}, {{  0},{  7}}, {{ 64},{  7}}, {{ 32},{  7}}, {{ 96},{  7}},\n{{ 16},{  7}}, {{ 80},{  7}}, {{ 48},{  7}}, {{112},{  7}}, {{  8},{  7}},\n{{ 72},{  7}}, {{ 40},{  7}}, {{104},{  7}}, {{ 24},{  7}}, {{ 88},{  7}},\n{{ 56},{  7}}, {{120},{  7}}, {{  4},{  7}}, {{ 68},{  7}}, {{ 36},{  7}},\n{{100},{  7}}, {{ 20},{  7}}, {{ 84},{  7}}, {{ 52},{  7}}, {{116},{  7}},\n{{  3},{  8}}, {{131},{  8}}, {{ 67},{  8}}, {{195},{  8}}, {{ 35},{  8}},\n{{163},{  8}}, {{ 99},{  8}}, {{227},{  8}}\n};\n\nlocal const ct_data static_dtree[D_CODES] = {\n{{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}},\n{{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}},\n{{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}},\n{{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}},\n{{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}},\n{{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}}\n};\n\nconst uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = {\n 0,  1,  2,  3,  4,  4,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,  8,  8,  8,  8,\n 8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10, 10, 10, 10, 10, 10,\n10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,\n12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13,\n13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\n14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\n14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\n14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15,\n15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,\n15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,\n15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,  0,  0, 16, 17,\n18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22,\n23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,\n26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,\n26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27,\n27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,\n27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,\n29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,\n29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,\n29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29\n};\n\nconst uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= {\n 0,  1,  2,  3,  4,  5,  6,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 12, 12,\n13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16,\n17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19,\n19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,\n21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22,\n22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23,\n23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,\n25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26,\n26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,\n26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,\n27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28\n};\n\nlocal const int base_length[LENGTH_CODES] = {\n0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56,\n64, 80, 96, 112, 128, 160, 192, 224, 0\n};\n\nlocal const int base_dist[D_CODES] = {\n    0,     1,     2,     3,     4,     6,     8,    12,    16,    24,\n   32,    48,    64,    96,   128,   192,   256,   384,   512,   768,\n 1024,  1536,  2048,  3072,  4096,  6144,  8192, 12288, 16384, 24576\n};\n\n"
  },
  {
    "path": "external/zlib/uncompr.c",
    "content": "/* uncompr.c -- decompress a memory buffer\n * Copyright (C) 1995-2003, 2010 Jean-loup Gailly.\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n/* @(#) $Id$ */\n\n#define ZLIB_INTERNAL\n#include \"zlib.h\"\n\n/* ===========================================================================\n     Decompresses the source buffer into the destination buffer.  sourceLen is\n   the byte length of the source buffer. Upon entry, destLen is the total\n   size of the destination buffer, which must be large enough to hold the\n   entire uncompressed data. (The size of the uncompressed data must have\n   been saved previously by the compressor and transmitted to the decompressor\n   by some mechanism outside the scope of this compression library.)\n   Upon exit, destLen is the actual size of the compressed buffer.\n\n     uncompress returns Z_OK if success, Z_MEM_ERROR if there was not\n   enough memory, Z_BUF_ERROR if there was not enough room in the output\n   buffer, or Z_DATA_ERROR if the input data was corrupted.\n*/\nint ZEXPORT uncompress (dest, destLen, source, sourceLen)\n    Bytef *dest;\n    uLongf *destLen;\n    const Bytef *source;\n    uLong sourceLen;\n{\n    z_stream stream;\n    int err;\n\n    stream.next_in = (Bytef*)source;\n    stream.avail_in = (uInt)sourceLen;\n    /* Check for source > 64K on 16-bit machine: */\n    if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;\n\n    stream.next_out = dest;\n    stream.avail_out = (uInt)*destLen;\n    if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;\n\n    stream.zalloc = (alloc_func)0;\n    stream.zfree = (free_func)0;\n\n    err = inflateInit(&stream);\n    if (err != Z_OK) return err;\n\n    err = inflate(&stream, Z_FINISH);\n    if (err != Z_STREAM_END) {\n        inflateEnd(&stream);\n        if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0))\n            return Z_DATA_ERROR;\n        return err;\n    }\n    *destLen = stream.total_out;\n\n    err = inflateEnd(&stream);\n    return err;\n}\n"
  },
  {
    "path": "external/zlib/watcom/watcom_f.mak",
    "content": "# Makefile for zlib\n# OpenWatcom flat model\n# Last updated: 28-Dec-2005\n\n# To use, do \"wmake -f watcom_f.mak\"\n\nC_SOURCE =  adler32.c  compress.c crc32.c   deflate.c    &\n\t    gzclose.c  gzlib.c    gzread.c  gzwrite.c    &\n            infback.c  inffast.c  inflate.c inftrees.c   &\n            trees.c    uncompr.c  zutil.c\n\nOBJS =      adler32.obj  compress.obj crc32.obj   deflate.obj    &\n\t    gzclose.obj  gzlib.obj    gzread.obj  gzwrite.obj    &\n            infback.obj  inffast.obj  inflate.obj inftrees.obj   &\n            trees.obj    uncompr.obj  zutil.obj\n\nCC       = wcc386\nLINKER   = wcl386\nCFLAGS   = -zq -mf -3r -fp3 -s -bt=dos -oilrtfm -fr=nul -wx\nZLIB_LIB = zlib_f.lib\n\n.C.OBJ:\n        $(CC) $(CFLAGS) $[@\n\nall: $(ZLIB_LIB) example.exe minigzip.exe\n\n$(ZLIB_LIB): $(OBJS)\n\twlib -b -c $(ZLIB_LIB) -+adler32.obj  -+compress.obj -+crc32.obj\n\twlib -b -c $(ZLIB_LIB) -+gzclose.obj  -+gzlib.obj    -+gzread.obj   -+gzwrite.obj\n        wlib -b -c $(ZLIB_LIB) -+deflate.obj  -+infback.obj\n        wlib -b -c $(ZLIB_LIB) -+inffast.obj  -+inflate.obj  -+inftrees.obj\n        wlib -b -c $(ZLIB_LIB) -+trees.obj    -+uncompr.obj  -+zutil.obj\n\nexample.exe: $(ZLIB_LIB) example.obj\n\t$(LINKER) -ldos32a -fe=example.exe example.obj $(ZLIB_LIB)\n\nminigzip.exe: $(ZLIB_LIB) minigzip.obj\n\t$(LINKER) -ldos32a -fe=minigzip.exe minigzip.obj $(ZLIB_LIB)\n\nclean: .SYMBOLIC\n          del *.obj\n          del $(ZLIB_LIB)\n          @echo Cleaning done\n"
  },
  {
    "path": "external/zlib/watcom/watcom_l.mak",
    "content": "# Makefile for zlib\n# OpenWatcom large model\n# Last updated: 28-Dec-2005\n\n# To use, do \"wmake -f watcom_l.mak\"\n\nC_SOURCE =  adler32.c  compress.c crc32.c   deflate.c    &\n\t    gzclose.c  gzlib.c    gzread.c  gzwrite.c    &\n            infback.c  inffast.c  inflate.c inftrees.c   &\n            trees.c    uncompr.c  zutil.c\n\nOBJS =      adler32.obj  compress.obj crc32.obj   deflate.obj    &\n\t    gzclose.obj  gzlib.obj    gzread.obj  gzwrite.obj    &\n            infback.obj  inffast.obj  inflate.obj inftrees.obj   &\n            trees.obj    uncompr.obj  zutil.obj\n\nCC       = wcc\nLINKER   = wcl\nCFLAGS   = -zq -ml -s -bt=dos -oilrtfm -fr=nul -wx\nZLIB_LIB = zlib_l.lib\n\n.C.OBJ:\n        $(CC) $(CFLAGS) $[@\n\nall: $(ZLIB_LIB) example.exe minigzip.exe\n\n$(ZLIB_LIB): $(OBJS)\n\twlib -b -c $(ZLIB_LIB) -+adler32.obj  -+compress.obj -+crc32.obj\n\twlib -b -c $(ZLIB_LIB) -+gzclose.obj  -+gzlib.obj    -+gzread.obj   -+gzwrite.obj\n        wlib -b -c $(ZLIB_LIB) -+deflate.obj  -+infback.obj\n        wlib -b -c $(ZLIB_LIB) -+inffast.obj  -+inflate.obj  -+inftrees.obj\n        wlib -b -c $(ZLIB_LIB) -+trees.obj    -+uncompr.obj  -+zutil.obj\n\nexample.exe: $(ZLIB_LIB) example.obj\n\t$(LINKER) -fe=example.exe example.obj $(ZLIB_LIB)\n\nminigzip.exe: $(ZLIB_LIB) minigzip.obj\n\t$(LINKER) -fe=minigzip.exe minigzip.obj $(ZLIB_LIB)\n\nclean: .SYMBOLIC\n          del *.obj\n          del $(ZLIB_LIB)\n          @echo Cleaning done\n"
  },
  {
    "path": "external/zlib/win32/DLL_FAQ.txt",
    "content": "\n            Frequently Asked Questions about ZLIB1.DLL\n\n\nThis document describes the design, the rationale, and the usage\nof the official DLL build of zlib, named ZLIB1.DLL.  If you have\ngeneral questions about zlib, you should see the file \"FAQ\" found\nin the zlib distribution, or at the following location:\n  http://www.gzip.org/zlib/zlib_faq.html\n\n\n 1. What is ZLIB1.DLL, and how can I get it?\n\n  - ZLIB1.DLL is the official build of zlib as a DLL.\n    (Please remark the character '1' in the name.)\n\n    Pointers to a precompiled ZLIB1.DLL can be found in the zlib\n    web site at:\n      http://www.zlib.net/\n\n    Applications that link to ZLIB1.DLL can rely on the following\n    specification:\n\n    * The exported symbols are exclusively defined in the source\n      files \"zlib.h\" and \"zlib.def\", found in an official zlib\n      source distribution.\n    * The symbols are exported by name, not by ordinal.\n    * The exported names are undecorated.\n    * The calling convention of functions is \"C\" (CDECL).\n    * The ZLIB1.DLL binary is linked to MSVCRT.DLL.\n\n    The archive in which ZLIB1.DLL is bundled contains compiled\n    test programs that must run with a valid build of ZLIB1.DLL.\n    It is recommended to download the prebuilt DLL from the zlib\n    web site, instead of building it yourself, to avoid potential\n    incompatibilities that could be introduced by your compiler\n    and build settings.  If you do build the DLL yourself, please\n    make sure that it complies with all the above requirements,\n    and it runs with the precompiled test programs, bundled with\n    the original ZLIB1.DLL distribution.\n\n    If, for any reason, you need to build an incompatible DLL,\n    please use a different file name.\n\n\n 2. Why did you change the name of the DLL to ZLIB1.DLL?\n    What happened to the old ZLIB.DLL?\n\n  - The old ZLIB.DLL, built from zlib-1.1.4 or earlier, required\n    compilation settings that were incompatible to those used by\n    a static build.  The DLL settings were supposed to be enabled\n    by defining the macro ZLIB_DLL, before including \"zlib.h\".\n    Incorrect handling of this macro was silently accepted at\n    build time, resulting in two major problems:\n\n    * ZLIB_DLL was missing from the old makefile.  When building\n      the DLL, not all people added it to the build options.  In\n      consequence, incompatible incarnations of ZLIB.DLL started\n      to circulate around the net.\n\n    * When switching from using the static library to using the\n      DLL, applications had to define the ZLIB_DLL macro and\n      to recompile all the sources that contained calls to zlib\n      functions.  Failure to do so resulted in creating binaries\n      that were unable to run with the official ZLIB.DLL build.\n\n    The only possible solution that we could foresee was to make\n    a binary-incompatible change in the DLL interface, in order to\n    remove the dependency on the ZLIB_DLL macro, and to release\n    the new DLL under a different name.\n\n    We chose the name ZLIB1.DLL, where '1' indicates the major\n    zlib version number.  We hope that we will not have to break\n    the binary compatibility again, at least not as long as the\n    zlib-1.x series will last.\n\n    There is still a ZLIB_DLL macro, that can trigger a more\n    efficient build and use of the DLL, but compatibility no\n    longer dependents on it.\n\n\n 3. Can I build ZLIB.DLL from the new zlib sources, and replace\n    an old ZLIB.DLL, that was built from zlib-1.1.4 or earlier?\n\n  - In principle, you can do it by assigning calling convention\n    keywords to the macros ZEXPORT and ZEXPORTVA.  In practice,\n    it depends on what you mean by \"an old ZLIB.DLL\", because the\n    old DLL exists in several mutually-incompatible versions.\n    You have to find out first what kind of calling convention is\n    being used in your particular ZLIB.DLL build, and to use the\n    same one in the new build.  If you don't know what this is all\n    about, you might be better off if you would just leave the old\n    DLL intact.\n\n\n 4. Can I compile my application using the new zlib interface, and\n    link it to an old ZLIB.DLL, that was built from zlib-1.1.4 or\n    earlier?\n\n  - The official answer is \"no\"; the real answer depends again on\n    what kind of ZLIB.DLL you have.  Even if you are lucky, this\n    course of action is unreliable.\n\n    If you rebuild your application and you intend to use a newer\n    version of zlib (post- 1.1.4), it is strongly recommended to\n    link it to the new ZLIB1.DLL.\n\n\n 5. Why are the zlib symbols exported by name, and not by ordinal?\n\n  - Although exporting symbols by ordinal is a little faster, it\n    is risky.  Any single glitch in the maintenance or use of the\n    DEF file that contains the ordinals can result in incompatible\n    builds and frustrating crashes.  Simply put, the benefits of\n    exporting symbols by ordinal do not justify the risks.\n\n    Technically, it should be possible to maintain ordinals in\n    the DEF file, and still export the symbols by name.  Ordinals\n    exist in every DLL, and even if the dynamic linking performed\n    at the DLL startup is searching for names, ordinals serve as\n    hints, for a faster name lookup.  However, if the DEF file\n    contains ordinals, the Microsoft linker automatically builds\n    an implib that will cause the executables linked to it to use\n    those ordinals, and not the names.  It is interesting to\n    notice that the GNU linker for Win32 does not suffer from this\n    problem.\n\n    It is possible to avoid the DEF file if the exported symbols\n    are accompanied by a \"__declspec(dllexport)\" attribute in the\n    source files.  You can do this in zlib by predefining the\n    ZLIB_DLL macro.\n\n\n 6. I see that the ZLIB1.DLL functions use the \"C\" (CDECL) calling\n    convention.  Why not use the STDCALL convention?\n    STDCALL is the standard convention in Win32, and I need it in\n    my Visual Basic project!\n\n    (For readability, we use CDECL to refer to the convention\n     triggered by the \"__cdecl\" keyword, STDCALL to refer to\n     the convention triggered by \"__stdcall\", and FASTCALL to\n     refer to the convention triggered by \"__fastcall\".)\n\n  - Most of the native Windows API functions (without varargs) use\n    indeed the WINAPI convention (which translates to STDCALL in\n    Win32), but the standard C functions use CDECL.  If a user\n    application is intrinsically tied to the Windows API (e.g.\n    it calls native Windows API functions such as CreateFile()),\n    sometimes it makes sense to decorate its own functions with\n    WINAPI.  But if ANSI C or POSIX portability is a goal (e.g.\n    it calls standard C functions such as fopen()), it is not a\n    sound decision to request the inclusion of <windows.h>, or to\n    use non-ANSI constructs, for the sole purpose to make the user\n    functions STDCALL-able.\n\n    The functionality offered by zlib is not in the category of\n    \"Windows functionality\", but is more like \"C functionality\".\n\n    Technically, STDCALL is not bad; in fact, it is slightly\n    faster than CDECL, and it works with variable-argument\n    functions, just like CDECL.  It is unfortunate that, in spite\n    of using STDCALL in the Windows API, it is not the default\n    convention used by the C compilers that run under Windows.\n    The roots of the problem reside deep inside the unsafety of\n    the K&R-style function prototypes, where the argument types\n    are not specified; but that is another story for another day.\n\n    The remaining fact is that CDECL is the default convention.\n    Even if an explicit convention is hard-coded into the function\n    prototypes inside C headers, problems may appear.  The\n    necessity to expose the convention in users' callbacks is one\n    of these problems.\n\n    The calling convention issues are also important when using\n    zlib in other programming languages.  Some of them, like Ada\n    (GNAT) and Fortran (GNU G77), have C bindings implemented\n    initially on Unix, and relying on the C calling convention.\n    On the other hand, the pre- .NET versions of Microsoft Visual\n    Basic require STDCALL, while Borland Delphi prefers, although\n    it does not require, FASTCALL.\n\n    In fairness to all possible uses of zlib outside the C\n    programming language, we choose the default \"C\" convention.\n    Anyone interested in different bindings or conventions is\n    encouraged to maintain specialized projects.  The \"contrib/\"\n    directory from the zlib distribution already holds a couple\n    of foreign bindings, such as Ada, C++, and Delphi.\n\n\n 7. I need a DLL for my Visual Basic project.  What can I do?\n\n  - Define the ZLIB_WINAPI macro before including \"zlib.h\", when\n    building both the DLL and the user application (except that\n    you don't need to define anything when using the DLL in Visual\n    Basic).  The ZLIB_WINAPI macro will switch on the WINAPI\n    (STDCALL) convention.  The name of this DLL must be different\n    than the official ZLIB1.DLL.\n\n    Gilles Vollant has contributed a build named ZLIBWAPI.DLL,\n    with the ZLIB_WINAPI macro turned on, and with the minizip\n    functionality built in.  For more information, please read\n    the notes inside \"contrib/vstudio/readme.txt\", found in the\n    zlib distribution.\n\n\n 8. I need to use zlib in my Microsoft .NET project.  What can I\n    do?\n\n  - Henrik Ravn has contributed a .NET wrapper around zlib.  Look\n    into contrib/dotzlib/, inside the zlib distribution.\n\n\n 9. If my application uses ZLIB1.DLL, should I link it to\n    MSVCRT.DLL?  Why?\n\n  - It is not required, but it is recommended to link your\n    application to MSVCRT.DLL, if it uses ZLIB1.DLL.\n\n    The executables (.EXE, .DLL, etc.) that are involved in the\n    same process and are using the C run-time library (i.e. they\n    are calling standard C functions), must link to the same\n    library.  There are several libraries in the Win32 system:\n    CRTDLL.DLL, MSVCRT.DLL, the static C libraries, etc.\n    Since ZLIB1.DLL is linked to MSVCRT.DLL, the executables that\n    depend on it should also be linked to MSVCRT.DLL.\n\n\n10. Why are you saying that ZLIB1.DLL and my application should\n    be linked to the same C run-time (CRT) library?  I linked my\n    application and my DLLs to different C libraries (e.g. my\n    application to a static library, and my DLLs to MSVCRT.DLL),\n    and everything works fine.\n\n  - If a user library invokes only pure Win32 API (accessible via\n    <windows.h> and the related headers), its DLL build will work\n    in any context.  But if this library invokes standard C API,\n    things get more complicated.\n\n    There is a single Win32 library in a Win32 system.  Every\n    function in this library resides in a single DLL module, that\n    is safe to call from anywhere.  On the other hand, there are\n    multiple versions of the C library, and each of them has its\n    own separate internal state.  Standalone executables and user\n    DLLs that call standard C functions must link to a C run-time\n    (CRT) library, be it static or shared (DLL).  Intermixing\n    occurs when an executable (not necessarily standalone) and a\n    DLL are linked to different CRTs, and both are running in the\n    same process.\n\n    Intermixing multiple CRTs is possible, as long as their\n    internal states are kept intact.  The Microsoft Knowledge Base\n    articles KB94248 \"HOWTO: Use the C Run-Time\" and KB140584\n    \"HOWTO: Link with the Correct C Run-Time (CRT) Library\"\n    mention the potential problems raised by intermixing.\n\n    If intermixing works for you, it's because your application\n    and DLLs are avoiding the corruption of each of the CRTs'\n    internal states, maybe by careful design, or maybe by fortune.\n\n    Also note that linking ZLIB1.DLL to non-Microsoft CRTs, such\n    as those provided by Borland, raises similar problems.\n\n\n11. Why are you linking ZLIB1.DLL to MSVCRT.DLL?\n\n  - MSVCRT.DLL exists on every Windows 95 with a new service pack\n    installed, or with Microsoft Internet Explorer 4 or later, and\n    on all other Windows 4.x or later (Windows 98, Windows NT 4,\n    or later).  It is freely distributable; if not present in the\n    system, it can be downloaded from Microsoft or from other\n    software provider for free.\n\n    The fact that MSVCRT.DLL does not exist on a virgin Windows 95\n    is not so problematic.  Windows 95 is scarcely found nowadays,\n    Microsoft ended its support a long time ago, and many recent\n    applications from various vendors, including Microsoft, do not\n    even run on it.  Furthermore, no serious user should run\n    Windows 95 without a proper update installed.\n\n\n12. Why are you not linking ZLIB1.DLL to\n    <<my favorite C run-time library>> ?\n\n  - We considered and abandoned the following alternatives:\n\n    * Linking ZLIB1.DLL to a static C library (LIBC.LIB, or\n      LIBCMT.LIB) is not a good option.  People are using the DLL\n      mainly to save disk space.  If you are linking your program\n      to a static C library, you may as well consider linking zlib\n      in statically, too.\n\n    * Linking ZLIB1.DLL to CRTDLL.DLL looks appealing, because\n      CRTDLL.DLL is present on every Win32 installation.\n      Unfortunately, it has a series of problems: it does not\n      work properly with Microsoft's C++ libraries, it does not\n      provide support for 64-bit file offsets, (and so on...),\n      and Microsoft discontinued its support a long time ago.\n\n    * Linking ZLIB1.DLL to MSVCR70.DLL or MSVCR71.DLL, supplied\n      with the Microsoft .NET platform, and Visual C++ 7.0/7.1,\n      raises problems related to the status of ZLIB1.DLL as a\n      system component.  According to the Microsoft Knowledge Base\n      article KB326922 \"INFO: Redistribution of the Shared C\n      Runtime Component in Visual C++ .NET\", MSVCR70.DLL and\n      MSVCR71.DLL are not supposed to function as system DLLs,\n      because they may clash with MSVCRT.DLL.  Instead, the\n      application's installer is supposed to put these DLLs\n      (if needed) in the application's private directory.\n      If ZLIB1.DLL depends on a non-system runtime, it cannot\n      function as a redistributable system component.\n\n    * Linking ZLIB1.DLL to non-Microsoft runtimes, such as\n      Borland's, or Cygwin's, raises problems related to the\n      reliable presence of these runtimes on Win32 systems.\n      It's easier to let the DLL build of zlib up to the people\n      who distribute these runtimes, and who may proceed as\n      explained in the answer to Question 14.\n\n\n13. If ZLIB1.DLL cannot be linked to MSVCR70.DLL or MSVCR71.DLL,\n    how can I build/use ZLIB1.DLL in Microsoft Visual C++ 7.0\n    (Visual Studio .NET) or newer?\n\n  - Due to the problems explained in the Microsoft Knowledge Base\n    article KB326922 (see the previous answer), the C runtime that\n    comes with the VC7 environment is no longer considered a\n    system component.  That is, it should not be assumed that this\n    runtime exists, or may be installed in a system directory.\n    Since ZLIB1.DLL is supposed to be a system component, it may\n    not depend on a non-system component.\n\n    In order to link ZLIB1.DLL and your application to MSVCRT.DLL\n    in VC7, you need the library of Visual C++ 6.0 or older.  If\n    you don't have this library at hand, it's probably best not to\n    use ZLIB1.DLL.\n\n    We are hoping that, in the future, Microsoft will provide a\n    way to build applications linked to a proper system runtime,\n    from the Visual C++ environment.  Until then, you have a\n    couple of alternatives, such as linking zlib in statically.\n    If your application requires dynamic linking, you may proceed\n    as explained in the answer to Question 14.\n\n\n14. I need to link my own DLL build to a CRT different than\n    MSVCRT.DLL.  What can I do?\n\n  - Feel free to rebuild the DLL from the zlib sources, and link\n    it the way you want.  You should, however, clearly state that\n    your build is unofficial.  You should give it a different file\n    name, and/or install it in a private directory that can be\n    accessed by your application only, and is not visible to the\n    others (i.e. it's neither in the PATH, nor in the SYSTEM or\n    SYSTEM32 directories).  Otherwise, your build may clash with\n    applications that link to the official build.\n\n    For example, in Cygwin, zlib is linked to the Cygwin runtime\n    CYGWIN1.DLL, and it is distributed under the name CYGZ.DLL.\n\n\n15. May I include additional pieces of code that I find useful,\n    link them in ZLIB1.DLL, and export them?\n\n  - No.  A legitimate build of ZLIB1.DLL must not include code\n    that does not originate from the official zlib source code.\n    But you can make your own private DLL build, under a different\n    file name, as suggested in the previous answer.\n\n    For example, zlib is a part of the VCL library, distributed\n    with Borland Delphi and C++ Builder.  The DLL build of VCL\n    is a redistributable file, named VCLxx.DLL.\n\n\n16. May I remove some functionality out of ZLIB1.DLL, by enabling\n    macros like NO_GZCOMPRESS or NO_GZIP at compile time?\n\n  - No.  A legitimate build of ZLIB1.DLL must provide the complete\n    zlib functionality, as implemented in the official zlib source\n    code.  But you can make your own private DLL build, under a\n    different file name, as suggested in the previous answer.\n\n\n17. I made my own ZLIB1.DLL build.  Can I test it for compliance?\n\n  - We prefer that you download the official DLL from the zlib\n    web site.  If you need something peculiar from this DLL, you\n    can send your suggestion to the zlib mailing list.\n\n    However, in case you do rebuild the DLL yourself, you can run\n    it with the test programs found in the DLL distribution.\n    Running these test programs is not a guarantee of compliance,\n    but a failure can imply a detected problem.\n\n**\n\nThis document is written and maintained by\nCosmin Truta <cosmint@cs.ubbcluj.ro>\n"
  },
  {
    "path": "external/zlib/win32/Makefile.bor",
    "content": "# Makefile for zlib\n# Borland C++ for Win32\n#\n# Usage:\n#  make -f win32/Makefile.bor\n#  make -f win32/Makefile.bor LOCAL_ZLIB=-DASMV OBJA=match.obj OBJPA=+match.obj\n\n# ------------ Borland C++ ------------\n\n# Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7)\n# should be added to the environment via \"set LOCAL_ZLIB=-DFOO\" or\n# added to the declaration of LOC here:\nLOC = $(LOCAL_ZLIB)\n\nCC = bcc32\nAS = bcc32\nLD = bcc32\nAR = tlib\nCFLAGS  = -a -d -k- -O2 $(LOC)\nASFLAGS = $(LOC)\nLDFLAGS = $(LOC)\n\n\n# variables\nZLIB_LIB = zlib.lib\n\nOBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj\nOBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj\n#OBJA =\nOBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj\nOBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj\n#OBJPA=\n\n\n# targets\nall: $(ZLIB_LIB) example.exe minigzip.exe\n\n.c.obj:\n\t$(CC) -c $(CFLAGS) $<\n\n.asm.obj:\n\t$(AS) -c $(ASFLAGS) $<\n\nadler32.obj: adler32.c zlib.h zconf.h\n\ncompress.obj: compress.c zlib.h zconf.h\n\ncrc32.obj: crc32.c zlib.h zconf.h crc32.h\n\ndeflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h\n\ngzclose.obj: gzclose.c zlib.h zconf.h gzguts.h\n\ngzlib.obj: gzlib.c zlib.h zconf.h gzguts.h\n\ngzread.obj: gzread.c zlib.h zconf.h gzguts.h\n\ngzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h\n\ninfback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \\\n inffast.h inffixed.h\n\ninffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \\\n inffast.h\n\ninflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \\\n inffast.h inffixed.h\n\ninftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h\n\ntrees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h\n\nuncompr.obj: uncompr.c zlib.h zconf.h\n\nzutil.obj: zutil.c zutil.h zlib.h zconf.h\n\nexample.obj: example.c zlib.h zconf.h\n\nminigzip.obj: minigzip.c zlib.h zconf.h\n\n\n# For the sake of the old Borland make,\n# the command line is cut to fit in the MS-DOS 128 byte limit:\n$(ZLIB_LIB): $(OBJ1) $(OBJ2) $(OBJA)\n\t-del $(ZLIB_LIB)\n\t$(AR) $(ZLIB_LIB) $(OBJP1)\n\t$(AR) $(ZLIB_LIB) $(OBJP2)\n\t$(AR) $(ZLIB_LIB) $(OBJPA)\n\n\n# testing\ntest: example.exe minigzip.exe\n\texample\n\techo hello world | minigzip | minigzip -d\n\nexample.exe: example.obj $(ZLIB_LIB)\n\t$(LD) $(LDFLAGS) example.obj $(ZLIB_LIB)\n\nminigzip.exe: minigzip.obj $(ZLIB_LIB)\n\t$(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB)\n\n\n# cleanup\nclean:\n\t-del $(ZLIB_LIB)\n\t-del *.obj\n\t-del *.exe\n\t-del *.tds\n\t-del zlib.bak\n\t-del foo.gz\n"
  },
  {
    "path": "external/zlib/win32/Makefile.emx",
    "content": "# Makefile for zlib.  Modified for emx/rsxnt by Chr. Spieler, 6/16/98.\n# Copyright (C) 1995-1998 Jean-loup Gailly.\n# For conditions of distribution and use, see copyright notice in zlib.h\n\n# To compile, or to compile and test, type:\n#\n#   make -fmakefile.emx;  make test -fmakefile.emx\n#\n\nCC=gcc -Zwin32\n\n#CFLAGS=-MMD -O\n#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7\n#CFLAGS=-MMD -g -DDEBUG\nCFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \\\n             -Wstrict-prototypes -Wmissing-prototypes\n\n# If cp.exe is available, replace \"copy /Y\" with \"cp -fp\" .\nCP=copy /Y\n# If gnu install.exe is available, replace $(CP) with ginstall.\nINSTALL=$(CP)\n# The default value of RM is \"rm -f.\"  If \"rm.exe\" is found, comment out:\nRM=del\nLDLIBS=-L. -lzlib\nLD=$(CC) -s -o\nLDSHARED=$(CC)\n\nINCL=zlib.h zconf.h\nLIBS=zlib.a\n\nAR=ar rcs\n\nprefix=/usr/local\nexec_prefix = $(prefix)\n\nOBJS = adler32.o compress.o crc32.o deflate.o gzclose.o gzlib.o gzread.o \\\n       gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o\n\nTEST_OBJS = example.o minigzip.o\n\nall: example.exe minigzip.exe\n\ntest: all\n\t./example\n\techo hello world | .\\minigzip | .\\minigzip -d\n\n%.o : %.c\n\t$(CC) $(CFLAGS) -c $< -o $@\n\nzlib.a: $(OBJS)\n\t$(AR) $@ $(OBJS)\n\n%.exe : %.o $(LIBS)\n\t$(LD) $@ $< $(LDLIBS)\n\n\n.PHONY : clean\n\nclean:\n\t$(RM) *.d\n\t$(RM) *.o\n\t$(RM) *.exe\n\t$(RM) zlib.a\n\t$(RM) foo.gz\n\nDEPS := $(wildcard *.d)\nifneq ($(DEPS),)\ninclude $(DEPS)\nendif\n"
  },
  {
    "path": "external/zlib/win32/Makefile.gcc",
    "content": "# Makefile for zlib, derived from Makefile.dj2.\n# Modified for mingw32 by C. Spieler, 6/16/98.\n# Updated for zlib 1.2.x by Christian Spieler and Cosmin Truta, Mar-2003.\n# Last updated: 1-Aug-2003.\n# Tested under Cygwin and MinGW.\n\n# Copyright (C) 1995-2003 Jean-loup Gailly.\n# For conditions of distribution and use, see copyright notice in zlib.h\n\n# To compile, or to compile and test, type:\n#\n#   make -fmakefile.gcc;  make test testdll -fmakefile.gcc\n#\n# To use the asm code, type:\n#   cp contrib/asm?86/match.S ./match.S\n#   make LOC=-DASMV OBJA=match.o -fmakefile.gcc\n#\n# To install libz.a, zconf.h and zlib.h in the system directories, type:\n#\n#   make install -fmakefile.gcc\n\n# Note:\n# If the platform is *not* MinGW (e.g. it is Cygwin or UWIN),\n# the DLL name should be changed from \"zlib1.dll\".\n\nSTATICLIB = libz.a\nSHAREDLIB = zlib1.dll\nIMPLIB    = libzdll.a\n\n#\n# Set to 1 if shared object needs to be installed\n#\nSHARED_MODE=0\n\n#LOC = -DASMV\n#LOC = -DDEBUG -g\n\nPREFIX =\nCC = $(PREFIX)gcc\nCFLAGS = $(LOC) -O3 -Wall\nEXTRA_CFLAGS = -DNO_VIZ\n\nAS = $(CC)\nASFLAGS = $(LOC) -Wall\n\nLD = $(CC)\nLDFLAGS = $(LOC)\n\nAR = $(PREFIX)ar\nARFLAGS = rcs\n\nRC = $(PREFIX)windres\nRCFLAGS = --define GCC_WINDRES\n\nSTRIP = $(PREFIX)strip\n\nCP = cp -fp\n# If GNU install is available, replace $(CP) with install.\nINSTALL = $(CP)\nRM = rm -f\n\nprefix = /usr/local\nexec_prefix = $(prefix)\n\nOBJS = adler32.o compress.o crc32.o deflate.o gzclose.o gzlib.o gzread.o \\\n       gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o\nOBJA =\n\nall: $(STATICLIB) $(SHAREDLIB) $(IMPLIB) example.exe minigzip.exe example_d.exe minigzip_d.exe\n\ntest: example.exe minigzip.exe\n\t./example\n\techo hello world | ./minigzip | ./minigzip -d\n\ntestdll: example_d.exe minigzip_d.exe\n\t./example_d\n\techo hello world | ./minigzip_d | ./minigzip_d -d\n\n.c.o:\n\t$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c -o $@ $<\n\n.S.o:\n\t$(AS) $(ASFLAGS) -c -o $@ $<\n\n$(STATICLIB): $(OBJS) $(OBJA)\n\t$(AR) $(ARFLAGS) $@ $(OBJS) $(OBJA)\n\n$(IMPLIB): $(SHAREDLIB)\n\n$(SHAREDLIB): win32/zlib.def $(OBJS) $(OBJA) zlibrc.o\n\t$(CC) -shared -Wl,--out-implib,$(IMPLIB) $(LDFLAGS) \\\n\t-o $@ win32/zlib.def $(OBJS) $(OBJA) zlibrc.o\n\t$(STRIP) $@\n\nexample.exe: example.o $(STATICLIB)\n\t$(LD) $(LDFLAGS) -o $@ example.o $(STATICLIB)\n\t$(STRIP) $@\n\nminigzip.exe: minigzip.o $(STATICLIB)\n\t$(LD) $(LDFLAGS) -o $@ minigzip.o $(STATICLIB)\n\t$(STRIP) $@\n\nexample_d.exe: example.o $(IMPLIB)\n\t$(LD) $(LDFLAGS) -o $@ example.o $(IMPLIB)\n\t$(STRIP) $@\n\nminigzip_d.exe: minigzip.o $(IMPLIB)\n\t$(LD) $(LDFLAGS) -o $@ minigzip.o $(IMPLIB)\n\t$(STRIP) $@\n\nzlibrc.o: win32/zlib1.rc\n\t$(RC) $(RCFLAGS) -o $@ win32/zlib1.rc\n\n\n# BINARY_PATH, INCLUDE_PATH and LIBRARY_PATH must be set.\n\n.PHONY: install uninstall clean\n\ninstall: zlib.h zconf.h $(STATICLIB) $(IMPLIB)\n\t-@mkdir -p $(INCLUDE_PATH)\n\t-@mkdir -p $(LIBRARY_PATH)\n\t-if [ \"$(SHARED_MODE)\" = \"1\" ]; then \\\n\t\tmkdir -p $(BINARY_PATH); \\\n\t\t$(INSTALL) $(SHAREDLIB) $(BINARY_PATH); \\\n\t\t$(INSTALL) $(IMPLIB) $(LIBRARY_PATH); \\\n\tfi\n\t-$(INSTALL) zlib.h $(INCLUDE_PATH)\n\t-$(INSTALL) zconf.h $(INCLUDE_PATH)\n\t-$(INSTALL) $(STATICLIB) $(LIBRARY_PATH)\n\nuninstall:\n\t-if [ \"$(SHARED_MODE)\" = \"1\" ]; then \\\n\t\t$(RM) $(BINARY_PATH)/$(SHAREDLIB); \\\n\t\t$(RM) $(LIBRARY_PATH)/$(IMPLIB); \\\n\tfi\n\t-$(RM) $(INCLUDE_PATH)/zlib.h\n\t-$(RM) $(INCLUDE_PATH)/zconf.h\n\t-$(RM) $(LIBRARY_PATH)/$(STATICLIB)\n\nclean:\n\t-$(RM) $(STATICLIB)\n\t-$(RM) $(SHAREDLIB)\n\t-$(RM) $(IMPLIB)\n\t-$(RM) *.o\n\t-$(RM) *.exe\n\t-$(RM) foo.gz\n\nadler32.o: zlib.h zconf.h\ncompress.o: zlib.h zconf.h\ncrc32.o: crc32.h zlib.h zconf.h\ndeflate.o: deflate.h zutil.h zlib.h zconf.h\nexample.o: zlib.h zconf.h\ngzclose.o: zlib.h zconf.h gzguts.h\ngzlib.o: zlib.h zconf.h gzguts.h\ngzread.o: zlib.h zconf.h gzguts.h\ngzwrite.o: zlib.h zconf.h gzguts.h\ninffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h\ninflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h\ninfback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h\ninftrees.o: zutil.h zlib.h zconf.h inftrees.h\nminigzip.o: zlib.h zconf.h\ntrees.o: deflate.h zutil.h zlib.h zconf.h trees.h\nuncompr.o: zlib.h zconf.h\nzutil.o: zutil.h zlib.h zconf.h\n"
  },
  {
    "path": "external/zlib/win32/Makefile.msc",
    "content": "# Makefile for zlib using Microsoft (Visual) C\n# zlib is copyright (C) 1995-2006 Jean-loup Gailly and Mark Adler\n#\n# Usage:\n#   nmake -f win32/Makefile.msc                          (standard build)\n#   nmake -f win32/Makefile.msc LOC=-DFOO                (nonstandard build)\n#   nmake -f win32/Makefile.msc LOC=\"-DASMV -DASMINF\" \\\n#         OBJA=\"inffas32.obj match686.obj\"               (use ASM code, x86)\n#   nmake -f win32/Makefile.msc AS=ml64 LOC=\"-DASMV -DASMINF\" \\\n#         OBJA=\"inffasx64.obj gvmat64.obj inffas8664.c\"  (use ASM code, x64)\n\n# optional build flags\nLOC =\n\n# variables\nSTATICLIB = zlib.lib\nSHAREDLIB = zlib1.dll\nIMPLIB    = zdll.lib\n\nCC = cl\nAS = ml\nLD = link\nAR = lib\nRC = rc\nCFLAGS  = -nologo -MD -W3 -O2 -Oy- -Zi -Fd\"zlib\" $(LOC)\nWFLAGS  = -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE\nASFLAGS = -coff -Zi $(LOC)\nLDFLAGS = -nologo -debug -incremental:no -opt:ref\nARFLAGS = -nologo\nRCFLAGS = /dWIN32 /r\n\nOBJS = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj \\\n       gzwrite.obj infback.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj \\\n       inffast.obj\nOBJA =\n\n\n# targets\nall: $(STATICLIB) $(SHAREDLIB) $(IMPLIB) \\\n     example.exe minigzip.exe example_d.exe minigzip_d.exe\n\n$(STATICLIB): $(OBJS) $(OBJA)\n\t$(AR) $(ARFLAGS) -out:$@ $(OBJS) $(OBJA)\n\n$(IMPLIB): $(SHAREDLIB)\n\n$(SHAREDLIB): win32/zlib.def $(OBJS) $(OBJA) zlib1.res\n\t$(LD) $(LDFLAGS) -def:win32/zlib.def -dll -implib:$(IMPLIB) \\\n\t  -out:$@ -base:0x5A4C0000 $(OBJS) $(OBJA) zlib1.res\n\tif exist $@.manifest \\\n\t  mt -nologo -manifest $@.manifest -outputresource:$@;2\n\nexample.exe: example.obj $(STATICLIB)\n\t$(LD) $(LDFLAGS) example.obj $(STATICLIB)\n\tif exist $@.manifest \\\n\t  mt -nologo -manifest $@.manifest -outputresource:$@;1\n\nminigzip.exe: minigzip.obj $(STATICLIB)\n\t$(LD) $(LDFLAGS) minigzip.obj $(STATICLIB)\n\tif exist $@.manifest \\\n\t  mt -nologo -manifest $@.manifest -outputresource:$@;1\n\nexample_d.exe: example.obj $(IMPLIB)\n\t$(LD) $(LDFLAGS) -out:$@ example.obj $(IMPLIB)\n\tif exist $@.manifest \\\n\t  mt -nologo -manifest $@.manifest -outputresource:$@;1\n\nminigzip_d.exe: minigzip.obj $(IMPLIB)\n\t$(LD) $(LDFLAGS) -out:$@ minigzip.obj $(IMPLIB)\n\tif exist $@.manifest \\\n\t  mt -nologo -manifest $@.manifest -outputresource:$@;1\n\n.c.obj:\n\t$(CC) -c $(WFLAGS) $(CFLAGS) $<\n\n{contrib/masmx64}.c.obj:\n\t$(CC) -c $(WFLAGS) $(CFLAGS) $<\n\n{contrib/masmx64}.asm.obj:\n\t$(AS) -c $(ASFLAGS) $<\n\n{contrib/masmx86}.asm.obj:\n\t$(AS) -c $(ASFLAGS) $<\n\nadler32.obj: adler32.c zlib.h zconf.h\n\ncompress.obj: compress.c zlib.h zconf.h\n\ncrc32.obj: crc32.c zlib.h zconf.h crc32.h\n\ndeflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h\n\ngzclose.obj: gzclose.c zlib.h zconf.h gzguts.h\n\ngzlib.obj: gzlib.c zlib.h zconf.h gzguts.h\n\ngzread.obj: gzread.c zlib.h zconf.h gzguts.h\n\ngzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h\n\ninfback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \\\n             inffast.h inffixed.h\n\ninffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \\\n             inffast.h\n\ninflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \\\n             inffast.h inffixed.h\n\ninftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h\n\ntrees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h\n\nuncompr.obj: uncompr.c zlib.h zconf.h\n\nzutil.obj: zutil.c zutil.h zlib.h zconf.h\n\ngvmat64.obj: contrib\\masmx64\\gvmat64.asm\n\ninffasx64.obj: contrib\\masmx64\\inffasx64.asm\n\ninffas8664.obj: contrib\\masmx64\\inffas8664.c zutil.h zlib.h zconf.h \\\n\t\tinftrees.h inflate.h inffast.h\n\ninffas32.obj: contrib\\masmx86\\inffas32.asm\n\nmatch686.obj: contrib\\masmx86\\match686.asm\n\nexample.obj: example.c zlib.h zconf.h\n\nminigzip.obj: minigzip.c zlib.h zconf.h\n\nzlib1.res: win32/zlib1.rc\n\t$(RC) $(RCFLAGS) /fo$@ win32/zlib1.rc\n\n\n# testing\ntest: example.exe minigzip.exe\n\texample\n\techo hello world | minigzip | minigzip -d\n\ntestdll: example_d.exe minigzip_d.exe\n\texample_d\n\techo hello world | minigzip_d | minigzip_d -d\n\n\n# cleanup\nclean:\n\t-del $(STATICLIB)\n\t-del $(SHAREDLIB)\n\t-del $(IMPLIB)\n\t-del *.obj\n\t-del *.res\n\t-del *.exp\n\t-del *.exe\n\t-del *.pdb\n\t-del *.manifest\n\t-del foo.gz\n"
  },
  {
    "path": "external/zlib/win32/README-WIN32.txt",
    "content": "ZLIB DATA COMPRESSION LIBRARY\n\nzlib 1.2.4 is a general purpose data compression library.  All the code is\nthread safe.  The data format used by the zlib library is described by RFCs\n(Request for Comments) 1950 to 1952 in the files\nhttp://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format)\nand rfc1952.txt (gzip format).\n\nAll functions of the compression library are documented in the file zlib.h\n(volunteer to write man pages welcome, contact zlib@gzip.org).  Two compiled\nexamples are distributed in this package, example and minigzip.  The example_d\nand minigzip_d flavors validate that the zlib1.dll file is working correctly.\n\nQuestions about zlib should be sent to <zlib@gzip.org>.  The zlib home page\nis http://zlib.net/ .  Before reporting a problem, please check this site to\nverify that you have the latest version of zlib; otherwise get the latest\nversion and check whether the problem still exists or not.\n\nPLEASE read DLL_FAQ.txt, and the the zlib FAQ http://zlib.net/zlib_faq.html\nbefore asking for help.\n\n\nManifest:\n\nThe package zlib-1.2.4-win32-x86.zip contains the following files:\n\n  README-WIN32.txt This document\n  ChangeLog        Changes since previous zlib packages\n  DLL_FAQ.txt      Frequently asked questions about zlib1.dll\n  zlib.3.pdf       Documentation of this library in Adobe Acrobat format\n\n  example.exe      A statically-bound example (using zlib.lib, not the dll)\n  example.pdb      Symbolic information for debugging example.exe\n\n  example_d.exe    A zlib1.dll bound example (using zdll.lib)\n  example_d.pdb    Symbolic information for debugging example_d.exe\n\n  minigzip.exe     A statically-bound test program (using zlib.lib, not the dll)\n  minigzip.pdb     Symbolic information for debugging minigzip.exe\n\n  minigzip_d.exe   A zlib1.dll bound test program (using zdll.lib)\n  minigzip_d.pdb   Symbolic information for debugging minigzip_d.exe\n\n  zlib.h           Install these files into the compilers' INCLUDE path to\n  zconf.h          compile programs which use zlib.lib or zdll.lib\n\n  zdll.lib         Install these files into the compilers' LIB path if linking\n  zdll.exp         a compiled program to the zlib1.dll binary\n\n  zlib.lib         Install these files into the compilers' LIB path to link zlib\n  zlib.pdb         into compiled programs, without zlib1.dll runtime dependency\n                   (zlib.pdb provides debugging info to the compile time linker)\n\n  zlib1.dll        Install this binary shared library into the system PATH, or\n                   the program's runtime directory (where the .exe resides)\n  zlib1.pdb        Install in the same directory as zlib1.dll, in order to debug\n                   an application crash using WinDbg or similar tools.\n\nAll .pdb files above are entirely optional, but are very useful to a developer\nattempting to diagnose program misbehavior or a crash.  Many additional\nimportant files for developers can be found in the zlib124.zip source package\navailable from http://zlib.net/ - review that package's README file for details.\n\n\nAcknowledgments:\n\nThe deflate format used by zlib was defined by Phil Katz.  The deflate and\nzlib specifications were written by L.  Peter Deutsch.  Thanks to all the\npeople who reported problems and suggested various improvements in zlib; they\nare too numerous to cite here.\n\n\nCopyright notice:\n\n  (C) 1995-2010 Jean-loup Gailly and Mark Adler\n\n  This software is provided 'as-is', without any express or implied\n  warranty.  In no event will the authors be held liable for any damages\n  arising from the use of this software.\n\n  Permission is granted to anyone to use this software for any purpose,\n  including commercial applications, and to alter it and redistribute it\n  freely, subject to the following restrictions:\n\n  1. The origin of this software must not be misrepresented; you must not\n     claim that you wrote the original software. If you use this software\n     in a product, an acknowledgment in the product documentation would be\n     appreciated but is not required.\n  2. Altered source versions must be plainly marked as such, and must not be\n     misrepresented as being the original software.\n  3. This notice may not be removed or altered from any source distribution.\n\n  Jean-loup Gailly        Mark Adler\n  jloup@gzip.org          madler@alumni.caltech.edu\n\nIf you use the zlib library in a product, we would appreciate *not* receiving\nlengthy legal documents to sign.  The sources are provided for free but without\nwarranty of any kind.  The library has been entirely written by Jean-loup\nGailly and Mark Adler; it does not include third-party code.\n\nIf you redistribute modified sources, we would appreciate that you include in\nthe file ChangeLog history information documenting your changes.  Please read\nthe FAQ for more information on the distribution of modified source versions.\n"
  },
  {
    "path": "external/zlib/win32/VisualC.txt",
    "content": "\nTo build zlib using the Microsoft Visual C++ environment,\nuse the appropriate project from the projects/ directory.\n"
  },
  {
    "path": "external/zlib/win32/zlib.def",
    "content": "LIBRARY\n; zlib data compression library\n\nEXPORTS\n; basic functions\n    zlibVersion\n    deflate\n    deflateEnd\n    inflate\n    inflateEnd\n; advanced functions\n    deflateSetDictionary\n    deflateCopy\n    deflateReset\n    deflateParams\n    deflateTune\n    deflateBound\n    deflatePrime\n    deflateSetHeader\n    inflateSetDictionary\n    inflateSync\n    inflateCopy\n    inflateReset\n    inflateReset2\n    inflatePrime\n    inflateMark\n    inflateGetHeader\n    inflateBack\n    inflateBackEnd\n    zlibCompileFlags\n; utility functions\n    compress\n    compress2\n    compressBound\n    uncompress\n    gzopen\n    gzdopen\n    gzbuffer\n    gzsetparams\n    gzread\n    gzwrite\n    gzprintf\n    gzputs\n    gzgets\n    gzputc\n    gzgetc\n    gzungetc\n    gzflush\n    gzseek\n    gzrewind\n    gztell\n    gzoffset\n    gzeof\n    gzdirect\n    gzclose\n    gzclose_r\n    gzclose_w\n    gzerror\n    gzclearerr\n; checksum functions\n    adler32\n    crc32\n    adler32_combine\n    crc32_combine\n; various hacks, don't look :)\n    deflateInit_\n    deflateInit2_\n    inflateInit_\n    inflateInit2_\n    inflateBackInit_\n    zError\n    inflateSyncPoint\n    get_crc_table\n    inflateUndermine\n"
  },
  {
    "path": "external/zlib/win32/zlib1.rc",
    "content": "#include <winver.h>\n#include \"../zlib.h\"\n\n#ifdef GCC_WINDRES\nVS_VERSION_INFO\t\tVERSIONINFO\n#else\nVS_VERSION_INFO\t\tVERSIONINFO\tMOVEABLE IMPURE LOADONCALL DISCARDABLE\n#endif\n  FILEVERSION\t\tZLIB_VER_MAJOR,ZLIB_VER_MINOR,ZLIB_VER_REVISION,0\n  PRODUCTVERSION\tZLIB_VER_MAJOR,ZLIB_VER_MINOR,ZLIB_VER_REVISION,0\n  FILEFLAGSMASK\t\tVS_FFI_FILEFLAGSMASK\n#ifdef _DEBUG\n  FILEFLAGS\t\t1\n#else\n  FILEFLAGS\t\t0\n#endif\n  FILEOS\t\tVOS__WINDOWS32\n  FILETYPE\t\tVFT_DLL\n  FILESUBTYPE\t\t0\t// not used\nBEGIN\n  BLOCK \"StringFileInfo\"\n  BEGIN\n    BLOCK \"040904E4\"\n    //language ID = U.S. English, char set = Windows, Multilingual\n    BEGIN\n      VALUE \"FileDescription\",\t\"zlib data compression library\\0\"\n      VALUE \"FileVersion\",\tZLIB_VERSION \"\\0\"\n      VALUE \"InternalName\",\t\"zlib1.dll\\0\"\n      VALUE \"LegalCopyright\",\t\"(C) 1995-2006 Jean-loup Gailly & Mark Adler\\0\"\n      VALUE \"OriginalFilename\",\t\"zlib1.dll\\0\"\n      VALUE \"ProductName\",\t\"zlib\\0\"\n      VALUE \"ProductVersion\",\tZLIB_VERSION \"\\0\"\n      VALUE \"Comments\",\t\t\"For more information visit http://www.zlib.net/\\0\"\n    END\n  END\n  BLOCK \"VarFileInfo\"\n  BEGIN\n    VALUE \"Translation\", 0x0409, 1252\n  END\nEND\n"
  },
  {
    "path": "external/zlib/zconf.h",
    "content": "/* zconf.h -- configuration of the zlib compression library\n * Copyright (C) 1995-2010 Jean-loup Gailly.\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n/* @(#) $Id$ */\n\n#ifndef ZCONF_H\n#define ZCONF_H\n\n/*\n * If you *really* need a unique prefix for all types and library functions,\n * compile with -DZ_PREFIX. The \"standard\" zlib should be compiled without it.\n * Even better than compiling with -DZ_PREFIX would be to use configure to set\n * this permanently in zconf.h using \"./configure --zprefix\".\n */\n#ifdef Z_PREFIX     /* may be set to #if 1 by ./configure */\n\n/* all linked symbols */\n#  define _dist_code            z__dist_code\n#  define _length_code          z__length_code\n#  define _tr_align             z__tr_align\n#  define _tr_flush_block       z__tr_flush_block\n#  define _tr_init              z__tr_init\n#  define _tr_stored_block      z__tr_stored_block\n#  define _tr_tally             z__tr_tally\n#  define adler32               z_adler32\n#  define adler32_combine       z_adler32_combine\n#  define adler32_combine64     z_adler32_combine64\n#  define compress              z_compress\n#  define compress2             z_compress2\n#  define compressBound         z_compressBound\n#  define crc32                 z_crc32\n#  define crc32_combine         z_crc32_combine\n#  define crc32_combine64       z_crc32_combine64\n#  define deflate               z_deflate\n#  define deflateBound          z_deflateBound\n#  define deflateCopy           z_deflateCopy\n#  define deflateEnd            z_deflateEnd\n#  define deflateInit2_         z_deflateInit2_\n#  define deflateInit_          z_deflateInit_\n#  define deflateParams         z_deflateParams\n#  define deflatePrime          z_deflatePrime\n#  define deflateReset          z_deflateReset\n#  define deflateSetDictionary  z_deflateSetDictionary\n#  define deflateSetHeader      z_deflateSetHeader\n#  define deflateTune           z_deflateTune\n#  define deflate_copyright     z_deflate_copyright\n#  define get_crc_table         z_get_crc_table\n#  define gz_error              z_gz_error\n#  define gz_intmax             z_gz_intmax\n#  define gz_strwinerror        z_gz_strwinerror\n#  define gzbuffer              z_gzbuffer\n#  define gzclearerr            z_gzclearerr\n#  define gzclose               z_gzclose\n#  define gzclose_r             z_gzclose_r\n#  define gzclose_w             z_gzclose_w\n#  define gzdirect              z_gzdirect\n#  define gzdopen               z_gzdopen\n#  define gzeof                 z_gzeof\n#  define gzerror               z_gzerror\n#  define gzflush               z_gzflush\n#  define gzgetc                z_gzgetc\n#  define gzgets                z_gzgets\n#  define gzoffset              z_gzoffset\n#  define gzoffset64            z_gzoffset64\n#  define gzopen                z_gzopen\n#  define gzopen64              z_gzopen64\n#  define gzprintf              z_gzprintf\n#  define gzputc                z_gzputc\n#  define gzputs                z_gzputs\n#  define gzread                z_gzread\n#  define gzrewind              z_gzrewind\n#  define gzseek                z_gzseek\n#  define gzseek64              z_gzseek64\n#  define gzsetparams           z_gzsetparams\n#  define gztell                z_gztell\n#  define gztell64              z_gztell64\n#  define gzungetc              z_gzungetc\n#  define gzwrite               z_gzwrite\n#  define inflate               z_inflate\n#  define inflateBack           z_inflateBack\n#  define inflateBackEnd        z_inflateBackEnd\n#  define inflateBackInit_      z_inflateBackInit_\n#  define inflateCopy           z_inflateCopy\n#  define inflateEnd            z_inflateEnd\n#  define inflateGetHeader      z_inflateGetHeader\n#  define inflateInit2_         z_inflateInit2_\n#  define inflateInit_          z_inflateInit_\n#  define inflateMark           z_inflateMark\n#  define inflatePrime          z_inflatePrime\n#  define inflateReset          z_inflateReset\n#  define inflateReset2         z_inflateReset2\n#  define inflateSetDictionary  z_inflateSetDictionary\n#  define inflateSync           z_inflateSync\n#  define inflateSyncPoint      z_inflateSyncPoint\n#  define inflateUndermine      z_inflateUndermine\n#  define inflate_copyright     z_inflate_copyright\n#  define inflate_fast          z_inflate_fast\n#  define inflate_table         z_inflate_table\n#  define uncompress            z_uncompress\n#  define zError                z_zError\n#  define zcalloc               z_zcalloc\n#  define zcfree                z_zcfree\n#  define zlibCompileFlags      z_zlibCompileFlags\n#  define zlibVersion           z_zlibVersion\n\n/* all zlib typedefs in zlib.h and zconf.h */\n#  define Byte                  z_Byte\n#  define Bytef                 z_Bytef\n#  define alloc_func            z_alloc_func\n#  define charf                 z_charf\n#  define free_func             z_free_func\n#  define gzFile                z_gzFile\n#  define gz_header             z_gz_header\n#  define gz_headerp            z_gz_headerp\n#  define in_func               z_in_func\n#  define intf                  z_intf\n#  define out_func              z_out_func\n#  define uInt                  z_uInt\n#  define uIntf                 z_uIntf\n#  define uLong                 z_uLong\n#  define uLongf                z_uLongf\n#  define voidp                 z_voidp\n#  define voidpc                z_voidpc\n#  define voidpf                z_voidpf\n\n/* all zlib structs in zlib.h and zconf.h */\n#  define gz_header_s           z_gz_header_s\n#  define internal_state        z_internal_state\n\n#endif\n\n#if defined(__MSDOS__) && !defined(MSDOS)\n#  define MSDOS\n#endif\n#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)\n#  define OS2\n#endif\n#if defined(_WINDOWS) && !defined(WINDOWS)\n#  define WINDOWS\n#endif\n#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)\n#  ifndef WIN32\n#    define WIN32\n#  endif\n#endif\n#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)\n#  if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)\n#    ifndef SYS16BIT\n#      define SYS16BIT\n#    endif\n#  endif\n#endif\n\n/*\n * Compile with -DMAXSEG_64K if the alloc function cannot allocate more\n * than 64k bytes at a time (needed on systems with 16-bit int).\n */\n#ifdef SYS16BIT\n#  define MAXSEG_64K\n#endif\n#ifdef MSDOS\n#  define UNALIGNED_OK\n#endif\n\n#ifdef __STDC_VERSION__\n#  ifndef STDC\n#    define STDC\n#  endif\n#  if __STDC_VERSION__ >= 199901L\n#    ifndef STDC99\n#      define STDC99\n#    endif\n#  endif\n#endif\n#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))\n#  define STDC\n#endif\n#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))\n#  define STDC\n#endif\n#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))\n#  define STDC\n#endif\n#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))\n#  define STDC\n#endif\n\n#if defined(__OS400__) && !defined(STDC)    /* iSeries (formerly AS/400). */\n#  define STDC\n#endif\n\n#ifndef STDC\n#  ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */\n#    define const       /* note: need a more gentle solution here */\n#  endif\n#endif\n\n/* Some Mac compilers merge all .h files incorrectly: */\n#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)\n#  define NO_DUMMY_DECL\n#endif\n\n/* Maximum value for memLevel in deflateInit2 */\n#ifndef MAX_MEM_LEVEL\n#  ifdef MAXSEG_64K\n#    define MAX_MEM_LEVEL 8\n#  else\n#    define MAX_MEM_LEVEL 9\n#  endif\n#endif\n\n/* Maximum value for windowBits in deflateInit2 and inflateInit2.\n * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files\n * created by gzip. (Files created by minigzip can still be extracted by\n * gzip.)\n */\n#ifndef MAX_WBITS\n#  define MAX_WBITS   15 /* 32K LZ77 window */\n#endif\n\n/* The memory requirements for deflate are (in bytes):\n            (1 << (windowBits+2)) +  (1 << (memLevel+9))\n that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)\n plus a few kilobytes for small objects. For example, if you want to reduce\n the default memory requirements from 256K to 128K, compile with\n     make CFLAGS=\"-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7\"\n Of course this will generally degrade compression (there's no free lunch).\n\n   The memory requirements for inflate are (in bytes) 1 << windowBits\n that is, 32K for windowBits=15 (default value) plus a few kilobytes\n for small objects.\n*/\n\n                        /* Type declarations */\n\n#ifndef OF /* function prototypes */\n#  ifdef STDC\n#    define OF(args)  args\n#  else\n#    define OF(args)  ()\n#  endif\n#endif\n\n/* The following definitions for FAR are needed only for MSDOS mixed\n * model programming (small or medium model with some far allocations).\n * This was tested only with MSC; for other MSDOS compilers you may have\n * to define NO_MEMCPY in zutil.h.  If you don't need the mixed model,\n * just define FAR to be empty.\n */\n#ifdef SYS16BIT\n#  if defined(M_I86SM) || defined(M_I86MM)\n     /* MSC small or medium model */\n#    define SMALL_MEDIUM\n#    ifdef _MSC_VER\n#      define FAR _far\n#    else\n#      define FAR far\n#    endif\n#  endif\n#  if (defined(__SMALL__) || defined(__MEDIUM__))\n     /* Turbo C small or medium model */\n#    define SMALL_MEDIUM\n#    ifdef __BORLANDC__\n#      define FAR _far\n#    else\n#      define FAR far\n#    endif\n#  endif\n#endif\n\n#if defined(WINDOWS) || defined(WIN32)\n   /* If building or using zlib as a DLL, define ZLIB_DLL.\n    * This is not mandatory, but it offers a little performance increase.\n    */\n#  ifdef ZLIB_DLL\n#    if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))\n#      ifdef ZLIB_INTERNAL\n#        define ZEXTERN extern __declspec(dllexport)\n#      else\n#        define ZEXTERN extern __declspec(dllimport)\n#      endif\n#    endif\n#  endif  /* ZLIB_DLL */\n   /* If building or using zlib with the WINAPI/WINAPIV calling convention,\n    * define ZLIB_WINAPI.\n    * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.\n    */\n#  ifdef ZLIB_WINAPI\n#    ifdef FAR\n#      undef FAR\n#    endif\n#    include <windows.h>\n     /* No need for _export, use ZLIB.DEF instead. */\n     /* For complete Windows compatibility, use WINAPI, not __stdcall. */\n#    define ZEXPORT WINAPI\n#    ifdef WIN32\n#      define ZEXPORTVA WINAPIV\n#    else\n#      define ZEXPORTVA FAR CDECL\n#    endif\n#  endif\n#endif\n\n#if defined (__BEOS__)\n#  ifdef ZLIB_DLL\n#    ifdef ZLIB_INTERNAL\n#      define ZEXPORT   __declspec(dllexport)\n#      define ZEXPORTVA __declspec(dllexport)\n#    else\n#      define ZEXPORT   __declspec(dllimport)\n#      define ZEXPORTVA __declspec(dllimport)\n#    endif\n#  endif\n#endif\n\n#ifndef ZEXTERN\n#  define ZEXTERN extern\n#endif\n#ifndef ZEXPORT\n#  define ZEXPORT\n#endif\n#ifndef ZEXPORTVA\n#  define ZEXPORTVA\n#endif\n\n#ifndef FAR\n#  define FAR\n#endif\n\n#if !defined(__MACTYPES__)\ntypedef unsigned char  Byte;  /* 8 bits */\n#endif\ntypedef unsigned int   uInt;  /* 16 bits or more */\ntypedef unsigned long  uLong; /* 32 bits or more */\n\n#ifdef SMALL_MEDIUM\n   /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */\n#  define Bytef Byte FAR\n#else\n   typedef Byte  FAR Bytef;\n#endif\ntypedef char  FAR charf;\ntypedef int   FAR intf;\ntypedef uInt  FAR uIntf;\ntypedef uLong FAR uLongf;\n\n#ifdef STDC\n   typedef void const *voidpc;\n   typedef void FAR   *voidpf;\n   typedef void       *voidp;\n#else\n   typedef Byte const *voidpc;\n   typedef Byte FAR   *voidpf;\n   typedef Byte       *voidp;\n#endif\n\n#ifdef HAVE_UNISTD_H    /* may be set to #if 1 by ./configure */\n#  define Z_HAVE_UNISTD_H\n#endif\n\n#ifdef STDC\n#  include <sys/types.h>    /* for off_t */\n#endif\n\n/* a little trick to accommodate both \"#define _LARGEFILE64_SOURCE\" and\n * \"#define _LARGEFILE64_SOURCE 1\" as requesting 64-bit operations, (even\n * though the former does not conform to the LFS document), but considering\n * both \"#undef _LARGEFILE64_SOURCE\" and \"#define _LARGEFILE64_SOURCE 0\" as\n * equivalently requesting no 64-bit operations\n */\n#if -_LARGEFILE64_SOURCE - -1 == 1\n#  undef _LARGEFILE64_SOURCE\n#endif\n\n#if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)\n#  include <unistd.h>       /* for SEEK_* and off_t */\n#  ifdef VMS\n#    include <unixio.h>     /* for off_t */\n#  endif\n#  ifndef z_off_t\n#    define z_off_t off_t\n#  endif\n#endif\n\n#ifndef SEEK_SET\n#  define SEEK_SET        0       /* Seek from beginning of file.  */\n#  define SEEK_CUR        1       /* Seek from current position.  */\n#  define SEEK_END        2       /* Set file pointer to EOF plus \"offset\" */\n#endif\n\n#ifndef z_off_t\n#  define z_off_t long\n#endif\n\n#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0\n#  define z_off64_t off64_t\n#else\n#  define z_off64_t z_off_t\n#endif\n\n#if defined(__OS400__)\n#  define NO_vsnprintf\n#endif\n\n#if defined(__MVS__)\n#  define NO_vsnprintf\n#endif\n\n/* MVS linker does not support external names larger than 8 bytes */\n#if defined(__MVS__)\n  #pragma map(deflateInit_,\"DEIN\")\n  #pragma map(deflateInit2_,\"DEIN2\")\n  #pragma map(deflateEnd,\"DEEND\")\n  #pragma map(deflateBound,\"DEBND\")\n  #pragma map(inflateInit_,\"ININ\")\n  #pragma map(inflateInit2_,\"ININ2\")\n  #pragma map(inflateEnd,\"INEND\")\n  #pragma map(inflateSync,\"INSY\")\n  #pragma map(inflateSetDictionary,\"INSEDI\")\n  #pragma map(compressBound,\"CMBND\")\n  #pragma map(inflate_table,\"INTABL\")\n  #pragma map(inflate_fast,\"INFA\")\n  #pragma map(inflate_copyright,\"INCOPY\")\n#endif\n\n#endif /* ZCONF_H */\n"
  },
  {
    "path": "external/zlib/zconf.h.cmakein",
    "content": "/* zconf.h -- configuration of the zlib compression library\n * Copyright (C) 1995-2010 Jean-loup Gailly.\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n/* @(#) $Id$ */\n\n#ifndef ZCONF_H\n#define ZCONF_H\n#cmakedefine Z_PREFIX\n#cmakedefine Z_HAVE_UNISTD_H\n\n/*\n * If you *really* need a unique prefix for all types and library functions,\n * compile with -DZ_PREFIX. The \"standard\" zlib should be compiled without it.\n * Even better than compiling with -DZ_PREFIX would be to use configure to set\n * this permanently in zconf.h using \"./configure --zprefix\".\n */\n#ifdef Z_PREFIX     /* may be set to #if 1 by ./configure */\n\n/* all linked symbols */\n#  define _dist_code            z__dist_code\n#  define _length_code          z__length_code\n#  define _tr_align             z__tr_align\n#  define _tr_flush_block       z__tr_flush_block\n#  define _tr_init              z__tr_init\n#  define _tr_stored_block      z__tr_stored_block\n#  define _tr_tally             z__tr_tally\n#  define adler32               z_adler32\n#  define adler32_combine       z_adler32_combine\n#  define adler32_combine64     z_adler32_combine64\n#  define compress              z_compress\n#  define compress2             z_compress2\n#  define compressBound         z_compressBound\n#  define crc32                 z_crc32\n#  define crc32_combine         z_crc32_combine\n#  define crc32_combine64       z_crc32_combine64\n#  define deflate               z_deflate\n#  define deflateBound          z_deflateBound\n#  define deflateCopy           z_deflateCopy\n#  define deflateEnd            z_deflateEnd\n#  define deflateInit2_         z_deflateInit2_\n#  define deflateInit_          z_deflateInit_\n#  define deflateParams         z_deflateParams\n#  define deflatePrime          z_deflatePrime\n#  define deflateReset          z_deflateReset\n#  define deflateSetDictionary  z_deflateSetDictionary\n#  define deflateSetHeader      z_deflateSetHeader\n#  define deflateTune           z_deflateTune\n#  define deflate_copyright     z_deflate_copyright\n#  define get_crc_table         z_get_crc_table\n#  define gz_error              z_gz_error\n#  define gz_intmax             z_gz_intmax\n#  define gz_strwinerror        z_gz_strwinerror\n#  define gzbuffer              z_gzbuffer\n#  define gzclearerr            z_gzclearerr\n#  define gzclose               z_gzclose\n#  define gzclose_r             z_gzclose_r\n#  define gzclose_w             z_gzclose_w\n#  define gzdirect              z_gzdirect\n#  define gzdopen               z_gzdopen\n#  define gzeof                 z_gzeof\n#  define gzerror               z_gzerror\n#  define gzflush               z_gzflush\n#  define gzgetc                z_gzgetc\n#  define gzgets                z_gzgets\n#  define gzoffset              z_gzoffset\n#  define gzoffset64            z_gzoffset64\n#  define gzopen                z_gzopen\n#  define gzopen64              z_gzopen64\n#  define gzprintf              z_gzprintf\n#  define gzputc                z_gzputc\n#  define gzputs                z_gzputs\n#  define gzread                z_gzread\n#  define gzrewind              z_gzrewind\n#  define gzseek                z_gzseek\n#  define gzseek64              z_gzseek64\n#  define gzsetparams           z_gzsetparams\n#  define gztell                z_gztell\n#  define gztell64              z_gztell64\n#  define gzungetc              z_gzungetc\n#  define gzwrite               z_gzwrite\n#  define inflate               z_inflate\n#  define inflateBack           z_inflateBack\n#  define inflateBackEnd        z_inflateBackEnd\n#  define inflateBackInit_      z_inflateBackInit_\n#  define inflateCopy           z_inflateCopy\n#  define inflateEnd            z_inflateEnd\n#  define inflateGetHeader      z_inflateGetHeader\n#  define inflateInit2_         z_inflateInit2_\n#  define inflateInit_          z_inflateInit_\n#  define inflateMark           z_inflateMark\n#  define inflatePrime          z_inflatePrime\n#  define inflateReset          z_inflateReset\n#  define inflateReset2         z_inflateReset2\n#  define inflateSetDictionary  z_inflateSetDictionary\n#  define inflateSync           z_inflateSync\n#  define inflateSyncPoint      z_inflateSyncPoint\n#  define inflateUndermine      z_inflateUndermine\n#  define inflate_copyright     z_inflate_copyright\n#  define inflate_fast          z_inflate_fast\n#  define inflate_table         z_inflate_table\n#  define uncompress            z_uncompress\n#  define zError                z_zError\n#  define zcalloc               z_zcalloc\n#  define zcfree                z_zcfree\n#  define zlibCompileFlags      z_zlibCompileFlags\n#  define zlibVersion           z_zlibVersion\n\n/* all zlib typedefs in zlib.h and zconf.h */\n#  define Byte                  z_Byte\n#  define Bytef                 z_Bytef\n#  define alloc_func            z_alloc_func\n#  define charf                 z_charf\n#  define free_func             z_free_func\n#  define gzFile                z_gzFile\n#  define gz_header             z_gz_header\n#  define gz_headerp            z_gz_headerp\n#  define in_func               z_in_func\n#  define intf                  z_intf\n#  define out_func              z_out_func\n#  define uInt                  z_uInt\n#  define uIntf                 z_uIntf\n#  define uLong                 z_uLong\n#  define uLongf                z_uLongf\n#  define voidp                 z_voidp\n#  define voidpc                z_voidpc\n#  define voidpf                z_voidpf\n\n/* all zlib structs in zlib.h and zconf.h */\n#  define gz_header_s           z_gz_header_s\n#  define internal_state        z_internal_state\n\n#endif\n\n#if defined(__MSDOS__) && !defined(MSDOS)\n#  define MSDOS\n#endif\n#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)\n#  define OS2\n#endif\n#if defined(_WINDOWS) && !defined(WINDOWS)\n#  define WINDOWS\n#endif\n#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)\n#  ifndef WIN32\n#    define WIN32\n#  endif\n#endif\n#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)\n#  if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)\n#    ifndef SYS16BIT\n#      define SYS16BIT\n#    endif\n#  endif\n#endif\n\n/*\n * Compile with -DMAXSEG_64K if the alloc function cannot allocate more\n * than 64k bytes at a time (needed on systems with 16-bit int).\n */\n#ifdef SYS16BIT\n#  define MAXSEG_64K\n#endif\n#ifdef MSDOS\n#  define UNALIGNED_OK\n#endif\n\n#ifdef __STDC_VERSION__\n#  ifndef STDC\n#    define STDC\n#  endif\n#  if __STDC_VERSION__ >= 199901L\n#    ifndef STDC99\n#      define STDC99\n#    endif\n#  endif\n#endif\n#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))\n#  define STDC\n#endif\n#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))\n#  define STDC\n#endif\n#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))\n#  define STDC\n#endif\n#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))\n#  define STDC\n#endif\n\n#if defined(__OS400__) && !defined(STDC)    /* iSeries (formerly AS/400). */\n#  define STDC\n#endif\n\n#ifndef STDC\n#  ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */\n#    define const       /* note: need a more gentle solution here */\n#  endif\n#endif\n\n/* Some Mac compilers merge all .h files incorrectly: */\n#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)\n#  define NO_DUMMY_DECL\n#endif\n\n/* Maximum value for memLevel in deflateInit2 */\n#ifndef MAX_MEM_LEVEL\n#  ifdef MAXSEG_64K\n#    define MAX_MEM_LEVEL 8\n#  else\n#    define MAX_MEM_LEVEL 9\n#  endif\n#endif\n\n/* Maximum value for windowBits in deflateInit2 and inflateInit2.\n * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files\n * created by gzip. (Files created by minigzip can still be extracted by\n * gzip.)\n */\n#ifndef MAX_WBITS\n#  define MAX_WBITS   15 /* 32K LZ77 window */\n#endif\n\n/* The memory requirements for deflate are (in bytes):\n            (1 << (windowBits+2)) +  (1 << (memLevel+9))\n that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)\n plus a few kilobytes for small objects. For example, if you want to reduce\n the default memory requirements from 256K to 128K, compile with\n     make CFLAGS=\"-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7\"\n Of course this will generally degrade compression (there's no free lunch).\n\n   The memory requirements for inflate are (in bytes) 1 << windowBits\n that is, 32K for windowBits=15 (default value) plus a few kilobytes\n for small objects.\n*/\n\n                        /* Type declarations */\n\n#ifndef OF /* function prototypes */\n#  ifdef STDC\n#    define OF(args)  args\n#  else\n#    define OF(args)  ()\n#  endif\n#endif\n\n/* The following definitions for FAR are needed only for MSDOS mixed\n * model programming (small or medium model with some far allocations).\n * This was tested only with MSC; for other MSDOS compilers you may have\n * to define NO_MEMCPY in zutil.h.  If you don't need the mixed model,\n * just define FAR to be empty.\n */\n#ifdef SYS16BIT\n#  if defined(M_I86SM) || defined(M_I86MM)\n     /* MSC small or medium model */\n#    define SMALL_MEDIUM\n#    ifdef _MSC_VER\n#      define FAR _far\n#    else\n#      define FAR far\n#    endif\n#  endif\n#  if (defined(__SMALL__) || defined(__MEDIUM__))\n     /* Turbo C small or medium model */\n#    define SMALL_MEDIUM\n#    ifdef __BORLANDC__\n#      define FAR _far\n#    else\n#      define FAR far\n#    endif\n#  endif\n#endif\n\n#if defined(WINDOWS) || defined(WIN32)\n   /* If building or using zlib as a DLL, define ZLIB_DLL.\n    * This is not mandatory, but it offers a little performance increase.\n    */\n#  ifdef ZLIB_DLL\n#    if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))\n#      ifdef ZLIB_INTERNAL\n#        define ZEXTERN extern __declspec(dllexport)\n#      else\n#        define ZEXTERN extern __declspec(dllimport)\n#      endif\n#    endif\n#  endif  /* ZLIB_DLL */\n   /* If building or using zlib with the WINAPI/WINAPIV calling convention,\n    * define ZLIB_WINAPI.\n    * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.\n    */\n#  ifdef ZLIB_WINAPI\n#    ifdef FAR\n#      undef FAR\n#    endif\n#    include <windows.h>\n     /* No need for _export, use ZLIB.DEF instead. */\n     /* For complete Windows compatibility, use WINAPI, not __stdcall. */\n#    define ZEXPORT WINAPI\n#    ifdef WIN32\n#      define ZEXPORTVA WINAPIV\n#    else\n#      define ZEXPORTVA FAR CDECL\n#    endif\n#  endif\n#endif\n\n#if defined (__BEOS__)\n#  ifdef ZLIB_DLL\n#    ifdef ZLIB_INTERNAL\n#      define ZEXPORT   __declspec(dllexport)\n#      define ZEXPORTVA __declspec(dllexport)\n#    else\n#      define ZEXPORT   __declspec(dllimport)\n#      define ZEXPORTVA __declspec(dllimport)\n#    endif\n#  endif\n#endif\n\n#ifndef ZEXTERN\n#  define ZEXTERN extern\n#endif\n#ifndef ZEXPORT\n#  define ZEXPORT\n#endif\n#ifndef ZEXPORTVA\n#  define ZEXPORTVA\n#endif\n\n#ifndef FAR\n#  define FAR\n#endif\n\n#if !defined(__MACTYPES__)\ntypedef unsigned char  Byte;  /* 8 bits */\n#endif\ntypedef unsigned int   uInt;  /* 16 bits or more */\ntypedef unsigned long  uLong; /* 32 bits or more */\n\n#ifdef SMALL_MEDIUM\n   /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */\n#  define Bytef Byte FAR\n#else\n   typedef Byte  FAR Bytef;\n#endif\ntypedef char  FAR charf;\ntypedef int   FAR intf;\ntypedef uInt  FAR uIntf;\ntypedef uLong FAR uLongf;\n\n#ifdef STDC\n   typedef void const *voidpc;\n   typedef void FAR   *voidpf;\n   typedef void       *voidp;\n#else\n   typedef Byte const *voidpc;\n   typedef Byte FAR   *voidpf;\n   typedef Byte       *voidp;\n#endif\n\n#ifdef HAVE_UNISTD_H    /* may be set to #if 1 by ./configure */\n#  define Z_HAVE_UNISTD_H\n#endif\n\n#ifdef STDC\n#  include <sys/types.h>    /* for off_t */\n#endif\n\n/* a little trick to accommodate both \"#define _LARGEFILE64_SOURCE\" and\n * \"#define _LARGEFILE64_SOURCE 1\" as requesting 64-bit operations, (even\n * though the former does not conform to the LFS document), but considering\n * both \"#undef _LARGEFILE64_SOURCE\" and \"#define _LARGEFILE64_SOURCE 0\" as\n * equivalently requesting no 64-bit operations\n */\n#if -_LARGEFILE64_SOURCE - -1 == 1\n#  undef _LARGEFILE64_SOURCE\n#endif\n\n#if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)\n#  include <unistd.h>       /* for SEEK_* and off_t */\n#  ifdef VMS\n#    include <unixio.h>     /* for off_t */\n#  endif\n#  ifndef z_off_t\n#    define z_off_t off_t\n#  endif\n#endif\n\n#ifndef SEEK_SET\n#  define SEEK_SET        0       /* Seek from beginning of file.  */\n#  define SEEK_CUR        1       /* Seek from current position.  */\n#  define SEEK_END        2       /* Set file pointer to EOF plus \"offset\" */\n#endif\n\n#ifndef z_off_t\n#  define z_off_t long\n#endif\n\n#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0\n#  define z_off64_t off64_t\n#else\n#  define z_off64_t z_off_t\n#endif\n\n#if defined(__OS400__)\n#  define NO_vsnprintf\n#endif\n\n#if defined(__MVS__)\n#  define NO_vsnprintf\n#endif\n\n/* MVS linker does not support external names larger than 8 bytes */\n#if defined(__MVS__)\n  #pragma map(deflateInit_,\"DEIN\")\n  #pragma map(deflateInit2_,\"DEIN2\")\n  #pragma map(deflateEnd,\"DEEND\")\n  #pragma map(deflateBound,\"DEBND\")\n  #pragma map(inflateInit_,\"ININ\")\n  #pragma map(inflateInit2_,\"ININ2\")\n  #pragma map(inflateEnd,\"INEND\")\n  #pragma map(inflateSync,\"INSY\")\n  #pragma map(inflateSetDictionary,\"INSEDI\")\n  #pragma map(compressBound,\"CMBND\")\n  #pragma map(inflate_table,\"INTABL\")\n  #pragma map(inflate_fast,\"INFA\")\n  #pragma map(inflate_copyright,\"INCOPY\")\n#endif\n\n#endif /* ZCONF_H */\n"
  },
  {
    "path": "external/zlib/zconf.h.in",
    "content": "/* zconf.h -- configuration of the zlib compression library\n * Copyright (C) 1995-2010 Jean-loup Gailly.\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n/* @(#) $Id$ */\n\n#ifndef ZCONF_H\n#define ZCONF_H\n\n/*\n * If you *really* need a unique prefix for all types and library functions,\n * compile with -DZ_PREFIX. The \"standard\" zlib should be compiled without it.\n * Even better than compiling with -DZ_PREFIX would be to use configure to set\n * this permanently in zconf.h using \"./configure --zprefix\".\n */\n#ifdef Z_PREFIX     /* may be set to #if 1 by ./configure */\n\n/* all linked symbols */\n#  define _dist_code            z__dist_code\n#  define _length_code          z__length_code\n#  define _tr_align             z__tr_align\n#  define _tr_flush_block       z__tr_flush_block\n#  define _tr_init              z__tr_init\n#  define _tr_stored_block      z__tr_stored_block\n#  define _tr_tally             z__tr_tally\n#  define adler32               z_adler32\n#  define adler32_combine       z_adler32_combine\n#  define adler32_combine64     z_adler32_combine64\n#  define compress              z_compress\n#  define compress2             z_compress2\n#  define compressBound         z_compressBound\n#  define crc32                 z_crc32\n#  define crc32_combine         z_crc32_combine\n#  define crc32_combine64       z_crc32_combine64\n#  define deflate               z_deflate\n#  define deflateBound          z_deflateBound\n#  define deflateCopy           z_deflateCopy\n#  define deflateEnd            z_deflateEnd\n#  define deflateInit2_         z_deflateInit2_\n#  define deflateInit_          z_deflateInit_\n#  define deflateParams         z_deflateParams\n#  define deflatePrime          z_deflatePrime\n#  define deflateReset          z_deflateReset\n#  define deflateSetDictionary  z_deflateSetDictionary\n#  define deflateSetHeader      z_deflateSetHeader\n#  define deflateTune           z_deflateTune\n#  define deflate_copyright     z_deflate_copyright\n#  define get_crc_table         z_get_crc_table\n#  define gz_error              z_gz_error\n#  define gz_intmax             z_gz_intmax\n#  define gz_strwinerror        z_gz_strwinerror\n#  define gzbuffer              z_gzbuffer\n#  define gzclearerr            z_gzclearerr\n#  define gzclose               z_gzclose\n#  define gzclose_r             z_gzclose_r\n#  define gzclose_w             z_gzclose_w\n#  define gzdirect              z_gzdirect\n#  define gzdopen               z_gzdopen\n#  define gzeof                 z_gzeof\n#  define gzerror               z_gzerror\n#  define gzflush               z_gzflush\n#  define gzgetc                z_gzgetc\n#  define gzgets                z_gzgets\n#  define gzoffset              z_gzoffset\n#  define gzoffset64            z_gzoffset64\n#  define gzopen                z_gzopen\n#  define gzopen64              z_gzopen64\n#  define gzprintf              z_gzprintf\n#  define gzputc                z_gzputc\n#  define gzputs                z_gzputs\n#  define gzread                z_gzread\n#  define gzrewind              z_gzrewind\n#  define gzseek                z_gzseek\n#  define gzseek64              z_gzseek64\n#  define gzsetparams           z_gzsetparams\n#  define gztell                z_gztell\n#  define gztell64              z_gztell64\n#  define gzungetc              z_gzungetc\n#  define gzwrite               z_gzwrite\n#  define inflate               z_inflate\n#  define inflateBack           z_inflateBack\n#  define inflateBackEnd        z_inflateBackEnd\n#  define inflateBackInit_      z_inflateBackInit_\n#  define inflateCopy           z_inflateCopy\n#  define inflateEnd            z_inflateEnd\n#  define inflateGetHeader      z_inflateGetHeader\n#  define inflateInit2_         z_inflateInit2_\n#  define inflateInit_          z_inflateInit_\n#  define inflateMark           z_inflateMark\n#  define inflatePrime          z_inflatePrime\n#  define inflateReset          z_inflateReset\n#  define inflateReset2         z_inflateReset2\n#  define inflateSetDictionary  z_inflateSetDictionary\n#  define inflateSync           z_inflateSync\n#  define inflateSyncPoint      z_inflateSyncPoint\n#  define inflateUndermine      z_inflateUndermine\n#  define inflate_copyright     z_inflate_copyright\n#  define inflate_fast          z_inflate_fast\n#  define inflate_table         z_inflate_table\n#  define uncompress            z_uncompress\n#  define zError                z_zError\n#  define zcalloc               z_zcalloc\n#  define zcfree                z_zcfree\n#  define zlibCompileFlags      z_zlibCompileFlags\n#  define zlibVersion           z_zlibVersion\n\n/* all zlib typedefs in zlib.h and zconf.h */\n#  define Byte                  z_Byte\n#  define Bytef                 z_Bytef\n#  define alloc_func            z_alloc_func\n#  define charf                 z_charf\n#  define free_func             z_free_func\n#  define gzFile                z_gzFile\n#  define gz_header             z_gz_header\n#  define gz_headerp            z_gz_headerp\n#  define in_func               z_in_func\n#  define intf                  z_intf\n#  define out_func              z_out_func\n#  define uInt                  z_uInt\n#  define uIntf                 z_uIntf\n#  define uLong                 z_uLong\n#  define uLongf                z_uLongf\n#  define voidp                 z_voidp\n#  define voidpc                z_voidpc\n#  define voidpf                z_voidpf\n\n/* all zlib structs in zlib.h and zconf.h */\n#  define gz_header_s           z_gz_header_s\n#  define internal_state        z_internal_state\n\n#endif\n\n#if defined(__MSDOS__) && !defined(MSDOS)\n#  define MSDOS\n#endif\n#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)\n#  define OS2\n#endif\n#if defined(_WINDOWS) && !defined(WINDOWS)\n#  define WINDOWS\n#endif\n#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)\n#  ifndef WIN32\n#    define WIN32\n#  endif\n#endif\n#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)\n#  if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)\n#    ifndef SYS16BIT\n#      define SYS16BIT\n#    endif\n#  endif\n#endif\n\n/*\n * Compile with -DMAXSEG_64K if the alloc function cannot allocate more\n * than 64k bytes at a time (needed on systems with 16-bit int).\n */\n#ifdef SYS16BIT\n#  define MAXSEG_64K\n#endif\n#ifdef MSDOS\n#  define UNALIGNED_OK\n#endif\n\n#ifdef __STDC_VERSION__\n#  ifndef STDC\n#    define STDC\n#  endif\n#  if __STDC_VERSION__ >= 199901L\n#    ifndef STDC99\n#      define STDC99\n#    endif\n#  endif\n#endif\n#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))\n#  define STDC\n#endif\n#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))\n#  define STDC\n#endif\n#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))\n#  define STDC\n#endif\n#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))\n#  define STDC\n#endif\n\n#if defined(__OS400__) && !defined(STDC)    /* iSeries (formerly AS/400). */\n#  define STDC\n#endif\n\n#ifndef STDC\n#  ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */\n#    define const       /* note: need a more gentle solution here */\n#  endif\n#endif\n\n/* Some Mac compilers merge all .h files incorrectly: */\n#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)\n#  define NO_DUMMY_DECL\n#endif\n\n/* Maximum value for memLevel in deflateInit2 */\n#ifndef MAX_MEM_LEVEL\n#  ifdef MAXSEG_64K\n#    define MAX_MEM_LEVEL 8\n#  else\n#    define MAX_MEM_LEVEL 9\n#  endif\n#endif\n\n/* Maximum value for windowBits in deflateInit2 and inflateInit2.\n * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files\n * created by gzip. (Files created by minigzip can still be extracted by\n * gzip.)\n */\n#ifndef MAX_WBITS\n#  define MAX_WBITS   15 /* 32K LZ77 window */\n#endif\n\n/* The memory requirements for deflate are (in bytes):\n            (1 << (windowBits+2)) +  (1 << (memLevel+9))\n that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)\n plus a few kilobytes for small objects. For example, if you want to reduce\n the default memory requirements from 256K to 128K, compile with\n     make CFLAGS=\"-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7\"\n Of course this will generally degrade compression (there's no free lunch).\n\n   The memory requirements for inflate are (in bytes) 1 << windowBits\n that is, 32K for windowBits=15 (default value) plus a few kilobytes\n for small objects.\n*/\n\n                        /* Type declarations */\n\n#ifndef OF /* function prototypes */\n#  ifdef STDC\n#    define OF(args)  args\n#  else\n#    define OF(args)  ()\n#  endif\n#endif\n\n/* The following definitions for FAR are needed only for MSDOS mixed\n * model programming (small or medium model with some far allocations).\n * This was tested only with MSC; for other MSDOS compilers you may have\n * to define NO_MEMCPY in zutil.h.  If you don't need the mixed model,\n * just define FAR to be empty.\n */\n#ifdef SYS16BIT\n#  if defined(M_I86SM) || defined(M_I86MM)\n     /* MSC small or medium model */\n#    define SMALL_MEDIUM\n#    ifdef _MSC_VER\n#      define FAR _far\n#    else\n#      define FAR far\n#    endif\n#  endif\n#  if (defined(__SMALL__) || defined(__MEDIUM__))\n     /* Turbo C small or medium model */\n#    define SMALL_MEDIUM\n#    ifdef __BORLANDC__\n#      define FAR _far\n#    else\n#      define FAR far\n#    endif\n#  endif\n#endif\n\n#if defined(WINDOWS) || defined(WIN32)\n   /* If building or using zlib as a DLL, define ZLIB_DLL.\n    * This is not mandatory, but it offers a little performance increase.\n    */\n#  ifdef ZLIB_DLL\n#    if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))\n#      ifdef ZLIB_INTERNAL\n#        define ZEXTERN extern __declspec(dllexport)\n#      else\n#        define ZEXTERN extern __declspec(dllimport)\n#      endif\n#    endif\n#  endif  /* ZLIB_DLL */\n   /* If building or using zlib with the WINAPI/WINAPIV calling convention,\n    * define ZLIB_WINAPI.\n    * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.\n    */\n#  ifdef ZLIB_WINAPI\n#    ifdef FAR\n#      undef FAR\n#    endif\n#    include <windows.h>\n     /* No need for _export, use ZLIB.DEF instead. */\n     /* For complete Windows compatibility, use WINAPI, not __stdcall. */\n#    define ZEXPORT WINAPI\n#    ifdef WIN32\n#      define ZEXPORTVA WINAPIV\n#    else\n#      define ZEXPORTVA FAR CDECL\n#    endif\n#  endif\n#endif\n\n#if defined (__BEOS__)\n#  ifdef ZLIB_DLL\n#    ifdef ZLIB_INTERNAL\n#      define ZEXPORT   __declspec(dllexport)\n#      define ZEXPORTVA __declspec(dllexport)\n#    else\n#      define ZEXPORT   __declspec(dllimport)\n#      define ZEXPORTVA __declspec(dllimport)\n#    endif\n#  endif\n#endif\n\n#ifndef ZEXTERN\n#  define ZEXTERN extern\n#endif\n#ifndef ZEXPORT\n#  define ZEXPORT\n#endif\n#ifndef ZEXPORTVA\n#  define ZEXPORTVA\n#endif\n\n#ifndef FAR\n#  define FAR\n#endif\n\n#if !defined(__MACTYPES__)\ntypedef unsigned char  Byte;  /* 8 bits */\n#endif\ntypedef unsigned int   uInt;  /* 16 bits or more */\ntypedef unsigned long  uLong; /* 32 bits or more */\n\n#ifdef SMALL_MEDIUM\n   /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */\n#  define Bytef Byte FAR\n#else\n   typedef Byte  FAR Bytef;\n#endif\ntypedef char  FAR charf;\ntypedef int   FAR intf;\ntypedef uInt  FAR uIntf;\ntypedef uLong FAR uLongf;\n\n#ifdef STDC\n   typedef void const *voidpc;\n   typedef void FAR   *voidpf;\n   typedef void       *voidp;\n#else\n   typedef Byte const *voidpc;\n   typedef Byte FAR   *voidpf;\n   typedef Byte       *voidp;\n#endif\n\n#ifdef HAVE_UNISTD_H    /* may be set to #if 1 by ./configure */\n#  define Z_HAVE_UNISTD_H\n#endif\n\n#ifdef STDC\n#  include <sys/types.h>    /* for off_t */\n#endif\n\n/* a little trick to accommodate both \"#define _LARGEFILE64_SOURCE\" and\n * \"#define _LARGEFILE64_SOURCE 1\" as requesting 64-bit operations, (even\n * though the former does not conform to the LFS document), but considering\n * both \"#undef _LARGEFILE64_SOURCE\" and \"#define _LARGEFILE64_SOURCE 0\" as\n * equivalently requesting no 64-bit operations\n */\n#if -_LARGEFILE64_SOURCE - -1 == 1\n#  undef _LARGEFILE64_SOURCE\n#endif\n\n#if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)\n#  include <unistd.h>       /* for SEEK_* and off_t */\n#  ifdef VMS\n#    include <unixio.h>     /* for off_t */\n#  endif\n#  ifndef z_off_t\n#    define z_off_t off_t\n#  endif\n#endif\n\n#ifndef SEEK_SET\n#  define SEEK_SET        0       /* Seek from beginning of file.  */\n#  define SEEK_CUR        1       /* Seek from current position.  */\n#  define SEEK_END        2       /* Set file pointer to EOF plus \"offset\" */\n#endif\n\n#ifndef z_off_t\n#  define z_off_t long\n#endif\n\n#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0\n#  define z_off64_t off64_t\n#else\n#  define z_off64_t z_off_t\n#endif\n\n#if defined(__OS400__)\n#  define NO_vsnprintf\n#endif\n\n#if defined(__MVS__)\n#  define NO_vsnprintf\n#endif\n\n/* MVS linker does not support external names larger than 8 bytes */\n#if defined(__MVS__)\n  #pragma map(deflateInit_,\"DEIN\")\n  #pragma map(deflateInit2_,\"DEIN2\")\n  #pragma map(deflateEnd,\"DEEND\")\n  #pragma map(deflateBound,\"DEBND\")\n  #pragma map(inflateInit_,\"ININ\")\n  #pragma map(inflateInit2_,\"ININ2\")\n  #pragma map(inflateEnd,\"INEND\")\n  #pragma map(inflateSync,\"INSY\")\n  #pragma map(inflateSetDictionary,\"INSEDI\")\n  #pragma map(compressBound,\"CMBND\")\n  #pragma map(inflate_table,\"INTABL\")\n  #pragma map(inflate_fast,\"INFA\")\n  #pragma map(inflate_copyright,\"INCOPY\")\n#endif\n\n#endif /* ZCONF_H */\n"
  },
  {
    "path": "external/zlib/zlib.3",
    "content": ".TH ZLIB 3 \"19 Apr 2010\"\n.SH NAME\nzlib \\- compression/decompression library\n.SH SYNOPSIS\n[see\n.I zlib.h\nfor full description]\n.SH DESCRIPTION\nThe\n.I zlib\nlibrary is a general purpose data compression library.\nThe code is thread safe, assuming that the standard library functions\nused are thread safe, such as memory allocation routines.\nIt provides in-memory compression and decompression functions,\nincluding integrity checks of the uncompressed data.\nThis version of the library supports only one compression method (deflation)\nbut other algorithms may be added later\nwith the same stream interface.\n.LP\nCompression can be done in a single step if the buffers are large enough\nor can be done by repeated calls of the compression function.\nIn the latter case,\nthe application must provide more input and/or consume the output\n(providing more output space) before each call.\n.LP\nThe library also supports reading and writing files in\n.IR gzip (1)\n(.gz) format\nwith an interface similar to that of stdio.\n.LP\nThe library does not install any signal handler.\nThe decoder checks the consistency of the compressed data,\nso the library should never crash even in the case of corrupted input.\n.LP\nAll functions of the compression library are documented in the file\n.IR zlib.h .\nThe distribution source includes examples of use of the library\nin the files\n.I example.c\nand\n.IR minigzip.c,\nas well as other examples in the\n.IR examples/\ndirectory.\n.LP\nChanges to this version are documented in the file\n.I ChangeLog\nthat accompanies the source.\n.LP\n.I zlib\nis available in Java using the java.util.zip package:\n.IP\nhttp://java.sun.com/developer/technicalArticles/Programming/compression/\n.LP\nA Perl interface to\n.IR zlib ,\nwritten by Paul Marquess (pmqs@cpan.org),\nis available at CPAN (Comprehensive Perl Archive Network) sites,\nincluding:\n.IP\nhttp://search.cpan.org/~pmqs/IO-Compress-Zlib/\n.LP\nA Python interface to\n.IR zlib ,\nwritten by A.M. Kuchling (amk@magnet.com),\nis available in Python 1.5 and later versions:\n.IP\nhttp://www.python.org/doc/lib/module-zlib.html\n.LP\n.I zlib\nis built into\n.IR tcl:\n.IP\nhttp://wiki.tcl.tk/4610\n.LP\nAn experimental package to read and write files in .zip format,\nwritten on top of\n.I zlib\nby Gilles Vollant (info@winimage.com),\nis available at:\n.IP\nhttp://www.winimage.com/zLibDll/minizip.html\nand also in the\n.I contrib/minizip\ndirectory of the main\n.I zlib\nsource distribution.\n.SH \"SEE ALSO\"\nThe\n.I zlib\nweb site can be found at:\n.IP\nhttp://zlib.net/\n.LP\nThe data format used by the zlib library is described by RFC\n(Request for Comments) 1950 to 1952 in the files:\n.IP\nhttp://www.ietf.org/rfc/rfc1950.txt (for the zlib header and trailer format)\n.br\nhttp://www.ietf.org/rfc/rfc1951.txt (for the deflate compressed data format)\n.br\nhttp://www.ietf.org/rfc/rfc1952.txt (for the gzip header and trailer format)\n.LP\nMark Nelson wrote an article about\n.I zlib\nfor the Jan. 1997 issue of  Dr. Dobb's Journal;\na copy of the article is available at:\n.IP\nhttp://marknelson.us/1997/01/01/zlib-engine/\n.SH \"REPORTING PROBLEMS\"\nBefore reporting a problem,\nplease check the\n.I zlib\nweb site to verify that you have the latest version of\n.IR zlib ;\notherwise,\nobtain the latest version and see if the problem still exists.\nPlease read the\n.I zlib\nFAQ at:\n.IP\nhttp://zlib.net/zlib_faq.html\n.LP\nbefore asking for help.\nSend questions and/or comments to zlib@gzip.org,\nor (for the Windows DLL version) to Gilles Vollant (info@winimage.com).\n.SH AUTHORS\nVersion 1.2.5\nCopyright (C) 1995-2010 Jean-loup Gailly (jloup@gzip.org)\nand Mark Adler (madler@alumni.caltech.edu).\n.LP\nThis software is provided \"as-is,\"\nwithout any express or implied warranty.\nIn no event will the authors be held liable for any damages\narising from the use of this software.\nSee the distribution directory with respect to requirements\ngoverning redistribution.\nThe deflate format used by\n.I zlib\nwas defined by Phil Katz.\nThe deflate and\n.I zlib\nspecifications were written by L. Peter Deutsch.\nThanks to all the people who reported problems and suggested various\nimprovements in\n.IR zlib ;\nwho are too numerous to cite here.\n.LP\nUNIX manual page by R. P. C. Rodgers,\nU.S. National Library of Medicine (rodgers@nlm.nih.gov).\n.\\\" end of man page\n"
  },
  {
    "path": "external/zlib/zlib.h",
    "content": "/* zlib.h -- interface of the 'zlib' general purpose compression library\n  version 1.2.5, April 19th, 2010\n\n  Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler\n\n  This software is provided 'as-is', without any express or implied\n  warranty.  In no event will the authors be held liable for any damages\n  arising from the use of this software.\n\n  Permission is granted to anyone to use this software for any purpose,\n  including commercial applications, and to alter it and redistribute it\n  freely, subject to the following restrictions:\n\n  1. The origin of this software must not be misrepresented; you must not\n     claim that you wrote the original software. If you use this software\n     in a product, an acknowledgment in the product documentation would be\n     appreciated but is not required.\n  2. Altered source versions must be plainly marked as such, and must not be\n     misrepresented as being the original software.\n  3. This notice may not be removed or altered from any source distribution.\n\n  Jean-loup Gailly        Mark Adler\n  jloup@gzip.org          madler@alumni.caltech.edu\n\n\n  The data format used by the zlib library is described by RFCs (Request for\n  Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt\n  (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).\n*/\n\n#ifndef ZLIB_H\n#define ZLIB_H\n\n#include \"zconf.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define ZLIB_VERSION \"1.2.5\"\n#define ZLIB_VERNUM 0x1250\n#define ZLIB_VER_MAJOR 1\n#define ZLIB_VER_MINOR 2\n#define ZLIB_VER_REVISION 5\n#define ZLIB_VER_SUBREVISION 0\n\n/*\n    The 'zlib' compression library provides in-memory compression and\n  decompression functions, including integrity checks of the uncompressed data.\n  This version of the library supports only one compression method (deflation)\n  but other algorithms will be added later and will have the same stream\n  interface.\n\n    Compression can be done in a single step if the buffers are large enough,\n  or can be done by repeated calls of the compression function.  In the latter\n  case, the application must provide more input and/or consume the output\n  (providing more output space) before each call.\n\n    The compressed data format used by default by the in-memory functions is\n  the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped\n  around a deflate stream, which is itself documented in RFC 1951.\n\n    The library also supports reading and writing files in gzip (.gz) format\n  with an interface similar to that of stdio using the functions that start\n  with \"gz\".  The gzip format is different from the zlib format.  gzip is a\n  gzip wrapper, documented in RFC 1952, wrapped around a deflate stream.\n\n    This library can optionally read and write gzip streams in memory as well.\n\n    The zlib format was designed to be compact and fast for use in memory\n  and on communications channels.  The gzip format was designed for single-\n  file compression on file systems, has a larger header than zlib to maintain\n  directory information, and uses a different, slower check method than zlib.\n\n    The library does not install any signal handler.  The decoder checks\n  the consistency of the compressed data, so the library should never crash\n  even in case of corrupted input.\n*/\n\ntypedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));\ntypedef void   (*free_func)  OF((voidpf opaque, voidpf address));\n\nstruct internal_state;\n\ntypedef struct z_stream_s {\n    Bytef    *next_in;  /* next input byte */\n    uInt     avail_in;  /* number of bytes available at next_in */\n    uLong    total_in;  /* total nb of input bytes read so far */\n\n    Bytef    *next_out; /* next output byte should be put there */\n    uInt     avail_out; /* remaining free space at next_out */\n    uLong    total_out; /* total nb of bytes output so far */\n\n    char     *msg;      /* last error message, NULL if no error */\n    struct internal_state FAR *state; /* not visible by applications */\n\n    alloc_func zalloc;  /* used to allocate the internal state */\n    free_func  zfree;   /* used to free the internal state */\n    voidpf     opaque;  /* private data object passed to zalloc and zfree */\n\n    int     data_type;  /* best guess about the data type: binary or text */\n    uLong   adler;      /* adler32 value of the uncompressed data */\n    uLong   reserved;   /* reserved for future use */\n} z_stream;\n\ntypedef z_stream FAR *z_streamp;\n\n/*\n     gzip header information passed to and from zlib routines.  See RFC 1952\n  for more details on the meanings of these fields.\n*/\ntypedef struct gz_header_s {\n    int     text;       /* true if compressed data believed to be text */\n    uLong   time;       /* modification time */\n    int     xflags;     /* extra flags (not used when writing a gzip file) */\n    int     os;         /* operating system */\n    Bytef   *extra;     /* pointer to extra field or Z_NULL if none */\n    uInt    extra_len;  /* extra field length (valid if extra != Z_NULL) */\n    uInt    extra_max;  /* space at extra (only when reading header) */\n    Bytef   *name;      /* pointer to zero-terminated file name or Z_NULL */\n    uInt    name_max;   /* space at name (only when reading header) */\n    Bytef   *comment;   /* pointer to zero-terminated comment or Z_NULL */\n    uInt    comm_max;   /* space at comment (only when reading header) */\n    int     hcrc;       /* true if there was or will be a header crc */\n    int     done;       /* true when done reading gzip header (not used\n                           when writing a gzip file) */\n} gz_header;\n\ntypedef gz_header FAR *gz_headerp;\n\n/*\n     The application must update next_in and avail_in when avail_in has dropped\n   to zero.  It must update next_out and avail_out when avail_out has dropped\n   to zero.  The application must initialize zalloc, zfree and opaque before\n   calling the init function.  All other fields are set by the compression\n   library and must not be updated by the application.\n\n     The opaque value provided by the application will be passed as the first\n   parameter for calls of zalloc and zfree.  This can be useful for custom\n   memory management.  The compression library attaches no meaning to the\n   opaque value.\n\n     zalloc must return Z_NULL if there is not enough memory for the object.\n   If zlib is used in a multi-threaded application, zalloc and zfree must be\n   thread safe.\n\n     On 16-bit systems, the functions zalloc and zfree must be able to allocate\n   exactly 65536 bytes, but will not be required to allocate more than this if\n   the symbol MAXSEG_64K is defined (see zconf.h).  WARNING: On MSDOS, pointers\n   returned by zalloc for objects of exactly 65536 bytes *must* have their\n   offset normalized to zero.  The default allocation function provided by this\n   library ensures this (see zutil.c).  To reduce memory requirements and avoid\n   any allocation of 64K objects, at the expense of compression ratio, compile\n   the library with -DMAX_WBITS=14 (see zconf.h).\n\n     The fields total_in and total_out can be used for statistics or progress\n   reports.  After compression, total_in holds the total size of the\n   uncompressed data and may be saved for use in the decompressor (particularly\n   if the decompressor wants to decompress everything in a single step).\n*/\n\n                        /* constants */\n\n#define Z_NO_FLUSH      0\n#define Z_PARTIAL_FLUSH 1\n#define Z_SYNC_FLUSH    2\n#define Z_FULL_FLUSH    3\n#define Z_FINISH        4\n#define Z_BLOCK         5\n#define Z_TREES         6\n/* Allowed flush values; see deflate() and inflate() below for details */\n\n#define Z_OK            0\n#define Z_STREAM_END    1\n#define Z_NEED_DICT     2\n#define Z_ERRNO        (-1)\n#define Z_STREAM_ERROR (-2)\n#define Z_DATA_ERROR   (-3)\n#define Z_MEM_ERROR    (-4)\n#define Z_BUF_ERROR    (-5)\n#define Z_VERSION_ERROR (-6)\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n\n#define Z_NO_COMPRESSION         0\n#define Z_BEST_SPEED             1\n#define Z_BEST_COMPRESSION       9\n#define Z_DEFAULT_COMPRESSION  (-1)\n/* compression levels */\n\n#define Z_FILTERED            1\n#define Z_HUFFMAN_ONLY        2\n#define Z_RLE                 3\n#define Z_FIXED               4\n#define Z_DEFAULT_STRATEGY    0\n/* compression strategy; see deflateInit2() below for details */\n\n#define Z_BINARY   0\n#define Z_TEXT     1\n#define Z_ASCII    Z_TEXT   /* for compatibility with 1.2.2 and earlier */\n#define Z_UNKNOWN  2\n/* Possible values of the data_type field (though see inflate()) */\n\n#define Z_DEFLATED   8\n/* The deflate compression method (the only one supported in this version) */\n\n#define Z_NULL  0  /* for initializing zalloc, zfree, opaque */\n\n#define zlib_version zlibVersion()\n/* for compatibility with versions < 1.0.2 */\n\n\n                        /* basic functions */\n\nZEXTERN const char * ZEXPORT zlibVersion OF((void));\n/* The application can compare zlibVersion and ZLIB_VERSION for consistency.\n   If the first character differs, the library code actually used is not\n   compatible with the zlib.h header file used by the application.  This check\n   is automatically made by deflateInit and inflateInit.\n */\n\n/*\nZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));\n\n     Initializes the internal stream state for compression.  The fields\n   zalloc, zfree and opaque must be initialized before by the caller.  If\n   zalloc and zfree are set to Z_NULL, deflateInit updates them to use default\n   allocation functions.\n\n     The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:\n   1 gives best speed, 9 gives best compression, 0 gives no compression at all\n   (the input data is simply copied a block at a time).  Z_DEFAULT_COMPRESSION\n   requests a default compromise between speed and compression (currently\n   equivalent to level 6).\n\n     deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough\n   memory, Z_STREAM_ERROR if level is not a valid compression level, or\n   Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible\n   with the version assumed by the caller (ZLIB_VERSION).  msg is set to null\n   if there is no error message.  deflateInit does not perform any compression:\n   this will be done by deflate().\n*/\n\n\nZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));\n/*\n    deflate compresses as much data as possible, and stops when the input\n  buffer becomes empty or the output buffer becomes full.  It may introduce\n  some output latency (reading input without producing any output) except when\n  forced to flush.\n\n    The detailed semantics are as follows.  deflate performs one or both of the\n  following actions:\n\n  - Compress more input starting at next_in and update next_in and avail_in\n    accordingly.  If not all input can be processed (because there is not\n    enough room in the output buffer), next_in and avail_in are updated and\n    processing will resume at this point for the next call of deflate().\n\n  - Provide more output starting at next_out and update next_out and avail_out\n    accordingly.  This action is forced if the parameter flush is non zero.\n    Forcing flush frequently degrades the compression ratio, so this parameter\n    should be set only when necessary (in interactive applications).  Some\n    output may be provided even if flush is not set.\n\n    Before the call of deflate(), the application should ensure that at least\n  one of the actions is possible, by providing more input and/or consuming more\n  output, and updating avail_in or avail_out accordingly; avail_out should\n  never be zero before the call.  The application can consume the compressed\n  output when it wants, for example when the output buffer is full (avail_out\n  == 0), or after each call of deflate().  If deflate returns Z_OK and with\n  zero avail_out, it must be called again after making room in the output\n  buffer because there might be more output pending.\n\n    Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to\n  decide how much data to accumulate before producing output, in order to\n  maximize compression.\n\n    If the parameter flush is set to Z_SYNC_FLUSH, all pending output is\n  flushed to the output buffer and the output is aligned on a byte boundary, so\n  that the decompressor can get all input data available so far.  (In\n  particular avail_in is zero after the call if enough output space has been\n  provided before the call.) Flushing may degrade compression for some\n  compression algorithms and so it should be used only when necessary.  This\n  completes the current deflate block and follows it with an empty stored block\n  that is three bits plus filler bits to the next byte, followed by four bytes\n  (00 00 ff ff).\n\n    If flush is set to Z_PARTIAL_FLUSH, all pending output is flushed to the\n  output buffer, but the output is not aligned to a byte boundary.  All of the\n  input data so far will be available to the decompressor, as for Z_SYNC_FLUSH.\n  This completes the current deflate block and follows it with an empty fixed\n  codes block that is 10 bits long.  This assures that enough bytes are output\n  in order for the decompressor to finish the block before the empty fixed code\n  block.\n\n    If flush is set to Z_BLOCK, a deflate block is completed and emitted, as\n  for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to\n  seven bits of the current block are held to be written as the next byte after\n  the next deflate block is completed.  In this case, the decompressor may not\n  be provided enough bits at this point in order to complete decompression of\n  the data provided so far to the compressor.  It may need to wait for the next\n  block to be emitted.  This is for advanced applications that need to control\n  the emission of deflate blocks.\n\n    If flush is set to Z_FULL_FLUSH, all output is flushed as with\n  Z_SYNC_FLUSH, and the compression state is reset so that decompression can\n  restart from this point if previous compressed data has been damaged or if\n  random access is desired.  Using Z_FULL_FLUSH too often can seriously degrade\n  compression.\n\n    If deflate returns with avail_out == 0, this function must be called again\n  with the same value of the flush parameter and more output space (updated\n  avail_out), until the flush is complete (deflate returns with non-zero\n  avail_out).  In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that\n  avail_out is greater than six to avoid repeated flush markers due to\n  avail_out == 0 on return.\n\n    If the parameter flush is set to Z_FINISH, pending input is processed,\n  pending output is flushed and deflate returns with Z_STREAM_END if there was\n  enough output space; if deflate returns with Z_OK, this function must be\n  called again with Z_FINISH and more output space (updated avail_out) but no\n  more input data, until it returns with Z_STREAM_END or an error.  After\n  deflate has returned Z_STREAM_END, the only possible operations on the stream\n  are deflateReset or deflateEnd.\n\n    Z_FINISH can be used immediately after deflateInit if all the compression\n  is to be done in a single step.  In this case, avail_out must be at least the\n  value returned by deflateBound (see below).  If deflate does not return\n  Z_STREAM_END, then it must be called again as described above.\n\n    deflate() sets strm->adler to the adler32 checksum of all input read\n  so far (that is, total_in bytes).\n\n    deflate() may update strm->data_type if it can make a good guess about\n  the input data type (Z_BINARY or Z_TEXT).  In doubt, the data is considered\n  binary.  This field is only for information purposes and does not affect the\n  compression algorithm in any manner.\n\n    deflate() returns Z_OK if some progress has been made (more input\n  processed or more output produced), Z_STREAM_END if all input has been\n  consumed and all output has been produced (only when flush is set to\n  Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example\n  if next_in or next_out was Z_NULL), Z_BUF_ERROR if no progress is possible\n  (for example avail_in or avail_out was zero).  Note that Z_BUF_ERROR is not\n  fatal, and deflate() can be called again with more input and more output\n  space to continue compressing.\n*/\n\n\nZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm));\n/*\n     All dynamically allocated data structures for this stream are freed.\n   This function discards any unprocessed input and does not flush any pending\n   output.\n\n     deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the\n   stream state was inconsistent, Z_DATA_ERROR if the stream was freed\n   prematurely (some input or output was discarded).  In the error case, msg\n   may be set but then points to a static string (which must not be\n   deallocated).\n*/\n\n\n/*\nZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));\n\n     Initializes the internal stream state for decompression.  The fields\n   next_in, avail_in, zalloc, zfree and opaque must be initialized before by\n   the caller.  If next_in is not Z_NULL and avail_in is large enough (the\n   exact value depends on the compression method), inflateInit determines the\n   compression method from the zlib header and allocates all data structures\n   accordingly; otherwise the allocation will be deferred to the first call of\n   inflate.  If zalloc and zfree are set to Z_NULL, inflateInit updates them to\n   use default allocation functions.\n\n     inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough\n   memory, Z_VERSION_ERROR if the zlib library version is incompatible with the\n   version assumed by the caller, or Z_STREAM_ERROR if the parameters are\n   invalid, such as a null pointer to the structure.  msg is set to null if\n   there is no error message.  inflateInit does not perform any decompression\n   apart from possibly reading the zlib header if present: actual decompression\n   will be done by inflate().  (So next_in and avail_in may be modified, but\n   next_out and avail_out are unused and unchanged.) The current implementation\n   of inflateInit() does not process any header information -- that is deferred\n   until inflate() is called.\n*/\n\n\nZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));\n/*\n    inflate decompresses as much data as possible, and stops when the input\n  buffer becomes empty or the output buffer becomes full.  It may introduce\n  some output latency (reading input without producing any output) except when\n  forced to flush.\n\n  The detailed semantics are as follows.  inflate performs one or both of the\n  following actions:\n\n  - Decompress more input starting at next_in and update next_in and avail_in\n    accordingly.  If not all input can be processed (because there is not\n    enough room in the output buffer), next_in is updated and processing will\n    resume at this point for the next call of inflate().\n\n  - Provide more output starting at next_out and update next_out and avail_out\n    accordingly.  inflate() provides as much output as possible, until there is\n    no more input data or no more space in the output buffer (see below about\n    the flush parameter).\n\n    Before the call of inflate(), the application should ensure that at least\n  one of the actions is possible, by providing more input and/or consuming more\n  output, and updating the next_* and avail_* values accordingly.  The\n  application can consume the uncompressed output when it wants, for example\n  when the output buffer is full (avail_out == 0), or after each call of\n  inflate().  If inflate returns Z_OK and with zero avail_out, it must be\n  called again after making room in the output buffer because there might be\n  more output pending.\n\n    The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH,\n  Z_BLOCK, or Z_TREES.  Z_SYNC_FLUSH requests that inflate() flush as much\n  output as possible to the output buffer.  Z_BLOCK requests that inflate()\n  stop if and when it gets to the next deflate block boundary.  When decoding\n  the zlib or gzip format, this will cause inflate() to return immediately\n  after the header and before the first block.  When doing a raw inflate,\n  inflate() will go ahead and process the first block, and will return when it\n  gets to the end of that block, or when it runs out of data.\n\n    The Z_BLOCK option assists in appending to or combining deflate streams.\n  Also to assist in this, on return inflate() will set strm->data_type to the\n  number of unused bits in the last byte taken from strm->next_in, plus 64 if\n  inflate() is currently decoding the last block in the deflate stream, plus\n  128 if inflate() returned immediately after decoding an end-of-block code or\n  decoding the complete header up to just before the first byte of the deflate\n  stream.  The end-of-block will not be indicated until all of the uncompressed\n  data from that block has been written to strm->next_out.  The number of\n  unused bits may in general be greater than seven, except when bit 7 of\n  data_type is set, in which case the number of unused bits will be less than\n  eight.  data_type is set as noted here every time inflate() returns for all\n  flush options, and so can be used to determine the amount of currently\n  consumed input in bits.\n\n    The Z_TREES option behaves as Z_BLOCK does, but it also returns when the\n  end of each deflate block header is reached, before any actual data in that\n  block is decoded.  This allows the caller to determine the length of the\n  deflate block header for later use in random access within a deflate block.\n  256 is added to the value of strm->data_type when inflate() returns\n  immediately after reaching the end of the deflate block header.\n\n    inflate() should normally be called until it returns Z_STREAM_END or an\n  error.  However if all decompression is to be performed in a single step (a\n  single call of inflate), the parameter flush should be set to Z_FINISH.  In\n  this case all pending input is processed and all pending output is flushed;\n  avail_out must be large enough to hold all the uncompressed data.  (The size\n  of the uncompressed data may have been saved by the compressor for this\n  purpose.) The next operation on this stream must be inflateEnd to deallocate\n  the decompression state.  The use of Z_FINISH is never required, but can be\n  used to inform inflate that a faster approach may be used for the single\n  inflate() call.\n\n     In this implementation, inflate() always flushes as much output as\n  possible to the output buffer, and always uses the faster approach on the\n  first call.  So the only effect of the flush parameter in this implementation\n  is on the return value of inflate(), as noted below, or when it returns early\n  because Z_BLOCK or Z_TREES is used.\n\n     If a preset dictionary is needed after this call (see inflateSetDictionary\n  below), inflate sets strm->adler to the adler32 checksum of the dictionary\n  chosen by the compressor and returns Z_NEED_DICT; otherwise it sets\n  strm->adler to the adler32 checksum of all output produced so far (that is,\n  total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described\n  below.  At the end of the stream, inflate() checks that its computed adler32\n  checksum is equal to that saved by the compressor and returns Z_STREAM_END\n  only if the checksum is correct.\n\n    inflate() can decompress and check either zlib-wrapped or gzip-wrapped\n  deflate data.  The header type is detected automatically, if requested when\n  initializing with inflateInit2().  Any information contained in the gzip\n  header is not retained, so applications that need that information should\n  instead use raw inflate, see inflateInit2() below, or inflateBack() and\n  perform their own processing of the gzip header and trailer.\n\n    inflate() returns Z_OK if some progress has been made (more input processed\n  or more output produced), Z_STREAM_END if the end of the compressed data has\n  been reached and all uncompressed output has been produced, Z_NEED_DICT if a\n  preset dictionary is needed at this point, Z_DATA_ERROR if the input data was\n  corrupted (input stream not conforming to the zlib format or incorrect check\n  value), Z_STREAM_ERROR if the stream structure was inconsistent (for example\n  next_in or next_out was Z_NULL), Z_MEM_ERROR if there was not enough memory,\n  Z_BUF_ERROR if no progress is possible or if there was not enough room in the\n  output buffer when Z_FINISH is used.  Note that Z_BUF_ERROR is not fatal, and\n  inflate() can be called again with more input and more output space to\n  continue decompressing.  If Z_DATA_ERROR is returned, the application may\n  then call inflateSync() to look for a good compression block if a partial\n  recovery of the data is desired.\n*/\n\n\nZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));\n/*\n     All dynamically allocated data structures for this stream are freed.\n   This function discards any unprocessed input and does not flush any pending\n   output.\n\n     inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state\n   was inconsistent.  In the error case, msg may be set but then points to a\n   static string (which must not be deallocated).\n*/\n\n\n                        /* Advanced functions */\n\n/*\n    The following functions are needed only in some special applications.\n*/\n\n/*\nZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,\n                                     int  level,\n                                     int  method,\n                                     int  windowBits,\n                                     int  memLevel,\n                                     int  strategy));\n\n     This is another version of deflateInit with more compression options.  The\n   fields next_in, zalloc, zfree and opaque must be initialized before by the\n   caller.\n\n     The method parameter is the compression method.  It must be Z_DEFLATED in\n   this version of the library.\n\n     The windowBits parameter is the base two logarithm of the window size\n   (the size of the history buffer).  It should be in the range 8..15 for this\n   version of the library.  Larger values of this parameter result in better\n   compression at the expense of memory usage.  The default value is 15 if\n   deflateInit is used instead.\n\n     windowBits can also be -8..-15 for raw deflate.  In this case, -windowBits\n   determines the window size.  deflate() will then generate raw deflate data\n   with no zlib header or trailer, and will not compute an adler32 check value.\n\n     windowBits can also be greater than 15 for optional gzip encoding.  Add\n   16 to windowBits to write a simple gzip header and trailer around the\n   compressed data instead of a zlib wrapper.  The gzip header will have no\n   file name, no extra data, no comment, no modification time (set to zero), no\n   header crc, and the operating system will be set to 255 (unknown).  If a\n   gzip stream is being written, strm->adler is a crc32 instead of an adler32.\n\n     The memLevel parameter specifies how much memory should be allocated\n   for the internal compression state.  memLevel=1 uses minimum memory but is\n   slow and reduces compression ratio; memLevel=9 uses maximum memory for\n   optimal speed.  The default value is 8.  See zconf.h for total memory usage\n   as a function of windowBits and memLevel.\n\n     The strategy parameter is used to tune the compression algorithm.  Use the\n   value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a\n   filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no\n   string match), or Z_RLE to limit match distances to one (run-length\n   encoding).  Filtered data consists mostly of small values with a somewhat\n   random distribution.  In this case, the compression algorithm is tuned to\n   compress them better.  The effect of Z_FILTERED is to force more Huffman\n   coding and less string matching; it is somewhat intermediate between\n   Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY.  Z_RLE is designed to be almost as\n   fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data.  The\n   strategy parameter only affects the compression ratio but not the\n   correctness of the compressed output even if it is not set appropriately.\n   Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler\n   decoder for special applications.\n\n     deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough\n   memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid\n   method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is\n   incompatible with the version assumed by the caller (ZLIB_VERSION).  msg is\n   set to null if there is no error message.  deflateInit2 does not perform any\n   compression: this will be done by deflate().\n*/\n\nZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,\n                                             const Bytef *dictionary,\n                                             uInt  dictLength));\n/*\n     Initializes the compression dictionary from the given byte sequence\n   without producing any compressed output.  This function must be called\n   immediately after deflateInit, deflateInit2 or deflateReset, before any call\n   of deflate.  The compressor and decompressor must use exactly the same\n   dictionary (see inflateSetDictionary).\n\n     The dictionary should consist of strings (byte sequences) that are likely\n   to be encountered later in the data to be compressed, with the most commonly\n   used strings preferably put towards the end of the dictionary.  Using a\n   dictionary is most useful when the data to be compressed is short and can be\n   predicted with good accuracy; the data can then be compressed better than\n   with the default empty dictionary.\n\n     Depending on the size of the compression data structures selected by\n   deflateInit or deflateInit2, a part of the dictionary may in effect be\n   discarded, for example if the dictionary is larger than the window size\n   provided in deflateInit or deflateInit2.  Thus the strings most likely to be\n   useful should be put at the end of the dictionary, not at the front.  In\n   addition, the current implementation of deflate will use at most the window\n   size minus 262 bytes of the provided dictionary.\n\n     Upon return of this function, strm->adler is set to the adler32 value\n   of the dictionary; the decompressor may later use this value to determine\n   which dictionary has been used by the compressor.  (The adler32 value\n   applies to the whole dictionary even if only a subset of the dictionary is\n   actually used by the compressor.) If a raw deflate was requested, then the\n   adler32 value is not computed and strm->adler is not set.\n\n     deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a\n   parameter is invalid (e.g.  dictionary being Z_NULL) or the stream state is\n   inconsistent (for example if deflate has already been called for this stream\n   or if the compression method is bsort).  deflateSetDictionary does not\n   perform any compression: this will be done by deflate().\n*/\n\nZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,\n                                    z_streamp source));\n/*\n     Sets the destination stream as a complete copy of the source stream.\n\n     This function can be useful when several compression strategies will be\n   tried, for example when there are several ways of pre-processing the input\n   data with a filter.  The streams that will be discarded should then be freed\n   by calling deflateEnd.  Note that deflateCopy duplicates the internal\n   compression state which can be quite large, so this strategy is slow and can\n   consume lots of memory.\n\n     deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not\n   enough memory, Z_STREAM_ERROR if the source stream state was inconsistent\n   (such as zalloc being Z_NULL).  msg is left unchanged in both source and\n   destination.\n*/\n\nZEXTERN int ZEXPORT deflateReset OF((z_streamp strm));\n/*\n     This function is equivalent to deflateEnd followed by deflateInit,\n   but does not free and reallocate all the internal compression state.  The\n   stream will keep the same compression level and any other attributes that\n   may have been set by deflateInit2.\n\n     deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source\n   stream state was inconsistent (such as zalloc or state being Z_NULL).\n*/\n\nZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,\n                                      int level,\n                                      int strategy));\n/*\n     Dynamically update the compression level and compression strategy.  The\n   interpretation of level and strategy is as in deflateInit2.  This can be\n   used to switch between compression and straight copy of the input data, or\n   to switch to a different kind of input data requiring a different strategy.\n   If the compression level is changed, the input available so far is\n   compressed with the old level (and may be flushed); the new level will take\n   effect only at the next call of deflate().\n\n     Before the call of deflateParams, the stream state must be set as for\n   a call of deflate(), since the currently available input may have to be\n   compressed and flushed.  In particular, strm->avail_out must be non-zero.\n\n     deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source\n   stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if\n   strm->avail_out was zero.\n*/\n\nZEXTERN int ZEXPORT deflateTune OF((z_streamp strm,\n                                    int good_length,\n                                    int max_lazy,\n                                    int nice_length,\n                                    int max_chain));\n/*\n     Fine tune deflate's internal compression parameters.  This should only be\n   used by someone who understands the algorithm used by zlib's deflate for\n   searching for the best matching string, and even then only by the most\n   fanatic optimizer trying to squeeze out the last compressed bit for their\n   specific input data.  Read the deflate.c source code for the meaning of the\n   max_lazy, good_length, nice_length, and max_chain parameters.\n\n     deflateTune() can be called after deflateInit() or deflateInit2(), and\n   returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream.\n */\n\nZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm,\n                                       uLong sourceLen));\n/*\n     deflateBound() returns an upper bound on the compressed size after\n   deflation of sourceLen bytes.  It must be called after deflateInit() or\n   deflateInit2(), and after deflateSetHeader(), if used.  This would be used\n   to allocate an output buffer for deflation in a single pass, and so would be\n   called before deflate().\n*/\n\nZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm,\n                                     int bits,\n                                     int value));\n/*\n     deflatePrime() inserts bits in the deflate output stream.  The intent\n   is that this function is used to start off the deflate output with the bits\n   leftover from a previous deflate stream when appending to it.  As such, this\n   function can only be used for raw deflate, and must be used before the first\n   deflate() call after a deflateInit2() or deflateReset().  bits must be less\n   than or equal to 16, and that many of the least significant bits of value\n   will be inserted in the output.\n\n     deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source\n   stream state was inconsistent.\n*/\n\nZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm,\n                                         gz_headerp head));\n/*\n     deflateSetHeader() provides gzip header information for when a gzip\n   stream is requested by deflateInit2().  deflateSetHeader() may be called\n   after deflateInit2() or deflateReset() and before the first call of\n   deflate().  The text, time, os, extra field, name, and comment information\n   in the provided gz_header structure are written to the gzip header (xflag is\n   ignored -- the extra flags are set according to the compression level).  The\n   caller must assure that, if not Z_NULL, name and comment are terminated with\n   a zero byte, and that if extra is not Z_NULL, that extra_len bytes are\n   available there.  If hcrc is true, a gzip header crc is included.  Note that\n   the current versions of the command-line version of gzip (up through version\n   1.3.x) do not support header crc's, and will report that it is a \"multi-part\n   gzip file\" and give up.\n\n     If deflateSetHeader is not used, the default gzip header has text false,\n   the time set to zero, and os set to 255, with no extra, name, or comment\n   fields.  The gzip header is returned to the default state by deflateReset().\n\n     deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source\n   stream state was inconsistent.\n*/\n\n/*\nZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,\n                                     int  windowBits));\n\n     This is another version of inflateInit with an extra parameter.  The\n   fields next_in, avail_in, zalloc, zfree and opaque must be initialized\n   before by the caller.\n\n     The windowBits parameter is the base two logarithm of the maximum window\n   size (the size of the history buffer).  It should be in the range 8..15 for\n   this version of the library.  The default value is 15 if inflateInit is used\n   instead.  windowBits must be greater than or equal to the windowBits value\n   provided to deflateInit2() while compressing, or it must be equal to 15 if\n   deflateInit2() was not used.  If a compressed stream with a larger window\n   size is given as input, inflate() will return with the error code\n   Z_DATA_ERROR instead of trying to allocate a larger window.\n\n     windowBits can also be zero to request that inflate use the window size in\n   the zlib header of the compressed stream.\n\n     windowBits can also be -8..-15 for raw inflate.  In this case, -windowBits\n   determines the window size.  inflate() will then process raw deflate data,\n   not looking for a zlib or gzip header, not generating a check value, and not\n   looking for any check values for comparison at the end of the stream.  This\n   is for use with other formats that use the deflate compressed data format\n   such as zip.  Those formats provide their own check values.  If a custom\n   format is developed using the raw deflate format for compressed data, it is\n   recommended that a check value such as an adler32 or a crc32 be applied to\n   the uncompressed data as is done in the zlib, gzip, and zip formats.  For\n   most applications, the zlib format should be used as is.  Note that comments\n   above on the use in deflateInit2() applies to the magnitude of windowBits.\n\n     windowBits can also be greater than 15 for optional gzip decoding.  Add\n   32 to windowBits to enable zlib and gzip decoding with automatic header\n   detection, or add 16 to decode only the gzip format (the zlib format will\n   return a Z_DATA_ERROR).  If a gzip stream is being decoded, strm->adler is a\n   crc32 instead of an adler32.\n\n     inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough\n   memory, Z_VERSION_ERROR if the zlib library version is incompatible with the\n   version assumed by the caller, or Z_STREAM_ERROR if the parameters are\n   invalid, such as a null pointer to the structure.  msg is set to null if\n   there is no error message.  inflateInit2 does not perform any decompression\n   apart from possibly reading the zlib header if present: actual decompression\n   will be done by inflate().  (So next_in and avail_in may be modified, but\n   next_out and avail_out are unused and unchanged.) The current implementation\n   of inflateInit2() does not process any header information -- that is\n   deferred until inflate() is called.\n*/\n\nZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,\n                                             const Bytef *dictionary,\n                                             uInt  dictLength));\n/*\n     Initializes the decompression dictionary from the given uncompressed byte\n   sequence.  This function must be called immediately after a call of inflate,\n   if that call returned Z_NEED_DICT.  The dictionary chosen by the compressor\n   can be determined from the adler32 value returned by that call of inflate.\n   The compressor and decompressor must use exactly the same dictionary (see\n   deflateSetDictionary).  For raw inflate, this function can be called\n   immediately after inflateInit2() or inflateReset() and before any call of\n   inflate() to set the dictionary.  The application must insure that the\n   dictionary that was used for compression is provided.\n\n     inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a\n   parameter is invalid (e.g.  dictionary being Z_NULL) or the stream state is\n   inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the\n   expected one (incorrect adler32 value).  inflateSetDictionary does not\n   perform any decompression: this will be done by subsequent calls of\n   inflate().\n*/\n\nZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));\n/*\n     Skips invalid compressed data until a full flush point (see above the\n   description of deflate with Z_FULL_FLUSH) can be found, or until all\n   available input is skipped.  No output is provided.\n\n     inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR\n   if no more input was provided, Z_DATA_ERROR if no flush point has been\n   found, or Z_STREAM_ERROR if the stream structure was inconsistent.  In the\n   success case, the application may save the current current value of total_in\n   which indicates where valid compressed data was found.  In the error case,\n   the application may repeatedly call inflateSync, providing more input each\n   time, until success or end of the input data.\n*/\n\nZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,\n                                    z_streamp source));\n/*\n     Sets the destination stream as a complete copy of the source stream.\n\n     This function can be useful when randomly accessing a large stream.  The\n   first pass through the stream can periodically record the inflate state,\n   allowing restarting inflate at those points when randomly accessing the\n   stream.\n\n     inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not\n   enough memory, Z_STREAM_ERROR if the source stream state was inconsistent\n   (such as zalloc being Z_NULL).  msg is left unchanged in both source and\n   destination.\n*/\n\nZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));\n/*\n     This function is equivalent to inflateEnd followed by inflateInit,\n   but does not free and reallocate all the internal decompression state.  The\n   stream will keep attributes that may have been set by inflateInit2.\n\n     inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source\n   stream state was inconsistent (such as zalloc or state being Z_NULL).\n*/\n\nZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm,\n                                      int windowBits));\n/*\n     This function is the same as inflateReset, but it also permits changing\n   the wrap and window size requests.  The windowBits parameter is interpreted\n   the same as it is for inflateInit2.\n\n     inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source\n   stream state was inconsistent (such as zalloc or state being Z_NULL), or if\n   the windowBits parameter is invalid.\n*/\n\nZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm,\n                                     int bits,\n                                     int value));\n/*\n     This function inserts bits in the inflate input stream.  The intent is\n   that this function is used to start inflating at a bit position in the\n   middle of a byte.  The provided bits will be used before any bytes are used\n   from next_in.  This function should only be used with raw inflate, and\n   should be used before the first inflate() call after inflateInit2() or\n   inflateReset().  bits must be less than or equal to 16, and that many of the\n   least significant bits of value will be inserted in the input.\n\n     If bits is negative, then the input stream bit buffer is emptied.  Then\n   inflatePrime() can be called again to put bits in the buffer.  This is used\n   to clear out bits leftover after feeding inflate a block description prior\n   to feeding inflate codes.\n\n     inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source\n   stream state was inconsistent.\n*/\n\nZEXTERN long ZEXPORT inflateMark OF((z_streamp strm));\n/*\n     This function returns two values, one in the lower 16 bits of the return\n   value, and the other in the remaining upper bits, obtained by shifting the\n   return value down 16 bits.  If the upper value is -1 and the lower value is\n   zero, then inflate() is currently decoding information outside of a block.\n   If the upper value is -1 and the lower value is non-zero, then inflate is in\n   the middle of a stored block, with the lower value equaling the number of\n   bytes from the input remaining to copy.  If the upper value is not -1, then\n   it is the number of bits back from the current bit position in the input of\n   the code (literal or length/distance pair) currently being processed.  In\n   that case the lower value is the number of bytes already emitted for that\n   code.\n\n     A code is being processed if inflate is waiting for more input to complete\n   decoding of the code, or if it has completed decoding but is waiting for\n   more output space to write the literal or match data.\n\n     inflateMark() is used to mark locations in the input data for random\n   access, which may be at bit positions, and to note those cases where the\n   output of a code may span boundaries of random access blocks.  The current\n   location in the input stream can be determined from avail_in and data_type\n   as noted in the description for the Z_BLOCK flush parameter for inflate.\n\n     inflateMark returns the value noted above or -1 << 16 if the provided\n   source stream state was inconsistent.\n*/\n\nZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm,\n                                         gz_headerp head));\n/*\n     inflateGetHeader() requests that gzip header information be stored in the\n   provided gz_header structure.  inflateGetHeader() may be called after\n   inflateInit2() or inflateReset(), and before the first call of inflate().\n   As inflate() processes the gzip stream, head->done is zero until the header\n   is completed, at which time head->done is set to one.  If a zlib stream is\n   being decoded, then head->done is set to -1 to indicate that there will be\n   no gzip header information forthcoming.  Note that Z_BLOCK or Z_TREES can be\n   used to force inflate() to return immediately after header processing is\n   complete and before any actual data is decompressed.\n\n     The text, time, xflags, and os fields are filled in with the gzip header\n   contents.  hcrc is set to true if there is a header CRC.  (The header CRC\n   was valid if done is set to one.) If extra is not Z_NULL, then extra_max\n   contains the maximum number of bytes to write to extra.  Once done is true,\n   extra_len contains the actual extra field length, and extra contains the\n   extra field, or that field truncated if extra_max is less than extra_len.\n   If name is not Z_NULL, then up to name_max characters are written there,\n   terminated with a zero unless the length is greater than name_max.  If\n   comment is not Z_NULL, then up to comm_max characters are written there,\n   terminated with a zero unless the length is greater than comm_max.  When any\n   of extra, name, or comment are not Z_NULL and the respective field is not\n   present in the header, then that field is set to Z_NULL to signal its\n   absence.  This allows the use of deflateSetHeader() with the returned\n   structure to duplicate the header.  However if those fields are set to\n   allocated memory, then the application will need to save those pointers\n   elsewhere so that they can be eventually freed.\n\n     If inflateGetHeader is not used, then the header information is simply\n   discarded.  The header is always checked for validity, including the header\n   CRC if present.  inflateReset() will reset the process to discard the header\n   information.  The application would need to call inflateGetHeader() again to\n   retrieve the header from the next gzip stream.\n\n     inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source\n   stream state was inconsistent.\n*/\n\n/*\nZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits,\n                                        unsigned char FAR *window));\n\n     Initialize the internal stream state for decompression using inflateBack()\n   calls.  The fields zalloc, zfree and opaque in strm must be initialized\n   before the call.  If zalloc and zfree are Z_NULL, then the default library-\n   derived memory allocation routines are used.  windowBits is the base two\n   logarithm of the window size, in the range 8..15.  window is a caller\n   supplied buffer of that size.  Except for special applications where it is\n   assured that deflate was used with small window sizes, windowBits must be 15\n   and a 32K byte window must be supplied to be able to decompress general\n   deflate streams.\n\n     See inflateBack() for the usage of these routines.\n\n     inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of\n   the paramaters are invalid, Z_MEM_ERROR if the internal state could not be\n   allocated, or Z_VERSION_ERROR if the version of the library does not match\n   the version of the header file.\n*/\n\ntypedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *));\ntypedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned));\n\nZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,\n                                    in_func in, void FAR *in_desc,\n                                    out_func out, void FAR *out_desc));\n/*\n     inflateBack() does a raw inflate with a single call using a call-back\n   interface for input and output.  This is more efficient than inflate() for\n   file i/o applications in that it avoids copying between the output and the\n   sliding window by simply making the window itself the output buffer.  This\n   function trusts the application to not change the output buffer passed by\n   the output function, at least until inflateBack() returns.\n\n     inflateBackInit() must be called first to allocate the internal state\n   and to initialize the state with the user-provided window buffer.\n   inflateBack() may then be used multiple times to inflate a complete, raw\n   deflate stream with each call.  inflateBackEnd() is then called to free the\n   allocated state.\n\n     A raw deflate stream is one with no zlib or gzip header or trailer.\n   This routine would normally be used in a utility that reads zip or gzip\n   files and writes out uncompressed files.  The utility would decode the\n   header and process the trailer on its own, hence this routine expects only\n   the raw deflate stream to decompress.  This is different from the normal\n   behavior of inflate(), which expects either a zlib or gzip header and\n   trailer around the deflate stream.\n\n     inflateBack() uses two subroutines supplied by the caller that are then\n   called by inflateBack() for input and output.  inflateBack() calls those\n   routines until it reads a complete deflate stream and writes out all of the\n   uncompressed data, or until it encounters an error.  The function's\n   parameters and return types are defined above in the in_func and out_func\n   typedefs.  inflateBack() will call in(in_desc, &buf) which should return the\n   number of bytes of provided input, and a pointer to that input in buf.  If\n   there is no input available, in() must return zero--buf is ignored in that\n   case--and inflateBack() will return a buffer error.  inflateBack() will call\n   out(out_desc, buf, len) to write the uncompressed data buf[0..len-1].  out()\n   should return zero on success, or non-zero on failure.  If out() returns\n   non-zero, inflateBack() will return with an error.  Neither in() nor out()\n   are permitted to change the contents of the window provided to\n   inflateBackInit(), which is also the buffer that out() uses to write from.\n   The length written by out() will be at most the window size.  Any non-zero\n   amount of input may be provided by in().\n\n     For convenience, inflateBack() can be provided input on the first call by\n   setting strm->next_in and strm->avail_in.  If that input is exhausted, then\n   in() will be called.  Therefore strm->next_in must be initialized before\n   calling inflateBack().  If strm->next_in is Z_NULL, then in() will be called\n   immediately for input.  If strm->next_in is not Z_NULL, then strm->avail_in\n   must also be initialized, and then if strm->avail_in is not zero, input will\n   initially be taken from strm->next_in[0 ..  strm->avail_in - 1].\n\n     The in_desc and out_desc parameters of inflateBack() is passed as the\n   first parameter of in() and out() respectively when they are called.  These\n   descriptors can be optionally used to pass any information that the caller-\n   supplied in() and out() functions need to do their job.\n\n     On return, inflateBack() will set strm->next_in and strm->avail_in to\n   pass back any unused input that was provided by the last in() call.  The\n   return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR\n   if in() or out() returned an error, Z_DATA_ERROR if there was a format error\n   in the deflate stream (in which case strm->msg is set to indicate the nature\n   of the error), or Z_STREAM_ERROR if the stream was not properly initialized.\n   In the case of Z_BUF_ERROR, an input or output error can be distinguished\n   using strm->next_in which will be Z_NULL only if in() returned an error.  If\n   strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning\n   non-zero.  (in() will always be called before out(), so strm->next_in is\n   assured to be defined if out() returns non-zero.) Note that inflateBack()\n   cannot return Z_OK.\n*/\n\nZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm));\n/*\n     All memory allocated by inflateBackInit() is freed.\n\n     inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream\n   state was inconsistent.\n*/\n\nZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));\n/* Return flags indicating compile-time options.\n\n    Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other:\n     1.0: size of uInt\n     3.2: size of uLong\n     5.4: size of voidpf (pointer)\n     7.6: size of z_off_t\n\n    Compiler, assembler, and debug options:\n     8: DEBUG\n     9: ASMV or ASMINF -- use ASM code\n     10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention\n     11: 0 (reserved)\n\n    One-time table building (smaller code, but not thread-safe if true):\n     12: BUILDFIXED -- build static block decoding tables when needed\n     13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed\n     14,15: 0 (reserved)\n\n    Library content (indicates missing functionality):\n     16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking\n                          deflate code when not needed)\n     17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect\n                    and decode gzip streams (to avoid linking crc code)\n     18-19: 0 (reserved)\n\n    Operation variations (changes in library functionality):\n     20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate\n     21: FASTEST -- deflate algorithm with only one, lowest compression level\n     22,23: 0 (reserved)\n\n    The sprintf variant used by gzprintf (zero is best):\n     24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format\n     25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure!\n     26: 0 = returns value, 1 = void -- 1 means inferred string length returned\n\n    Remainder:\n     27-31: 0 (reserved)\n */\n\n\n                        /* utility functions */\n\n/*\n     The following utility functions are implemented on top of the basic\n   stream-oriented functions.  To simplify the interface, some default options\n   are assumed (compression level and memory usage, standard memory allocation\n   functions).  The source code of these utility functions can be modified if\n   you need special options.\n*/\n\nZEXTERN int ZEXPORT compress OF((Bytef *dest,   uLongf *destLen,\n                                 const Bytef *source, uLong sourceLen));\n/*\n     Compresses the source buffer into the destination buffer.  sourceLen is\n   the byte length of the source buffer.  Upon entry, destLen is the total size\n   of the destination buffer, which must be at least the value returned by\n   compressBound(sourceLen).  Upon exit, destLen is the actual size of the\n   compressed buffer.\n\n     compress returns Z_OK if success, Z_MEM_ERROR if there was not\n   enough memory, Z_BUF_ERROR if there was not enough room in the output\n   buffer.\n*/\n\nZEXTERN int ZEXPORT compress2 OF((Bytef *dest,   uLongf *destLen,\n                                  const Bytef *source, uLong sourceLen,\n                                  int level));\n/*\n     Compresses the source buffer into the destination buffer.  The level\n   parameter has the same meaning as in deflateInit.  sourceLen is the byte\n   length of the source buffer.  Upon entry, destLen is the total size of the\n   destination buffer, which must be at least the value returned by\n   compressBound(sourceLen).  Upon exit, destLen is the actual size of the\n   compressed buffer.\n\n     compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough\n   memory, Z_BUF_ERROR if there was not enough room in the output buffer,\n   Z_STREAM_ERROR if the level parameter is invalid.\n*/\n\nZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen));\n/*\n     compressBound() returns an upper bound on the compressed size after\n   compress() or compress2() on sourceLen bytes.  It would be used before a\n   compress() or compress2() call to allocate the destination buffer.\n*/\n\nZEXTERN int ZEXPORT uncompress OF((Bytef *dest,   uLongf *destLen,\n                                   const Bytef *source, uLong sourceLen));\n/*\n     Decompresses the source buffer into the destination buffer.  sourceLen is\n   the byte length of the source buffer.  Upon entry, destLen is the total size\n   of the destination buffer, which must be large enough to hold the entire\n   uncompressed data.  (The size of the uncompressed data must have been saved\n   previously by the compressor and transmitted to the decompressor by some\n   mechanism outside the scope of this compression library.) Upon exit, destLen\n   is the actual size of the uncompressed buffer.\n\n     uncompress returns Z_OK if success, Z_MEM_ERROR if there was not\n   enough memory, Z_BUF_ERROR if there was not enough room in the output\n   buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete.\n*/\n\n\n                        /* gzip file access functions */\n\n/*\n     This library supports reading and writing files in gzip (.gz) format with\n   an interface similar to that of stdio, using the functions that start with\n   \"gz\".  The gzip format is different from the zlib format.  gzip is a gzip\n   wrapper, documented in RFC 1952, wrapped around a deflate stream.\n*/\n\ntypedef voidp gzFile;       /* opaque gzip file descriptor */\n\n/*\nZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));\n\n     Opens a gzip (.gz) file for reading or writing.  The mode parameter is as\n   in fopen (\"rb\" or \"wb\") but can also include a compression level (\"wb9\") or\n   a strategy: 'f' for filtered data as in \"wb6f\", 'h' for Huffman-only\n   compression as in \"wb1h\", 'R' for run-length encoding as in \"wb1R\", or 'F'\n   for fixed code compression as in \"wb9F\".  (See the description of\n   deflateInit2 for more information about the strategy parameter.) Also \"a\"\n   can be used instead of \"w\" to request that the gzip stream that will be\n   written be appended to the file.  \"+\" will result in an error, since reading\n   and writing to the same gzip file is not supported.\n\n     gzopen can be used to read a file which is not in gzip format; in this\n   case gzread will directly read from the file without decompression.\n\n     gzopen returns NULL if the file could not be opened, if there was\n   insufficient memory to allocate the gzFile state, or if an invalid mode was\n   specified (an 'r', 'w', or 'a' was not provided, or '+' was provided).\n   errno can be checked to determine if the reason gzopen failed was that the\n   file could not be opened.\n*/\n\nZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));\n/*\n     gzdopen associates a gzFile with the file descriptor fd.  File descriptors\n   are obtained from calls like open, dup, creat, pipe or fileno (if the file\n   has been previously opened with fopen).  The mode parameter is as in gzopen.\n\n     The next call of gzclose on the returned gzFile will also close the file\n   descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor\n   fd.  If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd,\n   mode);.  The duplicated descriptor should be saved to avoid a leak, since\n   gzdopen does not close fd if it fails.\n\n     gzdopen returns NULL if there was insufficient memory to allocate the\n   gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not\n   provided, or '+' was provided), or if fd is -1.  The file descriptor is not\n   used until the next gz* read, write, seek, or close operation, so gzdopen\n   will not detect if fd is invalid (unless fd is -1).\n*/\n\nZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));\n/*\n     Set the internal buffer size used by this library's functions.  The\n   default buffer size is 8192 bytes.  This function must be called after\n   gzopen() or gzdopen(), and before any other calls that read or write the\n   file.  The buffer memory allocation is always deferred to the first read or\n   write.  Two buffers are allocated, either both of the specified size when\n   writing, or one of the specified size and the other twice that size when\n   reading.  A larger buffer size of, for example, 64K or 128K bytes will\n   noticeably increase the speed of decompression (reading).\n\n     The new buffer size also affects the maximum length for gzprintf().\n\n     gzbuffer() returns 0 on success, or -1 on failure, such as being called\n   too late.\n*/\n\nZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));\n/*\n     Dynamically update the compression level or strategy.  See the description\n   of deflateInit2 for the meaning of these parameters.\n\n     gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not\n   opened for writing.\n*/\n\nZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));\n/*\n     Reads the given number of uncompressed bytes from the compressed file.  If\n   the input file was not in gzip format, gzread copies the given number of\n   bytes into the buffer.\n\n     After reaching the end of a gzip stream in the input, gzread will continue\n   to read, looking for another gzip stream, or failing that, reading the rest\n   of the input file directly without decompression.  The entire input file\n   will be read if gzread is called until it returns less than the requested\n   len.\n\n     gzread returns the number of uncompressed bytes actually read, less than\n   len for end of file, or -1 for error.\n*/\n\nZEXTERN int ZEXPORT gzwrite OF((gzFile file,\n                                voidpc buf, unsigned len));\n/*\n     Writes the given number of uncompressed bytes into the compressed file.\n   gzwrite returns the number of uncompressed bytes written or 0 in case of\n   error.\n*/\n\nZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...));\n/*\n     Converts, formats, and writes the arguments to the compressed file under\n   control of the format string, as in fprintf.  gzprintf returns the number of\n   uncompressed bytes actually written, or 0 in case of error.  The number of\n   uncompressed bytes written is limited to 8191, or one less than the buffer\n   size given to gzbuffer().  The caller should assure that this limit is not\n   exceeded.  If it is exceeded, then gzprintf() will return an error (0) with\n   nothing written.  In this case, there may also be a buffer overflow with\n   unpredictable consequences, which is possible only if zlib was compiled with\n   the insecure functions sprintf() or vsprintf() because the secure snprintf()\n   or vsnprintf() functions were not available.  This can be determined using\n   zlibCompileFlags().\n*/\n\nZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));\n/*\n     Writes the given null-terminated string to the compressed file, excluding\n   the terminating null character.\n\n     gzputs returns the number of characters written, or -1 in case of error.\n*/\n\nZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));\n/*\n     Reads bytes from the compressed file until len-1 characters are read, or a\n   newline character is read and transferred to buf, or an end-of-file\n   condition is encountered.  If any characters are read or if len == 1, the\n   string is terminated with a null character.  If no characters are read due\n   to an end-of-file or len < 1, then the buffer is left untouched.\n\n     gzgets returns buf which is a null-terminated string, or it returns NULL\n   for end-of-file or in case of error.  If there was an error, the contents at\n   buf are indeterminate.\n*/\n\nZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));\n/*\n     Writes c, converted to an unsigned char, into the compressed file.  gzputc\n   returns the value that was written, or -1 in case of error.\n*/\n\nZEXTERN int ZEXPORT gzgetc OF((gzFile file));\n/*\n     Reads one byte from the compressed file.  gzgetc returns this byte or -1\n   in case of end of file or error.\n*/\n\nZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file));\n/*\n     Push one character back onto the stream to be read as the first character\n   on the next read.  At least one character of push-back is allowed.\n   gzungetc() returns the character pushed, or -1 on failure.  gzungetc() will\n   fail if c is -1, and may fail if a character has been pushed but not read\n   yet.  If gzungetc is used immediately after gzopen or gzdopen, at least the\n   output buffer size of pushed characters is allowed.  (See gzbuffer above.)\n   The pushed character will be discarded if the stream is repositioned with\n   gzseek() or gzrewind().\n*/\n\nZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));\n/*\n     Flushes all pending output into the compressed file.  The parameter flush\n   is as in the deflate() function.  The return value is the zlib error number\n   (see function gzerror below).  gzflush is only permitted when writing.\n\n     If the flush parameter is Z_FINISH, the remaining data is written and the\n   gzip stream is completed in the output.  If gzwrite() is called again, a new\n   gzip stream will be started in the output.  gzread() is able to read such\n   concatented gzip streams.\n\n     gzflush should be called only when strictly necessary because it will\n   degrade compression if called too often.\n*/\n\n/*\nZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,\n                                   z_off_t offset, int whence));\n\n     Sets the starting position for the next gzread or gzwrite on the given\n   compressed file.  The offset represents a number of bytes in the\n   uncompressed data stream.  The whence parameter is defined as in lseek(2);\n   the value SEEK_END is not supported.\n\n     If the file is opened for reading, this function is emulated but can be\n   extremely slow.  If the file is opened for writing, only forward seeks are\n   supported; gzseek then compresses a sequence of zeroes up to the new\n   starting position.\n\n     gzseek returns the resulting offset location as measured in bytes from\n   the beginning of the uncompressed stream, or -1 in case of error, in\n   particular if the file is opened for writing and the new starting position\n   would be before the current position.\n*/\n\nZEXTERN int ZEXPORT    gzrewind OF((gzFile file));\n/*\n     Rewinds the given file. This function is supported only for reading.\n\n     gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)\n*/\n\n/*\nZEXTERN z_off_t ZEXPORT    gztell OF((gzFile file));\n\n     Returns the starting position for the next gzread or gzwrite on the given\n   compressed file.  This position represents a number of bytes in the\n   uncompressed data stream, and is zero when starting, even if appending or\n   reading a gzip stream from the middle of a file using gzdopen().\n\n     gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)\n*/\n\n/*\nZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file));\n\n     Returns the current offset in the file being read or written.  This offset\n   includes the count of bytes that precede the gzip stream, for example when\n   appending or when using gzdopen() for reading.  When reading, the offset\n   does not include as yet unused buffered input.  This information can be used\n   for a progress indicator.  On error, gzoffset() returns -1.\n*/\n\nZEXTERN int ZEXPORT gzeof OF((gzFile file));\n/*\n     Returns true (1) if the end-of-file indicator has been set while reading,\n   false (0) otherwise.  Note that the end-of-file indicator is set only if the\n   read tried to go past the end of the input, but came up short.  Therefore,\n   just like feof(), gzeof() may return false even if there is no more data to\n   read, in the event that the last read request was for the exact number of\n   bytes remaining in the input file.  This will happen if the input file size\n   is an exact multiple of the buffer size.\n\n     If gzeof() returns true, then the read functions will return no more data,\n   unless the end-of-file indicator is reset by gzclearerr() and the input file\n   has grown since the previous end of file was detected.\n*/\n\nZEXTERN int ZEXPORT gzdirect OF((gzFile file));\n/*\n     Returns true (1) if file is being copied directly while reading, or false\n   (0) if file is a gzip stream being decompressed.  This state can change from\n   false to true while reading the input file if the end of a gzip stream is\n   reached, but is followed by data that is not another gzip stream.\n\n     If the input file is empty, gzdirect() will return true, since the input\n   does not contain a gzip stream.\n\n     If gzdirect() is used immediately after gzopen() or gzdopen() it will\n   cause buffers to be allocated to allow reading the file to determine if it\n   is a gzip file.  Therefore if gzbuffer() is used, it should be called before\n   gzdirect().\n*/\n\nZEXTERN int ZEXPORT    gzclose OF((gzFile file));\n/*\n     Flushes all pending output if necessary, closes the compressed file and\n   deallocates the (de)compression state.  Note that once file is closed, you\n   cannot call gzerror with file, since its structures have been deallocated.\n   gzclose must not be called more than once on the same file, just as free\n   must not be called more than once on the same allocation.\n\n     gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a\n   file operation error, or Z_OK on success.\n*/\n\nZEXTERN int ZEXPORT gzclose_r OF((gzFile file));\nZEXTERN int ZEXPORT gzclose_w OF((gzFile file));\n/*\n     Same as gzclose(), but gzclose_r() is only for use when reading, and\n   gzclose_w() is only for use when writing or appending.  The advantage to\n   using these instead of gzclose() is that they avoid linking in zlib\n   compression or decompression code that is not used when only reading or only\n   writing respectively.  If gzclose() is used, then both compression and\n   decompression code will be included the application when linking to a static\n   zlib library.\n*/\n\nZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));\n/*\n     Returns the error message for the last error which occurred on the given\n   compressed file.  errnum is set to zlib error number.  If an error occurred\n   in the file system and not in the compression library, errnum is set to\n   Z_ERRNO and the application may consult errno to get the exact error code.\n\n     The application must not modify the returned string.  Future calls to\n   this function may invalidate the previously returned string.  If file is\n   closed, then the string previously returned by gzerror will no longer be\n   available.\n\n     gzerror() should be used to distinguish errors from end-of-file for those\n   functions above that do not distinguish those cases in their return values.\n*/\n\nZEXTERN void ZEXPORT gzclearerr OF((gzFile file));\n/*\n     Clears the error and end-of-file flags for file.  This is analogous to the\n   clearerr() function in stdio.  This is useful for continuing to read a gzip\n   file that is being written concurrently.\n*/\n\n\n                        /* checksum functions */\n\n/*\n     These functions are not related to compression but are exported\n   anyway because they might be useful in applications using the compression\n   library.\n*/\n\nZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));\n/*\n     Update a running Adler-32 checksum with the bytes buf[0..len-1] and\n   return the updated checksum.  If buf is Z_NULL, this function returns the\n   required initial value for the checksum.\n\n     An Adler-32 checksum is almost as reliable as a CRC32 but can be computed\n   much faster.\n\n   Usage example:\n\n     uLong adler = adler32(0L, Z_NULL, 0);\n\n     while (read_buffer(buffer, length) != EOF) {\n       adler = adler32(adler, buffer, length);\n     }\n     if (adler != original_adler) error();\n*/\n\n/*\nZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2,\n                                          z_off_t len2));\n\n     Combine two Adler-32 checksums into one.  For two sequences of bytes, seq1\n   and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for\n   each, adler1 and adler2.  adler32_combine() returns the Adler-32 checksum of\n   seq1 and seq2 concatenated, requiring only adler1, adler2, and len2.\n*/\n\nZEXTERN uLong ZEXPORT crc32   OF((uLong crc, const Bytef *buf, uInt len));\n/*\n     Update a running CRC-32 with the bytes buf[0..len-1] and return the\n   updated CRC-32.  If buf is Z_NULL, this function returns the required\n   initial value for the for the crc.  Pre- and post-conditioning (one's\n   complement) is performed within this function so it shouldn't be done by the\n   application.\n\n   Usage example:\n\n     uLong crc = crc32(0L, Z_NULL, 0);\n\n     while (read_buffer(buffer, length) != EOF) {\n       crc = crc32(crc, buffer, length);\n     }\n     if (crc != original_crc) error();\n*/\n\n/*\nZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2));\n\n     Combine two CRC-32 check values into one.  For two sequences of bytes,\n   seq1 and seq2 with lengths len1 and len2, CRC-32 check values were\n   calculated for each, crc1 and crc2.  crc32_combine() returns the CRC-32\n   check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and\n   len2.\n*/\n\n\n                        /* various hacks, don't look :) */\n\n/* deflateInit and inflateInit are macros to allow checking the zlib version\n * and the compiler's view of z_stream:\n */\nZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level,\n                                     const char *version, int stream_size));\nZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm,\n                                     const char *version, int stream_size));\nZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int  level, int  method,\n                                      int windowBits, int memLevel,\n                                      int strategy, const char *version,\n                                      int stream_size));\nZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int  windowBits,\n                                      const char *version, int stream_size));\nZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,\n                                         unsigned char FAR *window,\n                                         const char *version,\n                                         int stream_size));\n#define deflateInit(strm, level) \\\n        deflateInit_((strm), (level),       ZLIB_VERSION, sizeof(z_stream))\n#define inflateInit(strm) \\\n        inflateInit_((strm),                ZLIB_VERSION, sizeof(z_stream))\n#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \\\n        deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\\\n                      (strategy),           ZLIB_VERSION, sizeof(z_stream))\n#define inflateInit2(strm, windowBits) \\\n        inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))\n#define inflateBackInit(strm, windowBits, window) \\\n        inflateBackInit_((strm), (windowBits), (window), \\\n                                            ZLIB_VERSION, sizeof(z_stream))\n\n/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or\n * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if\n * both are true, the application gets the *64 functions, and the regular\n * functions are changed to 64 bits) -- in case these are set on systems\n * without large file support, _LFS64_LARGEFILE must also be true\n */\n#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0\n   ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));\n   ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));\n   ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));\n   ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));\n   ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t));\n   ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t));\n#endif\n\n#if !defined(ZLIB_INTERNAL) && _FILE_OFFSET_BITS-0 == 64 && _LFS64_LARGEFILE-0\n#  define gzopen gzopen64\n#  define gzseek gzseek64\n#  define gztell gztell64\n#  define gzoffset gzoffset64\n#  define adler32_combine adler32_combine64\n#  define crc32_combine crc32_combine64\n#  ifdef _LARGEFILE64_SOURCE\n     ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));\n     ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int));\n     ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile));\n     ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile));\n     ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));\n     ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));\n#  endif\n#else\n   ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *));\n   ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int));\n   ZEXTERN z_off_t ZEXPORT gztell OF((gzFile));\n   ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile));\n   ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));\n   ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));\n#endif\n\n/* hack for buggy compilers */\n#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)\n    struct internal_state {int dummy;};\n#endif\n\n/* undocumented functions */\nZEXTERN const char   * ZEXPORT zError           OF((int));\nZEXTERN int            ZEXPORT inflateSyncPoint OF((z_streamp));\nZEXTERN const uLongf * ZEXPORT get_crc_table    OF((void));\nZEXTERN int            ZEXPORT inflateUndermine OF((z_streamp, int));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* ZLIB_H */\n"
  },
  {
    "path": "external/zlib/zlib.pc.in",
    "content": "prefix=@prefix@\nexec_prefix=@exec_prefix@\nlibdir=@libdir@\nsharedlibdir=@sharedlibdir@\nincludedir=@includedir@\n\nName: zlib\nDescription: zlib compression library\nVersion: @VERSION@\n\nRequires:\nLibs: -L${libdir} -L${sharedlibdir} -lz\nCflags: -I${includedir}\n"
  },
  {
    "path": "external/zlib/zlib2ansi",
    "content": "#!/usr/bin/perl\n\n# Transform K&R C function definitions into ANSI equivalent.\n#\n# Author: Paul Marquess\n# Version: 1.0\n# Date: 3 October 2006\n\n# TODO\n#\n# Asumes no function pointer parameters. unless they are typedefed.\n# Assumes no literal strings that look like function definitions\n# Assumes functions start at the beginning of a line\n\nuse strict;\nuse warnings;\n\nlocal $/;\n$_ = <>;\n\nmy $sp = qr{ \\s* (?: /\\* .*? \\*/ )? \\s* }x; # assume no nested comments\n\nmy $d1    = qr{ $sp (?: [\\w\\*\\s]+ $sp)* $sp \\w+ $sp [\\[\\]\\s]* $sp }x ;\nmy $decl  = qr{ $sp (?: \\w+ $sp )+ $d1 }xo ;\nmy $dList = qr{ $sp $decl (?: $sp , $d1 )* $sp ; $sp }xo ;\n\n\nwhile (s/^\n            (                  # Start $1\n                (              #   Start $2\n                    .*?        #     Minimal eat content\n                    ( ^ \\w [\\w\\s\\*]+ )    #     $3 -- function name\n                    \\s*        #     optional whitespace\n                )              # $2 - Matched up to before parameter list\n\n                \\( \\s*         # Literal \"(\" + optional whitespace\n                ( [^\\)]+ )     # $4 - one or more anythings except \")\"\n                \\s* \\)         # optional whitespace surrounding a Literal \")\"\n\n                ( (?: $dList )+ ) # $5\n\n                $sp ^ {        # literal \"{\" at start of line\n            )                  # Remember to $1\n        //xsom\n      )\n{\n    my $all = $1 ;\n    my $prefix = $2;\n    my $param_list = $4 ;\n    my $params = $5;\n\n    StripComments($params);\n    StripComments($param_list);\n    $param_list =~ s/^\\s+//;\n    $param_list =~ s/\\s+$//;\n\n    my $i = 0 ;\n    my %pList = map { $_ => $i++ }\n                split /\\s*,\\s*/, $param_list;\n    my $pMatch = '(\\b' . join('|', keys %pList) . '\\b)\\W*$' ;\n\n    my @params = split /\\s*;\\s*/, $params;\n    my @outParams = ();\n    foreach my $p (@params)\n    {\n        if ($p =~ /,/)\n        {\n            my @bits = split /\\s*,\\s*/, $p;\n            my $first = shift @bits;\n            $first =~ s/^\\s*//;\n            push @outParams, $first;\n            $first =~ /^(\\w+\\s*)/;\n            my $type = $1 ;\n            push @outParams, map { $type . $_ } @bits;\n        }\n        else\n        {\n            $p =~ s/^\\s+//;\n            push @outParams, $p;\n        }\n    }\n\n\n    my %tmp = map { /$pMatch/;  $_ => $pList{$1}  }\n              @outParams ;\n\n    @outParams = map  { \"    $_\" }\n                 sort { $tmp{$a} <=> $tmp{$b} }\n                 @outParams ;\n\n    print $prefix ;\n    print \"(\\n\" . join(\",\\n\", @outParams) . \")\\n\";\n    print \"{\" ;\n\n}\n\n# Output any trailing code.\nprint ;\nexit 0;\n\n\nsub StripComments\n{\n\n  no warnings;\n\n  # Strip C & C++ coments\n  # From the perlfaq\n  $_[0] =~\n\n    s{\n       /\\*         ##  Start of /* ... */ comment\n       [^*]*\\*+    ##  Non-* followed by 1-or-more *'s\n       (\n         [^/*][^*]*\\*+\n       )*          ##  0-or-more things which don't start with /\n                   ##    but do end with '*'\n       /           ##  End of /* ... */ comment\n\n     |         ##     OR  C++ Comment\n       //          ## Start of C++ comment //\n       [^\\n]*      ## followed by 0-or-more non end of line characters\n\n     |         ##     OR  various things which aren't comments:\n\n       (\n         \"           ##  Start of \" ... \" string\n         (\n           \\\\.           ##  Escaped char\n         |               ##    OR\n           [^\"\\\\]        ##  Non \"\\\n         )*\n         \"           ##  End of \" ... \" string\n\n       |         ##     OR\n\n         '           ##  Start of ' ... ' string\n         (\n           \\\\.           ##  Escaped char\n         |               ##    OR\n           [^'\\\\]        ##  Non '\\\n         )*\n         '           ##  End of ' ... ' string\n\n       |         ##     OR\n\n         .           ##  Anything other char\n         [^/\"'\\\\]*   ##  Chars which doesn't start a comment, string or escape\n       )\n     }{$2}gxs;\n\n}\n"
  },
  {
    "path": "external/zlib/zutil.c",
    "content": "/* zutil.c -- target dependent utility functions for the compression library\n * Copyright (C) 1995-2005, 2010 Jean-loup Gailly.\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n/* @(#) $Id$ */\n\n#include \"zutil.h\"\n\n#ifndef NO_DUMMY_DECL\nstruct internal_state      {int dummy;}; /* for buggy compilers */\n#endif\n\nconst char * const z_errmsg[10] = {\n\"need dictionary\",     /* Z_NEED_DICT       2  */\n\"stream end\",          /* Z_STREAM_END      1  */\n\"\",                    /* Z_OK              0  */\n\"file error\",          /* Z_ERRNO         (-1) */\n\"stream error\",        /* Z_STREAM_ERROR  (-2) */\n\"data error\",          /* Z_DATA_ERROR    (-3) */\n\"insufficient memory\", /* Z_MEM_ERROR     (-4) */\n\"buffer error\",        /* Z_BUF_ERROR     (-5) */\n\"incompatible version\",/* Z_VERSION_ERROR (-6) */\n\"\"};\n\n\nconst char * ZEXPORT zlibVersion()\n{\n    return ZLIB_VERSION;\n}\n\nuLong ZEXPORT zlibCompileFlags()\n{\n    uLong flags;\n\n    flags = 0;\n    switch ((int)(sizeof(uInt))) {\n    case 2:     break;\n    case 4:     flags += 1;     break;\n    case 8:     flags += 2;     break;\n    default:    flags += 3;\n    }\n    switch ((int)(sizeof(uLong))) {\n    case 2:     break;\n    case 4:     flags += 1 << 2;        break;\n    case 8:     flags += 2 << 2;        break;\n    default:    flags += 3 << 2;\n    }\n    switch ((int)(sizeof(voidpf))) {\n    case 2:     break;\n    case 4:     flags += 1 << 4;        break;\n    case 8:     flags += 2 << 4;        break;\n    default:    flags += 3 << 4;\n    }\n    switch ((int)(sizeof(z_off_t))) {\n    case 2:     break;\n    case 4:     flags += 1 << 6;        break;\n    case 8:     flags += 2 << 6;        break;\n    default:    flags += 3 << 6;\n    }\n#ifdef DEBUG\n    flags += 1 << 8;\n#endif\n#if defined(ASMV) || defined(ASMINF)\n    flags += 1 << 9;\n#endif\n#ifdef ZLIB_WINAPI\n    flags += 1 << 10;\n#endif\n#ifdef BUILDFIXED\n    flags += 1 << 12;\n#endif\n#ifdef DYNAMIC_CRC_TABLE\n    flags += 1 << 13;\n#endif\n#ifdef NO_GZCOMPRESS\n    flags += 1L << 16;\n#endif\n#ifdef NO_GZIP\n    flags += 1L << 17;\n#endif\n#ifdef PKZIP_BUG_WORKAROUND\n    flags += 1L << 20;\n#endif\n#ifdef FASTEST\n    flags += 1L << 21;\n#endif\n#ifdef STDC\n#  ifdef NO_vsnprintf\n        flags += 1L << 25;\n#    ifdef HAS_vsprintf_void\n        flags += 1L << 26;\n#    endif\n#  else\n#    ifdef HAS_vsnprintf_void\n        flags += 1L << 26;\n#    endif\n#  endif\n#else\n        flags += 1L << 24;\n#  ifdef NO_snprintf\n        flags += 1L << 25;\n#    ifdef HAS_sprintf_void\n        flags += 1L << 26;\n#    endif\n#  else\n#    ifdef HAS_snprintf_void\n        flags += 1L << 26;\n#    endif\n#  endif\n#endif\n    return flags;\n}\n\n#ifdef DEBUG\n\n#  ifndef verbose\n#    define verbose 0\n#  endif\nint ZLIB_INTERNAL z_verbose = verbose;\n\nvoid ZLIB_INTERNAL z_error (m)\n    char *m;\n{\n    fprintf(stderr, \"%s\\n\", m);\n    exit(1);\n}\n#endif\n\n/* exported to allow conversion of error code to string for compress() and\n * uncompress()\n */\nconst char * ZEXPORT zError(err)\n    int err;\n{\n    return ERR_MSG(err);\n}\n\n#if defined(_WIN32_WCE)\n    /* The Microsoft C Run-Time Library for Windows CE doesn't have\n     * errno.  We define it as a global variable to simplify porting.\n     * Its value is always 0 and should not be used.\n     */\n    int errno = 0;\n#endif\n\n#ifndef HAVE_MEMCPY\n\nvoid ZLIB_INTERNAL zmemcpy(dest, source, len)\n    Bytef* dest;\n    const Bytef* source;\n    uInt  len;\n{\n    if (len == 0) return;\n    do {\n        *dest++ = *source++; /* ??? to be unrolled */\n    } while (--len != 0);\n}\n\nint ZLIB_INTERNAL zmemcmp(s1, s2, len)\n    const Bytef* s1;\n    const Bytef* s2;\n    uInt  len;\n{\n    uInt j;\n\n    for (j = 0; j < len; j++) {\n        if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1;\n    }\n    return 0;\n}\n\nvoid ZLIB_INTERNAL zmemzero(dest, len)\n    Bytef* dest;\n    uInt  len;\n{\n    if (len == 0) return;\n    do {\n        *dest++ = 0;  /* ??? to be unrolled */\n    } while (--len != 0);\n}\n#endif\n\n\n#ifdef SYS16BIT\n\n#ifdef __TURBOC__\n/* Turbo C in 16-bit mode */\n\n#  define MY_ZCALLOC\n\n/* Turbo C malloc() does not allow dynamic allocation of 64K bytes\n * and farmalloc(64K) returns a pointer with an offset of 8, so we\n * must fix the pointer. Warning: the pointer must be put back to its\n * original form in order to free it, use zcfree().\n */\n\n#define MAX_PTR 10\n/* 10*64K = 640K */\n\nlocal int next_ptr = 0;\n\ntypedef struct ptr_table_s {\n    voidpf org_ptr;\n    voidpf new_ptr;\n} ptr_table;\n\nlocal ptr_table table[MAX_PTR];\n/* This table is used to remember the original form of pointers\n * to large buffers (64K). Such pointers are normalized with a zero offset.\n * Since MSDOS is not a preemptive multitasking OS, this table is not\n * protected from concurrent access. This hack doesn't work anyway on\n * a protected system like OS/2. Use Microsoft C instead.\n */\n\nvoidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)\n{\n    voidpf buf = opaque; /* just to make some compilers happy */\n    ulg bsize = (ulg)items*size;\n\n    /* If we allocate less than 65520 bytes, we assume that farmalloc\n     * will return a usable pointer which doesn't have to be normalized.\n     */\n    if (bsize < 65520L) {\n        buf = farmalloc(bsize);\n        if (*(ush*)&buf != 0) return buf;\n    } else {\n        buf = farmalloc(bsize + 16L);\n    }\n    if (buf == NULL || next_ptr >= MAX_PTR) return NULL;\n    table[next_ptr].org_ptr = buf;\n\n    /* Normalize the pointer to seg:0 */\n    *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4;\n    *(ush*)&buf = 0;\n    table[next_ptr++].new_ptr = buf;\n    return buf;\n}\n\nvoid ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)\n{\n    int n;\n    if (*(ush*)&ptr != 0) { /* object < 64K */\n        farfree(ptr);\n        return;\n    }\n    /* Find the original pointer */\n    for (n = 0; n < next_ptr; n++) {\n        if (ptr != table[n].new_ptr) continue;\n\n        farfree(table[n].org_ptr);\n        while (++n < next_ptr) {\n            table[n-1] = table[n];\n        }\n        next_ptr--;\n        return;\n    }\n    ptr = opaque; /* just to make some compilers happy */\n    Assert(0, \"zcfree: ptr not found\");\n}\n\n#endif /* __TURBOC__ */\n\n\n#ifdef M_I86\n/* Microsoft C in 16-bit mode */\n\n#  define MY_ZCALLOC\n\n#if (!defined(_MSC_VER) || (_MSC_VER <= 600))\n#  define _halloc  halloc\n#  define _hfree   hfree\n#endif\n\nvoidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size)\n{\n    if (opaque) opaque = 0; /* to make compiler happy */\n    return _halloc((long)items, size);\n}\n\nvoid ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)\n{\n    if (opaque) opaque = 0; /* to make compiler happy */\n    _hfree(ptr);\n}\n\n#endif /* M_I86 */\n\n#endif /* SYS16BIT */\n\n\n#ifndef MY_ZCALLOC /* Any system without a special alloc function */\n\n#ifndef STDC\nextern voidp  malloc OF((uInt size));\nextern voidp  calloc OF((uInt items, uInt size));\nextern void   free   OF((voidpf ptr));\n#endif\n\nvoidpf ZLIB_INTERNAL zcalloc (opaque, items, size)\n    voidpf opaque;\n    unsigned items;\n    unsigned size;\n{\n    if (opaque) items += size - size; /* make compiler happy */\n    return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :\n                              (voidpf)calloc(items, size);\n}\n\nvoid ZLIB_INTERNAL zcfree (opaque, ptr)\n    voidpf opaque;\n    voidpf ptr;\n{\n    free(ptr);\n    if (opaque) return; /* make compiler happy */\n}\n\n#endif /* MY_ZCALLOC */\n"
  },
  {
    "path": "external/zlib/zutil.h",
    "content": "/* zutil.h -- internal interface and configuration of the compression library\n * Copyright (C) 1995-2010 Jean-loup Gailly.\n * For conditions of distribution and use, see copyright notice in zlib.h\n */\n\n/* WARNING: this file should *not* be used by applications. It is\n   part of the implementation of the compression library and is\n   subject to change. Applications should only use zlib.h.\n */\n\n/* @(#) $Id$ */\n\n#ifndef ZUTIL_H\n#define ZUTIL_H\n\n#if ((__GNUC__-0) * 10 + __GNUC_MINOR__-0 >= 33) && !defined(NO_VIZ)\n#  define ZLIB_INTERNAL __attribute__((visibility (\"hidden\")))\n#else\n#  define ZLIB_INTERNAL\n#endif\n\n#include \"zlib.h\"\n\n#ifdef STDC\n#  if !(defined(_WIN32_WCE) && defined(_MSC_VER))\n#    include <stddef.h>\n#  endif\n#  include <string.h>\n#  include <stdlib.h>\n#endif\n\n#ifndef local\n#  define local static\n#endif\n/* compile with -Dlocal if your debugger can't find static symbols */\n\ntypedef unsigned char  uch;\ntypedef uch FAR uchf;\ntypedef unsigned short ush;\ntypedef ush FAR ushf;\ntypedef unsigned long  ulg;\n\nextern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */\n/* (size given to avoid silly warnings with Visual C++) */\n\n#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]\n\n#define ERR_RETURN(strm,err) \\\n  return (strm->msg = (char*)ERR_MSG(err), (err))\n/* To be used only when the state is known to be valid */\n\n        /* common constants */\n\n#ifndef DEF_WBITS\n#  define DEF_WBITS MAX_WBITS\n#endif\n/* default windowBits for decompression. MAX_WBITS is for compression only */\n\n#if MAX_MEM_LEVEL >= 8\n#  define DEF_MEM_LEVEL 8\n#else\n#  define DEF_MEM_LEVEL  MAX_MEM_LEVEL\n#endif\n/* default memLevel */\n\n#define STORED_BLOCK 0\n#define STATIC_TREES 1\n#define DYN_TREES    2\n/* The three kinds of block type */\n\n#define MIN_MATCH  3\n#define MAX_MATCH  258\n/* The minimum and maximum match lengths */\n\n#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */\n\n        /* target dependencies */\n\n#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32))\n#  define OS_CODE  0x00\n#  if defined(__TURBOC__) || defined(__BORLANDC__)\n#    if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))\n       /* Allow compilation with ANSI keywords only enabled */\n       void _Cdecl farfree( void *block );\n       void *_Cdecl farmalloc( unsigned long nbytes );\n#    else\n#      include <alloc.h>\n#    endif\n#  else /* MSC or DJGPP */\n#    include <malloc.h>\n#  endif\n#endif\n\n#ifdef AMIGA\n#  define OS_CODE  0x01\n#endif\n\n#if defined(VAXC) || defined(VMS)\n#  define OS_CODE  0x02\n#  define F_OPEN(name, mode) \\\n     fopen((name), (mode), \"mbc=60\", \"ctx=stm\", \"rfm=fix\", \"mrs=512\")\n#endif\n\n#if defined(ATARI) || defined(atarist)\n#  define OS_CODE  0x05\n#endif\n\n#ifdef OS2\n#  define OS_CODE  0x06\n#  ifdef M_I86\n#    include <malloc.h>\n#  endif\n#endif\n\n#if defined(MACOS) || defined(TARGET_OS_MAC)\n#  define OS_CODE  0x07\n#  if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os\n#    include <unix.h> /* for fdopen */\n#  else\n#    ifndef fdopen\n#      define fdopen(fd,mode) NULL /* No fdopen() */\n#    endif\n#  endif\n#endif\n\n#ifdef TOPS20\n#  define OS_CODE  0x0a\n#endif\n\n#ifdef WIN32\n#  ifndef __CYGWIN__  /* Cygwin is Unix, not Win32 */\n#    define OS_CODE  0x0b\n#  endif\n#endif\n\n#ifdef __50SERIES /* Prime/PRIMOS */\n#  define OS_CODE  0x0f\n#endif\n\n#if defined(_BEOS_) || defined(RISCOS)\n#  define fdopen(fd,mode) NULL /* No fdopen() */\n#endif\n\n#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX\n#  if defined(_WIN32_WCE)\n#    define fdopen(fd,mode) NULL /* No fdopen() */\n#    ifndef _PTRDIFF_T_DEFINED\n       typedef int ptrdiff_t;\n#      define _PTRDIFF_T_DEFINED\n#    endif\n#  else\n#    define fdopen(fd,type)  _fdopen(fd,type)\n#  endif\n#endif\n\n#if defined(__BORLANDC__)\n  #pragma warn -8004\n  #pragma warn -8008\n  #pragma warn -8066\n#endif\n\n/* provide prototypes for these when building zlib without LFS */\n#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0\n    ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));\n    ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));\n#endif\n\n        /* common defaults */\n\n#ifndef OS_CODE\n#  define OS_CODE  0x03  /* assume Unix */\n#endif\n\n#ifndef F_OPEN\n#  define F_OPEN(name, mode) fopen((name), (mode))\n#endif\n\n         /* functions */\n\n#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550)\n#  ifndef HAVE_VSNPRINTF\n#    define HAVE_VSNPRINTF\n#  endif\n#endif\n#if defined(__CYGWIN__)\n#  ifndef HAVE_VSNPRINTF\n#    define HAVE_VSNPRINTF\n#  endif\n#endif\n#ifndef HAVE_VSNPRINTF\n#  ifdef MSDOS\n     /* vsnprintf may exist on some MS-DOS compilers (DJGPP?),\n        but for now we just assume it doesn't. */\n#    define NO_vsnprintf\n#  endif\n#  ifdef __TURBOC__\n#    define NO_vsnprintf\n#  endif\n#  ifdef WIN32\n     /* In Win32, vsnprintf is available as the \"non-ANSI\" _vsnprintf. */\n#    if !defined(vsnprintf) && !defined(NO_vsnprintf)\n#      if !defined(_MSC_VER) || ( defined(_MSC_VER) && _MSC_VER < 1500 )\n#         define vsnprintf _vsnprintf\n#      endif\n#    endif\n#  endif\n#  ifdef __SASC\n#    define NO_vsnprintf\n#  endif\n#endif\n#ifdef VMS\n#  define NO_vsnprintf\n#endif\n\n#if defined(pyr)\n#  define NO_MEMCPY\n#endif\n#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)\n /* Use our own functions for small and medium model with MSC <= 5.0.\n  * You may have to use the same strategy for Borland C (untested).\n  * The __SC__ check is for Symantec.\n  */\n#  define NO_MEMCPY\n#endif\n#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY)\n#  define HAVE_MEMCPY\n#endif\n#ifdef HAVE_MEMCPY\n#  ifdef SMALL_MEDIUM /* MSDOS small or medium model */\n#    define zmemcpy _fmemcpy\n#    define zmemcmp _fmemcmp\n#    define zmemzero(dest, len) _fmemset(dest, 0, len)\n#  else\n#    define zmemcpy memcpy\n#    define zmemcmp memcmp\n#    define zmemzero(dest, len) memset(dest, 0, len)\n#  endif\n#else\n   void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len));\n   int ZLIB_INTERNAL zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len));\n   void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len));\n#endif\n\n/* Diagnostic functions */\n#ifdef DEBUG\n#  include <stdio.h>\n   extern int ZLIB_INTERNAL z_verbose;\n   extern void ZLIB_INTERNAL z_error OF((char *m));\n#  define Assert(cond,msg) {if(!(cond)) z_error(msg);}\n#  define Trace(x) {if (z_verbose>=0) fprintf x ;}\n#  define Tracev(x) {if (z_verbose>0) fprintf x ;}\n#  define Tracevv(x) {if (z_verbose>1) fprintf x ;}\n#  define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;}\n#  define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;}\n#else\n#  define Assert(cond,msg)\n#  define Trace(x)\n#  define Tracev(x)\n#  define Tracevv(x)\n#  define Tracec(c,x)\n#  define Tracecv(c,x)\n#endif\n\n\nvoidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items,\n                        unsigned size));\nvoid ZLIB_INTERNAL zcfree  OF((voidpf opaque, voidpf ptr));\n\n#define ZALLOC(strm, items, size) \\\n           (*((strm)->zalloc))((strm)->opaque, (items), (size))\n#define ZFREE(strm, addr)  (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))\n#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}\n\n#endif /* ZUTIL_H */\n"
  },
  {
    "path": "src/AppInfo.cpp",
    "content": "#include \"AppInfo.h\"\n\n#include \"FileUtils.h\"\n#include \"Platform.h\"\n#include \"StringUtils.h\"\n#include \"StandardDirs.h\"\n\n#include <iostream>\n\nstd::string AppInfo::logFilePath()\n{\n\treturn StandardDirs::appDataPath(organizationName(),appName())  + '/' + \"update-log.txt\";\n}\n\nstd::string AppInfo::updateErrorMessage(const std::string& details)\n{\n\tstd::string result = \"There was a problem installing the update:\\n\\n\";\n\tresult += details;\n\tresult += \"\\n\\nYou can try downloading and installing the latest version of \"\n\t          \"Mendeley Desktop from http://www.mendeley.com/download-mendeley-desktop\";\n\treturn result;\n}\n\n"
  },
  {
    "path": "src/AppInfo.h",
    "content": "#pragma once\n\n#include <string>\n\n/** This class provides project-specific updater properties,\n  * such as the name of the application being updated and\n  * the path to log details of the update install to.\n  */\nclass AppInfo\n{\n\tpublic:\n\t\t// Basic application information\n\t\tstatic std::string name();\n\t\tstatic std::string appName();\n\t\tstatic std::string organizationName();\n\n\t\tstatic std::string logFilePath();\n\n\t\t/** Returns a message to display to the user in the event\n\t\t  * of a problem installing the update.\n\t\t  */\n\t\tstatic std::string updateErrorMessage(const std::string& details);\n};\n\ninline std::string AppInfo::name()\n{\n\treturn \"Mendeley Updater\";\n}\n\ninline std::string AppInfo::appName()\n{\n\treturn \"Mendeley Desktop\";\n}\n\ninline std::string AppInfo::organizationName()\n{\n\treturn \"Mendeley Ltd.\";\n}\n\n"
  },
  {
    "path": "src/CMakeLists.txt",
    "content": "\nadd_subdirectory(tests)\n\nfind_package(Threads REQUIRED)\ninclude(GenerateCppResourceFile)\n\nif (UNIX)\n\tadd_definitions(-Wall -Werror -Wconversion)\nendif()\n\nif (UNIX AND NOT APPLE)\n\tset(LINUX TRUE)\nendif()\n\nif (LINUX)\n\tfind_package(GTK2 REQUIRED gtk)\n\tinclude_directories(${GTK2_INCLUDE_DIRS})\n\tadd_library(updatergtk SHARED UpdateDialogGtk.cpp UpdateDialogGtk.h)\n\ttarget_link_libraries(updatergtk ${GTK2_LIBRARIES})\nendif()\n\nadd_definitions(-DTIXML_USE_STL)\n\nset (SOURCES\n  AppInfo.cpp\n  DirIterator.cpp\n  FileUtils.cpp\n  Log.cpp\n  ProcessUtils.cpp\n  StandardDirs.cpp\n  UpdateDialog.cpp\n  UpdateInstaller.cpp\n  UpdateScript.cpp\n  UpdaterOptions.cpp\n)\n\nif (APPLE)\n\tset(MAC_DOCK_ICON_CPP_FILE ${CMAKE_CURRENT_BINARY_DIR}/mac_dock_icon.cpp)\n\tset(MAC_INFO_PLIST_FILE ${CMAKE_CURRENT_BINARY_DIR}/mac_info_plist.cpp)\n\tgenerate_cpp_resource_file(resource_macdockicon\n\t                           ${CMAKE_CURRENT_SOURCE_DIR}/resources\n\t                           mac.icns ${MAC_DOCK_ICON_CPP_FILE})\n\tgenerate_cpp_resource_file(resource_macplist\n\t                           ${CMAKE_CURRENT_SOURCE_DIR}/resources\n\t                           Info.plist ${MAC_INFO_PLIST_FILE})\n\tset(HEADERS ${HEADERS} MacBundle.h)\n\tset(SOURCES ${SOURCES}\n\t  MacBundle.cpp\n\t  StandardDirs.mm\n\t  UpdateDialogCocoa.mm\n\t  mac_dock_icon.cpp\n\t  mac_info_plist.cpp)\nendif()\n\nif (WIN32)\n\tset(SOURCES ${SOURCES} UpdateDialogWin32.cpp)\nendif()\n\nset (HEADERS\n  AppInfo.h\n  DirIterator.h\n  FileUtils.h\n  Log.h\n  ProcessUtils.h\n  StandardDirs.h\n  UpdateInstaller.h\n  UpdateScript.h\n  UpdaterOptions.h\n)\n\nif (UNIX)\n\tset(HEADERS ${HEADERS} UpdateDialogAscii.h)\n\tset(SOURCES ${SOURCES} UpdateDialogAscii.cpp)\nendif()\n\nif (LINUX)\n\t# embed the GTK helper library into the updater binary.\n\t# At runtime it will be extracted and loaded if the\n\t# GTK libraries are available\n\tset(GTK_UPDATER_LIB libupdatergtk.so)\n\tset(GTK_BIN_CPP_FILE ${CMAKE_CURRENT_BINARY_DIR}/libupdatergtk.cpp)\n\tgenerate_cpp_resource_file(resource_updatergtk ${CMAKE_CURRENT_BINARY_DIR} ${GTK_UPDATER_LIB} ${GTK_BIN_CPP_FILE})\n\tadd_dependencies(resource_updatergtk updatergtk)\n\n\tset(SOURCES ${SOURCES} UpdateDialogGtkFactory.cpp ${GTK_BIN_CPP_FILE})\n\tset(HEADERS ${HEADERS} UpdateDialogGtkFactory.h)\nendif()\n\nif (APPLE)\n\tset(HEADERS ${HEADERS} UpdateDialogCocoa.h)\nendif()\nif (WIN32)\n    set(HEADERS ${HEADERS} UpdateDialogWin32.h)\nendif()\n\nadd_library(updatershared\n  ${SOURCES}\n  ${HEADERS}\n)\n\ntarget_link_libraries(updatershared\n  anyoption\n  tinyxml\n  minizip\n  tinythread\n)\n\nif(LINUX)\n  add_dependencies(updatershared resource_updatergtk)\nendif()\n\nif(APPLE)\n  find_library(COCOA_LIBRARY Cocoa)\n  find_library(SECURITY_LIBRARY Security)\n  target_link_libraries(updatershared ${SECURITY_LIBRARY} ${COCOA_LIBRARY})\nendif()\n\nif (UNIX)\n  target_link_libraries(updatershared pthread)\n  if(${CMAKE_SYSTEM_NAME} STREQUAL \"Linux\")\n    target_link_libraries(updatershared dl)\n  endif()\nendif()\n\nif (WIN32)\n\tset(EXE_FLAGS WIN32 resources/updater.rc)\nendif()\n\nadd_executable(updater ${EXE_FLAGS} main.cpp)\n\ntarget_link_libraries(updater\n  updatershared\n)\n\nif (SIGN_UPDATER)\n\tadd_custom_command(TARGET updater POST_BUILD COMMAND ${BINARY_SIGNING_TOOL} $<TARGET_FILE:updater>)\nendif()\n\nadd_executable(zip-tool zip-tool.cpp)\ntarget_link_libraries(zip-tool updatershared)\n\n\n"
  },
  {
    "path": "src/DirIterator.cpp",
    "content": "#include \"DirIterator.h\"\n\n#include \"Log.h\"\n#include \"StringUtils.h\"\n\n#ifdef PLATFORM_UNIX\n #include <dirent.h>\n#endif\n\n#include <string.h>\n\nDirIterator::DirIterator(const char* path)\n{\n\tm_path = path;\n\n#ifdef PLATFORM_UNIX\n\tm_dir = opendir(path);\n\tm_entry = 0;\n#else\n\t// to list the contents of a directory, the first\n\t// argument to FindFirstFile needs to be a wildcard\n\t// of the form: C:\\path\\to\\dir\\*\n\tstd::string searchPath = m_path;\n\tif (!endsWith(searchPath,\"/\"))\n\t{\n\t\tsearchPath.append(\"/\");\n\t}\n\tsearchPath.append(\"*\");\n\tm_findHandle = FindFirstFile(searchPath.c_str(),&m_findData);\n\tm_firstEntry = true;\n#endif\n}\n\nDirIterator::~DirIterator()\n{\n#ifdef PLATFORM_UNIX\n\tclosedir(m_dir);\n#else\n\tFindClose(m_findHandle);\n#endif\n}\n\nbool DirIterator::next()\n{\n#ifdef PLATFORM_UNIX\n\tm_entry = readdir(m_dir);\n\treturn m_entry != 0;\n#else\n\tbool result;\n\tif (m_firstEntry)\n\t{\n\t\tm_firstEntry = false;\n\t\treturn m_findHandle != INVALID_HANDLE_VALUE;\n\t}\n\telse\n\t{\n\t\tresult = FindNextFile(m_findHandle,&m_findData);\n\t}\n\treturn result;\n#endif\n}\n\nstd::string DirIterator::fileName() const\n{\n#ifdef PLATFORM_UNIX\n\treturn m_entry->d_name;\n#else\n\treturn m_findData.cFileName;\n#endif\n}\n\nstd::string DirIterator::filePath() const\n{\n\treturn m_path + '/' + fileName();\n}\n\nbool DirIterator::isDir() const\n{\n#ifdef PLATFORM_UNIX\n\treturn m_entry->d_type == DT_DIR;\n#else\n\treturn (m_findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0;\n#endif\n}\n\n"
  },
  {
    "path": "src/DirIterator.h",
    "content": "#pragma once\n\n#include \"Platform.h\"\n\n#include <string>\n\n#ifdef PLATFORM_UNIX\n#include <dirent.h>\n#endif\n\n/** Simple class for iterating over the files in a directory\n  * and reporting their names and types.\n  */\nclass DirIterator\n{\n\tpublic:\n\t\tDirIterator(const char* path);\n\t\t~DirIterator();\n\n\t\t// iterate to the next entry in the directory\n\t\tbool next();\n\n\t\t// methods to return information about\n\t\t// the current entry\n\t\tstd::string fileName() const;\n\t\tstd::string filePath() const;\n\t\tbool isDir() const;\n\t\n\tprivate:\n\t\tstd::string m_path;\n\n#ifdef PLATFORM_UNIX\n\t\tDIR* m_dir;\n\t\tdirent* m_entry;\n#endif\n\n#ifdef PLATFORM_WINDOWS\n\t\tHANDLE m_findHandle;\n\t\tWIN32_FIND_DATA m_findData;\n\t\tbool m_firstEntry;\n#endif\n};\n\n"
  },
  {
    "path": "src/FileUtils.cpp",
    "content": "#include \"FileUtils.h\"\n\n#include \"DirIterator.h\"\n#include \"Log.h\"\n#include \"Platform.h\"\n#include \"StringUtils.h\"\n\n#include <algorithm>\n#include <assert.h>\n#include <string.h>\n#include <fstream>\n#include <iostream>\n\n#include \"minizip/zip.h\"\n#include \"minizip/unzip.h\"\n\n#ifdef PLATFORM_UNIX\n#include <unistd.h>\n#include <stdio.h>\n#include <fcntl.h>\n#include <sys/types.h>\n#include <sys/time.h>\n#include <sys/stat.h>\n#include <errno.h>\n#include <libgen.h>\n#endif\n\nFileUtils::IOException::IOException(const std::string& error)\n{\n\tinit(errno,error);\n}\n\nFileUtils::IOException::IOException(int errorCode, const std::string& error)\n{\n\tinit(errorCode,error);\n}\n\nvoid FileUtils::IOException::init(int errorCode, const std::string& error)\n{\n\tm_error = error;\n\n#ifdef PLATFORM_UNIX\n\tm_errorCode = errorCode;\n\n\tif (m_errorCode > 0)\n\t{\n\t\tm_error += \" details: \" + std::string(strerror(m_errorCode));\n\t}\n#endif\n\n#ifdef PLATFORM_WINDOWS\n\tm_errorCode = 0;\n\tm_error += \" GetLastError returned: \" + intToStr(GetLastError());\n#endif\n}\n\nFileUtils::IOException::~IOException() throw ()\n{\n}\n\nFileUtils::IOException::Type FileUtils::IOException::type() const\n{\n#ifdef PLATFORM_UNIX\n\tswitch (m_errorCode)\n\t{\n\t\tcase 0:\n\t\t\treturn NoError;\n\t\tcase EROFS:\n\t\t\treturn ReadOnlyFileSystem;\n\t\tcase ENOSPC:\n\t\t\treturn DiskFull;\n\t\tdefault:\n\t\t\treturn Unknown;\n\t}\n#else\n\treturn Unknown;\n#endif\n}\n\nbool FileUtils::fileExists(const char* path) throw (IOException)\n{\n#ifdef PLATFORM_UNIX\n\tstruct stat fileInfo;\n\tif (lstat(path,&fileInfo) != 0)\n\t{\n\t\tif (errno == ENOENT)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthrow IOException(\"Error checking for file \" + std::string(path));\n\t\t}\n\t}\n\treturn true;\n#else\n\tDWORD result = GetFileAttributes(path);\n\tif (result == INVALID_FILE_ATTRIBUTES)\n\t{\n\t\treturn false;\n\t}\n\treturn true;\n#endif\n}\n\nint FileUtils::fileMode(const char* path) throw (IOException)\n{\n#ifdef PLATFORM_UNIX\n\tstruct stat fileInfo;\n\tif (stat(path,&fileInfo) != 0)\n\t{\n\t\tthrow IOException(\"Error reading file permissions for \" + std::string(path));\n\t}\n\treturn fileInfo.st_mode;\n#else\n\t// not implemented for Windows\n\treturn 0;\n#endif\n}\n\nvoid FileUtils::chmod(const char* path, int mode) throw (IOException)\n{\n#ifdef PLATFORM_UNIX\n\tif (::chmod(path,static_cast<mode_t>(mode)) != 0)\n\t{\n\t\tthrow IOException(\"Failed to set permissions on \" + std::string(path) + \" to \" + intToStr(mode));\n\t}\n#else\n\t// TODO - Not implemented under Windows - all files\n\t// get default permissions\n#endif\n}\n\nvoid FileUtils::moveFile(const char* src, const char* dest) throw (IOException)\n{\n#ifdef PLATFORM_UNIX\n\tif (rename(src,dest) != 0)\n\t{\n\t\tthrow IOException(\"Unable to rename \" + std::string(src) + \" to \" + std::string(dest));\n\t}\n#else\n\tif (!MoveFile(src,dest))\n\t{\n\t\tthrow IOException(\"Unable to rename \" + std::string(src) + \" to \" + std::string(dest));\n\t}\n#endif\n}\n\nvoid FileUtils::addToZip(const char* archivePath, const char* path, const char* content, int length) throw (IOException)\n{\n\tint result = ZIP_OK;\n\n\tint appendMode = fileExists(archivePath) ? APPEND_STATUS_ADDINZIP : APPEND_STATUS_CREATE;\n\n\tzipFile archive = zipOpen(archivePath, appendMode);\n\tresult = zipOpenNewFileInZip(archive, path, 0 /* file attributes */, 0 /* extra field */, 0 /* extra field size */,\n\t\t\t\t\t\t0/* global extra field */, 0 /* global extra field size */, 0 /* comment */, Z_DEFLATED /* method */,\n\t\t\t\t\t\tZ_DEFAULT_COMPRESSION /* level */);\n\tif (result != ZIP_OK)\n\t{\n\t\tthrow IOException(\"Unable to add new file to zip archive\");\n\t}\n\tresult = zipWriteInFileInZip(archive, content, static_cast<unsigned int>(length));\n\tif (result != ZIP_OK)\n\t{\n\t\tthrow IOException(\"Unable to write file data to zip archive\");\n\t}\n\tresult = zipCloseFileInZip(archive);\n\tif (result != ZIP_OK)\n\t{\n\t\tthrow IOException(\"Unable to close file in zip archive\");\n\t}\n\tresult = zipClose(archive, 0 /* global comment */);\n\tif (result != ZIP_OK)\n\t{\n\t\tthrow IOException(\"Unable to close zip archive\");\n\t}\n}\n\nvoid FileUtils::extractFromZip(const char* zipFilePath, const char* src, const char* dest) throw (IOException)\n{\n\tunzFile zipFile = unzOpen(zipFilePath);\n\tint result = unzLocateFile(zipFile,src,0);\n\tif (result == UNZ_OK)\n\t{\n\t\t// found a match which is now the current file\n\t\tunzOpenCurrentFile(zipFile);\n\t\tconst int chunkSize = 4096;\n\t\tchar buffer[chunkSize];\n\n\t\tstd::ofstream outputFile(dest,std::ofstream::binary);\n\t\tif (!outputFile.good())\n\t\t{\n\t\t\tthrow IOException(\"Unable to write to file \" + std::string(dest));\n\t\t}\n\t\twhile (true)\n\t\t{\n\t\t\tint count = unzReadCurrentFile(zipFile,buffer,chunkSize);\n\t\t\tif (count <= 0)\n\t\t\t{\n\t\t\t\tif (count < 0)\n\t\t\t\t{\n\t\t\t\t\tthrow IOException(\"Error extracting file from archive \" + std::string(src));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\toutputFile.write(buffer,count);\n\t\t}\n\t\toutputFile.close();\n\n\t\tunzCloseCurrentFile(zipFile);\n\t}\n\telse\n\t{\n\t\tthrow IOException(\"Unable to find file \" + std::string(src) + \" in zip archive \" + std::string(zipFilePath));\n\t}\n\tunzClose(zipFile);\n}\n\nvoid FileUtils::mkpath(const char* dir) throw (IOException)\n{\n\tstd::string currentPath;\n\tstd::istringstream stream(dir);\n\twhile (!stream.eof())\n\t{\n\t\tstd::string segment;\n\t\tstd::getline(stream,segment,'/');\n\t\tcurrentPath += segment;\n\t\tif (!currentPath.empty() && !fileExists(currentPath.c_str()))\n\t\t{\n\t\t\tmkdir(currentPath.c_str());\n\t\t}\n\t\tcurrentPath += '/';\n\t}\n}\n\nvoid FileUtils::mkdir(const char* dir) throw (IOException)\n{\n#ifdef PLATFORM_UNIX\n\tif (::mkdir(dir,S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) != 0)\n\t{\n\t\tthrow IOException(\"Unable to create directory \" + std::string(dir));\n\t}\n#else\n\tif (!CreateDirectory(dir,0 /* default security attributes */))\n\t{\n\t\tthrow IOException(\"Unable to create directory \" + std::string(dir));\n\t}\n#endif\n}\n\nvoid FileUtils::rmdir(const char* dir) throw (IOException)\n{\n#ifdef PLATFORM_UNIX\n\tif (::rmdir(dir) != 0)\n\t{\n\t\tthrow IOException(\"Unable to remove directory \" + std::string(dir));\n\t}\n#else\n\tif (!RemoveDirectory(dir))\n\t{\n\t\tthrow IOException(\"Unable to remove directory \" + std::string(dir));\n\t}\n#endif\n}\n\nvoid FileUtils::createSymLink(const char* link, const char* target) throw (IOException)\n{\n#ifdef PLATFORM_UNIX\n\tif (symlink(target,link) != 0)\n\t{\n\t\tthrow IOException(\"Unable to create symlink \" + std::string(link) + \" to \" + std::string(target));\n\t}\n#else\n\t// symlinks are not supported under Windows (at least, not universally.\n\t// Windows Vista and later do actually support symlinks)\n\tLOG(Warn,\"Skipping symlink creation - not implemented in Windows\");\n#endif\n}\n\nvoid FileUtils::removeFile(const char* src) throw (IOException)\n{\n#ifdef PLATFORM_UNIX\n\tif (unlink(src) != 0)\n\t{\n\t\tif (errno != ENOENT)\n\t\t{\n\t\t\tthrow IOException(\"Unable to remove file \" + std::string(src));\n\t\t}\n\t}\n#else\n\tif (!DeleteFile(src))\n\t{\n\t\tif (GetLastError() == ERROR_ACCESS_DENIED)\n\t\t{\n\t\t\t// if another process is using the file, try moving it to\n\t\t\t// a temporary directory and then\n\t\t\t// scheduling it for deletion on reboot\n\t\t\tstd::string tempDeletePathBase = tempPath();\n\t\t\ttempDeletePathBase += '/';\n\t\t\ttempDeletePathBase += fileName(src);\n\n\t\t\tint suffix = 0;\n\t\t\tstd::string tempDeletePath = tempDeletePathBase;\n\t\t\twhile (fileExists(tempDeletePath.c_str()))\n\t\t\t{\n\t\t\t\t++suffix;\n\t\t\t\ttempDeletePath = tempDeletePathBase + '_' + intToStr(suffix);\n\t\t\t}\n\n\t\t\tLOG(Warn,\"Unable to remove file \" + std::string(src) + \" - it may be in use.  Moving to \"\n\t\t\t         + tempDeletePath + \" and scheduling delete on reboot.\");\n\t\t\tmoveFile(src,tempDeletePath.c_str());\n\t\t\tMoveFileEx(tempDeletePath.c_str(),0,MOVEFILE_DELAY_UNTIL_REBOOT);\n\t\t}\n\t\telse if (GetLastError() != ERROR_FILE_NOT_FOUND)\n\t\t{\n\t\t\tthrow IOException(\"Unable to remove file \" + std::string(src));\n\t\t}\n\t}\n#endif\n}\n\nstd::string FileUtils::fileName(const char* path)\n{\n#ifdef PLATFORM_UNIX\n\tchar* pathCopy = strdup(path);\n\tstd::string basename = ::basename(pathCopy);\n\tfree(pathCopy);\n\treturn basename;\n#else\n\tchar baseName[MAX_PATH];\n\tchar extension[MAX_PATH];\n\t_splitpath_s(path,\n\t  0, /* drive */\n\t  0, /* drive length */\n\t  0, /* dir */\n\t  0, /* dir length */\n\t  baseName,\n\t  MAX_PATH, /* baseName length */\n\t  extension,\n\t  MAX_PATH /* extension length */\n\t  );\n\treturn std::string(baseName) + std::string(extension);\n#endif\n}\n\nstd::string FileUtils::dirname(const char* path)\n{\n#ifdef PLATFORM_UNIX\n\tchar* pathCopy = strdup(path);\n\tstd::string dirname = ::dirname(pathCopy);\n\tfree(pathCopy);\n\treturn dirname;\n#else\n\tchar drive[3];\n\tchar dir[MAX_PATH];\n\n\t_splitpath_s(path,\n\t  drive, /* drive */ \n\t  3, /* drive length */\n\t  dir,\n\t  MAX_PATH, /* dir length */\n\t  0, /* filename */\n\t  0, /* filename length */\n\t  0, /* extension */\n\t  0  /* extension length */\n\t);\n\n\tstd::string result;\n\tif (drive[0])\n\t{\n\t\tresult += std::string(drive);\n\t}\n\tresult += dir;\n\n\treturn result;\n#endif\n}\n\nvoid FileUtils::touch(const char* path) throw (IOException)\n{\n#ifdef PLATFORM_UNIX\n\t// see http://pubs.opengroup.org/onlinepubs/9699919799/utilities/touch.html\n\t//\n\t// we use utimes/futimes instead of utimensat/futimens for compatibility\n\t// with older Linux and Mac\n\n\tif (fileExists(path))\n\t{\n\t\tutimes(path,0 /* use current date/time */);\n\t}\n\telse\n\t{\n\t\tint fd = creat(path,S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);\n\t\tif (fd != -1)\n\t\t{\n\t\t\tfutimes(fd,0 /* use current date/time */);\n\t\t\tclose(fd);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthrow IOException(\"Unable to touch file \" + std::string(path));\n\t\t}\n\t}\n#else\n\tHANDLE result = CreateFile(path,GENERIC_WRITE,\n\t                           FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,\n\t                           0,\n\t\t\t\t\t\t\t   CREATE_ALWAYS,\n                               FILE_ATTRIBUTE_NORMAL,\n                               0);\n\tif (result == INVALID_HANDLE_VALUE)\n\t{\n\t\tthrow IOException(\"Unable to touch file \" + std::string(path));\n\t}\n\telse\n\t{\n\t\tCloseHandle(result);\n\t}\n#endif\n}\n\nvoid FileUtils::rmdirRecursive(const char* path) throw (IOException)\n{\n\t// remove dir contents\n\tDirIterator dir(path);\n\twhile (dir.next())\n\t{\n\t\tstd::string name = dir.fileName();\n\t\tif (name != \".\" && name != \"..\")\n\t\t{\n\t\t\tif (dir.isDir())\n\t\t\t{\n\t\t\t\trmdir(dir.filePath().c_str());\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tremoveFile(dir.filePath().c_str());\n\t\t\t}\n\t\t}\n\t}\n\n\t// remove the directory itself\n\trmdir(path);\n}\n\nstd::string FileUtils::canonicalPath(const char* path)\n{\n#ifdef PLATFORM_UNIX\n\t// on Linux and Mac OS 10.6, realpath() can allocate the required\n\t// amount of memory automatically, however Mac OS 10.5 does not support\n\t// this, so we used a fixed-sized buffer on all platforms\n\tchar canonicalPathBuffer[PATH_MAX+1];\n\tif (realpath(path,canonicalPathBuffer) != 0)\n\t{\n\t\treturn std::string(canonicalPathBuffer);\n\t}\n\telse\n\t{\n\t\tthrow IOException(\"Error reading canonical path for \" + std::string(path));\n\t}\n#else\n\tthrow IOException(\"canonicalPath() not implemented\");\n#endif\n}\n\nstd::string FileUtils::toWindowsPathSeparators(const std::string& str)\n{\n\tstd::string result = str;\n\tstd::replace(result.begin(),result.end(),'/','\\\\');\n\treturn result;\n}\n\nstd::string FileUtils::toUnixPathSeparators(const std::string& str)\n{\n\tstd::string result = str;\n\tstd::replace(result.begin(),result.end(),'\\\\','/');\n\treturn result;\n}\n\nstd::string FileUtils::tempPath()\n{\n#ifdef PLATFORM_UNIX\n\tstd::string tmpDir(notNullString(getenv(\"TMPDIR\")));\n\tif (tmpDir.empty())\n\t{\n\t\ttmpDir = \"/tmp\";\n\t}\n\treturn tmpDir;\n#else\n\tchar buffer[MAX_PATH+1];\n\tGetTempPath(MAX_PATH+1,buffer);\n\treturn toUnixPathSeparators(buffer);\n#endif\n}\n\nbool startsWithDriveLetter(const char* path)\n{\n\treturn strlen(path) >= 2 &&\n\t      (isalpha(path[0])) &&\n\t       path[1] == ':';\n}\n\nbool FileUtils::isRelative(const char* path)\n{\n#ifdef PLATFORM_UNIX\n\treturn strlen(path) == 0 || path[0] != '/';\n#else\n\t// on Windows, a path is relative if it does not start with:\n\t// - '\\\\' (a UNC name)\n\t// - '[Drive Letter]:\\'\n\t// - A single backslash\n\t//\n\t// the input path is assumed to have already been converted to use\n\t// Unix-style path separators\n\n\tstd::string pathStr(path);\n\n\tif ((!pathStr.empty() && pathStr.at(0) == '/') ||\n\t    (startsWith(pathStr,\"//\")) ||\n\t    (startsWithDriveLetter(pathStr.c_str())))\n\t{\n\t\treturn false;\n\t}\n\telse\n\t{\n\t\treturn true;\n\t}\n#endif\n}\n\nvoid FileUtils::writeFile(const char* path, const char* data, int length) throw (IOException)\n{\n\tstd::ofstream stream(path,std::ios::binary | std::ios::trunc);\n\tstream.write(data,length);\n}\n\nstd::string FileUtils::readFile(const char* path) throw (IOException)\n{\n\tstd::ifstream inputFile(path, std::ios::in | std::ios::binary);\n\tstd::string content;\n\tinputFile.seekg(0, std::ios::end);\n\tcontent.resize(static_cast<unsigned int>(inputFile.tellg()));\n\tinputFile.seekg(0, std::ios::beg);\n\tinputFile.read(&content[0], static_cast<int>(content.size()));\n\treturn content;\n}\n\nvoid FileUtils::copyFile(const char* src, const char* dest) throw (IOException)\n{\n#ifdef PLATFORM_UNIX\n\tstd::ifstream inputFile(src,std::ios::binary);\n\tstd::ofstream outputFile(dest,std::ios::binary | std::ios::trunc);\n\n\tif (!inputFile.good())\n\t{\n\t\tthrow IOException(\"Failed to read file \" + std::string(src));\n\t}\n\tif (!outputFile.good())\n\t{\n\t\tthrow IOException(\"Failed to write file \" + std::string(dest));\n\t}\n\t\n\toutputFile << inputFile.rdbuf();\n\n\tif (inputFile.bad())\n\t{\n\t\tthrow IOException(\"Error reading file \" + std::string(src));\n\t}\n\tif (outputFile.bad())\n\t{\n\t\tthrow IOException(\"Error writing file \" + std::string(dest));\n\t}\n\n\tchmod(dest,fileMode(src));\n#else\n\tif (!CopyFile(src,dest,FALSE))\n\t{\n\t\tthrow IOException(\"Failed to copy \" + std::string(src) + \" to \" + std::string(dest));\n\t}\n#endif\n}\n\nstd::string FileUtils::makeAbsolute(const char* path, const char* basePath)\n{\n\tif (isRelative(path))\n\t{\n\t\tassert(!isRelative(basePath));\n\t\treturn std::string(basePath) + '/' + std::string(path);\n\t}\n\telse\n\t{\n\t\treturn path;\n\t}\n}\n\nvoid FileUtils::chdir(const char* path) throw (IOException)\n{\n#ifdef PLATFORM_UNIX\n\tif (::chdir(path) != 0)\n\t{\n\t\tthrow FileUtils::IOException(\"Unable to change directory\");\n\t}\n#else\n\tif (!SetCurrentDirectory(path))\n\t{\n\t\tthrow FileUtils::IOException(\"Unable to change directory\");\n\t}\n#endif\n}\n\nstd::string FileUtils::getcwd() throw (IOException)\n{\n#ifdef PLATFORM_UNIX\n\tchar path[PATH_MAX];\n\tif (!::getcwd(path,PATH_MAX))\n\t{\n\t\tthrow FileUtils::IOException(\"Failed to get current directory\");\n\t}\n\treturn std::string(path);\n#else\n\tchar path[MAX_PATH];\n\tif (GetCurrentDirectory(MAX_PATH,path) == 0)\n\t{\n\t\tthrow FileUtils::IOException(\"Failed to get current directory\");\n\t}\n\treturn toUnixPathSeparators(std::string(path));\n#endif\n}\n\nbool FileUtils::removeEmptyDirs(const char* path)\n{\n\tDirIterator iter(path);\n\tint fileCount = 0;\n\twhile (iter.next())\n\t{\n\t\tif (iter.fileName() == \".\" || iter.fileName() == \"..\")\n\t\t{\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!iter.isDir() || !removeEmptyDirs(iter.filePath().c_str()))\n\t\t{\n\t\t\t// entry is either not a directory or is a\n\t\t\t// directory hierarchy which contains one or more non-directories\n\t\t\t// once all empty dirs have been recursively removed\n\t\t\t++fileCount;\n\t\t}\n\t}\n\tif (fileCount == 0)\n\t{\n\t\ttry\n\t\t{\n\t\t\tFileUtils::rmdir(path);\n\t\t\treturn true;\n\t\t}\n\t\tcatch (const std::exception& ex)\n\t\t{\n\t\t\tLOG(Error,\"Unable to remove empty directory \" + std::string(ex.what()));\n\t\t\treturn false;\n\t\t}\n\t}\n\telse\n\t{\n\t\treturn false;\n\t}\n}\n\n"
  },
  {
    "path": "src/FileUtils.h",
    "content": "#pragma once\n\n#include <exception>\n#include <string>\n\n#include \"Platform.h\"\n#include \"StringUtils.h\"\n\n\n/** A set of functions for performing common operations\n  * on files, throwing exceptions if an operation fails.\n  *\n  * Path arguments to FileUtils functions should use Unix-style path\n  * separators.\n  */\nclass FileUtils\n{\n\tpublic:\n\t\t/** Base class for exceptions reported by\n\t\t  * FileUtils methods if an operation fails.\n\t\t  */\n\t\tclass IOException : public std::exception\n\t\t{\n\t\t\tpublic:\n\t\t\t\tIOException(const std::string& error);\n\t\t\t\tIOException(int errorCode, const std::string& error);\n\n\t\t\t\tvirtual ~IOException() throw ();\n\n\t\t\t\tenum Type\n\t\t\t\t{\n\t\t\t\t\tNoError,\n\t\t\t\t\t/** Unknown error type.  Call what() to get the description\n\t\t\t\t\t  * provided by the OS.\n\t\t\t\t\t  */\n\t\t\t\t\tUnknown,\n\t\t\t\t\tReadOnlyFileSystem,\n\t\t\t\t\tDiskFull\n\t\t\t\t};\n\n\t\t\t\tvirtual const char* what() const throw ()\n\t\t\t\t{\n\t\t\t\t\treturn m_error.c_str();\n\t\t\t\t}\n\n\t\t\t\tType type() const;\n\n\t\t\tprivate:\n\t\t\t\tvoid init(int errorCode, const std::string& error);\n\n\t\t\t\tstd::string m_error;\n\t\t\t\tint m_errorCode;\n\t\t};\n\n\t\t/** Remove a file.  Throws an exception if the file\n\t\t * could not be removed.\n\t\t *\n\t\t * On Unix, a file can be removed even if it is in use if the user\n\t\t * has the necessary permissions.  removeFile() tries to simulate\n\t\t * this behavior on Windows.  If a file cannot be removed on Windows\n\t\t * because it is in use it will be moved to a temporary directory and\n\t\t * scheduled for deletion on the next restart.\n\t\t */\n\t\tstatic void removeFile(const char* src) throw (IOException);\n\n\t\t/** Set the permissions of a file.  @p permissions uses the standard\n\t\t  * Unix mode_t values.\n\t\t  */\n\t\tstatic void chmod(const char* path, int permissions) throw (IOException);\n\n\t\t/** Returns true if the file at @p path exists.  If @p path is a symlink,\n\t\t  * returns true if the symlink itself exists, not the target.\n\t\t  */\n\t\tstatic bool fileExists(const char* path) throw (IOException);\n\n\t\t/** Returns the Unix mode flags of @p path.  If @p path is a symlink,\n\t\t  * returns the mode flags of the target.\n\t\t  */\n\t\tstatic int fileMode(const char* path) throw (IOException);\n\n\t\tstatic void moveFile(const char* src, const char* dest) throw (IOException);\n\t\tstatic void mkdir(const char* dir) throw (IOException);\n\t\tstatic void rmdir(const char* dir) throw (IOException);\n\t\tstatic void createSymLink(const char* link, const char* target) throw (IOException);\n\t\tstatic void touch(const char* path) throw (IOException);\n\t\tstatic void copyFile(const char* src, const char* dest) throw (IOException);\n\n\t\t/** Create all the directories in @p path which do not yet exist.\n\t\t  * @p path may be relative or absolute.\n\t\t  */\n\t\tstatic void mkpath(const char* path) throw (IOException);\n\n\t\t/** Returns the file name part of a file path, including the extension. */\n\t\tstatic std::string fileName(const char* path);\n\n\t\t/** Returns the directory part of a file path.\n\t\t * On Windows this includes the drive letter, if present in @p path.\n\t\t */\n\t\tstatic std::string dirname(const char* path);\n\n\t\t/** Remove a directory and all of its contents. */\n\t\tstatic void rmdirRecursive(const char* dir) throw (IOException);\n\n\t\t/** Return the full, absolute path to a file, resolving any\n\t\t  * symlinks and removing redundant sections.\n\t\t  */\n\t\tstatic std::string canonicalPath(const char* path);\n\n\t\t/** Returns the path to a directory for storing temporary files. */\n\t\tstatic std::string tempPath();\n\n\t\t/** Add a file to a zip archive, creating it if it does not already exist. */\n\t\tstatic void addToZip(const char* archivePath, const char* path, const char* content, int length) throw (IOException);\n\n\t\t/** Extract the file @p src from the zip archive @p zipFile and\n\t\t  * write it to @p dest.\n\t\t  */\n\t\tstatic void extractFromZip(const char* zipFile, const char* src, const char* dest) throw (IOException);\n\n\t\t/** Returns a copy of the path 'str' with Windows-style '\\'\n\t\t * dir separators converted to Unix-style '/' separators\n\t\t */\n\t\tstatic std::string toUnixPathSeparators(const std::string& str);\n\n\t\tstatic std::string toWindowsPathSeparators(const std::string& str);\n\n\t\t/** Returns true if the provided path is relative.\n\t\t  * Or false if absolute.\n\t\t  */\n\t\tstatic bool isRelative(const char* path);\n\n\t\t/** Converts @p path to an absolute path.  If @p path is already absolute,\n\t\t  * just returns @p path, otherwise prefixes it with @p basePath to make it absolute.\n\t\t  *\n\t\t  * @p basePath should be absolute.\n\t\t  */\n\t\tstatic std::string makeAbsolute(const char* path, const char* basePath);\n\n\t\tstatic void writeFile(const char* path, const char* data, int length) throw (IOException);\n\n\t\tstatic std::string readFile(const char* path) throw (IOException);\n\n\t\t/** Changes the current working directory to @p path */\n\t\tstatic void chdir(const char* path) throw (IOException);\n\n\t\t/** Returns the current working directory of the application. */\n\t\tstatic std::string getcwd() throw (IOException);\n\n\t\t/** Recursively remove all empty directories from the path rooted at\n\t\t * @p path.\n\t\t *\n\t\t * Returns true if @p path was removed.\n\t\t */\n\t\tstatic bool removeEmptyDirs(const char* path);\n};\n\n"
  },
  {
    "path": "src/Log.cpp",
    "content": "#include \"Log.h\"\n\n#include \"Platform.h\"\n#include \"StringUtils.h\"\n#include \"ProcessUtils.h\"\n\n#include <string.h>\n#include <iostream>\n\nLog m_globalLog;\n\nLog* Log::instance()\n{\n\treturn &m_globalLog;\n}\n\nLog::Log()\n{\n}\n\nLog::~Log()\n{\n}\n\nvoid Log::open(const std::string& path)\n{\n\tm_mutex.lock();\n\tm_output.open(path.c_str(),std::ios_base::out | std::ios_base::app);\n\tm_mutex.unlock();\n}\n\nvoid Log::writeToStream(std::ostream& stream, Type type, const char* text)\n{\n\t// Multiple processes may be writing to the same log file during\n\t// an update.  No attempt is made to synchronize access to the file.\n\t//\n\t// Under Unix, appends to a single file on a local FS by multiple writers should be atomic\n\t// provided that the length of 'text' is less than PIPE_BUF\n\t//\n\tswitch (type)\n\t{\n\t\tcase Info:\n\t\t\tstream << \"INFO  \";\n\t\t\tbreak;\n\t\tcase Warn:\n\t\t\tstream << \"WARN  \";\n\t\t\tbreak;\n\t\tcase Error:\n\t\t\tstream << \"ERROR \";\n\t\t\tbreak;\n\t}\n\tstream << '(' << intToStr(ProcessUtils::currentProcessId()) << \") \" << text << std::endl;\n}\n\nvoid Log::write(Type type, const char* text)\n{\n\tm_mutex.lock();\n\twriteToStream(std::cerr,type,text);\n\tif (m_output.is_open())\n\t{\n\t\twriteToStream(m_output,type,text);\n\t}\n\tm_mutex.unlock();\n}\n\n"
  },
  {
    "path": "src/Log.h",
    "content": "#pragma once\n\n#include <string>\n#include <fstream>\n\n#include \"tinythread.h\"\n\nclass Log\n{\n\tpublic:\n\t\tenum Type\n\t\t{\n\t\t\tInfo,\n\t\t\tWarn,\n\t\t\tError\n\t\t};\n\n\t\tLog();\n\t\t~Log();\n\n\t\tvoid open(const std::string& path);\n\n\t\t/** Write @p text to the log.  This method is thread-safe. */\n\t\tvoid write(Type type, const std::string& text);\n\t\t/** Write @p text to the log.  This method is thread-safe. */\n\t\tvoid write(Type type, const char* text);\n\n\t\tstatic Log* instance();\n\t\n\tprivate:\n\t\tstatic void writeToStream(std::ostream& stream, Type type, const char* text);\n\n\t\ttthread::mutex m_mutex;\n\t\tstd::ofstream m_output;\n};\n\ninline void Log::write(Type type, const std::string& text)\n{\n\twrite(type,text.c_str());\n}\n\n#define LOG(type,text) \\\n  Log::instance()->write(Log::type,text)\n\n\n"
  },
  {
    "path": "src/MacBundle.cpp",
    "content": "#include \"MacBundle.h\"\n\n#include \"FileUtils.h\"\n#include \"Log.h\"\n\nMacBundle::MacBundle(const std::string& path, const std::string& appName)\n: m_appName(appName)\n{\n\tm_path = path + '/' + appName + \".app\";\n}\n\nstd::string MacBundle::bundlePath() const\n{\n\treturn m_path;\n}\n\nvoid MacBundle::create(const std::string& infoPlist,\n                       const std::string& icon,\n                       const std::string& exePath)\n{\n\ttry\n\t{\n\t\t// create the bundle directories\n\t\tFileUtils::mkpath(m_path.c_str());\n\n\t\tstd::string contentDir = m_path + \"/Contents\";\n\t\tstd::string resourceDir = contentDir + \"/Resources\";\n\t\tstd::string binDir = contentDir + \"/MacOS\";\n\n\t\tFileUtils::mkpath(resourceDir.c_str());\n\t\tFileUtils::mkpath(binDir.c_str());\n\t\t\n\t\t// create the Contents/Info.plist file\n\t\tFileUtils::writeFile((contentDir + \"/Info.plist\").c_str(),infoPlist.c_str(),static_cast<int>(infoPlist.size()));\n\n\t\t// save the icon to Contents/Resources/<appname>.icns\n\t\tFileUtils::writeFile((resourceDir + '/' + m_appName + \".icns\").c_str(),icon.c_str(),static_cast<int>(icon.size()));\n\n\t\t// copy the app binary to Contents/MacOS/<appname>\n\t\tm_exePath = binDir + '/' + m_appName;\n\t\tFileUtils::copyFile(exePath.c_str(),m_exePath.c_str());\n\t}\n\tcatch (const FileUtils::IOException& exception)\n\t{\n\t\tLOG(Error,\"Unable to create app bundle. \" + std::string(exception.what()));\n\t}\n}\n\nstd::string MacBundle::executablePath() const\n{\n\treturn m_exePath;\n}\n\n"
  },
  {
    "path": "src/MacBundle.h",
    "content": "#pragma once\n\n#include <string>\n\n/** Class for creating minimal Mac app bundles. */\nclass MacBundle\n{\n\tpublic:\n\t\t/** Create a MacBundle instance representing the bundle\n\t\t  * in <path>/<appName>.app\n\t\t  */\n\t\tMacBundle(const std::string& path, const std::string& appName);\n\n\t\t/** Create a simple Mac bundle.\n\t\t  *\n\t\t  * @param infoPlist The content of the Info.plist file\n\t\t  * @param icon The content of the app icon\n\t\t  * @param exePath The path of the file to use for the main app in the bundle.\n\t\t  */\n\t\tvoid create(const std::string& infoPlist,\n\t\t            const std::string& icon,\n\t\t            const std::string& exePath);\n\t\t\n\t\t/** Returns the path of the main executable within the Mac bundle. */\n\t\tstd::string executablePath() const;\n\n\t\t/** Returns the path of the bundle */\n\t\tstd::string bundlePath() const;\n\n\tprivate:\n\t\tstd::string m_path;\n\t\tstd::string m_appName;\n\t\tstd::string m_exePath;\n};\n\n"
  },
  {
    "path": "src/Platform.h",
    "content": "#pragma once\n\n// basic platform defines\n#ifdef __linux__\n #define PLATFORM_LINUX\n#endif\n\n#ifdef __FreeBSD__\n #define PLATFORM_FREEBSD\n#endif\n\n#ifdef WIN32\n #define PLATFORM_WINDOWS\n #include <windows.h>\n\n // disable warnings about exception specifications,\n // which are not implemented in Visual C++\n #pragma warning(disable:4290)\n#endif\n\n#ifdef __APPLE__\n #define PLATFORM_MAC\n#endif\n\n#if defined(PLATFORM_LINUX) || defined(PLATFORM_MAC) || defined(PLATFORM_FREEBSD)\n #define PLATFORM_UNIX\n#endif\n\n// platform-specific type aliases\n#if defined(PLATFORM_UNIX)\n #include <unistd.h>\n #define PLATFORM_PID pid_t\n#else\n #define PLATFORM_PID DWORD\n#endif\n"
  },
  {
    "path": "src/ProcessUtils.cpp",
    "content": "#include \"ProcessUtils.h\"\n\n#include \"FileUtils.h\"\n#include \"Platform.h\"\n#include \"StringUtils.h\"\n#include \"Log.h\"\n\n#include <string.h>\n#include <vector>\n#include <iostream>\n\n#ifdef PLATFORM_WINDOWS\n#include <windows.h>\n#else\n#include <stdlib.h>\n#include <sys/wait.h>\n#include <errno.h>\n#endif\n\n#ifdef PLATFORM_FREEBSD\n#include <sys/sysctl.h>\n#include <sys/types.h>\n#endif\n\n#ifdef PLATFORM_MAC\n#include <Security/Security.h>\n#include <mach-o/dyld.h>\n#endif\n\nPLATFORM_PID ProcessUtils::currentProcessId()\n{\n#ifdef PLATFORM_UNIX\n\treturn getpid();\n#else\n\treturn GetCurrentProcessId();\n#endif\n}\n\nint ProcessUtils::runSync(const std::string& executable,\n                          const std::list<std::string>& args)\n{\n#ifdef PLATFORM_UNIX\n\treturn runSyncUnix(executable,args);\n#else\n\treturn runWindows(executable,args,RunSync);\n#endif\n}\n\n#ifdef PLATFORM_UNIX\nint ProcessUtils::runSyncUnix(const std::string& executable,\n\t\t                        const std::list<std::string>& args)\n{\n\tPLATFORM_PID pid = runAsyncUnix(executable,args);\n\tint status = 0;\n\tif (waitpid(pid,&status,0) != -1)\n\t{\n\t\tif (WIFEXITED(status))\n\t\t{\n\t\t\treturn static_cast<char>(WEXITSTATUS(status));\n\t\t}\n\t\telse\n\t\t{\n\t\t\tLOG(Warn,\"Child exited abnormally\");\n\t\t\treturn -1;\n\t\t}\n\t}\n\telse\n\t{\n\t\tLOG(Warn,\"Failed to get exit status of child \" + intToStr(pid));\n\t\treturn WaitFailed;\n\t}\n}\n#endif\n\nvoid ProcessUtils::runAsync(const std::string& executable,\n\t\t      const std::list<std::string>& args)\n{\n#ifdef PLATFORM_WINDOWS\n\trunWindows(executable,args,RunAsync);\n#elif defined(PLATFORM_UNIX)\n\trunAsyncUnix(executable,args);\n#endif\n}\n\nint ProcessUtils::runElevated(const std::string& executable,\n                              const std::list<std::string>& args,\n                              const std::string& task)\n{\n#ifdef PLATFORM_WINDOWS\n\t(void)task;\n\treturn runElevatedWindows(executable,args);\n#elif defined(PLATFORM_MAC)\n\t(void)task;\n\treturn runElevatedMac(executable,args);\n#elif defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD)\n\treturn runElevatedLinux(executable,args,task);\n#endif\n}\n\nbool ProcessUtils::waitForProcess(PLATFORM_PID pid)\n{\n#ifdef PLATFORM_UNIX\n\tpid_t result = ::waitpid(pid, 0, 0);\t\n\tif (result < 0)\n\t{\n\t\tLOG(Error,\"waitpid() failed with error: \" + std::string(strerror(errno)));\n\t}\n\treturn result > 0;\n#elif defined(PLATFORM_WINDOWS)\n\tHANDLE hProc;\n\n\tif (!(hProc = OpenProcess(SYNCHRONIZE, FALSE, pid)))\n\t{\n\t\tLOG(Error,\"Unable to get process handle for pid \" + intToStr(pid) + \" last error \" + intToStr(GetLastError()));\n\t\treturn false;\n\t}\n\n\tDWORD dwRet = WaitForSingleObject(hProc, INFINITE);\n\tCloseHandle(hProc);\n\n\tif (dwRet == WAIT_FAILED)\n\t{\n\t\tLOG(Error,\"WaitForSingleObject failed with error \" + intToStr(GetLastError()));\n\t}\n\n\treturn (dwRet == WAIT_OBJECT_0);\n#endif\n}\n\n#if defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD)\nint ProcessUtils::runElevatedLinux(const std::string& executable,\n                                   const std::list<std::string>& args,\n                                   const std::string& _task)\n{\n\tstd::string task(_task);\n\tif (task.empty())\n\t{\n\t\ttask = FileUtils::fileName(executable.c_str());\n\t}\n\n\t// try available graphical sudo instances until we find one that works.\n\t// The different sudo front-ends have different behaviors with respect to error codes:\n\t//\n\t// - 'kdesudo': return 1 if the user enters the wrong password 3 times or if\n\t//              they cancel elevation\n\t//\n\t// - recent 'gksudo' versions: return 1 if the user enters the wrong password\n\t//                           : return -1 if the user cancels elevation\n\t//\n\t// - older 'gksudo' versions : return 0 if the user cancels elevation\n\n\tstd::vector<std::string> sudos;\n\n\tif (getenv(\"KDE_SESSION_VERSION\"))\n\t{\n\t\tsudos.push_back(\"kdesudo\");\n\t}\n\tsudos.push_back(\"gksudo\");\n\n\tfor (unsigned int i=0; i < sudos.size(); i++)\n\t{\n\t\tconst std::string& sudoBinary = sudos.at(i);\n\n\t\tstd::list<std::string> sudoArgs;\n\t\tsudoArgs.push_back(\"-u\");\n\t\tsudoArgs.push_back(\"root\");\n\n\t\tif (sudoBinary == \"kdesudo\")\n\t\t{\n\t\t\tsudoArgs.push_back(\"-d\");\n\t\t\tsudoArgs.push_back(\"--comment\");\n\t\t\tstd::string sudoMessage = task + \" needs administrative privileges.  Please enter your password.\";\n\t\t\tsudoArgs.push_back(sudoMessage);\n\t\t}\n\t\telse if (sudoBinary == \"gksudo\")\n\t\t{\n\t\t\tsudoArgs.push_back(\"--description\");\n\t\t\tsudoArgs.push_back(task);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tsudoArgs.push_back(task);\n\t\t}\n\n\t\tsudoArgs.push_back(\"--\");\n\t\tsudoArgs.push_back(executable);\n\t\tstd::copy(args.begin(),args.end(),std::back_inserter(sudoArgs));\n\n\t\tint result = ProcessUtils::runSync(sudoBinary,sudoArgs);\n\n\t\tLOG(Info,\"Tried to use sudo \" + sudoBinary + \" with response \" + intToStr(result));\n\n\t\tif (result != RunFailed)\n\t\t{\n\t\t\treturn result;\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn RunElevatedFailed;\n}\n#endif\n\n#ifdef PLATFORM_MAC\n\n// suppress warning about AuthorizationExecuteWithPriviledges \n// being deprecated since OS X 10.7\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated-declarations\"\nint ProcessUtils::runElevatedMac(const std::string& executable,\n\t\t\t\t\t\tconst std::list<std::string>& args)\n{\n\t// request elevation using the Security Service.\n\t//\n\t// This only works when the application is being run directly\n\t// from the Mac.  Attempting to run the app via a remote SSH session\n\t// (for example) will fail with an interaction-not-allowed error\n\n\tOSStatus status;\n\tAuthorizationRef authorizationRef;\n\t\n\tstatus = AuthorizationCreate(\n\t\t\tNULL,\n\t\t\tkAuthorizationEmptyEnvironment,\n\t\t\tkAuthorizationFlagDefaults,\n\t\t\t&authorizationRef);\n\n\tAuthorizationItem right = { kAuthorizationRightExecute, 0, NULL, 0 };\n\tAuthorizationRights rights = { 1, &right };\n\t\n\tAuthorizationFlags flags = kAuthorizationFlagDefaults |\n\t\t\tkAuthorizationFlagInteractionAllowed |\n\t\t\tkAuthorizationFlagPreAuthorize |\n\t\t\tkAuthorizationFlagExtendRights;\n\n\tif (status == errAuthorizationSuccess)\n\t{\n\t\tstatus = AuthorizationCopyRights(authorizationRef, &rights, NULL, \n\t\t\t\tflags, NULL);\n\n\t\tif (status == errAuthorizationSuccess)\n\t\t{\n\t\t\tchar** argv;\n\t\t\targv = (char**) malloc(sizeof(char*) * args.size() + 1);\n\t\t\n\t\t\tunsigned int i = 0;\n\t\t\tfor (std::list<std::string>::const_iterator iter = args.begin(); iter != args.end(); iter++)\n\t\t\t{\n\t\t\t\targv[i] = strdup(iter->c_str());\n\t\t\t\t++i;\n\t\t\t}\n\t\t\targv[i] = NULL;\n\n\t\t\tFILE* pipe = NULL;\n\n\t\t\tchar* tool = strdup(executable.c_str());\n\t\t\t\n\t\t\tstatus = AuthorizationExecuteWithPrivileges(authorizationRef, tool,\n\t\t\t\t\tkAuthorizationFlagDefaults, argv, &pipe);\n\n\t\t\tif (status == errAuthorizationSuccess)\n\t\t\t{\n\t\t\t\t// AuthorizationExecuteWithPrivileges does not provide a way to get the process ID\n\t\t\t\t// of the child process.\n\t\t\t\t//\n\t\t\t\t// Discussions on Apple development forums suggest two approaches for working around this,\n\t\t\t\t//\n\t\t\t\t// - Modify the child process to sent its process ID back to the parent via\n\t\t\t\t//   the pipe passed to AuthorizationExecuteWithPrivileges.\n\t\t\t\t//\n\t\t\t\t// - Use the generic Unix wait() call.\n\t\t\t\t//\n\t\t\t\t// This code uses wait(), which is simpler, but suffers from the problem that wait() waits\n\t\t\t\t// for any child process, not necessarily the specific process launched\n\t\t\t\t// by AuthorizationExecuteWithPrivileges.\n\t\t\t\t//\n\t\t\t\t// Apple's documentation (see 'Authorization Services Programming Guide') suggests\n\t\t\t\t// installing files in an installer as a legitimate use for \n\t\t\t\t// AuthorizationExecuteWithPrivileges but in general strongly recommends\n\t\t\t\t// not using this call and discusses a number of other alternatives\n\t\t\t\t// for performing privileged operations,\n\t\t\t\t// which we could consider in future.\n\n\t\t\t\tint childStatus;\n\t\t\t\tpid_t childPid = wait(&childStatus);\n\n\t\t\t\tif (childStatus != 0)\n\t\t\t\t{\n\t\t\t\t\tLOG(Error,\"elevated process failed with status \" + intToStr(childStatus) + \" pid \"\n\t\t\t\t\t          + intToStr(childPid));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tLOG(Info,\"elevated process succeded with pid \" + intToStr(childPid));\n\t\t\t\t}\n\n\t\t\t\treturn childStatus;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tLOG(Error,\"failed to launch elevated process \" + intToStr(status));\n\t\t\t\treturn RunElevatedFailed;\n\t\t\t}\n\t\t\t\n\t\t\t// If we want to know more information about what has happened:\n\t\t\t// http://developer.apple.com/mac/library/documentation/Security/Reference/authorization_ref/Reference/reference.html#//apple_ref/doc/uid/TP30000826-CH4g-CJBEABHG\n\t\t\tfree(tool);\n\t\t\tfor (i = 0; i < args.size(); i++)\n\t\t\t{\n\t\t\t\tfree(argv[i]);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tLOG(Error,\"failed to get rights to launch elevated process. status: \" + intToStr(status));\n\t\t\treturn RunElevatedFailed;\n\t\t}\n\t}\n\telse\n\t{\n\t\treturn RunElevatedFailed;\n\t}\n}\n#pragma clang diagnostic pop\n#endif\n\n// convert a list of arguments in a space-separated string.\n// Arguments containing spaces are enclosed in quotes\nstd::string quoteArgs(const std::list<std::string>& arguments)\n{\n\tstd::string quotedArgs;\n\tfor (std::list<std::string>::const_iterator iter = arguments.begin();\n\t     iter != arguments.end();\n\t     iter++)\n\t{\n\t\tstd::string arg = *iter;\n\n\t\tbool isQuoted = !arg.empty() &&\n\t\t                 arg.at(0) == '\"' &&\n\t\t                 arg.at(arg.size()-1) == '\"';\n\n\t\tif (!isQuoted && arg.find(' ') != std::string::npos)\n\t\t{\n\t\t\targ.insert(0,\"\\\"\");\n\t\t\targ.append(\"\\\"\");\n\t\t}\n\t\tquotedArgs += arg;\n\t\tquotedArgs += \" \";\n\t}\n\treturn quotedArgs;\n}\n\n#ifdef PLATFORM_WINDOWS\nint ProcessUtils::runElevatedWindows(const std::string& executable,\n\t\t\t\t\t\t\tconst std::list<std::string>& arguments)\n{\n\tstd::string args = quoteArgs(arguments);\n\n\tSHELLEXECUTEINFO executeInfo;\n\tZeroMemory(&executeInfo,sizeof(executeInfo));\n\texecuteInfo.cbSize = sizeof(SHELLEXECUTEINFO);\n\texecuteInfo.fMask = SEE_MASK_NOCLOSEPROCESS;\n\t// request UAC elevation\n\texecuteInfo.lpVerb = \"runas\";\n\texecuteInfo.lpFile = executable.c_str();\n\texecuteInfo.lpParameters = args.c_str();\n\texecuteInfo.nShow = SW_SHOWNORMAL;\n\n\tLOG(Info,\"Attempting to execute \" + executable + \" with administrator priviledges\");\n\tif (!ShellExecuteEx(&executeInfo))\n\t{\n\t\tLOG(Error,\"Failed to start with admin priviledges using ShellExecuteEx()\");\n\t\treturn RunElevatedFailed;\n\t}\n\n\tWaitForSingleObject(executeInfo.hProcess, INFINITE);\n\n\t// this assumes the process succeeded - we need to check whether\n\t// this is actually the case.\n\treturn 0;\n}\n#endif\n\n#ifdef PLATFORM_UNIX\nPLATFORM_PID ProcessUtils::runAsyncUnix(const std::string& executable,\n\t\t\t\t\t\tconst std::list<std::string>& args)\n{\n\tpid_t child = fork();\n\tif (child == 0)\n\t{\n\t\t// in child process\n\t\tchar** argBuffer = new char*[args.size() + 2];\n\t\targBuffer[0] = strdup(executable.c_str());\n\t\tint i = 1;\n\t\tfor (std::list<std::string>::const_iterator iter = args.begin(); iter != args.end(); iter++)\n\t\t{\n\t\t\targBuffer[i] = strdup(iter->c_str());\n\t\t\t++i;\n\t\t}\n\t\targBuffer[i] = 0;\n\n\t\tif (execvp(executable.c_str(),argBuffer) == -1)\n\t\t{\n\t\t\tLOG(Error,\"error starting child: \" + std::string(strerror(errno)));\n\t\t\texit(RunFailed);\n\t\t}\n\t}\n\telse\n\t{\n\t\tLOG(Info,\"Started child process \" + intToStr(child));\n\t}\n\treturn child;\n}\n#endif\n\n#ifdef PLATFORM_WINDOWS\nint ProcessUtils::runWindows(const std::string& _executable,\n                             const std::list<std::string>& _args,\n                             RunMode runMode)\n{\n\t// most Windows API functions allow back and forward slashes to be\n\t// used interchangeably.  However, an application started with\n\t// CreateProcess() may fail to find Side-by-Side library dependencies\n\t// in the same directory as the executable if forward slashes are\n\t// used as path separators, so convert the path to use back slashes here.\n\t//\n\t// This may be related to LoadLibrary() requiring backslashes instead\n\t// of forward slashes.\n\tstd::string executable = FileUtils::toWindowsPathSeparators(_executable);\n\n\tstd::list<std::string> args(_args);\n\targs.push_front(executable);\n\tstd::string commandLine = quoteArgs(args);\n\n\tSTARTUPINFO startupInfo;\n\tZeroMemory(&startupInfo,sizeof(startupInfo));\n\tstartupInfo.cb = sizeof(startupInfo);\n\n\tPROCESS_INFORMATION processInfo;\n\tZeroMemory(&processInfo,sizeof(processInfo));\n\n\tchar* commandLineStr = strdup(commandLine.c_str());\n\tbool result = CreateProcess(\n\t    executable.c_str(),\n\t\tcommandLineStr,\n\t\t0 /* process attributes */,\n\t\t0 /* thread attributes */,\n\t\tfalse /* inherit handles */,\n\t\tNORMAL_PRIORITY_CLASS /* creation flags */,\n\t\t0 /* environment */,\n\t\t0 /* current directory */,\n\t\t&startupInfo /* startup info */,\n\t\t&processInfo /* process information */\n\t);\n\n\tif (!result)\n\t{\n\t\tLOG(Error,\"Failed to start child process. \" + executable + \" Last error: \" + intToStr(GetLastError()));\n\t\treturn RunFailed;\n\t}\n\telse\n\t{\n\t\tif (runMode == RunSync)\n\t\t{\n\t\t\tif (WaitForSingleObject(processInfo.hProcess,INFINITE) == WAIT_OBJECT_0)\n\t\t\t{\n\t\t\t\tDWORD status = WaitFailed;\n\t\t\t\tif (GetExitCodeProcess(processInfo.hProcess,&status) != 0)\n\t\t\t\t{\n\t\t\t\t\tLOG(Error,\"Failed to get exit code for process\");\n\t\t\t\t}\n\t\t\t\treturn status;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tLOG(Error,\"Failed to wait for process to finish\");\n\t\t\t\treturn WaitFailed;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// process is being run asynchronously - return zero as if it had\n\t\t\t// succeeded\n\t\t\treturn 0;\n\t\t}\n\t}\n}\n#endif\n\t\t\nstd::string ProcessUtils::currentProcessPath()\n{\n#if defined(PLATFORM_FREEBSD)\n\tstatic char cmdline[PATH_MAX];\n\tint mib[4];\n\n\tmib[0] = CTL_KERN;\n\tmib[1] = KERN_PROC;\n\tmib[2] = KERN_PROC_ARGS;\n\tmib[3] = getpid();\n\n\tsize_t len = sizeof(cmdline);\n\tif (sysctl(mib, 4, &cmdline, &len, NULL, 0) == -1)\n\t{\n\t\tLOG(Error, \"Could not get command line path!\");\n\t\treturn \"\";\n\t}\n\treturn std::string(cmdline);\n#elif defined(PLATFORM_LINUX)\n\tstd::string path = FileUtils::canonicalPath(\"/proc/self/exe\");\n\tLOG(Info,\"Current process path \" + path);\n\treturn path;\n#elif defined(PLATFORM_MAC)\n\tuint32_t bufferSize = PATH_MAX;\n\tchar buffer[bufferSize];\n\t_NSGetExecutablePath(buffer,&bufferSize);\n\treturn buffer;\n#else\n\tchar fileName[MAX_PATH];\n\tGetModuleFileName(0 /* get path of current process */,fileName,MAX_PATH);\n\treturn fileName;\n#endif\n}\n\n#ifdef PLATFORM_WINDOWS\nvoid ProcessUtils::convertWindowsCommandLine(LPCWSTR commandLine, int& argc, char**& argv)\n{\n\targc = 0;\n\tLPWSTR* argvUnicode = CommandLineToArgvW(commandLine,&argc);\n\n\targv = new char*[argc];\n\tfor (int i=0; i < argc; i++)\n\t{\n\t\tconst int BUFFER_SIZE = 4096;\n\t\tchar buffer[BUFFER_SIZE];\n\n\t\tint length = WideCharToMultiByte(CP_ACP,\n\t\t  0 /* flags */,\n\t\t  argvUnicode[i],\n\t\t  -1, /* argvUnicode is null terminated */\n\t\t  buffer,\n\t\t  BUFFER_SIZE,\n\t\t  0,\n\t\t  false);\n\n\t\t// note: if WideCharToMultiByte() fails it will return zero,\n\t\t// in which case we store a zero-length argument in argv\n\t\tif (length == 0)\n\t\t{\n\t\t\targv[i] = new char[1];\n\t\t\targv[i][0] = '\\0';\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// if the input string to WideCharToMultiByte is null-terminated,\n\t\t\t// the output is also null-terminated\n\t\t\targv[i] = new char[length];\n\t\t\tstrncpy(argv[i],buffer,length);\n\t\t}\n\t}\n\tLocalFree(argvUnicode);\n}\n#endif\n\n"
  },
  {
    "path": "src/ProcessUtils.h",
    "content": "#pragma once\n\n#include \"Platform.h\"\n\n#include <list>\n#include <string>\n\n/** A set of functions to get information about the current\n  * process and launch new processes.\n  */\nclass ProcessUtils\n{\n\tpublic:\n\t\tenum Errors\n\t\t{\n\t\t\t/** Status code returned by runElevated() if launching\n\t\t\t  * the elevated process fails.\n\t\t\t  */\n\t\t\tRunElevatedFailed = 255,\n\t\t\t/** Status code returned by runSync() if the application\n                          * cannot be started.\n                          */\n                        RunFailed = -8,\n\t\t\t/** Status code returned by runSync() if waiting for\n                          * the application to exit and reading its status code fails.\n                          */\n                        WaitFailed = -1\n\t\t};\n\n\t\tstatic PLATFORM_PID currentProcessId();\n\n\t\t/** Returns the absolute path to the main binary for\n\t\t  * the current process.\n\t\t  */\n\t\tstatic std::string currentProcessPath();\n\n\t\t/** Start a process and wait for it to finish before\n\t\t  * returning its exit code.\n\t\t  *\n\t\t  * Returns -1 if the process cannot be started.\n\t\t  */\n\t\tstatic int runSync(const std::string& executable,\n\t\t                    const std::list<std::string>& args);\n\n\t\t/** Start a process and return without waiting for\n\t\t  * it to finish.\n\t\t  */\n\t\tstatic void runAsync(const std::string& executable,\n\t\t                     const std::list<std::string>& args);\n\n\t\t/** Run a process with administrative privileges and return the\n\t\t  * status code of the process, or 0 on Windows.\n\t\t  *\n\t\t  * Returns RunElevatedFailed if the elevated process could\n\t\t  * not be started.\n\t\t  */\n\t\tstatic int runElevated(const std::string& executable,\n\t\t                       const std::list<std::string>& args,\n\t\t                       const std::string& task);\n\n\t\t/** Wait for a process to exit.\n\t\t  * Returns true if the process was found and has exited or false\n\t\t  * otherwise.\n\t\t  */\n\t\tstatic bool waitForProcess(PLATFORM_PID pid);\n\n#ifdef PLATFORM_WINDOWS\n\t\t/** Convert a unicode command line returned by GetCommandLineW()\n\t\t * to a standard (argc,argv) pair.  The resulting argv array and each\n\t\t * element of argv must be freed using free()\n\t\t */\n\t\tstatic void convertWindowsCommandLine(LPCWSTR commandLine, int& argc, char**& argv);\n#endif\n\n\tprivate:\n\t\tenum RunMode\n\t\t{\n\t\t\tRunSync,\n\t\t\tRunAsync\n\t\t};\n\t\tstatic int runElevatedLinux(const std::string& executable,\n\t\t                             const std::list<std::string>& args,\n\t\t                            const std::string& task);\n\t\tstatic int runElevatedMac(const std::string& executable,\n\t\t                           const std::list<std::string>& args);\n\t\tstatic int runElevatedWindows(const std::string& executable,\n\t\t                               const std::list<std::string>& args);\n\n\t\tstatic PLATFORM_PID runAsyncUnix(const std::string& executable,\n\t\t                         const std::list<std::string>& args);\n\t\tstatic int runWindows(const std::string& executable,\n\t\t                      const std::list<std::string>& args,\n\t                          RunMode runMode);\n\t\tstatic int runSyncUnix(const std::string& executable,\n\t\t                        const std::list<std::string>& args);\n};\n\n"
  },
  {
    "path": "src/StandardDirs.cpp",
    "content": "#include \"StandardDirs.h\"\n\n#include \"FileUtils.h\"\n#include \"StringUtils.h\"\n\n#ifdef PLATFORM_UNIX\n #include <stdlib.h>\n #include <pwd.h>\n #include <unistd.h> \n#endif\n\n#ifdef PLATFORM_WINDOWS\n#include <shlobj.h>\n#endif\n\n#ifdef PLATFORM_UNIX\nstd::string StandardDirs::homeDir()\n{\n\tstd::string dir = notNullString(getenv(\"HOME\"));\n\tif (!dir.empty())\n\t{\n\t\treturn dir;\n\t}\n\telse\n\t{\n\t\t// note: if this process has been elevated with sudo,\n\t\t// this will return the home directory of the root user\n\t\tstruct passwd* userData = getpwuid(getuid());\n\t\treturn notNullString(userData->pw_dir);\n\t}\n}\n#endif\n\nstd::string StandardDirs::appDataPath(const std::string& organizationName,\n                        const std::string& appName)\n{\n#if defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD)\n\tstd::string xdgDataHome = notNullString(getenv(\"XDG_DATA_HOME\"));\n\tif (xdgDataHome.empty())\n\t{\n\t\txdgDataHome = homeDir() + \"/.local/share\";\n\t}\n\txdgDataHome += \"/data/\" + organizationName + '/' + appName;\n\treturn xdgDataHome;\n\n#elif defined(PLATFORM_MAC)\n\tstd::string path = applicationSupportFolderPath();\n\tpath += '/' + appName;\n\treturn path;\n#elif defined(PLATFORM_WINDOWS)\n\tchar buffer[MAX_PATH + 1];\n\tif (SHGetFolderPath(0, CSIDL_LOCAL_APPDATA, 0 /* hToken */, SHGFP_TYPE_CURRENT, buffer) == S_OK)\n\t{\n\t\tstd::string path = FileUtils::toUnixPathSeparators(notNullString(buffer));\n\t\tpath += '/' + organizationName + '/' + appName;\n\t\treturn path;\n\t}\n\telse\n\t{\n\t\treturn std::string();\n\t}\n#endif\n}\n"
  },
  {
    "path": "src/StandardDirs.h",
    "content": "#pragma once\n\n#include \"Platform.h\"\n\n#include <string>\n\nclass StandardDirs\n{\n\tpublic:\n\t\tstatic std::string appDataPath(const std::string& organizationName,\n                                       const std::string& appName);\n\n\tprivate:\n#ifdef PLATFORM_UNIX\n\t\tstatic std::string homeDir();\n#endif\n\n#ifdef PLATFORM_MAC\n\t\tstatic std::string applicationSupportFolderPath();\n#endif\n};\n\n"
  },
  {
    "path": "src/StandardDirs.mm",
    "content": "#include <Foundation/Foundation.h>\n\n#include \"StandardDirs.h\"\n\nstd::string StandardDirs::applicationSupportFolderPath()\n{\n\tNSArray* paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory,\n\t                   NSUserDomainMask,\n\t                   true /* expand tildes */);\n\n\tfor (unsigned int i=0; i < [paths count]; i++)\n\t{\n\t\tNSString* path = [paths objectAtIndex:i];\n\t\treturn std::string([path UTF8String]);\n\t}\n\treturn std::string();\n}\n\n"
  },
  {
    "path": "src/StringUtils.h",
    "content": "#pragma once\n\n#include <string.h>\n#include <string>\n#include <sstream>\n#include <stdlib.h>\n\ntemplate <class T>\ninline std::string intToStr(T i)\n{\n\tstd::stringstream stream;\n\tstream << i;\n\treturn stream.str();\n}\n\ninline bool strToBool(const std::string& str)\n{\n\treturn str == \"true\" || atoi(str.c_str()) != 0;\n}\n\n/** Returns @p text if non-null or a pointer\n  * to an empty null-terminated string otherwise.\n  */\ninline const char* notNullString(const char* text)\n{\n\tif (text)\n\t{\n\t\treturn text;\n\t}\n\telse\n\t{\n\t\treturn \"\";\n\t}\n}\n\ninline bool endsWith(const std::string& str, const char* text)\n{\n\tsize_t length = strlen(text);\n\treturn str.find(text,str.size() - length) != std::string::npos;\n}\n\ninline bool startsWith(const std::string& str, const char* text)\n{\n\treturn str.find(text,0) == 0;\n}\n\n"
  },
  {
    "path": "src/UpdateDialog.cpp",
    "content": "#include \"UpdateDialog.h\"\n\nUpdateDialog::UpdateDialog()\n: m_autoClose(false)\n{\n}\n\nvoid UpdateDialog::setAutoClose(bool autoClose)\n{\n\tm_autoClose = autoClose;\n}\n\nbool UpdateDialog::autoClose() const\n{\n\treturn m_autoClose;\n}\n\nvoid UpdateDialog::updateFinished()\n{\n\tif (m_autoClose)\n\t{\n\t\tquit();\n\t}\n}\n\n"
  },
  {
    "path": "src/UpdateDialog.h",
    "content": "#pragma once\n\n#include \"UpdateObserver.h\"\n\n/** Base class for the updater's UI, sub-classed\n * by the different platform implementations.\n */\nclass UpdateDialog : public UpdateObserver\n{\n\tpublic:\n\t\tUpdateDialog();\n\t\tvirtual ~UpdateDialog() {};\n\n\t\t/** Sets whether the updater should automatically\n\t\t  * exit once the update has been installed.\n\t\t  */\n\t\tvoid setAutoClose(bool autoClose);\n\t\tbool autoClose() const;\n\n\t\tvirtual void init(int argc, char** argv) = 0;\n\t\tvirtual void exec() = 0;\n\t\tvirtual void quit() = 0;\n\n\t\tvirtual void updateFinished();\t\n\t\n\tprivate:\n\t\tbool m_autoClose;\n};\n\n"
  },
  {
    "path": "src/UpdateDialogAscii.cpp",
    "content": "#include \"UpdateDialogAscii.h\"\n\n#include \"AppInfo.h\"\n#include \"ProcessUtils.h\"\n#include \"StringUtils.h\"\n\nconst char* introMessage = \n \"%s (ASCII-art edition)\\n\"\n \"====================================\\n\"\n \"\\n\"\n \"We have a nice graphical interface for the %s, but unfortunately\\n\"\n \"we can't show it to you :(\\n\"\n \"\\n\"\n \"You can fix this by installing the GTK 2 libraries.\\n\\n\"\n \"Installing Updates...\\n\";\n\nvoid UpdateDialogAscii::init(int /* argc */, char** /* argv */)\n{\n\tconst char* path = \"/tmp/update-progress\";\n\tm_output.open(path);\n\n\tchar message[4096];\n\tsprintf(message,introMessage,AppInfo::name().c_str());\n\tm_output << message;\n\n\tstd::string command = \"xterm\";\n\tstd::list<std::string> args;\n\targs.push_back(\"-hold\");\n\targs.push_back(\"-T\");\n\targs.push_back(AppInfo::name());\n\targs.push_back(\"-e\");\n\targs.push_back(\"tail\");\n\targs.push_back(\"-n+1\");\n\targs.push_back(\"-f\");\n\targs.push_back(path);\n\n\tProcessUtils::runAsync(command,args);\n}\n\nvoid UpdateDialogAscii::updateError(const std::string& errorMessage)\n{\n\tm_mutex.lock();\n\tm_output << \"\\nThere was a problem installing the update: \" << errorMessage << std::endl;\n\tm_mutex.unlock();\n}\n\nvoid UpdateDialogAscii::updateProgress(int percentage)\n{\n\tm_mutex.lock();\n\tm_output << \"Update Progress: \" << intToStr(percentage) << '%' << std::endl;\n\tm_mutex.unlock();\n}\n\nvoid UpdateDialogAscii::updateFinished()\n{\n\tm_mutex.lock();\n\tm_output << \"\\nUpdate Finished.  You can now restart \" << AppInfo::appName() << \".\" << std::endl;\n\tm_mutex.unlock();\n\n\tUpdateDialog::updateFinished();\n}\n\nvoid UpdateDialogAscii::quit()\n{\n}\n\nvoid UpdateDialogAscii::exec()\n{\n}\n\n"
  },
  {
    "path": "src/UpdateDialogAscii.h",
    "content": "#pragma once\n\n#include \"UpdateDialog.h\"\n\n#include <fstream>\n#include \"tinythread.h\"\n\n/** A fallback auto-update progress 'dialog' for use on\n  * Linux when the GTK UI cannot be loaded.\n  *\n  * The 'dialog' consists of an xterm tailing the contents\n  * of a file, into which progress messages are written.\n  */\nclass UpdateDialogAscii : public UpdateDialog\n{\n\tpublic:\n\t\t// implements UpdateDialog\n\t\tvirtual void init(int argc, char** argv);\n\t\tvirtual void exec();\n\t\tvirtual void quit();\n\n\t\t// implements UpdateObserver\n\t\tvirtual void updateError(const std::string& errorMessage);\n\t\tvirtual void updateProgress(int percentage);\n\t\tvirtual void updateFinished();\n\n\tprivate:\n\t\ttthread::mutex m_mutex;\n\t\tstd::ofstream m_output;\n};\n\n"
  },
  {
    "path": "src/UpdateDialogCocoa.h",
    "content": "#pragma once\n\n#include \"UpdateDialog.h\"\n#include \"UpdateObserver.h\"\n\nclass UpdateDialogPrivate;\n\nclass UpdateDialogCocoa : public UpdateDialog\n{\n\tpublic:\n\t\tUpdateDialogCocoa();\n\t\t~UpdateDialogCocoa();\n\n\t\t// implements UpdateDialog\n\t\tvirtual void init(int argc, char** argv);\n\t\tvirtual void exec();\n\t\tvirtual void quit();\n\n\t\t// implements UpdateObserver\n\t\tvirtual void updateError(const std::string& errorMessage);\n\t\tvirtual void updateProgress(int percentage);\n\t\tvirtual void updateFinished();\n\n\t\tstatic void* createAutoreleasePool();\n\t\tstatic void releaseAutoreleasePool(void* data);\n\n\tprivate:\n\t\tvoid enableDockIcon();\n\n\t\tUpdateDialogPrivate* d;\n};\n\n"
  },
  {
    "path": "src/UpdateDialogCocoa.mm",
    "content": "#include \"UpdateDialogCocoa.h\"\n\n#include <Cocoa/Cocoa.h>\n#include <Carbon/Carbon.h>\n\n#include \"AppInfo.h\"\n#include \"Log.h\"\n#include \"StringUtils.h\"\n\n@interface UpdateDialogDelegate : NSObject\n{\n\t@public UpdateDialogPrivate* dialog;\n}\n- (void) finishClicked;\n- (void) reportUpdateError:(id)arg;\n- (void) reportUpdateProgress:(id)arg;\n- (void) reportUpdateFinished:(id)arg;\n@end\n\nclass UpdateDialogPrivate\n{\n\tpublic:\n\t\tUpdateDialogPrivate()\n\t\t: hadError(false)\n\t\t{\n\t\t}\n\n\t\tUpdateDialogDelegate* delegate;\n\t\tNSAutoreleasePool* pool;\n\t\tNSWindow* window;\n\t\tNSButton* finishButton;\n\t\tNSTextField* progressLabel;\n\t\tNSProgressIndicator* progressBar;\n\t\tbool hadError;\n};\n\n@implementation UpdateDialogDelegate\n- (void) finishClicked\n{\n\t[NSApp stop:self];\n}\n- (void) reportUpdateError: (id)arg\n{\n\tdialog->hadError = true;\n\n\tNSAlert* alert = [NSAlert \n\t\talertWithMessageText: @\"Update Problem\"\n\t    defaultButton: nil\n\t    alternateButton: nil\n\t    otherButton: nil\n\t    informativeTextWithFormat: @\"There was a problem installing the update:\\n\\n%@\", arg];\n\t[alert runModal];\n}\n- (void) reportUpdateProgress: (id)arg\n{\n\tint percentage = [arg intValue];\n\t[dialog->progressBar setDoubleValue:(percentage/100.0)];\n}\n- (void) reportUpdateFinished: (id)arg\n{\n\tNSMutableString* message = [[NSMutableString alloc] init];\n\tif (!dialog->hadError)\n\t{\n\t\t[message appendString:@\"Updates installed.\"];\n\t}\n\telse\n\t{\n\t\t[message appendString:@\"Update failed.\"];\n\t}\n\n\t[message appendString:@\"  Click 'Finish' to restart the application.\"];\t\n\t[dialog->progressLabel setTitleWithMnemonic:message];\n\t[message release];\n}\n@end\n\nUpdateDialogCocoa::UpdateDialogCocoa()\n: d(new UpdateDialogPrivate)\n{\n\t[NSApplication sharedApplication];\n\td->pool = [[NSAutoreleasePool alloc] init];\n}\n\nUpdateDialogCocoa::~UpdateDialogCocoa()\n{\n\t[d->pool release];\n}\n\nvoid UpdateDialogCocoa::enableDockIcon()\n{\n\t// convert the application to a foreground application and in\n\t// the process, enable the dock icon\n\n\t// the reverse transformation is not possible, according to\n\t//  http://stackoverflow.com/questions/2832961/is-it-possible-to-hide-the-dock-icon-programmatically \n\tProcessSerialNumber psn;\n\tGetCurrentProcess(&psn);\n\tTransformProcessType(&psn,kProcessTransformToForegroundApplication);\n}\n\nvoid UpdateDialogCocoa::init(int /* argc */, char** /* argv */)\n{\n\tenableDockIcon();\n\t\n\t// make the updater the active application.  This does not\n\t// happen automatically because the updater starts as a\n\t// background application\n\t[NSApp activateIgnoringOtherApps:YES];\n\n\td->delegate = [[UpdateDialogDelegate alloc] init];\n\td->delegate->dialog = d;\n\n\tint width = 370;\n\tint height = 100;\n\n\td->window = [[NSWindow alloc] initWithContentRect:NSMakeRect(200, 200, width, height)\n\t        styleMask:NSTitledWindowMask | NSMiniaturizableWindowMask\n\t        backing:NSBackingStoreBuffered defer:NO];\n\t[d->window setTitle:[NSString stringWithUTF8String:AppInfo::name().c_str()]];\n\n\td->finishButton = [[NSButton alloc] init];\n\t[d->finishButton setTitle:@\"Finish\"];\n\t[d->finishButton setButtonType:NSMomentaryLightButton];\n\t[d->finishButton setBezelStyle:NSRoundedBezelStyle];\n\t[d->finishButton setTarget:d->delegate];\n\t[d->finishButton setAction:@selector(finishClicked)];\n\n\td->progressBar = [[NSProgressIndicator alloc] init];\n\t[d->progressBar setIndeterminate:false];\n\t[d->progressBar setMinValue:0.0];\n\t[d->progressBar setMaxValue:1.0];\n\n\td->progressLabel = [[NSTextField alloc] init];\n\t[d->progressLabel setEditable:false];\n\t[d->progressLabel setSelectable:false];\n\t[d->progressLabel setTitleWithMnemonic:@\"Installing Updates\"];\n\t[d->progressLabel setBezeled:false];\n\t[d->progressLabel setDrawsBackground:false];\n\n\tNSView* windowContent = [d->window contentView];\n\t[windowContent addSubview:d->progressLabel];\n\t[windowContent addSubview:d->progressBar];\n\t[windowContent addSubview:d->finishButton];\n\n\t[d->progressLabel setFrame:NSMakeRect(10,70,width - 10,20)];\n\t[d->progressBar setFrame:NSMakeRect(10,40,width - 20,20)];\n\t[d->finishButton setFrame:NSMakeRect(width - 85,5,80,30)];\n}\n\nvoid UpdateDialogCocoa::exec()\n{\n\t[d->window makeKeyAndOrderFront:d->window];\n\t[d->window center];\n\t[NSApp run];\n}\n\nvoid UpdateDialogCocoa::updateError(const std::string& errorMessage)\n{\n\t[d->delegate performSelectorOnMainThread:@selector(reportUpdateError:)\n\t             withObject:[NSString stringWithUTF8String:errorMessage.c_str()]\n\t             waitUntilDone:false];\n}\n\nvoid UpdateDialogCocoa::updateProgress(int percentage)\n{\n\t[d->delegate performSelectorOnMainThread:@selector(reportUpdateProgress:)\n\t             withObject:[NSNumber numberWithInt:percentage]\n\t             waitUntilDone:false];\n}\n\nvoid UpdateDialogCocoa::updateFinished()\n{\n\t[d->delegate performSelectorOnMainThread:@selector(reportUpdateFinished:)\n\t             withObject:nil\n\t             waitUntilDone:false];\n\tUpdateDialog::updateFinished();\n}\n\nvoid* UpdateDialogCocoa::createAutoreleasePool()\n{\n\treturn [[NSAutoreleasePool alloc] init];\n}\n\nvoid UpdateDialogCocoa::releaseAutoreleasePool(void* arg)\n{\n\t[(id)arg release];\n}\n\nvoid UpdateDialogCocoa::quit()\n{\n\t[NSApp performSelectorOnMainThread:@selector(stop:) withObject:d->delegate waitUntilDone:false];\n}\n\n\n"
  },
  {
    "path": "src/UpdateDialogGtk.cpp",
    "content": "#include \"UpdateDialogGtk.h\"\n\n#include \"AppInfo.h\"\n#include \"StringUtils.h\"\n\n#include <glib.h>\n#include <gtk/gtk.h>\n\nUpdateDialogGtk* update_dialog_gtk_new()\n{\n\treturn new UpdateDialogGtk();\n}\n\nUpdateDialogGtk::UpdateDialogGtk()\n: m_hadError(false)\n{\n}\n\nvoid UpdateDialogGtk::init(int argc, char** argv)\n{\n\tgtk_init(&argc,&argv);\n\n\tm_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);\n\tgtk_window_set_title(GTK_WINDOW(m_window),AppInfo::name().c_str());\n\n\tm_progressLabel = gtk_label_new(\"Installing Updates\");\n\n\tGtkWidget* windowLayout = gtk_vbox_new(FALSE,3);\n\tGtkWidget* buttonLayout = gtk_hbox_new(FALSE,3);\n\tGtkWidget* labelLayout = gtk_hbox_new(FALSE,3);\n\n\tm_finishButton = gtk_button_new_with_label(\"Finish\");\n\tgtk_widget_set_sensitive(m_finishButton,false);\n\n\tm_progressBar = gtk_progress_bar_new();\n\n\t// give the dialog a sensible default size by setting a minimum\n\t// width on the progress bar.  This is used instead of setting\n\t// a default size for the dialog since gtk_window_set_default_size()\n\t// is ignored when a dialog is marked as non-resizable\n\tgtk_widget_set_usize(m_progressBar,350,-1);\n\n\tgtk_signal_connect(GTK_OBJECT(m_finishButton),\"clicked\",\n\t                   GTK_SIGNAL_FUNC(UpdateDialogGtk::finish),this);\n\n\tgtk_container_add(GTK_CONTAINER(m_window),windowLayout);\n\tgtk_container_set_border_width(GTK_CONTAINER(m_window),12);\n\n\tgtk_box_pack_start(GTK_BOX(labelLayout),m_progressLabel,false,false,0);\n\tgtk_box_pack_end(GTK_BOX(buttonLayout),m_finishButton,false,false,0);\n\n\tgtk_box_pack_start(GTK_BOX(windowLayout),labelLayout,false,false,0);\n\tgtk_box_pack_start(GTK_BOX(windowLayout),m_progressBar,false,false,0);\n\tgtk_box_pack_start(GTK_BOX(windowLayout),buttonLayout,false,false,0);\n\n\t\n\tgtk_widget_show(m_progressLabel);\n\tgtk_widget_show(labelLayout);\n\tgtk_widget_show(windowLayout);\n\tgtk_widget_show(buttonLayout);\n\tgtk_widget_show(m_finishButton);\n\tgtk_widget_show(m_progressBar);\n\n\tgtk_window_set_resizable(GTK_WINDOW(m_window),false);\n\tgtk_window_set_position(GTK_WINDOW(m_window),GTK_WIN_POS_CENTER);\n\n\tgtk_widget_show(m_window);\n}\n\nvoid UpdateDialogGtk::exec()\n{\n\tgtk_main();\n}\n\nvoid UpdateDialogGtk::finish(GtkWidget* widget, gpointer _dialog)\n{\n\tUpdateDialogGtk* dialog = static_cast<UpdateDialogGtk*>(_dialog);\n\tdialog->quit();\n}\n\nvoid UpdateDialogGtk::quit()\n{\n\tgtk_main_quit();\n}\n\ngboolean UpdateDialogGtk::notify(void* _message)\n{\n\tUpdateMessage* message = static_cast<UpdateMessage*>(_message);\n\tUpdateDialogGtk* dialog = static_cast<UpdateDialogGtk*>(message->receiver);\n\tswitch (message->type)\n\t{\n\t\tcase UpdateMessage::UpdateProgress:\n\t\t\tgtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(dialog->m_progressBar),message->progress/100.0);\n\t\t\tbreak;\n\t\tcase UpdateMessage::UpdateFailed:\n\t\t\t{\n\t\t\t\tdialog->m_hadError = true;\n\t\t\t\tstd::string errorMessage = AppInfo::updateErrorMessage(message->message);\n\t\t\t\tGtkWidget* errorDialog = gtk_message_dialog_new (GTK_WINDOW(dialog->m_window),\n\t\t\t\t\t\tGTK_DIALOG_DESTROY_WITH_PARENT,\n\t\t\t\t\t\tGTK_MESSAGE_ERROR,\n\t\t\t\t\t\tGTK_BUTTONS_CLOSE,\n\t\t\t\t\t\t\"%s\",\n\t\t\t\t\t\terrorMessage.c_str());\n\t\t\t\tgtk_dialog_run (GTK_DIALOG (errorDialog));\n\t\t\t\tgtk_widget_destroy (errorDialog);\n\t\t\t\tgtk_widget_set_sensitive(dialog->m_finishButton,true);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase UpdateMessage::UpdateFinished:\n\t\t\t{\n\t\t\t\tstd::string message;\n\t\t\t\tif (dialog->m_hadError)\n\t\t\t\t{\n\t\t\t\t\tmessage = \"Update failed.\";\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tmessage = \"Update installed.\";\n\t\t\t\t}\n\t\t\t\tmessage += \"  Click 'Finish' to restart the application.\";\n\t\t\t\tgtk_label_set_text(GTK_LABEL(dialog->m_progressLabel),message.c_str());\n\t\t\t\tgtk_widget_set_sensitive(dialog->m_finishButton,true);\n\t\t\t}\n\t\t\tbreak;\n\t}\n\tdelete message;\n\n\t// do not invoke this function again\n\treturn false;\n}\n\n// callbacks during update installation\nvoid UpdateDialogGtk::updateError(const std::string& errorMessage)\n{\n\tUpdateMessage* message = new UpdateMessage(this,UpdateMessage::UpdateFailed);\n\tmessage->message = errorMessage;\n\tg_idle_add(&UpdateDialogGtk::notify,message);\n}\n\nvoid UpdateDialogGtk::updateProgress(int percentage)\n{\n\tUpdateMessage* message = new UpdateMessage(this,UpdateMessage::UpdateProgress);\n\tmessage->progress = percentage;\n\tg_idle_add(&UpdateDialogGtk::notify,message);\n}\n\nvoid UpdateDialogGtk::updateFinished()\n{\n\tUpdateMessage* message = new UpdateMessage(this,UpdateMessage::UpdateFinished);\n\tg_idle_add(&UpdateDialogGtk::notify,message);\n\tUpdateDialog::updateFinished();\n}\n\n\n"
  },
  {
    "path": "src/UpdateDialogGtk.h",
    "content": "#pragma once\n\n#include \"UpdateDialog.h\"\n#include \"UpdateMessage.h\"\n#include \"UpdateObserver.h\"\n\n#include <gtk/gtk.h>\n\nclass UpdateDialogGtk : public UpdateDialog\n{\n\tpublic:\n\t\tUpdateDialogGtk();\n\n\t\t// implements UpdateDialog\n\t\tvirtual void init(int argc, char** argv);\n\t\tvirtual void exec();\n\t\tvirtual void quit();\n\n\t\t// observer callbacks - these may be called\n\t\t// from a background thread\n\t\tvirtual void updateError(const std::string& errorMessage);\n\t\tvirtual void updateProgress(int percentage);\n\t\tvirtual void updateFinished();\n\n\tprivate:\n\t\tstatic void finish(GtkWidget* widget, gpointer dialog);\n\t\tstatic gboolean notify(void* message);\n\n\t\tGtkWidget* m_window;\n\t\tGtkWidget* m_progressLabel;\n\t\tGtkWidget* m_finishButton;\n\t\tGtkWidget* m_progressBar;\n\t\tbool m_hadError;\n};\n\n// helper functions which allow the GTK dialog to be loaded dynamically\n// at runtime and used only if the GTK libraries are actually present\nextern \"C\" {\n\tUpdateDialogGtk* update_dialog_gtk_new();\n}\n\n\n"
  },
  {
    "path": "src/UpdateDialogGtkFactory.cpp",
    "content": "#include \"UpdateDialogGtkFactory.h\"\n\n#include \"FileUtils.h\"\n#include \"Log.h\"\n#include \"UpdateDialog.h\"\n#include \"StringUtils.h\"\n\n#include <dlfcn.h>\n#include <errno.h>\n#include <fcntl.h>\n#include <string.h>\n#include <sys/stat.h>\n#include <unistd.h>\n\nclass UpdateDialogGtk;\n\n// GTK updater UI library embedded into\n// the updater binary\nextern unsigned char libupdatergtk_so[];\nextern unsigned int libupdatergtk_so_len;\n\n// pointers to helper functions in the GTK updater UI library\nUpdateDialogGtk* (*update_dialog_gtk_new)() = 0;\n\n#if __cplusplus >= 201103L\n#define TYPEOF(x) decltype(x)\n#else\n#define TYPEOF(x) typeof(x)\n#endif\n\n#define BIND_FUNCTION(library,function) \\\n\tfunction = reinterpret_cast<TYPEOF(function)>(dlsym(library,#function));\n\n#define MAX_FILE_PATH 4096\n\nbool extractFileFromBinary(int fd, const void* buffer, size_t length)\n{\n\tsize_t count = write(fd,buffer,length);\n\treturn count >= length;\n}\n\nUpdateDialog* UpdateDialogGtkFactory::createDialog()\n{\n    \tchar libPath[MAX_FILE_PATH];\n\tstrncpy(libPath, \"/tmp/mendeley-libUpdaterGtk.so.XXXXXX\", MAX_FILE_PATH);\n\n\tint libFd = mkostemp(libPath, O_CREAT | O_WRONLY | O_TRUNC);\n\tif (libFd == -1)\n\t{\n\t\tLOG(Warn,\"Failed to create temporary file - \" + std::string(strerror(errno)));\n\t\treturn 0;\n\t}\n\n\tif (!extractFileFromBinary(libFd,libupdatergtk_so,libupdatergtk_so_len))\n\t{\n\t\tLOG(Warn,\"Failed to load the GTK UI library - \" + std::string(strerror(errno)));\n\t\treturn 0;\n\t}\n\tclose(libFd);\n\n\tvoid* gtkLib = dlopen(libPath,RTLD_LAZY);\n\tif (!gtkLib)\n\t{\n\t\tLOG(Warn,\"Failed to load the GTK UI - \" + std::string(dlerror()));\n\t\treturn 0;\n\t}\n\n\tBIND_FUNCTION(gtkLib,update_dialog_gtk_new);\n\n\tFileUtils::removeFile(libPath);\n\treturn reinterpret_cast<UpdateDialog*>(update_dialog_gtk_new());\n}\n"
  },
  {
    "path": "src/UpdateDialogGtkFactory.h",
    "content": "#pragma once\n\nclass UpdateDialog;\n\n/** Factory for loading the GTK version of the update dialog\n * dynamically at runtime if the GTK libraries are available.\n */\nclass UpdateDialogGtkFactory\n{\n\tpublic:\n\t\tstatic UpdateDialog* createDialog();\n};\n\n"
  },
  {
    "path": "src/UpdateDialogWin32.cpp",
    "content": "#include \"UpdateDialogWin32.h\"\n\n#include \"AppInfo.h\"\n#include \"Log.h\"\n\n// enable themed controls\n// see http://msdn.microsoft.com/en-us/library/bb773175%28v=vs.85%29.aspx\n// for details\n#pragma comment(linker,\"\\\"/manifestdependency:type='win32' \\\nname='Microsoft.Windows.Common-Controls' version='6.0.0.0' \\\nprocessorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\\\"\")\n\nstatic const char* updateDialogClassName = \"UPDATEDIALOG\";\n\nstatic std::map<HWND,UpdateDialogWin32*> windowDialogMap;\n\n// enable the standard Windows font for a widget\n// (typically Tahoma or Segoe UI)\nvoid setDefaultFont(HWND window)\n{\n\tSendMessage(window, WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT), MAKELPARAM(TRUE, 0));\n}\n\nLRESULT WINAPI updateDialogWindowProc(HWND window, UINT message, WPARAM wParam, LPARAM lParam)\n{\n\tstd::map<HWND,UpdateDialogWin32*>::const_iterator iter = windowDialogMap.find(window);\n\tif (iter != windowDialogMap.end())\n\t{\n\t\treturn iter->second->windowProc(window,message,wParam,lParam);\n\t}\n\telse\n\t{\n\t\treturn DefWindowProc(window,message,wParam,lParam);\n\t}\n};\n\nvoid registerWindowClass()\n{\n\tWNDCLASSEX wcex;\n\tZeroMemory(&wcex,sizeof(WNDCLASSEX));\n\n\twcex.cbSize = sizeof(WNDCLASSEX); \n\n\tHBRUSH background = CreateSolidBrush(GetSysColor(COLOR_3DFACE));\n\n\twcex.style\t\t\t= CS_HREDRAW | CS_VREDRAW;\n\twcex.lpfnWndProc\t= updateDialogWindowProc;\n\twcex.cbClsExtra\t\t= 0;\n\twcex.cbWndExtra\t\t= 0;\n\twcex.hIcon          = LoadIcon(GetModuleHandle(0),\"IDI_APPICON\");\n\twcex.hCursor\t\t= LoadCursor(0,IDC_ARROW);\n\twcex.hbrBackground\t= (HBRUSH)background;\n\twcex.lpszMenuName\t= (LPCTSTR)0;\n\twcex.lpszClassName\t= updateDialogClassName;\n\twcex.hIconSm\t\t= 0;\n\twcex.hInstance      = GetModuleHandle(0);\n\n\tRegisterClassEx(&wcex);\n}\n\nUpdateDialogWin32::UpdateDialogWin32()\n: m_hadError(false)\n{\n\tregisterWindowClass();\n}\n\nUpdateDialogWin32::~UpdateDialogWin32()\n{\n\tfor (std::map<HWND,UpdateDialogWin32*>::iterator iter = windowDialogMap.begin();\n\t     iter != windowDialogMap.end();\n\t\t iter++)\n\t{\n\t\tif (iter->second == this)\n\t\t{\n\t\t\tstd::map<HWND,UpdateDialogWin32*>::iterator oldIter = iter;\n\t\t\t++iter;\n\t\t\twindowDialogMap.erase(oldIter);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t++iter;\n\t\t}\n\t}\n}\n\nvoid UpdateDialogWin32::init(int /* argc */, char** /* argv */)\n{\n\tint width = 300;\n\tint height = 130;\n\n\tDWORD style = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX;\n\tm_window.CreateEx(0 /* dwExStyle */,\n\t                  updateDialogClassName /* class name */,\n                      AppInfo::name().c_str(),\n                      style,\n\t\t\t\t\t  0, 0, width, height,\n\t\t\t\t\t  0 /* parent */, 0 /* menu */, 0 /* reserved */);\n\tm_progressBar.Create(&m_window);\n\tm_finishButton.Create(&m_window);\n\tm_progressLabel.Create(&m_window);\n\n\tinstallWindowProc(&m_window);\n\tinstallWindowProc(&m_finishButton);\n\n\tsetDefaultFont(m_progressLabel);\n\tsetDefaultFont(m_finishButton);\n\t\n\tm_progressBar.SetRange(0,100);\n\tm_finishButton.SetWindowText(\"Finish\");\n\tm_finishButton.EnableWindow(false);\n\tm_progressLabel.SetWindowText(\"Installing Updates\");\n\n\tm_window.SetWindowPos(0,0,0,width,height,0);\n\tm_progressBar.SetWindowPos(0,10,40,width - 30,20,0);\n\tm_progressLabel.SetWindowPos(0,10,15,width - 30,20,0);\n\tm_finishButton.SetWindowPos(0,width-100,70,80,25,0);\n\tm_window.CenterWindow();\n\tm_window.ShowWindow();\n}\n\nvoid UpdateDialogWin32::exec()\n{\n\tm_app.Run();\n}\n\nvoid UpdateDialogWin32::updateError(const std::string& errorMessage)\n{\n\tUpdateMessage* message = new UpdateMessage(UpdateMessage::UpdateFailed);\n\tmessage->message = errorMessage;\n\tSendNotifyMessage(m_window.GetHwnd(),WM_USER,reinterpret_cast<WPARAM>(message),0);\n}\n\nvoid UpdateDialogWin32::updateProgress(int percentage)\n{\n\tUpdateMessage* message = new UpdateMessage(UpdateMessage::UpdateProgress);\n\tmessage->progress = percentage;\n\tSendNotifyMessage(m_window.GetHwnd(),WM_USER,reinterpret_cast<WPARAM>(message),0);\n}\n\nvoid UpdateDialogWin32::updateFinished()\n{\n\tUpdateMessage* message = new UpdateMessage(UpdateMessage::UpdateFinished);\n\tSendNotifyMessage(m_window.GetHwnd(),WM_USER,reinterpret_cast<WPARAM>(message),0);\n\tUpdateDialog::updateFinished();\n}\n\nvoid UpdateDialogWin32::quit()\n{\n\tPostThreadMessage(GetWindowThreadProcessId(m_window.GetHwnd(), 0 /* process ID */), WM_QUIT, 0, 0);\n}\n\nLRESULT WINAPI UpdateDialogWin32::windowProc(HWND window, UINT message, WPARAM wParam, LPARAM lParam)\n{\n\tswitch (message)\n\t{\n\tcase WM_CLOSE:\n\t\tif (window == m_window.GetHwnd())\n\t\t{\n\t\t\treturn 0;\n\t\t}\n\t\tbreak;\n\tcase WM_COMMAND:\n\t\t{\n\t\t\tif (reinterpret_cast<HWND>(lParam) == m_finishButton.GetHwnd())\n\t\t\t{\n\t\t\t\tquit();\n\t\t\t}\n\t\t}\n\t\tbreak;\n\tcase WM_USER:\n\t\t{\n\t\t\tif (window == m_window.GetHwnd())\n\t\t\t{\n\t\t\t\tUpdateMessage* message = reinterpret_cast<UpdateMessage*>(wParam);\n\t\t\t\tswitch (message->type)\n\t\t\t\t{\n\t\t\t\tcase UpdateMessage::UpdateFailed:\n\t\t\t\t\t{\n\t\t\t\t\t\tm_hadError = true;\n\t\t\t\t\t\tstd::string text = AppInfo::updateErrorMessage(message->message);\n\t\t\t\t\t\tMessageBox(m_window.GetHwnd(),text.c_str(),\"Update Problem\",MB_OK);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase UpdateMessage::UpdateProgress:\n\t\t\t\t\tm_progressBar.SetPos(message->progress);\n\t\t\t\t\tbreak;\n\t\t\t\tcase UpdateMessage::UpdateFinished:\n\t\t\t\t\t{\n\t\t\t\t\t\tstd::string message;\n\t\t\t\t\t\tm_finishButton.EnableWindow(true);\n\t\t\t\t\t\tif (m_hadError)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmessage = \"Update failed.\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmessage = \"Updates installed.\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmessage += \"  Click 'Finish' to restart the application.\";\n\t\t\t\t\t\tm_progressLabel.SetWindowText(message.c_str());\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdelete message;\n\t\t\t}\n\t\t}\n\t\tbreak;\n\t}\n\treturn DefWindowProc(window,message,wParam,lParam);\n}\n\nvoid UpdateDialogWin32::installWindowProc(CWnd* window)\n{\n\twindowDialogMap[window->GetHwnd()] = this;\n}\n"
  },
  {
    "path": "src/UpdateDialogWin32.h",
    "content": "#pragma once\n\n#include \"Platform.h\"\n#include \"UpdateDialog.h\"\n#include \"UpdateMessage.h\"\n\n#include \"wincore.h\"\n#include \"controls.h\"\n#include \"stdcontrols.h\"\n\nclass UpdateDialogWin32 : public UpdateDialog\n{\n\tpublic:\n\t\tUpdateDialogWin32();\n\t\t~UpdateDialogWin32();\n\n\t\t// implements UpdateDialog\n\t\tvirtual void init(int argc, char** argv);\n\t\tvirtual void exec();\n\t\tvirtual void quit();\n\n\t\t// implements UpdateObserver\n\t\tvirtual void updateError(const std::string& errorMessage);\n\t\tvirtual void updateProgress(int percentage);\n\t\tvirtual void updateFinished();\n\n\t\tLRESULT WINAPI windowProc(HWND window, UINT message, WPARAM wParam, LPARAM lParam);\n\n\tprivate:\n\t\tvoid installWindowProc(CWnd* window);\n\n\t\tCWinApp m_app;\n\t\tCWnd m_window;\n\t\tCStatic m_progressLabel;\n\t\tCProgressBar m_progressBar;\n\t\tCButton m_finishButton;\n\t\tbool m_hadError;\n};\n\n"
  },
  {
    "path": "src/UpdateInstaller.cpp",
    "content": "#include \"UpdateInstaller.h\"\n\n#include \"AppInfo.h\"\n#include \"FileUtils.h\"\n#include \"Log.h\"\n#include \"ProcessUtils.h\"\n#include \"UpdateObserver.h\"\n\nUpdateInstaller::UpdateInstaller()\n: m_mode(Setup)\n, m_waitPid(0)\n, m_script(0)\n, m_observer(0)\n, m_forceElevated(false)\n, m_autoClose(false)\n{\n}\n\nvoid UpdateInstaller::setWaitPid(PLATFORM_PID pid)\n{\n\tm_waitPid = pid;\n}\n\nvoid UpdateInstaller::setInstallDir(const std::string& path)\n{\n\tm_installDir = path;\n}\n\nvoid UpdateInstaller::setPackageDir(const std::string& path)\n{\n\tm_packageDir = path;\n}\n\nvoid UpdateInstaller::setBackupDir(const std::string& path)\n{\n\tm_backupDir = path;\n}\n\nvoid UpdateInstaller::setMode(Mode mode)\n{\n\tm_mode = mode;\n}\n\nvoid UpdateInstaller::setScript(UpdateScript* script)\n{\n\tm_script = script;\n}\n\nvoid UpdateInstaller::setForceElevated(bool elevated)\n{\n\tm_forceElevated = elevated;\n}\n\nstd::list<std::string> UpdateInstaller::updaterArgs() const\n{\n\tstd::list<std::string> args;\n\targs.push_back(\"--install-dir\");\n\targs.push_back(m_installDir);\n\targs.push_back(\"--package-dir\");\n\targs.push_back(m_packageDir);\n\targs.push_back(\"--script\");\n\targs.push_back(m_script->path());\n\tif (m_autoClose)\n\t{\n\t\targs.push_back(\"--auto-close\");\n\t}\n\treturn args;\n}\n\nvoid UpdateInstaller::reportError(const std::string& error)\n{\n\tif (m_observer)\n\t{\n\t\tm_observer->updateError(error);\n\t\tm_observer->updateFinished();\n\t}\n}\n\nstd::string UpdateInstaller::friendlyErrorForError(const FileUtils::IOException& exception) const\n{\n\tstd::string friendlyError;\n\n\tswitch (exception.type())\n\t{\n\t\tcase FileUtils::IOException::ReadOnlyFileSystem:\n#ifdef PLATFORM_MAC\n\t\t\tfriendlyError = AppInfo::appName() + \" was started from a read-only location.  \"\n\t\t\t                \"Copy it to the Applications folder on your Mac and run \"\n\t\t\t                \"it from there.\";\n#else\n\t\t\tfriendlyError = AppInfo::appName() + \" was started from a read-only location.  \"\n\t\t\t\t\t\t\t\"Re-install it to a location that can be updated and run it from there.\";\n#endif\n\t\t\tbreak;\n\t\tcase FileUtils::IOException::DiskFull:\n\t\t\tfriendlyError = \"The disk is full.  Please free up some space and try again.\";\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\n\treturn friendlyError;\n}\n\nvoid UpdateInstaller::run() throw ()\n{\n\tif (!m_script || !m_script->isValid())\n\t{\n\t\treportError(\"Unable to read update script\");\n\t\treturn;\n\t}\n\tif (m_installDir.empty())\n\t{\n\t\treportError(\"No installation directory specified\");\n\t\treturn;\n\t}\n\n\tstd::string updaterPath;\n\ttry\n\t{\n\t\tupdaterPath = ProcessUtils::currentProcessPath();\n\t}\n\tcatch (const FileUtils::IOException&)\n\t{\n\t\tLOG(Error,\"error reading process path with mode \" + intToStr(m_mode));\n\t\treportError(\"Unable to determine path of updater\");\n\t\treturn;\n\t}\n\n\tif (m_mode == Setup)\n\t{\n\t\tif (m_waitPid != 0)\n\t\t{\n\t\t\tLOG(Info,\"Waiting for main app process to finish\");\n\t\t\tProcessUtils::waitForProcess(m_waitPid);\n\t\t}\n\n\t\tstd::list<std::string> args = updaterArgs();\n\t\targs.push_back(\"--mode\");\n\t\targs.push_back(\"main\");\n\t\targs.push_back(\"--wait\");\n\t\targs.push_back(intToStr(ProcessUtils::currentProcessId()));\n\n\t\tint installStatus = 0;\n\t\tif (m_forceElevated || !checkAccess())\n\t\t{\n\t\t\tLOG(Info,\"Insufficient rights to install app to \" + m_installDir + \" requesting elevation\");\n\n\t\t\t// start a copy of the updater with admin rights\n\t\t\tinstallStatus = ProcessUtils::runElevated(updaterPath,args,AppInfo::name());\n\t\t}\n\t\telse\n\t\t{\n\t\t\tLOG(Info,\"Sufficient rights to install app - restarting with same permissions\");\n\t\t\tinstallStatus = ProcessUtils::runSync(updaterPath,args);\n\t\t}\n\n\t\tif (installStatus == 0)\n\t\t{\n\t\t\tLOG(Info,\"Update install completed\");\n\t\t}\n\t\telse\n\t\t{\n\t\t\tLOG(Error,\"Update install failed with status \" + intToStr(installStatus));\n\t\t}\n\n\t\t// restart the main application - this is currently done\n\t\t// regardless of whether the installation succeeds or not\n\t\trestartMainApp();\n\n\t\t// clean up files created by the updater\n\t\tcleanup();\n\t}\n\telse if (m_mode == Main)\n\t{\n\t\tLOG(Info,\"Starting update installation\");\n\n\t\t// the detailed error string returned by the OS\n\t\tstd::string error;\n\t\t// the message to present to the user.  This may be the same\n\t\t// as 'error' or may be different if a more helpful suggestion\n\t\t// can be made for a particular problem\n\t\tstd::string friendlyError;\n\n\t\ttry\n\t\t{\n\t\t\tLOG(Info,\"Installing new and updated files\");\n\t\t\tinstallFiles();\n\n\t\t\tLOG(Info,\"Uninstalling removed files\");\n\t\t\tuninstallFiles();\n\n\t\t\tLOG(Info,\"Removing backups\");\n\t\t\tremoveBackups();\n\n\t\t\tpostInstallUpdate();\n\t\t}\n\t\tcatch (const FileUtils::IOException& exception)\n\t\t{\n\t\t\terror = exception.what();\n\t\t\tfriendlyError = friendlyErrorForError(exception);\n\t\t}\n\t\tcatch (const std::string& genericError)\n\t\t{\n\t\t\terror = genericError;\n\t\t}\n\n\t\tif (!error.empty())\n\t\t{\n\t\t\tLOG(Error,std::string(\"Error installing update \") + error);\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\trevert();\n\t\t\t}\n\t\t\tcatch (const FileUtils::IOException& exception)\n\t\t\t{\n\t\t\t\tLOG(Error,\"Error reverting partial update \" + std::string(exception.what()));\n\t\t\t}\n\n\t\t\tif (m_observer)\n\t\t\t{\n\t\t\t\tif (friendlyError.empty())\n\t\t\t\t{\n\t\t\t\t\tfriendlyError = error;\n\t\t\t\t}\n\t\t\t\tm_observer->updateError(friendlyError);\n\t\t\t}\n\t\t}\n\n\t\tif (m_observer)\n\t\t{\n\t\t\tm_observer->updateFinished();\n\t\t}\n\t}\n}\n\nvoid UpdateInstaller::cleanup()\n{\n\ttry\n\t{\n\t\tFileUtils::rmdirRecursive(m_packageDir.c_str());\n\t}\n\tcatch (const FileUtils::IOException& ex)\n\t{\n\t\tLOG(Error,\"Error cleaning up updater \" + std::string(ex.what()));\n\t}\n\tLOG(Info,\"Updater files removed\");\n}\n\nvoid UpdateInstaller::revert()\n{\n\tstd::map<std::string,std::string>::const_iterator iter = m_backups.begin();\n\tfor (;iter != m_backups.end();iter++)\n\t{\n\t\tconst std::string& installedFile = iter->first;\n\t\tconst std::string& backupFile = iter->second;\n\n\t\tif (FileUtils::fileExists(installedFile.c_str()))\n\t\t{\n\t\t\tFileUtils::removeFile(installedFile.c_str());\n\t\t}\n\t\tFileUtils::moveFile(backupFile.c_str(),installedFile.c_str());\n\t}\n}\n\nvoid UpdateInstaller::installFile(const UpdateScriptFile& file)\n{\n\tstd::string destPath = m_installDir + '/' + file.path;\n\tstd::string target = file.linkTarget;\n\n\t// backup the existing file if any\n\tbackupFile(destPath);\n\n\t// create the target directory if it does not exist\n\tstd::string destDir = FileUtils::dirname(destPath.c_str());\n\tif (!FileUtils::fileExists(destDir.c_str()))\n\t{\n\t\tFileUtils::mkpath(destDir.c_str());\n\t}\n\n\tif (target.empty())\n\t{\n\t\t// locate the package containing the file\n\t\tif (!file.package.empty())\n\t\t{\n\t\t\tstd::string packageFile = m_packageDir + '/' + file.package + \".zip\";\n\t\t\tif (!FileUtils::fileExists(packageFile.c_str()))\n\t\t\t{\n\t\t\t\tthrow \"Package file does not exist: \" + packageFile;\n\t\t\t}\n\n\t\t\t// extract the file from the package and copy it to\n\t\t\t// the destination\n\t\t\tFileUtils::extractFromZip(packageFile.c_str(),file.path.c_str(),destPath.c_str());\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// if no package is specified, look for an uncompressed file in the\n\t\t\t// root of the package directory\n\t\t\tstd::string sourceFile = m_packageDir + '/' + FileUtils::fileName(file.path.c_str());\n\t\t\tif (!FileUtils::fileExists(sourceFile.c_str()))\n\t\t\t{\n\t\t\t\tthrow \"Source file does not exist: \" + sourceFile;\n\t\t\t}\n\t\t\tFileUtils::copyFile(sourceFile.c_str(),destPath.c_str());\n\t\t}\n\n\t\t// set the permissions on the newly extracted file\n\t\tFileUtils::chmod(destPath.c_str(),file.permissions);\n\t}\n\telse\n\t{\n\t\t// create the symlink\n\t\tFileUtils::createSymLink(destPath.c_str(),target.c_str());\n\t}\n}\n\nvoid UpdateInstaller::installFiles()\n{\n\tstd::vector<UpdateScriptFile>::const_iterator iter = m_script->filesToInstall().begin();\n\tint filesInstalled = 0;\n\tfor (;iter != m_script->filesToInstall().end();iter++)\n\t{\n\t\tinstallFile(*iter);\n\t\t++filesInstalled;\n\t\tif (m_observer)\n\t\t{\n\t\t\tint toInstallCount = static_cast<int>(m_script->filesToInstall().size());\n\t\t\tdouble percentage = ((1.0 * filesInstalled) / toInstallCount) * 100.0;\n\t\t\tm_observer->updateProgress(static_cast<int>(percentage));\n\t\t}\n\t}\n}\n\nvoid UpdateInstaller::uninstallFiles()\n{\n\tstd::vector<std::string>::const_iterator iter = m_script->filesToUninstall().begin();\n\tfor (;iter != m_script->filesToUninstall().end();iter++)\n\t{\n\t\tstd::string path = m_installDir + '/' + iter->c_str();\n\t\tif (FileUtils::fileExists(path.c_str()))\n\t\t{\n\t\t\tFileUtils::removeFile(path.c_str());\n\t\t}\n\t\telse\n\t\t{\n\t\t\tLOG(Warn,\"Unable to uninstall file \" + path + \" because it does not exist.\");\n\t\t}\n\t}\n}\n\nvoid UpdateInstaller::backupFile(const std::string& path)\n{\n\tif (!FileUtils::fileExists(path.c_str()))\n\t{\n\t\t// no existing file to backup\n\t\treturn;\n\t}\n\t\n\tstd::string backupPath = path + \".bak\";\n\tFileUtils::removeFile(backupPath.c_str());\n\tFileUtils::moveFile(path.c_str(), backupPath.c_str());\n\tm_backups[path] = backupPath;\n}\n\nvoid UpdateInstaller::removeBackups()\n{\n\tstd::map<std::string,std::string>::const_iterator iter = m_backups.begin();\n\tfor (;iter != m_backups.end();iter++)\n\t{\n\t\tconst std::string& backupFile = iter->second;\n\t\tFileUtils::removeFile(backupFile.c_str());\n\t}\n}\n\nbool UpdateInstaller::checkAccess()\n{\n\tstd::string testFile = m_installDir + \"/update-installer-test-file\";\n\n\ttry\n\t{\n\t\tFileUtils::removeFile(testFile.c_str());\n\t}\n\tcatch (const FileUtils::IOException& error)\n\t{\n\t\tLOG(Info,\"Removing existing access check file failed \" + std::string(error.what()));\n\t}\n\n\ttry\n\t{\n\t\tFileUtils::touch(testFile.c_str());\n\t\tFileUtils::removeFile(testFile.c_str());\n\t\treturn true;\n\t}\n\tcatch (const FileUtils::IOException& error)\n\t{\n\t\tLOG(Info,\"checkAccess() failed \" + std::string(error.what()));\n\t\treturn false;\n\t}\n}\n\nvoid UpdateInstaller::setObserver(UpdateObserver* observer)\n{\n\tm_observer = observer;\n}\n\nvoid UpdateInstaller::restartMainApp()\n{\n\ttry\n\t{\n\t\tstd::string command;\n\t\tstd::list<std::string> args;\n\n\t\tfor (std::vector<UpdateScriptFile>::const_iterator iter = m_script->filesToInstall().begin();\n\t\t\titer != m_script->filesToInstall().end();\n\t\t\titer++)\n\t\t{\n\t\t\tif (iter->isMainBinary)\n\t\t\t{\n\t\t\t\tcommand = m_installDir + '/' + iter->path;\n\t\t\t}\n\t\t}\n\n\t\tif (!command.empty())\n\t\t{\n\t\t\tLOG(Info,\"Starting main application \" + command);\n\t\t\tProcessUtils::runAsync(command,args);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tLOG(Error,\"No main binary specified in update script\");\n\t\t}\n\t}\n\tcatch (const std::exception& ex)\n\t{\n\t\tLOG(Error,\"Unable to restart main app \" + std::string(ex.what()));\n\t}\n}\n\nvoid UpdateInstaller::postInstallUpdate()\n{\n\t// perform post-install actions\n\n#ifdef PLATFORM_MAC\n\t// touch the application's bundle directory so that\n\t// OS X' Launch Services notices any changes in the application's\n\t// Info.plist file.\n\tFileUtils::touch(m_installDir.c_str());\n#endif\n\n\t// recursively remove any empty directories in the installation dir\n\t// remove any empty directories in the installation dir\n\tFileUtils::removeEmptyDirs(m_installDir.c_str());\n}\n\nvoid UpdateInstaller::setAutoClose(bool autoClose)\n{\n\tm_autoClose = autoClose;\n}\n\n"
  },
  {
    "path": "src/UpdateInstaller.h",
    "content": "#pragma once\n\n#include \"Platform.h\"\n#include \"FileUtils.h\"\n#include \"UpdateScript.h\"\n\n#include <list>\n#include <string>\n#include <map>\n\nclass UpdateObserver;\n\n/** Central class responsible for installing updates,\n  * launching an elevated copy of the updater if required\n  * and restarting the main application once the update\n  * is installed.\n  */\nclass UpdateInstaller\n{\n\tpublic:\n\t\tenum Mode\n\t\t{\n\t\t\tSetup,\n\t\t\tMain\n\t\t};\n\n\t\tUpdateInstaller();\n\t\tvoid setInstallDir(const std::string& path);\n\t\tvoid setPackageDir(const std::string& path);\n\t\tvoid setBackupDir(const std::string& path);\n\t\tvoid setMode(Mode mode);\n\t\tvoid setScript(UpdateScript* script);\n\t\tvoid setWaitPid(PLATFORM_PID pid);\n\t\tvoid setForceElevated(bool elevated);\n\t\tvoid setAutoClose(bool autoClose);\n\n\t\tvoid setObserver(UpdateObserver* observer);\n\n\t\tvoid run() throw ();\n\n\t\tvoid restartMainApp();\n\n\tprivate:\n\t\tvoid cleanup();\n\t\tvoid revert();\n\t\tvoid removeBackups();\n\t\tbool checkAccess();\n\n\t\tvoid installFiles();\n\t\tvoid uninstallFiles();\n\t\tvoid installFile(const UpdateScriptFile& file);\n\t\tvoid backupFile(const std::string& path);\n\t\tvoid reportError(const std::string& error);\n\t\tvoid postInstallUpdate();\n\n\t\tstd::list<std::string> updaterArgs() const;\n\t\tstd::string friendlyErrorForError(const FileUtils::IOException& ex) const;\n\n\t\tMode m_mode;\n\t\tstd::string m_installDir;\n\t\tstd::string m_packageDir;\n\t\tstd::string m_backupDir;\n\t\tPLATFORM_PID m_waitPid;\n\t\tUpdateScript* m_script;\n\t\tUpdateObserver* m_observer;\n\t\tstd::map<std::string,std::string> m_backups;\n\t\tbool m_forceElevated;\n\t\tbool m_autoClose;\n};\n\n"
  },
  {
    "path": "src/UpdateMessage.h",
    "content": "#pragma once\n\n#include <string>\n\n/** UpdateMessage stores information for a message\n  * about the status of update installation sent\n  * between threads.\n  */\nclass UpdateMessage\n{\n\tpublic:\n\t\tenum Type\n\t\t{\n\t\t\tUpdateFailed,\n\t\t\tUpdateProgress,\n\t\t\tUpdateFinished\n\t\t};\n\n\t\tUpdateMessage(void* receiver, Type type)\n\t\t{\n\t\t\tinit(receiver,type);\n\t\t}\n\n\t\tUpdateMessage(Type type)\n\t\t{\n\t\t\tinit(0,type);\n\t\t}\n\n\t\tvoid* receiver;\n\t\tType type;\n\t\tstd::string message;\n\t\tint progress;\n\n\tprivate:\n\t\tvoid init(void* receiver, Type type)\n\t\t{\n\t\t\tthis->progress = 0;\n\t\t\tthis->receiver = receiver;\n\t\t\tthis->type = type;\n\t\t}\n};\n\n"
  },
  {
    "path": "src/UpdateObserver.h",
    "content": "#pragma once\n\n#include <string>\n\n/** Base class for observers of update installation status.\n  * See UpdateInstaller::setObserver()\n  */\nclass UpdateObserver\n{\n\tpublic:\n\t\tvirtual void updateError(const std::string& errorMessage) = 0;\n\t\tvirtual void updateProgress(int percentage) = 0;\n\t\tvirtual void updateFinished() = 0;\n};\n\n"
  },
  {
    "path": "src/UpdateScript.cpp",
    "content": "#include \"UpdateScript.h\"\n\n#include \"Log.h\"\n#include \"StringUtils.h\"\n\n#include \"tinyxml/tinyxml.h\"\n\nstd::string elementText(const TiXmlElement* element)\n{\n\tif (!element)\n\t{\n\t\treturn std::string();\n\t}\n\treturn element->GetText();\n}\n\nUpdateScript::UpdateScript()\n{\n}\n\nvoid UpdateScript::parse(const std::string& path)\n{\n\tm_path.clear();\n\n\tTiXmlDocument document(path);\n\tif (document.LoadFile())\n\t{\n\t\tm_path = path;\n\n\t\tLOG(Info,\"Loaded script from \" + path);\n\n\t\tconst TiXmlElement* updateNode = document.RootElement();\n\t\tparseUpdate(updateNode);\n\t}\n\telse\n\t{\n\t\tLOG(Error,\"Unable to load script \" + path);\n\t}\n}\n\nbool UpdateScript::isValid() const\n{\n\treturn !m_path.empty();\n}\n\nvoid UpdateScript::parseUpdate(const TiXmlElement* updateNode)\n{\n\tbool isV2Compatible = strToBool(notNullString(updateNode->Attribute(\"v2-compatible\")));\n\n\tconst TiXmlElement* depsNode = updateNode->FirstChildElement(\"dependencies\");\n\tconst TiXmlElement* depFileNode = depsNode->FirstChildElement(\"file\");\n\twhile (depFileNode)\n\t{\n\t\tm_dependencies.push_back(std::string(depFileNode->GetText()));\n\t\tdepFileNode = depFileNode->NextSiblingElement(\"file\");\n\t}\n\n\tconst char* installNodeName;\n\tif (isV2Compatible)\n\t{\n\t\t// this update script has been generated for backwards compatibility with\n\t\t// Mendeley Desktop 1.0 which downloads files specified in the <install>\n\t\t// section instead of the <packages> section.  The <install> section\n\t\t// in this case lists the packages and the real list of files to install\n\t\t// is in the <install-v3> section\n\t\tinstallNodeName = \"install-v3\";\n\t}\n\telse\n\t{\n\t\tinstallNodeName = \"install\";\n\t}\n\n\tconst TiXmlElement* installNode = updateNode->FirstChildElement(installNodeName);\n\tif (installNode)\n\t{\n\t\tconst TiXmlElement* installFileNode = installNode->FirstChildElement(\"file\");\n\t\twhile (installFileNode)\n\t\t{\n\t\t\tm_filesToInstall.push_back(parseFile(installFileNode));\n\t\t\tinstallFileNode = installFileNode->NextSiblingElement(\"file\");\n\t\t}\n\t}\n\n\tconst TiXmlElement* uninstallNode = updateNode->FirstChildElement(\"uninstall\");\n\tif (uninstallNode)\n\t{\n\t\tconst TiXmlElement* uninstallFileNode = uninstallNode->FirstChildElement(\"file\");\n\t\twhile (uninstallFileNode)\n\t\t{\n\t\t\tm_filesToUninstall.push_back(uninstallFileNode->GetText());\n\t\t\tuninstallFileNode = uninstallFileNode->NextSiblingElement(\"file\");\n\t\t}\n\t}\n\n\tconst TiXmlElement* packagesNode = updateNode->FirstChildElement(\"packages\");\n\tif (packagesNode)\n\t{\n\t\tconst TiXmlElement* packageNode = packagesNode->FirstChildElement(\"package\");\n\t\twhile (packageNode)\n\t\t{\n\t\t\tm_packages.push_back(parsePackage(packageNode));\n\t\t\tpackageNode = packageNode->NextSiblingElement(\"package\");\n\t\t}\n\t}\n}\n\nUpdateScriptFile UpdateScript::parseFile(const TiXmlElement* element)\n{\n\tUpdateScriptFile file;\n\tfile.path = elementText(element->FirstChildElement(\"name\"));\n\tfile.package = elementText(element->FirstChildElement(\"package\"));\n\n\tstd::string modeString = elementText(element->FirstChildElement(\"permissions\"));\n\tsscanf(modeString.c_str(),\"%i\",&file.permissions);\n\n\tfile.linkTarget = elementText(element->FirstChildElement(\"target\"));\n\tfile.isMainBinary = strToBool(elementText(element->FirstChildElement(\"is-main-binary\")));\n\treturn file;\n}\n\nUpdateScriptPackage UpdateScript::parsePackage(const TiXmlElement* element)\n{\n\tUpdateScriptPackage package;\n\tpackage.name = elementText(element->FirstChildElement(\"name\"));\n\tpackage.sha1 = elementText(element->FirstChildElement(\"hash\"));\n\tpackage.source = elementText(element->FirstChildElement(\"source\"));\n\tpackage.size = atoi(elementText(element->FirstChildElement(\"size\")).c_str());\n\treturn package;\n}\n\nconst std::vector<std::string>& UpdateScript::dependencies() const\n{\n\treturn m_dependencies;\n}\n\nconst std::vector<UpdateScriptPackage>& UpdateScript::packages() const\n{\n\treturn m_packages;\n}\n\nconst std::vector<UpdateScriptFile>& UpdateScript::filesToInstall() const\n{\n\treturn m_filesToInstall;\n}\n\nconst std::vector<std::string>& UpdateScript::filesToUninstall() const\n{\n\treturn m_filesToUninstall;\n}\n\nconst std::string UpdateScript::path() const\n{\n\treturn m_path;\n}\n\n"
  },
  {
    "path": "src/UpdateScript.h",
    "content": "#pragma once\n\n#include <string>\n#include <vector>\n\nclass TiXmlElement;\n\n/** Represents a package containing one or more\n  * files for an update.\n  */\nclass UpdateScriptPackage\n{\n\tpublic:\n\t\tUpdateScriptPackage()\n\t\t: size(0)\n\t\t{}\n\n\t\tstd::string name;\n\t\tstd::string sha1;\n\t\tstd::string source;\n\t\tint size;\n\n\t\tbool operator==(const UpdateScriptPackage& other) const\n\t\t{\n\t\t\treturn name == other.name &&\n\t\t\t       sha1 == other.sha1 &&\n\t\t\t       source == other.source &&\n\t\t\t       size == other.size;\n\t\t}\n};\n\n/** Represents a file to be installed as part of an update. */\nclass UpdateScriptFile\n{\n\tpublic:\n\t\tUpdateScriptFile()\n\t\t: permissions(0)\n\t\t, isMainBinary(false)\n\t\t{}\n\n\t\tstd::string path;\n\t\tstd::string package;\n\t\tstd::string linkTarget;\n\n\t\t/** The permissions for this file, specified\n\t\t  * using the standard Unix mode_t values.\n\t\t  */\n\t\tint permissions;\n\n\t\tbool isMainBinary;\n\n\t\tbool operator==(const UpdateScriptFile& other) const\n\t\t{\n\t\t\treturn path == other.path &&\n\t\t\t       package == other.package &&\n\t\t\t       permissions == other.permissions &&\n\t\t\t       linkTarget == other.linkTarget &&\n\t\t\t       isMainBinary == other.isMainBinary;\n\t\t}\n};\n\n/** Stores information about the packages and files included\n  * in an update, parsed from an XML file.\n  */\nclass UpdateScript\n{\n\tpublic:\n\t\tUpdateScript();\n\n\t\t/** Initialize this UpdateScript with the script stored\n\t\t  * in the XML file at @p path.\n\t\t  */\n\t\tvoid parse(const std::string& path);\n\n\t\tbool isValid() const;\n\t\tconst std::string path() const;\n\t\tconst std::vector<std::string>& dependencies() const;\n\t\tconst std::vector<UpdateScriptPackage>& packages() const;\n\t\tconst std::vector<UpdateScriptFile>& filesToInstall() const;\n\t\tconst std::vector<std::string>& filesToUninstall() const;\n\n\tprivate:\n\t\tvoid parseUpdate(const TiXmlElement* element);\n\t\tUpdateScriptFile parseFile(const TiXmlElement* element);\n\t\tUpdateScriptPackage parsePackage(const TiXmlElement* element);\n\n\t\tstd::string m_path;\n\t\tstd::vector<std::string> m_dependencies;\n\t\tstd::vector<UpdateScriptPackage> m_packages;\n\t\tstd::vector<UpdateScriptFile> m_filesToInstall;\n\t\tstd::vector<std::string> m_filesToUninstall;\n};\n\n"
  },
  {
    "path": "src/UpdaterOptions.cpp",
    "content": "#include \"UpdaterOptions.h\"\n\n#include \"Log.h\"\n#include \"AnyOption/anyoption.h\"\n#include \"FileUtils.h\"\n#include \"Platform.h\"\n#include \"StringUtils.h\"\n\n#include <cstdlib>\n#include <iostream>\n\n#if defined(PLATFORM_WINDOWS) && (_MSC_VER < 1800)\n// atoll() was added in MSVC 2013\nlong long atoll(const char* string)\n{\n\treturn _atoi64(string);\n}\n#endif\n\nUpdaterOptions::UpdaterOptions()\n: mode(UpdateInstaller::Setup)\n, waitPid(0)\n, showVersion(false)\n, forceElevated(false)\n, autoClose(false)\n{\n}\n\nUpdateInstaller::Mode stringToMode(const std::string& modeStr)\n{\n\tif (modeStr == \"main\")\n\t{\n\t\treturn UpdateInstaller::Main;\n\t}\n\telse\n\t{\n\t\tif (!modeStr.empty())\n\t\t{\n\t\t\tLOG(Error,\"Unknown mode \" + modeStr);\n\t\t}\n\t\treturn UpdateInstaller::Setup;\n\t}\n}\n\nvoid UpdaterOptions::parseOldFormatArg(const std::string& arg, std::string* key, std::string* value)\n{\n\tsize_t pos = arg.find('=');\n\tif (pos != std::string::npos)\n\t{\n\t\t*key = arg.substr(0,pos);\n\t\t*value = arg.substr(pos+1);\n\t}\n}\n\n// this is a compatibility function to allow the updater binary\n// to be involved by legacy versions of Mendeley Desktop\n// which used a different syntax for the updater's command-line\n// arguments\nvoid UpdaterOptions::parseOldFormatArgs(int argc, char** argv)\n{\n\tfor (int i=0; i < argc; i++)\n\t{\n\t\tstd::string key;\n\t\tstd::string value;\n\n\t\tparseOldFormatArg(argv[i],&key,&value);\n\n\t\tif (key == \"CurrentDir\")\n\t\t{\n\t\t\t// CurrentDir is the directory containing the main application\n\t\t\t// binary.  On Mac and Linux this differs from the root of\n\t\t\t// the installation directory\n\n#if defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD)\n\t\t\t// the main binary is in lib/mendeleydesktop/libexec,\n\t\t\t// go up 3 levels\n\t\t\tinstallDir = FileUtils::canonicalPath((value + \"/../../../\").c_str());\n#elif defined(PLATFORM_MAC)\n\t\t\t// the main binary is in Contents/MacOS,\n\t\t\t// go up 2 levels\n\t\t\tinstallDir = FileUtils::canonicalPath((value + \"/../../\").c_str());\n#elif defined(PLATFORM_WINDOWS)\n\t\t\t// the main binary is in the root of the install directory\n\t\t\tinstallDir = value;\n#endif\n\t\t}\n\t\telse if (key == \"TempDir\")\n\t\t{\n\t\t\tpackageDir = value;\n\t\t}\n\t\telse if (key == \"UpdateScriptFileName\")\n\t\t{\n\t\t\tscriptPath = value;\n\t\t}\n\t\telse if (key == \"AppFileName\")\n\t\t{\n\t\t\t// TODO - Store app file name\n\t\t}\n\t\telse if (key == \"PID\")\n\t\t{\n\t\t\twaitPid = static_cast<PLATFORM_PID>(atoll(value.c_str()));\n\t\t}\n\t\telse if (key == \"--main\")\n\t\t{\n\t\t\tmode = UpdateInstaller::Main;\n\t\t}\n\t}\n}\n\nvoid UpdaterOptions::parse(int argc, char** argv)\n{\n\tAnyOption parser;\n\tparser.setOption(\"install-dir\");\n\tparser.setOption(\"package-dir\");\n\tparser.setOption(\"script\");\n\tparser.setOption(\"wait\");\n\tparser.setOption(\"mode\");\n\tparser.setFlag(\"version\");\n\tparser.setFlag(\"force-elevated\");\n\tparser.setFlag(\"auto-close\");\n\n\tparser.processCommandArgs(argc,argv);\n\n\tif (parser.getValue(\"mode\"))\n\t{\n\t\tmode = stringToMode(parser.getValue(\"mode\"));\n\t}\n\tif (parser.getValue(\"install-dir\"))\n\t{\n\t\tinstallDir = parser.getValue(\"install-dir\");\n\t}\n\tif (parser.getValue(\"package-dir\"))\n\t{\n\t\tpackageDir = parser.getValue(\"package-dir\");\n\t}\n\tif (parser.getValue(\"script\"))\n\t{\n\t\tscriptPath = parser.getValue(\"script\");\n\t}\n\tif (parser.getValue(\"wait\"))\n\t{\n\t\twaitPid = static_cast<PLATFORM_PID>(atoll(parser.getValue(\"wait\")));\n\t}\n\n\tshowVersion = parser.getFlag(\"version\");\n\tforceElevated = parser.getFlag(\"force-elevated\");\n\tautoClose = parser.getFlag(\"auto-close\");\n\t\t\n\tif (installDir.empty())\n\t{\n\t\t// if no --install-dir argument is present, try parsing\n\t\t// the command-line arguments in the old format (which uses\n\t\t// a list of 'Key=Value' args)\n\t\tparseOldFormatArgs(argc,argv);\n\t}\n}\n\n"
  },
  {
    "path": "src/UpdaterOptions.h",
    "content": "#pragma once\n\n#include \"UpdateInstaller.h\"\n\n/** Parses the command-line options to the updater binary. */\nclass UpdaterOptions\n{\n\tpublic:\n\t\tUpdaterOptions();\n\n\t\tvoid parse(int argc, char** argv);\n\n\t\tUpdateInstaller::Mode mode;\n\t\tstd::string installDir;\n\t\tstd::string packageDir;\n\t\tstd::string scriptPath;\n\t\tPLATFORM_PID waitPid;\n\t\tstd::string logFile;\n\t\tbool showVersion;\n\t\tbool forceElevated;\n\t\tbool autoClose;\n\n\tprivate:\n\t\tvoid parseOldFormatArgs(int argc, char** argv);\n\t\tstatic void parseOldFormatArg(const std::string& arg, std::string* key, std::string* value);\n};\n\n"
  },
  {
    "path": "src/main.cpp",
    "content": "#include \"AppInfo.h\"\n#include \"FileUtils.h\"\n#include \"Log.h\"\n#include \"Platform.h\"\n#include \"ProcessUtils.h\"\n#include \"StringUtils.h\"\n#include \"UpdateScript.h\"\n#include \"UpdaterOptions.h\"\n\n#include \"tinythread.h\"\n\n#if defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD)\n  #include \"UpdateDialogGtkFactory.h\"\n  #include \"UpdateDialogAscii.h\"\n#endif\n\n#if defined(PLATFORM_MAC)\n  #include \"MacBundle.h\"\n  #include \"UpdateDialogCocoa.h\"\n#endif\n\n#if defined(PLATFORM_WINDOWS)\n  #include \"UpdateDialogWin32.h\"\n#endif\n\n#include <iostream>\n#include <memory>\n\n#define UPDATER_VERSION \"0.16\"\n\nUpdateDialog* createUpdateDialog();\n\nvoid runUpdaterThread(void* arg)\n{\n#ifdef PLATFORM_MAC\n\t// create an autorelease pool to free any temporary objects\n\t// created by Cocoa whilst handling notifications from the UpdateInstaller\n\tvoid* pool = UpdateDialogCocoa::createAutoreleasePool();\n#endif\n\n\ttry\n\t{\n\t\tUpdateInstaller* installer = static_cast<UpdateInstaller*>(arg);\n\t\tinstaller->run();\n\t}\n\tcatch (const std::exception& ex)\n\t{\n\t\tLOG(Error,\"Unexpected exception \" + std::string(ex.what()));\n\t}\n\n#ifdef PLATFORM_MAC\n\tUpdateDialogCocoa::releaseAutoreleasePool(pool);\n#endif\n}\n\n#ifdef PLATFORM_MAC\nextern unsigned char Info_plist[];\nextern unsigned int Info_plist_len;\n\nextern unsigned char mac_icns[];\nextern unsigned int mac_icns_len;\n\nbool unpackBundle(int argc, char** argv)\n{\n\tMacBundle bundle(FileUtils::tempPath(),AppInfo::name());\n\tstd::string currentExePath = ProcessUtils::currentProcessPath();\n\n\tif (currentExePath.find(bundle.bundlePath()) != std::string::npos)\n\t{\n\t\t// already running from a bundle\n\t\treturn false;\n\t}\n\tLOG(Info,\"Creating bundle \" + bundle.bundlePath());\n\n\t// create a Mac app bundle\n\tstd::string plistContent(reinterpret_cast<const char*>(Info_plist),Info_plist_len);\n\tstd::string iconContent(reinterpret_cast<const char*>(mac_icns),mac_icns_len);\n\tbundle.create(plistContent,iconContent,ProcessUtils::currentProcessPath());\n\n\tstd::list<std::string> args;\n\tfor (int i = 1; i < argc; i++)\n\t{\n\t\targs.push_back(argv[i]);\n\t}\n\tProcessUtils::runSync(bundle.executablePath(),args);\n\treturn true;\n}\n#endif\n\nvoid setupConsole()\n{\n#ifdef PLATFORM_WINDOWS\n\t// see http://stackoverflow.com/questions/587767/how-to-output-to-console-in-c-windows\n\t// and http://www.libsdl.org/cgi/docwiki.cgi/FAQ_Console\n\tAttachConsole(ATTACH_PARENT_PROCESS);\n\tfreopen( \"CON\", \"w\", stdout );\n\tfreopen( \"CON\", \"w\", stderr );\n#endif\n}\n\nint main(int argc, char** argv)\n{\n#ifdef PLATFORM_MAC\n\tvoid* pool = UpdateDialogCocoa::createAutoreleasePool();\n#endif\n\t\n\tLog::instance()->open(AppInfo::logFilePath());\n\n#ifdef PLATFORM_MAC\n\t// when the updater is run for the first time, create a Mac app bundle\n\t// and re-launch the application from the bundle.  This permits\n\t// setting up bundle properties (such as application icon)\n\tif (unpackBundle(argc,argv))\n\t{\n\t\treturn 0;\n\t}\n#endif\n\n\tUpdaterOptions options;\n\toptions.parse(argc,argv);\n\tif (options.showVersion)\n\t{\n\t\tsetupConsole();\n\t\tstd::cout << \"Update installer version \" << UPDATER_VERSION << std::endl;\n\t\treturn 0;\n\t}\n\n\tUpdateInstaller installer;\n\tUpdateScript script;\n\n\tif (!options.scriptPath.empty())\n\t{\n\t\tscript.parse(FileUtils::makeAbsolute(options.scriptPath.c_str(),options.packageDir.c_str()));\n\t}\n\n\tLOG(Info,\"started updater. install-dir: \" + options.installDir\n\t         + \", package-dir: \" + options.packageDir\n\t         + \", wait-pid: \" + intToStr(options.waitPid)\n\t         + \", script-path: \" + options.scriptPath\n\t         + \", mode: \" + intToStr(options.mode));\n\n\tinstaller.setMode(options.mode);\n\tinstaller.setInstallDir(options.installDir);\n\tinstaller.setPackageDir(options.packageDir);\n\tinstaller.setScript(&script);\n\tinstaller.setWaitPid(options.waitPid);\n\tinstaller.setForceElevated(options.forceElevated);\n\tinstaller.setAutoClose(options.autoClose);\n\n\tif (options.mode == UpdateInstaller::Main)\n\t{\n\t\tLOG(Info, \"Showing updater UI - auto close? \" + intToStr(options.autoClose));\n\t\tstd::unique_ptr<UpdateDialog> dialog(createUpdateDialog());\n\t\tdialog->setAutoClose(options.autoClose);\n\t\tdialog->init(argc, argv);\n\t\tinstaller.setObserver(dialog.get());\n\t\ttthread::thread updaterThread(runUpdaterThread, &installer);\n\t\tdialog->exec();\n\t\tupdaterThread.join();\n\t}\n\telse\n\t{\n\t\tinstaller.run();\n\t}\n\n#ifdef PLATFORM_MAC\n\tUpdateDialogCocoa::releaseAutoreleasePool(pool);\n#endif\n\n\treturn 0;\n}\n\nUpdateDialog* createUpdateDialog()\n{\n#if defined(PLATFORM_WINDOWS)\n\treturn new UpdateDialogWin32();\n#elif defined(PLATFORM_MAC)\n\treturn new UpdateDialogCocoa();\n#elif defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD)\n\tUpdateDialog* dialog = UpdateDialogGtkFactory::createDialog();\n\tif (!dialog)\n\t{\n\t\tdialog = new UpdateDialogAscii();\n\t}\n\treturn dialog;\n#endif\n}\n\n#ifdef PLATFORM_WINDOWS\n// application entry point under Windows\nint CALLBACK WinMain(HINSTANCE hInstance,\n                     HINSTANCE hPrevInstance,\n                     LPSTR lpCmdLine,\n                     int nCmdShow)\n{\n\tint argc = 0;\n\tchar** argv;\n\tProcessUtils::convertWindowsCommandLine(GetCommandLineW(),argc,argv);\n\treturn main(argc,argv);\n}\n#endif\n"
  },
  {
    "path": "src/resources/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n    <!-- Note - The name of the application specified here must match the value\n\t     returned by AppInfo::name()\n\t !-->\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>English</string>\n\t<key>CFBundleExecutable</key>\n\t<string>Mendeley Updater</string>\n\t<key>CFBundleIconFile</key>\n\t<string>Mendeley Updater.icns</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>org.mendeley.MendeleyUpdater</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.0</string>\n\t<key>NSMainNibFile</key>\n\t<string>MainMenu</string>\n\t<key>NSPrincipalClass</key>\n\t<string>NSApplication</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>10.5</string>\n\t<key>LSMinimumSystemVersionByArchitecture</key>\n\t<dict>\n\t\t<key>i386</key>\n\t\t<string>10.5.0</string>\n\t\t<key>x86_64</key>\n\t\t<string>10.5.0</string>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "src/resources/create-version-info.bat",
    "content": "set VERSION=\"1.0\"\nset FILEDESCR=/s desc \"Software update utility.\"\nset BUILDINFO=/s pb \"Built by Robert Knight\"\nset COMPINFO=/s company \"Mendeley Ltd.\" /s (c) \"(C) Mendeley Ltd. 2011\"\nset PRODINFO=/s product \"Mendeley Software Updater\" /pv \"1.0\"\n\nverpatch /vo /xi updater.exe %VERSION% %FILEDESCR% %COMPINFO% %PRODINFO% %BUILDINFO%"
  },
  {
    "path": "src/resources/updater.rc",
    "content": "IDI_APPICON\t\tICON\t\tDISCARDABLE\t\"updater.ico\"\n\n1       VERSIONINFO\nFILEVERSION     0,0,1,0\nPRODUCTVERSION  1,0,1,0\nFILEFLAGSMASK   0X3FL\nFILEFLAGS       0X8L\nFILEOS          0X40004L\nFILETYPE        0X1\nFILESUBTYPE     0\nBEGIN\n        BLOCK \"StringFileInfo\"\n        BEGIN\n                BLOCK \"000004b0\"\n                BEGIN\n                        VALUE \"FileVersion\", \"0.0.1.0\"\n                        VALUE \"ProductVersion\", \"1.0.1.0\"\n                        VALUE \"OriginalFilename\", \"updater.exe\"\n                        VALUE \"InternalName\", \"updater.exe\"\n                        VALUE \"FileDescription\", \"Software Update Tool\"\n                        VALUE \"CompanyName\", \"Mendeley Ltd.\"\n                        VALUE \"LegalCopyright\", \"(C) Mendeley Ltd. 2011\"\n                        VALUE \"ProductName\", \"Mendeley Software Updater\"\n                        VALUE \"PrivateBuild\", \"Built by Robert Knight\"\n                END\n        END\n        BLOCK \"VarFileInfo\"\n        BEGIN\n                VALUE \"Translation\", 0x0000, 0x04b0\n        END\nEND"
  },
  {
    "path": "src/tests/CMakeLists.txt",
    "content": "\ninclude_directories(\"${CMAKE_CURRENT_SOURCE_DIR}/..\")\n\n# Create helper binaries for unit tests\nadd_executable(oldapp\n  old_app.cpp\n)\nadd_executable(newapp\n  new_app.cpp\n)\n\n# Install data files required by unit tests\nset(TEST_FILES\n  file_list.xml\n  v2_file_list.xml\n  test-update.rb\n)\n\nforeach(TEST_FILE ${TEST_FILES})\n  execute_process(\n    COMMAND\n\t\"${CMAKE_COMMAND}\" -E copy_if_different \"${CMAKE_CURRENT_SOURCE_DIR}/${TEST_FILE}\" \"${CMAKE_CURRENT_BINARY_DIR}\"\n  )\nendforeach()\n\n# Add unit test binaries\nmacro(ADD_UPDATER_TEST CLASS)\n  set(TEST_TARGET updater_${CLASS})\n  add_executable(${TEST_TARGET} ${CLASS}.cpp)\n  target_link_libraries(${TEST_TARGET} updatershared)\n  add_test(${TEST_TARGET} ${TEST_TARGET})\n  if (APPLE)\n\t  set_target_properties(${TEST_TARGET} PROPERTIES LINK_FLAGS \"-framework Security -framework Cocoa\")\n  endif()\nendmacro()\n\nadd_updater_test(TestUpdateScript)\nadd_updater_test(TestUpdaterOptions)\nadd_updater_test(TestFileUtils)\n\n# Add updater that that performs a complete update install\n# and checks the result\nfind_program(RUBY_BIN ruby)\nadd_test(updater_TestUpdateInstall ${RUBY_BIN} test-update.rb)\n  \n"
  },
  {
    "path": "src/tests/TestFileUtils.cpp",
    "content": "#include \"TestFileUtils.h\"\n\n#include \"FileUtils.h\"\n#include \"TestUtils.h\"\n\nvoid TestFileUtils::testDirName()\n{\n#ifdef PLATFORM_WINDOWS\n\tstd::string dirName = FileUtils::dirname(\"E:/Some Dir/App.exe\");\n\tTEST_COMPARE(dirName,\"E:/Some Dir/\");\n#endif\n}\n\nvoid TestFileUtils::testIsRelative()\n{\n#ifdef PLATFORM_WINDOWS\n\tTEST_COMPARE(FileUtils::isRelative(\"temp\"),true);\n\tTEST_COMPARE(FileUtils::isRelative(\"D:/temp\"),false);\n\tTEST_COMPARE(FileUtils::isRelative(\"d:/temp\"),false);\n#else\n\tTEST_COMPARE(FileUtils::isRelative(\"/tmp\"),false);\n\tTEST_COMPARE(FileUtils::isRelative(\"tmp\"),true);\n#endif\n}\n\nvoid TestFileUtils::testSymlinkFileExists()\n{\n#ifdef PLATFORM_UNIX\n\tconst char* linkName = \"link-name\";\n\tFileUtils::removeFile(linkName);\n\tFileUtils::createSymLink(linkName, \"target-that-does-not-exist\");\n\tTEST_COMPARE(FileUtils::fileExists(linkName), true);\n#endif\n}\n\nvoid TestFileUtils::testStandardDirs()\n{\n\tstd::string tmpDir = FileUtils::tempPath();\n\tTEST_COMPARE(FileUtils::fileExists(tmpDir.data()), true);\n}\n\nvoid TestFileUtils::testRemoveEmptyDirs()\n{\n\tstd::string tmpDir = FileUtils::tempPath();\n\tstd::string rootDir = tmpDir + \"/TestFileUtils-testRemoveEmptyDirs\";\n\tstd::string content = \"non-empty-file-content\";\n\n\tFileUtils::mkpath((rootDir + \"/nested/empty/dir\").c_str());\n\tFileUtils::mkpath((rootDir + \"/nested/empty2/dir\").c_str());\n\tFileUtils::writeFile((rootDir + \"/nonempty.txt\").c_str(), content.c_str(), content.size());\n\tFileUtils::removeEmptyDirs(rootDir.c_str());\n\n\t// root dir and the regular file should still exist\n\tTEST_COMPARE(FileUtils::fileExists(rootDir.c_str()), true);\n\tTEST_COMPARE(FileUtils::fileExists((rootDir + \"/nonempty.txt\").c_str()), true);\n\n\t// the empty nested directories should have been removed\n\tTEST_COMPARE(FileUtils::fileExists((rootDir + \"/nested\").c_str()), true);\n}\n\nint main(int,char**)\n{\n\tTestList<TestFileUtils> tests;\n\ttests.addTest(&TestFileUtils::testDirName);\n\ttests.addTest(&TestFileUtils::testIsRelative);\n\ttests.addTest(&TestFileUtils::testSymlinkFileExists);\n\ttests.addTest(&TestFileUtils::testStandardDirs);\n\treturn TestUtils::runTest(tests);\n}\n"
  },
  {
    "path": "src/tests/TestFileUtils.h",
    "content": "#pragma once\n\nclass TestFileUtils\n{\n\tpublic:\n\t\tvoid testDirName();\n\t\tvoid testIsRelative();\n\t\tvoid testSymlinkFileExists();\n\t\tvoid testStandardDirs();\n\t\tvoid testRemoveEmptyDirs();\n};\n"
  },
  {
    "path": "src/tests/TestUpdateScript.cpp",
    "content": "#include \"TestUpdateScript.h\"\n\n#include \"TestUtils.h\"\n#include \"UpdateScript.h\"\n\n#include <iostream>\n#include <algorithm>\n\nvoid TestUpdateScript::testV2Script()\n{\n\tUpdateScript newFormat;\n\tUpdateScript oldFormat;\n\n\tnewFormat.parse(\"file_list.xml\");\n\toldFormat.parse(\"v2_file_list.xml\");\n\n\tTEST_COMPARE(newFormat.dependencies(),oldFormat.dependencies());\n\tTEST_COMPARE(newFormat.packages(),oldFormat.packages());\n\tTEST_COMPARE(newFormat.filesToInstall(),oldFormat.filesToInstall());\n\tTEST_COMPARE(newFormat.filesToUninstall(),oldFormat.filesToUninstall());\n}\n\nvoid TestUpdateScript::testPermissions()\n{\n\tUpdateScript script;\n\tscript.parse(\"file_list.xml\");\n\n\tfor (std::vector<UpdateScriptFile>::const_iterator iter = script.filesToInstall().begin();\n\t     iter != script.filesToInstall().end();\n\t     iter++)\n\t{\n\t\tif (iter->isMainBinary)\n\t\t{\n\t\t\tTEST_COMPARE(iter->permissions,0755);\n\t\t}\n\t\tif (!iter->linkTarget.empty())\n\t\t{\n\t\t\tTEST_COMPARE(iter->permissions,0);\n\t\t}\n\t}\n}\n\nint main(int,char**)\n{\n\tTestList<TestUpdateScript> tests;\n\ttests.addTest(&TestUpdateScript::testV2Script);\n\ttests.addTest(&TestUpdateScript::testPermissions);\n\treturn TestUtils::runTest(tests);\n}\n\n"
  },
  {
    "path": "src/tests/TestUpdateScript.h",
    "content": "#pragma once\n\nclass TestUpdateScript\n{\n\tpublic:\n\t\tvoid testV2Script();\n\t\tvoid testPermissions();\n};\n\n"
  },
  {
    "path": "src/tests/TestUpdaterOptions.cpp",
    "content": "#include \"TestUpdaterOptions.h\"\n\n#include \"FileUtils.h\"\n#include \"Platform.h\"\n#include \"TestUtils.h\"\n#include \"UpdaterOptions.h\"\n\n#include <string.h>\n#include <stdlib.h>\n\nvoid TestUpdaterOptions::testOldFormatArgs()\n{\n\tconst int argc = 6;\n\tchar* argv[argc];\n\targv[0] = strdup(\"updater\");\n\n\tstd::string currentDir(\"CurrentDir=\");\n\tconst char* appDir = 0;\n\n\t// CurrentDir is the path to the directory containing the main\n\t// Mendeley Desktop binary, on Linux and Mac this differs from\n\t// the root of the install directory\n#if defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD)\n\tappDir = \"/tmp/path-to-app/lib/mendeleydesktop/libexec/\";\n\tFileUtils::mkpath(appDir);\n#elif defined(PLATFORM_MAC)\n\tappDir = \"/tmp/path-to-app/Contents/MacOS/\";\n\tFileUtils::mkpath(appDir);\n#elif defined(PLATFORM_WINDOWS)\n\tappDir = \"C:/path/to/app/\";\n#endif\n\tcurrentDir += appDir;\n\n\targv[1] = strdup(currentDir.c_str());\n\targv[2] = strdup(\"TempDir=/tmp/updater\");\n\targv[3] = strdup(\"UpdateScriptFileName=/tmp/updater/file_list.xml\");\n\targv[4] = strdup(\"AppFileName=/path/to/app/theapp\");\n\targv[5] = strdup(\"PID=123456\");\n\n\tUpdaterOptions options;\n\toptions.parse(argc,argv);\n\n\tTEST_COMPARE(options.mode,UpdateInstaller::Setup);\n#if defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD)\n\tTEST_COMPARE(options.installDir,\"/tmp/path-to-app\");\n#elif defined(PLATFORM_MAC)\n\t// /tmp is a symlink to /private/tmp on Mac\n\tTEST_COMPARE(options.installDir,\"/private/tmp/path-to-app\");\n#else\n\tTEST_COMPARE(options.installDir,\"C:/path/to/app/\");\n#endif\n\tTEST_COMPARE(options.packageDir,\"/tmp/updater\");\n\tTEST_COMPARE(options.scriptPath,\"/tmp/updater/file_list.xml\");\n\tTEST_COMPARE(options.waitPid,123456);\n\n\tfor (int i=0; i < argc; i++)\n\t{\n\t\tfree(argv[i]);\n\t}\n}\n\nint main(int,char**)\n{\n\tTestList<TestUpdaterOptions> tests;\n\ttests.addTest(&TestUpdaterOptions::testOldFormatArgs);\n\treturn TestUtils::runTest(tests);\n}\n\n"
  },
  {
    "path": "src/tests/TestUpdaterOptions.h",
    "content": "#pragma once\n\nclass TestUpdaterOptions\n{\n\tpublic:\n\t\tvoid testOldFormatArgs();\n};\n\n"
  },
  {
    "path": "src/tests/TestUtils.h",
    "content": "#pragma once\n\n#include <iostream>\n#include <functional>\n#include <string>\n#include <vector>\n\ntemplate <class T>\nclass TestList\n{\n\tpublic:\n\t\tvoid addTest(void (T::*test)())\n\t\t{\n\t\t\tm_tests.push_back(std::mem_fun(test));\n\t\t}\n\n\t\tint size() const\n\t\t{\n\t\t\treturn m_tests.size();\n\t\t}\n\n\t\tvoid runTest(T* testInstance, int i)\n\t\t{\n\t\t\tm_tests.at(i)(testInstance);\n\t\t}\n\n\tprivate:\n\t\tstd::vector<std::mem_fun_t<void,T> > m_tests;\n};\n\nclass TestUtils\n{\n\tpublic:\n\t\ttemplate <class X, class Y>\n\t\tstatic void compare(const X& x, const Y& y, const char* xString, const char* yString)\n\t\t{\n\t\t\tif (x != y)\n\t\t\t{\n\t\t\t\tthrow \"Actual and expected values differ.  \"\n\t\t\t\t      \"Actual: \" + toString(x,xString) +\n\t\t\t\t      \" Expected: \" + toString(y,yString);\n\t\t\t}\n\t\t}\n\n\t\ttemplate <typename T>\n\t\tstatic std::string toString(T value, const char* context)\n\t\t{\n\t\t\treturn \"Unprintable: \" + std::string(context);\n\t\t}\n\n\t\ttemplate <class T>\n\t\tstatic int runTest(class TestList<T>& tests) throw ()\n\t\t{\n\t\t\tstd::string errorText;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tT testInstance;\n\t\t\t\tfor (int i=0; i < tests.size(); i++)\n\t\t\t\t{\n\t\t\t\t\ttests.runTest(&testInstance,i);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (const std::exception& ex)\n\t\t\t{\n\t\t\t\terrorText = ex.what();\n\t\t\t}\n\t\t\tcatch (const std::string& error)\n\t\t\t{\n\t\t\t\terrorText = error;\n\t\t\t}\n\t\t\tcatch (...)\n\t\t\t{\n\t\t\t\terrorText = \"Unknown exception\";\n\t\t\t}\n\n\t\t\tif (errorText.empty())\n\t\t\t{\n\t\t\t\tstd::cout << \"Test passed\" << std::endl;\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tstd::cout << \"Test failed: \" << errorText << std::endl;\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t}\n};\n\ntemplate <>\ninline std::string TestUtils::toString(const std::string& value, const char*)\n{\n\treturn value;\n}\ntemplate <>\ninline std::string TestUtils::toString(std::string value, const char*)\n{\n\treturn value;\n}\ntemplate <>\ninline std::string TestUtils::toString(const char* value, const char*)\n{\n\treturn value;\n}\n\n#define TEST_COMPARE(x,y) \\\n\tTestUtils::compare(x,y,#x,#y);\n\n\n"
  },
  {
    "path": "src/tests/file_list.xml",
    "content": "<?xml version=\"1.0\"?>\n<update version=\"3\">\n <targetVersion>2.0</targetVersion>\n <platform>Test</platform>\n <dependencies>\n   <!-- The new updater is standalone and has no dependencies,\n        except for standard system libraries.\n    !-->\n </dependencies>\n <packages>\n  <package>\n   <name>app-pkg</name>\n   <hash>$APP_PACKAGE_HASH</hash>\n   <size>$APP_PACKAGE_SIZE</size>\n   <source>http://some/dummy/URL</source>\n  </package>\n </packages>\n <install>\n  <file>\n   <name>$APP_FILENAME</name>\n   <hash>$UPDATED_APP_HASH</hash>\n   <size>$UPDATED_APP_SIZE</size>\n   <permissions>0755</permissions>\n   <package>app-pkg</package>\n   <is-main-binary>true</is-main-binary>\n  </file>\n  <file>\n   <name>$UPDATER_FILENAME</name>\n   <hash>$UPDATER_HASH</hash>\n   <size>$UPDATER_SIZE</size>\n   <permissions>0755</permissions>\n  </file>\n  <!-- Test symlink !-->\n  <file>\n   <name>test-dir/app-symlink</name>\n   <target>../app</target>\n  </file>\n  <!-- Test file in new directory !-->\n  <file>\n   <name>new-dir/new-dir2/new-file.txt</name>\n   <hash>$TEST_FILENAME</hash>\n   <size>$TEST_SIZE</size>\n   <package>app-pkg</package>\n   <permissions>0644</permissions>\n  </file>\n </install>\n <uninstall>\n  <file>file-to-uninstall.txt</file>\n  <file>symlink-to-file-to-uninstall.txt</file>\n  <file>will-become-empty-after-update/nested/file-to-uninstall.txt</file>\n </uninstall>\n</update>\n"
  },
  {
    "path": "src/tests/new_app.cpp",
    "content": "#include <iostream>\n\nint main(int,char**)\n{\n\tstd::cout << \"new app starting\" << std::endl;\n\treturn 0;\n}\n\n"
  },
  {
    "path": "src/tests/old_app.cpp",
    "content": "#include <iostream>\n\nint main(int,char**)\n{\n\tstd::cout << \"old app starting\" << std::endl;\n\treturn 0;\n}\n"
  },
  {
    "path": "src/tests/test-update.rb",
    "content": "#!/usr/bin/ruby\n\nrequire 'fileutils.rb'\nrequire 'find'\nrequire 'rbconfig'\nrequire 'optparse'\n\n# Install directory - this contains a space to check\n# for correct escaping of paths when passing comamnd\n# line arguments under Windows\nINSTALL_DIR = File.expand_path(\"install dir/\")\nPACKAGE_DIR = File.expand_path(\"package-dir/\")\nPACKAGE_SRC_DIR = File.expand_path(\"package-src-dir/\")\nIS_WINDOWS = RbConfig::CONFIG['host_os'] =~ /mswin|mingw/\n\nif IS_WINDOWS\n\tOLDAPP_NAME = \"oldapp.exe\"\n\tNEWAPP_NAME = \"newapp.exe\"\n\tAPP_NAME = \"app.exe\"\n\tUPDATER_NAME = \"updater.exe\"\n\tZIP_TOOL = File.expand_path(\"../zip-tool.exe\")\nelse\n\tOLDAPP_NAME = \"oldapp\"\n\tNEWAPP_NAME = \"newapp\"\n\tAPP_NAME = \"app\"\n\tUPDATER_NAME = \"updater\"\n\tZIP_TOOL = File.expand_path(\"../zip-tool\")\nend\n\nfile_list_vars = {\n  \"APP_FILENAME\" => APP_NAME,\n  \"UPDATER_FILENAME\" => UPDATER_NAME\n}\n\ndef replace_vars(src_file,dest_file,vars)\n\tcontent = File.read(src_file)\n\tvars.each do |key,value|\n\t\tcontent.gsub! \"$#{key}\",value\n\tend\n\tFile.open(dest_file,'w') do |file|\n\t\tfile.print content\n\tend\nend\n\n# Returns true if |src_file| and |dest_file| have the same contents, type\n# and permissions or false otherwise\ndef compare_files(src_file, dest_file)\n\tif File.ftype(src_file) != File.ftype(dest_file)\n\t\t$stderr.puts \"Type of file #{src_file} and #{dest_file} differ\"\n\t\treturn false\n\tend\n\n\tif File.file?(src_file) && !FileUtils.identical?(src_file, dest_file)\n\t\t$stderr.puts \"Contents of file #{src_file} and #{dest_file} differ\"\n\t\treturn false\n\tend\n\n\tsrc_stat = File.stat(src_file)\n\tdest_stat = File.stat(dest_file)\n\n\tif src_stat.mode != dest_stat.mode\n\t\t$stderr.puts \"Permissions of #{src_file} and #{dest_file} differ\"\n\t\treturn false\n\tend\n\n\treturn true\nend\n\n# Compares the contents of two directories and returns a map of (file path => change type)\n# for files and directories which differ between the two\ndef compare_dirs(src_dir, dest_dir)\n\tsrc_dir += '/' if !src_dir.end_with?('/')\n\tdest_dir += '/' if !dest_dir.end_with?('/')\n\n\tsrc_file_map = {}\n\tFind.find(src_dir) do |src_file|\n\t\tsrc_file = src_file[src_dir.length..-1]\n\t\tsrc_file_map[src_file] = nil\n\tend\n\n\tchange_map = {}\n\tFind.find(dest_dir) do |dest_file|\n\t\tdest_file = dest_file[dest_dir.length..-1]\n\n\t\tif !src_file_map.include?(dest_file)\n\t\t\tchange_map[dest_file] = :deleted\n\t\telsif !compare_files(\"#{src_dir}/#{dest_file}\", \"#{dest_dir}/#{dest_file}\")\n\t\t\tchange_map[dest_file] = :updated\n\t\tend\n\n\t\tsrc_file_map.delete(dest_file)\n\tend\n\n\tsrc_file_map.each do |file|\n\t\tchange_map[file] = :added\n\tend\n\n\treturn change_map\nend\n\ndef create_test_file(name, content)\n\tFile.open(name, 'w') do |file|\n\t\tfile.puts content\n\tend\n\treturn name\nend\n\nforce_elevation = false\nrun_in_debugger = false\n\nOptionParser.new do |parser|\n\tparser.on(\"-f\",\"--force-elevated\",\"Force the updater to elevate itself\") do\n\t\tforce_elevation = true\n\tend\n\tparser.on(\"-d\",\"--debug\",\"Run the updater under GDB\") do\n\t\trun_in_debugger = true\n\tend\nend.parse!\n\n# copy 'src' to 'dest', preserving the attributes\n# of 'src'\ndef copy_file(src, dest)\n\tFileUtils.cp src, dest, :preserve => true\nend\n\n# Remove the install and package dirs if they\n# already exist\nFileUtils.rm_rf(INSTALL_DIR)\nFileUtils.rm_rf(PACKAGE_DIR)\nFileUtils.rm_rf(PACKAGE_SRC_DIR)\n\n# Create the install directory with the old app\nDir.mkdir(INSTALL_DIR)\ncopy_file OLDAPP_NAME, \"#{INSTALL_DIR}/#{APP_NAME}\"\n\n# Create a dummy file to uninstall\nuninstall_test_file = create_test_file(\"#{INSTALL_DIR}/file-to-uninstall.txt\", \"this file should be removed after the update\")\nuninstall_test_symlink = if not IS_WINDOWS\n\tFileUtils.ln_s(\"#{INSTALL_DIR}/file-to-uninstall.txt\", \"#{INSTALL_DIR}/symlink-to-file-to-uninstall.txt\")\nelse\n\tcreate_test_file(\"#{INSTALL_DIR}/symlink-to-file-to-uninstall.txt\", \"dummy file.  this is a symlink on Unix\")\nend\n\n# Create a dummy file to uninstall in a directory\n# which becomes empty after the update\nempty_dir_path = \"#{INSTALL_DIR}/will-become-empty-after-update/nested\"\nFileUtils.mkdir_p(empty_dir_path)\ncreate_test_file(\"#{empty_dir_path}/file-to-uninstall.txt\", \"this file and its containing dir should be removed after the update\")\n\n# Populate package source dir with files to install\nDir.mkdir(PACKAGE_SRC_DIR)\nnested_dir_path = \"#{PACKAGE_SRC_DIR}/new-dir/new-dir2\"\nFileUtils.mkdir_p(nested_dir_path)\nFileUtils::chmod 0755, \"#{PACKAGE_SRC_DIR}/new-dir\"\nFileUtils::chmod 0755, \"#{PACKAGE_SRC_DIR}/new-dir/new-dir2\"\nnested_dir_test_file = \"#{nested_dir_path}/new-file.txt\"\nFile.open(nested_dir_test_file,'w') do |file|\n\tfile.puts \"this is a new file in a new nested dir\"\nend\nFileUtils::chmod 0644, nested_dir_test_file\ncopy_file NEWAPP_NAME, \"#{PACKAGE_SRC_DIR}/#{APP_NAME}\"\nFileUtils::chmod 0755, \"#{PACKAGE_SRC_DIR}/#{APP_NAME}\"\n\n# Create .zip packages from source files\nDir.mkdir(PACKAGE_DIR)\nDir.chdir(PACKAGE_SRC_DIR) do\n\tif !system(\"#{ZIP_TOOL} #{PACKAGE_DIR}/app-pkg.zip .\")\n\t\traise \"Unable to create update package\"\n\tend\nend\n\n# Copy the install script and updater to the target\n# directory\nreplace_vars(\"file_list.xml\",\"#{PACKAGE_DIR}/file_list.xml\",file_list_vars)\ncopy_file \"../#{UPDATER_NAME}\", \"#{PACKAGE_DIR}/#{UPDATER_NAME}\"\n\n# Run the updater using the new syntax\n#\n# Run the application from the install directory to\n# make sure that it looks in the correct directory for\n# the file_list.xml file and packages\n#\ninstall_path = File.expand_path(INSTALL_DIR)\nDir.chdir(INSTALL_DIR) do\n\tflags = \"--force-elevated\" if force_elevation\n\tdebug_flags = \"gdb --args\" if run_in_debugger\n\tcmd = \"#{debug_flags} #{PACKAGE_DIR}/#{UPDATER_NAME} #{flags} --install-dir \\\"#{install_path}\\\" --package-dir \\\"#{PACKAGE_DIR}\\\" --script file_list.xml --auto-close\"\n\tputs \"Running '#{cmd}'\"\n\tsystem(cmd)\nend\n\n# TODO - Correctly wait until updater has finished\nsleep(1)\n\n# Check that the app was updated\napp_path = \"#{INSTALL_DIR}/#{APP_NAME}\"\noutput = `\"#{app_path}\"`\nif (output.strip != \"new app starting\")\n\tthrow \"Updated app produced unexpected output: #{output}\"\nend\n\n# Check that the packaged dir and install dir match\ndir_diff = compare_dirs(PACKAGE_SRC_DIR, INSTALL_DIR)\nignored_files = [\"test-dir\", \"test-dir/app-symlink\", UPDATER_NAME]\nhave_unexpected_change = false\ndir_diff.each do |path, change_type|\n\tif !ignored_files.include?(path)\n\t\tcase change_type\n\t\twhen :added\n\t\t\t$stderr.puts \"File #{path} was not installed\"\n\t\twhen :changed\n\t\t\t$stderr.puts \"File #{path} differs between install and package dir\"\n\t\twhen :deleted\n\t\t\t$stderr.puts \"File #{path} was not uninstalled\"\n\t\tend\n\t\thave_unexpected_change = true\n\tend\nend\n\nif have_unexpected_change\n\tthrow \"Unexpected differences between packaging and update dir\"\nend\n\nputs \"Test passed\"\n"
  },
  {
    "path": "src/tests/v2_file_list.xml",
    "content": "<?xml version=\"1.0\"?>\n\n<!-- The v2-compatible attribute lets the update script parser\n     know that it is dealing with a script structured for backwards\n     compatibility with the MD <= 1.0 updater.\n!-->\n<update version=\"3\" v2-compatible=\"true\">\n <targetVersion>2.0</targetVersion>\n <platform>Test</platform>\n <dependencies>\n   <!-- The new updater is standalone and has no dependencies,\n        except for standard system libraries and itself.\n    !-->\n </dependencies>\n <packages>\n  <package>\n   <name>app-pkg</name>\n   <hash>$APP_PACKAGE_HASH</hash>\n   <size>$APP_PACKAGE_SIZE</size>\n   <source>http://some/dummy/URL</source>\n  </package>\n </packages>\n\n <!-- For compatibility with the update download in MD <= 1.0,\n      an <install> section lists the packages to download and\n      the real list of files to install is in the <install-v3>\n      section. !-->\n <install>\n   <!-- A duplicate of the <packages> section should appear here,\n        except that each package is listed using the same structure\n\t    as files in the install-v3/files section.\n\t!-->\n </install>\n <install-v3>\n  <file>\n   <name>$APP_FILENAME</name>\n   <hash>$UPDATED_APP_HASH</hash>\n   <size>$UPDATED_APP_SIZE</size>\n   <permissions>0755</permissions>\n   <package>app-pkg</package>\n   <is-main-binary>true</is-main-binary>\n  </file>\n  <file>\n   <name>$UPDATER_FILENAME</name>\n   <hash>$UPDATER_HASH</hash>\n   <size>$UPDATER_SIZE</size>\n   <permissions>0755</permissions>\n  </file>\n  <!-- Test symlink !-->\n  <file>\n   <name>test-dir/app-symlink</name>\n   <target>../app</target>\n  </file>\n  <!-- Test file in new directory !-->\n  <file>\n   <name>new-dir/new-dir2/new-file.txt</name>\n   <hash>$TEST_FILENAME</hash>\n   <size>$TEST_SIZE</size>\n   <package>app-pkg</package>\n   <permissions>0644</permissions>\n  </file>\n </install-v3>\n <uninstall>\n  <file>file-to-uninstall.txt</file>\n  <file>symlink-to-file-to-uninstall.txt</file>\n  <file>will-become-empty-after-update/nested/file-to-uninstall.txt</file>\n </uninstall>\n</update>\n"
  },
  {
    "path": "src/zip-tool.cpp",
    "content": "#include \"DirIterator.h\"\n#include \"Log.h\"\n#include \"FileUtils.h\"\n#include \"StringUtils.h\"\n\n#include <iostream>\n#include <vector>\n\n// Simple utility for creating zip files from the\n// contents of a directory\n//\n// The advantage of this over the 'zip' tool on Linux/Mac is consistent\n// behavior across platforms and support for Windows.\n//\n// Usage: zip-tool <archive name> <dir>\n\n// scan a directory and record paths to files that are found\nvoid scanDir(std::vector<std::string>& filesFound, const std::string& path)\n{\n\tDirIterator iter(path.c_str());\n\twhile (iter.next())\n\t{\n\t\tif (iter.isDir())\n\t\t{\n\t\t\tif (iter.fileName() == \".\" || iter.fileName() == \"..\")\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tscanDir(filesFound, iter.filePath());\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfilesFound.push_back(iter.filePath());\n\t\t}\n\t}\n}\n\nint main(int argc, char** argv)\n{\n\tif (argc < 3)\n\t{\n\t\tstd::cerr << \"Usage: \" << argv[0] << \" <archive name> <input dir>\" << std::endl << std::endl\n\t\t\t<< \"Recursively scan <input dir> and add all files found to the ZIP archive <archive name>\"\n\t\t\t<< std::endl;\n\t\treturn 1;\n\t}\n\n\tstd::string archivePath(argv[1]);\n\tstd::string inputDir(argv[2]);\n\n\ttry\n\t{\n\t\tstd::vector<std::string> paths;\n\t\tscanDir(paths, inputDir);\n\t\tfor (std::vector<std::string>::const_iterator iter = paths.begin();\n\t\t\t\titer != paths.end();\n\t\t\t\t++iter)\n\t\t{\n\t\t\tstd::string path = iter->substr(inputDir.size()+1);\n\t\t\tstd::string content = FileUtils::readFile(iter->c_str());\n\t\t\tLOG(Info, \"Adding \" + path + \" to archive \" + archivePath);\n\t\t\tFileUtils::addToZip(archivePath.c_str(), path.c_str(), content.data(), static_cast<int>(content.length()));\n\t\t}\n\t}\n\tcatch (const std::exception& ex)\n\t{\n\t\tstd::cerr << \"Creating zip file failed: \" << ex.what() << std::endl;\n\t}\n\n\treturn 0;\n}\n"
  },
  {
    "path": "tools/README",
    "content": "This directory contains a set of tools for preparing auto-updates.\n\n * create-packages.rb\n\n\tGiven a directory containing the set of files that make up a release,\n\tlaid out as they are when installed and a JSON package config file,\n\tthis tool generates a set of packages for the release\n\tand a file_list.xml listing all the files that make up the release.\n\n * config-template.json\n\n    This is a template for the config file that specifies:\n\n\t- How to partition the files that make up an installed application\n\t  into packages.\n\t- The path of the main binary to run after the update completes\n\t- The name of the updater binary to download as part of the update\n\n    This is the simplest possible package configuration, where all files for\n\ta release are placed in a single package.  This means that the whole\n\tpackage will need to be downloaded to install the update.\n"
  },
  {
    "path": "tools/config-template.js",
    "content": "{\n\t\"packages\" : {\n\t\t// a single package which contains all files for the application\n\t\t\"app\" : [\n\t\t\t\".*\"\n\t\t],\n\t},\n\t\n\t// the name of the updater binary - this will be listed as\n\t// a dependency of the update process\n\t\"updater-binary\" : \"updater\",\n\n\t// the name of the main binary to launch when the\n\t// application starts\n\t\"main-binary\" : \"myapp\"\n}\n"
  },
  {
    "path": "tools/create-packages.rb",
    "content": "#!/usr/bin/ruby\n\nrequire 'digest/sha1'\nrequire 'fileutils'\nrequire 'rubygems'\nrequire 'find'\nrequire 'json'\nrequire 'rexml/document'\nrequire 'optparse'\n\n# syntax:\n#\n# create-packages.rb <input directory> <config file> <output directory>\n#\n#  Takes the set of files that make up a release and splits them up into\n#  a set of .zip packages along with a file_list.xml file listing all\n#  the files in the release and mapping them to their respective\n#  packages.\n#\n#  Outputs:\n#\n#   <output-dir>/$PACKAGE_NAME.zip\n#     These are packages containing the files in this version of the software.\n#\n#   <output-dir>/file_list.xml\n#     This file lists all the files contained in this version of the software and\n#     the packages which they are contained in.\n#\n#   <output-dir>/$UPDATER_BINARY\n#     The standalone auto-update installer binary.  This is not compressed so that\n#     it can be downloaded and executed directly.\n#\n\n# Represents a group of updates in a release\nclass UpdateScriptPackage\n\t# name - The name of the package (without any extension)\n\t# hash - The SHA-1 hash of the package\n\t# size - The size of the package in bytes\n\tattr_reader :name,:hash,:size\n\tattr_writer :name,:hash,:size\nend\n\n# Represents a single file in a release\nclass UpdateScriptFile\n\t# path - The path of the file relative to the installation directory\n\t# hash - The SHA-1 hash of the file\n\t# permissions - The permissions of the file (See File::stat)\n\t# size - The size of the file in bytes\n\t# package - The name of the package containing this file\n\tattr_reader :path,:hash,:permissions,:size,:package,:target,:is_main_binary\n\tattr_writer :path,:hash,:permissions,:size,:package,:target,:is_main_binary\nend\n\n# Utility method - convert a hash map to an REXML element\n#\n# Hash keys are converted to elements and hash values either\n# to text contents or child elements (if the value is a Hash)\n#\n# 'root' - the root REXML::Element\n# 'map' - a hash mapping element names to text contents or\n#         hash maps\n#\ndef hash_to_xml(root,map)\n\tmap.each do |key,value|\n\t\telement = REXML::Element.new(key)\n\t\tif value.instance_of?(String)\n\t\t\telement.text = value.dup\n\t\telsif value.instance_of?(Hash)\n\t\t\thash_to_xml(element,value)\n\t\telsif !value.nil?\n\t\t\traise \"Unsupported value type #{value.class}\"\n\t\tend\n\t\troot.add_element element\n\tend\n\treturn root\nend\n\ndef strip_prefix(string,prefix)\n\tif (!string.start_with?(prefix))\n\t\traise \"String does not start with prefix\"\n\tend\n\treturn string.sub(prefix,\"\")\nend\n\ndef file_sha1(path)\n\tDigest::SHA1.file(path).to_s\nend\n\nclass UpdateScriptGenerator\n\n\t# target_version - The version string for the build in this update\n\t# platform - The platform which this build is for\n\t# input_dir - The directory containing files that make up the install\n\t# output_dir - The directory containing the generated packages\n\t# package_config - The PackageConfig specifying the file -> package map\n\t#                  for the application and other config options\n\t# file_list - A list of all files in 'input_dir' which make up the install\n\t# package_file_map - A map of (package name -> [paths of files in this package])\n\n\tdef initialize(target_version,\n\t               platform,\n\t               input_dir,\n\t               output_dir,\n\t               package_config,\n\t               file_list,\n\t               package_file_map)\n\n\t\t@target_version = target_version\n\t\t@platform = platform\n\t\t@config = package_config\n\n\t\t# List of files to install in this version\n\t\t@files_to_install = []\n\t\tfile_list.each do |path|\n\t\t\tfile = UpdateScriptFile.new\n\t\t\tfile.path = strip_prefix(path,input_dir)\n\n\t\t\tif (File.basename(path) == @config.updater_binary)\n\t\t\t\t# for the updater binary, use the possibly substituted\n\t\t\t\t# version in the output directory\n\t\t\t\tpath = \"#{output_dir}/#{@config.updater_binary}\"\t\n\t\t\tend\n\n\t\t\tfile.is_main_binary = (file.path == package_config.main_binary)\n\t\t\t\n\t\t\tif (File.symlink?(path))\n\t\t\t\tfile.target = File.readlink(path)\n\t\t\telse\n\t\t\t\tfile.hash = file_sha1(path)\n\t\t\t\tfile.permissions = File.stat(path).mode\n\t\t\t\tfile.size = File.size(path)\n\t\t\t\tfile.package = @config.package_for_file(file.path)\n\n\t\t\t\tif (!file.package)\n\t\t\t\t\traise \"Could not find package for file #{file.path}\"\n\t\t\t\tend\n\t\t\tend\n\n\t\t\t@files_to_install << file\n\t\tend\n\n\t\t# List of packages containing files for this version\n\t\t@packages = []\n\t\tpackage_file_map.each do |package_name,files|\n\t\t\tif (package_name == @config.updater_binary)\n\t\t\t\tpath = \"#{output_dir}/#{package_name}\"\n\t\t\telse\n\t\t\t\tpath = \"#{output_dir}/#{package_name}.zip\"\n\t\t\tend\n\n\t\t\tpackage = UpdateScriptPackage.new\n\t\t\tpackage.name = package_name\n\t\t\tpackage.size = File.size(path)\n\t\t\tpackage.hash = file_sha1(path)\n\t\t\t@packages << package\n\t\tend\n\tend\n\n\tdef to_xml()\n\t\tdoc = REXML::Document.new\n\t\tupdate_elem = REXML::Element.new(\"update\")\n\t\tdoc.add_element update_elem\n\n\t\tversion_elem = REXML::Element.new(\"targetVersion\")\n\t\tversion_elem.text = @target_version\n\n\t\tplatform_elem = REXML::Element.new(\"platform\")\n\t\tplatform_elem.text = @platform\n\n\t\tupdate_elem.add_attribute(\"version\",\"3\")\n\t\tupdate_elem.add_element version_elem\n\t\tupdate_elem.add_element platform_elem\n\t\tupdate_elem.add_element deps_to_xml()\n\t\tupdate_elem.add_element packages_to_xml()\n\t\tupdate_elem.add_element install_to_xml()\n\n\t\toutput = \"\"\n\t\tdoc.write output\n\t\treturn output\n\tend\n\n\tdef deps_to_xml()\n\t\tdeps_elem = REXML::Element.new(\"dependencies\")\n\t\tdependency = @config.updater_binary\n\t\tdep_elem = REXML::Element.new(\"file\")\n\t\tdep_elem.text = dependency\n\t\tdeps_elem.add_element dep_elem\n\t\treturn deps_elem\n\tend\n\n\tdef packages_to_xml()\n\t\tpackages_elem = REXML::Element.new(\"packages\")\n\t\t@packages.each do |package|\n\t\t\tpackage_elem = REXML::Element.new(\"package\")\n\t\t\tpackages_elem.add_element package_elem\n\t\t\thash_to_xml(package_elem,{\n\t\t\t\t\"name\" => package.name,\n\t\t\t\t\"size\" => package.size.to_s,\n\t\t\t\t\"hash\" => package.hash\n\t\t\t})\n\t\tend\n\t\treturn packages_elem\n\tend\n\n\tdef install_to_xml()\n\t\tinstall_elem = REXML::Element.new(\"install\")\n\t\t@files_to_install.each do |file|\n\t\t\tfile_elem = REXML::Element.new(\"file\")\n\t\t\tinstall_elem.add_element(file_elem)\n\n\t\t\tattributes = {\"name\" => file.path}\n\t\t\tif (file.target)\n\t\t\t\tattributes[\"target\"] = file.target\n\t\t\telse\n\t\t\t\tattributes[\"size\"] = file.size.to_s\n\t\t\t\tattributes[\"permissions\"] = file_mode_string(file.permissions)\n\t\t\t\tattributes[\"hash\"] = file.hash\n\t\t\t\tattributes[\"package\"] = file.package\n\t\t\tend\n\n\t\t\tif (file.is_main_binary)\n\t\t\t\tattributes[\"is-main-binary\"] = \"true\"\n\t\t\tend\n\n\t\t\thash_to_xml(file_elem,attributes)\n\t\tend\n\t\treturn install_elem\n\tend\n\n\tdef file_mode_string(mode)\n\t\tmode_octal = (mode & 0777).to_s(8)\n\t\treturn \"0#{mode_octal}\"\n\tend\nend\n\nclass PackageConfig\n\tattr_reader :main_binary, :updater_binary\n\n\tdef initialize(map_file)\n\t\t@rule_map = {}\n\t\tconfig_json = JSON.parse(File.read(map_file))\n\t\tconfig_json[\"packages\"].each do |package,rules|\n\t\t\trules.each do |rule|\n\t\t\t\trule_regex = Regexp.new(\"^#{rule}\")\n\t\t\t\t@rule_map[rule_regex] = package\n\t\t\tend\n\t\tend\n\n\t\t@main_binary = config_json[\"main-binary\"]\n\t\t@updater_binary = config_json[\"updater-binary\"]\n\tend\n\n\tdef is_updater(file)\n\t\treturn File.basename(file) == @updater_binary\n\tend\n\n\tdef package_for_file(file)\n\t\tmatch = nil\n\t\t@rule_map.each do |rule,package|\n\t\t\tif (file =~ rule)\n\t\t\t\tif match && match != package\n\t\t\t\t\traise \"Multiple packages match file #{file} - found '#{match}' and '#{package}'\"\n\t\t\t\tend\n\t\t\t\tmatch = package\n\t\t\tend\n\t\tend\n\t\treturn match\n\tend\nend\n\nupdater_binary_input_path = nil\ntarget_version = nil\ntarget_platform = nil\nzip_flags = nil\n\nOptionParser.new do |parser|\n\tparser.banner = \"#{$0} [options] <input dir> <config file> <output dir>\"\n\tparser.on(\"-u\",\"--updater [updater binary]\",\"Specifies the updater binary to use\") do |updater|\n\t\tupdater_binary_input_path = updater\n\tend\n\tparser.on(\"-v\",\"--version [version]\",\"Specifies the target version string for this update\") do |version|\n\t\ttarget_version = version\n\tend\n\tparser.on(\"-p\",\"--platform [platform]\",\"Specifies the target platform for this update\") do |platform|\n\t\ttarget_platform = platform\n\tend\n\tparser.on(nil,\"--bzip2\",\"Use bzip2 compression (requires that 'zip' supports the -Z bz2 argument)\") do\n\t\tzip_flags = \"-Z bzip2\"\n\tend\nend.parse!\n\nraise \"Platform not specified (use -p option)\" if !target_platform\nraise \"Target version not specified (use -v option)\" if !target_version\n\nif ARGV.length < 3\n\traise \"Missing arguments\"\nend\n\ninput_dir = ARGV[0]\npackage_map_file = ARGV[1]\noutput_dir = ARGV[2]\n\nFileUtils.mkpath(output_dir)\n\n# get the details of each input file\ninput_file_list = []\nFind.find(input_dir) do |path|\n\tnext if (File.directory?(path) && !File.symlink?(path))\n\tinput_file_list << path\nend\n\n# map each input file to a corresponding package\n\n# read the package map\npackage_config = PackageConfig.new(package_map_file)\n\n# map of package name -> array of files\npackage_file_map = {}\n\ninput_file_list.each do |file|\n\tnext if File.symlink?(file)\n\n\trelative_file = strip_prefix(file,input_dir)\n\tpackage = package_config.package_for_file(relative_file)\n\tif (!package)\n\t\traise \"Unable to find package for file #{file}\"\n\tend\n\tpackage_file_map[package] = [] if !package_file_map[package]\n\tpackage_file_map[package] << file\nend\n\n# generate each package\npackage_file_map.each do |package,files|\n\tputs \"Generating package #{package}\"\n\n\tquoted_files = []\n\tfiles.each do |file|\n\t\t# do not package the updater binary into a zip file -\n\t\t# it must be downloaded uncompressed\n\t\tif package_config.is_updater(file)\n\t\t\tif (!updater_binary_input_path)\n\t\t\t\tupdater_binary_input_path = file\n\t\t\tend\n\t\t\tnext\n\t\tend\n\t\tquoted_files << \"\\\"#{strip_prefix(file,input_dir)}\\\"\"\n\tend\n\n\tif (quoted_files.empty?)\n\t\tputs \"Skipping generation of empty package #{package}\"\n\t\tnext\n\tend\n\n\t# sort the files in alphabetical order to ensure\n\t# that if the input files for a package have the same\n\t# name and content, the resulting package will have the\n\t# same SHA-1\n\t#\n\t# This means that repeated runs of the package creation tool\n\t# on the same set of files should generated packages with the\n\t# same SHA-1\n\tquoted_files.sort! do |a,b|\n\t\ta <=> b\n\tend\n\t\n\tquoted_file_list = quoted_files.join(\" \")\n\n\toutput_path = File.expand_path(output_dir)\n\toutput_file = \"#{output_path}/#{package}.zip\"\n\n\tFile.unlink(output_file) if File.exist?(output_file)\n\n\tDir.chdir(input_dir) do\n\t\tif (!system(\"zip #{zip_flags} #{output_file} #{quoted_file_list}\"))\n\t\t\traise \"Failed to generate package #{package}\"\n\t\telse\n\t\t\tputs \"Generated package #{package} : #{file_sha1(output_file)}\"\n\t\tend\n\tend\nend\n\n# copy the updater to the output directory\nputs \"Using updater binary: #{updater_binary_input_path}\"\nif !updater_binary_input_path\n\tputs \"Updater binary not found in input directory: #{input_dir}\"\n\texit(1)\nend\n\nFileUtils.cp updater_binary_input_path, \"#{output_dir}/#{File.basename(updater_binary_input_path)}\", :preserve => true\n\n# output the file_list.xml file\nupdate_script = UpdateScriptGenerator.new(target_version,target_platform,input_dir,\n                  output_dir,package_config,input_file_list,package_file_map)\noutput_xml_file = \"#{output_dir}/file_list.unformatted.xml\"\nFile.open(output_xml_file,'w') do |file|\n\tfile.write update_script.to_xml()\nend\n\n# xmllint generates more readable formatted XML than REXML, so write unformatted\n# XML first and then format it with xmllint.\nsystem(\"xmllint --format #{output_xml_file} > #{output_dir}/file_list.xml\")\nFile.delete(output_xml_file)\n\n\n"
  }
]